Aller au contenu

Block Kit

Le Block Kit d’EmDash permet aux plugins en bac à sable de décrire leur interface d’administration sous forme de JSON. L’hôte rend les blocs — aucun JavaScript fourni par le plugin ne s’exécute jamais dans le navigateur.

  1. L’utilisateur navigue vers la page d’administration d’un plugin
  2. L’administration envoie une interaction page_load à la route d’administration du plugin
  3. Le plugin retourne une BlockResponse contenant un tableau de blocs
  4. L’administration rend les blocs en utilisant le composant BlockRenderer
  5. Lorsque l’utilisateur interagit (clique sur un bouton, soumet un formulaire), l’administration renvoie l’interaction au plugin
  6. Le plugin retourne de nouveaux blocs, et le cycle se répète
// Plugin admin route handler
routes: {
admin: {
handler: async (ctx, { request }) => {
const interaction = await request.json();
if (interaction.type === "page_load") {
return {
blocks: [
{ type: "header", text: "My Plugin Settings" },
{
type: "form",
block_id: "settings",
fields: [
{ type: "text_input", action_id: "api_url", label: "API URL" },
{ type: "toggle", action_id: "enabled", label: "Enabled", initial_value: true },
],
submit: { label: "Save", action_id: "save" },
},
],
};
}
if (interaction.type === "form_submit" && interaction.action_id === "save") {
await ctx.kv.set("settings", interaction.values);
return {
blocks: [/* ... blocs mis à jour ... */],
toast: { message: "Settings saved", type: "success" },
};
}
},
},
}
TypeDescription
headerTitre principal en gras
sectionTexte avec élément accessoire optionnel
dividerRègle horizontale
fieldsGrille label/valeur à deux colonnes
tableTableau de données avec formatage, tri, pagination
actionsLigne horizontale de boutons et contrôles
statsCartes de métriques de tableau de bord avec indicateurs de tendance
formChamps de saisie avec visibilité conditionnelle et soumission
imageImage au niveau du bloc avec légende
contextPetit texte d’aide en grisé
columnsMise en page à 2-3 colonnes avec blocs imbriqués
TypeDescription
buttonBouton d’action avec boîte de dialogue de confirmation optionnelle
text_inputSaisie de texte sur une ou plusieurs lignes
number_inputSaisie numérique avec min/max
selectSélection déroulante
toggleInterrupteur marche/arrêt
secret_inputSaisie masquée pour clés API et jetons

Le package @emdash-cms/blocks exporte des aides à la construction pour un code plus propre :

import { blocks, elements } from "@emdash-cms/blocks";
const { header, form, section, stats } = blocks;
const { textInput, toggle, select, button } = elements;
return {
blocks: [
header("Paramètres SEO"),
form({
blockId: "settings",
fields: [
textInput("site_title", "Titre du site", { initialValue: "Mon site" }),
toggle("generate_sitemap", "Générer un plan de site", { initialValue: true }),
select("robots", "Robots par défaut", [
{ label: "Index, Follow", value: "index,follow" },
{ label: "No Index", value: "noindex,follow" },
]),
],
submit: { label: "Save", actionId: "save" },
}),
],
};

Les champs de formulaire peuvent être affichés conditionnellement en fonction des valeurs d’autres champs :

{
"type": "toggle",
"action_id": "auth_enabled",
"label": "Enable Authentication"
}
{
"type": "secret_input",
"action_id": "api_key",
"label": "API Key",
"condition": { "field": "auth_enabled", "eq": true }
}

Le champ api_key n’apparaît que lorsque auth_enabled est activé. Les conditions sont évaluées côté client sans aller-retour.

Utilisez le Block Playground pour construire et tester interactivement des mises en page de blocs.