Skip to content

Schema Language

Sintaxe e propriedades que o schepta entende — o "vocabulário" para definir interfaces dinâmicas.

Schema Language

Schema Language define como escrever JSON que o schepta pode interpretar:

Propriedades Essenciais:

PropriedadeFunçãoValorResultado
x-componentDefine qual componente usar"InputText"Componente React/Vue específico
x-component-propsProps do componente{ placeholder: "Email" }Props passadas diretamente
x-uiLayout e visual{ order: 1 }Ordenação e posicionamento
x-rulesValidação e regras{ required: true }Validação automática
nameIdentificador único"email"Campo identificado

Sintaxe Básica:

Campo de formulário:

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

Item de menu:

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

Resultado: JSON estruturado → Componente React/Vue funcionando. Sintaxe simples e poderosa!

Propriedades Principais

Propriedades fundamentais que todo schema deve conhecer:

Definição de Componente:

PropriedadeObrigatórioTipoDescriçãoExemplo
x-componentSimstringNome do componente"InputText", "MenuLink"
x-component-propsNãoobjectProps do componente{ variant: "outlined" }
typeContextostringTipo do schema"string", "object"
nameNão (formulários)stringIdentificador do campo"email", "password"

Visual e Layout:

PropriedadeObrigatórioTipoDescriçãoExemplo
x-uiNãoobjectConfiguração de UI{ order: 1, grid: { xs: 12 } }
titleNãostringRótulo de exibição"Email"
descriptionNãostringTexto de ajuda"Digite seu email"
placeholderNãostringPlaceholder do input"user@company.com"

Comportamento e Lógica:

PropriedadeObrigatórioTipoDescriçãoExemplo
x-contentNãostringConteúdo estático (ex.: rótulo de botão)"Enviar Formulário"

Valores dinâmicos: Use expressões de template em x-component-props (ou outras props) com {{ $formValues.fieldName }} e {{ $externalContext.property }}. O middleware de template substitui isso em tempo de execução. Veja Expression Language abaixo.

Tipos de Schema

Diferentes tipos de schema para diferentes casos de uso:

Schemas de Formulário:

Estrutura do 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 do container do formulário:

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

Responsivo e Layout

PropriedadeConfiguraçãoPropósitoExemplo
x-ui.gridSistema de gridLayout responsivo{ xs: 12, md: 6, lg: 4 }
x-ui.ordernumberOrdem de exibição1, 2, 3
x-ui.spannumberColunas ocupadas2 (ocupa 2 colunas)
x-ui.offsetnumberOffset de coluna1 (desloca 1 coluna)

Expression Language

Sintaxe para expressões dinâmicas nos schemas. As expressões são processadas pelo middleware de template e suportam $formValues e $externalContext.

Tipos de Expressão:

Tipo de ExpressãoSintaxeContextoExemplo
Valores do formulário{{ $formValues.fieldName }}Estado atual do formulário"{{ $formValues.email }}"
Contexto externo{{ $externalContext.property }}externalContext do Provider"{{ $externalContext.user.name }}"

Operadores Disponíveis:

OperadorUsoExemploResultado
===, !==Igualdade"{{ $externalContext.role === 'admin' }}"boolean
&&, ||Lógico"{{ $formValues.type === 'user' && $externalContext.plan === 'premium' }}"boolean
>, <, >=, <=Comparação"{{ $formValues.age >= 18 }}"boolean

Expressões podem ser usadas dentro de strings em props (ex.: em x-component-props) e são avaliadas com os valores atuais do formulário e do contexto externo.

Conceitos Relacionados

Schema Language é a "sintaxe" que conecta todos os conceitos: