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
})