Skip to content

WebInk — componenti ​

Ogni widget accetta un record di props #{} come primo argomento e, dopo, i figli (altri nodi) e/o testo. Tutti accettano className per aggiungere classi Tailwind.

Layout ​

WidgetDescrizione
Pageguscio della pagina (sfondo, colore del testo)
Sectionsezione con spaziatura verticale
Containerlarghezza massima centrata con padding
Grid(#{ cols })griglia responsiva di cols colonne
Row / Colriga flex e colonna flessibile
Cardscheda con bordo, ombra e padding
Divider · Spacerseparatore · spazio verticale
npas
Grid(#{ cols: 3 }, [
    Card(#{}, [ Heading(#{ level: 4 }, "A"), Text(#{}, "conteúdo") ]),
    Card(#{}, [ Heading(#{ level: 4 }, "B") ]),
    Card(#{}, [ Heading(#{ level: 4 }, "C") ])
])

Tipografia ​

WidgetDescrizione
Heading(#{ level: 1..6 })titolo (h1–h6)
Textparagrafo
Badge(#{ color })badge colorato
StatCard(#{ label, value, delta })scheda KPI (etichetta, valore, variazione)
npas
StatCard(#{ label: "Receita", value: "R$ 128k", delta: "+12%" })
WidgetDescrizione
Navbarbarra di navigazione superiore
Sidebarbarra laterale
Link(#{ href })link di navigazione (rotta)
Tabsfascia di schede

Form ​

WidgetProps principali
Button(#{ variant, onClick })variant: primary | secondary | danger
TextInput(#{ placeholder, value, onChange, onSubmit })onSubmit scatta con Invio
TextArea(#{ rows, value, onChange })area di testo
Select(#{ options, onChange })options: array di valori
Checkbox(#{ label, checked, onChange })casella di selezione
Form(#{ onSubmit })raggruppa i campi; invia al submit
npas
Form(#{ onSubmit: enviar }, [
    TextInput(#{ placeholder: "E-mail", onChange: onEmail }),
    Button(#{ onClick: enviar }, "Entrar")
])

Dati e feedback ​

WidgetDescrizione
Table(#{ columns, rows })tabella; columns e rows sono array
List(#{ items, ordered })lista con elenco puntato o numerata
Chart(#{ type, data, options })grafico Chart.js
Alert(#{ variant })avviso (info/success/warning/error)
ProgressBar(#{ value })barra di avanzamento (0–100)
Spinnerindicatore di caricamento
npas
Table(#{
    columns: ["Produto", "Qtd", "Total"],
    rows: [ ["Café", "120", "R$ 600"], ["Chá", "80", "R$ 320"] ]
})

Grafici (Chart.js) ​

Il widget Chart si mappa direttamente sulla configurazione di Chart.js: type, data e options sono record #{} che diventano il JSON del grafico.

npas
Chart(#{
    type: "bar",
    data: #{
        labels: ["Jan", "Fev", "Mar"],
        datasets: [
            #{ label: "Vendas", data: [30, 45, 38] },
            #{ label: "Meta",   data: [40, 40, 40] }
        ]
    },
    options: #{ plugins: #{ legend: #{ position: "bottom" } } }
})

Tipi supportati: bar, line, pie, doughnut, radar, e gli altri di Chart.js. I grafici vengono reistanziati a ogni ridisegno.

render riceve una mappa di rotte (URL → funzione di schermata). L'URL del browser riflette la schermata corrente, e il pulsante Voltar e i deep link funzionano.

npas
function home(): Object      begin return Page(#{}, [ /* ... */ ]); end;
function dashboard(): Object begin return Page(#{}, [ /* ... */ ]); end;

begin
    render(#{
        "/":          home,
        "/dashboard": dashboard
    });
end.

Due modi per navigare:

  • Link(#{ href: "/dashboard" }, "Ir") — link dichiarativo (<a>), intercettato sul client con pushState.
  • navigate("/dashboard") — dentro un callback, cambia la rotta in modo programmatico (il server avvisa il browser).
npas
function irParaPainel(): Boolean
begin
    navigate("/dashboard");
    return true;
end;

Le chiavi di rotta sono stringhe

Le chiavi della mappa di rotte sono stringhe ("/", "/dashboard") — i record literal accettano chiavi stringa oltre agli identificatori.

Prossimi passi ​

Per distribuire la tua app come eseguibile nativo, vedi Generare eseguibili nativi. Per la sintassi completa del linguaggio, vedi il Riferimento del linguaggio.