Une référence Evergreen avec les valeurs de thème réelles, la saisie contrôlée de tags, la correspondance des règles en temps réel, un parcours de récupération depuis un état vide et une boîte de dialogue de révision native.
Guide OpenDesign8 chapitres36 entrées de référenceGuide de l’application d’origine
01
Aperçu de l’interface du système de design Segment Evergreen
Combinez une formule et les étiquettes requises, consultez les enregistrements correspondants, gérez l’absence de correspondance et examinez un instantané local.
Dans ce thème, Evergreen définit semibold comme 500 et bold comme 600 ; ne les remplacez pas silencieusement par les valeurs par défaut des mots-clés du navigateur.
fontWeights.normal
400
Dans ce thème, Evergreen définit semibold comme 500 et bold comme 600 ; ne les remplacez pas silencieusement par les valeurs par défaut des mots-clés du navigateur.
fontWeights.semibold
500
Dans ce thème, Evergreen définit semibold comme 500 et bold comme 600 ; ne les remplacez pas silencieusement par les valeurs par défaut des mots-clés du navigateur.
fontWeights.bold
600
Dans ce thème, Evergreen définit semibold comme 500 et bold comme 600 ; ne les remplacez pas silencieusement par les valeurs par défaut des mots-clés du navigateur.
Structure du générateur d’audience du système de design Segment Evergreen
Associez les règles aux conséquences qu’elles entraînent
L’exemple associe un panneau de règles à des enregistrements fictifs correspondants. Le menu de sélection de formule et les étiquettes requises restent visibles en même temps que le nombre de résultats, afin que l’effet d’une modification soit facile à comprendre. Il n’est pas nécessaire d’enregistrer quoi que ce soit ni d’ouvrir une boîte de dialogue pour savoir si la combinaison actuelle correspond à des personnes.
Utilisez un jeu de données fini et transparent
Cinq exemples nommés présentent leur forfait et leurs étiquettes. La page ne prétend pas interroger un entrepôt de données clients ni estimer la taille réelle d’une audience. Un résultat nul est utile dans cet exemple, avec une action permettant de rétablir le jeu de données complet.
Valeurs et sémantique du thème du système de design Segment Evergreen
Consultez le thème par défaut réel
Evergreen 7.1.9 fournit des rayons, des tailles de police et des hauteurs de ligne indexés, ainsi que des couleurs nommées et des styles de composants. Le tableau conserve ces valeurs exportées telles quelles. Les noms des graisses de police méritent une attention particulière : semibold et bold correspondent respectivement à 500 et 600, contrairement aux idées courantes.
Harmonisez la composition personnalisée
ThemeProvider fournit les composants natifs de saisie, les étiquettes, les badges, les boutons et la boîte de dialogue. Les panneaux personnalisés reprennent la même association sobre de gris froid et de bleu. L’exemple ne remplace pas les styles internes des composants natifs par des sélecteurs CSS trop généraux, afin de préserver les styles d’interaction fournis.
Typographie du système de design Segment Evergreen pour la modification de règles
Hiérarchisez clairement les informations de la tâche
Les niveaux de titre distinguent le titre de l’audience des titres de panneaux et des noms de résultats individuels. Le texte complémentaire explique la saisie des étiquettes et la portée des données fictives. Un badge de décompte est placé à côté du titre des résultats plutôt que de le remplacer : l’utilisateur peut ainsi repérer la zone avant d’interpréter le nombre.
Veillez à la lisibilité des métadonnées
Les informations sur les forfaits et les étiquettes étayent l’explication des correspondances : elles ne sont pas purement décoratives. La mise en page permet aux étiquettes de passer à la ligne et empile le texte et les badges d’un enregistrement sur un téléphone étroit. Réduire toutes les étiquettes à un texte minuscule masquerait les éléments dont l’utilisateur a besoin pour comprendre les règles.
Échelles majeures et mineures du système de design Segment Evergreen
Utilisez des fonctions pour un espacement cohérent
majorScale et minorScale définissent des intervalles de huit et quatre pixels. Dans l’exemple de composant, majorScale(3) définit un espacement de 24px autour du titre du panneau, tandis que la feuille de style personnalisée gère la composition adaptative. Gardez cette distinction à l’esprit : un point de rupture de grille relève d’une décision de l’application, pas d’une fonction d’espacement.
Préservez les relations entre les champs sur mobile
Étiquettes contrôlées et correspondances dans le système de design Segment Evergreen
Normalisez les valeurs avant de les accepter
Le gestionnaire onChange supprime les espaces de début et de fin, convertit les chaînes en minuscules, élimine les doublons et refuse plus de quatre étiquettes distinctes. Renvoyer false conserve la valeur saisie lorsqu’un ajout est refusé. Cette règle relève de l’application d’audience ; TagInput fournit une interaction contrôlée, sans imposer de limite métier.
Appliquez délibérément la correspondance avec toutes les étiquettes
Un enregistrement doit correspondre au forfait sélectionné et à chacune des étiquettes requises. Effacer les étiquettes supprime cette contrainte ; choisir « Tous » supprime la contrainte liée au forfait. Le nombre de résultats affiché est calculé à partir du même tableau filtré que celui utilisé pour afficher les fiches, afin que le décompte corresponde toujours aux éléments visibles.
Boîte de dialogue de vérification et instantané local dans le système de design Segment Evergreen
Vérifiez les règles actuelles avant l’enregistrement
Un nom d’audience non vide est requis pour ouvrir la boîte de dialogue. Celle-ci récapitule le nom, le nombre, le forfait et les étiquettes, puis propose « Enregistrer localement ». Cette étape supplémentaire montre une superposition native présentant un instantané concret, plutôt qu’une confirmation vide qui se contente de demander « Êtes-vous sûr ? ».
Invalidez l’ancien message de réussite lorsque les règles changent
Toute modification du nom, du forfait ou des étiquettes efface l’indicateur d’instantané enregistré. Une réussite locale antérieure ne peut donc pas être confondue avec la confirmation de règles modifiées depuis. L’application ne présente jamais l’instantané comme une audience Segment et n’envoie aucune requête à une plateforme client.
Saisie au clavier et rétablissement de la boîte de dialogue dans le système de design Segment Evergreen
Testez les étiquettes, les résultats et la vérification dans un même parcours
Les étiquettes peuvent être ajoutées à l’aide des touches de saisie documentées, et l’identifiant du champ lui associe un libellé visible. Le dépassement de la limite d’étiquettes déclenche une alerte native de niveau danger. La vérification utilise le comportement natif de gestion du focus de Dialog plutôt qu’une superposition créée manuellement sans gestion du focus.
Ajoutez newsletter aux étiquettes actives initiales et comparez le décompte.
Ajoutez une étiquette sans correspondance, puis effacez les règles pour rétablir les cinq enregistrements.
Vérifiez les règles et enregistrez localement, puis modifiez une règle et vérifiez que l’ancien message de réussite disparaît.
Gardez le rétablissement depuis l’état vide dans le parcours en cours
Effacer les règles supprime les restrictions de forfait et d’étiquettes, et masque un ancien état d’enregistrement. La zone de résultats affiche alors de nouveau les cinq enregistrements. L’utilisateur peut reprendre immédiatement ses modifications : aucune navigation masquée ni aucun rechargement de page n’est nécessaire.
Intégration du système de design Segment Evergreen React
Utilisez un exemple complet et contrôlé
L’entrée native importe ThemeProvider, defaultTheme et les composants qu’elle affiche. L’état contient les règles, les erreurs, la visibilité de la boîte de dialogue et l’instantané enregistré localement. Le JSX complet et CSS ci-dessous comprennent le jeu de données fictif ; le calcul des résultats peut donc être reproduit sans API externe.
ThemeProvider utilise defaultTheme, dont la version est figée.
Les valeurs de TagInput sont contrôlées par l’application.
Dialog vérifie les mêmes règles que celles utilisées pour la liste des résultats.
Ajoutez l’accès aux données dans une couche applicative distincte
Exemples de composants du système de design Segment Evergreen
main.jsx — exemple complet fonctionnel
Créez et vérifiez une audience locale. Le code source ci-dessous constitue l’entrée complète de React, avec tout l’état et la validation.
jsx
import React, { useState } from "react";
import { createRoot } from "react-dom/client";
import {
ThemeProvider,
defaultTheme,
Heading,
Text,
Paragraph,
Button,
TagInput,
TextInputField,
SelectField,
Alert,
Dialog,
Badge,
majorScale,
} from "evergreen-ui";
import "./evergreen.css";
const people = [
{ name: "Avery Stone", plan: "Pro", tags: ["active", "newsletter"] },
{ name: "Taylor Reed", plan: "Free", tags: ["newsletter"] },
{ name: "Jordan Park", plan: "Pro", tags: ["active"] },
{ name: "Morgan Lee", plan: "Team", tags: ["active", "newsletter"] },
{ name: "Casey Chen", plan: "Free", tags: ["trial"] },
];
function App() {
const [tags, setTags] = useState(["active"]),
[plan, setPlan] = useState("Any"),
[name, setName] = useState("Active customers"),
[error, setError] = useState(""),
[open, setOpen] = useState(false),
[saved, setSaved] = useState(null);
const matches = people.filter(
(p) =>
(plan === "Any" || p.plan === plan) &&
tags.every((t) => p.tags.includes(t)),
);
function changeTags(values) {
const unique = [
...new Set(values.map((v) => v.trim().toLowerCase()).filter(Boolean)),
];
if (unique.length > 4) {
setError("Use at most four tags.");
return false;
}
setTags(unique);
setError("");
setSaved(null);
}
return (
<ThemeProvider value={defaultTheme}>
<main className="audience">
<header>
<Text size={300}>WORKSPACE / AUDIENCES</Text>
<Heading size={700} marginTop={8}>
Build a focused audience
</Heading>
<Paragraph marginTop={8}>
Combine a plan and tags against five fictional records. No customer
data is loaded.
</Paragraph>
</header>
<div className="audience-grid">
<section className="rule-panel">
<Heading size={500} marginBottom={majorScale(3)}>
Audience rules
</Heading>
<TextInputField
label="Audience name"
value={name}
onChange={(e) => {
setName(e.target.value);
setSaved(null);
}}
/>
<SelectField
label="Plan"
value={plan}
onChange={(e) => {
setPlan(e.target.value);
setSaved(null);
}}
>
<option>Any</option>
<option>Free</option>
<option>Pro</option>
<option>Team</option>
</SelectField>
<label htmlFor="audience-tags">Required tags</label>
<Paragraph size={300} marginBottom={8}>
Press Enter or comma to add a tag. Every tag must match.
</Paragraph>
<TagInput
values={tags}
onChange={changeTags}
width="100%"
inputProps={{ id: "audience-tags", placeholder: "Add tag…" }}
/>
<Paragraph size={300} marginTop={8}>
Available sample tags: active, newsletter, trial.
</Paragraph>
{error && <Alert intent="danger" title={error} marginTop={16} />}
<Button
appearance="primary"
marginTop={24}
onClick={() => {
if (!name.trim()) {
setError("Name the audience before reviewing.");
return;
}
setError("");
setOpen(true);
}}
>
Review audience
</Button>
</section>
<section className="results-panel">
<div className="results-title">
<Heading size={500}>Matching sample records</Heading>
<Badge color="blue">
{matches.length} of {people.length}
</Badge>
</div>
{matches.length ? (
<div className="record-list">
{matches.map((p) => (
<article key={p.name}>
<div>
<Heading size={400}>{p.name}</Heading>
<Text size={300}>{p.plan} plan</Text>
</div>
<div className="tag-list">
{p.tags.map((t) => (
<Badge key={t} color="neutral">
{t}
</Badge>
))}
</div>
</article>
))}
</div>
) : (
<div className="empty">
<Heading size={500}>No matching sample records</Heading>
<Paragraph marginTop={8}>
Remove a tag or change the plan to broaden the selection.
</Paragraph>
<Button
marginTop={16}
onClick={() => {
setTags([]);
setPlan("Any");
setSaved(null);
}}
>
Clear rules
</Button>
</div>
)}
{saved && (
<Alert
intent="success"
title="Local audience saved"
marginTop={20}
>
{saved.name} · {saved.count} sample records. Nothing was sent to
Segment.
</Alert>
)}
</section>
</div>
<Dialog
isShown={open}
title="Review local audience"
onCloseComplete={() => setOpen(false)}
confirmLabel="Save locally"
onConfirm={() => {
setSaved({ name: name.trim(), count: matches.length });
setOpen(false);
}}
width={560}
>
<Paragraph>
<strong>{name}</strong> matches {matches.length} of {people.length}{" "}
fictional records.
</Paragraph>
<Paragraph marginTop={12}>
Plan: {plan}. Required tags: {tags.join(", ") || "none"}.
</Paragraph>
<Paragraph marginTop={12}>
This saves only a local snapshot; it does not create a Segment
audience.
</Paragraph>
</Dialog>
<footer>
Native Evergreen 7.1.9 React components. Original audience logic; no
analytics or customer service connection.
</footer>
</main>
</ThemeProvider>
);
}
createRoot(document.getElementById("root")).render(<App />);
Enregistrez ce fichier à côté de main.jsx. Ces règles de composition personnalisées se distinguent de la référence des jetons de la bibliothèque.
04
Configuration d’agent pour le système de design Segment Evergreen
Point de départ de l’implémentation
L’exemple natif épinglé a été assemblé et vérifié localement dans un navigateur. Cet exemple utilise uniquement l’état local de l’application.
sh
npm create vite@latest evergreen-audience -- --template react
cd evergreen-audience
npm install
npm install [email protected][email protected][email protected]
# Replace src/main.jsx and add src/evergreen.css.
npm run dev
Un prompt pour votre projet
Prompt pour l’agent IA
Créez un éditeur d’audience Evergreen utilisant le thème réel et TagInput contrôlé. Normalisez et dédupliquez les étiquettes, explicitez la correspondance avec toutes les étiquettes, assurez la cohérence entre les résultats et leur décompte, effectuez la vérification dans une boîte de dialogue native et effacez tout ancien message de réussite lorsque les règles changent. Ne prétendez pas être connecté à un service Segment.
05
Sources et périmètre du système de design Segment Evergreen
OpenDesign Guide d’application d’Evergreen 7.1.9. Cinq enregistrements fictifs illustrent le filtrage local et l’examen d’un instantané. Aucune donnée client ni audience Segment API n’est connectée.