detached 4f7fc7c

fix(systemviews): mute history title stats

commit
4f7fc7c7855cc4863d751647c976c6b62dd247e1
author
brice · · 2026-04-26 07:14 UTC
parent
4e23726
signature
GPG VerifiedCD88F9E564E0102646FB6077A1A07C7C7C3E349D · arch-gpg Verified for the committer email
8 files · +204 -157
M assets/systemviews/systemviews.css +11 -0
@@ -53,11 +53,22 @@ body {
5353 }
5454
5555 .sv-title {
56+ display: flex;
57+ flex-wrap: wrap;
58+ gap: 0.45rem;
59+ align-items: baseline;
5660 margin: 0;
5761 font-size: clamp(1.35rem, 2.4vw, 2rem);
5862 line-height: 1.15;
5963 }
6064
65+.sv-title-detail {
66+ color: var(--sv-muted);
67+ font-size: clamp(0.9rem, 1.25vw, 1.05rem);
68+ font-weight: 600;
69+ letter-spacing: 0;
70+}
71+
6172 .sv-content {
6273 display: grid;
6374 gap: 1rem;
@@ -53,11 +53,22 @@ body {
53 }53 }
54 54
55 .sv-title {55 .sv-title {
56+ display: flex;
57+ flex-wrap: wrap;
58+ gap: 0.45rem;
59+ align-items: baseline;
56 margin: 0;60 margin: 0;
57 font-size: clamp(1.35rem, 2.4vw, 2rem);61 font-size: clamp(1.35rem, 2.4vw, 2rem);
58 line-height: 1.15;62 line-height: 1.15;
59 }63 }
60 64
65+.sv-title-detail {
66+ color: var(--sv-muted);
67+ font-size: clamp(0.9rem, 1.25vw, 1.05rem);
68+ font-weight: 600;
69+ letter-spacing: 0;
70+}
71+
61 .sv-content {72 .sv-content {
62 display: grid;73 display: grid;
63 gap: 1rem;74 gap: 1rem;
M internal/ui/systemviews/app.go +10 -8
@@ -515,10 +515,11 @@ func (a *App) loadHistoryLoadingRoute() {
515515 }
516516 title := historyDocumentTitle(data)
517517 a.renderedHTML = renderAppFrame(renderedPage{
518- route: RouteHistory,
519- title: title,
520- subtitle: title,
521- body: historyHTML(data),
518+ route: RouteHistory,
519+ title: title,
520+ subtitle: "History",
521+ subtitleDetail: historyTitleDetail(data),
522+ body: historyHTML(data),
522523 }, a.shellTheme)
523524 }
524525
@@ -633,10 +634,11 @@ func (a *App) renderHistoryRouteSnapshot(ctx context.Context, snapshot historyRo
633634 }
634635 title := historyDocumentTitle(data)
635636 result.html = renderAppFrame(renderedPage{
636- route: RouteHistory,
637- title: title,
638- subtitle: title,
639- body: historyHTML(data),
637+ route: RouteHistory,
638+ title: title,
639+ subtitle: "History",
640+ subtitleDetail: historyTitleDetail(data),
641+ body: historyHTML(data),
640642 }, snapshot.shellTheme)
641643 return result, nil
642644 }
@@ -515,10 +515,11 @@ func (a *App) loadHistoryLoadingRoute() {
515 }515 }
516 title := historyDocumentTitle(data)516 title := historyDocumentTitle(data)
517 a.renderedHTML = renderAppFrame(renderedPage{517 a.renderedHTML = renderAppFrame(renderedPage{
518- route: RouteHistory,518+ route: RouteHistory,
519- title: title,519+ title: title,
520- subtitle: title,520+ subtitle: "History",
521- body: historyHTML(data),521+ subtitleDetail: historyTitleDetail(data),
522+ body: historyHTML(data),
522 }, a.shellTheme)523 }, a.shellTheme)
523 }524 }
524 525
@@ -633,10 +634,11 @@ func (a *App) renderHistoryRouteSnapshot(ctx context.Context, snapshot historyRo
633 }634 }
634 title := historyDocumentTitle(data)635 title := historyDocumentTitle(data)
635 result.html = renderAppFrame(renderedPage{636 result.html = renderAppFrame(renderedPage{
636- route: RouteHistory,637+ route: RouteHistory,
637- title: title,638+ title: title,
638- subtitle: title,639+ subtitle: "History",
639- body: historyHTML(data),640+ subtitleDetail: historyTitleDetail(data),
641+ body: historyHTML(data),
640 }, snapshot.shellTheme)642 }, snapshot.shellTheme)
641 return result, nil643 return result, nil
642 }644 }
M internal/ui/systemviews/app_test.go +1 -1
@@ -111,7 +111,7 @@ func TestAppLoadInitialHistoryRouteShowsTotalStatsWithWindowedTimeline(t *testin
111111 assert.True(t, history.statsCalled)
112112 assert.Contains(t, app.renderedHTML, "Loaded 2 items")
113113 assert.Contains(t, app.renderedHTML, `data-page-title="History - 8904 entries, 40947 visits, 121 days"`)
114- assert.Contains(t, app.renderedHTML, `<h1 class="sv-title">History - 8904 entries, 40947 visits, 121 days</h1>`)
114+ assert.Contains(t, app.renderedHTML, `<h1 class="sv-title">History <span class="sv-title-detail">- 8904 entries, 40947 visits, 121 days</span></h1>`)
115115 assert.NotContains(t, app.renderedHTML, `sv-history-summary`)
116116 assert.NotContains(t, app.renderedHTML, `sv-stat-value`)
117117 }
@@ -111,7 +111,7 @@ func TestAppLoadInitialHistoryRouteShowsTotalStatsWithWindowedTimeline(t *testin
111 assert.True(t, history.statsCalled)111 assert.True(t, history.statsCalled)
112 assert.Contains(t, app.renderedHTML, "Loaded 2 items")112 assert.Contains(t, app.renderedHTML, "Loaded 2 items")
113 assert.Contains(t, app.renderedHTML, `data-page-title="History - 8904 entries, 40947 visits, 121 days"`)113 assert.Contains(t, app.renderedHTML, `data-page-title="History - 8904 entries, 40947 visits, 121 days"`)
114- assert.Contains(t, app.renderedHTML, `<h1 class="sv-title">History - 8904 entries, 40947 visits, 121 days</h1>`)114+ assert.Contains(t, app.renderedHTML, `<h1 class="sv-title">History <span class="sv-title-detail">- 8904 entries, 40947 visits, 121 days</span></h1>`)
115 assert.NotContains(t, app.renderedHTML, `sv-history-summary`)115 assert.NotContains(t, app.renderedHTML, `sv-history-summary`)
116 assert.NotContains(t, app.renderedHTML, `sv-stat-value`)116 assert.NotContains(t, app.renderedHTML, `sv-stat-value`)
117 }117 }
M internal/ui/systemviews/components.templ +6 -1
@@ -8,7 +8,12 @@ templ appFrameComponent(page renderedPage, theme shellTheme, body templ.Componen
88 >
99 <div class="sv-shell">
1010 if page.subtitle != "" {
11- <h1 class="sv-title">{ page.subtitle }</h1>
11+ <h1 class="sv-title">
12+ { page.subtitle }
13+ if page.subtitleDetail != "" {
14+ <span class="sv-title-detail">{ page.subtitleDetail }</span>
15+ }
16+ </h1>
1217 }
1318 <div class="sv-content">
1419 @body
@@ -8,7 +8,12 @@ templ appFrameComponent(page renderedPage, theme shellTheme, body templ.Componen
8 >8 >
9 <div class="sv-shell">9 <div class="sv-shell">
10 if page.subtitle != "" {10 if page.subtitle != "" {
11- <h1 class="sv-title">{ page.subtitle }</h1>11+ <h1 class="sv-title">
12+ { page.subtitle }
13+ if page.subtitleDetail != "" {
14+ <span class="sv-title-detail">{ page.subtitleDetail }</span>
15+ }
16+ </h1>
12 }17 }
13 <div class="sv-content">18 <div class="sv-content">
14 @body19 @body
M internal/ui/systemviews/components_templ.go +160 -137
@@ -107,18 +107,41 @@ func appFrameComponent(page renderedPage, theme shellTheme, body templ.Component
107107 var templ_7745c5c3_Var7 string
108108 templ_7745c5c3_Var7, templ_7745c5c3_Err = templ.JoinStringErrs(page.subtitle)
109109 if templ_7745c5c3_Err != nil {
110- return templ.Error{Err: templ_7745c5c3_Err, FileName: `components.templ`, Line: 11, Col: 40}
110+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `components.templ`, Line: 12, Col: 20}
111111 }
112112 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var7))
113113 if templ_7745c5c3_Err != nil {
114114 return templ_7745c5c3_Err
115115 }
116- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 9, "</h1>")
116+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 9, " ")
117+ if templ_7745c5c3_Err != nil {
118+ return templ_7745c5c3_Err
119+ }
120+ if page.subtitleDetail != "" {
121+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 10, "<span class=\"sv-title-detail\">")
122+ if templ_7745c5c3_Err != nil {
123+ return templ_7745c5c3_Err
124+ }
125+ var templ_7745c5c3_Var8 string
126+ templ_7745c5c3_Var8, templ_7745c5c3_Err = templ.JoinStringErrs(page.subtitleDetail)
127+ if templ_7745c5c3_Err != nil {
128+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `components.templ`, Line: 14, Col: 57}
129+ }
130+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var8))
131+ if templ_7745c5c3_Err != nil {
132+ return templ_7745c5c3_Err
133+ }
134+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 11, "</span>")
135+ if templ_7745c5c3_Err != nil {
136+ return templ_7745c5c3_Err
137+ }
138+ }
139+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 12, "</h1>")
117140 if templ_7745c5c3_Err != nil {
118141 return templ_7745c5c3_Err
119142 }
120143 }
121- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 10, "<div class=\"sv-content\">")
144+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 13, "<div class=\"sv-content\">")
122145 if templ_7745c5c3_Err != nil {
123146 return templ_7745c5c3_Err
124147 }
@@ -126,7 +149,7 @@ func appFrameComponent(page renderedPage, theme shellTheme, body templ.Component
126149 if templ_7745c5c3_Err != nil {
127150 return templ_7745c5c3_Err
128151 }
129- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 11, "</div></div></div>")
152+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 14, "</div></div></div>")
130153 if templ_7745c5c3_Err != nil {
131154 return templ_7745c5c3_Err
132155 }
@@ -150,51 +173,51 @@ func Section(className string, title string) templ.Component {
150173 }()
151174 }
152175 ctx = templ.InitializeContext(ctx)
153- templ_7745c5c3_Var8 := templ.GetChildren(ctx)
154- if templ_7745c5c3_Var8 == nil {
155- templ_7745c5c3_Var8 = templ.NopComponent
176+ templ_7745c5c3_Var9 := templ.GetChildren(ctx)
177+ if templ_7745c5c3_Var9 == nil {
178+ templ_7745c5c3_Var9 = templ.NopComponent
156179 }
157180 ctx = templ.ClearChildren(ctx)
158- var templ_7745c5c3_Var9 = []any{sectionClass(className)}
159- templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var9...)
181+ var templ_7745c5c3_Var10 = []any{sectionClass(className)}
182+ templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var10...)
160183 if templ_7745c5c3_Err != nil {
161184 return templ_7745c5c3_Err
162185 }
163- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 12, "<section class=\"")
186+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 15, "<section class=\"")
164187 if templ_7745c5c3_Err != nil {
165188 return templ_7745c5c3_Err
166189 }
167- var templ_7745c5c3_Var10 string
168- templ_7745c5c3_Var10, templ_7745c5c3_Err = templ.JoinStringErrs(templ.CSSClasses(templ_7745c5c3_Var9).String())
190+ var templ_7745c5c3_Var11 string
191+ templ_7745c5c3_Var11, templ_7745c5c3_Err = templ.JoinStringErrs(templ.CSSClasses(templ_7745c5c3_Var10).String())
169192 if templ_7745c5c3_Err != nil {
170193 return templ.Error{Err: templ_7745c5c3_Err, FileName: `components.templ`, Line: 1, Col: 0}
171194 }
172- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var10))
195+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var11))
173196 if templ_7745c5c3_Err != nil {
174197 return templ_7745c5c3_Err
175198 }
176- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 13, "\"><h2>")
199+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 16, "\"><h2>")
177200 if templ_7745c5c3_Err != nil {
178201 return templ_7745c5c3_Err
179202 }
180- var templ_7745c5c3_Var11 string
181- templ_7745c5c3_Var11, templ_7745c5c3_Err = templ.JoinStringErrs(title)
203+ var templ_7745c5c3_Var12 string
204+ templ_7745c5c3_Var12, templ_7745c5c3_Err = templ.JoinStringErrs(title)
182205 if templ_7745c5c3_Err != nil {
183- return templ.Error{Err: templ_7745c5c3_Err, FileName: `components.templ`, Line: 22, Col: 13}
206+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `components.templ`, Line: 27, Col: 13}
184207 }
185- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var11))
208+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var12))
186209 if templ_7745c5c3_Err != nil {
187210 return templ_7745c5c3_Err
188211 }
189- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 14, "</h2>")
212+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 17, "</h2>")
190213 if templ_7745c5c3_Err != nil {
191214 return templ_7745c5c3_Err
192215 }
193- templ_7745c5c3_Err = templ_7745c5c3_Var8.Render(ctx, templ_7745c5c3_Buffer)
216+ templ_7745c5c3_Err = templ_7745c5c3_Var9.Render(ctx, templ_7745c5c3_Buffer)
194217 if templ_7745c5c3_Err != nil {
195218 return templ_7745c5c3_Err
196219 }
197- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 15, "</section>")
220+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 18, "</section>")
198221 if templ_7745c5c3_Err != nil {
199222 return templ_7745c5c3_Err
200223 }
@@ -218,25 +241,25 @@ func Meta(text string) templ.Component {
218241 }()
219242 }
220243 ctx = templ.InitializeContext(ctx)
221- templ_7745c5c3_Var12 := templ.GetChildren(ctx)
222- if templ_7745c5c3_Var12 == nil {
223- templ_7745c5c3_Var12 = templ.NopComponent
244+ templ_7745c5c3_Var13 := templ.GetChildren(ctx)
245+ if templ_7745c5c3_Var13 == nil {
246+ templ_7745c5c3_Var13 = templ.NopComponent
224247 }
225248 ctx = templ.ClearChildren(ctx)
226- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 16, "<p class=\"sv-meta\">")
249+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 19, "<p class=\"sv-meta\">")
227250 if templ_7745c5c3_Err != nil {
228251 return templ_7745c5c3_Err
229252 }
230- var templ_7745c5c3_Var13 string
231- templ_7745c5c3_Var13, templ_7745c5c3_Err = templ.JoinStringErrs(text)
253+ var templ_7745c5c3_Var14 string
254+ templ_7745c5c3_Var14, templ_7745c5c3_Err = templ.JoinStringErrs(text)
232255 if templ_7745c5c3_Err != nil {
233- return templ.Error{Err: templ_7745c5c3_Err, FileName: `components.templ`, Line: 28, Col: 26}
256+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `components.templ`, Line: 33, Col: 26}
234257 }
235- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var13))
258+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var14))
236259 if templ_7745c5c3_Err != nil {
237260 return templ_7745c5c3_Err
238261 }
239- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 17, "</p>")
262+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 20, "</p>")
240263 if templ_7745c5c3_Err != nil {
241264 return templ_7745c5c3_Err
242265 }
@@ -260,25 +283,25 @@ func EmptyState(message string) templ.Component {
260283 }()
261284 }
262285 ctx = templ.InitializeContext(ctx)
263- templ_7745c5c3_Var14 := templ.GetChildren(ctx)
264- if templ_7745c5c3_Var14 == nil {
265- templ_7745c5c3_Var14 = templ.NopComponent
286+ templ_7745c5c3_Var15 := templ.GetChildren(ctx)
287+ if templ_7745c5c3_Var15 == nil {
288+ templ_7745c5c3_Var15 = templ.NopComponent
266289 }
267290 ctx = templ.ClearChildren(ctx)
268- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 18, "<div class=\"sv-empty\"><p>")
291+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 21, "<div class=\"sv-empty\"><p>")
269292 if templ_7745c5c3_Err != nil {
270293 return templ_7745c5c3_Err
271294 }
272- var templ_7745c5c3_Var15 string
273- templ_7745c5c3_Var15, templ_7745c5c3_Err = templ.JoinStringErrs(message)
295+ var templ_7745c5c3_Var16 string
296+ templ_7745c5c3_Var16, templ_7745c5c3_Err = templ.JoinStringErrs(message)
274297 if templ_7745c5c3_Err != nil {
275- return templ.Error{Err: templ_7745c5c3_Err, FileName: `components.templ`, Line: 32, Col: 35}
298+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `components.templ`, Line: 37, Col: 35}
276299 }
277- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var15))
300+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var16))
278301 if templ_7745c5c3_Err != nil {
279302 return templ_7745c5c3_Err
280303 }
281- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 19, "</p></div>")
304+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 22, "</p></div>")
282305 if templ_7745c5c3_Err != nil {
283306 return templ_7745c5c3_Err
284307 }
@@ -302,25 +325,25 @@ func LoadingPanel(message string) templ.Component {
302325 }()
303326 }
304327 ctx = templ.InitializeContext(ctx)
305- templ_7745c5c3_Var16 := templ.GetChildren(ctx)
306- if templ_7745c5c3_Var16 == nil {
307- templ_7745c5c3_Var16 = templ.NopComponent
328+ templ_7745c5c3_Var17 := templ.GetChildren(ctx)
329+ if templ_7745c5c3_Var17 == nil {
330+ templ_7745c5c3_Var17 = templ.NopComponent
308331 }
309332 ctx = templ.ClearChildren(ctx)
310- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 20, "<div class=\"sv-loading-panel\" role=\"status\" aria-live=\"polite\"><span class=\"sv-spinner\" aria-hidden=\"true\"></span> <span>")
333+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 23, "<div class=\"sv-loading-panel\" role=\"status\" aria-live=\"polite\"><span class=\"sv-spinner\" aria-hidden=\"true\"></span> <span>")
311334 if templ_7745c5c3_Err != nil {
312335 return templ_7745c5c3_Err
313336 }
314- var templ_7745c5c3_Var17 string
315- templ_7745c5c3_Var17, templ_7745c5c3_Err = templ.JoinStringErrs(message)
337+ var templ_7745c5c3_Var18 string
338+ templ_7745c5c3_Var18, templ_7745c5c3_Err = templ.JoinStringErrs(message)
316339 if templ_7745c5c3_Err != nil {
317- return templ.Error{Err: templ_7745c5c3_Err, FileName: `components.templ`, Line: 38, Col: 17}
340+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `components.templ`, Line: 43, Col: 17}
318341 }
319- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var17))
342+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var18))
320343 if templ_7745c5c3_Err != nil {
321344 return templ_7745c5c3_Err
322345 }
323- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 21, "</span></div>")
346+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 24, "</span></div>")
324347 if templ_7745c5c3_Err != nil {
325348 return templ_7745c5c3_Err
326349 }
@@ -344,25 +367,25 @@ func LoadingCard(label string) templ.Component {
344367 }()
345368 }
346369 ctx = templ.InitializeContext(ctx)
347- templ_7745c5c3_Var18 := templ.GetChildren(ctx)
348- if templ_7745c5c3_Var18 == nil {
349- templ_7745c5c3_Var18 = templ.NopComponent
370+ templ_7745c5c3_Var19 := templ.GetChildren(ctx)
371+ if templ_7745c5c3_Var19 == nil {
372+ templ_7745c5c3_Var19 = templ.NopComponent
350373 }
351374 ctx = templ.ClearChildren(ctx)
352- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 22, "<div class=\"sv-stat-card sv-loading-card\" role=\"status\" aria-live=\"polite\"><span class=\"sv-spinner\" aria-hidden=\"true\"></span> <span class=\"sv-stat-label\">")
375+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 25, "<div class=\"sv-stat-card sv-loading-card\" role=\"status\" aria-live=\"polite\"><span class=\"sv-spinner\" aria-hidden=\"true\"></span> <span class=\"sv-stat-label\">")
353376 if templ_7745c5c3_Err != nil {
354377 return templ_7745c5c3_Err
355378 }
356- var templ_7745c5c3_Var19 string
357- templ_7745c5c3_Var19, templ_7745c5c3_Err = templ.JoinStringErrs(label)
379+ var templ_7745c5c3_Var20 string
380+ templ_7745c5c3_Var20, templ_7745c5c3_Err = templ.JoinStringErrs(label)
358381 if templ_7745c5c3_Err != nil {
359- return templ.Error{Err: templ_7745c5c3_Err, FileName: `components.templ`, Line: 45, Col: 37}
382+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `components.templ`, Line: 50, Col: 37}
360383 }
361- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var19))
384+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var20))
362385 if templ_7745c5c3_Err != nil {
363386 return templ_7745c5c3_Err
364387 }
365- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 23, "</span></div>")
388+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 26, "</span></div>")
366389 if templ_7745c5c3_Err != nil {
367390 return templ_7745c5c3_Err
368391 }
@@ -386,57 +409,57 @@ func Alert(kind string, message string) templ.Component {
386409 }()
387410 }
388411 ctx = templ.InitializeContext(ctx)
389- templ_7745c5c3_Var20 := templ.GetChildren(ctx)
390- if templ_7745c5c3_Var20 == nil {
391- templ_7745c5c3_Var20 = templ.NopComponent
412+ templ_7745c5c3_Var21 := templ.GetChildren(ctx)
413+ if templ_7745c5c3_Var21 == nil {
414+ templ_7745c5c3_Var21 = templ.NopComponent
392415 }
393416 ctx = templ.ClearChildren(ctx)
394417 if message != "" {
395- var templ_7745c5c3_Var21 = []any{alertClass(kind)}
396- templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var21...)
418+ var templ_7745c5c3_Var22 = []any{alertClass(kind)}
419+ templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var22...)
397420 if templ_7745c5c3_Err != nil {
398421 return templ_7745c5c3_Err
399422 }
400- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 24, "<div class=\"")
423+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 27, "<div class=\"")
401424 if templ_7745c5c3_Err != nil {
402425 return templ_7745c5c3_Err
403426 }
404- var templ_7745c5c3_Var22 string
405- templ_7745c5c3_Var22, templ_7745c5c3_Err = templ.JoinStringErrs(templ.CSSClasses(templ_7745c5c3_Var21).String())
427+ var templ_7745c5c3_Var23 string
428+ templ_7745c5c3_Var23, templ_7745c5c3_Err = templ.JoinStringErrs(templ.CSSClasses(templ_7745c5c3_Var22).String())
406429 if templ_7745c5c3_Err != nil {
407430 return templ.Error{Err: templ_7745c5c3_Err, FileName: `components.templ`, Line: 1, Col: 0}
408431 }
409- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var22))
432+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var23))
410433 if templ_7745c5c3_Err != nil {
411434 return templ_7745c5c3_Err
412435 }
413- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 25, "\" role=\"")
436+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 28, "\" role=\"")
414437 if templ_7745c5c3_Err != nil {
415438 return templ_7745c5c3_Err
416439 }
417- var templ_7745c5c3_Var23 string
418- templ_7745c5c3_Var23, templ_7745c5c3_Err = templ.JoinStringErrs(alertRole(kind))
440+ var templ_7745c5c3_Var24 string
441+ templ_7745c5c3_Var24, templ_7745c5c3_Err = templ.JoinStringErrs(alertRole(kind))
419442 if templ_7745c5c3_Err != nil {
420- return templ.Error{Err: templ_7745c5c3_Err, FileName: `components.templ`, Line: 51, Col: 56}
443+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `components.templ`, Line: 56, Col: 56}
421444 }
422- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var23))
445+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var24))
423446 if templ_7745c5c3_Err != nil {
424447 return templ_7745c5c3_Err
425448 }
426- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 26, "\">")
449+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 29, "\">")
427450 if templ_7745c5c3_Err != nil {
428451 return templ_7745c5c3_Err
429452 }
430- var templ_7745c5c3_Var24 string
431- templ_7745c5c3_Var24, templ_7745c5c3_Err = templ.JoinStringErrs(message)
453+ var templ_7745c5c3_Var25 string
454+ templ_7745c5c3_Var25, templ_7745c5c3_Err = templ.JoinStringErrs(message)
432455 if templ_7745c5c3_Err != nil {
433- return templ.Error{Err: templ_7745c5c3_Err, FileName: `components.templ`, Line: 51, Col: 68}
456+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `components.templ`, Line: 56, Col: 68}
434457 }
435- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var24))
458+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var25))
436459 if templ_7745c5c3_Err != nil {
437460 return templ_7745c5c3_Err
438461 }
439- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 27, "</div>")
462+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 30, "</div>")
440463 if templ_7745c5c3_Err != nil {
441464 return templ_7745c5c3_Err
442465 }
@@ -461,20 +484,20 @@ func List() templ.Component {
461484 }()
462485 }
463486 ctx = templ.InitializeContext(ctx)
464- templ_7745c5c3_Var25 := templ.GetChildren(ctx)
465- if templ_7745c5c3_Var25 == nil {
466- templ_7745c5c3_Var25 = templ.NopComponent
487+ templ_7745c5c3_Var26 := templ.GetChildren(ctx)
488+ if templ_7745c5c3_Var26 == nil {
489+ templ_7745c5c3_Var26 = templ.NopComponent
467490 }
468491 ctx = templ.ClearChildren(ctx)
469- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 28, "<ul class=\"sv-list\">")
492+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 31, "<ul class=\"sv-list\">")
470493 if templ_7745c5c3_Err != nil {
471494 return templ_7745c5c3_Err
472495 }
473- templ_7745c5c3_Err = templ_7745c5c3_Var25.Render(ctx, templ_7745c5c3_Buffer)
496+ templ_7745c5c3_Err = templ_7745c5c3_Var26.Render(ctx, templ_7745c5c3_Buffer)
474497 if templ_7745c5c3_Err != nil {
475498 return templ_7745c5c3_Err
476499 }
477- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 29, "</ul>")
500+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 32, "</ul>")
478501 if templ_7745c5c3_Err != nil {
479502 return templ_7745c5c3_Err
480503 }
@@ -498,20 +521,20 @@ func ListRow() templ.Component {
498521 }()
499522 }
500523 ctx = templ.InitializeContext(ctx)
501- templ_7745c5c3_Var26 := templ.GetChildren(ctx)
502- if templ_7745c5c3_Var26 == nil {
503- templ_7745c5c3_Var26 = templ.NopComponent
524+ templ_7745c5c3_Var27 := templ.GetChildren(ctx)
525+ if templ_7745c5c3_Var27 == nil {
526+ templ_7745c5c3_Var27 = templ.NopComponent
504527 }
505528 ctx = templ.ClearChildren(ctx)
506- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 30, "<li class=\"sv-list-row\">")
529+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 33, "<li class=\"sv-list-row\">")
507530 if templ_7745c5c3_Err != nil {
508531 return templ_7745c5c3_Err
509532 }
510- templ_7745c5c3_Err = templ_7745c5c3_Var26.Render(ctx, templ_7745c5c3_Buffer)
533+ templ_7745c5c3_Err = templ_7745c5c3_Var27.Render(ctx, templ_7745c5c3_Buffer)
511534 if templ_7745c5c3_Err != nil {
512535 return templ_7745c5c3_Err
513536 }
514- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 31, "</li>")
537+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 34, "</li>")
515538 if templ_7745c5c3_Err != nil {
516539 return templ_7745c5c3_Err
517540 }
@@ -535,48 +558,48 @@ func Button(label string, action string, classes string, attrs templ.Attributes,
535558 }()
536559 }
537560 ctx = templ.InitializeContext(ctx)
538- templ_7745c5c3_Var27 := templ.GetChildren(ctx)
539- if templ_7745c5c3_Var27 == nil {
540- templ_7745c5c3_Var27 = templ.NopComponent
561+ templ_7745c5c3_Var28 := templ.GetChildren(ctx)
562+ if templ_7745c5c3_Var28 == nil {
563+ templ_7745c5c3_Var28 = templ.NopComponent
541564 }
542565 ctx = templ.ClearChildren(ctx)
543- var templ_7745c5c3_Var28 = []any{buttonClass(classes)}
544- templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var28...)
566+ var templ_7745c5c3_Var29 = []any{buttonClass(classes)}
567+ templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var29...)
545568 if templ_7745c5c3_Err != nil {
546569 return templ_7745c5c3_Err
547570 }
548- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 32, "<button type=\"button\" class=\"")
571+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 35, "<button type=\"button\" class=\"")
549572 if templ_7745c5c3_Err != nil {
550573 return templ_7745c5c3_Err
551574 }
552- var templ_7745c5c3_Var29 string
553- templ_7745c5c3_Var29, templ_7745c5c3_Err = templ.JoinStringErrs(templ.CSSClasses(templ_7745c5c3_Var28).String())
575+ var templ_7745c5c3_Var30 string
576+ templ_7745c5c3_Var30, templ_7745c5c3_Err = templ.JoinStringErrs(templ.CSSClasses(templ_7745c5c3_Var29).String())
554577 if templ_7745c5c3_Err != nil {
555578 return templ.Error{Err: templ_7745c5c3_Err, FileName: `components.templ`, Line: 1, Col: 0}
556579 }
557- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var29))
580+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var30))
558581 if templ_7745c5c3_Err != nil {
559582 return templ_7745c5c3_Err
560583 }
561- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 33, "\" data-sv-action=\"")
584+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 36, "\" data-sv-action=\"")
562585 if templ_7745c5c3_Err != nil {
563586 return templ_7745c5c3_Err
564587 }
565- var templ_7745c5c3_Var30 string
566- templ_7745c5c3_Var30, templ_7745c5c3_Err = templ.JoinStringErrs(action)
588+ var templ_7745c5c3_Var31 string
589+ templ_7745c5c3_Var31, templ_7745c5c3_Err = templ.JoinStringErrs(action)
567590 if templ_7745c5c3_Err != nil {
568- return templ.Error{Err: templ_7745c5c3_Err, FileName: `components.templ`, Line: 68, Col: 77}
591+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `components.templ`, Line: 73, Col: 77}
569592 }
570- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var30))
593+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var31))
571594 if templ_7745c5c3_Err != nil {
572595 return templ_7745c5c3_Err
573596 }
574- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 34, "\"")
597+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 37, "\"")
575598 if templ_7745c5c3_Err != nil {
576599 return templ_7745c5c3_Err
577600 }
578601 if disabled {
579- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 35, " disabled")
602+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 38, " disabled")
580603 if templ_7745c5c3_Err != nil {
581604 return templ_7745c5c3_Err
582605 }
@@ -585,20 +608,20 @@ func Button(label string, action string, classes string, attrs templ.Attributes,
585608 if templ_7745c5c3_Err != nil {
586609 return templ_7745c5c3_Err
587610 }
588- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 36, ">")
611+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 39, ">")
589612 if templ_7745c5c3_Err != nil {
590613 return templ_7745c5c3_Err
591614 }
592- var templ_7745c5c3_Var31 string
593- templ_7745c5c3_Var31, templ_7745c5c3_Err = templ.JoinStringErrs(label)
615+ var templ_7745c5c3_Var32 string
616+ templ_7745c5c3_Var32, templ_7745c5c3_Err = templ.JoinStringErrs(label)
594617 if templ_7745c5c3_Err != nil {
595- return templ.Error{Err: templ_7745c5c3_Err, FileName: `components.templ`, Line: 68, Col: 123}
618+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `components.templ`, Line: 73, Col: 123}
596619 }
597- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var31))
620+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var32))
598621 if templ_7745c5c3_Err != nil {
599622 return templ_7745c5c3_Err
600623 }
601- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 37, "</button>")
624+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 40, "</button>")
602625 if templ_7745c5c3_Err != nil {
603626 return templ_7745c5c3_Err
604627 }
@@ -622,32 +645,32 @@ func KeyList(keys []string) templ.Component {
622645 }()
623646 }
624647 ctx = templ.InitializeContext(ctx)
625- templ_7745c5c3_Var32 := templ.GetChildren(ctx)
626- if templ_7745c5c3_Var32 == nil {
627- templ_7745c5c3_Var32 = templ.NopComponent
648+ templ_7745c5c3_Var33 := templ.GetChildren(ctx)
649+ if templ_7745c5c3_Var33 == nil {
650+ templ_7745c5c3_Var33 = templ.NopComponent
628651 }
629652 ctx = templ.ClearChildren(ctx)
630653 if len(keys) == 0 {
631- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 38, "<span class=\"sv-key sv-key-empty\">Unassigned</span>")
654+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 41, "<span class=\"sv-key sv-key-empty\">Unassigned</span>")
632655 if templ_7745c5c3_Err != nil {
633656 return templ_7745c5c3_Err
634657 }
635658 } else {
636659 for _, key := range keys {
637- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 39, "<span class=\"sv-key\">")
660+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 42, "<span class=\"sv-key\">")
638661 if templ_7745c5c3_Err != nil {
639662 return templ_7745c5c3_Err
640663 }
641- var templ_7745c5c3_Var33 string
642- templ_7745c5c3_Var33, templ_7745c5c3_Err = templ.JoinStringErrs(key)
664+ var templ_7745c5c3_Var34 string
665+ templ_7745c5c3_Var34, templ_7745c5c3_Err = templ.JoinStringErrs(key)
643666 if templ_7745c5c3_Err != nil {
644- return templ.Error{Err: templ_7745c5c3_Err, FileName: `components.templ`, Line: 76, Col: 29}
667+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `components.templ`, Line: 81, Col: 29}
645668 }
646- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var33))
669+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var34))
647670 if templ_7745c5c3_Err != nil {
648671 return templ_7745c5c3_Err
649672 }
650- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 40, "</span>")
673+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 43, "</span>")
651674 if templ_7745c5c3_Err != nil {
652675 return templ_7745c5c3_Err
653676 }
@@ -673,9 +696,9 @@ func KV(rows []kvPair) templ.Component {
673696 }()
674697 }
675698 ctx = templ.InitializeContext(ctx)
676- templ_7745c5c3_Var34 := templ.GetChildren(ctx)
677- if templ_7745c5c3_Var34 == nil {
678- templ_7745c5c3_Var34 = templ.NopComponent
699+ templ_7745c5c3_Var35 := templ.GetChildren(ctx)
700+ if templ_7745c5c3_Var35 == nil {
701+ templ_7745c5c3_Var35 = templ.NopComponent
679702 }
680703 ctx = templ.ClearChildren(ctx)
681704 if len(rows) == 0 {
@@ -684,43 +707,43 @@ func KV(rows []kvPair) templ.Component {
684707 return templ_7745c5c3_Err
685708 }
686709 } else {
687- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 41, "<dl class=\"sv-kv\">")
710+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 44, "<dl class=\"sv-kv\">")
688711 if templ_7745c5c3_Err != nil {
689712 return templ_7745c5c3_Err
690713 }
691714 for _, row := range rows {
692- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 42, "<div class=\"sv-kv-row\"><dt>")
715+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 45, "<div class=\"sv-kv-row\"><dt>")
693716 if templ_7745c5c3_Err != nil {
694717 return templ_7745c5c3_Err
695718 }
696- var templ_7745c5c3_Var35 string
697- templ_7745c5c3_Var35, templ_7745c5c3_Err = templ.JoinStringErrs(row.Label)
719+ var templ_7745c5c3_Var36 string
720+ templ_7745c5c3_Var36, templ_7745c5c3_Err = templ.JoinStringErrs(row.Label)
698721 if templ_7745c5c3_Err != nil {
699- return templ.Error{Err: templ_7745c5c3_Err, FileName: `components.templ`, Line: 87, Col: 42}
722+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `components.templ`, Line: 92, Col: 42}
700723 }
701- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var35))
724+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var36))
702725 if templ_7745c5c3_Err != nil {
703726 return templ_7745c5c3_Err
704727 }
705- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 43, "</dt><dd>")
728+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 46, "</dt><dd>")
706729 if templ_7745c5c3_Err != nil {
707730 return templ_7745c5c3_Err
708731 }
709- var templ_7745c5c3_Var36 string
710- templ_7745c5c3_Var36, templ_7745c5c3_Err = templ.JoinStringErrs(row.Value)
732+ var templ_7745c5c3_Var37 string
733+ templ_7745c5c3_Var37, templ_7745c5c3_Err = templ.JoinStringErrs(row.Value)
711734 if templ_7745c5c3_Err != nil {
712- return templ.Error{Err: templ_7745c5c3_Err, FileName: `components.templ`, Line: 87, Col: 64}
735+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `components.templ`, Line: 92, Col: 64}
713736 }
714- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var36))
737+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var37))
715738 if templ_7745c5c3_Err != nil {
716739 return templ_7745c5c3_Err
717740 }
718- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 44, "</dd></div>")
741+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 47, "</dd></div>")
719742 if templ_7745c5c3_Err != nil {
720743 return templ_7745c5c3_Err
721744 }
722745 }
723- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 45, "</dl>")
746+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 48, "</dl>")
724747 if templ_7745c5c3_Err != nil {
725748 return templ_7745c5c3_Err
726749 }
@@ -107,18 +107,41 @@ func appFrameComponent(page renderedPage, theme shellTheme, body templ.Component
107 var templ_7745c5c3_Var7 string107 var templ_7745c5c3_Var7 string
108 templ_7745c5c3_Var7, templ_7745c5c3_Err = templ.JoinStringErrs(page.subtitle)108 templ_7745c5c3_Var7, templ_7745c5c3_Err = templ.JoinStringErrs(page.subtitle)
109 if templ_7745c5c3_Err != nil {109 if templ_7745c5c3_Err != nil {
110- return templ.Error{Err: templ_7745c5c3_Err, FileName: `components.templ`, Line: 11, Col: 40}110+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `components.templ`, Line: 12, Col: 20}
111 }111 }
112 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var7))112 _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var7))
113 if templ_7745c5c3_Err != nil {113 if templ_7745c5c3_Err != nil {
114 return templ_7745c5c3_Err114 return templ_7745c5c3_Err
115 }115 }
116- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 9, "</h1>")116+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 9, " ")
117+ if templ_7745c5c3_Err != nil {
118+ return templ_7745c5c3_Err
119+ }
120+ if page.subtitleDetail != "" {
121+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 10, "<span class=\"sv-title-detail\">")
122+ if templ_7745c5c3_Err != nil {
123+ return templ_7745c5c3_Err
124+ }
125+ var templ_7745c5c3_Var8 string
126+ templ_7745c5c3_Var8, templ_7745c5c3_Err = templ.JoinStringErrs(page.subtitleDetail)
127+ if templ_7745c5c3_Err != nil {
128+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `components.templ`, Line: 14, Col: 57}
129+ }
130+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var8))
131+ if templ_7745c5c3_Err != nil {
132+ return templ_7745c5c3_Err
133+ }
134+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 11, "</span>")
135+ if templ_7745c5c3_Err != nil {
136+ return templ_7745c5c3_Err
137+ }
138+ }
139+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 12, "</h1>")
117 if templ_7745c5c3_Err != nil {140 if templ_7745c5c3_Err != nil {
118 return templ_7745c5c3_Err141 return templ_7745c5c3_Err
119 }142 }
120 }143 }
121- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 10, "<div class=\"sv-content\">")144+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 13, "<div class=\"sv-content\">")
122 if templ_7745c5c3_Err != nil {145 if templ_7745c5c3_Err != nil {
123 return templ_7745c5c3_Err146 return templ_7745c5c3_Err
124 }147 }
@@ -126,7 +149,7 @@ func appFrameComponent(page renderedPage, theme shellTheme, body templ.Component
126 if templ_7745c5c3_Err != nil {149 if templ_7745c5c3_Err != nil {
127 return templ_7745c5c3_Err150 return templ_7745c5c3_Err
128 }151 }
129- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 11, "</div></div></div>")152+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 14, "</div></div></div>")
130 if templ_7745c5c3_Err != nil {153 if templ_7745c5c3_Err != nil {
131 return templ_7745c5c3_Err154 return templ_7745c5c3_Err
132 }155 }
@@ -150,51 +173,51 @@ func Section(className string, title string) templ.Component {
150 }()173 }()
151 }174 }
152 ctx = templ.InitializeContext(ctx)175 ctx = templ.InitializeContext(ctx)
153- templ_7745c5c3_Var8 := templ.GetChildren(ctx)176+ templ_7745c5c3_Var9 := templ.GetChildren(ctx)
154- if templ_7745c5c3_Var8 == nil {177+ if templ_7745c5c3_Var9 == nil {
155- templ_7745c5c3_Var8 = templ.NopComponent178+ templ_7745c5c3_Var9 = templ.NopComponent
156 }179 }
157 ctx = templ.ClearChildren(ctx)180 ctx = templ.ClearChildren(ctx)
158- var templ_7745c5c3_Var9 = []any{sectionClass(className)}181+ var templ_7745c5c3_Var10 = []any{sectionClass(className)}
159- templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var9...)182+ templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var10...)
160 if templ_7745c5c3_Err != nil {183 if templ_7745c5c3_Err != nil {
161 return templ_7745c5c3_Err184 return templ_7745c5c3_Err
162 }185 }
163- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 12, "<section class=\"")186+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 15, "<section class=\"")
164 if templ_7745c5c3_Err != nil {187 if templ_7745c5c3_Err != nil {
165 return templ_7745c5c3_Err188 return templ_7745c5c3_Err
166 }189 }
167- var templ_7745c5c3_Var10 string190+ var templ_7745c5c3_Var11 string
168- templ_7745c5c3_Var10, templ_7745c5c3_Err = templ.JoinStringErrs(templ.CSSClasses(templ_7745c5c3_Var9).String())191+ templ_7745c5c3_Var11, templ_7745c5c3_Err = templ.JoinStringErrs(templ.CSSClasses(templ_7745c5c3_Var10).String())
169 if templ_7745c5c3_Err != nil {192 if templ_7745c5c3_Err != nil {
170 return templ.Error{Err: templ_7745c5c3_Err, FileName: `components.templ`, Line: 1, Col: 0}193 return templ.Error{Err: templ_7745c5c3_Err, FileName: `components.templ`, Line: 1, Col: 0}
171 }194 }
172- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var10))195+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var11))
173 if templ_7745c5c3_Err != nil {196 if templ_7745c5c3_Err != nil {
174 return templ_7745c5c3_Err197 return templ_7745c5c3_Err
175 }198 }
176- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 13, "\"><h2>")199+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 16, "\"><h2>")
177 if templ_7745c5c3_Err != nil {200 if templ_7745c5c3_Err != nil {
178 return templ_7745c5c3_Err201 return templ_7745c5c3_Err
179 }202 }
180- var templ_7745c5c3_Var11 string203+ var templ_7745c5c3_Var12 string
181- templ_7745c5c3_Var11, templ_7745c5c3_Err = templ.JoinStringErrs(title)204+ templ_7745c5c3_Var12, templ_7745c5c3_Err = templ.JoinStringErrs(title)
182 if templ_7745c5c3_Err != nil {205 if templ_7745c5c3_Err != nil {
183- return templ.Error{Err: templ_7745c5c3_Err, FileName: `components.templ`, Line: 22, Col: 13}206+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `components.templ`, Line: 27, Col: 13}
184 }207 }
185- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var11))208+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var12))
186 if templ_7745c5c3_Err != nil {209 if templ_7745c5c3_Err != nil {
187 return templ_7745c5c3_Err210 return templ_7745c5c3_Err
188 }211 }
189- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 14, "</h2>")212+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 17, "</h2>")
190 if templ_7745c5c3_Err != nil {213 if templ_7745c5c3_Err != nil {
191 return templ_7745c5c3_Err214 return templ_7745c5c3_Err
192 }215 }
193- templ_7745c5c3_Err = templ_7745c5c3_Var8.Render(ctx, templ_7745c5c3_Buffer)216+ templ_7745c5c3_Err = templ_7745c5c3_Var9.Render(ctx, templ_7745c5c3_Buffer)
194 if templ_7745c5c3_Err != nil {217 if templ_7745c5c3_Err != nil {
195 return templ_7745c5c3_Err218 return templ_7745c5c3_Err
196 }219 }
197- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 15, "</section>")220+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 18, "</section>")
198 if templ_7745c5c3_Err != nil {221 if templ_7745c5c3_Err != nil {
199 return templ_7745c5c3_Err222 return templ_7745c5c3_Err
200 }223 }
@@ -218,25 +241,25 @@ func Meta(text string) templ.Component {
218 }()241 }()
219 }242 }
220 ctx = templ.InitializeContext(ctx)243 ctx = templ.InitializeContext(ctx)
221- templ_7745c5c3_Var12 := templ.GetChildren(ctx)244+ templ_7745c5c3_Var13 := templ.GetChildren(ctx)
222- if templ_7745c5c3_Var12 == nil {245+ if templ_7745c5c3_Var13 == nil {
223- templ_7745c5c3_Var12 = templ.NopComponent246+ templ_7745c5c3_Var13 = templ.NopComponent
224 }247 }
225 ctx = templ.ClearChildren(ctx)248 ctx = templ.ClearChildren(ctx)
226- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 16, "<p class=\"sv-meta\">")249+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 19, "<p class=\"sv-meta\">")
227 if templ_7745c5c3_Err != nil {250 if templ_7745c5c3_Err != nil {
228 return templ_7745c5c3_Err251 return templ_7745c5c3_Err
229 }252 }
230- var templ_7745c5c3_Var13 string253+ var templ_7745c5c3_Var14 string
231- templ_7745c5c3_Var13, templ_7745c5c3_Err = templ.JoinStringErrs(text)254+ templ_7745c5c3_Var14, templ_7745c5c3_Err = templ.JoinStringErrs(text)
232 if templ_7745c5c3_Err != nil {255 if templ_7745c5c3_Err != nil {
233- return templ.Error{Err: templ_7745c5c3_Err, FileName: `components.templ`, Line: 28, Col: 26}256+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `components.templ`, Line: 33, Col: 26}
234 }257 }
235- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var13))258+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var14))
236 if templ_7745c5c3_Err != nil {259 if templ_7745c5c3_Err != nil {
237 return templ_7745c5c3_Err260 return templ_7745c5c3_Err
238 }261 }
239- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 17, "</p>")262+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 20, "</p>")
240 if templ_7745c5c3_Err != nil {263 if templ_7745c5c3_Err != nil {
241 return templ_7745c5c3_Err264 return templ_7745c5c3_Err
242 }265 }
@@ -260,25 +283,25 @@ func EmptyState(message string) templ.Component {
260 }()283 }()
261 }284 }
262 ctx = templ.InitializeContext(ctx)285 ctx = templ.InitializeContext(ctx)
263- templ_7745c5c3_Var14 := templ.GetChildren(ctx)286+ templ_7745c5c3_Var15 := templ.GetChildren(ctx)
264- if templ_7745c5c3_Var14 == nil {287+ if templ_7745c5c3_Var15 == nil {
265- templ_7745c5c3_Var14 = templ.NopComponent288+ templ_7745c5c3_Var15 = templ.NopComponent
266 }289 }
267 ctx = templ.ClearChildren(ctx)290 ctx = templ.ClearChildren(ctx)
268- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 18, "<div class=\"sv-empty\"><p>")291+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 21, "<div class=\"sv-empty\"><p>")
269 if templ_7745c5c3_Err != nil {292 if templ_7745c5c3_Err != nil {
270 return templ_7745c5c3_Err293 return templ_7745c5c3_Err
271 }294 }
272- var templ_7745c5c3_Var15 string295+ var templ_7745c5c3_Var16 string
273- templ_7745c5c3_Var15, templ_7745c5c3_Err = templ.JoinStringErrs(message)296+ templ_7745c5c3_Var16, templ_7745c5c3_Err = templ.JoinStringErrs(message)
274 if templ_7745c5c3_Err != nil {297 if templ_7745c5c3_Err != nil {
275- return templ.Error{Err: templ_7745c5c3_Err, FileName: `components.templ`, Line: 32, Col: 35}298+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `components.templ`, Line: 37, Col: 35}
276 }299 }
277- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var15))300+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var16))
278 if templ_7745c5c3_Err != nil {301 if templ_7745c5c3_Err != nil {
279 return templ_7745c5c3_Err302 return templ_7745c5c3_Err
280 }303 }
281- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 19, "</p></div>")304+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 22, "</p></div>")
282 if templ_7745c5c3_Err != nil {305 if templ_7745c5c3_Err != nil {
283 return templ_7745c5c3_Err306 return templ_7745c5c3_Err
284 }307 }
@@ -302,25 +325,25 @@ func LoadingPanel(message string) templ.Component {
302 }()325 }()
303 }326 }
304 ctx = templ.InitializeContext(ctx)327 ctx = templ.InitializeContext(ctx)
305- templ_7745c5c3_Var16 := templ.GetChildren(ctx)328+ templ_7745c5c3_Var17 := templ.GetChildren(ctx)
306- if templ_7745c5c3_Var16 == nil {329+ if templ_7745c5c3_Var17 == nil {
307- templ_7745c5c3_Var16 = templ.NopComponent330+ templ_7745c5c3_Var17 = templ.NopComponent
308 }331 }
309 ctx = templ.ClearChildren(ctx)332 ctx = templ.ClearChildren(ctx)
310- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 20, "<div class=\"sv-loading-panel\" role=\"status\" aria-live=\"polite\"><span class=\"sv-spinner\" aria-hidden=\"true\"></span> <span>")333+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 23, "<div class=\"sv-loading-panel\" role=\"status\" aria-live=\"polite\"><span class=\"sv-spinner\" aria-hidden=\"true\"></span> <span>")
311 if templ_7745c5c3_Err != nil {334 if templ_7745c5c3_Err != nil {
312 return templ_7745c5c3_Err335 return templ_7745c5c3_Err
313 }336 }
314- var templ_7745c5c3_Var17 string337+ var templ_7745c5c3_Var18 string
315- templ_7745c5c3_Var17, templ_7745c5c3_Err = templ.JoinStringErrs(message)338+ templ_7745c5c3_Var18, templ_7745c5c3_Err = templ.JoinStringErrs(message)
316 if templ_7745c5c3_Err != nil {339 if templ_7745c5c3_Err != nil {
317- return templ.Error{Err: templ_7745c5c3_Err, FileName: `components.templ`, Line: 38, Col: 17}340+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `components.templ`, Line: 43, Col: 17}
318 }341 }
319- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var17))342+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var18))
320 if templ_7745c5c3_Err != nil {343 if templ_7745c5c3_Err != nil {
321 return templ_7745c5c3_Err344 return templ_7745c5c3_Err
322 }345 }
323- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 21, "</span></div>")346+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 24, "</span></div>")
324 if templ_7745c5c3_Err != nil {347 if templ_7745c5c3_Err != nil {
325 return templ_7745c5c3_Err348 return templ_7745c5c3_Err
326 }349 }
@@ -344,25 +367,25 @@ func LoadingCard(label string) templ.Component {
344 }()367 }()
345 }368 }
346 ctx = templ.InitializeContext(ctx)369 ctx = templ.InitializeContext(ctx)
347- templ_7745c5c3_Var18 := templ.GetChildren(ctx)370+ templ_7745c5c3_Var19 := templ.GetChildren(ctx)
348- if templ_7745c5c3_Var18 == nil {371+ if templ_7745c5c3_Var19 == nil {
349- templ_7745c5c3_Var18 = templ.NopComponent372+ templ_7745c5c3_Var19 = templ.NopComponent
350 }373 }
351 ctx = templ.ClearChildren(ctx)374 ctx = templ.ClearChildren(ctx)
352- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 22, "<div class=\"sv-stat-card sv-loading-card\" role=\"status\" aria-live=\"polite\"><span class=\"sv-spinner\" aria-hidden=\"true\"></span> <span class=\"sv-stat-label\">")375+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 25, "<div class=\"sv-stat-card sv-loading-card\" role=\"status\" aria-live=\"polite\"><span class=\"sv-spinner\" aria-hidden=\"true\"></span> <span class=\"sv-stat-label\">")
353 if templ_7745c5c3_Err != nil {376 if templ_7745c5c3_Err != nil {
354 return templ_7745c5c3_Err377 return templ_7745c5c3_Err
355 }378 }
356- var templ_7745c5c3_Var19 string379+ var templ_7745c5c3_Var20 string
357- templ_7745c5c3_Var19, templ_7745c5c3_Err = templ.JoinStringErrs(label)380+ templ_7745c5c3_Var20, templ_7745c5c3_Err = templ.JoinStringErrs(label)
358 if templ_7745c5c3_Err != nil {381 if templ_7745c5c3_Err != nil {
359- return templ.Error{Err: templ_7745c5c3_Err, FileName: `components.templ`, Line: 45, Col: 37}382+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `components.templ`, Line: 50, Col: 37}
360 }383 }
361- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var19))384+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var20))
362 if templ_7745c5c3_Err != nil {385 if templ_7745c5c3_Err != nil {
363 return templ_7745c5c3_Err386 return templ_7745c5c3_Err
364 }387 }
365- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 23, "</span></div>")388+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 26, "</span></div>")
366 if templ_7745c5c3_Err != nil {389 if templ_7745c5c3_Err != nil {
367 return templ_7745c5c3_Err390 return templ_7745c5c3_Err
368 }391 }
@@ -386,57 +409,57 @@ func Alert(kind string, message string) templ.Component {
386 }()409 }()
387 }410 }
388 ctx = templ.InitializeContext(ctx)411 ctx = templ.InitializeContext(ctx)
389- templ_7745c5c3_Var20 := templ.GetChildren(ctx)412+ templ_7745c5c3_Var21 := templ.GetChildren(ctx)
390- if templ_7745c5c3_Var20 == nil {413+ if templ_7745c5c3_Var21 == nil {
391- templ_7745c5c3_Var20 = templ.NopComponent414+ templ_7745c5c3_Var21 = templ.NopComponent
392 }415 }
393 ctx = templ.ClearChildren(ctx)416 ctx = templ.ClearChildren(ctx)
394 if message != "" {417 if message != "" {
395- var templ_7745c5c3_Var21 = []any{alertClass(kind)}418+ var templ_7745c5c3_Var22 = []any{alertClass(kind)}
396- templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var21...)419+ templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var22...)
397 if templ_7745c5c3_Err != nil {420 if templ_7745c5c3_Err != nil {
398 return templ_7745c5c3_Err421 return templ_7745c5c3_Err
399 }422 }
400- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 24, "<div class=\"")423+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 27, "<div class=\"")
401 if templ_7745c5c3_Err != nil {424 if templ_7745c5c3_Err != nil {
402 return templ_7745c5c3_Err425 return templ_7745c5c3_Err
403 }426 }
404- var templ_7745c5c3_Var22 string427+ var templ_7745c5c3_Var23 string
405- templ_7745c5c3_Var22, templ_7745c5c3_Err = templ.JoinStringErrs(templ.CSSClasses(templ_7745c5c3_Var21).String())428+ templ_7745c5c3_Var23, templ_7745c5c3_Err = templ.JoinStringErrs(templ.CSSClasses(templ_7745c5c3_Var22).String())
406 if templ_7745c5c3_Err != nil {429 if templ_7745c5c3_Err != nil {
407 return templ.Error{Err: templ_7745c5c3_Err, FileName: `components.templ`, Line: 1, Col: 0}430 return templ.Error{Err: templ_7745c5c3_Err, FileName: `components.templ`, Line: 1, Col: 0}
408 }431 }
409- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var22))432+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var23))
410 if templ_7745c5c3_Err != nil {433 if templ_7745c5c3_Err != nil {
411 return templ_7745c5c3_Err434 return templ_7745c5c3_Err
412 }435 }
413- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 25, "\" role=\"")436+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 28, "\" role=\"")
414 if templ_7745c5c3_Err != nil {437 if templ_7745c5c3_Err != nil {
415 return templ_7745c5c3_Err438 return templ_7745c5c3_Err
416 }439 }
417- var templ_7745c5c3_Var23 string440+ var templ_7745c5c3_Var24 string
418- templ_7745c5c3_Var23, templ_7745c5c3_Err = templ.JoinStringErrs(alertRole(kind))441+ templ_7745c5c3_Var24, templ_7745c5c3_Err = templ.JoinStringErrs(alertRole(kind))
419 if templ_7745c5c3_Err != nil {442 if templ_7745c5c3_Err != nil {
420- return templ.Error{Err: templ_7745c5c3_Err, FileName: `components.templ`, Line: 51, Col: 56}443+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `components.templ`, Line: 56, Col: 56}
421 }444 }
422- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var23))445+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var24))
423 if templ_7745c5c3_Err != nil {446 if templ_7745c5c3_Err != nil {
424 return templ_7745c5c3_Err447 return templ_7745c5c3_Err
425 }448 }
426- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 26, "\">")449+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 29, "\">")
427 if templ_7745c5c3_Err != nil {450 if templ_7745c5c3_Err != nil {
428 return templ_7745c5c3_Err451 return templ_7745c5c3_Err
429 }452 }
430- var templ_7745c5c3_Var24 string453+ var templ_7745c5c3_Var25 string
431- templ_7745c5c3_Var24, templ_7745c5c3_Err = templ.JoinStringErrs(message)454+ templ_7745c5c3_Var25, templ_7745c5c3_Err = templ.JoinStringErrs(message)
432 if templ_7745c5c3_Err != nil {455 if templ_7745c5c3_Err != nil {
433- return templ.Error{Err: templ_7745c5c3_Err, FileName: `components.templ`, Line: 51, Col: 68}456+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `components.templ`, Line: 56, Col: 68}
434 }457 }
435- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var24))458+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var25))
436 if templ_7745c5c3_Err != nil {459 if templ_7745c5c3_Err != nil {
437 return templ_7745c5c3_Err460 return templ_7745c5c3_Err
438 }461 }
439- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 27, "</div>")462+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 30, "</div>")
440 if templ_7745c5c3_Err != nil {463 if templ_7745c5c3_Err != nil {
441 return templ_7745c5c3_Err464 return templ_7745c5c3_Err
442 }465 }
@@ -461,20 +484,20 @@ func List() templ.Component {
461 }()484 }()
462 }485 }
463 ctx = templ.InitializeContext(ctx)486 ctx = templ.InitializeContext(ctx)
464- templ_7745c5c3_Var25 := templ.GetChildren(ctx)487+ templ_7745c5c3_Var26 := templ.GetChildren(ctx)
465- if templ_7745c5c3_Var25 == nil {488+ if templ_7745c5c3_Var26 == nil {
466- templ_7745c5c3_Var25 = templ.NopComponent489+ templ_7745c5c3_Var26 = templ.NopComponent
467 }490 }
468 ctx = templ.ClearChildren(ctx)491 ctx = templ.ClearChildren(ctx)
469- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 28, "<ul class=\"sv-list\">")492+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 31, "<ul class=\"sv-list\">")
470 if templ_7745c5c3_Err != nil {493 if templ_7745c5c3_Err != nil {
471 return templ_7745c5c3_Err494 return templ_7745c5c3_Err
472 }495 }
473- templ_7745c5c3_Err = templ_7745c5c3_Var25.Render(ctx, templ_7745c5c3_Buffer)496+ templ_7745c5c3_Err = templ_7745c5c3_Var26.Render(ctx, templ_7745c5c3_Buffer)
474 if templ_7745c5c3_Err != nil {497 if templ_7745c5c3_Err != nil {
475 return templ_7745c5c3_Err498 return templ_7745c5c3_Err
476 }499 }
477- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 29, "</ul>")500+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 32, "</ul>")
478 if templ_7745c5c3_Err != nil {501 if templ_7745c5c3_Err != nil {
479 return templ_7745c5c3_Err502 return templ_7745c5c3_Err
480 }503 }
@@ -498,20 +521,20 @@ func ListRow() templ.Component {
498 }()521 }()
499 }522 }
500 ctx = templ.InitializeContext(ctx)523 ctx = templ.InitializeContext(ctx)
501- templ_7745c5c3_Var26 := templ.GetChildren(ctx)524+ templ_7745c5c3_Var27 := templ.GetChildren(ctx)
502- if templ_7745c5c3_Var26 == nil {525+ if templ_7745c5c3_Var27 == nil {
503- templ_7745c5c3_Var26 = templ.NopComponent526+ templ_7745c5c3_Var27 = templ.NopComponent
504 }527 }
505 ctx = templ.ClearChildren(ctx)528 ctx = templ.ClearChildren(ctx)
506- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 30, "<li class=\"sv-list-row\">")529+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 33, "<li class=\"sv-list-row\">")
507 if templ_7745c5c3_Err != nil {530 if templ_7745c5c3_Err != nil {
508 return templ_7745c5c3_Err531 return templ_7745c5c3_Err
509 }532 }
510- templ_7745c5c3_Err = templ_7745c5c3_Var26.Render(ctx, templ_7745c5c3_Buffer)533+ templ_7745c5c3_Err = templ_7745c5c3_Var27.Render(ctx, templ_7745c5c3_Buffer)
511 if templ_7745c5c3_Err != nil {534 if templ_7745c5c3_Err != nil {
512 return templ_7745c5c3_Err535 return templ_7745c5c3_Err
513 }536 }
514- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 31, "</li>")537+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 34, "</li>")
515 if templ_7745c5c3_Err != nil {538 if templ_7745c5c3_Err != nil {
516 return templ_7745c5c3_Err539 return templ_7745c5c3_Err
517 }540 }
@@ -535,48 +558,48 @@ func Button(label string, action string, classes string, attrs templ.Attributes,
535 }()558 }()
536 }559 }
537 ctx = templ.InitializeContext(ctx)560 ctx = templ.InitializeContext(ctx)
538- templ_7745c5c3_Var27 := templ.GetChildren(ctx)561+ templ_7745c5c3_Var28 := templ.GetChildren(ctx)
539- if templ_7745c5c3_Var27 == nil {562+ if templ_7745c5c3_Var28 == nil {
540- templ_7745c5c3_Var27 = templ.NopComponent563+ templ_7745c5c3_Var28 = templ.NopComponent
541 }564 }
542 ctx = templ.ClearChildren(ctx)565 ctx = templ.ClearChildren(ctx)
543- var templ_7745c5c3_Var28 = []any{buttonClass(classes)}566+ var templ_7745c5c3_Var29 = []any{buttonClass(classes)}
544- templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var28...)567+ templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var29...)
545 if templ_7745c5c3_Err != nil {568 if templ_7745c5c3_Err != nil {
546 return templ_7745c5c3_Err569 return templ_7745c5c3_Err
547 }570 }
548- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 32, "<button type=\"button\" class=\"")571+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 35, "<button type=\"button\" class=\"")
549 if templ_7745c5c3_Err != nil {572 if templ_7745c5c3_Err != nil {
550 return templ_7745c5c3_Err573 return templ_7745c5c3_Err
551 }574 }
552- var templ_7745c5c3_Var29 string575+ var templ_7745c5c3_Var30 string
553- templ_7745c5c3_Var29, templ_7745c5c3_Err = templ.JoinStringErrs(templ.CSSClasses(templ_7745c5c3_Var28).String())576+ templ_7745c5c3_Var30, templ_7745c5c3_Err = templ.JoinStringErrs(templ.CSSClasses(templ_7745c5c3_Var29).String())
554 if templ_7745c5c3_Err != nil {577 if templ_7745c5c3_Err != nil {
555 return templ.Error{Err: templ_7745c5c3_Err, FileName: `components.templ`, Line: 1, Col: 0}578 return templ.Error{Err: templ_7745c5c3_Err, FileName: `components.templ`, Line: 1, Col: 0}
556 }579 }
557- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var29))580+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var30))
558 if templ_7745c5c3_Err != nil {581 if templ_7745c5c3_Err != nil {
559 return templ_7745c5c3_Err582 return templ_7745c5c3_Err
560 }583 }
561- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 33, "\" data-sv-action=\"")584+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 36, "\" data-sv-action=\"")
562 if templ_7745c5c3_Err != nil {585 if templ_7745c5c3_Err != nil {
563 return templ_7745c5c3_Err586 return templ_7745c5c3_Err
564 }587 }
565- var templ_7745c5c3_Var30 string588+ var templ_7745c5c3_Var31 string
566- templ_7745c5c3_Var30, templ_7745c5c3_Err = templ.JoinStringErrs(action)589+ templ_7745c5c3_Var31, templ_7745c5c3_Err = templ.JoinStringErrs(action)
567 if templ_7745c5c3_Err != nil {590 if templ_7745c5c3_Err != nil {
568- return templ.Error{Err: templ_7745c5c3_Err, FileName: `components.templ`, Line: 68, Col: 77}591+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `components.templ`, Line: 73, Col: 77}
569 }592 }
570- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var30))593+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var31))
571 if templ_7745c5c3_Err != nil {594 if templ_7745c5c3_Err != nil {
572 return templ_7745c5c3_Err595 return templ_7745c5c3_Err
573 }596 }
574- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 34, "\"")597+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 37, "\"")
575 if templ_7745c5c3_Err != nil {598 if templ_7745c5c3_Err != nil {
576 return templ_7745c5c3_Err599 return templ_7745c5c3_Err
577 }600 }
578 if disabled {601 if disabled {
579- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 35, " disabled")602+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 38, " disabled")
580 if templ_7745c5c3_Err != nil {603 if templ_7745c5c3_Err != nil {
581 return templ_7745c5c3_Err604 return templ_7745c5c3_Err
582 }605 }
@@ -585,20 +608,20 @@ func Button(label string, action string, classes string, attrs templ.Attributes,
585 if templ_7745c5c3_Err != nil {608 if templ_7745c5c3_Err != nil {
586 return templ_7745c5c3_Err609 return templ_7745c5c3_Err
587 }610 }
588- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 36, ">")611+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 39, ">")
589 if templ_7745c5c3_Err != nil {612 if templ_7745c5c3_Err != nil {
590 return templ_7745c5c3_Err613 return templ_7745c5c3_Err
591 }614 }
592- var templ_7745c5c3_Var31 string615+ var templ_7745c5c3_Var32 string
593- templ_7745c5c3_Var31, templ_7745c5c3_Err = templ.JoinStringErrs(label)616+ templ_7745c5c3_Var32, templ_7745c5c3_Err = templ.JoinStringErrs(label)
594 if templ_7745c5c3_Err != nil {617 if templ_7745c5c3_Err != nil {
595- return templ.Error{Err: templ_7745c5c3_Err, FileName: `components.templ`, Line: 68, Col: 123}618+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `components.templ`, Line: 73, Col: 123}
596 }619 }
597- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var31))620+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var32))
598 if templ_7745c5c3_Err != nil {621 if templ_7745c5c3_Err != nil {
599 return templ_7745c5c3_Err622 return templ_7745c5c3_Err
600 }623 }
601- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 37, "</button>")624+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 40, "</button>")
602 if templ_7745c5c3_Err != nil {625 if templ_7745c5c3_Err != nil {
603 return templ_7745c5c3_Err626 return templ_7745c5c3_Err
604 }627 }
@@ -622,32 +645,32 @@ func KeyList(keys []string) templ.Component {
622 }()645 }()
623 }646 }
624 ctx = templ.InitializeContext(ctx)647 ctx = templ.InitializeContext(ctx)
625- templ_7745c5c3_Var32 := templ.GetChildren(ctx)648+ templ_7745c5c3_Var33 := templ.GetChildren(ctx)
626- if templ_7745c5c3_Var32 == nil {649+ if templ_7745c5c3_Var33 == nil {
627- templ_7745c5c3_Var32 = templ.NopComponent650+ templ_7745c5c3_Var33 = templ.NopComponent
628 }651 }
629 ctx = templ.ClearChildren(ctx)652 ctx = templ.ClearChildren(ctx)
630 if len(keys) == 0 {653 if len(keys) == 0 {
631- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 38, "<span class=\"sv-key sv-key-empty\">Unassigned</span>")654+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 41, "<span class=\"sv-key sv-key-empty\">Unassigned</span>")
632 if templ_7745c5c3_Err != nil {655 if templ_7745c5c3_Err != nil {
633 return templ_7745c5c3_Err656 return templ_7745c5c3_Err
634 }657 }
635 } else {658 } else {
636 for _, key := range keys {659 for _, key := range keys {
637- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 39, "<span class=\"sv-key\">")660+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 42, "<span class=\"sv-key\">")
638 if templ_7745c5c3_Err != nil {661 if templ_7745c5c3_Err != nil {
639 return templ_7745c5c3_Err662 return templ_7745c5c3_Err
640 }663 }
641- var templ_7745c5c3_Var33 string664+ var templ_7745c5c3_Var34 string
642- templ_7745c5c3_Var33, templ_7745c5c3_Err = templ.JoinStringErrs(key)665+ templ_7745c5c3_Var34, templ_7745c5c3_Err = templ.JoinStringErrs(key)
643 if templ_7745c5c3_Err != nil {666 if templ_7745c5c3_Err != nil {
644- return templ.Error{Err: templ_7745c5c3_Err, FileName: `components.templ`, Line: 76, Col: 29}667+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `components.templ`, Line: 81, Col: 29}
645 }668 }
646- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var33))669+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var34))
647 if templ_7745c5c3_Err != nil {670 if templ_7745c5c3_Err != nil {
648 return templ_7745c5c3_Err671 return templ_7745c5c3_Err
649 }672 }
650- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 40, "</span>")673+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 43, "</span>")
651 if templ_7745c5c3_Err != nil {674 if templ_7745c5c3_Err != nil {
652 return templ_7745c5c3_Err675 return templ_7745c5c3_Err
653 }676 }
@@ -673,9 +696,9 @@ func KV(rows []kvPair) templ.Component {
673 }()696 }()
674 }697 }
675 ctx = templ.InitializeContext(ctx)698 ctx = templ.InitializeContext(ctx)
676- templ_7745c5c3_Var34 := templ.GetChildren(ctx)699+ templ_7745c5c3_Var35 := templ.GetChildren(ctx)
677- if templ_7745c5c3_Var34 == nil {700+ if templ_7745c5c3_Var35 == nil {
678- templ_7745c5c3_Var34 = templ.NopComponent701+ templ_7745c5c3_Var35 = templ.NopComponent
679 }702 }
680 ctx = templ.ClearChildren(ctx)703 ctx = templ.ClearChildren(ctx)
681 if len(rows) == 0 {704 if len(rows) == 0 {
@@ -684,43 +707,43 @@ func KV(rows []kvPair) templ.Component {
684 return templ_7745c5c3_Err707 return templ_7745c5c3_Err
685 }708 }
686 } else {709 } else {
687- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 41, "<dl class=\"sv-kv\">")710+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 44, "<dl class=\"sv-kv\">")
688 if templ_7745c5c3_Err != nil {711 if templ_7745c5c3_Err != nil {
689 return templ_7745c5c3_Err712 return templ_7745c5c3_Err
690 }713 }
691 for _, row := range rows {714 for _, row := range rows {
692- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 42, "<div class=\"sv-kv-row\"><dt>")715+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 45, "<div class=\"sv-kv-row\"><dt>")
693 if templ_7745c5c3_Err != nil {716 if templ_7745c5c3_Err != nil {
694 return templ_7745c5c3_Err717 return templ_7745c5c3_Err
695 }718 }
696- var templ_7745c5c3_Var35 string719+ var templ_7745c5c3_Var36 string
697- templ_7745c5c3_Var35, templ_7745c5c3_Err = templ.JoinStringErrs(row.Label)720+ templ_7745c5c3_Var36, templ_7745c5c3_Err = templ.JoinStringErrs(row.Label)
698 if templ_7745c5c3_Err != nil {721 if templ_7745c5c3_Err != nil {
699- return templ.Error{Err: templ_7745c5c3_Err, FileName: `components.templ`, Line: 87, Col: 42}722+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `components.templ`, Line: 92, Col: 42}
700 }723 }
701- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var35))724+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var36))
702 if templ_7745c5c3_Err != nil {725 if templ_7745c5c3_Err != nil {
703 return templ_7745c5c3_Err726 return templ_7745c5c3_Err
704 }727 }
705- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 43, "</dt><dd>")728+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 46, "</dt><dd>")
706 if templ_7745c5c3_Err != nil {729 if templ_7745c5c3_Err != nil {
707 return templ_7745c5c3_Err730 return templ_7745c5c3_Err
708 }731 }
709- var templ_7745c5c3_Var36 string732+ var templ_7745c5c3_Var37 string
710- templ_7745c5c3_Var36, templ_7745c5c3_Err = templ.JoinStringErrs(row.Value)733+ templ_7745c5c3_Var37, templ_7745c5c3_Err = templ.JoinStringErrs(row.Value)
711 if templ_7745c5c3_Err != nil {734 if templ_7745c5c3_Err != nil {
712- return templ.Error{Err: templ_7745c5c3_Err, FileName: `components.templ`, Line: 87, Col: 64}735+ return templ.Error{Err: templ_7745c5c3_Err, FileName: `components.templ`, Line: 92, Col: 64}
713 }736 }
714- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var36))737+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var37))
715 if templ_7745c5c3_Err != nil {738 if templ_7745c5c3_Err != nil {
716 return templ_7745c5c3_Err739 return templ_7745c5c3_Err
717 }740 }
718- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 44, "</dd></div>")741+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 47, "</dd></div>")
719 if templ_7745c5c3_Err != nil {742 if templ_7745c5c3_Err != nil {
720 return templ_7745c5c3_Err743 return templ_7745c5c3_Err
721 }744 }
722 }745 }
723- templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 45, "</dl>")746+ templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 48, "</dl>")
724 if templ_7745c5c3_Err != nil {747 if templ_7745c5c3_Err != nil {
725 return templ_7745c5c3_Err748 return templ_7745c5c3_Err
726 }749 }
M internal/ui/systemviews/history_actions.go +5 -4
@@ -237,10 +237,11 @@ func (a *App) handleHistoryLoadMore(ctx context.Context, event DOMAction) error
237237 fullData.Entries = a.historyEntries
238238 title := historyDocumentTitle(fullData)
239239 a.renderedHTML = renderAppFrame(renderedPage{
240- route: RouteHistory,
241- title: title,
242- subtitle: title,
243- body: historyHTML(fullData),
240+ route: RouteHistory,
241+ title: title,
242+ subtitle: "History",
243+ subtitleDetail: historyTitleDetail(fullData),
244+ body: historyHTML(fullData),
244245 }, a.shellTheme)
245246 fallbackHTML = a.renderedHTML
246247 }
@@ -237,10 +237,11 @@ func (a *App) handleHistoryLoadMore(ctx context.Context, event DOMAction) error
237 fullData.Entries = a.historyEntries237 fullData.Entries = a.historyEntries
238 title := historyDocumentTitle(fullData)238 title := historyDocumentTitle(fullData)
239 a.renderedHTML = renderAppFrame(renderedPage{239 a.renderedHTML = renderAppFrame(renderedPage{
240- route: RouteHistory,240+ route: RouteHistory,
241- title: title,241+ title: title,
242- subtitle: title,242+ subtitle: "History",
243- body: historyHTML(fullData),243+ subtitleDetail: historyTitleDetail(fullData),
244+ body: historyHTML(fullData),
244 }, a.shellTheme)245 }, a.shellTheme)
245 fallbackHTML = a.renderedHTML246 fallbackHTML = a.renderedHTML
246 }247 }
M internal/ui/systemviews/history_view.go +6 -2
@@ -52,12 +52,16 @@ func historyTimelineAppendHTML(data historyRenderData) string {
5252 }
5353
5454 func historyDocumentTitle(data historyRenderData) string {
55+ return "History " + historyTitleDetail(data)
56+}
57+
58+func historyTitleDetail(data historyRenderData) string {
5559 if data.Loading {
56- return "History - Loading"
60+ return "- Loading"
5761 }
5862 entries, visits, days := historySummaryValues(data)
5963 return fmt.Sprintf(
60- "History - %s, %s, %s",
64+ "- %s, %s, %s",
6165 historyCountLabel(entries, "entry", "entries"),
6266 historyCountLabel(visits, "visit", "visits"),
6367 historyCountLabel(days, "day", "days"),
@@ -52,12 +52,16 @@ func historyTimelineAppendHTML(data historyRenderData) string {
52 }52 }
53 53
54 func historyDocumentTitle(data historyRenderData) string {54 func historyDocumentTitle(data historyRenderData) string {
55+ return "History " + historyTitleDetail(data)
56+}
57+
58+func historyTitleDetail(data historyRenderData) string {
55 if data.Loading {59 if data.Loading {
56- return "History - Loading"60+ return "- Loading"
57 }61 }
58 entries, visits, days := historySummaryValues(data)62 entries, visits, days := historySummaryValues(data)
59 return fmt.Sprintf(63 return fmt.Sprintf(
60- "History - %s, %s, %s",64+ "- %s, %s, %s",
61 historyCountLabel(entries, "entry", "entries"),65 historyCountLabel(entries, "entry", "entries"),
62 historyCountLabel(visits, "visit", "visits"),66 historyCountLabel(visits, "visit", "visits"),
63 historyCountLabel(days, "day", "days"),67 historyCountLabel(days, "day", "days"),
M internal/ui/systemviews/shell.go +5 -4
@@ -16,10 +16,11 @@ type kvPair struct {
1616 // renderedPage holds the data needed by renderAppFrame to produce the shell
1717 // fragment. Route views populate this; the app frame wraps it.
1818 type renderedPage struct {
19- route Route
20- title string
21- subtitle string
22- body string
19+ route Route
20+ title string
21+ subtitle string
22+ subtitleDetail string
23+ body string
2324 }
2425
2526 // renderAppFrame produces a self-contained HTML fragment (no <html>, <head>,
@@ -16,10 +16,11 @@ type kvPair struct {
16 // renderedPage holds the data needed by renderAppFrame to produce the shell16 // renderedPage holds the data needed by renderAppFrame to produce the shell
17 // fragment. Route views populate this; the app frame wraps it.17 // fragment. Route views populate this; the app frame wraps it.
18 type renderedPage struct {18 type renderedPage struct {
19- route Route19+ route Route
20- title string20+ title string
21- subtitle string21+ subtitle string
22- body string22+ subtitleDetail string
23+ body string
23 }24 }
24 25
25 // renderAppFrame produces a self-contained HTML fragment (no <html>, <head>,26 // renderAppFrame produces a self-contained HTML fragment (no <html>, <head>,

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