v0.29.0 21b3150

favorites_templ.go RawHistoryFolder

1// Code generated by templ - DO NOT EDIT.
2
3package systemviews
4
5//lint:file-ignore SA4006 This context is only used if a nested component is present.
6
7import "github.com/a-h/templ"
8import templruntime "github.com/a-h/templ/runtime"
9
10import (
11	"fmt"
12	"github.com/bnema/dumber/internal/domain/entity"
13)
14
15func FavoritesView(data favoritesRenderData) templ.Component {
16	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
17		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
18		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
19			return templ_7745c5c3_CtxErr
20		}
21		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
22		if !templ_7745c5c3_IsBuffer {
23			defer func() {
24				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
25				if templ_7745c5c3_Err == nil {
26					templ_7745c5c3_Err = templ_7745c5c3_BufErr
27				}
28			}()
29		}
30		ctx = templ.InitializeContext(ctx)
31		templ_7745c5c3_Var1 := templ.GetChildren(ctx)
32		if templ_7745c5c3_Var1 == nil {
33			templ_7745c5c3_Var1 = templ.NopComponent
34		}
35		ctx = templ.ClearChildren(ctx)
36		templ_7745c5c3_Err = Alert("success", data.Notice).Render(ctx, templ_7745c5c3_Buffer)
37		if templ_7745c5c3_Err != nil {
38			return templ_7745c5c3_Err
39		}
40		templ_7745c5c3_Err = Alert("error", data.Error).Render(ctx, templ_7745c5c3_Buffer)
41		if templ_7745c5c3_Err != nil {
42			return templ_7745c5c3_Err
43		}
44		templ_7745c5c3_Var2 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
45			templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
46			templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
47			if !templ_7745c5c3_IsBuffer {
48				defer func() {
49					templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
50					if templ_7745c5c3_Err == nil {
51						templ_7745c5c3_Err = templ_7745c5c3_BufErr
52					}
53				}()
54			}
55			ctx = templ.InitializeContext(ctx)
56			templ_7745c5c3_Err = FavoritesControls(data).Render(ctx, templ_7745c5c3_Buffer)
57			if templ_7745c5c3_Err != nil {
58				return templ_7745c5c3_Err
59			}
60			return nil
61		})
62		templ_7745c5c3_Err = Section("sv-favorites-controls", "Manage favorites").Render(templ.WithChildren(ctx, templ_7745c5c3_Var2), templ_7745c5c3_Buffer)
63		if templ_7745c5c3_Err != nil {
64			return templ_7745c5c3_Err
65		}
66		templ_7745c5c3_Var3 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
67			templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
68			templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
69			if !templ_7745c5c3_IsBuffer {
70				defer func() {
71					templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
72					if templ_7745c5c3_Err == nil {
73						templ_7745c5c3_Err = templ_7745c5c3_BufErr
74					}
75				}()
76			}
77			ctx = templ.InitializeContext(ctx)
78			templ_7745c5c3_Err = Meta(favoritesSummary(data)).Render(ctx, templ_7745c5c3_Buffer)
79			if templ_7745c5c3_Err != nil {
80				return templ_7745c5c3_Err
81			}
82			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, " ")
83			if templ_7745c5c3_Err != nil {
84				return templ_7745c5c3_Err
85			}
86			if len(data.Favorites) == 0 {
87				templ_7745c5c3_Err = EmptyState("No favorites").Render(ctx, templ_7745c5c3_Buffer)
88				if templ_7745c5c3_Err != nil {
89					return templ_7745c5c3_Err
90				}
91			} else {
92				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 2, "<ul class=\"sv-list\">")
93				if templ_7745c5c3_Err != nil {
94					return templ_7745c5c3_Err
95				}
96				for _, favorite := range data.Favorites {
97					if favorite != nil {
98						templ_7745c5c3_Err = FavoriteItem(favorite, data.Folders, data.Tags).Render(ctx, templ_7745c5c3_Buffer)
99						if templ_7745c5c3_Err != nil {
100							return templ_7745c5c3_Err
101						}
102					}
103				}
104				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 3, "</ul>")
105				if templ_7745c5c3_Err != nil {
106					return templ_7745c5c3_Err
107				}
108			}
109			return nil
110		})
111		templ_7745c5c3_Err = Section("sv-favorites-list", "Favorites").Render(templ.WithChildren(ctx, templ_7745c5c3_Var3), templ_7745c5c3_Buffer)
112		if templ_7745c5c3_Err != nil {
113			return templ_7745c5c3_Err
114		}
115		templ_7745c5c3_Var4 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
116			templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
117			templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
118			if !templ_7745c5c3_IsBuffer {
119				defer func() {
120					templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
121					if templ_7745c5c3_Err == nil {
122						templ_7745c5c3_Err = templ_7745c5c3_BufErr
123					}
124				}()
125			}
126			ctx = templ.InitializeContext(ctx)
127			templ_7745c5c3_Err = Meta(foldersSummary(data)).Render(ctx, templ_7745c5c3_Buffer)
128			if templ_7745c5c3_Err != nil {
129				return templ_7745c5c3_Err
130			}
131			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 4, " ")
132			if templ_7745c5c3_Err != nil {
133				return templ_7745c5c3_Err
134			}
135			templ_7745c5c3_Err = FolderCreateForm().Render(ctx, templ_7745c5c3_Buffer)
136			if templ_7745c5c3_Err != nil {
137				return templ_7745c5c3_Err
138			}
139			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 5, " ")
140			if templ_7745c5c3_Err != nil {
141				return templ_7745c5c3_Err
142			}
143			if len(data.Folders) == 0 {
144				templ_7745c5c3_Err = EmptyState("No folders").Render(ctx, templ_7745c5c3_Buffer)
145				if templ_7745c5c3_Err != nil {
146					return templ_7745c5c3_Err
147				}
148			} else {
149				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 6, "<ul class=\"sv-list\">")
150				if templ_7745c5c3_Err != nil {
151					return templ_7745c5c3_Err
152				}
153				for _, folder := range data.Folders {
154					if folder != nil {
155						templ_7745c5c3_Err = FolderItem(folder).Render(ctx, templ_7745c5c3_Buffer)
156						if templ_7745c5c3_Err != nil {
157							return templ_7745c5c3_Err
158						}
159					}
160				}
161				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 7, "</ul>")
162				if templ_7745c5c3_Err != nil {
163					return templ_7745c5c3_Err
164				}
165			}
166			return nil
167		})
168		templ_7745c5c3_Err = Section("sv-folders-list", "Folders").Render(templ.WithChildren(ctx, templ_7745c5c3_Var4), templ_7745c5c3_Buffer)
169		if templ_7745c5c3_Err != nil {
170			return templ_7745c5c3_Err
171		}
172		templ_7745c5c3_Var5 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
173			templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
174			templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
175			if !templ_7745c5c3_IsBuffer {
176				defer func() {
177					templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
178					if templ_7745c5c3_Err == nil {
179						templ_7745c5c3_Err = templ_7745c5c3_BufErr
180					}
181				}()
182			}
183			ctx = templ.InitializeContext(ctx)
184			templ_7745c5c3_Err = Meta(tagsSummary(data)).Render(ctx, templ_7745c5c3_Buffer)
185			if templ_7745c5c3_Err != nil {
186				return templ_7745c5c3_Err
187			}
188			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 8, " ")
189			if templ_7745c5c3_Err != nil {
190				return templ_7745c5c3_Err
191			}
192			templ_7745c5c3_Err = TagCreateForm().Render(ctx, templ_7745c5c3_Buffer)
193			if templ_7745c5c3_Err != nil {
194				return templ_7745c5c3_Err
195			}
196			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 9, " ")
197			if templ_7745c5c3_Err != nil {
198				return templ_7745c5c3_Err
199			}
200			if len(data.Tags) == 0 {
201				templ_7745c5c3_Err = EmptyState("No tags").Render(ctx, templ_7745c5c3_Buffer)
202				if templ_7745c5c3_Err != nil {
203					return templ_7745c5c3_Err
204				}
205			} else {
206				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 10, "<ul class=\"sv-list\">")
207				if templ_7745c5c3_Err != nil {
208					return templ_7745c5c3_Err
209				}
210				for _, tag := range data.Tags {
211					if tag != nil {
212						templ_7745c5c3_Err = TagItem(tag).Render(ctx, templ_7745c5c3_Buffer)
213						if templ_7745c5c3_Err != nil {
214							return templ_7745c5c3_Err
215						}
216					}
217				}
218				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 11, "</ul>")
219				if templ_7745c5c3_Err != nil {
220					return templ_7745c5c3_Err
221				}
222			}
223			return nil
224		})
225		templ_7745c5c3_Err = Section("sv-tags-list", "Tags").Render(templ.WithChildren(ctx, templ_7745c5c3_Var5), templ_7745c5c3_Buffer)
226		if templ_7745c5c3_Err != nil {
227			return templ_7745c5c3_Err
228		}
229		return nil
230	})
231}
232
233func FavoritesControls(data favoritesRenderData) templ.Component {
234	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
235		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
236		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
237			return templ_7745c5c3_CtxErr
238		}
239		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
240		if !templ_7745c5c3_IsBuffer {
241			defer func() {
242				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
243				if templ_7745c5c3_Err == nil {
244					templ_7745c5c3_Err = templ_7745c5c3_BufErr
245				}
246			}()
247		}
248		ctx = templ.InitializeContext(ctx)
249		templ_7745c5c3_Var6 := templ.GetChildren(ctx)
250		if templ_7745c5c3_Var6 == nil {
251			templ_7745c5c3_Var6 = templ.NopComponent
252		}
253		ctx = templ.ClearChildren(ctx)
254		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 12, "<form class=\"sv-card-form\" data-sv-action=\"favorite.create\"><label><span>URL</span><input name=\"url\" type=\"url\" placeholder=\"https://example.com\" required></label> <label><span>Title</span><input name=\"title\" type=\"text\" placeholder=\"Optional title\"></label>")
255		if templ_7745c5c3_Err != nil {
256			return templ_7745c5c3_Err
257		}
258		templ_7745c5c3_Err = FolderSelect("folder_id", data.Folders, nil, "Folder").Render(ctx, templ_7745c5c3_Buffer)
259		if templ_7745c5c3_Err != nil {
260			return templ_7745c5c3_Err
261		}
262		templ_7745c5c3_Err = FavoriteCreateTagPicker(data.Tags).Render(ctx, templ_7745c5c3_Buffer)
263		if templ_7745c5c3_Err != nil {
264			return templ_7745c5c3_Err
265		}
266		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 13, "<button class=\"sv-button\" type=\"submit\">")
267		if templ_7745c5c3_Err != nil {
268			return templ_7745c5c3_Err
269		}
270		templ_7745c5c3_Err = ButtonIconLabel(iconPlus, "Add favorite").Render(ctx, templ_7745c5c3_Buffer)
271		if templ_7745c5c3_Err != nil {
272			return templ_7745c5c3_Err
273		}
274		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 14, "</button></form><div class=\"sv-filter-panel\"><div class=\"sv-button-row\"><span class=\"sv-meta\">Folders</span> ")
275		if templ_7745c5c3_Err != nil {
276			return templ_7745c5c3_Err
277		}
278		var templ_7745c5c3_Var7 = []any{favoriteFilterClass(favoriteAllFilterActive(data))}
279		templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var7...)
280		if templ_7745c5c3_Err != nil {
281			return templ_7745c5c3_Err
282		}
283		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 15, "<button type=\"button\" class=\"")
284		if templ_7745c5c3_Err != nil {
285			return templ_7745c5c3_Err
286		}
287		var templ_7745c5c3_Var8 string
288		templ_7745c5c3_Var8, templ_7745c5c3_Err = templ.JoinStringErrs(templ.CSSClasses(templ_7745c5c3_Var7).String())
289		if templ_7745c5c3_Err != nil {
290			return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 1, Col: 0}
291		}
292		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var8))
293		if templ_7745c5c3_Err != nil {
294			return templ_7745c5c3_Err
295		}
296		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 16, "\" aria-pressed=\"")
297		if templ_7745c5c3_Err != nil {
298			return templ_7745c5c3_Err
299		}
300		var templ_7745c5c3_Var9 string
301		templ_7745c5c3_Var9, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%t", favoriteAllFilterActive(data)))
302		if templ_7745c5c3_Err != nil {
303			return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 71, Col: 149}
304		}
305		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var9))
306		if templ_7745c5c3_Err != nil {
307			return templ_7745c5c3_Err
308		}
309		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 17, "\" data-sv-action=\"favorite.clearFilters\">All</button> ")
310		if templ_7745c5c3_Err != nil {
311			return templ_7745c5c3_Err
312		}
313		var templ_7745c5c3_Var10 = []any{favoriteFilterClass(favoriteFolderFilterActive(data, entity.FolderID(0)))}
314		templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var10...)
315		if templ_7745c5c3_Err != nil {
316			return templ_7745c5c3_Err
317		}
318		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 18, "<button type=\"button\" class=\"")
319		if templ_7745c5c3_Err != nil {
320			return templ_7745c5c3_Err
321		}
322		var templ_7745c5c3_Var11 string
323		templ_7745c5c3_Var11, templ_7745c5c3_Err = templ.JoinStringErrs(templ.CSSClasses(templ_7745c5c3_Var10).String())
324		if templ_7745c5c3_Err != nil {
325			return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 1, Col: 0}
326		}
327		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var11))
328		if templ_7745c5c3_Err != nil {
329			return templ_7745c5c3_Err
330		}
331		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 19, "\" aria-pressed=\"")
332		if templ_7745c5c3_Err != nil {
333			return templ_7745c5c3_Err
334		}
335		var templ_7745c5c3_Var12 string
336		templ_7745c5c3_Var12, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%t", favoriteFolderFilterActive(data, entity.FolderID(0))))
337		if templ_7745c5c3_Err != nil {
338			return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 72, Col: 195}
339		}
340		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var12))
341		if templ_7745c5c3_Err != nil {
342			return templ_7745c5c3_Err
343		}
344		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 20, "\" data-sv-action=\"favorite.filterFolder\" data-folder-id=\"root\">Unfiled</button> ")
345		if templ_7745c5c3_Err != nil {
346			return templ_7745c5c3_Err
347		}
348		for _, folder := range data.Folders {
349			if folder != nil {
350				var templ_7745c5c3_Var13 = []any{favoriteFilterClass(favoriteFolderFilterActive(data, folder.ID))}
351				templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var13...)
352				if templ_7745c5c3_Err != nil {
353					return templ_7745c5c3_Err
354				}
355				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 21, "<button type=\"button\" class=\"")
356				if templ_7745c5c3_Err != nil {
357					return templ_7745c5c3_Err
358				}
359				var templ_7745c5c3_Var14 string
360				templ_7745c5c3_Var14, templ_7745c5c3_Err = templ.JoinStringErrs(templ.CSSClasses(templ_7745c5c3_Var13).String())
361				if templ_7745c5c3_Err != nil {
362					return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 1, Col: 0}
363				}
364				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var14))
365				if templ_7745c5c3_Err != nil {
366					return templ_7745c5c3_Err
367				}
368				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 22, "\" aria-pressed=\"")
369				if templ_7745c5c3_Err != nil {
370					return templ_7745c5c3_Err
371				}
372				var templ_7745c5c3_Var15 string
373				templ_7745c5c3_Var15, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%t", favoriteFolderFilterActive(data, folder.ID)))
374				if templ_7745c5c3_Err != nil {
375					return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 75, Col: 179}
376				}
377				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var15))
378				if templ_7745c5c3_Err != nil {
379					return templ_7745c5c3_Err
380				}
381				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 23, "\" data-sv-action=\"favorite.filterFolder\" data-folder-id=\"")
382				if templ_7745c5c3_Err != nil {
383					return templ_7745c5c3_Err
384				}
385				var templ_7745c5c3_Var16 string
386				templ_7745c5c3_Var16, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", folder.ID))
387				if templ_7745c5c3_Err != nil {
388					return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 75, Col: 266}
389				}
390				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var16))
391				if templ_7745c5c3_Err != nil {
392					return templ_7745c5c3_Err
393				}
394				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 24, "\">")
395				if templ_7745c5c3_Err != nil {
396					return templ_7745c5c3_Err
397				}
398				var templ_7745c5c3_Var17 string
399				templ_7745c5c3_Var17, templ_7745c5c3_Err = templ.JoinStringErrs(folderDisplayName(folder))
400				if templ_7745c5c3_Err != nil {
401					return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 75, Col: 296}
402				}
403				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var17))
404				if templ_7745c5c3_Err != nil {
405					return templ_7745c5c3_Err
406				}
407				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 25, "</button>")
408				if templ_7745c5c3_Err != nil {
409					return templ_7745c5c3_Err
410				}
411			}
412		}
413		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 26, "</div><div class=\"sv-button-row\"><span class=\"sv-meta\">Tags</span> ")
414		if templ_7745c5c3_Err != nil {
415			return templ_7745c5c3_Err
416		}
417		for _, tag := range data.Tags {
418			if tag != nil {
419				var templ_7745c5c3_Var18 = []any{favoriteFilterClass(favoriteTagFilterActive(data, tag.ID))}
420				templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var18...)
421				if templ_7745c5c3_Err != nil {
422					return templ_7745c5c3_Err
423				}
424				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 27, "<button type=\"button\" class=\"")
425				if templ_7745c5c3_Err != nil {
426					return templ_7745c5c3_Err
427				}
428				var templ_7745c5c3_Var19 string
429				templ_7745c5c3_Var19, templ_7745c5c3_Err = templ.JoinStringErrs(templ.CSSClasses(templ_7745c5c3_Var18).String())
430				if templ_7745c5c3_Err != nil {
431					return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 1, Col: 0}
432				}
433				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var19))
434				if templ_7745c5c3_Err != nil {
435					return templ_7745c5c3_Err
436				}
437				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 28, "\" aria-pressed=\"")
438				if templ_7745c5c3_Err != nil {
439					return templ_7745c5c3_Err
440				}
441				var templ_7745c5c3_Var20 string
442				templ_7745c5c3_Var20, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%t", favoriteTagFilterActive(data, tag.ID)))
443				if templ_7745c5c3_Err != nil {
444					return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 83, Col: 167}
445				}
446				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var20))
447				if templ_7745c5c3_Err != nil {
448					return templ_7745c5c3_Err
449				}
450				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 29, "\" data-sv-action=\"favorite.filterTag\" data-tag-id=\"")
451				if templ_7745c5c3_Err != nil {
452					return templ_7745c5c3_Err
453				}
454				var templ_7745c5c3_Var21 string
455				templ_7745c5c3_Var21, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", tag.ID))
456				if templ_7745c5c3_Err != nil {
457					return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 83, Col: 245}
458				}
459				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var21))
460				if templ_7745c5c3_Err != nil {
461					return templ_7745c5c3_Err
462				}
463				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 30, "\"><span class=\"sv-tag-dot\" style=\"")
464				if templ_7745c5c3_Err != nil {
465					return templ_7745c5c3_Err
466				}
467				var templ_7745c5c3_Var22 string
468				templ_7745c5c3_Var22, templ_7745c5c3_Err = templruntime.SanitizeStyleAttributeValues("background:" + safeTagColor(tag.Color))
469				if templ_7745c5c3_Err != nil {
470					return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 84, Col: 78}
471				}
472				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var22))
473				if templ_7745c5c3_Err != nil {
474					return templ_7745c5c3_Err
475				}
476				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 31, "\"></span>")
477				if templ_7745c5c3_Err != nil {
478					return templ_7745c5c3_Err
479				}
480				var templ_7745c5c3_Var23 string
481				templ_7745c5c3_Var23, templ_7745c5c3_Err = templ.JoinStringErrs(tag.Name)
482				if templ_7745c5c3_Err != nil {
483					return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 84, Col: 98}
484				}
485				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var23))
486				if templ_7745c5c3_Err != nil {
487					return templ_7745c5c3_Err
488				}
489				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 32, "</button>")
490				if templ_7745c5c3_Err != nil {
491					return templ_7745c5c3_Err
492				}
493			}
494		}
495		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 33, "</div></div><p class=\"sv-meta sv-key-hints\">Keys: <kbd>j</kbd>/<kbd>k</kbd> move, <kbd>Enter</kbd> open, <kbd>e</kbd> edit title, <kbd>d</kbd> delete focused favorite.</p>")
496		if templ_7745c5c3_Err != nil {
497			return templ_7745c5c3_Err
498		}
499		return nil
500	})
501}
502
503func FavoriteCreateTagPicker(tags []*entity.Tag) templ.Component {
504	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
505		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
506		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
507			return templ_7745c5c3_CtxErr
508		}
509		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
510		if !templ_7745c5c3_IsBuffer {
511			defer func() {
512				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
513				if templ_7745c5c3_Err == nil {
514					templ_7745c5c3_Err = templ_7745c5c3_BufErr
515				}
516			}()
517		}
518		ctx = templ.InitializeContext(ctx)
519		templ_7745c5c3_Var24 := templ.GetChildren(ctx)
520		if templ_7745c5c3_Var24 == nil {
521			templ_7745c5c3_Var24 = templ.NopComponent
522		}
523		ctx = templ.ClearChildren(ctx)
524		if len(tags) > 0 {
525			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 34, "<fieldset class=\"sv-tag-picker\"><legend>Tags</legend><div class=\"sv-tag-controls\">")
526			if templ_7745c5c3_Err != nil {
527				return templ_7745c5c3_Err
528			}
529			for _, tag := range tags {
530				if tag != nil {
531					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 35, "<label class=\"sv-tag-toggle\"><input type=\"checkbox\" name=\"tags\" value=\"")
532					if templ_7745c5c3_Err != nil {
533						return templ_7745c5c3_Err
534					}
535					var templ_7745c5c3_Var25 string
536					templ_7745c5c3_Var25, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", tag.ID))
537					if templ_7745c5c3_Err != nil {
538						return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 101, Col: 75}
539					}
540					_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var25))
541					if templ_7745c5c3_Err != nil {
542						return templ_7745c5c3_Err
543					}
544					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 36, "\"> <span><span class=\"sv-tag-dot\" style=\"")
545					if templ_7745c5c3_Err != nil {
546						return templ_7745c5c3_Err
547					}
548					var templ_7745c5c3_Var26 string
549					templ_7745c5c3_Var26, templ_7745c5c3_Err = templruntime.SanitizeStyleAttributeValues("background:" + safeTagColor(tag.Color))
550					if templ_7745c5c3_Err != nil {
551						return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 102, Col: 85}
552					}
553					_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var26))
554					if templ_7745c5c3_Err != nil {
555						return templ_7745c5c3_Err
556					}
557					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 37, "\"></span>")
558					if templ_7745c5c3_Err != nil {
559						return templ_7745c5c3_Err
560					}
561					var templ_7745c5c3_Var27 string
562					templ_7745c5c3_Var27, templ_7745c5c3_Err = templ.JoinStringErrs(tag.Name)
563					if templ_7745c5c3_Err != nil {
564						return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 102, Col: 105}
565					}
566					_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var27))
567					if templ_7745c5c3_Err != nil {
568						return templ_7745c5c3_Err
569					}
570					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 38, "</span></label>")
571					if templ_7745c5c3_Err != nil {
572						return templ_7745c5c3_Err
573					}
574				}
575			}
576			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 39, "</div></fieldset>")
577			if templ_7745c5c3_Err != nil {
578				return templ_7745c5c3_Err
579			}
580		}
581		return nil
582	})
583}
584
585func FavoriteItem(favorite *entity.Favorite, folders []*entity.Folder, tags []*entity.Tag) templ.Component {
586	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
587		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
588		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
589			return templ_7745c5c3_CtxErr
590		}
591		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
592		if !templ_7745c5c3_IsBuffer {
593			defer func() {
594				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
595				if templ_7745c5c3_Err == nil {
596					templ_7745c5c3_Err = templ_7745c5c3_BufErr
597				}
598			}()
599		}
600		ctx = templ.InitializeContext(ctx)
601		templ_7745c5c3_Var28 := templ.GetChildren(ctx)
602		if templ_7745c5c3_Var28 == nil {
603			templ_7745c5c3_Var28 = templ.NopComponent
604		}
605		ctx = templ.ClearChildren(ctx)
606		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 40, "<li class=\"sv-list-row\"><article class=\"sv-favorite-item\" data-sv-favorite-row data-favorite-id=\"")
607		if templ_7745c5c3_Err != nil {
608			return templ_7745c5c3_Err
609		}
610		var templ_7745c5c3_Var29 string
611		templ_7745c5c3_Var29, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", favorite.ID))
612		if templ_7745c5c3_Err != nil {
613			return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 113, Col: 106}
614		}
615		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var29))
616		if templ_7745c5c3_Err != nil {
617			return templ_7745c5c3_Err
618		}
619		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 41, "\"><div class=\"sv-favorite-header\"><div><a class=\"sv-link sv-favorite-open\" href=\"")
620		if templ_7745c5c3_Err != nil {
621			return templ_7745c5c3_Err
622		}
623		var templ_7745c5c3_Var30 templ.SafeURL
624		templ_7745c5c3_Var30, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(sanitizeHref(favorite.URL)))
625		if templ_7745c5c3_Err != nil {
626			return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 116, Col: 89}
627		}
628		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var30))
629		if templ_7745c5c3_Err != nil {
630			return templ_7745c5c3_Err
631		}
632		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 42, "\">")
633		if templ_7745c5c3_Err != nil {
634			return templ_7745c5c3_Err
635		}
636		var templ_7745c5c3_Var31 string
637		templ_7745c5c3_Var31, templ_7745c5c3_Err = templ.JoinStringErrs(favoriteItemLabel(favorite))
638		if templ_7745c5c3_Err != nil {
639			return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 116, Col: 121}
640		}
641		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var31))
642		if templ_7745c5c3_Err != nil {
643			return templ_7745c5c3_Err
644		}
645		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 43, "</a><p class=\"sv-history-url\">")
646		if templ_7745c5c3_Err != nil {
647			return templ_7745c5c3_Err
648		}
649		var templ_7745c5c3_Var32 string
650		templ_7745c5c3_Var32, templ_7745c5c3_Err = templ.JoinStringErrs(favorite.URL)
651		if templ_7745c5c3_Err != nil {
652			return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 117, Col: 45}
653		}
654		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var32))
655		if templ_7745c5c3_Err != nil {
656			return templ_7745c5c3_Err
657		}
658		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 44, "</p>")
659		if templ_7745c5c3_Err != nil {
660			return templ_7745c5c3_Err
661		}
662		if favoriteMetaText(favorite, folders) != "" {
663			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 45, "<p class=\"sv-meta\">")
664			if templ_7745c5c3_Err != nil {
665				return templ_7745c5c3_Err
666			}
667			var templ_7745c5c3_Var33 string
668			templ_7745c5c3_Var33, templ_7745c5c3_Err = templ.JoinStringErrs(favoriteMetaText(favorite, folders))
669			if templ_7745c5c3_Err != nil {
670				return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 119, Col: 62}
671			}
672			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var33))
673			if templ_7745c5c3_Err != nil {
674				return templ_7745c5c3_Err
675			}
676			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 46, "</p>")
677			if templ_7745c5c3_Err != nil {
678				return templ_7745c5c3_Err
679			}
680		}
681		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 47, "</div><div class=\"sv-history-row-actions\"><a class=\"sv-button sv-button-secondary\" href=\"")
682		if templ_7745c5c3_Err != nil {
683			return templ_7745c5c3_Err
684		}
685		var templ_7745c5c3_Var34 templ.SafeURL
686		templ_7745c5c3_Var34, templ_7745c5c3_Err = templ.JoinURLErrs(templ.SafeURL(sanitizeHref(favorite.URL)))
687		if templ_7745c5c3_Err != nil {
688			return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 123, Col: 94}
689		}
690		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var34))
691		if templ_7745c5c3_Err != nil {
692			return templ_7745c5c3_Err
693		}
694		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 48, "\">")
695		if templ_7745c5c3_Err != nil {
696			return templ_7745c5c3_Err
697		}
698		templ_7745c5c3_Err = ButtonIconLabel(iconExternal, "Open").Render(ctx, templ_7745c5c3_Buffer)
699		if templ_7745c5c3_Err != nil {
700			return templ_7745c5c3_Err
701		}
702		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 49, "</a> <button type=\"button\" class=\"sv-button sv-button-secondary sv-button-danger sv-button-icon-only\" data-sv-action=\"favorite.delete\" data-id=\"")
703		if templ_7745c5c3_Err != nil {
704			return templ_7745c5c3_Err
705		}
706		var templ_7745c5c3_Var35 string
707		templ_7745c5c3_Var35, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", favorite.ID))
708		if templ_7745c5c3_Err != nil {
709			return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 124, Col: 175}
710		}
711		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var35))
712		if templ_7745c5c3_Err != nil {
713			return templ_7745c5c3_Err
714		}
715		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 50, "\" data-sv-confirm=\"Delete this favorite?\" aria-label=\"Delete this favorite\">")
716		if templ_7745c5c3_Err != nil {
717			return templ_7745c5c3_Err
718		}
719		templ_7745c5c3_Err = IconOnly(iconTrash, "Delete this favorite").Render(ctx, templ_7745c5c3_Buffer)
720		if templ_7745c5c3_Err != nil {
721			return templ_7745c5c3_Err
722		}
723		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 51, "</button></div></div>")
724		if templ_7745c5c3_Err != nil {
725			return templ_7745c5c3_Err
726		}
727		templ_7745c5c3_Err = FavoriteEditForm(favorite, folders).Render(ctx, templ_7745c5c3_Buffer)
728		if templ_7745c5c3_Err != nil {
729			return templ_7745c5c3_Err
730		}
731		templ_7745c5c3_Err = FavoriteTagControls(favorite, tags).Render(ctx, templ_7745c5c3_Buffer)
732		if templ_7745c5c3_Err != nil {
733			return templ_7745c5c3_Err
734		}
735		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 52, "</article></li>")
736		if templ_7745c5c3_Err != nil {
737			return templ_7745c5c3_Err
738		}
739		return nil
740	})
741}
742
743func FavoriteEditForm(favorite *entity.Favorite, folders []*entity.Folder) templ.Component {
744	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
745		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
746		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
747			return templ_7745c5c3_CtxErr
748		}
749		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
750		if !templ_7745c5c3_IsBuffer {
751			defer func() {
752				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
753				if templ_7745c5c3_Err == nil {
754					templ_7745c5c3_Err = templ_7745c5c3_BufErr
755				}
756			}()
757		}
758		ctx = templ.InitializeContext(ctx)
759		templ_7745c5c3_Var36 := templ.GetChildren(ctx)
760		if templ_7745c5c3_Var36 == nil {
761			templ_7745c5c3_Var36 = templ.NopComponent
762		}
763		ctx = templ.ClearChildren(ctx)
764		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 53, "<form class=\"sv-inline-form\" data-sv-action=\"favorite.update\"><input type=\"hidden\" name=\"id\" value=\"")
765		if templ_7745c5c3_Err != nil {
766			return templ_7745c5c3_Err
767		}
768		var templ_7745c5c3_Var37 string
769		templ_7745c5c3_Var37, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", favorite.ID))
770		if templ_7745c5c3_Err != nil {
771			return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 135, Col: 71}
772		}
773		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var37))
774		if templ_7745c5c3_Err != nil {
775			return templ_7745c5c3_Err
776		}
777		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 54, "\"> <label><span>Title</span><input name=\"title\" type=\"text\" value=\"")
778		if templ_7745c5c3_Err != nil {
779			return templ_7745c5c3_Err
780		}
781		var templ_7745c5c3_Var38 string
782		templ_7745c5c3_Var38, templ_7745c5c3_Err = templ.JoinStringErrs(favorite.Title)
783		if templ_7745c5c3_Err != nil {
784			return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 136, Col: 81}
785		}
786		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var38))
787		if templ_7745c5c3_Err != nil {
788			return templ_7745c5c3_Err
789		}
790		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 55, "\"></label> <label><span>Favicon</span><input name=\"favicon_url\" type=\"url\" value=\"")
791		if templ_7745c5c3_Err != nil {
792			return templ_7745c5c3_Err
793		}
794		var templ_7745c5c3_Var39 string
795		templ_7745c5c3_Var39, templ_7745c5c3_Err = templ.JoinStringErrs(favorite.FaviconURL)
796		if templ_7745c5c3_Err != nil {
797			return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 137, Col: 93}
798		}
799		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var39))
800		if templ_7745c5c3_Err != nil {
801			return templ_7745c5c3_Err
802		}
803		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 56, "\"></label>")
804		if templ_7745c5c3_Err != nil {
805			return templ_7745c5c3_Err
806		}
807		templ_7745c5c3_Err = FolderSelect("folder_id", folders, favorite.FolderID, "Folder").Render(ctx, templ_7745c5c3_Buffer)
808		if templ_7745c5c3_Err != nil {
809			return templ_7745c5c3_Err
810		}
811		templ_7745c5c3_Err = ShortcutSelect(favorite.ShortcutKey).Render(ctx, templ_7745c5c3_Buffer)
812		if templ_7745c5c3_Err != nil {
813			return templ_7745c5c3_Err
814		}
815		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 57, "<button class=\"sv-button sv-button-secondary\" type=\"submit\">")
816		if templ_7745c5c3_Err != nil {
817			return templ_7745c5c3_Err
818		}
819		templ_7745c5c3_Err = ButtonIconLabel(iconSave, "Save").Render(ctx, templ_7745c5c3_Buffer)
820		if templ_7745c5c3_Err != nil {
821			return templ_7745c5c3_Err
822		}
823		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 58, "</button></form>")
824		if templ_7745c5c3_Err != nil {
825			return templ_7745c5c3_Err
826		}
827		return nil
828	})
829}
830
831func FavoriteTagControls(favorite *entity.Favorite, tags []*entity.Tag) templ.Component {
832	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
833		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
834		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
835			return templ_7745c5c3_CtxErr
836		}
837		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
838		if !templ_7745c5c3_IsBuffer {
839			defer func() {
840				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
841				if templ_7745c5c3_Err == nil {
842					templ_7745c5c3_Err = templ_7745c5c3_BufErr
843				}
844			}()
845		}
846		ctx = templ.InitializeContext(ctx)
847		templ_7745c5c3_Var40 := templ.GetChildren(ctx)
848		if templ_7745c5c3_Var40 == nil {
849			templ_7745c5c3_Var40 = templ.NopComponent
850		}
851		ctx = templ.ClearChildren(ctx)
852		if len(tags) > 0 {
853			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 59, "<div class=\"sv-tag-controls\"><span class=\"sv-meta\">Tags</span> ")
854			if templ_7745c5c3_Err != nil {
855				return templ_7745c5c3_Err
856			}
857			for _, tag := range tags {
858				if tag != nil {
859					var templ_7745c5c3_Var41 = []any{favoriteTagButtonClass(favorite, tag)}
860					templ_7745c5c3_Err = templ.RenderCSSItems(ctx, templ_7745c5c3_Buffer, templ_7745c5c3_Var41...)
861					if templ_7745c5c3_Err != nil {
862						return templ_7745c5c3_Err
863					}
864					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 60, "<button type=\"button\" class=\"")
865					if templ_7745c5c3_Err != nil {
866						return templ_7745c5c3_Err
867					}
868					var templ_7745c5c3_Var42 string
869					templ_7745c5c3_Var42, templ_7745c5c3_Err = templ.JoinStringErrs(templ.CSSClasses(templ_7745c5c3_Var41).String())
870					if templ_7745c5c3_Err != nil {
871						return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 1, Col: 0}
872					}
873					_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var42))
874					if templ_7745c5c3_Err != nil {
875						return templ_7745c5c3_Err
876					}
877					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 61, "\" data-sv-action=\"")
878					if templ_7745c5c3_Err != nil {
879						return templ_7745c5c3_Err
880					}
881					var templ_7745c5c3_Var43 string
882					templ_7745c5c3_Var43, templ_7745c5c3_Err = templ.JoinStringErrs(favoriteTagButtonAction(favorite, tag))
883					if templ_7745c5c3_Err != nil {
884						return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 150, Col: 130}
885					}
886					_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var43))
887					if templ_7745c5c3_Err != nil {
888						return templ_7745c5c3_Err
889					}
890					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 62, "\" data-favorite-id=\"")
891					if templ_7745c5c3_Err != nil {
892						return templ_7745c5c3_Err
893					}
894					var templ_7745c5c3_Var44 string
895					templ_7745c5c3_Var44, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", favorite.ID))
896					if templ_7745c5c3_Err != nil {
897						return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 150, Col: 182}
898					}
899					_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var44))
900					if templ_7745c5c3_Err != nil {
901						return templ_7745c5c3_Err
902					}
903					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 63, "\" data-tag-id=\"")
904					if templ_7745c5c3_Err != nil {
905						return templ_7745c5c3_Err
906					}
907					var templ_7745c5c3_Var45 string
908					templ_7745c5c3_Var45, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", tag.ID))
909					if templ_7745c5c3_Err != nil {
910						return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 150, Col: 224}
911					}
912					_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var45))
913					if templ_7745c5c3_Err != nil {
914						return templ_7745c5c3_Err
915					}
916					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 64, "\"><span class=\"sv-tag-dot\" style=\"")
917					if templ_7745c5c3_Err != nil {
918						return templ_7745c5c3_Err
919					}
920					var templ_7745c5c3_Var46 string
921					templ_7745c5c3_Var46, templ_7745c5c3_Err = templruntime.SanitizeStyleAttributeValues("background:" + safeTagColor(tag.Color))
922					if templ_7745c5c3_Err != nil {
923						return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 151, Col: 78}
924					}
925					_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var46))
926					if templ_7745c5c3_Err != nil {
927						return templ_7745c5c3_Err
928					}
929					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 65, "\"></span>")
930					if templ_7745c5c3_Err != nil {
931						return templ_7745c5c3_Err
932					}
933					var templ_7745c5c3_Var47 string
934					templ_7745c5c3_Var47, templ_7745c5c3_Err = templ.JoinStringErrs(favoriteTagButtonLabel(favorite, tag))
935					if templ_7745c5c3_Err != nil {
936						return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 151, Col: 127}
937					}
938					_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var47))
939					if templ_7745c5c3_Err != nil {
940						return templ_7745c5c3_Err
941					}
942					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 66, "</button>")
943					if templ_7745c5c3_Err != nil {
944						return templ_7745c5c3_Err
945					}
946				}
947			}
948			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 67, "</div>")
949			if templ_7745c5c3_Err != nil {
950				return templ_7745c5c3_Err
951			}
952		}
953		return nil
954	})
955}
956
957func FolderCreateForm() templ.Component {
958	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
959		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
960		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
961			return templ_7745c5c3_CtxErr
962		}
963		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
964		if !templ_7745c5c3_IsBuffer {
965			defer func() {
966				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
967				if templ_7745c5c3_Err == nil {
968					templ_7745c5c3_Err = templ_7745c5c3_BufErr
969				}
970			}()
971		}
972		ctx = templ.InitializeContext(ctx)
973		templ_7745c5c3_Var48 := templ.GetChildren(ctx)
974		if templ_7745c5c3_Var48 == nil {
975			templ_7745c5c3_Var48 = templ.NopComponent
976		}
977		ctx = templ.ClearChildren(ctx)
978		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 68, "<form class=\"sv-inline-form\" data-sv-action=\"folder.create\"><label><span>Name</span><input name=\"name\" type=\"text\" required></label> <label><span>Icon</span><input name=\"icon\" type=\"text\" placeholder=\"Optional\"></label> <button class=\"sv-button sv-button-secondary\" type=\"submit\">")
979		if templ_7745c5c3_Err != nil {
980			return templ_7745c5c3_Err
981		}
982		templ_7745c5c3_Err = ButtonIconLabel(iconFolder, "Create folder").Render(ctx, templ_7745c5c3_Buffer)
983		if templ_7745c5c3_Err != nil {
984			return templ_7745c5c3_Err
985		}
986		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 69, "</button></form>")
987		if templ_7745c5c3_Err != nil {
988			return templ_7745c5c3_Err
989		}
990		return nil
991	})
992}
993
994func FolderItem(folder *entity.Folder) templ.Component {
995	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
996		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
997		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
998			return templ_7745c5c3_CtxErr
999		}
1000		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
1001		if !templ_7745c5c3_IsBuffer {
1002			defer func() {
1003				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
1004				if templ_7745c5c3_Err == nil {
1005					templ_7745c5c3_Err = templ_7745c5c3_BufErr
1006				}
1007			}()
1008		}
1009		ctx = templ.InitializeContext(ctx)
1010		templ_7745c5c3_Var49 := templ.GetChildren(ctx)
1011		if templ_7745c5c3_Var49 == nil {
1012			templ_7745c5c3_Var49 = templ.NopComponent
1013		}
1014		ctx = templ.ClearChildren(ctx)
1015		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 70, "<li class=\"sv-list-row\"><form class=\"sv-inline-form\" data-sv-action=\"folder.update\"><input type=\"hidden\" name=\"id\" value=\"")
1016		if templ_7745c5c3_Err != nil {
1017			return templ_7745c5c3_Err
1018		}
1019		var templ_7745c5c3_Var50 string
1020		templ_7745c5c3_Var50, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", folder.ID))
1021		if templ_7745c5c3_Err != nil {
1022			return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 170, Col: 70}
1023		}
1024		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var50))
1025		if templ_7745c5c3_Err != nil {
1026			return templ_7745c5c3_Err
1027		}
1028		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 71, "\"> <label><span>Name</span><input name=\"name\" type=\"text\" value=\"")
1029		if templ_7745c5c3_Err != nil {
1030			return templ_7745c5c3_Err
1031		}
1032		var templ_7745c5c3_Var51 string
1033		templ_7745c5c3_Var51, templ_7745c5c3_Err = templ.JoinStringErrs(folder.Name)
1034		if templ_7745c5c3_Err != nil {
1035			return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 171, Col: 77}
1036		}
1037		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var51))
1038		if templ_7745c5c3_Err != nil {
1039			return templ_7745c5c3_Err
1040		}
1041		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 72, "\" required></label> <label><span>Icon</span><input name=\"icon\" type=\"text\" value=\"")
1042		if templ_7745c5c3_Err != nil {
1043			return templ_7745c5c3_Err
1044		}
1045		var templ_7745c5c3_Var52 string
1046		templ_7745c5c3_Var52, templ_7745c5c3_Err = templ.JoinStringErrs(folder.Icon)
1047		if templ_7745c5c3_Err != nil {
1048			return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 172, Col: 77}
1049		}
1050		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var52))
1051		if templ_7745c5c3_Err != nil {
1052			return templ_7745c5c3_Err
1053		}
1054		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 73, "\"></label> <button class=\"sv-button sv-button-secondary\" type=\"submit\">")
1055		if templ_7745c5c3_Err != nil {
1056			return templ_7745c5c3_Err
1057		}
1058		templ_7745c5c3_Err = ButtonIconLabel(iconSave, "Save").Render(ctx, templ_7745c5c3_Buffer)
1059		if templ_7745c5c3_Err != nil {
1060			return templ_7745c5c3_Err
1061		}
1062		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 74, "</button> <button type=\"button\" class=\"sv-button sv-button-secondary sv-button-danger sv-button-icon-only\" data-sv-action=\"folder.delete\" data-id=\"")
1063		if templ_7745c5c3_Err != nil {
1064			return templ_7745c5c3_Err
1065		}
1066		var templ_7745c5c3_Var53 string
1067		templ_7745c5c3_Var53, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", folder.ID))
1068		if templ_7745c5c3_Err != nil {
1069			return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 174, Col: 169}
1070		}
1071		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var53))
1072		if templ_7745c5c3_Err != nil {
1073			return templ_7745c5c3_Err
1074		}
1075		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 75, "\" data-sv-confirm=\"Delete this folder? Favorites will move out of it.\" aria-label=\"Delete this folder\">")
1076		if templ_7745c5c3_Err != nil {
1077			return templ_7745c5c3_Err
1078		}
1079		templ_7745c5c3_Err = IconOnly(iconTrash, "Delete this folder").Render(ctx, templ_7745c5c3_Buffer)
1080		if templ_7745c5c3_Err != nil {
1081			return templ_7745c5c3_Err
1082		}
1083		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 76, "</button></form></li>")
1084		if templ_7745c5c3_Err != nil {
1085			return templ_7745c5c3_Err
1086		}
1087		return nil
1088	})
1089}
1090
1091func TagCreateForm() templ.Component {
1092	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
1093		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
1094		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
1095			return templ_7745c5c3_CtxErr
1096		}
1097		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
1098		if !templ_7745c5c3_IsBuffer {
1099			defer func() {
1100				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
1101				if templ_7745c5c3_Err == nil {
1102					templ_7745c5c3_Err = templ_7745c5c3_BufErr
1103				}
1104			}()
1105		}
1106		ctx = templ.InitializeContext(ctx)
1107		templ_7745c5c3_Var54 := templ.GetChildren(ctx)
1108		if templ_7745c5c3_Var54 == nil {
1109			templ_7745c5c3_Var54 = templ.NopComponent
1110		}
1111		ctx = templ.ClearChildren(ctx)
1112		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 77, "<form class=\"sv-inline-form\" data-sv-action=\"tag.create\"><label><span>Name</span><input name=\"name\" type=\"text\" required></label> <label><span>Color</span><input name=\"color\" type=\"text\" placeholder=\"#808080\"></label> <button class=\"sv-button sv-button-secondary\" type=\"submit\">")
1113		if templ_7745c5c3_Err != nil {
1114			return templ_7745c5c3_Err
1115		}
1116		templ_7745c5c3_Err = ButtonIconLabel(iconTag, "Create tag").Render(ctx, templ_7745c5c3_Buffer)
1117		if templ_7745c5c3_Err != nil {
1118			return templ_7745c5c3_Err
1119		}
1120		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 78, "</button></form>")
1121		if templ_7745c5c3_Err != nil {
1122			return templ_7745c5c3_Err
1123		}
1124		return nil
1125	})
1126}
1127
1128func TagItem(tag *entity.Tag) templ.Component {
1129	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
1130		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
1131		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
1132			return templ_7745c5c3_CtxErr
1133		}
1134		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
1135		if !templ_7745c5c3_IsBuffer {
1136			defer func() {
1137				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
1138				if templ_7745c5c3_Err == nil {
1139					templ_7745c5c3_Err = templ_7745c5c3_BufErr
1140				}
1141			}()
1142		}
1143		ctx = templ.InitializeContext(ctx)
1144		templ_7745c5c3_Var55 := templ.GetChildren(ctx)
1145		if templ_7745c5c3_Var55 == nil {
1146			templ_7745c5c3_Var55 = templ.NopComponent
1147		}
1148		ctx = templ.ClearChildren(ctx)
1149		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 79, "<li class=\"sv-list-row\"><form class=\"sv-inline-form\" data-sv-action=\"tag.update\"><input type=\"hidden\" name=\"id\" value=\"")
1150		if templ_7745c5c3_Err != nil {
1151			return templ_7745c5c3_Err
1152		}
1153		var templ_7745c5c3_Var56 string
1154		templ_7745c5c3_Var56, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", tag.ID))
1155		if templ_7745c5c3_Err != nil {
1156			return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 190, Col: 67}
1157		}
1158		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var56))
1159		if templ_7745c5c3_Err != nil {
1160			return templ_7745c5c3_Err
1161		}
1162		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 80, "\"> <span class=\"sv-tag-dot\" style=\"")
1163		if templ_7745c5c3_Err != nil {
1164			return templ_7745c5c3_Err
1165		}
1166		var templ_7745c5c3_Var57 string
1167		templ_7745c5c3_Var57, templ_7745c5c3_Err = templruntime.SanitizeStyleAttributeValues("background:" + safeTagColor(tag.Color))
1168		if templ_7745c5c3_Err != nil {
1169			return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 191, Col: 75}
1170		}
1171		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var57))
1172		if templ_7745c5c3_Err != nil {
1173			return templ_7745c5c3_Err
1174		}
1175		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 81, "\"></span> <label><span>Name</span><input name=\"name\" type=\"text\" value=\"")
1176		if templ_7745c5c3_Err != nil {
1177			return templ_7745c5c3_Err
1178		}
1179		var templ_7745c5c3_Var58 string
1180		templ_7745c5c3_Var58, templ_7745c5c3_Err = templ.JoinStringErrs(tag.Name)
1181		if templ_7745c5c3_Err != nil {
1182			return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 192, Col: 74}
1183		}
1184		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var58))
1185		if templ_7745c5c3_Err != nil {
1186			return templ_7745c5c3_Err
1187		}
1188		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 82, "\" required></label> <label><span>Color</span><input name=\"color\" type=\"text\" value=\"")
1189		if templ_7745c5c3_Err != nil {
1190			return templ_7745c5c3_Err
1191		}
1192		var templ_7745c5c3_Var59 string
1193		templ_7745c5c3_Var59, templ_7745c5c3_Err = templ.JoinStringErrs(tag.Color)
1194		if templ_7745c5c3_Err != nil {
1195			return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 193, Col: 77}
1196		}
1197		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var59))
1198		if templ_7745c5c3_Err != nil {
1199			return templ_7745c5c3_Err
1200		}
1201		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 83, "\"></label> <button class=\"sv-button sv-button-secondary\" type=\"submit\">")
1202		if templ_7745c5c3_Err != nil {
1203			return templ_7745c5c3_Err
1204		}
1205		templ_7745c5c3_Err = ButtonIconLabel(iconSave, "Save").Render(ctx, templ_7745c5c3_Buffer)
1206		if templ_7745c5c3_Err != nil {
1207			return templ_7745c5c3_Err
1208		}
1209		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 84, "</button> <button type=\"button\" class=\"sv-button sv-button-secondary sv-button-danger sv-button-icon-only\" data-sv-action=\"tag.delete\" data-id=\"")
1210		if templ_7745c5c3_Err != nil {
1211			return templ_7745c5c3_Err
1212		}
1213		var templ_7745c5c3_Var60 string
1214		templ_7745c5c3_Var60, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", tag.ID))
1215		if templ_7745c5c3_Err != nil {
1216			return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 195, Col: 163}
1217		}
1218		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var60))
1219		if templ_7745c5c3_Err != nil {
1220			return templ_7745c5c3_Err
1221		}
1222		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 85, "\" data-sv-confirm=\"Delete this tag?\" aria-label=\"Delete this tag\">")
1223		if templ_7745c5c3_Err != nil {
1224			return templ_7745c5c3_Err
1225		}
1226		templ_7745c5c3_Err = IconOnly(iconTrash, "Delete this tag").Render(ctx, templ_7745c5c3_Buffer)
1227		if templ_7745c5c3_Err != nil {
1228			return templ_7745c5c3_Err
1229		}
1230		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 86, "</button></form></li>")
1231		if templ_7745c5c3_Err != nil {
1232			return templ_7745c5c3_Err
1233		}
1234		return nil
1235	})
1236}
1237
1238func FolderSelect(name string, folders []*entity.Folder, selected *entity.FolderID, label string) templ.Component {
1239	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
1240		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
1241		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
1242			return templ_7745c5c3_CtxErr
1243		}
1244		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
1245		if !templ_7745c5c3_IsBuffer {
1246			defer func() {
1247				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
1248				if templ_7745c5c3_Err == nil {
1249					templ_7745c5c3_Err = templ_7745c5c3_BufErr
1250				}
1251			}()
1252		}
1253		ctx = templ.InitializeContext(ctx)
1254		templ_7745c5c3_Var61 := templ.GetChildren(ctx)
1255		if templ_7745c5c3_Var61 == nil {
1256			templ_7745c5c3_Var61 = templ.NopComponent
1257		}
1258		ctx = templ.ClearChildren(ctx)
1259		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 87, "<label><span>")
1260		if templ_7745c5c3_Err != nil {
1261			return templ_7745c5c3_Err
1262		}
1263		var templ_7745c5c3_Var62 string
1264		templ_7745c5c3_Var62, templ_7745c5c3_Err = templ.JoinStringErrs(label)
1265		if templ_7745c5c3_Err != nil {
1266			return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 201, Col: 21}
1267		}
1268		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var62))
1269		if templ_7745c5c3_Err != nil {
1270			return templ_7745c5c3_Err
1271		}
1272		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 88, "</span><select name=\"")
1273		if templ_7745c5c3_Err != nil {
1274			return templ_7745c5c3_Err
1275		}
1276		var templ_7745c5c3_Var63 string
1277		templ_7745c5c3_Var63, templ_7745c5c3_Err = templ.JoinStringErrs(name)
1278		if templ_7745c5c3_Err != nil {
1279			return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 201, Col: 49}
1280		}
1281		_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var63))
1282		if templ_7745c5c3_Err != nil {
1283			return templ_7745c5c3_Err
1284		}
1285		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 89, "\"><option value=\"\">Unfiled</option> ")
1286		if templ_7745c5c3_Err != nil {
1287			return templ_7745c5c3_Err
1288		}
1289		for _, folder := range folders {
1290			if folder != nil {
1291				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 90, "<option value=\"")
1292				if templ_7745c5c3_Err != nil {
1293					return templ_7745c5c3_Err
1294				}
1295				var templ_7745c5c3_Var64 string
1296				templ_7745c5c3_Var64, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", folder.ID))
1297				if templ_7745c5c3_Err != nil {
1298					return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 205, Col: 48}
1299				}
1300				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var64))
1301				if templ_7745c5c3_Err != nil {
1302					return templ_7745c5c3_Err
1303				}
1304				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 91, "\"")
1305				if templ_7745c5c3_Err != nil {
1306					return templ_7745c5c3_Err
1307				}
1308				if folderSelected(selected, folder.ID) {
1309					templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 92, " selected")
1310					if templ_7745c5c3_Err != nil {
1311						return templ_7745c5c3_Err
1312					}
1313				}
1314				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 93, ">")
1315				if templ_7745c5c3_Err != nil {
1316					return templ_7745c5c3_Err
1317				}
1318				var templ_7745c5c3_Var65 string
1319				templ_7745c5c3_Var65, templ_7745c5c3_Err = templ.JoinStringErrs(folderDisplayName(folder))
1320				if templ_7745c5c3_Err != nil {
1321					return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 205, Col: 128}
1322				}
1323				_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var65))
1324				if templ_7745c5c3_Err != nil {
1325					return templ_7745c5c3_Err
1326				}
1327				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 94, "</option>")
1328				if templ_7745c5c3_Err != nil {
1329					return templ_7745c5c3_Err
1330				}
1331			}
1332		}
1333		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 95, "</select></label>")
1334		if templ_7745c5c3_Err != nil {
1335			return templ_7745c5c3_Err
1336		}
1337		return nil
1338	})
1339}
1340
1341func ShortcutSelect(selected *int) templ.Component {
1342	return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
1343		templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
1344		if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
1345			return templ_7745c5c3_CtxErr
1346		}
1347		templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
1348		if !templ_7745c5c3_IsBuffer {
1349			defer func() {
1350				templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
1351				if templ_7745c5c3_Err == nil {
1352					templ_7745c5c3_Err = templ_7745c5c3_BufErr
1353				}
1354			}()
1355		}
1356		ctx = templ.InitializeContext(ctx)
1357		templ_7745c5c3_Var66 := templ.GetChildren(ctx)
1358		if templ_7745c5c3_Var66 == nil {
1359			templ_7745c5c3_Var66 = templ.NopComponent
1360		}
1361		ctx = templ.ClearChildren(ctx)
1362		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 96, "<label><span>Shortcut</span><select name=\"shortcut_key\"><option value=\"\">None</option> ")
1363		if templ_7745c5c3_Err != nil {
1364			return templ_7745c5c3_Err
1365		}
1366		for i := 1; i <= 9; i++ {
1367			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 97, "<option value=\"")
1368			if templ_7745c5c3_Err != nil {
1369				return templ_7745c5c3_Err
1370			}
1371			var templ_7745c5c3_Var67 string
1372			templ_7745c5c3_Var67, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", i))
1373			if templ_7745c5c3_Err != nil {
1374				return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 215, Col: 39}
1375			}
1376			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var67))
1377			if templ_7745c5c3_Err != nil {
1378				return templ_7745c5c3_Err
1379			}
1380			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 98, "\"")
1381			if templ_7745c5c3_Err != nil {
1382				return templ_7745c5c3_Err
1383			}
1384			if shortcutSelected(selected, i) {
1385				templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 99, " selected")
1386				if templ_7745c5c3_Err != nil {
1387					return templ_7745c5c3_Err
1388				}
1389			}
1390			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 100, ">")
1391			if templ_7745c5c3_Err != nil {
1392				return templ_7745c5c3_Err
1393			}
1394			var templ_7745c5c3_Var68 string
1395			templ_7745c5c3_Var68, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", i))
1396			if templ_7745c5c3_Err != nil {
1397				return templ.Error{Err: templ_7745c5c3_Err, FileName: `favorites.templ`, Line: 215, Col: 108}
1398			}
1399			_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var68))
1400			if templ_7745c5c3_Err != nil {
1401				return templ_7745c5c3_Err
1402			}
1403			templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 101, "</option>")
1404			if templ_7745c5c3_Err != nil {
1405				return templ_7745c5c3_Err
1406			}
1407		}
1408		templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 102, "</select></label>")
1409		if templ_7745c5c3_Err != nil {
1410			return templ_7745c5c3_Err
1411		}
1412		return nil
1413	})
1414}
1415
1416var _ = templruntime.GeneratedTemplate

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