diff --git a/src/core/ui/app-grid.templ b/src/core/ui/app-grid.templ index da441bf..5ab7132 100644 --- a/src/core/ui/app-grid.templ +++ b/src/core/ui/app-grid.templ @@ -1,93 +1,32 @@ package ui -// AppTile represents an app on the workspace launcher. type AppTile struct { Name string Description string URL string - Icon string // SVG inline - Color string // Background color - Status string // "ready" or "coming-soon" - AdminOnly bool // Only visible to admin role + Icon string + Color string + Status string + AdminOnly bool } -// DefaultApps returns apps filtered by user role. func DefaultApps(role string) []AppTile { all := []AppTile{ - { - Name: "Admin Panel", Description: "Users, groups & settings", - URL: "/admin", Color: "#9333ea", - Icon: ``, - Status: "ready", AdminOnly: true, - }, - { - Name: "Files", Description: "Storage & sharing", - URL: "#", Color: "#2563eb", - Icon: ``, - Status: "coming-soon", - }, - { - Name: "Mail", Description: "Email client", - URL: "#", Color: "#dc2626", - Icon: ``, - Status: "coming-soon", - }, - { - Name: "Calendar", Description: "Schedule & events", - URL: "#", Color: "#059669", - Icon: ``, - Status: "coming-soon", - }, - { - Name: "WorkSheets", Description: "Spreadsheets", - URL: "/worksheets", Color: "#059669", - Icon: ``, - Status: "coming-soon", - }, - { - Name: "TypeWriter", Description: "Documents", - URL: "/typewriter", Color: "#2563eb", - Icon: ``, - Status: "coming-soon", - }, - { - Name: "DeckCreator", Description: "Presentations", - URL: "/deckcreator", Color: "#dc2626", - Icon: ``, - Status: "coming-soon", - }, - { - Name: "NotesFiles", Description: "Notes & files", - URL: "/notesfiles", Color: "#d97706", - Icon: ``, - Status: "coming-soon", - }, - { - Name: "Contacts", Description: "People & directory", - URL: "#", Color: "#d97706", - Icon: ``, - Status: "coming-soon", - }, - { - Name: "Tasks", Description: "Project management", - URL: "#", Color: "#7c3aed", - Icon: ``, - Status: "coming-soon", - }, - { - Name: "Chat", Description: "Team messaging", - URL: "#", Color: "#db2777", - Icon: ``, - Status: "coming-soon", - }, + {Name:"Admin Panel",Description:"Users, groups & settings",URL:"/admin",Color:"#9333ea",Icon:``,Status:"ready",AdminOnly:true}, + {Name:"Files",Description:"Storage & sharing",URL:"/files",Color:"#2563eb",Icon:``,Status:"coming-soon"}, + {Name:"Mail",Description:"Email client",URL:"/mail",Color:"#dc2626",Icon:``,Status:"coming-soon"}, + {Name:"Calendar",Description:"Schedule & events",URL:"/calendar",Color:"#059669",Icon:``,Status:"coming-soon"}, + {Name:"WorkSheets",Description:"Spreadsheets",URL:"/worksheets",Color:"#059669",Icon:``,Status:"coming-soon"}, + {Name:"TypeWriter",Description:"Documents",URL:"/typewriter",Color:"#2563eb",Icon:``,Status:"coming-soon"}, + {Name:"DeckCreator",Description:"Presentations",URL:"/deckcreator",Color:"#dc2626",Icon:``,Status:"coming-soon"}, + {Name:"NotesFiles",Description:"Notes & files",URL:"/notesfiles",Color:"#d97706",Icon:``,Status:"coming-soon"}, + {Name:"Contacts",Description:"People & directory",URL:"/contacts",Color:"#d97706",Icon:``,Status:"coming-soon"}, + {Name:"Tasks",Description:"Project management",URL:"/tasks",Color:"#7c3aed",Icon:``,Status:"coming-soon"}, + {Name:"Chat",Description:"Team messaging",URL:"/chat",Color:"#db2777",Icon:``,Status:"coming-soon"}, } - - // Filter by role - filtered := make([]AppTile, 0, len(all)) - for _, a := range all { - if a.AdminOnly && role != "admin" { - continue - } + filtered := make([]AppTile,0,len(all)) + for _,a := range all { + if a.AdminOnly && role != "admin" { continue } filtered = append(filtered, a) } return filtered @@ -102,20 +41,9 @@ templ AppGrid(apps []AppTile) { } templ appTile(a AppTile) { - if a.Status == "coming-soon" { -
-
@templ.Raw(a.Icon)
-
{ a.Name }
-
Coming Soon
-
- } else { -
-
@templ.Raw(a.Icon)
-
{ a.Name }
-
Available
-
- } +
+
@templ.Raw(a.Icon)
+
{ a.Name }
+
Available
+
} diff --git a/src/core/ui/app-grid_templ.go b/src/core/ui/app-grid_templ.go index ccdb229..e04d6f7 100644 --- a/src/core/ui/app-grid_templ.go +++ b/src/core/ui/app-grid_templ.go @@ -8,89 +8,30 @@ package ui import "github.com/a-h/templ" import templruntime "github.com/a-h/templ/runtime" -// AppTile represents an app on the workspace launcher. type AppTile struct { Name string Description string URL string - Icon string // SVG inline - Color string // Background color - Status string // "ready" or "coming-soon" - AdminOnly bool // Only visible to admin role + Icon string + Color string + Status string + AdminOnly bool } -// DefaultApps returns apps filtered by user role. func DefaultApps(role string) []AppTile { all := []AppTile{ - { - Name: "Admin Panel", Description: "Users, groups & settings", - URL: "/admin", Color: "#9333ea", - Icon: ``, - Status: "ready", AdminOnly: true, - }, - { - Name: "Files", Description: "Storage & sharing", - URL: "#", Color: "#2563eb", - Icon: ``, - Status: "coming-soon", - }, - { - Name: "Mail", Description: "Email client", - URL: "#", Color: "#dc2626", - Icon: ``, - Status: "coming-soon", - }, - { - Name: "Calendar", Description: "Schedule & events", - URL: "#", Color: "#059669", - Icon: ``, - Status: "coming-soon", - }, - { - Name: "WorkSheets", Description: "Spreadsheets", - URL: "/worksheets", Color: "#059669", - Icon: ``, - Status: "coming-soon", - }, - { - Name: "TypeWriter", Description: "Documents", - URL: "/typewriter", Color: "#2563eb", - Icon: ``, - Status: "coming-soon", - }, - { - Name: "DeckCreator", Description: "Presentations", - URL: "/deckcreator", Color: "#dc2626", - Icon: ``, - Status: "coming-soon", - }, - { - Name: "NotesFiles", Description: "Notes & files", - URL: "/notesfiles", Color: "#d97706", - Icon: ``, - Status: "coming-soon", - }, - { - Name: "Contacts", Description: "People & directory", - URL: "#", Color: "#d97706", - Icon: ``, - Status: "coming-soon", - }, - { - Name: "Tasks", Description: "Project management", - URL: "#", Color: "#7c3aed", - Icon: ``, - Status: "coming-soon", - }, - { - Name: "Chat", Description: "Team messaging", - URL: "#", Color: "#db2777", - Icon: ``, - Status: "coming-soon", - }, + {Name: "Admin Panel", Description: "Users, groups & settings", URL: "/admin", Color: "#9333ea", Icon: ``, Status: "ready", AdminOnly: true}, + {Name: "Files", Description: "Storage & sharing", URL: "/files", Color: "#2563eb", Icon: ``, Status: "coming-soon"}, + {Name: "Mail", Description: "Email client", URL: "/mail", Color: "#dc2626", Icon: ``, Status: "coming-soon"}, + {Name: "Calendar", Description: "Schedule & events", URL: "/calendar", Color: "#059669", Icon: ``, Status: "coming-soon"}, + {Name: "WorkSheets", Description: "Spreadsheets", URL: "/worksheets", Color: "#059669", Icon: ``, Status: "coming-soon"}, + {Name: "TypeWriter", Description: "Documents", URL: "/typewriter", Color: "#2563eb", Icon: ``, Status: "coming-soon"}, + {Name: "DeckCreator", Description: "Presentations", URL: "/deckcreator", Color: "#dc2626", Icon: ``, Status: "coming-soon"}, + {Name: "NotesFiles", Description: "Notes & files", URL: "/notesfiles", Color: "#d97706", Icon: ``, Status: "coming-soon"}, + {Name: "Contacts", Description: "People & directory", URL: "/contacts", Color: "#d97706", Icon: ``, Status: "coming-soon"}, + {Name: "Tasks", Description: "Project management", URL: "/tasks", Color: "#7c3aed", Icon: ``, Status: "coming-soon"}, + {Name: "Chat", Description: "Team messaging", URL: "/chat", Color: "#db2777", Icon: ``, Status: "coming-soon"}, } - - // Filter by role filtered := make([]AppTile, 0, len(all)) for _, a := range all { if a.AdminOnly && role != "admin" { @@ -161,97 +102,56 @@ func appTile(a AppTile) templ.Component { templ_7745c5c3_Var2 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - if a.URL == "#" || a.URL == "" { - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 3, "
") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - templ_7745c5c3_Err = templ.Raw(a.Icon).Render(ctx, templ_7745c5c3_Buffer) - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 5, "
") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - var templ_7745c5c3_Var4 string - templ_7745c5c3_Var4, templ_7745c5c3_Err = templ.JoinStringErrs(a.Name) - if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `core/ui/app-grid.templ`, Line: 111, Col: 33} - } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var4)) - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 6, "
Coming Soon
") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - } else { - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 7, "
") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - templ_7745c5c3_Err = templ.Raw(a.Icon).Render(ctx, templ_7745c5c3_Buffer) - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 10, "
") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - var templ_7745c5c3_Var7 string - templ_7745c5c3_Var7, templ_7745c5c3_Err = templ.JoinStringErrs(a.Name) - if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `core/ui/app-grid.templ`, Line: 117, Col: 33} - } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var7)) - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 11, "
Available
") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 3, "
") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templ.Raw(a.Icon).Render(ctx, templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 6, "
") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + var templ_7745c5c3_Var5 string + templ_7745c5c3_Var5, templ_7745c5c3_Err = templ.JoinStringErrs(a.Name) + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `core/ui/app-grid.templ`, Line: 46, Col: 32} + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var5)) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 7, "
Available
") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err } return nil })