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 del componente{ placeholder: "Email" }Props pasadas directamente
x-uiLayout y visual{ order: 1 }Orden 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": "Introduce tu email"
  },
  "x-rules": {
    "required": true,
    "pattern": "email"
  }
}

Ítem de menú:

json
{
  "type": "object",
  "x-component": "MenuLink",
  "x-component-props": {
    "label": "Dashboard",
    "href": "/dashboard",
    "icon": "dashboard"
  }
}

Resultado: JSON estructurado → Componente React/Vue funcionando. ¡Sintaxis simple y potente!

Propiedades Principales

Propiedades fundamentales que todo schema debe conocer:

Definición de Componente:

PropiedadRequeridoTipoDescripciónEjemplo
x-componentstringNombre del componente"InputText", "MenuLink"
x-component-propsNoobjectProps del componente{ variant: "outlined" }
typeContextostringTipo del schema"string", "object"
nameNo (formularios)stringIdentificador del campo"email", "password"

Visual y Layout:

PropiedadRequeridoTipoDescripciónEjemplo
x-uiNoobjectConfiguración de UI{ order: 1, grid: { xs: 12 } }
titleNostringEtiqueta de visualización"Email"
descriptionNostringTexto de ayuda"Introduce tu email"
placeholderNostringPlaceholder del input"user@company.com"

Comportamiento y Lógica:

PropiedadRequeridoTipoDescripciónEjemplo
x-contentNostringContenido estático (ej. etiqueta de botón)"Enviar Formulario"

Valores dinámicos: Usa expresiones de template en x-component-props (u otras props) con {{ $formValues.fieldName }} y {{ $externalContext.property }}. El middleware de template los reemplaza en tiempo de ejecución. Ver Expression Language abajo.

Tipos de Schema

Diferentes tipos de schema para diferentes casos de uso:

Schemas de Formulario:

Estructura del 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 del contenedor del formulario:

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

Responsivo 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.spannumberColumnas que ocupa2 (ocupa 2 columnas)
x-ui.offsetnumberOffset de columna1 (desplaza 1 columna)

Expression Language

Sintaxis para expresiones dinámicas en los schemas. Las expresiones son procesadas por el middleware de template y soportan $formValues y $externalContext.

Tipos de Expresión:

Tipo de ExpresiónSintaxisContextoEjemplo
Valores del formulario{{ $formValues.fieldName }}Estado actual del formulario"{{ $formValues.email }}"
Contexto externo{{ $externalContext.property }}externalContext del Provider"{{ $externalContext.user.name }}"

Operadores Disponibles:

OperadorUsoEjemploResultado
===, !==Igualdad"{{ $externalContext.role === 'admin' }}"boolean
&&, ||Lógico"{{ $formValues.type === 'user' && $externalContext.plan === 'premium' }}"boolean
>, <, >=, <=Comparación"{{ $formValues.age >= 18 }}"boolean

Las expresiones pueden usarse dentro de strings en props (ej. en x-component-props) y se evalúan con los valores actuales del formulario y del contexto externo.

Conceptos Relacionados

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