Un riferimento Evergreen con valori tema reali, inserimento controllato di tag, corrispondenza delle regole in tempo reale, un percorso di recupero per lo stato vuoto e un dialogo nativo di revisione.
In questo tema Evergreen assegna a semibold il valore 500 e a bold il valore 600; non sostituirli senza avviso con i valori predefiniti delle parole chiave del browser.
fontWeights.normal
400
In questo tema Evergreen assegna a semibold il valore 500 e a bold il valore 600; non sostituirli senza avviso con i valori predefiniti delle parole chiave del browser.
fontWeights.semibold
500
In questo tema Evergreen assegna a semibold il valore 500 e a bold il valore 600; non sostituirli senza avviso con i valori predefiniti delle parole chiave del browser.
fontWeights.bold
600
In questo tema Evergreen assegna a semibold il valore 500 e a bold il valore 600; non sostituirli senza avviso con i valori predefiniti delle parole chiave del browser.
Struttura del generatore di pubblico del sistema di progettazione sistema di design Segment Evergreen
Mantieni le regole accanto alle loro conseguenze
L’esempio affianca un pannello delle regole ai record fittizi corrispondenti. Il selettore del piano e i tag richiesti sono visibili insieme al conteggio dei risultati, così è chiaro l’effetto di ogni modifica a una regola. Per scoprire se la combinazione attuale corrisponde a qualche record, non occorre salvare né aprire una finestra di dialogo.
Usa un insieme di dati finito e trasparente
Cinque record con nome mostrano il rispettivo piano e i relativi tag. La pagina non finge di interrogare un archivio clienti né di stimare le dimensioni di un pubblico reale. Anche un risultato pari a zero è utile nell’esempio; un’azione permette di ripristinare l’intero insieme di dati.
Valori e semantica del tema del sistema di progettazione sistema di design Segment Evergreen
Consulta il tema predefinito effettivo
Evergreen 7.1.9 fornisce raggi, dimensioni dei caratteri e interlinee indicizzati, oltre a colori con nome e stili dei componenti. La tabella mantiene invariati i valori esportati. Vale la pena soffermarsi in particolare sui nomi dei pesi: semibold e bold corrispondono rispettivamente a 500 e 600, valori diversi da quelli comunemente previsti.
Mantieni coerente la composizione personalizzata
ThemeProvider fornisce gli input nativi, i tag, i badge, i pulsanti e la finestra di dialogo. I pannelli personalizzati riprendono la stessa combinazione sobria di grigio freddo e blu. L’esempio non sovrascrive i dettagli interni dei componenti nativi con selettori CSS troppo generici, quindi gli stili di interazione forniti restano intatti.
Tipografia per modificare le regole nel sistema di progettazione sistema di design Segment Evergreen
Definisci una gerarchia chiara per l’attività
I ruoli delle intestazioni distinguono il titolo del pubblico dai titoli dei pannelli e dai nomi dei singoli risultati. Il testo di supporto spiega come inserire i tag e chiarisce che i dati sono fittizi. Un badge con il conteggio è accanto all’intestazione dei risultati, anziché sostituirla: così si può identificare la sezione prima di interpretare il numero.
Mantieni leggibili i metadati
Le informazioni su piani e tag aiutano a capire la corrispondenza e non sono puramente decorative. Il layout consente ai tag di andare a capo e, sugli schermi stretti dei telefoni, dispone su righe separate il testo e i badge di un record. Ridurre tutte le etichette a un testo minuscolo nasconderebbe gli elementi necessari per comprendere le regole.
Scale principali e secondarie del sistema di progettazione sistema di design Segment Evergreen
Usa funzioni per una spaziatura ripetibile
majorScale e minorScale esprimono incrementi rispettivamente di otto e quattro pixel. Nell’esempio del componente, majorScale(3) imposta uno spazio di 24px sotto l’intestazione del pannello, mentre il foglio di stile personalizzato gestisce la composizione adattiva. Mantieni chiara questa distinzione: il breakpoint della griglia è una scelta dell’applicazione, non il risultato di una funzione di spaziatura.
Mantieni le relazioni tra i campi sui dispositivi mobili
Tag controllati e corrispondenze nel sistema di progettazione sistema di design Segment Evergreen
Normalizza i valori prima di accettarli
Il gestore onChange rimuove gli spazi iniziali e finali, converte le stringhe in minuscolo, elimina i duplicati e rifiuta più di quattro tag distinti. Restituire false mantiene l’input quando un’aggiunta viene rifiutata. Questa regola appartiene all’applicazione del pubblico: TagInput gestisce l’interazione controllata, senza stabilire un limite di business.
Applica consapevolmente la corrispondenza con tutti i tag
Un record deve corrispondere al piano selezionato e a ogni tag richiesto. Se si cancellano i tag, il relativo vincolo viene rimosso; scegliendo Qualsiasi, viene rimosso il vincolo sul piano. Il conteggio attuale è calcolato sullo stesso array filtrato mostrato sullo schermo, così il numero corrisponde sempre alle schede visibili.
Finestra di revisione e istantanea locale nel sistema di progettazione sistema di design Segment Evergreen
Controlla le regole attuali prima di salvare
Per aprire la finestra di dialogo è necessario specificare un nome per il pubblico. La finestra mostra nuovamente il nome, il conteggio, il piano e i tag, quindi offre l’opzione Salva in locale. Questo passaggio aggiuntivo illustra un overlay nativo con un’istantanea concreta, invece di una conferma vuota che chiede soltanto «Confermi?».
Annulla il vecchio stato di successo quando cambiano le regole
Se cambiano il nome, il piano o i tag, l’indicatore dell’istantanea salvata viene cancellato. In questo modo, un precedente salvataggio locale non può essere scambiato per una conferma delle regole appena modificate. L’applicazione non presenta l’istantanea come un pubblico di Segment e non invia richieste a una piattaforma clienti.
Inserimento da tastiera e ripristino della finestra di dialogo nel sistema di progettazione sistema di design Segment Evergreen
Verifica tag, risultati e revisione con un unico flusso
I tag possono essere aggiunti usando i tasti previsti e l’input riceve un’etichetta visibile tramite il suo id. Se viene superato il limite dei tag, compare un avviso di errore nativo. La revisione usa il comportamento nativo di Dialog per la gestione del focus, anziché un overlay creato manualmente con il focus non gestito.
Aggiungi newsletter al tag attivo iniziale e confronta il conteggio.
Aggiungi un tag senza corrispondenze, poi cancella le regole per ripristinare i cinque record.
Rivedi e salva in locale, poi modifica una regola e verifica che il vecchio stato di successo scompaia.
Consenti di recuperare dallo stato vuoto senza interrompere l’attività
Cancella regole rimuove i vincoli sul piano e sui tag e chiude uno stato di salvataggio ormai superato. La sezione dei risultati mostra quindi di nuovo tutti e cinque i record. L’utente può continuare subito a modificare le regole: non servono navigazione nascosta né ricaricamento della pagina.
Integrazione React del sistema di progettazione sistema di design Segment Evergreen
Usa un esempio completo e controllato
Il punto d’ingresso nativo importa ThemeProvider, defaultTheme e i componenti che visualizza. Lo stato contiene regole, errori, visibilità della finestra di dialogo e istantanea salvata in locale. Il JSX completo e CSS qui sotto includono l’insieme di dati fittizi, così il calcolo dei risultati è riproducibile senza un API esterno.
ThemeProvider usa defaultTheme, bloccato alla versione specificata.
I valori di TagInput sono controllati dall’applicazione.
Dialog rivede le stesse regole usate dall’elenco dei risultati.
Aggiungi l’accesso ai dati come livello applicativo separato
Esempi di componenti del sistema di progettazione sistema di design Segment Evergreen
main.jsx — esempio completo funzionante
Crea e rivedi un pubblico in locale. Il sorgente qui sotto è il punto d’ingresso completo di React, con tutto lo stato e la convalida.
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 />);
Salva il file accanto a main.jsx. Queste regole di composizione personalizzate sono distinte dal riferimento ai token della libreria.
04
Configurazione dell’agente del sistema di progettazione sistema di design Segment Evergreen
Punto di partenza per l’implementazione
L’esempio nativo bloccato è stato incluso nel bundle e verificato localmente nel browser. L’esempio usa solo lo stato locale dell’applicazione.
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 per il tuo progetto
Prompt per l’agente
Crea un editor di pubblici Evergreen usando il tema effettivo e TagInput controllato. Normalizza i tag ed elimina i duplicati, rendi esplicita la corrispondenza con tutti i tag, mantieni coerenti risultati e conteggi, consenti la revisione in un Dialog nativo e cancella gli stati di successo non più validi quando cambiano le regole. Non dichiarare che esiste una connessione al servizio Segment.
05
Fonti e ambito del sistema di progettazione sistema di design Segment Evergreen
OpenDesign guida applicativa per Evergreen 7.1.9. Cinque record fittizi illustrano il filtraggio locale e la revisione dell’istantanea. Non è collegato alcun dato cliente di Segment né alcun API di pubblico.