diff --git a/packages/dashboard/seed/scripts/layout/flex.lua b/packages/dashboard/seed/scripts/layout/flex.lua new file mode 100644 index 000000000..a82499e20 --- /dev/null +++ b/packages/dashboard/seed/scripts/layout/flex.lua @@ -0,0 +1,11 @@ +-- Dashboard flex layout +local function flex(direction, gap, align) + return { + type = "flex", + direction = direction or "row", + gap = gap or 16, + align = align or "stretch" + } +end + +return flex diff --git a/packages/dashboard/seed/scripts/layout/grid.lua b/packages/dashboard/seed/scripts/layout/grid.lua new file mode 100644 index 000000000..020a2efc3 --- /dev/null +++ b/packages/dashboard/seed/scripts/layout/grid.lua @@ -0,0 +1,11 @@ +-- Dashboard grid layout +local function grid(columns, rows, gap) + return { + type = "grid", + columns = columns or 3, + rows = rows, + gap = gap or 16 + } +end + +return grid diff --git a/packages/dashboard/seed/scripts/layout/init.lua b/packages/dashboard/seed/scripts/layout/init.lua new file mode 100644 index 000000000..337c2c3cb --- /dev/null +++ b/packages/dashboard/seed/scripts/layout/init.lua @@ -0,0 +1,8 @@ +-- Dashboard layout module +local layout = { + grid = require("layout.grid"), + flex = require("layout.flex"), + section = require("layout.section") +} + +return layout diff --git a/packages/dashboard/seed/scripts/layout/section.lua b/packages/dashboard/seed/scripts/layout/section.lua new file mode 100644 index 000000000..33d5f9f8d --- /dev/null +++ b/packages/dashboard/seed/scripts/layout/section.lua @@ -0,0 +1,10 @@ +-- Dashboard section layout +local function section(title, children) + return { + type = "section", + title = title, + children = children or {} + } +end + +return section diff --git a/packages/dashboard/seed/scripts/stats/card.lua b/packages/dashboard/seed/scripts/stats/card.lua new file mode 100644 index 000000000..6bae658bc --- /dev/null +++ b/packages/dashboard/seed/scripts/stats/card.lua @@ -0,0 +1,12 @@ +-- Dashboard stat card component +local function stat_card(title, value, icon, trend) + return { + type = "stat_card", + title = title, + value = value, + icon = icon, + trend = trend + } +end + +return stat_card diff --git a/packages/dashboard/seed/scripts/stats/init.lua b/packages/dashboard/seed/scripts/stats/init.lua new file mode 100644 index 000000000..6960028e8 --- /dev/null +++ b/packages/dashboard/seed/scripts/stats/init.lua @@ -0,0 +1,8 @@ +-- Dashboard stats module +local stats = { + card = require("stats.card"), + row = require("stats.row"), + trend = require("stats.trend") +} + +return stats diff --git a/packages/dashboard/seed/scripts/stats/row.lua b/packages/dashboard/seed/scripts/stats/row.lua new file mode 100644 index 000000000..8f06daa79 --- /dev/null +++ b/packages/dashboard/seed/scripts/stats/row.lua @@ -0,0 +1,11 @@ +-- Dashboard stat row layout +local function stat_row(stats) + return { + type = "row", + layout = "flex", + gap = 16, + children = stats + } +end + +return stat_row diff --git a/packages/dashboard/seed/scripts/stats/trend.lua b/packages/dashboard/seed/scripts/stats/trend.lua new file mode 100644 index 000000000..904df81ce --- /dev/null +++ b/packages/dashboard/seed/scripts/stats/trend.lua @@ -0,0 +1,11 @@ +-- Dashboard stat trend indicator +local function trend_indicator(direction, value) + return { + type = "trend", + direction = direction, -- "up" or "down" + value = value, + color = direction == "up" and "success" or "error" + } +end + +return trend_indicator diff --git a/packages/nav_menu/seed/scripts/items/divider.lua b/packages/nav_menu/seed/scripts/items/divider.lua new file mode 100644 index 000000000..e3fc71ba4 --- /dev/null +++ b/packages/nav_menu/seed/scripts/items/divider.lua @@ -0,0 +1,8 @@ +-- Nav menu divider component +local function menu_divider() + return { + type = "divider" + } +end + +return menu_divider diff --git a/packages/nav_menu/seed/scripts/items/group.lua b/packages/nav_menu/seed/scripts/items/group.lua new file mode 100644 index 000000000..c31bec9c3 --- /dev/null +++ b/packages/nav_menu/seed/scripts/items/group.lua @@ -0,0 +1,11 @@ +-- Nav menu group component +local function menu_group(label, children, icon) + return { + type = "menu_group", + label = label, + icon = icon, + children = children or {} + } +end + +return menu_group diff --git a/packages/nav_menu/seed/scripts/items/init.lua b/packages/nav_menu/seed/scripts/items/init.lua new file mode 100644 index 000000000..c3200eb50 --- /dev/null +++ b/packages/nav_menu/seed/scripts/items/init.lua @@ -0,0 +1,8 @@ +-- Nav menu items module +local items = { + item = require("items.item"), + group = require("items.group"), + divider = require("items.divider") +} + +return items diff --git a/packages/nav_menu/seed/scripts/items/item.lua b/packages/nav_menu/seed/scripts/items/item.lua new file mode 100644 index 000000000..961dc5a25 --- /dev/null +++ b/packages/nav_menu/seed/scripts/items/item.lua @@ -0,0 +1,11 @@ +-- Nav menu item component +local function menu_item(label, path, icon) + return { + type = "menu_item", + label = label, + path = path, + icon = icon + } +end + +return menu_item diff --git a/packages/ui_header/seed/scripts/render/actions.lua b/packages/ui_header/seed/scripts/render/actions.lua new file mode 100644 index 000000000..ff2c01039 --- /dev/null +++ b/packages/ui_header/seed/scripts/render/actions.lua @@ -0,0 +1,9 @@ +-- Header actions section +local function actions_section(actions) + return { + type = "actions", + children = actions or {} + } +end + +return actions_section diff --git a/packages/ui_header/seed/scripts/render/init.lua b/packages/ui_header/seed/scripts/render/init.lua new file mode 100644 index 000000000..125bfefab --- /dev/null +++ b/packages/ui_header/seed/scripts/render/init.lua @@ -0,0 +1,8 @@ +-- Header render module +local render = { + logo = require("render.logo"), + user = require("render.user"), + actions = require("render.actions") +} + +return render diff --git a/packages/ui_header/seed/scripts/render/logo.lua b/packages/ui_header/seed/scripts/render/logo.lua new file mode 100644 index 000000000..e854ed3a8 --- /dev/null +++ b/packages/ui_header/seed/scripts/render/logo.lua @@ -0,0 +1,11 @@ +-- Header logo section +local function logo_section(logo_url, title) + return { + type = "logo", + url = logo_url or "/logo.svg", + title = title or "MetaBuilder", + link = "/" + } +end + +return logo_section diff --git a/packages/ui_header/seed/scripts/render/user.lua b/packages/ui_header/seed/scripts/render/user.lua new file mode 100644 index 000000000..c382dea68 --- /dev/null +++ b/packages/ui_header/seed/scripts/render/user.lua @@ -0,0 +1,26 @@ +-- Header user section +local function user_section(user) + if not user then + return { + type = "auth_buttons", + children = { + { type = "button", label = "Login", action = "navigate", path = "/login" }, + { type = "button", label = "Sign Up", action = "navigate", path = "/register" } + } + } + end + + return { + type = "user_menu", + avatar = user.avatar, + name = user.name, + items = { + { label = "Profile", path = "/profile" }, + { label = "Settings", path = "/settings" }, + { type = "divider" }, + { label = "Logout", action = "logout" } + } + } +end + +return user_section