From a0f0156d316948bc1e4fef3aadc41e1faa459304 Mon Sep 17 00:00:00 2001 From: John O'Keefe Date: Thu, 29 Jan 2026 15:51:51 -0500 Subject: [PATCH] feat: add bookshelf dashboard with visual shelf layout - Create bookshelf.templ with beautiful visual bookshelf interface - Implement wooden shelf appearance with CSS gradients - Add responsive grid layout (2/3/6 columns based on screen size) - Books display with 3D spine effect and hover animations - Auto-select first library and load books on page load - Empty state and loading state handling Visual Features: - Wooden shelves with gradient shadows (12px bottom border) - Books hover with lift (translateY) and rotation effects - Book covers with aspect ratio 2/3 and inset spine highlight - Error handling falls back to placeholder-book.svg - 6 books per shelf for optimal display JavaScript Features: - Fetch visible libraries from API - Populate library selector dropdown - Load and display media items on shelves - Handle empty states gracefully - Book detail placeholder (to be implemented) --- templates/bookshelf.templ | 440 +++++++++++++++++++++++++++++++++++ templates/bookshelf_templ.go | 40 ++++ 2 files changed, 480 insertions(+) create mode 100644 templates/bookshelf.templ create mode 100644 templates/bookshelf_templ.go diff --git a/templates/bookshelf.templ b/templates/bookshelf.templ new file mode 100644 index 0000000..3d1a157 --- /dev/null +++ b/templates/bookshelf.templ @@ -0,0 +1,440 @@ +package templates + +templ BookShelf(user User) { + + + + + + Library - Bookmann + + + + + + + + Header(user, "/bookshelf") +
+ +
+
+
+ + +
+
+ +
+
+
+ + +
+ +
+
+

Loading your library...

+
+ + + + + + +
+
+ + + + + +} diff --git a/templates/bookshelf_templ.go b/templates/bookshelf_templ.go new file mode 100644 index 0000000..6cc9610 --- /dev/null +++ b/templates/bookshelf_templ.go @@ -0,0 +1,40 @@ +// Code generated by templ - DO NOT EDIT. + +// templ: version: v0.3.977 +package templates + +//lint:file-ignore SA4006 This context is only used if a nested component is present. + +import "github.com/a-h/templ" +import templruntime "github.com/a-h/templ/runtime" + +func BookShelf(user User) templ.Component { + return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context + if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { + return templ_7745c5c3_CtxErr + } + templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) + if !templ_7745c5c3_IsBuffer { + defer func() { + templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) + if templ_7745c5c3_Err == nil { + templ_7745c5c3_Err = templ_7745c5c3_BufErr + } + }() + } + ctx = templ.InitializeContext(ctx) + templ_7745c5c3_Var1 := templ.GetChildren(ctx) + if templ_7745c5c3_Var1 == nil { + templ_7745c5c3_Var1 = templ.NopComponent + } + ctx = templ.ClearChildren(ctx) + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, "Library - BookmannHeader(user, \"/bookshelf\")

Loading your library...

📚

No Books Yet

Select a library to view your collection

") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + return nil + }) +} + +var _ = templruntime.GeneratedTemplate