detached d685499

fix(systemviews): refine history overview layout

commit
d68549983bcfd892c1ba1ac86a28d1fb4a71b42b
author
brice · · 2026-04-26 06:50 UTC
parent
95983dd
signature
GPG VerifiedCD88F9E564E0102646FB6077A1A07C7C7C3E349D · arch-gpg Verified for the committer email
5 files · +166 -110
M assets/systemviews/systemviews.css +35 -0
@@ -240,6 +240,29 @@ body {
240240 }
241241 }
242242
243+.sv-history-overview {
244+ display: grid;
245+ gap: 1rem;
246+ align-items: start;
247+}
248+
249+.sv-history-overview > .sv-section {
250+ min-width: 0;
251+ height: 100%;
252+}
253+
254+@media (min-width: 720px) {
255+ .sv-history-overview {
256+ grid-template-columns: minmax(12rem, 3.8fr) minmax(0, 6.2fr);
257+ }
258+}
259+
260+@media (min-width: 900px) {
261+ .sv-history-overview {
262+ grid-template-columns: minmax(13rem, 3fr) minmax(0, 7fr);
263+ }
264+}
265+
243266 .sv-stat-grid {
244267 display: grid;
245268 grid-template-columns: repeat(auto-fit, minmax(8rem, 1fr));
@@ -247,6 +270,12 @@ body {
247270 margin-top: 0.75rem;
248271 }
249272
273+.sv-history-overview .sv-stat-grid {
274+ grid-template-columns: 1fr;
275+ gap: 0.55rem;
276+ margin-top: 0.5rem;
277+}
278+
250279 .sv-stat-card {
251280 display: grid;
252281 gap: 0.15rem;
@@ -256,10 +285,16 @@ body {
256285 background: var(--sv-surface-variant, #1d2129);
257286 }
258287
288+.sv-history-overview .sv-stat-card {
289+ padding: 0.65rem 0.75rem;
290+}
291+
259292 .sv-stat-value {
260293 color: var(--sv-accent, #8ab4ff);
261294 font-size: 1.35rem;
262295 font-weight: 700;
296+ line-height: 1.05;
297+ font-variant-numeric: tabular-nums;
263298 }
264299
265300 .sv-stat-label {
@@ -240,6 +240,29 @@ body {
240 }240 }
241 }241 }
242 242
243+.sv-history-overview {
244+ display: grid;
245+ gap: 1rem;
246+ align-items: start;
247+}
248+
249+.sv-history-overview > .sv-section {
250+ min-width: 0;
251+ height: 100%;
252+}
253+
254+@media (min-width: 720px) {
255+ .sv-history-overview {
256+ grid-template-columns: minmax(12rem, 3.8fr) minmax(0, 6.2fr);
257+ }
258+}
259+
260+@media (min-width: 900px) {
261+ .sv-history-overview {
262+ grid-template-columns: minmax(13rem, 3fr) minmax(0, 7fr);
263+ }
264+}
265+
243 .sv-stat-grid {266 .sv-stat-grid {
244 display: grid;267 display: grid;
245 grid-template-columns: repeat(auto-fit, minmax(8rem, 1fr));268 grid-template-columns: repeat(auto-fit, minmax(8rem, 1fr));
@@ -247,6 +270,12 @@ body {
247 margin-top: 0.75rem;270 margin-top: 0.75rem;
248 }271 }
249 272
273+.sv-history-overview .sv-stat-grid {
274+ grid-template-columns: 1fr;
275+ gap: 0.55rem;
276+ margin-top: 0.5rem;
277+}
278+
250 .sv-stat-card {279 .sv-stat-card {
251 display: grid;280 display: grid;
252 gap: 0.15rem;281 gap: 0.15rem;
@@ -256,10 +285,16 @@ body {
256 background: var(--sv-surface-variant, #1d2129);285 background: var(--sv-surface-variant, #1d2129);
257 }286 }
258 287
288+.sv-history-overview .sv-stat-card {
289+ padding: 0.65rem 0.75rem;
290+}
291+
259 .sv-stat-value {292 .sv-stat-value {
260 color: var(--sv-accent, #8ab4ff);293 color: var(--sv-accent, #8ab4ff);
261 font-size: 1.35rem;294 font-size: 1.35rem;
262 font-weight: 700;295 font-weight: 700;
296+ line-height: 1.05;
297+ font-variant-numeric: tabular-nums;
263 }298 }
264 299
265 .sv-stat-label {300 .sv-stat-label {
M internal/ui/systemviews/app_test.go +2 -2
@@ -309,8 +309,8 @@ func TestAppLoadInitialHistoryRouteRendersManagementActions(t *testing.T) {
309309 assert.Contains(t, app.renderedHTML, `data-sv-action="history.deleteDomain"`)
310310 assert.Contains(t, app.renderedHTML, `data-domain="example.com:8080"`)
311311 assert.Contains(t, app.renderedHTML, `>example.com</button>`)
312- assert.Contains(t, app.renderedHTML, "Keys:")
313- assert.Contains(t, app.renderedHTML, "Enter")
312+ assert.Contains(t, app.renderedHTML, `data-sv-history-search data-sv-autofocus`)
313+ assert.NotContains(t, app.renderedHTML, "Keys:")
314314 }
315315
316316 func TestAppHandleHistoryActionsRefreshesDOM(t *testing.T) {
@@ -309,8 +309,8 @@ func TestAppLoadInitialHistoryRouteRendersManagementActions(t *testing.T) {
309 assert.Contains(t, app.renderedHTML, `data-sv-action="history.deleteDomain"`)309 assert.Contains(t, app.renderedHTML, `data-sv-action="history.deleteDomain"`)
310 assert.Contains(t, app.renderedHTML, `data-domain="example.com:8080"`)310 assert.Contains(t, app.renderedHTML, `data-domain="example.com:8080"`)
311 assert.Contains(t, app.renderedHTML, `>example.com</button>`)311 assert.Contains(t, app.renderedHTML, `>example.com</button>`)
312- assert.Contains(t, app.renderedHTML, "Keys:")312+ assert.Contains(t, app.renderedHTML, `data-sv-history-search data-sv-autofocus`)
313- assert.Contains(t, app.renderedHTML, "Enter")313+ assert.NotContains(t, app.renderedHTML, "Keys:")
314 }314 }
315 315
316 func TestAppHandleHistoryActionsRefreshesDOM(t *testing.T) {316 func TestAppHandleHistoryActionsRefreshesDOM(t *testing.T) {
M internal/ui/systemviews/dom_js.go +12 -0
@@ -43,6 +43,7 @@ func (d *browserDOM) Mount(markup string) error {
4343 d.updateDocumentTitle()
4444 d.scheduleAlertDismissal()
4545 d.syncPerformanceCustomInputStates()
46+ d.focusAutofocusTarget()
4647 d.setupHistoryInfiniteScroll()
4748 return nil
4849 }
@@ -116,6 +117,17 @@ func (d *browserDOM) updateDocumentTitle() {
116117 d.document.Set("title", title)
117118 }
118119
120+func (d *browserDOM) focusAutofocusTarget() {
121+ if d == nil || !d.target.Truthy() {
122+ return
123+ }
124+ target := d.target.Call("querySelector", "[data-sv-autofocus]")
125+ if !target.Truthy() || !target.Get("focus").Truthy() {
126+ return
127+ }
128+ target.Call("focus")
129+}
130+
119131 func (d *browserDOM) scheduleAlertDismissal() {
120132 if d == nil || !d.target.Truthy() {
121133 return
@@ -43,6 +43,7 @@ func (d *browserDOM) Mount(markup string) error {
43 d.updateDocumentTitle()43 d.updateDocumentTitle()
44 d.scheduleAlertDismissal()44 d.scheduleAlertDismissal()
45 d.syncPerformanceCustomInputStates()45 d.syncPerformanceCustomInputStates()
46+ d.focusAutofocusTarget()
46 d.setupHistoryInfiniteScroll()47 d.setupHistoryInfiniteScroll()
47 return nil48 return nil
48 }49 }
@@ -116,6 +117,17 @@ func (d *browserDOM) updateDocumentTitle() {
116 d.document.Set("title", title)117 d.document.Set("title", title)
117 }118 }
118 119
120+func (d *browserDOM) focusAutofocusTarget() {
121+ if d == nil || !d.target.Truthy() {
122+ return
123+ }
124+ target := d.target.Call("querySelector", "[data-sv-autofocus]")
125+ if !target.Truthy() || !target.Get("focus").Truthy() {
126+ return
127+ }
128+ target.Call("focus")
129+}
130+
119 func (d *browserDOM) scheduleAlertDismissal() {131 func (d *browserDOM) scheduleAlertDismissal() {
120 if d == nil || !d.target.Truthy() {132 if d == nil || !d.target.Truthy() {
121 return133 return
M internal/ui/systemviews/history.templ +9 -8
@@ -12,12 +12,14 @@ templ HistoryView(data historyRenderData) {
1212 @Section("sv-history-controls", "Manage history") {
1313 @HistoryControls(data)
1414 }
15- @Section("sv-history-summary", "History") {
16- @HistorySummary(data)
17- }
18- @Section("sv-history-domains", "Top domains") {
19- @HistoryDomains(data)
20- }
15+ <div class="sv-history-overview">
16+ @Section("sv-history-summary", "History stats") {
17+ @HistorySummary(data)
18+ }
19+ @Section("sv-history-domains", "Top domains") {
20+ @HistoryDomains(data)
21+ }
22+ </div>
2123 @Section("sv-history-timeline", "Recent visits") {
2224 @HistoryTimeline(data)
2325 }
@@ -27,7 +29,7 @@ templ HistoryControls(data historyRenderData) {
2729 <form class="sv-toolbar sv-history-search" data-sv-action="history.search">
2830 <label class="sv-search-label">
2931 <span>Search</span>
30- <input data-sv-history-search name="query" type="search" value={ data.Query } placeholder="Search title or URL" autocomplete="off"/>
32+ <input data-sv-history-search data-sv-autofocus name="query" type="search" value={ data.Query } placeholder="Search title or URL" autocomplete="off" autofocus/>
3133 </label>
3234 <button class="sv-button" type="submit">@ButtonIconLabel(iconSearch, "Search")</button>
3335 <button class="sv-button sv-button-secondary" type="button" data-sv-action="history.clear">@ButtonIconLabel(iconX, "Clear")</button>
@@ -53,7 +55,6 @@ templ HistoryControls(data historyRenderData) {
5355 }
5456 </div>
5557 </div>
56- <p class="sv-meta sv-key-hints">Keys: <kbd>/</kbd> search, <kbd>j</kbd>/<kbd>k</kbd> move, <kbd>Enter</kbd> open, <kbd>d</kbd> delete focused entry.</p>
5758 }
5859
5960 templ HistorySummary(data historyRenderData) {
@@ -12,12 +12,14 @@ templ HistoryView(data historyRenderData) {
12 @Section("sv-history-controls", "Manage history") {12 @Section("sv-history-controls", "Manage history") {
13 @HistoryControls(data)13 @HistoryControls(data)
14 }14 }
15- @Section("sv-history-summary", "History") {15+ <div class="sv-history-overview">
16- @HistorySummary(data)16+ @Section("sv-history-summary", "History stats") {
17- }17+ @HistorySummary(data)
18- @Section("sv-history-domains", "Top domains") {18+ }
19- @HistoryDomains(data)19+ @Section("sv-history-domains", "Top domains") {
20- }20+ @HistoryDomains(data)
21+ }
22+ </div>
21 @Section("sv-history-timeline", "Recent visits") {23 @Section("sv-history-timeline", "Recent visits") {
22 @HistoryTimeline(data)24 @HistoryTimeline(data)
23 }25 }
@@ -27,7 +29,7 @@ templ HistoryControls(data historyRenderData) {
27 <form class="sv-toolbar sv-history-search" data-sv-action="history.search">29 <form class="sv-toolbar sv-history-search" data-sv-action="history.search">
28 <label class="sv-search-label">30 <label class="sv-search-label">
29 <span>Search</span>31 <span>Search</span>
30- <input data-sv-history-search name="query" type="search" value={ data.Query } placeholder="Search title or URL" autocomplete="off"/>32+ <input data-sv-history-search data-sv-autofocus name="query" type="search" value={ data.Query } placeholder="Search title or URL" autocomplete="off" autofocus/>
31 </label>33 </label>
32 <button class="sv-button" type="submit">@ButtonIconLabel(iconSearch, "Search")</button>34 <button class="sv-button" type="submit">@ButtonIconLabel(iconSearch, "Search")</button>
33 <button class="sv-button sv-button-secondary" type="button" data-sv-action="history.clear">@ButtonIconLabel(iconX, "Clear")</button>35 <button class="sv-button sv-button-secondary" type="button" data-sv-action="history.clear">@ButtonIconLabel(iconX, "Clear")</button>
@@ -53,7 +55,6 @@ templ HistoryControls(data historyRenderData) {
53 }55 }
54 </div>56 </div>
55 </div>57 </div>
56- <p class="sv-meta sv-key-hints">Keys: <kbd>/</kbd> search, <kbd>j</kbd>/<kbd>k</kbd> move, <kbd>Enter</kbd> open, <kbd>d</kbd> delete focused entry.</p>
57 }58 }
58 59
59 templ HistorySummary(data historyRenderData) {60 templ HistorySummary(data historyRenderData) {
M internal/ui/systemviews/history_templ.go +108 -100
@@ -64,6 +64,10 @@ func HistoryView(data historyRenderData) templ.Component {
6464 if templ_7745c5c3_Err != nil {
6565 return templ_7745c5c3_Err
6666 }
67+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, "<div class=\"sv-history-overview\">")
68+ if templ_7745c5c3_Err != nil {
69+ return templ_7745c5c3_Err
70+ }
6771 templ_7745c5c3_Var3 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
6872 templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
6973 templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
@@ -82,7 +86,7 @@ func HistoryView(data historyRenderData) templ.Component {
8286 }
8387 return nil
8488 })
85- templ_7745c5c3_Err = Section("sv-history-summary", "History").Render(templ.WithChildren(ctx, templ_7745c5c3_Var3), templ_7745c5c3_Buffer)
89+ templ_7745c5c3_Err = Section("sv-history-summary", "History stats").Render(templ.WithChildren(ctx, templ_7745c5c3_Var3), templ_7745c5c3_Buffer)
8690 if templ_7745c5c3_Err != nil {
8791 return templ_7745c5c3_Err
8892 }
@@ -108,6 +112,10 @@ func HistoryView(data historyRenderData) templ.Component {
108112 if templ_7745c5c3_Err != nil {
109113 return templ_7745c5c3_Err
110114 }
115+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 2, "</div>")
116+ if templ_7745c5c3_Err != nil {
117+ return templ_7745c5c3_Err
118+ }
111119 templ_7745c5c3_Var5 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
112120 templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
113121 templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
@@ -155,20 +163,20 @@ func HistoryControls(data historyRenderData) templ.Component {
155163 templ_7745c5c3_Var6 = templ.NopComponent
156164 }
157165 ctx = templ.ClearChildren(ctx)
158- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, "<form class=\"sv-toolbar sv-history-search\" data-sv-action=\"history.search\"><label class=\"sv-search-label\"><span>Search</span> <input data-sv-history-search name=\"query\" type=\"search\" value=\"")
166+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 3, "<form class=\"sv-toolbar sv-history-search\" data-sv-action=\"history.search\"><label class=\"sv-search-label\"><span>Search</span> <input data-sv-history-search data-sv-autofocus name=\"query\" type=\"search\" value=\"")
159167 if templ_7745c5c3_Err != nil {
160168 return templ_7745c5c3_Err
161169 }
162170 var templ_7745c5c3_Var7 string
163171 templ_7745c5c3_Var7, templ_7745c5c3_Err = templ.JoinStringErrs(data.Query)
164172 if templ_7745c5c3_Err != nil {
165- return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 30, Col: 78}
173+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 32, Col: 96}
166174 }
167175 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var7))
168176 if templ_7745c5c3_Err != nil {
169177 return templ_7745c5c3_Err
170178 }
171- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 2, "\" placeholder=\"Search title or URL\" autocomplete=\"off\"></label> <button class=\"sv-button\" type=\"submit\">")
179+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 4, "\" placeholder=\"Search title or URL\" autocomplete=\"off\" autofocus></label> <button class=\"sv-button\" type=\"submit\">")
172180 if templ_7745c5c3_Err != nil {
173181 return templ_7745c5c3_Err
174182 }
@@ -176,7 +184,7 @@ func HistoryControls(data historyRenderData) templ.Component {
176184 if templ_7745c5c3_Err != nil {
177185 return templ_7745c5c3_Err
178186 }
179- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 3, "</button> <button class=\"sv-button sv-button-secondary\" type=\"button\" data-sv-action=\"history.clear\">")
187+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 5, "</button> <button class=\"sv-button sv-button-secondary\" type=\"button\" data-sv-action=\"history.clear\">")
180188 if templ_7745c5c3_Err != nil {
181189 return templ_7745c5c3_Err
182190 }
@@ -184,49 +192,49 @@ func HistoryControls(data historyRenderData) templ.Component {
184192 if templ_7745c5c3_Err != nil {
185193 return templ_7745c5c3_Err
186194 }
187- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 4, "</button></form>")
195+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 6, "</button></form>")
188196 if templ_7745c5c3_Err != nil {
189197 return templ_7745c5c3_Err
190198 }
191199 if showHistoryFilters(data) {
192- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 5, "<div class=\"sv-active-filters\">")
200+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 7, "<div class=\"sv-active-filters\">")
193201 if templ_7745c5c3_Err != nil {
194202 return templ_7745c5c3_Err
195203 }
196204 if data.Query != "" {
197- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 6, "<span class=\"sv-filter-chip\">Query: ")
205+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 8, "<span class=\"sv-filter-chip\">Query: ")
198206 if templ_7745c5c3_Err != nil {
199207 return templ_7745c5c3_Err
200208 }
201209 var templ_7745c5c3_Var8 string
202210 templ_7745c5c3_Var8, templ_7745c5c3_Err = templ.JoinStringErrs(data.Query)
203211 if templ_7745c5c3_Err != nil {
204- return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 38, Col: 52}
212+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 40, Col: 52}
205213 }
206214 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var8))
207215 if templ_7745c5c3_Err != nil {
208216 return templ_7745c5c3_Err
209217 }
210- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 7, "</span> ")
218+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 9, "</span> ")
211219 if templ_7745c5c3_Err != nil {
212220 return templ_7745c5c3_Err
213221 }
214222 }
215223 if data.DomainFilter != "" {
216- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 8, "<span class=\"sv-filter-chip\">Domain: ")
224+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 10, "<span class=\"sv-filter-chip\">Domain: ")
217225 if templ_7745c5c3_Err != nil {
218226 return templ_7745c5c3_Err
219227 }
220228 var templ_7745c5c3_Var9 string
221229 templ_7745c5c3_Var9, templ_7745c5c3_Err = templ.JoinStringErrs(data.DomainFilter)
222230 if templ_7745c5c3_Err != nil {
223- return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 41, Col: 60}
231+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 43, Col: 60}
224232 }
225233 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var9))
226234 if templ_7745c5c3_Err != nil {
227235 return templ_7745c5c3_Err
228236 }
229- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 9, " <button type=\"button\" data-sv-action=\"history.clearDomain\" aria-label=\"Clear domain filter\">")
237+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 11, " <button type=\"button\" data-sv-action=\"history.clearDomain\" aria-label=\"Clear domain filter\">")
230238 if templ_7745c5c3_Err != nil {
231239 return templ_7745c5c3_Err
232240 }
@@ -234,79 +242,79 @@ func HistoryControls(data historyRenderData) templ.Component {
234242 if templ_7745c5c3_Err != nil {
235243 return templ_7745c5c3_Err
236244 }
237- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 10, "</button></span>")
245+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 12, "</button></span>")
238246 if templ_7745c5c3_Err != nil {
239247 return templ_7745c5c3_Err
240248 }
241249 }
242- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 11, "</div>")
250+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 13, "</div>")
243251 if templ_7745c5c3_Err != nil {
244252 return templ_7745c5c3_Err
245253 }
246254 }
247- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 12, "<div class=\"sv-history-actions-panel\"><div class=\"sv-button-row\" aria-label=\"History pagination\"><span class=\"sv-meta\">")
255+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 14, "<div class=\"sv-history-actions-panel\"><div class=\"sv-button-row\" aria-label=\"History pagination\"><span class=\"sv-meta\">")
248256 if templ_7745c5c3_Err != nil {
249257 return templ_7745c5c3_Err
250258 }
251259 var templ_7745c5c3_Var10 string
252260 templ_7745c5c3_Var10, templ_7745c5c3_Err = templ.JoinStringErrs(historyShowingLabel(data))
253261 if templ_7745c5c3_Err != nil {
254- return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 47, Col: 52}
262+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 49, Col: 52}
255263 }
256264 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var10))
257265 if templ_7745c5c3_Err != nil {
258266 return templ_7745c5c3_Err
259267 }
260- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 13, "</span></div><div class=\"sv-button-row\" aria-label=\"History cleanup\"><span class=\"sv-meta\">Clean up</span> ")
268+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 15, "</span></div><div class=\"sv-button-row\" aria-label=\"History cleanup\"><span class=\"sv-meta\">Clean up</span> ")
261269 if templ_7745c5c3_Err != nil {
262270 return templ_7745c5c3_Err
263271 }
264272 for _, item := range historyCleanupItems() {
265- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 14, "<button type=\"button\" class=\"sv-danger-link\" data-sv-action=\"history.deleteRange\" data-range=\"")
273+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 16, "<button type=\"button\" class=\"sv-danger-link\" data-sv-action=\"history.deleteRange\" data-range=\"")
266274 if templ_7745c5c3_Err != nil {
267275 return templ_7745c5c3_Err
268276 }
269277 var templ_7745c5c3_Var11 string
270278 templ_7745c5c3_Var11, templ_7745c5c3_Err = templ.JoinStringErrs(item.RangeID)
271279 if templ_7745c5c3_Err != nil {
272- return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 52, Col: 111}
280+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 54, Col: 111}
273281 }
274282 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var11))
275283 if templ_7745c5c3_Err != nil {
276284 return templ_7745c5c3_Err
277285 }
278- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 15, "\" data-sv-confirm=\"")
286+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 17, "\" data-sv-confirm=\"")
279287 if templ_7745c5c3_Err != nil {
280288 return templ_7745c5c3_Err
281289 }
282290 var templ_7745c5c3_Var12 string
283291 templ_7745c5c3_Var12, templ_7745c5c3_Err = templ.JoinStringErrs(item.Confirm)
284292 if templ_7745c5c3_Err != nil {
285- return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 52, Col: 144}
293+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 54, Col: 144}
286294 }
287295 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var12))
288296 if templ_7745c5c3_Err != nil {
289297 return templ_7745c5c3_Err
290298 }
291- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 16, "\">")
299+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 18, "\">")
292300 if templ_7745c5c3_Err != nil {
293301 return templ_7745c5c3_Err
294302 }
295303 var templ_7745c5c3_Var13 string
296304 templ_7745c5c3_Var13, templ_7745c5c3_Err = templ.JoinStringErrs(item.Label)
297305 if templ_7745c5c3_Err != nil {
298- return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 52, Col: 159}
306+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 54, Col: 159}
299307 }
300308 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var13))
301309 if templ_7745c5c3_Err != nil {
302310 return templ_7745c5c3_Err
303311 }
304- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 17, "</button>")
312+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 19, "</button>")
305313 if templ_7745c5c3_Err != nil {
306314 return templ_7745c5c3_Err
307315 }
308316 }
309- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 18, "</div></div><p class=\"sv-meta sv-key-hints\">Keys: <kbd>/</kbd> search, <kbd>j</kbd>/<kbd>k</kbd> move, <kbd>Enter</kbd> open, <kbd>d</kbd> delete focused entry.</p>")
317+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 20, "</div></div>")
310318 if templ_7745c5c3_Err != nil {
311319 return templ_7745c5c3_Err
312320 }
@@ -336,7 +344,7 @@ func HistorySummary(data historyRenderData) templ.Component {
336344 }
337345 ctx = templ.ClearChildren(ctx)
338346 if historySummaryLoading(data) {
339- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 19, "<div class=\"sv-stat-grid\">")
347+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 21, "<div class=\"sv-stat-grid\">")
340348 if templ_7745c5c3_Err != nil {
341349 return templ_7745c5c3_Err
342350 }
@@ -352,13 +360,13 @@ func HistorySummary(data historyRenderData) templ.Component {
352360 if templ_7745c5c3_Err != nil {
353361 return templ_7745c5c3_Err
354362 }
355- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 20, "</div>")
363+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 22, "</div>")
356364 if templ_7745c5c3_Err != nil {
357365 return templ_7745c5c3_Err
358366 }
359367 } else {
360368 entries, visits, days := historySummaryValues(data)
361- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 21, "<div class=\"sv-stat-grid\">")
369+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 23, "<div class=\"sv-stat-grid\">")
362370 if templ_7745c5c3_Err != nil {
363371 return templ_7745c5c3_Err
364372 }
@@ -374,7 +382,7 @@ func HistorySummary(data historyRenderData) templ.Component {
374382 if templ_7745c5c3_Err != nil {
375383 return templ_7745c5c3_Err
376384 }
377- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 22, "</div>")
385+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 24, "</div>")
378386 if templ_7745c5c3_Err != nil {
379387 return templ_7745c5c3_Err
380388 }
@@ -404,33 +412,33 @@ func HistoryStatCard(label string, value int64) templ.Component {
404412 templ_7745c5c3_Var15 = templ.NopComponent
405413 }
406414 ctx = templ.ClearChildren(ctx)
407- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 23, "<div class=\"sv-stat-card\"><span class=\"sv-stat-value\">")
415+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 25, "<div class=\"sv-stat-card\"><span class=\"sv-stat-value\">")
408416 if templ_7745c5c3_Err != nil {
409417 return templ_7745c5c3_Err
410418 }
411419 var templ_7745c5c3_Var16 string
412420 templ_7745c5c3_Var16, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", value))
413421 if templ_7745c5c3_Err != nil {
414- return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 78, Col: 81}
422+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 79, Col: 81}
415423 }
416424 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var16))
417425 if templ_7745c5c3_Err != nil {
418426 return templ_7745c5c3_Err
419427 }
420- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 24, "</span><span class=\"sv-stat-label\">")
428+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 26, "</span><span class=\"sv-stat-label\">")
421429 if templ_7745c5c3_Err != nil {
422430 return templ_7745c5c3_Err
423431 }
424432 var templ_7745c5c3_Var17 string
425433 templ_7745c5c3_Var17, templ_7745c5c3_Err = templ.JoinStringErrs(label)
426434 if templ_7745c5c3_Err != nil {
427- return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 78, Col: 125}
435+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 79, Col: 125}
428436 }
429437 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var17))
430438 if templ_7745c5c3_Err != nil {
431439 return templ_7745c5c3_Err
432440 }
433- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 25, "</span></div>")
441+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 27, "</span></div>")
434442 if templ_7745c5c3_Err != nil {
435443 return templ_7745c5c3_Err
436444 }
@@ -470,7 +478,7 @@ func HistoryDomains(data historyRenderData) templ.Component {
470478 return templ_7745c5c3_Err
471479 }
472480 } else {
473- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 26, "<div class=\"sv-domain-list\">")
481+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 28, "<div class=\"sv-domain-list\">")
474482 if templ_7745c5c3_Err != nil {
475483 return templ_7745c5c3_Err
476484 }
@@ -478,85 +486,85 @@ func HistoryDomains(data historyRenderData) templ.Component {
478486 if domain != nil && domain.Domain != "" {
479487 domainKey := historyDomainActionKey(domain)
480488 displayDomain := historyDomainDisplayLabel(domain)
481- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 27, "<span class=\"sv-domain-chip\"><span class=\"sv-domain-chip-main\"><button type=\"button\" class=\"sv-domain-filter\" data-sv-action=\"history.filterDomain\" data-domain=\"")
489+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 29, "<span class=\"sv-domain-chip\"><span class=\"sv-domain-chip-main\"><button type=\"button\" class=\"sv-domain-filter\" data-sv-action=\"history.filterDomain\" data-domain=\"")
482490 if templ_7745c5c3_Err != nil {
483491 return templ_7745c5c3_Err
484492 }
485493 var templ_7745c5c3_Var19 string
486494 templ_7745c5c3_Var19, templ_7745c5c3_Err = templ.JoinStringErrs(domainKey)
487495 if templ_7745c5c3_Err != nil {
488- return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 94, Col: 115}
496+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 95, Col: 115}
489497 }
490498 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var19))
491499 if templ_7745c5c3_Err != nil {
492500 return templ_7745c5c3_Err
493501 }
494- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 28, "\">")
502+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 30, "\">")
495503 if templ_7745c5c3_Err != nil {
496504 return templ_7745c5c3_Err
497505 }
498506 var templ_7745c5c3_Var20 string
499507 templ_7745c5c3_Var20, templ_7745c5c3_Err = templ.JoinStringErrs(displayDomain)
500508 if templ_7745c5c3_Err != nil {
501- return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 94, Col: 133}
509+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 95, Col: 133}
502510 }
503511 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var20))
504512 if templ_7745c5c3_Err != nil {
505513 return templ_7745c5c3_Err
506514 }
507- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 29, "</button> <span class=\"sv-domain-meta\">")
515+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 31, "</button> <span class=\"sv-domain-meta\">")
508516 if templ_7745c5c3_Err != nil {
509517 return templ_7745c5c3_Err
510518 }
511519 var templ_7745c5c3_Var21 string
512520 templ_7745c5c3_Var21, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d pages · %d visits", domain.PageCount, domain.TotalVisits))
513521 if templ_7745c5c3_Err != nil {
514- return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 95, Col: 112}
522+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 96, Col: 112}
515523 }
516524 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var21))
517525 if templ_7745c5c3_Err != nil {
518526 return templ_7745c5c3_Err
519527 }
520- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 30, "</span></span> <button type=\"button\" class=\"sv-icon-button sv-danger\" data-sv-action=\"history.deleteDomain\" data-domain=\"")
528+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 32, "</span></span> <button type=\"button\" class=\"sv-icon-button sv-danger\" data-sv-action=\"history.deleteDomain\" data-domain=\"")
521529 if templ_7745c5c3_Err != nil {
522530 return templ_7745c5c3_Err
523531 }
524532 var templ_7745c5c3_Var22 string
525533 templ_7745c5c3_Var22, templ_7745c5c3_Err = templ.JoinStringErrs(domainKey)
526534 if templ_7745c5c3_Err != nil {
527- return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 97, Col: 122}
535+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 98, Col: 122}
528536 }
529537 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var22))
530538 if templ_7745c5c3_Err != nil {
531539 return templ_7745c5c3_Err
532540 }
533- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 31, "\" data-sv-confirm=\"")
541+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 33, "\" data-sv-confirm=\"")
534542 if templ_7745c5c3_Err != nil {
535543 return templ_7745c5c3_Err
536544 }
537545 var templ_7745c5c3_Var23 string
538546 templ_7745c5c3_Var23, templ_7745c5c3_Err = templ.JoinStringErrs("Delete all history for " + displayDomain + "?")
539547 if templ_7745c5c3_Err != nil {
540- return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 97, Col: 190}
548+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 98, Col: 190}
541549 }
542550 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var23))
543551 if templ_7745c5c3_Err != nil {
544552 return templ_7745c5c3_Err
545553 }
546- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 32, "\" aria-label=\"")
554+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 34, "\" aria-label=\"")
547555 if templ_7745c5c3_Err != nil {
548556 return templ_7745c5c3_Err
549557 }
550558 var templ_7745c5c3_Var24 string
551559 templ_7745c5c3_Var24, templ_7745c5c3_Err = templ.JoinStringErrs("Delete history for " + displayDomain)
552560 if templ_7745c5c3_Err != nil {
553- return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 97, Col: 243}
561+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 98, Col: 243}
554562 }
555563 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var24))
556564 if templ_7745c5c3_Err != nil {
557565 return templ_7745c5c3_Err
558566 }
559- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 33, "\">")
567+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 35, "\">")
560568 if templ_7745c5c3_Err != nil {
561569 return templ_7745c5c3_Err
562570 }
@@ -564,13 +572,13 @@ func HistoryDomains(data historyRenderData) templ.Component {
564572 if templ_7745c5c3_Err != nil {
565573 return templ_7745c5c3_Err
566574 }
567- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 34, "</button></span>")
575+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 36, "</button></span>")
568576 if templ_7745c5c3_Err != nil {
569577 return templ_7745c5c3_Err
570578 }
571579 }
572580 }
573- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 35, "</div>")
581+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 37, "</div>")
574582 if templ_7745c5c3_Err != nil {
575583 return templ_7745c5c3_Err
576584 }
@@ -606,7 +614,7 @@ func HistoryTimeline(data historyRenderData) templ.Component {
606614 return templ_7745c5c3_Err
607615 }
608616 } else {
609- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 36, "<div class=\"sv-history-timeline-list\" data-sv-history-timeline>")
617+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 38, "<div class=\"sv-history-timeline-list\" data-sv-history-timeline>")
610618 if templ_7745c5c3_Err != nil {
611619 return templ_7745c5c3_Err
612620 }
@@ -626,7 +634,7 @@ func HistoryTimeline(data historyRenderData) templ.Component {
626634 if templ_7745c5c3_Err != nil {
627635 return templ_7745c5c3_Err
628636 }
629- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 37, "</div>")
637+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 39, "</div>")
630638 if templ_7745c5c3_Err != nil {
631639 return templ_7745c5c3_Err
632640 }
@@ -724,20 +732,20 @@ func HistoryTimelineAppendGroups(entries []*entity.HistoryEntry, mergeFirstDate
724732 groups := groupHistoryEntries(entries)
725733 for index, group := range groups {
726734 if index == 0 && group.Date == mergeFirstDate {
727- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 38, "<div data-sv-history-merge-date=\"")
735+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 40, "<div data-sv-history-merge-date=\"")
728736 if templ_7745c5c3_Err != nil {
729737 return templ_7745c5c3_Err
730738 }
731739 var templ_7745c5c3_Var29 string
732740 templ_7745c5c3_Var29, templ_7745c5c3_Err = templ.JoinStringErrs(group.Date)
733741 if templ_7745c5c3_Err != nil {
734- return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 137, Col: 47}
742+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 138, Col: 47}
735743 }
736744 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var29))
737745 if templ_7745c5c3_Err != nil {
738746 return templ_7745c5c3_Err
739747 }
740- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 39, "\">")
748+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 41, "\">")
741749 if templ_7745c5c3_Err != nil {
742750 return templ_7745c5c3_Err
743751 }
@@ -749,7 +757,7 @@ func HistoryTimelineAppendGroups(entries []*entity.HistoryEntry, mergeFirstDate
749757 }
750758 }
751759 }
752- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 40, "</div>")
760+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 42, "</div>")
753761 if templ_7745c5c3_Err != nil {
754762 return templ_7745c5c3_Err
755763 }
@@ -785,43 +793,43 @@ func HistoryTimelineGroup(group historyTimelineGroup, showHeading bool) templ.Co
785793 templ_7745c5c3_Var30 = templ.NopComponent
786794 }
787795 ctx = templ.ClearChildren(ctx)
788- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 41, "<section class=\"sv-timeline-group\" data-sv-history-date=\"")
796+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 43, "<section class=\"sv-timeline-group\" data-sv-history-date=\"")
789797 if templ_7745c5c3_Err != nil {
790798 return templ_7745c5c3_Err
791799 }
792800 var templ_7745c5c3_Var31 string
793801 templ_7745c5c3_Var31, templ_7745c5c3_Err = templ.JoinStringErrs(group.Date)
794802 if templ_7745c5c3_Err != nil {
795- return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 151, Col: 69}
803+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 152, Col: 69}
796804 }
797805 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var31))
798806 if templ_7745c5c3_Err != nil {
799807 return templ_7745c5c3_Err
800808 }
801- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 42, "\">")
809+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 44, "\">")
802810 if templ_7745c5c3_Err != nil {
803811 return templ_7745c5c3_Err
804812 }
805813 if showHeading {
806- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 43, "<h3>")
814+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 45, "<h3>")
807815 if templ_7745c5c3_Err != nil {
808816 return templ_7745c5c3_Err
809817 }
810818 var templ_7745c5c3_Var32 string
811819 templ_7745c5c3_Var32, templ_7745c5c3_Err = templ.JoinStringErrs(group.Label)
812820 if templ_7745c5c3_Err != nil {
813- return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 153, Col: 20}
821+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 154, Col: 20}
814822 }
815823 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var32))
816824 if templ_7745c5c3_Err != nil {
817825 return templ_7745c5c3_Err
818826 }
819- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 44, "</h3>")
827+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 46, "</h3>")
820828 if templ_7745c5c3_Err != nil {
821829 return templ_7745c5c3_Err
822830 }
823831 }
824- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 45, "<ul class=\"sv-list\">")
832+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 47, "<ul class=\"sv-list\">")
825833 if templ_7745c5c3_Err != nil {
826834 return templ_7745c5c3_Err
827835 }
@@ -833,7 +841,7 @@ func HistoryTimelineGroup(group historyTimelineGroup, showHeading bool) templ.Co
833841 }
834842 }
835843 }
836- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 46, "</ul></section>")
844+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 48, "</ul></section>")
837845 if templ_7745c5c3_Err != nil {
838846 return templ_7745c5c3_Err
839847 }
@@ -862,35 +870,35 @@ func HistoryLoadMore(data historyRenderData) templ.Component {
862870 templ_7745c5c3_Var33 = templ.NopComponent
863871 }
864872 ctx = templ.ClearChildren(ctx)
865- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 47, "<div class=\"sv-history-load-more\" data-sv-history-load-more-container>")
873+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 49, "<div class=\"sv-history-load-more\" data-sv-history-load-more-container>")
866874 if templ_7745c5c3_Err != nil {
867875 return templ_7745c5c3_Err
868876 }
869877 if showHistoryLoadMore(data) {
870- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 48, "<button type=\"button\" class=\"sv-button sv-button-secondary\" data-sv-action=\"history.loadMore\" data-before=\"")
878+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 50, "<button type=\"button\" class=\"sv-button sv-button-secondary\" data-sv-action=\"history.loadMore\" data-before=\"")
871879 if templ_7745c5c3_Err != nil {
872880 return templ_7745c5c3_Err
873881 }
874882 var templ_7745c5c3_Var34 string
875883 templ_7745c5c3_Var34, templ_7745c5c3_Err = templ.JoinStringErrs(historyLoadMoreCursor(data))
876884 if templ_7745c5c3_Err != nil {
877- return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 168, Col: 138}
885+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 169, Col: 138}
878886 }
879887 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var34))
880888 if templ_7745c5c3_Err != nil {
881889 return templ_7745c5c3_Err
882890 }
883- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 49, "\" data-sv-history-load-more>Load older visits</button>")
891+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 51, "\" data-sv-history-load-more>Load older visits</button>")
884892 if templ_7745c5c3_Err != nil {
885893 return templ_7745c5c3_Err
886894 }
887895 } else if strings.TrimSpace(data.Query) == "" && countHistoryEntries(data.Entries) > 0 {
888- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 50, "<p class=\"sv-meta\">End of history</p>")
896+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 52, "<p class=\"sv-meta\">End of history</p>")
889897 if templ_7745c5c3_Err != nil {
890898 return templ_7745c5c3_Err
891899 }
892900 }
893- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 51, "</div>")
901+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 53, "</div>")
894902 if templ_7745c5c3_Err != nil {
895903 return templ_7745c5c3_Err
896904 }
@@ -919,20 +927,20 @@ func HistoryItem(entry *entity.HistoryEntry) templ.Component {
919927 templ_7745c5c3_Var35 = templ.NopComponent
920928 }
921929 ctx = templ.ClearChildren(ctx)
922- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 52, "<li class=\"sv-list-row\"><article class=\"sv-history-item\" data-sv-history-row data-history-id=\"")
930+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 54, "<li class=\"sv-list-row\"><article class=\"sv-history-item\" data-sv-history-row data-history-id=\"")
923931 if templ_7745c5c3_Err != nil {
924932 return templ_7745c5c3_Err
925933 }
926934 var templ_7745c5c3_Var36 string
927935 templ_7745c5c3_Var36, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", entry.ID))
928936 if templ_7745c5c3_Err != nil {
929- return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 177, Col: 100}
937+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 178, Col: 100}
930938 }
931939 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var36))
932940 if templ_7745c5c3_Err != nil {
933941 return templ_7745c5c3_Err
934942 }
935- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 53, "\"><div class=\"sv-history-content\">")
943+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 55, "\"><div class=\"sv-history-content\">")
936944 if templ_7745c5c3_Err != nil {
937945 return templ_7745c5c3_Err
938946 }
@@ -942,7 +950,7 @@ func HistoryItem(entry *entity.HistoryEntry) templ.Component {
942950 if templ_7745c5c3_Err != nil {
943951 return templ_7745c5c3_Err
944952 }
945- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 54, "<span class=\"")
953+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 56, "<span class=\"")
946954 if templ_7745c5c3_Err != nil {
947955 return templ_7745c5c3_Err
948956 }
@@ -955,121 +963,121 @@ func HistoryItem(entry *entity.HistoryEntry) templ.Component {
955963 if templ_7745c5c3_Err != nil {
956964 return templ_7745c5c3_Err
957965 }
958- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 55, "\" aria-hidden=\"true\"><span class=\"sv-history-favicon-fallback\">")
966+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 57, "\" aria-hidden=\"true\"><span class=\"sv-history-favicon-fallback\">")
959967 if templ_7745c5c3_Err != nil {
960968 return templ_7745c5c3_Err
961969 }
962970 var templ_7745c5c3_Var39 string
963971 templ_7745c5c3_Var39, templ_7745c5c3_Err = templ.JoinStringErrs(historyFaviconFallback(entry))
964972 if templ_7745c5c3_Err != nil {
965- return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 181, Col: 78}
973+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 182, Col: 78}
966974 }
967975 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var39))
968976 if templ_7745c5c3_Err != nil {
969977 return templ_7745c5c3_Err
970978 }
971- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 56, "</span> ")
979+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 58, "</span> ")
972980 if templ_7745c5c3_Err != nil {
973981 return templ_7745c5c3_Err
974982 }
975983 if faviconURL != "" {
976- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 57, "<img src=\"")
984+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 59, "<img src=\"")
977985 if templ_7745c5c3_Err != nil {
978986 return templ_7745c5c3_Err
979987 }
980988 var templ_7745c5c3_Var40 string
981989 templ_7745c5c3_Var40, templ_7745c5c3_Err = templ.JoinStringErrs(templ.SafeURL(faviconURL))
982990 if templ_7745c5c3_Err != nil {
983- return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 183, Col: 42}
991+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 184, Col: 42}
984992 }
985993 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var40))
986994 if templ_7745c5c3_Err != nil {
987995 return templ_7745c5c3_Err
988996 }
989- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 58, "\" alt=\"\" width=\"24\" height=\"24\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"same-origin\" onerror=\"this.parentElement.classList.remove('sv-history-favicon-has-image'); this.remove()\">")
997+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 60, "\" alt=\"\" width=\"24\" height=\"24\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"same-origin\" onerror=\"this.parentElement.classList.remove('sv-history-favicon-has-image'); this.remove()\">")
990998 if templ_7745c5c3_Err != nil {
991999 return templ_7745c5c3_Err
9921000 }
9931001 }
994- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 59, "</span><div class=\"sv-history-main\"><a class=\"sv-link sv-history-open\" href=\"")
1002+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 61, "</span><div class=\"sv-history-main\"><a class=\"sv-link sv-history-open\" href=\"")
9951003 if templ_7745c5c3_Err != nil {
9961004 return templ_7745c5c3_Err
9971005 }
9981006 var templ_7745c5c3_Var41 templ.SafeURL
9991007 templ_7745c5c3_Var41, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(sanitizeHref(entry.URL)))
10001008 if templ_7745c5c3_Err != nil {
1001- return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 187, Col: 85}
1009+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 188, Col: 85}
10021010 }
10031011 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var41))
10041012 if templ_7745c5c3_Err != nil {
10051013 return templ_7745c5c3_Err
10061014 }
1007- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 60, "\">")
1015+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 62, "\">")
10081016 if templ_7745c5c3_Err != nil {
10091017 return templ_7745c5c3_Err
10101018 }
10111019 var templ_7745c5c3_Var42 string
10121020 templ_7745c5c3_Var42, templ_7745c5c3_Err = templ.JoinStringErrs(historyItemLabel(entry))
10131021 if templ_7745c5c3_Err != nil {
1014- return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 187, Col: 113}
1022+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 188, Col: 113}
10151023 }
10161024 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var42))
10171025 if templ_7745c5c3_Err != nil {
10181026 return templ_7745c5c3_Err
10191027 }
1020- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 61, "</a><p class=\"sv-history-url\" title=\"")
1028+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 63, "</a><p class=\"sv-history-url\" title=\"")
10211029 if templ_7745c5c3_Err != nil {
10221030 return templ_7745c5c3_Err
10231031 }
10241032 var templ_7745c5c3_Var43 string
10251033 templ_7745c5c3_Var43, templ_7745c5c3_Err = templ.JoinStringErrs(entry.URL)
10261034 if templ_7745c5c3_Err != nil {
1027- return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 188, Col: 48}
1035+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 189, Col: 48}
10281036 }
10291037 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var43))
10301038 if templ_7745c5c3_Err != nil {
10311039 return templ_7745c5c3_Err
10321040 }
1033- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 62, "\">")
1041+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 64, "\">")
10341042 if templ_7745c5c3_Err != nil {
10351043 return templ_7745c5c3_Err
10361044 }
10371045 var templ_7745c5c3_Var44 string
10381046 templ_7745c5c3_Var44, templ_7745c5c3_Err = templ.JoinStringErrs(historyItemURL(entry))
10391047 if templ_7745c5c3_Err != nil {
1040- return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 188, Col: 74}
1048+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 189, Col: 74}
10411049 }
10421050 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var44))
10431051 if templ_7745c5c3_Err != nil {
10441052 return templ_7745c5c3_Err
10451053 }
1046- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 63, "</p><p class=\"sv-history-meta\">")
1054+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 65, "</p><p class=\"sv-history-meta\">")
10471055 if templ_7745c5c3_Err != nil {
10481056 return templ_7745c5c3_Err
10491057 }
10501058 var templ_7745c5c3_Var45 string
10511059 templ_7745c5c3_Var45, templ_7745c5c3_Err = templ.JoinStringErrs(historyItemMeta(entry))
10521060 if templ_7745c5c3_Err != nil {
1053- return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 189, Col: 56}
1061+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 190, Col: 56}
10541062 }
10551063 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var45))
10561064 if templ_7745c5c3_Err != nil {
10571065 return templ_7745c5c3_Err
10581066 }
1059- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 64, "</p></div></div><div class=\"sv-history-row-actions\"><a class=\"sv-button sv-button-secondary\" href=\"")
1067+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 66, "</p></div></div><div class=\"sv-history-row-actions\"><a class=\"sv-button sv-button-secondary\" href=\"")
10601068 if templ_7745c5c3_Err != nil {
10611069 return templ_7745c5c3_Err
10621070 }
10631071 var templ_7745c5c3_Var46 templ.SafeURL
10641072 templ_7745c5c3_Var46, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(sanitizeHref(entry.URL)))
10651073 if templ_7745c5c3_Err != nil {
1066- return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 193, Col: 90}
1074+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 194, Col: 90}
10671075 }
10681076 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var46))
10691077 if templ_7745c5c3_Err != nil {
10701078 return templ_7745c5c3_Err
10711079 }
1072- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 65, "\">")
1080+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 67, "\">")
10731081 if templ_7745c5c3_Err != nil {
10741082 return templ_7745c5c3_Err
10751083 }
@@ -1077,30 +1085,30 @@ func HistoryItem(entry *entity.HistoryEntry) templ.Component {
10771085 if templ_7745c5c3_Err != nil {
10781086 return templ_7745c5c3_Err
10791087 }
1080- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 66, "</a> <button type=\"button\" class=\"sv-button sv-button-secondary sv-button-danger sv-button-icon-only\" data-sv-action=\"history.deleteEntry\" data-id=\"")
1088+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 68, "</a> <button type=\"button\" class=\"sv-button sv-button-secondary sv-button-danger sv-button-icon-only\" data-sv-action=\"history.deleteEntry\" data-id=\"")
10811089 if templ_7745c5c3_Err != nil {
10821090 return templ_7745c5c3_Err
10831091 }
10841092 var templ_7745c5c3_Var47 string
10851093 templ_7745c5c3_Var47, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", entry.ID))
10861094 if templ_7745c5c3_Err != nil {
1087- return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 194, Col: 175}
1095+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 195, Col: 175}
10881096 }
10891097 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var47))
10901098 if templ_7745c5c3_Err != nil {
10911099 return templ_7745c5c3_Err
10921100 }
1093- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 67, "\" data-sv-confirm=\"Delete this history entry?\" aria-label=\"Delete this history entry\"")
1101+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 69, "\" data-sv-confirm=\"Delete this history entry?\" aria-label=\"Delete this history entry\"")
10941102 if templ_7745c5c3_Err != nil {
10951103 return templ_7745c5c3_Err
10961104 }
10971105 if entry.ID <= 0 {
1098- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 68, " disabled")
1106+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 70, " disabled")
10991107 if templ_7745c5c3_Err != nil {
11001108 return templ_7745c5c3_Err
11011109 }
11021110 }
1103- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 69, ">")
1111+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 71, ">")
11041112 if templ_7745c5c3_Err != nil {
11051113 return templ_7745c5c3_Err
11061114 }
@@ -1108,7 +1116,7 @@ func HistoryItem(entry *entity.HistoryEntry) templ.Component {
11081116 if templ_7745c5c3_Err != nil {
11091117 return templ_7745c5c3_Err
11101118 }
1111- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 70, "</button></div></article></li>")
1119+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 72, "</button></div></article></li>")
11121120 if templ_7745c5c3_Err != nil {
11131121 return templ_7745c5c3_Err
11141122 }
@@ -64,6 +64,10 @@ func HistoryView(data historyRenderData) templ.Component {
64 if templ_7745c5c3_Err != nil {64 if templ_7745c5c3_Err != nil {
65 return templ_7745c5c3_Err65 return templ_7745c5c3_Err
66 }66 }
67+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, "<div class=\"sv-history-overview\">")
68+ if templ_7745c5c3_Err != nil {
69+ return templ_7745c5c3_Err
70+ }
67 templ_7745c5c3_Var3 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {71 templ_7745c5c3_Var3 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
68 templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context72 templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
69 templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)73 templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
@@ -82,7 +86,7 @@ func HistoryView(data historyRenderData) templ.Component {
82 }86 }
83 return nil87 return nil
84 })88 })
85- templ_7745c5c3_Err = Section("sv-history-summary", "History").Render(templ.WithChildren(ctx, templ_7745c5c3_Var3), templ_7745c5c3_Buffer)89+ templ_7745c5c3_Err = Section("sv-history-summary", "History stats").Render(templ.WithChildren(ctx, templ_7745c5c3_Var3), templ_7745c5c3_Buffer)
86 if templ_7745c5c3_Err != nil {90 if templ_7745c5c3_Err != nil {
87 return templ_7745c5c3_Err91 return templ_7745c5c3_Err
88 }92 }
@@ -108,6 +112,10 @@ func HistoryView(data historyRenderData) templ.Component {
108 if templ_7745c5c3_Err != nil {112 if templ_7745c5c3_Err != nil {
109 return templ_7745c5c3_Err113 return templ_7745c5c3_Err
110 }114 }
115+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 2, "</div>")
116+ if templ_7745c5c3_Err != nil {
117+ return templ_7745c5c3_Err
118+ }
111 templ_7745c5c3_Var5 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {119 templ_7745c5c3_Var5 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
112 templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context120 templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
113 templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)121 templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
@@ -155,20 +163,20 @@ func HistoryControls(data historyRenderData) templ.Component {
155 templ_7745c5c3_Var6 = templ.NopComponent163 templ_7745c5c3_Var6 = templ.NopComponent
156 }164 }
157 ctx = templ.ClearChildren(ctx)165 ctx = templ.ClearChildren(ctx)
158- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, "<form class=\"sv-toolbar sv-history-search\" data-sv-action=\"history.search\"><label class=\"sv-search-label\"><span>Search</span> <input data-sv-history-search name=\"query\" type=\"search\" value=\"")166+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 3, "<form class=\"sv-toolbar sv-history-search\" data-sv-action=\"history.search\"><label class=\"sv-search-label\"><span>Search</span> <input data-sv-history-search data-sv-autofocus name=\"query\" type=\"search\" value=\"")
159 if templ_7745c5c3_Err != nil {167 if templ_7745c5c3_Err != nil {
160 return templ_7745c5c3_Err168 return templ_7745c5c3_Err
161 }169 }
162 var templ_7745c5c3_Var7 string170 var templ_7745c5c3_Var7 string
163 templ_7745c5c3_Var7, templ_7745c5c3_Err = templ.JoinStringErrs(data.Query)171 templ_7745c5c3_Var7, templ_7745c5c3_Err = templ.JoinStringErrs(data.Query)
164 if templ_7745c5c3_Err != nil {172 if templ_7745c5c3_Err != nil {
165- return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 30, Col: 78}173+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 32, Col: 96}
166 }174 }
167 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var7))175 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var7))
168 if templ_7745c5c3_Err != nil {176 if templ_7745c5c3_Err != nil {
169 return templ_7745c5c3_Err177 return templ_7745c5c3_Err
170 }178 }
171- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 2, "\" placeholder=\"Search title or URL\" autocomplete=\"off\"></label> <button class=\"sv-button\" type=\"submit\">")179+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 4, "\" placeholder=\"Search title or URL\" autocomplete=\"off\" autofocus></label> <button class=\"sv-button\" type=\"submit\">")
172 if templ_7745c5c3_Err != nil {180 if templ_7745c5c3_Err != nil {
173 return templ_7745c5c3_Err181 return templ_7745c5c3_Err
174 }182 }
@@ -176,7 +184,7 @@ func HistoryControls(data historyRenderData) templ.Component {
176 if templ_7745c5c3_Err != nil {184 if templ_7745c5c3_Err != nil {
177 return templ_7745c5c3_Err185 return templ_7745c5c3_Err
178 }186 }
179- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 3, "</button> <button class=\"sv-button sv-button-secondary\" type=\"button\" data-sv-action=\"history.clear\">")187+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 5, "</button> <button class=\"sv-button sv-button-secondary\" type=\"button\" data-sv-action=\"history.clear\">")
180 if templ_7745c5c3_Err != nil {188 if templ_7745c5c3_Err != nil {
181 return templ_7745c5c3_Err189 return templ_7745c5c3_Err
182 }190 }
@@ -184,49 +192,49 @@ func HistoryControls(data historyRenderData) templ.Component {
184 if templ_7745c5c3_Err != nil {192 if templ_7745c5c3_Err != nil {
185 return templ_7745c5c3_Err193 return templ_7745c5c3_Err
186 }194 }
187- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 4, "</button></form>")195+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 6, "</button></form>")
188 if templ_7745c5c3_Err != nil {196 if templ_7745c5c3_Err != nil {
189 return templ_7745c5c3_Err197 return templ_7745c5c3_Err
190 }198 }
191 if showHistoryFilters(data) {199 if showHistoryFilters(data) {
192- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 5, "<div class=\"sv-active-filters\">")200+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 7, "<div class=\"sv-active-filters\">")
193 if templ_7745c5c3_Err != nil {201 if templ_7745c5c3_Err != nil {
194 return templ_7745c5c3_Err202 return templ_7745c5c3_Err
195 }203 }
196 if data.Query != "" {204 if data.Query != "" {
197- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 6, "<span class=\"sv-filter-chip\">Query: ")205+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 8, "<span class=\"sv-filter-chip\">Query: ")
198 if templ_7745c5c3_Err != nil {206 if templ_7745c5c3_Err != nil {
199 return templ_7745c5c3_Err207 return templ_7745c5c3_Err
200 }208 }
201 var templ_7745c5c3_Var8 string209 var templ_7745c5c3_Var8 string
202 templ_7745c5c3_Var8, templ_7745c5c3_Err = templ.JoinStringErrs(data.Query)210 templ_7745c5c3_Var8, templ_7745c5c3_Err = templ.JoinStringErrs(data.Query)
203 if templ_7745c5c3_Err != nil {211 if templ_7745c5c3_Err != nil {
204- return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 38, Col: 52}212+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 40, Col: 52}
205 }213 }
206 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var8))214 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var8))
207 if templ_7745c5c3_Err != nil {215 if templ_7745c5c3_Err != nil {
208 return templ_7745c5c3_Err216 return templ_7745c5c3_Err
209 }217 }
210- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 7, "</span> ")218+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 9, "</span> ")
211 if templ_7745c5c3_Err != nil {219 if templ_7745c5c3_Err != nil {
212 return templ_7745c5c3_Err220 return templ_7745c5c3_Err
213 }221 }
214 }222 }
215 if data.DomainFilter != "" {223 if data.DomainFilter != "" {
216- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 8, "<span class=\"sv-filter-chip\">Domain: ")224+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 10, "<span class=\"sv-filter-chip\">Domain: ")
217 if templ_7745c5c3_Err != nil {225 if templ_7745c5c3_Err != nil {
218 return templ_7745c5c3_Err226 return templ_7745c5c3_Err
219 }227 }
220 var templ_7745c5c3_Var9 string228 var templ_7745c5c3_Var9 string
221 templ_7745c5c3_Var9, templ_7745c5c3_Err = templ.JoinStringErrs(data.DomainFilter)229 templ_7745c5c3_Var9, templ_7745c5c3_Err = templ.JoinStringErrs(data.DomainFilter)
222 if templ_7745c5c3_Err != nil {230 if templ_7745c5c3_Err != nil {
223- return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 41, Col: 60}231+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 43, Col: 60}
224 }232 }
225 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var9))233 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var9))
226 if templ_7745c5c3_Err != nil {234 if templ_7745c5c3_Err != nil {
227 return templ_7745c5c3_Err235 return templ_7745c5c3_Err
228 }236 }
229- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 9, " <button type=\"button\" data-sv-action=\"history.clearDomain\" aria-label=\"Clear domain filter\">")237+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 11, " <button type=\"button\" data-sv-action=\"history.clearDomain\" aria-label=\"Clear domain filter\">")
230 if templ_7745c5c3_Err != nil {238 if templ_7745c5c3_Err != nil {
231 return templ_7745c5c3_Err239 return templ_7745c5c3_Err
232 }240 }
@@ -234,79 +242,79 @@ func HistoryControls(data historyRenderData) templ.Component {
234 if templ_7745c5c3_Err != nil {242 if templ_7745c5c3_Err != nil {
235 return templ_7745c5c3_Err243 return templ_7745c5c3_Err
236 }244 }
237- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 10, "</button></span>")245+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 12, "</button></span>")
238 if templ_7745c5c3_Err != nil {246 if templ_7745c5c3_Err != nil {
239 return templ_7745c5c3_Err247 return templ_7745c5c3_Err
240 }248 }
241 }249 }
242- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 11, "</div>")250+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 13, "</div>")
243 if templ_7745c5c3_Err != nil {251 if templ_7745c5c3_Err != nil {
244 return templ_7745c5c3_Err252 return templ_7745c5c3_Err
245 }253 }
246 }254 }
247- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 12, "<div class=\"sv-history-actions-panel\"><div class=\"sv-button-row\" aria-label=\"History pagination\"><span class=\"sv-meta\">")255+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 14, "<div class=\"sv-history-actions-panel\"><div class=\"sv-button-row\" aria-label=\"History pagination\"><span class=\"sv-meta\">")
248 if templ_7745c5c3_Err != nil {256 if templ_7745c5c3_Err != nil {
249 return templ_7745c5c3_Err257 return templ_7745c5c3_Err
250 }258 }
251 var templ_7745c5c3_Var10 string259 var templ_7745c5c3_Var10 string
252 templ_7745c5c3_Var10, templ_7745c5c3_Err = templ.JoinStringErrs(historyShowingLabel(data))260 templ_7745c5c3_Var10, templ_7745c5c3_Err = templ.JoinStringErrs(historyShowingLabel(data))
253 if templ_7745c5c3_Err != nil {261 if templ_7745c5c3_Err != nil {
254- return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 47, Col: 52}262+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 49, Col: 52}
255 }263 }
256 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var10))264 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var10))
257 if templ_7745c5c3_Err != nil {265 if templ_7745c5c3_Err != nil {
258 return templ_7745c5c3_Err266 return templ_7745c5c3_Err
259 }267 }
260- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 13, "</span></div><div class=\"sv-button-row\" aria-label=\"History cleanup\"><span class=\"sv-meta\">Clean up</span> ")268+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 15, "</span></div><div class=\"sv-button-row\" aria-label=\"History cleanup\"><span class=\"sv-meta\">Clean up</span> ")
261 if templ_7745c5c3_Err != nil {269 if templ_7745c5c3_Err != nil {
262 return templ_7745c5c3_Err270 return templ_7745c5c3_Err
263 }271 }
264 for _, item := range historyCleanupItems() {272 for _, item := range historyCleanupItems() {
265- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 14, "<button type=\"button\" class=\"sv-danger-link\" data-sv-action=\"history.deleteRange\" data-range=\"")273+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 16, "<button type=\"button\" class=\"sv-danger-link\" data-sv-action=\"history.deleteRange\" data-range=\"")
266 if templ_7745c5c3_Err != nil {274 if templ_7745c5c3_Err != nil {
267 return templ_7745c5c3_Err275 return templ_7745c5c3_Err
268 }276 }
269 var templ_7745c5c3_Var11 string277 var templ_7745c5c3_Var11 string
270 templ_7745c5c3_Var11, templ_7745c5c3_Err = templ.JoinStringErrs(item.RangeID)278 templ_7745c5c3_Var11, templ_7745c5c3_Err = templ.JoinStringErrs(item.RangeID)
271 if templ_7745c5c3_Err != nil {279 if templ_7745c5c3_Err != nil {
272- return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 52, Col: 111}280+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 54, Col: 111}
273 }281 }
274 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var11))282 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var11))
275 if templ_7745c5c3_Err != nil {283 if templ_7745c5c3_Err != nil {
276 return templ_7745c5c3_Err284 return templ_7745c5c3_Err
277 }285 }
278- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 15, "\" data-sv-confirm=\"")286+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 17, "\" data-sv-confirm=\"")
279 if templ_7745c5c3_Err != nil {287 if templ_7745c5c3_Err != nil {
280 return templ_7745c5c3_Err288 return templ_7745c5c3_Err
281 }289 }
282 var templ_7745c5c3_Var12 string290 var templ_7745c5c3_Var12 string
283 templ_7745c5c3_Var12, templ_7745c5c3_Err = templ.JoinStringErrs(item.Confirm)291 templ_7745c5c3_Var12, templ_7745c5c3_Err = templ.JoinStringErrs(item.Confirm)
284 if templ_7745c5c3_Err != nil {292 if templ_7745c5c3_Err != nil {
285- return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 52, Col: 144}293+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 54, Col: 144}
286 }294 }
287 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var12))295 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var12))
288 if templ_7745c5c3_Err != nil {296 if templ_7745c5c3_Err != nil {
289 return templ_7745c5c3_Err297 return templ_7745c5c3_Err
290 }298 }
291- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 16, "\">")299+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 18, "\">")
292 if templ_7745c5c3_Err != nil {300 if templ_7745c5c3_Err != nil {
293 return templ_7745c5c3_Err301 return templ_7745c5c3_Err
294 }302 }
295 var templ_7745c5c3_Var13 string303 var templ_7745c5c3_Var13 string
296 templ_7745c5c3_Var13, templ_7745c5c3_Err = templ.JoinStringErrs(item.Label)304 templ_7745c5c3_Var13, templ_7745c5c3_Err = templ.JoinStringErrs(item.Label)
297 if templ_7745c5c3_Err != nil {305 if templ_7745c5c3_Err != nil {
298- return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 52, Col: 159}306+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 54, Col: 159}
299 }307 }
300 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var13))308 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var13))
301 if templ_7745c5c3_Err != nil {309 if templ_7745c5c3_Err != nil {
302 return templ_7745c5c3_Err310 return templ_7745c5c3_Err
303 }311 }
304- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 17, "</button>")312+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 19, "</button>")
305 if templ_7745c5c3_Err != nil {313 if templ_7745c5c3_Err != nil {
306 return templ_7745c5c3_Err314 return templ_7745c5c3_Err
307 }315 }
308 }316 }
309- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 18, "</div></div><p class=\"sv-meta sv-key-hints\">Keys: <kbd>/</kbd> search, <kbd>j</kbd>/<kbd>k</kbd> move, <kbd>Enter</kbd> open, <kbd>d</kbd> delete focused entry.</p>")317+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 20, "</div></div>")
310 if templ_7745c5c3_Err != nil {318 if templ_7745c5c3_Err != nil {
311 return templ_7745c5c3_Err319 return templ_7745c5c3_Err
312 }320 }
@@ -336,7 +344,7 @@ func HistorySummary(data historyRenderData) templ.Component {
336 }344 }
337 ctx = templ.ClearChildren(ctx)345 ctx = templ.ClearChildren(ctx)
338 if historySummaryLoading(data) {346 if historySummaryLoading(data) {
339- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 19, "<div class=\"sv-stat-grid\">")347+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 21, "<div class=\"sv-stat-grid\">")
340 if templ_7745c5c3_Err != nil {348 if templ_7745c5c3_Err != nil {
341 return templ_7745c5c3_Err349 return templ_7745c5c3_Err
342 }350 }
@@ -352,13 +360,13 @@ func HistorySummary(data historyRenderData) templ.Component {
352 if templ_7745c5c3_Err != nil {360 if templ_7745c5c3_Err != nil {
353 return templ_7745c5c3_Err361 return templ_7745c5c3_Err
354 }362 }
355- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 20, "</div>")363+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 22, "</div>")
356 if templ_7745c5c3_Err != nil {364 if templ_7745c5c3_Err != nil {
357 return templ_7745c5c3_Err365 return templ_7745c5c3_Err
358 }366 }
359 } else {367 } else {
360 entries, visits, days := historySummaryValues(data)368 entries, visits, days := historySummaryValues(data)
361- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 21, "<div class=\"sv-stat-grid\">")369+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 23, "<div class=\"sv-stat-grid\">")
362 if templ_7745c5c3_Err != nil {370 if templ_7745c5c3_Err != nil {
363 return templ_7745c5c3_Err371 return templ_7745c5c3_Err
364 }372 }
@@ -374,7 +382,7 @@ func HistorySummary(data historyRenderData) templ.Component {
374 if templ_7745c5c3_Err != nil {382 if templ_7745c5c3_Err != nil {
375 return templ_7745c5c3_Err383 return templ_7745c5c3_Err
376 }384 }
377- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 22, "</div>")385+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 24, "</div>")
378 if templ_7745c5c3_Err != nil {386 if templ_7745c5c3_Err != nil {
379 return templ_7745c5c3_Err387 return templ_7745c5c3_Err
380 }388 }
@@ -404,33 +412,33 @@ func HistoryStatCard(label string, value int64) templ.Component {
404 templ_7745c5c3_Var15 = templ.NopComponent412 templ_7745c5c3_Var15 = templ.NopComponent
405 }413 }
406 ctx = templ.ClearChildren(ctx)414 ctx = templ.ClearChildren(ctx)
407- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 23, "<div class=\"sv-stat-card\"><span class=\"sv-stat-value\">")415+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 25, "<div class=\"sv-stat-card\"><span class=\"sv-stat-value\">")
408 if templ_7745c5c3_Err != nil {416 if templ_7745c5c3_Err != nil {
409 return templ_7745c5c3_Err417 return templ_7745c5c3_Err
410 }418 }
411 var templ_7745c5c3_Var16 string419 var templ_7745c5c3_Var16 string
412 templ_7745c5c3_Var16, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", value))420 templ_7745c5c3_Var16, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", value))
413 if templ_7745c5c3_Err != nil {421 if templ_7745c5c3_Err != nil {
414- return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 78, Col: 81}422+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 79, Col: 81}
415 }423 }
416 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var16))424 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var16))
417 if templ_7745c5c3_Err != nil {425 if templ_7745c5c3_Err != nil {
418 return templ_7745c5c3_Err426 return templ_7745c5c3_Err
419 }427 }
420- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 24, "</span><span class=\"sv-stat-label\">")428+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 26, "</span><span class=\"sv-stat-label\">")
421 if templ_7745c5c3_Err != nil {429 if templ_7745c5c3_Err != nil {
422 return templ_7745c5c3_Err430 return templ_7745c5c3_Err
423 }431 }
424 var templ_7745c5c3_Var17 string432 var templ_7745c5c3_Var17 string
425 templ_7745c5c3_Var17, templ_7745c5c3_Err = templ.JoinStringErrs(label)433 templ_7745c5c3_Var17, templ_7745c5c3_Err = templ.JoinStringErrs(label)
426 if templ_7745c5c3_Err != nil {434 if templ_7745c5c3_Err != nil {
427- return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 78, Col: 125}435+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 79, Col: 125}
428 }436 }
429 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var17))437 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var17))
430 if templ_7745c5c3_Err != nil {438 if templ_7745c5c3_Err != nil {
431 return templ_7745c5c3_Err439 return templ_7745c5c3_Err
432 }440 }
433- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 25, "</span></div>")441+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 27, "</span></div>")
434 if templ_7745c5c3_Err != nil {442 if templ_7745c5c3_Err != nil {
435 return templ_7745c5c3_Err443 return templ_7745c5c3_Err
436 }444 }
@@ -470,7 +478,7 @@ func HistoryDomains(data historyRenderData) templ.Component {
470 return templ_7745c5c3_Err478 return templ_7745c5c3_Err
471 }479 }
472 } else {480 } else {
473- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 26, "<div class=\"sv-domain-list\">")481+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 28, "<div class=\"sv-domain-list\">")
474 if templ_7745c5c3_Err != nil {482 if templ_7745c5c3_Err != nil {
475 return templ_7745c5c3_Err483 return templ_7745c5c3_Err
476 }484 }
@@ -478,85 +486,85 @@ func HistoryDomains(data historyRenderData) templ.Component {
478 if domain != nil && domain.Domain != "" {486 if domain != nil && domain.Domain != "" {
479 domainKey := historyDomainActionKey(domain)487 domainKey := historyDomainActionKey(domain)
480 displayDomain := historyDomainDisplayLabel(domain)488 displayDomain := historyDomainDisplayLabel(domain)
481- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 27, "<span class=\"sv-domain-chip\"><span class=\"sv-domain-chip-main\"><button type=\"button\" class=\"sv-domain-filter\" data-sv-action=\"history.filterDomain\" data-domain=\"")489+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 29, "<span class=\"sv-domain-chip\"><span class=\"sv-domain-chip-main\"><button type=\"button\" class=\"sv-domain-filter\" data-sv-action=\"history.filterDomain\" data-domain=\"")
482 if templ_7745c5c3_Err != nil {490 if templ_7745c5c3_Err != nil {
483 return templ_7745c5c3_Err491 return templ_7745c5c3_Err
484 }492 }
485 var templ_7745c5c3_Var19 string493 var templ_7745c5c3_Var19 string
486 templ_7745c5c3_Var19, templ_7745c5c3_Err = templ.JoinStringErrs(domainKey)494 templ_7745c5c3_Var19, templ_7745c5c3_Err = templ.JoinStringErrs(domainKey)
487 if templ_7745c5c3_Err != nil {495 if templ_7745c5c3_Err != nil {
488- return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 94, Col: 115}496+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 95, Col: 115}
489 }497 }
490 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var19))498 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var19))
491 if templ_7745c5c3_Err != nil {499 if templ_7745c5c3_Err != nil {
492 return templ_7745c5c3_Err500 return templ_7745c5c3_Err
493 }501 }
494- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 28, "\">")502+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 30, "\">")
495 if templ_7745c5c3_Err != nil {503 if templ_7745c5c3_Err != nil {
496 return templ_7745c5c3_Err504 return templ_7745c5c3_Err
497 }505 }
498 var templ_7745c5c3_Var20 string506 var templ_7745c5c3_Var20 string
499 templ_7745c5c3_Var20, templ_7745c5c3_Err = templ.JoinStringErrs(displayDomain)507 templ_7745c5c3_Var20, templ_7745c5c3_Err = templ.JoinStringErrs(displayDomain)
500 if templ_7745c5c3_Err != nil {508 if templ_7745c5c3_Err != nil {
501- return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 94, Col: 133}509+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 95, Col: 133}
502 }510 }
503 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var20))511 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var20))
504 if templ_7745c5c3_Err != nil {512 if templ_7745c5c3_Err != nil {
505 return templ_7745c5c3_Err513 return templ_7745c5c3_Err
506 }514 }
507- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 29, "</button> <span class=\"sv-domain-meta\">")515+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 31, "</button> <span class=\"sv-domain-meta\">")
508 if templ_7745c5c3_Err != nil {516 if templ_7745c5c3_Err != nil {
509 return templ_7745c5c3_Err517 return templ_7745c5c3_Err
510 }518 }
511 var templ_7745c5c3_Var21 string519 var templ_7745c5c3_Var21 string
512 templ_7745c5c3_Var21, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d pages · %d visits", domain.PageCount, domain.TotalVisits))520 templ_7745c5c3_Var21, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d pages · %d visits", domain.PageCount, domain.TotalVisits))
513 if templ_7745c5c3_Err != nil {521 if templ_7745c5c3_Err != nil {
514- return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 95, Col: 112}522+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 96, Col: 112}
515 }523 }
516 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var21))524 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var21))
517 if templ_7745c5c3_Err != nil {525 if templ_7745c5c3_Err != nil {
518 return templ_7745c5c3_Err526 return templ_7745c5c3_Err
519 }527 }
520- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 30, "</span></span> <button type=\"button\" class=\"sv-icon-button sv-danger\" data-sv-action=\"history.deleteDomain\" data-domain=\"")528+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 32, "</span></span> <button type=\"button\" class=\"sv-icon-button sv-danger\" data-sv-action=\"history.deleteDomain\" data-domain=\"")
521 if templ_7745c5c3_Err != nil {529 if templ_7745c5c3_Err != nil {
522 return templ_7745c5c3_Err530 return templ_7745c5c3_Err
523 }531 }
524 var templ_7745c5c3_Var22 string532 var templ_7745c5c3_Var22 string
525 templ_7745c5c3_Var22, templ_7745c5c3_Err = templ.JoinStringErrs(domainKey)533 templ_7745c5c3_Var22, templ_7745c5c3_Err = templ.JoinStringErrs(domainKey)
526 if templ_7745c5c3_Err != nil {534 if templ_7745c5c3_Err != nil {
527- return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 97, Col: 122}535+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 98, Col: 122}
528 }536 }
529 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var22))537 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var22))
530 if templ_7745c5c3_Err != nil {538 if templ_7745c5c3_Err != nil {
531 return templ_7745c5c3_Err539 return templ_7745c5c3_Err
532 }540 }
533- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 31, "\" data-sv-confirm=\"")541+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 33, "\" data-sv-confirm=\"")
534 if templ_7745c5c3_Err != nil {542 if templ_7745c5c3_Err != nil {
535 return templ_7745c5c3_Err543 return templ_7745c5c3_Err
536 }544 }
537 var templ_7745c5c3_Var23 string545 var templ_7745c5c3_Var23 string
538 templ_7745c5c3_Var23, templ_7745c5c3_Err = templ.JoinStringErrs("Delete all history for " + displayDomain + "?")546 templ_7745c5c3_Var23, templ_7745c5c3_Err = templ.JoinStringErrs("Delete all history for " + displayDomain + "?")
539 if templ_7745c5c3_Err != nil {547 if templ_7745c5c3_Err != nil {
540- return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 97, Col: 190}548+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 98, Col: 190}
541 }549 }
542 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var23))550 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var23))
543 if templ_7745c5c3_Err != nil {551 if templ_7745c5c3_Err != nil {
544 return templ_7745c5c3_Err552 return templ_7745c5c3_Err
545 }553 }
546- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 32, "\" aria-label=\"")554+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 34, "\" aria-label=\"")
547 if templ_7745c5c3_Err != nil {555 if templ_7745c5c3_Err != nil {
548 return templ_7745c5c3_Err556 return templ_7745c5c3_Err
549 }557 }
550 var templ_7745c5c3_Var24 string558 var templ_7745c5c3_Var24 string
551 templ_7745c5c3_Var24, templ_7745c5c3_Err = templ.JoinStringErrs("Delete history for " + displayDomain)559 templ_7745c5c3_Var24, templ_7745c5c3_Err = templ.JoinStringErrs("Delete history for " + displayDomain)
552 if templ_7745c5c3_Err != nil {560 if templ_7745c5c3_Err != nil {
553- return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 97, Col: 243}561+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 98, Col: 243}
554 }562 }
555 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var24))563 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var24))
556 if templ_7745c5c3_Err != nil {564 if templ_7745c5c3_Err != nil {
557 return templ_7745c5c3_Err565 return templ_7745c5c3_Err
558 }566 }
559- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 33, "\">")567+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 35, "\">")
560 if templ_7745c5c3_Err != nil {568 if templ_7745c5c3_Err != nil {
561 return templ_7745c5c3_Err569 return templ_7745c5c3_Err
562 }570 }
@@ -564,13 +572,13 @@ func HistoryDomains(data historyRenderData) templ.Component {
564 if templ_7745c5c3_Err != nil {572 if templ_7745c5c3_Err != nil {
565 return templ_7745c5c3_Err573 return templ_7745c5c3_Err
566 }574 }
567- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 34, "</button></span>")575+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 36, "</button></span>")
568 if templ_7745c5c3_Err != nil {576 if templ_7745c5c3_Err != nil {
569 return templ_7745c5c3_Err577 return templ_7745c5c3_Err
570 }578 }
571 }579 }
572 }580 }
573- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 35, "</div>")581+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 37, "</div>")
574 if templ_7745c5c3_Err != nil {582 if templ_7745c5c3_Err != nil {
575 return templ_7745c5c3_Err583 return templ_7745c5c3_Err
576 }584 }
@@ -606,7 +614,7 @@ func HistoryTimeline(data historyRenderData) templ.Component {
606 return templ_7745c5c3_Err614 return templ_7745c5c3_Err
607 }615 }
608 } else {616 } else {
609- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 36, "<div class=\"sv-history-timeline-list\" data-sv-history-timeline>")617+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 38, "<div class=\"sv-history-timeline-list\" data-sv-history-timeline>")
610 if templ_7745c5c3_Err != nil {618 if templ_7745c5c3_Err != nil {
611 return templ_7745c5c3_Err619 return templ_7745c5c3_Err
612 }620 }
@@ -626,7 +634,7 @@ func HistoryTimeline(data historyRenderData) templ.Component {
626 if templ_7745c5c3_Err != nil {634 if templ_7745c5c3_Err != nil {
627 return templ_7745c5c3_Err635 return templ_7745c5c3_Err
628 }636 }
629- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 37, "</div>")637+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 39, "</div>")
630 if templ_7745c5c3_Err != nil {638 if templ_7745c5c3_Err != nil {
631 return templ_7745c5c3_Err639 return templ_7745c5c3_Err
632 }640 }
@@ -724,20 +732,20 @@ func HistoryTimelineAppendGroups(entries []*entity.HistoryEntry, mergeFirstDate
724 groups := groupHistoryEntries(entries)732 groups := groupHistoryEntries(entries)
725 for index, group := range groups {733 for index, group := range groups {
726 if index == 0 && group.Date == mergeFirstDate {734 if index == 0 && group.Date == mergeFirstDate {
727- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 38, "<div data-sv-history-merge-date=\"")735+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 40, "<div data-sv-history-merge-date=\"")
728 if templ_7745c5c3_Err != nil {736 if templ_7745c5c3_Err != nil {
729 return templ_7745c5c3_Err737 return templ_7745c5c3_Err
730 }738 }
731 var templ_7745c5c3_Var29 string739 var templ_7745c5c3_Var29 string
732 templ_7745c5c3_Var29, templ_7745c5c3_Err = templ.JoinStringErrs(group.Date)740 templ_7745c5c3_Var29, templ_7745c5c3_Err = templ.JoinStringErrs(group.Date)
733 if templ_7745c5c3_Err != nil {741 if templ_7745c5c3_Err != nil {
734- return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 137, Col: 47}742+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 138, Col: 47}
735 }743 }
736 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var29))744 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var29))
737 if templ_7745c5c3_Err != nil {745 if templ_7745c5c3_Err != nil {
738 return templ_7745c5c3_Err746 return templ_7745c5c3_Err
739 }747 }
740- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 39, "\">")748+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 41, "\">")
741 if templ_7745c5c3_Err != nil {749 if templ_7745c5c3_Err != nil {
742 return templ_7745c5c3_Err750 return templ_7745c5c3_Err
743 }751 }
@@ -749,7 +757,7 @@ func HistoryTimelineAppendGroups(entries []*entity.HistoryEntry, mergeFirstDate
749 }757 }
750 }758 }
751 }759 }
752- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 40, "</div>")760+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 42, "</div>")
753 if templ_7745c5c3_Err != nil {761 if templ_7745c5c3_Err != nil {
754 return templ_7745c5c3_Err762 return templ_7745c5c3_Err
755 }763 }
@@ -785,43 +793,43 @@ func HistoryTimelineGroup(group historyTimelineGroup, showHeading bool) templ.Co
785 templ_7745c5c3_Var30 = templ.NopComponent793 templ_7745c5c3_Var30 = templ.NopComponent
786 }794 }
787 ctx = templ.ClearChildren(ctx)795 ctx = templ.ClearChildren(ctx)
788- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 41, "<section class=\"sv-timeline-group\" data-sv-history-date=\"")796+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 43, "<section class=\"sv-timeline-group\" data-sv-history-date=\"")
789 if templ_7745c5c3_Err != nil {797 if templ_7745c5c3_Err != nil {
790 return templ_7745c5c3_Err798 return templ_7745c5c3_Err
791 }799 }
792 var templ_7745c5c3_Var31 string800 var templ_7745c5c3_Var31 string
793 templ_7745c5c3_Var31, templ_7745c5c3_Err = templ.JoinStringErrs(group.Date)801 templ_7745c5c3_Var31, templ_7745c5c3_Err = templ.JoinStringErrs(group.Date)
794 if templ_7745c5c3_Err != nil {802 if templ_7745c5c3_Err != nil {
795- return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 151, Col: 69}803+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 152, Col: 69}
796 }804 }
797 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var31))805 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var31))
798 if templ_7745c5c3_Err != nil {806 if templ_7745c5c3_Err != nil {
799 return templ_7745c5c3_Err807 return templ_7745c5c3_Err
800 }808 }
801- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 42, "\">")809+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 44, "\">")
802 if templ_7745c5c3_Err != nil {810 if templ_7745c5c3_Err != nil {
803 return templ_7745c5c3_Err811 return templ_7745c5c3_Err
804 }812 }
805 if showHeading {813 if showHeading {
806- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 43, "<h3>")814+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 45, "<h3>")
807 if templ_7745c5c3_Err != nil {815 if templ_7745c5c3_Err != nil {
808 return templ_7745c5c3_Err816 return templ_7745c5c3_Err
809 }817 }
810 var templ_7745c5c3_Var32 string818 var templ_7745c5c3_Var32 string
811 templ_7745c5c3_Var32, templ_7745c5c3_Err = templ.JoinStringErrs(group.Label)819 templ_7745c5c3_Var32, templ_7745c5c3_Err = templ.JoinStringErrs(group.Label)
812 if templ_7745c5c3_Err != nil {820 if templ_7745c5c3_Err != nil {
813- return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 153, Col: 20}821+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 154, Col: 20}
814 }822 }
815 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var32))823 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var32))
816 if templ_7745c5c3_Err != nil {824 if templ_7745c5c3_Err != nil {
817 return templ_7745c5c3_Err825 return templ_7745c5c3_Err
818 }826 }
819- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 44, "</h3>")827+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 46, "</h3>")
820 if templ_7745c5c3_Err != nil {828 if templ_7745c5c3_Err != nil {
821 return templ_7745c5c3_Err829 return templ_7745c5c3_Err
822 }830 }
823 }831 }
824- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 45, "<ul class=\"sv-list\">")832+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 47, "<ul class=\"sv-list\">")
825 if templ_7745c5c3_Err != nil {833 if templ_7745c5c3_Err != nil {
826 return templ_7745c5c3_Err834 return templ_7745c5c3_Err
827 }835 }
@@ -833,7 +841,7 @@ func HistoryTimelineGroup(group historyTimelineGroup, showHeading bool) templ.Co
833 }841 }
834 }842 }
835 }843 }
836- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 46, "</ul></section>")844+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 48, "</ul></section>")
837 if templ_7745c5c3_Err != nil {845 if templ_7745c5c3_Err != nil {
838 return templ_7745c5c3_Err846 return templ_7745c5c3_Err
839 }847 }
@@ -862,35 +870,35 @@ func HistoryLoadMore(data historyRenderData) templ.Component {
862 templ_7745c5c3_Var33 = templ.NopComponent870 templ_7745c5c3_Var33 = templ.NopComponent
863 }871 }
864 ctx = templ.ClearChildren(ctx)872 ctx = templ.ClearChildren(ctx)
865- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 47, "<div class=\"sv-history-load-more\" data-sv-history-load-more-container>")873+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 49, "<div class=\"sv-history-load-more\" data-sv-history-load-more-container>")
866 if templ_7745c5c3_Err != nil {874 if templ_7745c5c3_Err != nil {
867 return templ_7745c5c3_Err875 return templ_7745c5c3_Err
868 }876 }
869 if showHistoryLoadMore(data) {877 if showHistoryLoadMore(data) {
870- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 48, "<button type=\"button\" class=\"sv-button sv-button-secondary\" data-sv-action=\"history.loadMore\" data-before=\"")878+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 50, "<button type=\"button\" class=\"sv-button sv-button-secondary\" data-sv-action=\"history.loadMore\" data-before=\"")
871 if templ_7745c5c3_Err != nil {879 if templ_7745c5c3_Err != nil {
872 return templ_7745c5c3_Err880 return templ_7745c5c3_Err
873 }881 }
874 var templ_7745c5c3_Var34 string882 var templ_7745c5c3_Var34 string
875 templ_7745c5c3_Var34, templ_7745c5c3_Err = templ.JoinStringErrs(historyLoadMoreCursor(data))883 templ_7745c5c3_Var34, templ_7745c5c3_Err = templ.JoinStringErrs(historyLoadMoreCursor(data))
876 if templ_7745c5c3_Err != nil {884 if templ_7745c5c3_Err != nil {
877- return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 168, Col: 138}885+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 169, Col: 138}
878 }886 }
879 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var34))887 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var34))
880 if templ_7745c5c3_Err != nil {888 if templ_7745c5c3_Err != nil {
881 return templ_7745c5c3_Err889 return templ_7745c5c3_Err
882 }890 }
883- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 49, "\" data-sv-history-load-more>Load older visits</button>")891+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 51, "\" data-sv-history-load-more>Load older visits</button>")
884 if templ_7745c5c3_Err != nil {892 if templ_7745c5c3_Err != nil {
885 return templ_7745c5c3_Err893 return templ_7745c5c3_Err
886 }894 }
887 } else if strings.TrimSpace(data.Query) == "" && countHistoryEntries(data.Entries) > 0 {895 } else if strings.TrimSpace(data.Query) == "" && countHistoryEntries(data.Entries) > 0 {
888- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 50, "<p class=\"sv-meta\">End of history</p>")896+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 52, "<p class=\"sv-meta\">End of history</p>")
889 if templ_7745c5c3_Err != nil {897 if templ_7745c5c3_Err != nil {
890 return templ_7745c5c3_Err898 return templ_7745c5c3_Err
891 }899 }
892 }900 }
893- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 51, "</div>")901+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 53, "</div>")
894 if templ_7745c5c3_Err != nil {902 if templ_7745c5c3_Err != nil {
895 return templ_7745c5c3_Err903 return templ_7745c5c3_Err
896 }904 }
@@ -919,20 +927,20 @@ func HistoryItem(entry *entity.HistoryEntry) templ.Component {
919 templ_7745c5c3_Var35 = templ.NopComponent927 templ_7745c5c3_Var35 = templ.NopComponent
920 }928 }
921 ctx = templ.ClearChildren(ctx)929 ctx = templ.ClearChildren(ctx)
922- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 52, "<li class=\"sv-list-row\"><article class=\"sv-history-item\" data-sv-history-row data-history-id=\"")930+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 54, "<li class=\"sv-list-row\"><article class=\"sv-history-item\" data-sv-history-row data-history-id=\"")
923 if templ_7745c5c3_Err != nil {931 if templ_7745c5c3_Err != nil {
924 return templ_7745c5c3_Err932 return templ_7745c5c3_Err
925 }933 }
926 var templ_7745c5c3_Var36 string934 var templ_7745c5c3_Var36 string
927 templ_7745c5c3_Var36, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", entry.ID))935 templ_7745c5c3_Var36, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", entry.ID))
928 if templ_7745c5c3_Err != nil {936 if templ_7745c5c3_Err != nil {
929- return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 177, Col: 100}937+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 178, Col: 100}
930 }938 }
931 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var36))939 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var36))
932 if templ_7745c5c3_Err != nil {940 if templ_7745c5c3_Err != nil {
933 return templ_7745c5c3_Err941 return templ_7745c5c3_Err
934 }942 }
935- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 53, "\"><div class=\"sv-history-content\">")943+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 55, "\"><div class=\"sv-history-content\">")
936 if templ_7745c5c3_Err != nil {944 if templ_7745c5c3_Err != nil {
937 return templ_7745c5c3_Err945 return templ_7745c5c3_Err
938 }946 }
@@ -942,7 +950,7 @@ func HistoryItem(entry *entity.HistoryEntry) templ.Component {
942 if templ_7745c5c3_Err != nil {950 if templ_7745c5c3_Err != nil {
943 return templ_7745c5c3_Err951 return templ_7745c5c3_Err
944 }952 }
945- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 54, "<span class=\"")953+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 56, "<span class=\"")
946 if templ_7745c5c3_Err != nil {954 if templ_7745c5c3_Err != nil {
947 return templ_7745c5c3_Err955 return templ_7745c5c3_Err
948 }956 }
@@ -955,121 +963,121 @@ func HistoryItem(entry *entity.HistoryEntry) templ.Component {
955 if templ_7745c5c3_Err != nil {963 if templ_7745c5c3_Err != nil {
956 return templ_7745c5c3_Err964 return templ_7745c5c3_Err
957 }965 }
958- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 55, "\" aria-hidden=\"true\"><span class=\"sv-history-favicon-fallback\">")966+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 57, "\" aria-hidden=\"true\"><span class=\"sv-history-favicon-fallback\">")
959 if templ_7745c5c3_Err != nil {967 if templ_7745c5c3_Err != nil {
960 return templ_7745c5c3_Err968 return templ_7745c5c3_Err
961 }969 }
962 var templ_7745c5c3_Var39 string970 var templ_7745c5c3_Var39 string
963 templ_7745c5c3_Var39, templ_7745c5c3_Err = templ.JoinStringErrs(historyFaviconFallback(entry))971 templ_7745c5c3_Var39, templ_7745c5c3_Err = templ.JoinStringErrs(historyFaviconFallback(entry))
964 if templ_7745c5c3_Err != nil {972 if templ_7745c5c3_Err != nil {
965- return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 181, Col: 78}973+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 182, Col: 78}
966 }974 }
967 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var39))975 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var39))
968 if templ_7745c5c3_Err != nil {976 if templ_7745c5c3_Err != nil {
969 return templ_7745c5c3_Err977 return templ_7745c5c3_Err
970 }978 }
971- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 56, "</span> ")979+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 58, "</span> ")
972 if templ_7745c5c3_Err != nil {980 if templ_7745c5c3_Err != nil {
973 return templ_7745c5c3_Err981 return templ_7745c5c3_Err
974 }982 }
975 if faviconURL != "" {983 if faviconURL != "" {
976- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 57, "<img src=\"")984+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 59, "<img src=\"")
977 if templ_7745c5c3_Err != nil {985 if templ_7745c5c3_Err != nil {
978 return templ_7745c5c3_Err986 return templ_7745c5c3_Err
979 }987 }
980 var templ_7745c5c3_Var40 string988 var templ_7745c5c3_Var40 string
981 templ_7745c5c3_Var40, templ_7745c5c3_Err = templ.JoinStringErrs(templ.SafeURL(faviconURL))989 templ_7745c5c3_Var40, templ_7745c5c3_Err = templ.JoinStringErrs(templ.SafeURL(faviconURL))
982 if templ_7745c5c3_Err != nil {990 if templ_7745c5c3_Err != nil {
983- return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 183, Col: 42}991+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 184, Col: 42}
984 }992 }
985 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var40))993 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var40))
986 if templ_7745c5c3_Err != nil {994 if templ_7745c5c3_Err != nil {
987 return templ_7745c5c3_Err995 return templ_7745c5c3_Err
988 }996 }
989- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 58, "\" alt=\"\" width=\"24\" height=\"24\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"same-origin\" onerror=\"this.parentElement.classList.remove('sv-history-favicon-has-image'); this.remove()\">")997+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 60, "\" alt=\"\" width=\"24\" height=\"24\" loading=\"lazy\" decoding=\"async\" referrerpolicy=\"same-origin\" onerror=\"this.parentElement.classList.remove('sv-history-favicon-has-image'); this.remove()\">")
990 if templ_7745c5c3_Err != nil {998 if templ_7745c5c3_Err != nil {
991 return templ_7745c5c3_Err999 return templ_7745c5c3_Err
992 }1000 }
993 }1001 }
994- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 59, "</span><div class=\"sv-history-main\"><a class=\"sv-link sv-history-open\" href=\"")1002+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 61, "</span><div class=\"sv-history-main\"><a class=\"sv-link sv-history-open\" href=\"")
995 if templ_7745c5c3_Err != nil {1003 if templ_7745c5c3_Err != nil {
996 return templ_7745c5c3_Err1004 return templ_7745c5c3_Err
997 }1005 }
998 var templ_7745c5c3_Var41 templ.SafeURL1006 var templ_7745c5c3_Var41 templ.SafeURL
999 templ_7745c5c3_Var41, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(sanitizeHref(entry.URL)))1007 templ_7745c5c3_Var41, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(sanitizeHref(entry.URL)))
1000 if templ_7745c5c3_Err != nil {1008 if templ_7745c5c3_Err != nil {
1001- return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 187, Col: 85}1009+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 188, Col: 85}
1002 }1010 }
1003 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var41))1011 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var41))
1004 if templ_7745c5c3_Err != nil {1012 if templ_7745c5c3_Err != nil {
1005 return templ_7745c5c3_Err1013 return templ_7745c5c3_Err
1006 }1014 }
1007- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 60, "\">")1015+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 62, "\">")
1008 if templ_7745c5c3_Err != nil {1016 if templ_7745c5c3_Err != nil {
1009 return templ_7745c5c3_Err1017 return templ_7745c5c3_Err
1010 }1018 }
1011 var templ_7745c5c3_Var42 string1019 var templ_7745c5c3_Var42 string
1012 templ_7745c5c3_Var42, templ_7745c5c3_Err = templ.JoinStringErrs(historyItemLabel(entry))1020 templ_7745c5c3_Var42, templ_7745c5c3_Err = templ.JoinStringErrs(historyItemLabel(entry))
1013 if templ_7745c5c3_Err != nil {1021 if templ_7745c5c3_Err != nil {
1014- return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 187, Col: 113}1022+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 188, Col: 113}
1015 }1023 }
1016 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var42))1024 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var42))
1017 if templ_7745c5c3_Err != nil {1025 if templ_7745c5c3_Err != nil {
1018 return templ_7745c5c3_Err1026 return templ_7745c5c3_Err
1019 }1027 }
1020- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 61, "</a><p class=\"sv-history-url\" title=\"")1028+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 63, "</a><p class=\"sv-history-url\" title=\"")
1021 if templ_7745c5c3_Err != nil {1029 if templ_7745c5c3_Err != nil {
1022 return templ_7745c5c3_Err1030 return templ_7745c5c3_Err
1023 }1031 }
1024 var templ_7745c5c3_Var43 string1032 var templ_7745c5c3_Var43 string
1025 templ_7745c5c3_Var43, templ_7745c5c3_Err = templ.JoinStringErrs(entry.URL)1033 templ_7745c5c3_Var43, templ_7745c5c3_Err = templ.JoinStringErrs(entry.URL)
1026 if templ_7745c5c3_Err != nil {1034 if templ_7745c5c3_Err != nil {
1027- return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 188, Col: 48}1035+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 189, Col: 48}
1028 }1036 }
1029 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var43))1037 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var43))
1030 if templ_7745c5c3_Err != nil {1038 if templ_7745c5c3_Err != nil {
1031 return templ_7745c5c3_Err1039 return templ_7745c5c3_Err
1032 }1040 }
1033- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 62, "\">")1041+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 64, "\">")
1034 if templ_7745c5c3_Err != nil {1042 if templ_7745c5c3_Err != nil {
1035 return templ_7745c5c3_Err1043 return templ_7745c5c3_Err
1036 }1044 }
1037 var templ_7745c5c3_Var44 string1045 var templ_7745c5c3_Var44 string
1038 templ_7745c5c3_Var44, templ_7745c5c3_Err = templ.JoinStringErrs(historyItemURL(entry))1046 templ_7745c5c3_Var44, templ_7745c5c3_Err = templ.JoinStringErrs(historyItemURL(entry))
1039 if templ_7745c5c3_Err != nil {1047 if templ_7745c5c3_Err != nil {
1040- return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 188, Col: 74}1048+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 189, Col: 74}
1041 }1049 }
1042 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var44))1050 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var44))
1043 if templ_7745c5c3_Err != nil {1051 if templ_7745c5c3_Err != nil {
1044 return templ_7745c5c3_Err1052 return templ_7745c5c3_Err
1045 }1053 }
1046- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 63, "</p><p class=\"sv-history-meta\">")1054+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 65, "</p><p class=\"sv-history-meta\">")
1047 if templ_7745c5c3_Err != nil {1055 if templ_7745c5c3_Err != nil {
1048 return templ_7745c5c3_Err1056 return templ_7745c5c3_Err
1049 }1057 }
1050 var templ_7745c5c3_Var45 string1058 var templ_7745c5c3_Var45 string
1051 templ_7745c5c3_Var45, templ_7745c5c3_Err = templ.JoinStringErrs(historyItemMeta(entry))1059 templ_7745c5c3_Var45, templ_7745c5c3_Err = templ.JoinStringErrs(historyItemMeta(entry))
1052 if templ_7745c5c3_Err != nil {1060 if templ_7745c5c3_Err != nil {
1053- return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 189, Col: 56}1061+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 190, Col: 56}
1054 }1062 }
1055 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var45))1063 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var45))
1056 if templ_7745c5c3_Err != nil {1064 if templ_7745c5c3_Err != nil {
1057 return templ_7745c5c3_Err1065 return templ_7745c5c3_Err
1058 }1066 }
1059- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 64, "</p></div></div><div class=\"sv-history-row-actions\"><a class=\"sv-button sv-button-secondary\" href=\"")1067+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 66, "</p></div></div><div class=\"sv-history-row-actions\"><a class=\"sv-button sv-button-secondary\" href=\"")
1060 if templ_7745c5c3_Err != nil {1068 if templ_7745c5c3_Err != nil {
1061 return templ_7745c5c3_Err1069 return templ_7745c5c3_Err
1062 }1070 }
1063 var templ_7745c5c3_Var46 templ.SafeURL1071 var templ_7745c5c3_Var46 templ.SafeURL
1064 templ_7745c5c3_Var46, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(sanitizeHref(entry.URL)))1072 templ_7745c5c3_Var46, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(sanitizeHref(entry.URL)))
1065 if templ_7745c5c3_Err != nil {1073 if templ_7745c5c3_Err != nil {
1066- return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 193, Col: 90}1074+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 194, Col: 90}
1067 }1075 }
1068 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var46))1076 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var46))
1069 if templ_7745c5c3_Err != nil {1077 if templ_7745c5c3_Err != nil {
1070 return templ_7745c5c3_Err1078 return templ_7745c5c3_Err
1071 }1079 }
1072- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 65, "\">")1080+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 67, "\">")
1073 if templ_7745c5c3_Err != nil {1081 if templ_7745c5c3_Err != nil {
1074 return templ_7745c5c3_Err1082 return templ_7745c5c3_Err
1075 }1083 }
@@ -1077,30 +1085,30 @@ func HistoryItem(entry *entity.HistoryEntry) templ.Component {
1077 if templ_7745c5c3_Err != nil {1085 if templ_7745c5c3_Err != nil {
1078 return templ_7745c5c3_Err1086 return templ_7745c5c3_Err
1079 }1087 }
1080- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 66, "</a> <button type=\"button\" class=\"sv-button sv-button-secondary sv-button-danger sv-button-icon-only\" data-sv-action=\"history.deleteEntry\" data-id=\"")1088+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 68, "</a> <button type=\"button\" class=\"sv-button sv-button-secondary sv-button-danger sv-button-icon-only\" data-sv-action=\"history.deleteEntry\" data-id=\"")
1081 if templ_7745c5c3_Err != nil {1089 if templ_7745c5c3_Err != nil {
1082 return templ_7745c5c3_Err1090 return templ_7745c5c3_Err
1083 }1091 }
1084 var templ_7745c5c3_Var47 string1092 var templ_7745c5c3_Var47 string
1085 templ_7745c5c3_Var47, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", entry.ID))1093 templ_7745c5c3_Var47, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", entry.ID))
1086 if templ_7745c5c3_Err != nil {1094 if templ_7745c5c3_Err != nil {
1087- return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 194, Col: 175}1095+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `history.templ`, Line: 195, Col: 175}
1088 }1096 }
1089 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var47))1097 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var47))
1090 if templ_7745c5c3_Err != nil {1098 if templ_7745c5c3_Err != nil {
1091 return templ_7745c5c3_Err1099 return templ_7745c5c3_Err
1092 }1100 }
1093- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 67, "\" data-sv-confirm=\"Delete this history entry?\" aria-label=\"Delete this history entry\"")1101+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 69, "\" data-sv-confirm=\"Delete this history entry?\" aria-label=\"Delete this history entry\"")
1094 if templ_7745c5c3_Err != nil {1102 if templ_7745c5c3_Err != nil {
1095 return templ_7745c5c3_Err1103 return templ_7745c5c3_Err
1096 }1104 }
1097 if entry.ID <= 0 {1105 if entry.ID <= 0 {
1098- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 68, " disabled")1106+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 70, " disabled")
1099 if templ_7745c5c3_Err != nil {1107 if templ_7745c5c3_Err != nil {
1100 return templ_7745c5c3_Err1108 return templ_7745c5c3_Err
1101 }1109 }
1102 }1110 }
1103- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 69, ">")1111+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 71, ">")
1104 if templ_7745c5c3_Err != nil {1112 if templ_7745c5c3_Err != nil {
1105 return templ_7745c5c3_Err1113 return templ_7745c5c3_Err
1106 }1114 }
@@ -1108,7 +1116,7 @@ func HistoryItem(entry *entity.HistoryEntry) templ.Component {
1108 if templ_7745c5c3_Err != nil {1116 if templ_7745c5c3_Err != nil {
1109 return templ_7745c5c3_Err1117 return templ_7745c5c3_Err
1110 }1118 }
1111- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 70, "</button></div></article></li>")1119+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 72, "</button></div></article></li>")
1112 if templ_7745c5c3_Err != nil {1120 if templ_7745c5c3_Err != nil {
1113 return templ_7745c5c3_Err1121 return templ_7745c5c3_Err
1114 }1122 }

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 8

Tags 42

↑↓ moveenter openesc close