134 lines
2.6 KiB
Text
134 lines
2.6 KiB
Text
# Menu Configuration Contracts
|
|
#
|
|
# Type contracts for menu configuration with support for multilingual menus.
|
|
# Single source of truth - no more duplicated labels between language files.
|
|
|
|
{
|
|
# Multilingual labels for menu items
|
|
MenuLabels = {
|
|
en
|
|
| String
|
|
| doc "English label for menu item",
|
|
|
|
es
|
|
| String
|
|
| doc "Spanish label for menu item",
|
|
|
|
# Extensible for more languages
|
|
# fr | String | optional,
|
|
# de | String | optional,
|
|
},
|
|
|
|
# Routes for different languages
|
|
MenuRoutes = {
|
|
en
|
|
| String
|
|
| doc "English route path (e.g., '/about')",
|
|
|
|
es
|
|
| String
|
|
| doc "Spanish route path (e.g., '/acerca-de')",
|
|
|
|
# Alternate routes for language prefixed paths
|
|
"en-alt"
|
|
| String
|
|
| doc "Alternate English route (e.g., '/en/about')"
|
|
| optional,
|
|
|
|
"es-alt"
|
|
| String
|
|
| doc "Alternate Spanish route (e.g., '/es/acerca-de')"
|
|
| optional,
|
|
|
|
# Extensible for more languages
|
|
# fr | String | optional,
|
|
},
|
|
|
|
# Menu item configuration
|
|
MenuItem = {
|
|
id
|
|
| String
|
|
| doc "Unique identifier for menu item (e.g., 'home', 'about')",
|
|
|
|
routes
|
|
| MenuRoutes
|
|
| doc "URL paths for each language",
|
|
|
|
labels
|
|
| MenuLabels
|
|
| doc "Display labels for each language",
|
|
|
|
icon
|
|
| String
|
|
| doc "Icon class (e.g., 'fas fa-user', 'lucide:home')"
|
|
| optional,
|
|
|
|
is_external
|
|
| Bool
|
|
| doc "Whether this links to an external URL"
|
|
| default = false,
|
|
|
|
enabled
|
|
| Bool
|
|
| doc "Whether this menu item is active"
|
|
| default = true,
|
|
|
|
order
|
|
| Number
|
|
| doc "Display order (lower numbers first)"
|
|
| optional,
|
|
|
|
children
|
|
| Array MenuItem
|
|
| doc "Nested submenu items"
|
|
| optional,
|
|
|
|
..
|
|
},
|
|
|
|
# External link menu item (single URL, same for all languages)
|
|
ExternalMenuItem = {
|
|
id
|
|
| String
|
|
| doc "Unique identifier",
|
|
|
|
url
|
|
| String
|
|
| doc "External URL (same for all languages)",
|
|
|
|
label
|
|
| String
|
|
| doc "Display label (same for all languages)",
|
|
|
|
icon
|
|
| String
|
|
| optional,
|
|
|
|
enabled
|
|
| Bool
|
|
| default = true,
|
|
|
|
order
|
|
| Number
|
|
| optional,
|
|
|
|
is_external
|
|
| Bool
|
|
| doc "Must be true for external links"
|
|
| default = true,
|
|
|
|
visible_in
|
|
| Array String
|
|
| doc "Languages this item appears in. Empty/absent = all languages. Example: [\"es\"] shows only in Spanish."
|
|
| optional,
|
|
|
|
..
|
|
},
|
|
|
|
# Root menu configuration
|
|
MenuFile = {
|
|
items
|
|
| Array Dyn
|
|
| doc "Menu items (internal or external links)",
|
|
},
|
|
}
|