Skip to content

Linguagem dos Schemas

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 consegue interpretar:

🔧 Propriedades Essenciais:

PropertyFunçãoValorResultado
x-componentDefine qual component usar"InputText"Component React/Vue específico
x-component-propsProps para o component{ placeholder: "Email" }Props passadas direto
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:

Form Field:

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

Menu Item:

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

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


🚀 Core Properties

Propriedades fundamentais que todo schema deve conhecer:

🎯 Component Definition:

PropertyRequiredTypeDescriptionExample
x-component✅ YesstringComponent name"InputText", "MenuLink"
x-component-props❌ NoobjectComponent props{ variant: "outlined" }
type❌ ContextstringSchema type"string", "object"
name❌ FormsstringField identifier"email", "password"

🎨 Visual & Layout:

PropertyRequiredTypeDescriptionExample
x-ui❌ NoobjectUI configuration{ order: 1, grid: { xs: 12 } }
title❌ NostringDisplay label"Email Address"
description❌ NostringHelp text"Enter your work email"
placeholder❌ NostringInput placeholder"user@company.com"

⚡ Behavior & Logic:

PropertyRequiredTypeDescriptionExample
x-rules❌ NoobjectValidation rules{ required: true, minLength: 8 }
x-reactions❌ NoobjectDynamic behavior{ visible: "\{\{ $form.type === 'admin' \}\}" }
active❌ Menusboolean/stringActive statetrue or "\{\{ $segment.role === 'admin' \}\}"
visible❌ Noboolean/stringVisibility control"\{\{ $form.plan !== 'basic' \}\}"

📊 Schema Types

Diferentes tipos de schema para diferentes casos de uso:

📝 Form Schemas:

Field Schema Structure:

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 }
  }
}

Form Container Schema:

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

⚙️ Advanced Properties

Propriedades avançadas para casos específicos:

🔧 Component Extensions:

PropertyPurposeUsageExample
x-decoratorWrapper componentField decoration"FormItem"
x-decorator-propsDecorator propsDecorator configuration{ label: "Field Label" }
x-contentStatic contentText/HTML content"Submit Form"
x-dataStatic dataPre-filled data{ options: ["A", "B"] }

🎯 Conditional Logic:

PropertyTypePurposeExample
x-visibleboolean/stringShow/hide component"\{\{ $form.type === 'premium' \}\}"
x-disabledboolean/stringEnable/disable"\{\{ $form.readonly \}\}"
x-patternobjectDisplay patterns{ loading: "\{\{ $form.isLoading \}\}" }
x-validatorstring/functionCustom validation"validateCPF"

📱 Responsive & Layout:

PropertyConfigurationPurposeExample
x-ui.gridGrid systemResponsive layout{ xs: 12, md: 6, lg: 4 }
x-ui.ordernumberDisplay order1, 2, 3
x-ui.spannumberColumn span2 (spans 2 columns)
x-ui.offsetnumberColumn offset1 (offset by 1 column)

🔍 Expression Language

Sintaxe para expressões dinâmicas dentro dos schemas:

📊 Expression Types:

Expression TypeSyntaxContextExample
Form State\{\{ $form.fieldName \}\}Form values"\{\{ $form.email \}\}"
Segment Context\{\{ $segment.property \}\}User context"\{\{ $segment.role \}\}"
Association Target\{\{ $target.property \}\}Linked configs"\{\{ $target.locale.title \}\}"
External Context\{\{ $context.property \}\}External data"\{\{ $context.user.name \}\}"

⚡ Operators Available:

OperatorUsageExampleResult
===, !==Equality"\{\{ $segment.role === 'admin' \}\}"boolean
&&, ||Logical"\{\{ $form.type === 'user' && $segment.plan === 'premium' \}\}"boolean
>, <, >=, <=Comparison"\{\{ $form.age >= 18 \}\}"boolean
contains()Array/string contains"\{\{ contains($segment.roles, 'admin') \}\}"boolean
startsWith()String starts"\{\{ startsWith($form.email, 'admin') \}\}"boolean

💡 Conceitos Relacionados

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