MenuConfig schema
Este es el JSON Schema público que cualquier herramienta de IA externa puede usar para producir configs compatibles con SuperMenu. También está disponible en GET /api/schema.
{
"$ref": "#/definitions/MenuConfig",
"definitions": {
"MenuConfig": {
"type": "object",
"properties": {
"version": {
"type": "string",
"const": "1.0.0"
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 80
},
"layout": {
"type": "string",
"enum": [
"horizontal",
"vertical",
"drawer",
"mega"
]
},
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 64
},
"label": {
"type": "string",
"minLength": 1,
"maxLength": 80
},
"url": {
"type": "string",
"minLength": 1,
"maxLength": 2000
},
"description": {
"type": "string",
"maxLength": 160
},
"icon": {
"type": "string",
"maxLength": 64
},
"imageUrl": {
"type": "string",
"format": "uri"
},
"badge": {
"type": "object",
"properties": {
"label": {
"type": "string",
"maxLength": 20
},
"color": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$"
},
"background": {
"$ref": "#/definitions/MenuConfig/properties/items/items/properties/badge/properties/color"
}
},
"required": [
"label"
],
"additionalProperties": false
},
"columns": {
"type": "integer",
"minimum": 1,
"maximum": 6
},
"promoBlock": {
"type": "object",
"properties": {
"title": {
"type": "string",
"minLength": 1,
"maxLength": 80
},
"description": {
"type": "string",
"maxLength": 200
},
"imageUrl": {
"$ref": "#/definitions/MenuConfig/properties/items/items/properties/imageUrl"
},
"ctaLabel": {
"type": "string",
"maxLength": 40
},
"ctaUrl": {
"$ref": "#/definitions/MenuConfig/properties/items/items/properties/imageUrl"
},
"backgroundColor": {
"$ref": "#/definitions/MenuConfig/properties/items/items/properties/badge/properties/color"
},
"textColor": {
"$ref": "#/definitions/MenuConfig/properties/items/items/properties/badge/properties/color"
},
"span": {
"type": "integer",
"minimum": 1,
"maximum": 4,
"default": 1
}
},
"required": [
"title"
],
"additionalProperties": false
},
"openInNewTab": {
"type": "boolean",
"default": false
},
"style": {
"type": "object",
"properties": {
"color": {
"$ref": "#/definitions/MenuConfig/properties/items/items/properties/badge/properties/color"
},
"background": {
"$ref": "#/definitions/MenuConfig/properties/items/items/properties/badge/properties/color"
},
"hoverColor": {
"$ref": "#/definitions/MenuConfig/properties/items/items/properties/badge/properties/color"
},
"hoverBackground": {
"$ref": "#/definitions/MenuConfig/properties/items/items/properties/badge/properties/color"
},
"fontWeight": {
"type": "number",
"enum": [
400,
500,
600,
700,
800
]
},
"underline": {
"type": "boolean"
},
"radius": {
"type": "string",
"pattern": "^-?\\d+(\\.\\d+)?(px|rem|em|%|vh|vw)$"
}
},
"additionalProperties": false
},
"featured": {
"type": "boolean",
"default": false
},
"children": {
"type": "array",
"items": {
"$ref": "#/definitions/MenuConfig/properties/items/items"
},
"maxItems": 50
}
},
"required": [
"id",
"label",
"url"
],
"additionalProperties": false
},
"minItems": 1,
"maxItems": 50
},
"style": {
"type": "object",
"properties": {
"colors": {
"type": "object",
"properties": {
"background": {
"$ref": "#/definitions/MenuConfig/properties/items/items/properties/badge/properties/color"
},
"foreground": {
"$ref": "#/definitions/MenuConfig/properties/items/items/properties/badge/properties/color"
},
"accent": {
"$ref": "#/definitions/MenuConfig/properties/items/items/properties/badge/properties/color"
},
"accentForeground": {
"$ref": "#/definitions/MenuConfig/properties/items/items/properties/badge/properties/color"
},
"border": {
"$ref": "#/definitions/MenuConfig/properties/items/items/properties/badge/properties/color"
},
"muted": {
"$ref": "#/definitions/MenuConfig/properties/items/items/properties/badge/properties/color"
},
"hoverBackground": {
"$ref": "#/definitions/MenuConfig/properties/items/items/properties/badge/properties/color"
},
"hoverForeground": {
"$ref": "#/definitions/MenuConfig/properties/items/items/properties/badge/properties/color"
}
},
"required": [
"background",
"foreground",
"accent",
"accentForeground"
],
"additionalProperties": false
},
"background": {
"type": "object",
"properties": {
"gradient": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"linear",
"radial"
],
"default": "linear"
},
"angle": {
"type": "integer",
"minimum": 0,
"maximum": 360,
"default": 180
},
"stops": {
"type": "array",
"items": {
"type": "object",
"properties": {
"color": {
"$ref": "#/definitions/MenuConfig/properties/items/items/properties/badge/properties/color"
},
"offset": {
"type": "number",
"minimum": 0,
"maximum": 100
}
},
"required": [
"color",
"offset"
],
"additionalProperties": false
},
"minItems": 2,
"maxItems": 6
}
},
"required": [
"stops"
],
"additionalProperties": false
},
"imageUrl": {
"$ref": "#/definitions/MenuConfig/properties/items/items/properties/imageUrl"
},
"imageSize": {
"type": "string",
"enum": [
"cover",
"contain",
"auto"
],
"default": "cover"
},
"imagePosition": {
"type": "string",
"enum": [
"center",
"top",
"bottom",
"left",
"right"
],
"default": "center"
},
"overlay": {
"$ref": "#/definitions/MenuConfig/properties/items/items/properties/badge/properties/color"
}
},
"additionalProperties": false
},
"typography": {
"type": "object",
"properties": {
"fontFamily": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"fontSize": {
"$ref": "#/definitions/MenuConfig/properties/items/items/properties/style/properties/radius"
},
"fontWeight": {
"type": "number",
"enum": [
300,
400,
500,
600,
700,
800
]
},
"letterSpacing": {
"$ref": "#/definitions/MenuConfig/properties/items/items/properties/style/properties/radius"
},
"textTransform": {
"type": "string",
"enum": [
"none",
"uppercase",
"lowercase",
"capitalize"
],
"default": "none"
},
"lineHeight": {
"type": "number",
"minimum": 0.8,
"maximum": 2.5,
"default": 1.4
},
"fontLoaderUrl": {
"$ref": "#/definitions/MenuConfig/properties/items/items/properties/imageUrl"
}
},
"required": [
"fontFamily",
"fontSize",
"fontWeight"
],
"additionalProperties": false
},
"spacing": {
"type": "object",
"properties": {
"itemPaddingX": {
"$ref": "#/definitions/MenuConfig/properties/items/items/properties/style/properties/radius"
},
"itemPaddingY": {
"$ref": "#/definitions/MenuConfig/properties/items/items/properties/style/properties/radius"
},
"itemGap": {
"$ref": "#/definitions/MenuConfig/properties/items/items/properties/style/properties/radius"
},
"containerPaddingX": {
"$ref": "#/definitions/MenuConfig/properties/items/items/properties/style/properties/radius"
},
"containerPaddingY": {
"$ref": "#/definitions/MenuConfig/properties/items/items/properties/style/properties/radius"
}
},
"required": [
"itemPaddingX",
"itemPaddingY",
"itemGap"
],
"additionalProperties": false
},
"radius": {
"type": "object",
"properties": {
"item": {
"$ref": "#/definitions/MenuConfig/properties/items/items/properties/style/properties/radius",
"default": "6px"
},
"dropdown": {
"$ref": "#/definitions/MenuConfig/properties/items/items/properties/style/properties/radius",
"default": "8px"
}
},
"additionalProperties": false,
"default": {
"item": "6px",
"dropdown": "8px"
}
},
"shadows": {
"type": "object",
"properties": {
"dropdown": {
"type": "string",
"maxLength": 200,
"default": "0 8px 24px rgba(0,0,0,0.12)"
},
"sticky": {
"type": "string",
"maxLength": 200
}
},
"additionalProperties": false,
"default": {
"dropdown": "0 8px 24px rgba(0,0,0,0.12)"
}
},
"animations": {
"type": "object",
"properties": {
"durationMs": {
"type": "integer",
"minimum": 0,
"maximum": 2000,
"default": 180
},
"easing": {
"type": "string",
"enum": [
"linear",
"ease",
"ease-in",
"ease-out",
"ease-in-out"
],
"default": "ease-out"
},
"effect": {
"type": "string",
"enum": [
"fade",
"slide",
"scale",
"none"
],
"default": "fade"
},
"hoverEffect": {
"type": "string",
"enum": [
"none",
"underline",
"underline-grow",
"glow",
"lift"
],
"default": "none"
}
},
"additionalProperties": false,
"default": {
"durationMs": 180,
"easing": "ease-out",
"effect": "fade",
"hoverEffect": "none"
}
},
"customCss": {
"type": "string",
"maxLength": 20000
}
},
"required": [
"colors",
"typography",
"spacing"
],
"additionalProperties": false
},
"responsive": {
"type": "object",
"properties": {
"hideOnMobile": {
"type": "boolean",
"default": false
},
"mobileLayout": {
"type": "string",
"enum": [
"drawer",
"horizontal",
"hidden"
],
"default": "drawer"
},
"breakpointMobilePx": {
"type": "integer",
"minimum": 320,
"maximum": 1024,
"default": 768
},
"tabletLayout": {
"type": "string",
"enum": [
"horizontal",
"mega",
"drawer"
]
},
"breakpointTabletPx": {
"type": "integer",
"minimum": 600,
"maximum": 1280,
"default": 1024
}
},
"additionalProperties": false,
"default": {
"hideOnMobile": false,
"mobileLayout": "drawer",
"breakpointMobilePx": 768,
"breakpointTabletPx": 1024
}
},
"behavior": {
"type": "object",
"properties": {
"hoverDelayMs": {
"type": "integer",
"minimum": 0,
"maximum": 2000,
"default": 120
},
"clickToOpen": {
"type": "boolean",
"default": false
},
"stickyOnScroll": {
"type": "boolean",
"default": false
},
"closeOnRouteChange": {
"type": "boolean",
"default": true
},
"showWatermark": {
"type": "boolean",
"default": false
},
"position": {
"type": "string",
"enum": [
"static",
"sticky",
"overlay"
],
"default": "static"
},
"hideOnScrollDown": {
"type": "boolean",
"default": false
}
},
"additionalProperties": false,
"default": {
"hoverDelayMs": 120,
"clickToOpen": false,
"stickyOnScroll": false,
"closeOnRouteChange": true,
"showWatermark": false,
"position": "static",
"hideOnScrollDown": false
}
},
"header": {
"type": "object",
"properties": {
"logoUrl": {
"$ref": "#/definitions/MenuConfig/properties/items/items/properties/imageUrl"
},
"logoHeight": {
"$ref": "#/definitions/MenuConfig/properties/items/items/properties/style/properties/radius",
"default": "32px"
},
"logoAlign": {
"type": "string",
"enum": [
"left",
"center",
"right"
],
"default": "left"
},
"showSearch": {
"type": "boolean",
"default": false
},
"searchPlaceholder": {
"type": "string",
"maxLength": 60,
"default": "Buscar productos…"
},
"searchUrl": {
"type": "string",
"maxLength": 2000,
"default": "/search"
},
"cartUrl": {
"type": "string",
"maxLength": 2000
},
"cartIcon": {
"type": "string",
"enum": [
"bag",
"cart",
"basket"
],
"default": "cart"
},
"accountUrl": {
"type": "string",
"maxLength": 2000
},
"whatsappUrl": {
"$ref": "#/definitions/MenuConfig/properties/items/items/properties/imageUrl"
}
},
"additionalProperties": false
},
"targetSelector": {
"type": "string",
"maxLength": 200,
"description": "CSS selector of the native menu to hide on the storefront"
},
"metadata": {
"type": "object",
"additionalProperties": {
"type": "string",
"maxLength": 500
}
}
},
"required": [
"version",
"name",
"layout",
"items",
"style"
],
"additionalProperties": false
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}