Eine Evergreen-Referenz mit tatsächlichen Design-Token-Werten, kontrollierter Tag-Eingabe, Live-Regelabgleich, einem Wiederherstellungspfad für leere Zustände und einem nativen Prüfdialog.
Kombinieren Sie einen Plan mit den erforderlichen Tags, prüfen Sie passende Datensätze, reagieren Sie auf fehlende Treffer und sehen Sie sich einen lokalen Snapshot an.
Evergreen verwendet in diesem Theme 500 für semibold und 600 für bold; ersetzen Sie diese Werte nicht stillschweigend durch die Standard-Schlüsselwörter des Browsers.
fontWeights.normal
400
Evergreen verwendet in diesem Theme 500 für semibold und 600 für bold; ersetzen Sie diese Werte nicht stillschweigend durch die Standard-Schlüsselwörter des Browsers.
fontWeights.semibold
500
Evergreen verwendet in diesem Theme 500 für semibold und 600 für bold; ersetzen Sie diese Werte nicht stillschweigend durch die Standard-Schlüsselwörter des Browsers.
fontWeights.bold
600
Evergreen verwendet in diesem Theme 500 für semibold und 600 für bold; ersetzen Sie diese Werte nicht stillschweigend durch die Standard-Schlüsselwörter des Browsers.
Segment Evergreen Designsystem – Struktur des Zielgruppen-Builders
Platziere Regeln neben ihren Auswirkungen
Das Beispiel kombiniert ein Regelpanel mit passenden fiktiven Datensätzen. Die Planauswahl und die erforderlichen Tags sind gleichzeitig mit der Ergebnisanzahl sichtbar. So lässt sich nachvollziehen, wie sich eine Regeländerung auswirkt. Nutzer müssen weder speichern noch einen Dialog öffnen, um herauszufinden, ob die aktuelle Kombination passende Einträge ergibt.
Verwende einen begrenzten, transparenten Beispieldatensatz
Fünf benannte Beispieldatensätze zeigen ihren Tarif und ihre Tags. Die Seite gibt nicht vor, ein Kunden-Data-Warehouse abzufragen oder eine echte Zielgruppengröße zu schätzen. Ein Ergebnis von null ist ein sinnvoller Teil des Beispiels – mit einer Aktion, die das vollständige Beispieldatenset wiederherstellt.
Segment Evergreen Designsystem-Theme-Werte und Semantik
Das tatsächliche Standard-Theme auslesen
Evergreen 7.1.9 stellt indizierte Radien, Schriftgrößen und Zeilenhöhen sowie benannte Farben und Komponentenstile bereit. Die Tabelle übernimmt diese exportierten Werte unverändert. Besonders lesenswert sind die Bezeichnungen der Schriftstärken: semibold und bold entsprechen den Werten 500 und 600 und weichen damit von verbreiteten Annahmen ab.
Die benutzerdefinierte Komposition auf das Theme abstimmen
ThemeProvider stellt die nativen Eingabefelder, Tags, Badges, Buttons und den Dialog bereit. Die selbst gestalteten Panels verwenden dieselbe zurückhaltende Kombination aus kühlem Grau und Blau. Das Beispiel überschreibt die Interna nativer Komponenten nicht mit weit gefassten CSS-Selektoren, sodass die bereitgestellten Interaktionsstile erhalten bleiben.
Segment Evergreen Designsystem-Typografie für die Regelbearbeitung
Die Aufgabe klar hierarchisieren
Überschriftenebenen unterscheiden den Titel der Zielgruppe von Panelüberschriften und den Namen einzelner Ergebnisse. Ergänzende Texte erklären die Eingabe von Tags und den Umfang der fiktiven Daten. Ein Zähler-Badge steht neben der Ergebnisüberschrift, statt sie zu ersetzen. So kann die Person den Bereich identifizieren, bevor sie die Zahl einordnet.
Metadaten gut lesbar halten
Tarif- und Tag-Informationen stützen die Erläuterung der Zuordnung und sind nicht bloß dekorativ. Das Layout lässt Tags umbrechen und ordnet bei schmalen Smartphone-Bildschirmen Text und Badges eines Datensatzes untereinander an. Werden alle Labels auf winzigen Text reduziert, gehen die Informationen verloren, die zum Verständnis der Regeln nötig sind.
Segment Evergreen Designsystem-Haupt- und Nebenskalen
Funktionen für wiederholbare Abstände verwenden
majorScale und minorScale stehen für Schritte von acht beziehungsweise vier Pixeln. Das Komponentenbeispiel verwendet majorScale(3) für einen Abstand von 24px zwischen den Panelüberschriften; das benutzerdefinierte Stylesheet übernimmt das responsive Layout. Diese Unterscheidung sollte klar bleiben: Ein Grid-Breakpoint ist eine Entscheidung der Anwendung und kein Ergebnis einer Abstands-Funktion.
Feldbeziehungen auf Mobilgeräten erhalten
Segment Evergreen Designsystem: Kontrollierte Tags und Zuordnung
Werte vor dem Übernehmen normalisieren
Der onChange-Handler entfernt führende und nachfolgende Leerzeichen, wandelt Zeichenfolgen in Kleinbuchstaben um, entfernt Duplikate und weist mehr als vier unterschiedliche Tags zurück. Die Rückgabe von false lässt das Eingabefeld unverändert, wenn ein Eintrag abgelehnt wird. Diese Richtlinie gehört zur Zielgruppenanwendung; TagInput stellt die kontrollierte Interaktion bereit, legt aber keine geschäftliche Obergrenze fest.
Die Zuordnung zu allen Tags bewusst einsetzen
Ein Datensatz muss dem ausgewählten Tarif und jedem erforderlichen Tag entsprechen. Werden alle Tags entfernt, entfällt diese Einschränkung; mit „Beliebig“ entfällt die Tarifbeschränkung. Die aktuelle Ergebnisanzahl wird aus demselben gefilterten Array berechnet, das auf dem Bildschirm dargestellt wird. So stimmt die Zahl mit den sichtbaren Karten überein.
Segment Evergreen Designsystem: Prüfungsdialog und lokaler Snapshot
Die aktuellen Regeln vor dem Speichern prüfen
Vor dem Öffnen des Dialogs muss ein Zielgruppenname eingegeben werden. Der Dialog zeigt den Namen, die Anzahl, den Tarif und die Tags erneut an und bietet anschließend die Aktion „Lokal speichern“. Dieser zusätzliche Schritt zeigt ein natives Overlay für einen konkreten Snapshot – statt einer leeren Bestätigung, die nur „Sind Sie sicher?“ fragt.
Den bisherigen Erfolg bei Regeländerungen verwerfen
Wird der Name, der Tarif oder ein Tag geändert, wird der Hinweis auf den gespeicherten Snapshot gelöscht. Ein früherer lokaler Erfolg kann daher nicht mit einer Bestätigung der neu bearbeiteten Regeln verwechselt werden. Die Anwendung bezeichnet den Snapshot weder als Segment-Zielgruppe noch sendet sie eine Anfrage an eine Kundenplattform.
Segment Evergreen Designsystem: Tastatureingabe und Wiederherstellung des Dialogs
Tags, Ergebnisse und Prüfung als einen Ablauf testen
Tags lassen sich mit den dokumentierten Eingabetasten hinzufügen. Über seine ID erhält das Eingabefeld ein sichtbares Label. Wird die Tag-Obergrenze überschritten, erscheint eine native Gefahrenmeldung. Für die Prüfung wird das native Fokusverhalten von Dialog verwendet, statt ein eigenes Overlay mit nicht verwaltetem Fokus zu erstellen.
Newsletter zu den anfänglich aktiven Tags hinzufügen und die Anzahl vergleichen.
Ein Tag ohne Treffer hinzufügen und anschließend die Regeln löschen, um alle fünf Datensätze wiederherzustellen.
Prüfen und lokal speichern, dann eine Regel ändern und sicherstellen, dass der vorherige Erfolgshinweis verschwindet.
Die Wiederherstellung nach leeren Ergebnissen in der aktuellen Aufgabe ermöglichen
Mit „Regeln löschen“ werden sowohl Tarif- als auch Tag-Einschränkungen entfernt und ein veralteter Speicherstatus ausgeblendet. Anschließend enthält der Ergebnisbereich wieder alle fünf Datensätze. Die Bearbeitung kann sofort fortgesetzt werden; eine versteckte Navigation oder ein Neuladen der Seite ist nicht erforderlich.
Segment Evergreen Designsystem-Integration von React
Ein vollständiges, kontrolliertes Beispiel verwenden
Der native Einstiegspunkt importiert ThemeProvider, defaultTheme und die dargestellten Komponenten. Der Status umfasst Regeln, Fehler, die Sichtbarkeit des Dialogs und den lokal gespeicherten Snapshot. Das vollständige JSX und CSS unten enthalten den fiktiven Datensatz; dadurch ist die Ergebnisberechnung ohne externes API reproduzierbar.
ThemeProvider verwendet das angeheftete defaultTheme.
Die Werte von TagInput werden von der Anwendung kontrolliert.
Dialog prüft dieselben Regeln, die auch für die Ergebnisliste gelten.
Den Datenzugriff als separate Anwendungsschicht ergänzen
main.jsx — vollständiges, funktionsfähiges Beispiel
Eine lokale Zielgruppe erstellen und prüfen. Der folgende Quelltext ist der vollständige Einstiegspunkt für React und enthält den gesamten Status sowie die Validierung.
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 />);
Speichern Sie die Datei neben main.jsx. Diese benutzerdefinierten Layoutregeln sind von der Token-Referenz der Bibliothek getrennt.
04
Segment Evergreen Einrichtung des Designsystem-KI-Agenten
Ausgangspunkt für die Implementierung
Das Beispiel mit den festgelegten nativen Komponenten wurde gebündelt und lokal im Browser geprüft. Das Beispiel verwendet ausschließlich den lokalen Anwendungszustand.
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
Ein Prompt für dein Projekt
Agenten-Prompt
Einen Evergreen-Zielgruppen-Editor mit dem tatsächlichen Theme und dem kontrollierten TagInput erstellen. Tags normalisieren und Duplikate entfernen, die Zuordnung zu allen Tags eindeutig festlegen, für übereinstimmende Ergebnisse und Zähler sorgen, die Regeln in einem nativen Dialog prüfen und veraltete Erfolgshinweise bei Regeländerungen löschen. Keine Verbindung zu einem Segment-Dienst behaupten.
05
Segment Evergreen-Designsystem: Quellen und Geltungsbereich
OpenDesign-Anwendungsleitfaden für Evergreen 7.1.9. Fünf fiktive Datensätze veranschaulichen die lokale Filterung und die Prüfung von Momentaufnahmen. Es sind keine Kundendaten oder Zielgruppen von Segment API angebunden.