Skip to content

Contrato do componente ​

Tipo
Referência
Para
Desenvolvedor

Um componente paramétrico só tem campos para preencher se o contrato (manifest) os declarar. É um JSON com a lista de campos e a aparência fixa do componente; o código lê os valores em config, indexados pela chave de cada campo.

json
{
  "fields": [
    { "key": "titulo", "type": "text", "label": "Título", "default": "Meta do mês" },
    { "key": "cor", "type": "color", "label": "Cor principal", "group": "Aparência" },
    { "key": "valor", "type": "column-binding", "label": "Coluna de valor", "filter": "Measure" },
    { "key": "meta", "type": "number", "label": "Meta", "min": 0, "step": 100, "expression": true },
    { "key": "modo", "type": "select", "label": "Modo", "options": [
      { "value": "compacto", "label": "Compacto" },
      { "value": "detalhado", "label": "Detalhado" }
    ] }
  ],
  "display": { "transparentBackground": false, "autoGrow": false }
}

Propriedades de todo campo ​

PropriedadeObrigatóriaO que é
keySimA chave em config. Única no contrato
typeSimUm dos tipos abaixo
labelSimO nome que quem configura vê
defaultNãoO valor quando ninguém preenche
helpNãoTexto de ajuda abaixo do campo
groupNãoJunta campos do mesmo grupo na tela

Contrato sem fields, com campo sem key, chave repetida, sem label ou com tipo desconhecido é recusado ("Manifest inválido").

Tipos de campo ​

typeO valor em configPropriedades própriasPadrão sem default
column-bindingTexto de coluna, como '[Vendas]."VALOR":SUM'. Lista, com multiplemultiple, filter (Measure, Dimension, Date ou All)"" ou []
textTexto""
textareaTexto longo""
numberNúmeromin, max, stepmin ou 0
rangeNúmero, num controle deslizantemin, max, stepmin ou 0
colorCor em hex, como #4F46E5#000000
booleantrue ou falsefalse
selectO value da opção escolhidaoptions ([{ value, label }]), forceKind (segmented ou list)A primeira opção
dateData""
iconNome Iconify, como fa:star""
number-formatUm formato de número do Lumo, para app.formatValue"default"
svelte_modalO objeto que a tela do autor devolveeditorComponent (o arquivo da tela), buttonLabel{}

O componente nunca recebe undefined num campo do contrato: vale o que foi preenchido, senão o default, senão o padrão da tabela.

Sem forceKind, um select escolhe a aparência pelo número de opções.

Fórmula por campo ​

Os tipos color, number, text, textarea, range e number-format aceitam "expression": true. Quem configura ganha Usar fórmula ("Avalia uma expressão JS; em erro, usa o valor fixo.") e escreve uma expressão em JavaScript no lugar do valor fixo.

A fórmula não é avaliada sozinha. O config recebe duas chaves a mais por campo, <key>Expression (o texto da fórmula) e <key>UsesExpression, e o componente avalia:

javascript
const meta = config.metaUsesExpression
  ? (await app.evalExpression(config.metaExpression, { config })) ?? config.meta
  : config.meta;

A fórmula é o corpo de uma função assíncrona, como as regras JS: usa return, e o objeto passado como segundo argumento chega em this. app.evalExpression devolve undefined em erro, e o ?? cai no valor fixo. Veja Objeto app.

Aparência ​

display vale para todas as instâncias, e quem configura não muda:

PropriedadeEfeito
transparentBackgroundTira o fundo e a borda do cartão
autoGrowO Widget cresce na altura conforme o conteúdo

Relacionado ​