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-componentSístringNombre 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: