Layout
Colunas, abas, cartões, barra lateral e formulários — e por que a área é um objeto.
A área é um objeto#
Em Python isto seria um with. A DataForge não tem bloco de contexto, e inventar um só para o layout significaria acrescentar uma palavra reservada à linguagem inteira para resolver um problema de um módulo.
A saída é o idioma que a linguagem já tem: a área é um objeto, e os componentes são métodos dele.
colunas := V.colunas(3)
colunas[0].metrica("Vendas", "R$ 100K")
colunas[1].metrica("Clientes", "2.500")
colunas[2].metrica("Pedidos", "8.400")Lê-se melhor, aninha sem indentação extra, e a área pode ser guardada numa variável e passada adiante — o que um with não permite:
action cartao_de_metrica(area, rotulo, valor):
caixa := area.cartao(rotulo)
caixa.metrica(rotulo, valor)
caixa.texto("atualizado agora")
colunas := V.colunas(2)
cartao_de_metrica(colunas[0], "Receita", "R$ 850K")
cartao_de_metrica(colunas[1], "Custo", "R$ 310K")Toda área oferece os mesmos componentes que V, mais os layouts aninhados. Aprender um ensina todos.
Colunas#
V.colunas(3) // três iguais
V.colunas([2, 1]) // a primeira com o dobro da largura
V.colunas(2, espacamento := "grande")Abaixo de 860 px cada coluna ocupa a largura inteira — o layout é responsivo sem que você faça nada.
Barra lateral#
V.lateral() devolve sempre a mesma área, chamada de onde for. É o lugar dos filtros:
lado := V.lateral()
lado.cabecalho("Filtros", 4)
regiao := lado.escolha("Região", ["Sul", "Norte"])
de := lado.data("De")
ate := lado.data("Até")
lado.divisor()
given lado.botao("Limpar", tipo := "secundario"):
V.estado.limpar()Se nada for posto nela, a barra não aparece.
Abas#
abas := V.abas(["Resumo", "Detalhe", "Sobre"])
abas[0].metrica("Total", 128400)
abas[1].frame(linhas)
abas[2].markdown("Feito com **Arcane.Vitrine**.")Cartões, seções e containers#
cartao := V.cartao("Vendas", subtitulo := "primeiro semestre")
cartao.metrica("Receita", "R$ 850K")
secao := V.expandir("Detalhes técnicos", aberto := no)
secao.codigo(consulta_sql, linguagem := "sql")
caixa := V.container(borda := yes, altura := 320)
cycle item in muitos:
caixa.texto(item)
barra := V.linha(alinhar := "entre")
barra.texto("Resultados")
barra.botao("Exportar", tipo := "secundario")V.expandir guarda o estado de aberto ou fechado entre execuções. V.linha põe os filhos lado a lado, e V.espacador() empurra o que vem depois para a outra ponta.
Espaço reservado#
V.vazio() reserva um lugar para ser preenchido depois — serve para escrever "Calculando…" e substituir pelo resultado sem que a página salte:
lugar := V.vazio()
lugar.carregando("Consultando…")
dados := consulta_demorada()
lugar.frame(dados)