Skip to content

Schema Language

Sintaxis y propiedades que schepta entiende — el "vocabulario" para definir interfaces dinámicas.

Schema Language

Schema Language define cómo escribir JSON que schepta puede interpretar:

🔧 Propiedades Esenciales:

PropiedadFunciónValorResultado
x-componentDefine qué componente usar"InputText"Componente React/Vue específico
x-component-propsProps para el componente{ placeholder: "Email" }Props pasadas directamente
x-uiLayout y visual{ order: 1 }Ordenamiento y posicionamiento
x-rulesValidación y reglas{ required: true }Validación automática
nameIdentificador único"email"Campo identificado

📊 Sintaxis Básica:

Campo de Formulario:

json
{
  "name": "email",
  "x-component": "InputText",
  "x-component-props": {
    "placeholder": "Ingresa tu email"
  },
  "x-rules": {
    "required": true,
    "pattern": "email"
  }
}

Elemento de Menú:

json
{
  "type": "object",
  "x-component": "MenuLink",
  "x-component-props": {
    "label": "Dashboard",
    "href": "/dashboard",
    "icon": "dashboard"
  },
  "active": "\{\{ $segment.role === 'admin' \}\}"
}

💡 Resultado: JSON estructurado → Componente React/Vue funcional. ¡Sintaxis simple y poderosa!

🚀 Propiedades Principales

Propiedades fundamentales que todo schema debe conocer:

🎯 Definición de Componente:

PropiedadRequeridaTipoDescripciónEjemplo
x-component✅ SístringNombre del componente"InputText", "MenuLink"
x-component-props❌ NoobjectProps del componente{ variant: "outlined" }
type❌ ContextostringTipo de schema"string", "object"
name❌ FormulariosstringIdentificador de campo"email", "password"

🎨 Visual y Layout:

PropiedadRequeridaTipoDescripciónEjemplo
x-ui❌ NoobjectConfiguración de UI{ order: 1, grid: { xs: 12 } }
title❌ NostringEtiqueta de visualización"Dirección de Email"
description❌ NostringTexto de ayuda"Ingresa tu email de trabajo"
placeholder❌ NostringPlaceholder de entrada"usuario@empresa.com"

⚡ Comportamiento y Lógica:

PropiedadRequeridaTipoDescripciónEjemplo
x-rules❌ NoobjectReglas de validación{ required: true, minLength: 8 }
x-reactions❌ NoobjectComportamiento dinámico{ visible: "\{\{ $form.type === 'admin' \}\}" }
active❌ Menúsboolean/stringEstado activotrue o "\{\{ $segment.role === 'admin' \}\}"
visible❌ Noboolean/stringControl de visibilidad"\{\{ $form.plan !== 'basic' \}\}"

📊 Tipos de Schema

Diferentes tipos de schema para diferentes casos de uso:

📝 Schemas de Formulario:

Estructura de Schema de Campo:

json
{
  "name": "fieldName",
  "x-component": "ComponentName",
  "x-component-props": {
    "prop1": "value1",
    "prop2": "value2"
  },
  "x-rules": {
    "required": true,
    "pattern": "regex",
    "minLength": 5
  },
  "x-ui": {
    "order": 1,
    "grid": { "xs": 12, "md": 6 }
  }
}

Schema de Contenedor de Formulario:

json
{
  "type": "object",
  "x-component": "FormContainer",
  "properties": {
    "fieldKey1": { /* field schema */ },
    "fieldKey2": { /* field schema */ }
  }
}

⚙️ Propiedades Avanzadas

Propiedades avanzadas para casos específicos:

🔧 Extensiones de Componente:

PropiedadPropósitoUsoEjemplo
x-decoratorComponente wrapperDecoración de campo"FormItem"
x-decorator-propsProps del decoradorConfiguración del decorador{ label: "Etiqueta del Campo" }
x-contentContenido estáticoContenido de texto/HTML"Enviar Formulario"
x-dataDatos estáticosDatos prellenados{ options: ["A", "B"] }

🎯 Lógica Condicional:

PropiedadTipoPropósitoEjemplo
x-visibleboolean/stringMostrar/ocultar componente"\{\{ $form.type === 'premium' \}\}"
x-disabledboolean/stringHabilitar/deshabilitar"\{\{ $form.readonly \}\}"
x-patternobjectPatrones de visualización{ loading: "\{\{ $form.isLoading \}\}" }
x-validatorstring/functionValidación personalizada"validateCPF"

📱 Responsive y Layout:

PropiedadConfiguraciónPropósitoEjemplo
x-ui.gridSistema de gridLayout responsivo{ xs: 12, md: 6, lg: 4 }
x-ui.ordernumberOrden de visualización1, 2, 3
x-ui.spannumberSpan de columna2 (abarca 2 columnas)
x-ui.offsetnumberOffset de columna1 (offset de 1 columna)

🔍 Expression Language

Sintaxis para expresiones dinámicas dentro de schemas:

📊 Tipos de Expresión:

Tipo de ExpresiónSintaxisContextoEjemplo
Estado del Formulario\{\{ $form.fieldName \}\}Valores del formulario"\{\{ $form.email \}\}"
Contexto de Segmento\{\{ $segment.property \}\}Contexto de usuario"\{\{ $segment.role \}\}"
Objetivo de Asociación\{\{ $target.property \}\}Configuraciones vinculadas"\{\{ $target.locale.title \}\}"
Contexto Externo\{\{ $context.property \}\}Datos externos"\{\{ $context.user.name \}\}"

⚡ Operadores Disponibles:

OperadorUsoEjemploResultado
===, !==Igualdad"\{\{ $segment.role === 'admin' \}\}"boolean
&&, ||Lógico"\{\{ $form.type === 'user' && $segment.plan === 'premium' \}\}"boolean
>, <, >=, <=Comparación"\{\{ $form.age >= 18 \}\}"boolean
contains()Contiene array/string"\{\{ contains($segment.roles, 'admin') \}\}"boolean
startsWith()String comienza con"\{\{ startsWith($form.email, 'admin') \}\}"boolean

💡 Conceptos Relacionados

Schema Language es la "sintaxis" que conecta todos los conceptos: