Rustelo/resources/nickel/menus/contracts.ncl
Jesús Pérez f1010e9d07
chore: update
2026-07-18 20:16:16 +01:00

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