Skip to content

WebInk — composants

Chaque widget accepte un enregistrement de props #{} comme premier argument, puis des enfants (autres nœuds) et/ou du texte. Tous acceptent className pour ajouter des classes Tailwind.

Mise en page

WidgetDescription
Pagecoquille de la page (fond, couleur de texte)
Sectionsection avec espacement vertical
Containerlargeur maximale centrée avec padding
Grid(#{ cols })grille responsive de cols colonnes
Row / Colligne flex et colonne flexible
Cardcarte avec bordure, ombre et padding
Divider · Spacerséparateur · espace vertical
npas
Grid(#{ cols: 3 }, [
    Card(#{}, [ Heading(#{ level: 4 }, "A"), Text(#{}, "conteúdo") ]),
    Card(#{}, [ Heading(#{ level: 4 }, "B") ]),
    Card(#{}, [ Heading(#{ level: 4 }, "C") ])
])

Typographie

WidgetDescription
Heading(#{ level: 1..6 })titre (h1–h6)
Textparagraphe
Badge(#{ color })badge coloré
StatCard(#{ label, value, delta })carte de KPI (libellé, valeur, variation)
npas
StatCard(#{ label: "Receita", value: "R$ 128k", delta: "+12%" })
WidgetDescription
Navbarbarre de navigation supérieure
Sidebarbarre latérale
Link(#{ href })lien de navigation (route)
Tabsbande d'onglets

Formulaires

WidgetProps principales
Button(#{ variant, onClick })variant : primary | secondary | danger
TextInput(#{ placeholder, value, onChange, onSubmit })onSubmit se déclenche sur Entrée
TextArea(#{ rows, value, onChange })zone de texte
Select(#{ options, onChange })options : tableau de valeurs
Checkbox(#{ label, checked, onChange })case à cocher
Form(#{ onSubmit })regroupe des champs ; envoie au submit
npas
Form(#{ onSubmit: enviar }, [
    TextInput(#{ placeholder: "E-mail", onChange: onEmail }),
    Button(#{ onClick: enviar }, "Entrar")
])

Données et retours

WidgetDescription
Table(#{ columns, rows })tableau ; columns et rows sont des tableaux
List(#{ items, ordered })liste à puces ou numérotée
Chart(#{ type, data, options })graphique Chart.js
Alert(#{ variant })alerte (info/success/warning/error)
ProgressBar(#{ value })barre de progression (0–100)
Spinnerindicateur de chargement
npas
Table(#{
    columns: ["Produto", "Qtd", "Total"],
    rows: [ ["Café", "120", "R$ 600"], ["Chá", "80", "R$ 320"] ]
})

Graphiques (Chart.js)

Le widget Chart correspond directement à la configuration de Chart.js : type, data et options sont des enregistrements #{} qui deviennent le JSON du graphique.

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

Types pris en charge : bar, line, pie, doughnut, radar, ainsi que les autres de Chart.js. Les graphiques sont réinstanciés à chaque redessin.

render reçoit une table de routes (URL → fonction d'écran). L'URL du navigateur reflète l'écran courant, et le bouton Retour ainsi que les deep links fonctionnent.

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

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

Deux façons de naviguer :

  • Link(#{ href: "/dashboard" }, "Ir") — lien déclaratif (<a>), intercepté côté client avec pushState.
  • navigate("/dashboard") — à l'intérieur d'un callback, change la route de façon programmatique (le serveur prévient le navigateur).
npas
function irParaPainel(): Boolean
begin
    navigate("/dashboard");
    return true;
end;

Les clés de route sont des chaînes

Les clés de la table de routes sont des chaînes ("/", "/dashboard") — les littéraux d'enregistrement acceptent les clés chaîne en plus des identifiants.

Prochaines étapes

Pour distribuer votre application sous forme d'exécutable natif, voir Générer des exécutables natifs. Pour la syntaxe complète du langage, voir la Référence du langage.