Datenanalyse · Neue Ressource

Elastic UI-Designsystem.

Erstellen Sie einen Elastic UI-Log-Explorer mit geprüften Borealis-Skalen, nativen Tabellen- und Suchsteuerelementen, Schweregradfiltern, lokal gespeicherten Ereignissen und vollständigem React-Quellcode.

OpenDesign-Leitfaden8 Kapitel43 ReferenzeinträgeOriginaler Anwendungsleitfaden
01

Interface-Vorschau des Elastic UI-Designsystems

Filtern Sie den Ereignisstrom nach Nachricht oder Schweregrad, speichern Sie einzelne Ereignisse, leeren Sie ein leeres Ergebnis und wechseln Sie zwischen heller und dunkler Darstellung.

Beispiel-Logereignisse suchen und speichernVollständiges Beispiel öffnen
Natives Elastic UI 123.0.0 / Borealis 8.1.0 mit React 18.3.1. Originale lokale Protokolldaten und Anwendungsstatus. · Implementierungsreferenz
02

Designreferenz für das Elastic UI-Designsystem

Elastic UI 123.0.0 mit Borealis-Theme 8.1.0 und React 18.3.1. Die Tabellen verwenden Namen aus dem veröffentlichten Theme-JSON. Dies sind Exportschlüssel, keine wörtlichen useEuiTheme-Objektpfade. In der tatsächlichen Vorschau wird das native React-Theme API verwendet.

Semantische Farben von Borealis

Quelle
Name / RegelWert / KonfigurationVerwendung
euiColorPrimarylight: #0B64DD; dark: #61A2FFVeröffentlichte Namen aus dem Theme-Export. Verwenden Sie in React die entsprechende semantische Rolle über useEuiTheme, anstatt diese Werte fest zu codieren.
euiColorSuccesslight: #008A5E; dark: #24C292Veröffentlichte Namen aus dem Theme-Export. Verwenden Sie in React die entsprechende semantische Rolle über useEuiTheme, anstatt diese Werte fest zu codieren.
euiColorWarninglight: #FACB3D; dark: #FACB3DVeröffentlichte Namen aus dem Theme-Export. Verwenden Sie in React die entsprechende semantische Rolle über useEuiTheme, anstatt diese Werte fest zu codieren.
euiColorDangerlight: #C61E25; dark: #F6726AVeröffentlichte Namen aus dem Theme-Export. Verwenden Sie in React die entsprechende semantische Rolle über useEuiTheme, anstatt diese Werte fest zu codieren.
euiColorEmptyShadelight: #FFFFFF; dark: #111C2CVeröffentlichte Namen aus dem Theme-Export. Verwenden Sie in React die entsprechende semantische Rolle über useEuiTheme, anstatt diese Werte fest zu codieren.
euiColorFullShadelight: #07101F; dark: #FFFFFFVeröffentlichte Namen aus dem Theme-Export. Verwenden Sie in React die entsprechende semantische Rolle über useEuiTheme, anstatt diese Werte fest zu codieren.
euiPageBackgroundColorlight: #ECF1F9; dark: #07101FVeröffentlichte Namen aus dem Theme-Export. Verwenden Sie in React die entsprechende semantische Rolle über useEuiTheme, anstatt diese Werte fest zu codieren.
euiTextColorlight: #384861; dark: #B4C1D5Veröffentlichte Namen aus dem Theme-Export. Verwenden Sie in React die entsprechende semantische Rolle über useEuiTheme, anstatt diese Werte fest zu codieren.
euiTextSubduedColorlight: #516381; dark: #98A8C3Veröffentlichte Namen aus dem Theme-Export. Verwenden Sie in React die entsprechende semantische Rolle über useEuiTheme, anstatt diese Werte fest zu codieren.

Abstandsskala

Quelle
Name / RegelWert / KonfigurationVerwendung
euiSizeXS4pxVerwenden Sie für den Layout-Rhythmus passende EuiSpacer-/FlexGroup-Größen. Die Basiseinheit beträgt in diesem Theme-Export 16px.
euiSizeS8pxVerwenden Sie für den Layout-Rhythmus passende EuiSpacer-/FlexGroup-Größen. Die Basiseinheit beträgt in diesem Theme-Export 16px.
euiSizeM12pxVerwenden Sie für den Layout-Rhythmus passende EuiSpacer-/FlexGroup-Größen. Die Basiseinheit beträgt in diesem Theme-Export 16px.
euiSize16pxVerwenden Sie für den Layout-Rhythmus passende EuiSpacer-/FlexGroup-Größen. Die Basiseinheit beträgt in diesem Theme-Export 16px.
euiSizeL24pxVerwenden Sie für den Layout-Rhythmus passende EuiSpacer-/FlexGroup-Größen. Die Basiseinheit beträgt in diesem Theme-Export 16px.
euiSizeXL32pxVerwenden Sie für den Layout-Rhythmus passende EuiSpacer-/FlexGroup-Größen. Die Basiseinheit beträgt in diesem Theme-Export 16px.
euiSizeXXL40pxVerwenden Sie für den Layout-Rhythmus passende EuiSpacer-/FlexGroup-Größen. Die Basiseinheit beträgt in diesem Theme-Export 16px.

Typografie

Quelle
Name / RegelWert / KonfigurationVerwendung
euiFontSizeXS12pxVeröffentlichte Typografiereferenz. Verwenden Sie EuiText-/EuiTitle-Varianten für die Komponentenhierarchie.
euiFontSizeS14pxVeröffentlichte Typografiereferenz. Verwenden Sie EuiText-/EuiTitle-Varianten für die Komponentenhierarchie.
euiFontSize14pxVeröffentlichte Typografiereferenz. Verwenden Sie EuiText-/EuiTitle-Varianten für die Komponentenhierarchie.
euiFontSizeM16pxVeröffentlichte Typografiereferenz. Verwenden Sie EuiText-/EuiTitle-Varianten für die Komponentenhierarchie.
euiFontSizeL20pxVeröffentlichte Typografiereferenz. Verwenden Sie EuiText-/EuiTitle-Varianten für die Komponentenhierarchie.
euiFontSizeXL24pxVeröffentlichte Typografiereferenz. Verwenden Sie EuiText-/EuiTitle-Varianten für die Komponentenhierarchie.
euiFontSizeXXL30pxVeröffentlichte Typografiereferenz. Verwenden Sie EuiText-/EuiTitle-Varianten für die Komponentenhierarchie.
euiLineHeight1.5Veröffentlichte Typografiereferenz. Verwenden Sie EuiText-/EuiTitle-Varianten für die Komponentenhierarchie.

Rahmen und Formen

Quelle
Name / RegelWert / KonfigurationVerwendung
euiBorderWidthThin1pxUnterscheiden Sie zwischen Inline-, Steuerungs-, Panel- und Rahmenformen. Ein einheitlicher Eckenradius für alles würde die Hierarchie verwischen.
euiBorderWidthThick2pxUnterscheiden Sie zwischen Inline-, Steuerungs-, Panel- und Rahmenformen. Ein einheitlicher Eckenradius für alles würde die Hierarchie verwischen.
euiBorderColor#E3E8F2 Unterscheiden Sie zwischen Inline-, Steuerungs-, Panel- und Rahmenformen. Ein einheitlicher Eckenradius für alles würde die Hierarchie verwischen.
euiBorderRadiusInline4pxUnterscheiden Sie zwischen Inline-, Steuerungs-, Panel- und Rahmenformen. Ein einheitlicher Eckenradius für alles würde die Hierarchie verwischen.
euiBorderRadiusControl8pxUnterscheiden Sie zwischen Inline-, Steuerungs-, Panel- und Rahmenformen. Ein einheitlicher Eckenradius für alles würde die Hierarchie verwischen.
euiBorderRadiusPanel12pxUnterscheiden Sie zwischen Inline-, Steuerungs-, Panel- und Rahmenformen. Ein einheitlicher Eckenradius für alles würde die Hierarchie verwischen.
euiBorderRadiusFrame16pxUnterscheiden Sie zwischen Inline-, Steuerungs-, Panel- und Rahmenformen. Ein einheitlicher Eckenradius für alles würde die Hierarchie verwischen.

Fokus und Bewegung

Quelle
Name / RegelWert / KonfigurationVerwendung
euiFocusRingSize2pxBehalten Sie das native Fokus- und Bewegungsverhalten bei, statt interne .eui-Selektoren zu überschreiben.
euiFocusBackgroundColor#ECF1F9 Behalten Sie das native Fokus- und Bewegungsverhalten bei, statt interne .eui-Selektoren zu überschreiben.
euiAnimSpeedExtraFast90msBehalten Sie das native Fokus- und Bewegungsverhalten bei, statt interne .eui-Selektoren zu überschreiben.
euiAnimSpeedFast150msBehalten Sie das native Fokus- und Bewegungsverhalten bei, statt interne .eui-Selektoren zu überschreiben.
euiAnimSpeedNormal250msBehalten Sie das native Fokus- und Bewegungsverhalten bei, statt interne .eui-Selektoren zu überschreiben.
euiAnimSpeedSlow350msBehalten Sie das native Fokus- und Bewegungsverhalten bei, statt interne .eui-Selektoren zu überschreiben.

Nativer API-Vertrag in diesem Explorer

Quelle
Name / RegelWert / KonfigurationVerwendung
EuiProvidercolorMode="light" | "dark"Stellt den Theme-Kontext und Emotion-Stile bereit.
useEuiTheme{ euiTheme }Löst semantische Farben für benutzerdefinierte Elemente und EuiHealth auf.
EuiBasicTableitems · itemId · columnsRendert die gesteuerte sichtbare Sammlung anhand stabiler IDs.
EuiFieldSearchvalue · onChange · incrementalDie Anwendung filtert eine lokale Sammlung mit sechs Ereignissen.
EuiButtonGroupoptions · idSelected · onChangeGesteuerter Schweregradfilter mit sichtbarer Legende.
EuiHealthcolor + readable child labelEin Statuspunkt ergänzt die Bezeichnung des Schweregrads, ersetzt sie aber nicht.
03

Vollständiger Leitfaden zum Elastic UI-Designsystem

Ein praktischer Leitfaden zur Auswahl, Anwendung und Überprüfung dieses Systems für ein echtes Interface.

DESIGN-elastic-ui.md

Umfassende Anleitung, Einstieg in die Implementierung und Links zu den Quellen.

Leitfaden herunterladen

Struktur des Elastic UI-Designsystem-Explorers

Ein Arbeitsbereich für Untersuchungen statt eines allgemeinen Dashboards

Das Beispiel umfasst drei kompakte Kennzahlen und einen Ereignisstrom. Ein Suchfeld und eine Schweregradgruppe grenzen den Ereignisstrom ein; jede Zeile bietet eine eigene Speicheraktion. Wenn die Aktion direkt beim Ereignis steht, können Leserinnen und Leser Belege sammeln, ohne den gefilterten Kontext zu verlassen. In der Zusammenfassung wird ausdrücklich die Anzahl der Beispieldatenereignisse angegeben, statt Live-Datenverkehr vorzutäuschen.

Aus diesem OpenDesign-Leitfaden

Die aktuelle Theme-Grenze verwenden

Dieses Beispiel kombiniert EUI 123.0.0 mit Borealis 8.1.0. Die Referenzwerte stammen aus diesem veröffentlichten Theme und nicht aus einem älteren Screenshot von Amsterdam. EuiProvider verwaltet den Darstellungsmodus und den Stilkontext. Der Anwendungsstatus bleibt von jeder Theme-Berechnung getrennt, sodass ein Wechsel der Darstellung weder gespeicherte Ereignisse noch die aktuelle Suchanfrage zurücksetzt.

Semantische Farbrollen des Elastic UI-Designsystems

Den Schweregrad als aussagekräftige Beziehung verwenden

In dieser Anwendung verwendet Info die primäre Rolle, Warning die Warnungsrolle und Error die Gefahrenrolle. EuiHealth zeigt neben dem Punkt die Bezeichnung des Schweregrads an. Diese Zuordnung ist eine Anwendungsrichtlinie und bedeutet nicht, dass jedes Element in der Primärfarbe einen Informationsschweregrad darstellt. Fehleranzahlen und Ereignisbezeichnungen müssen weiterhin als Text lesbar sein.

Farben anhand des aktiven Themes auflösen

Der Bildschirm ruft useEuiTheme auf und verwendet die aufgelösten Farben für Hintergrund, Fließtext und Statusindikatoren. Die Exporttabellen enthalten jeweils Werte für helle und dunkle Darstellung, damit der Unterschied sichtbar wird. Kopieren Sie nicht denselben Hex-Wert in beide Modi und verwenden Sie keine generierten Emotion-Klassennamen, um die Darstellung zu erzwingen.

Typografie und Zahlenhierarchie des Elastic UI-Designsystems

Kennzahlen erst einordnen, dann hervorheben

EuiStat versieht die 6 Beispieldatenereignisse, das 1 Fehlerereignis und die Anzahl gespeicherter Ereignisse mit Beschreibungen. Die Zahl allein wäre mehrdeutig. EuiTitle leitet die Untersuchung ein, während EuiText den Zeitraum und den Hinweis auf Beispieldaten angibt. Die Überschrift des Ereignisstroms ist kleiner als der Seitentitel.

Protokolltext bei kompakter Darstellung gut lesbar halten

Borealis verwendet im Export einen Basiswert von 14px und eine Zeilenhöhe von 1.5 sowie Schriftgrößen in den Abstufungen 12/16/20/24/30px. Zeitstempel und Dienstnamen stehen in vorhersehbaren Spalten, während die Ereignisnachricht flexibel Platz erhält. Das Beispiel verwendet verfügbare Systemschriften aus dem nativen Schriftstapel und gibt nicht vor, eine extern geladene Inter-Schriftdatei zu verwenden.

Basistabelle und gesteuerte Filter des Elastic UI-Designsystems

Darstellung und Filterung voneinander trennen

EuiBasicTable erhält bereits gefilterte Elemente. Spalten definieren ein Feld oder einen benutzerdefinierten Renderer, und itemId verwendet die stabile Ereignis-ID. EuiFieldSearch aktualisiert den Abfragestatus; EuiButtonGroup aktualisiert die ausgewählte Schweregrad-ID. Die Anwendung kombiniert beide Filterbedingungen, bevor sie die sichtbare Sammlung an die Tabelle übergibt.

  1. Geben Sie einen Dienstnamen oder einen Nachrichtenausschnitt ein.
  2. Wählen Sie Error oder Warning aus, um nach Schweregrad zu filtern.
  3. Speichern Sie ein passendes Ereignis über die Aktion in seiner Zeile.
  4. Entfernen Sie die Filter und prüfen Sie, ob das gespeicherte Ereignis weiterhin markiert ist.

Nach Ereignis-ID statt nach Zeilenposition speichern

Abstände und responsive Daten im Elastic UI-Designsystem

Für Gruppen durchgängig die native Abstandsskala verwenden

Die dokumentierten Größen sind 4, 8, 12, 16, 24, 32 und 40px. EuiSpacer und EuiFlexGroup schaffen Abstände zwischen Zusammenfassungsstatistiken, Filtern und Ereignistabelle. EuiPanel stellt die Containerform bereit; das Theme unterscheidet den Panel-Radius von 12px von den Radien für Steuerelemente mit 8px und Rahmen mit 16px.

Die Seite im mobilen Ansichtsbereich halten

Die Gruppen für Zusammenfassung und Filter ordnen sich mit dem nativen Verhalten von FlexGroup neu an. Die Tabelle befindet sich in einem horizontal scrollbar begrenzten Bereich mit einer Anwendungs-Mindestbreite von 640px. So bleiben Zeitstempel, Meldung und Aktionen einander zugeordnet, statt dass die ganze Seite überläuft. Für eine Produktionstabelle können Sie die dokumentierten Optionen für responsive Tabellen passend zu den tatsächlichen Spalten auswählen.

Elastic UI-Designsystem: Suche, leere und gespeicherte Zustände

Bei einer Suche ohne Treffer gibt es eine direkte Möglichkeit, fortzufahren

Bei einer Abfrage ohne mögliche Treffer wird „Keine Ereignisse entsprechen den aktuellen Filtern“ mit der Aktion „Filter zurücksetzen“ angezeigt. Durch das Zurücksetzen von Abfrage und Schweregrad werden alle sechs Beispieldaten wiederhergestellt, ohne gespeicherte IDs zu ändern. Die Anzahl über der Tabelle gibt die Zahl der passenden Ereignisse über eine höfliche Live-Region bekannt.

Ein lokales Speichern ist kein Incident-Workflow

Beim Speichern eines Ereignisses ändern sich die sichtbare Zeilenbeschriftung und die gespeicherte Statistik. Es wird weder Elasticsearch kontaktiert noch ein Incident erstellt oder der Zustand über ein Neuladen hinaus gespeichert. Ein echtes Produkt für Untersuchungen sollte einen dokumentierten Persistenzendpunkt ergänzen und ausstehende oder fehlgeschlagene Antworten melden, bevor behauptet wird, dass die gespeicherte Sammlung dauerhaft ist.

Elastic UI-Designsystem: barrierefreie Tabellenaktionen

Filter unabhängig von Platzhaltern benennen

Die Suche hat einen barrierefreien Namen, und die Schaltflächengruppe dient als Legende für die Schweregrade. Die Tabellenspalten haben aussagekräftige Überschriften; die Aktion jeder Zeile ist ein natives EuiButtonEmpty. EuiHealth enthält Text, sodass die Statusfarbe nie die einzige Information ist. Bewahren Sie diese Vorgaben beim Ersetzen der Beispieldaten bei.

  • Für Schweregrade sichtbare Wörter verwenden.
  • Tabellenbeschriftung und Spaltennamen beibehalten.
  • Den Speicherstatus der stabilen Ereignis-ID zuordnen.

Tastatur- und visuellen Zustand gemeinsam beibehalten

Nutzer können den Fokus auf die Suche setzen, einen Schweregradfilter auswählen, die Aktionen einer Zeile erreichen und die Darstellungseinstellung umschalten. Der 2px-Fokusring gehört zur Theme-Referenz. Testen Sie eine gefilterte Ergebnismenge, nachdem Sie eine Zeile gespeichert und den Filter zurückgesetzt haben; die Aktionsbeschriftung und die gespeicherte Statistik sollten weiterhin übereinstimmen.

Elastic UI-Designsystem: Einrichtung und Theme-Integration

Die dokumentierten Peer-Abhängigkeiten installieren

Die offizielle Einrichtungsanleitung verwendet Yarn und führt neben EUI auch Borealis, Emotion, datemath und moment auf. Dieses Beispiel läuft mit React 18 und umschließt den Komponentenbaum nicht mit StrictMode. Die folgende Einrichtung macht diese Voraussetzungen explizit, statt unbemerkt React 19 aus einer neu erstellten Anwendung zu übernehmen.

Die vollständige Einstiegsdatei als Implementierung verwenden

Elastic UI-Designsystem: Komponentenbeispiele

main.jsx – vollständiger nativer Log-Explorer

EuiProvider und Borealis ermöglichen eine gesteuerte Ereignistabelle mit Filtern nach Schweregrad und Suche sowie einem lokalen Zustand für gespeicherte Ereignisse.

jsx
import React, { useState } from "react";
import { createRoot } from "react-dom/client";
import {
  EuiProvider,
  EuiPanel,
  EuiTitle,
  EuiText,
  EuiSpacer,
  EuiFlexGroup,
  EuiFlexItem,
  EuiFieldSearch,
  EuiButtonGroup,
  EuiButtonEmpty,
  EuiBasicTable,
  EuiHealth,
  EuiStat,
  EuiSwitch,
  EuiCallOut,
  useEuiTheme,
} from "@elastic/eui";
const logs = [
  {
    id: 1,
    time: "09:42:18",
    service: "gateway",
    message: "Request completed",
    level: "Info",
    duration: 42,
  },
  {
    id: 2,
    time: "09:42:21",
    service: "worker",
    message: "Retry queued after timeout",
    level: "Warning",
    duration: 1200,
  },
  {
    id: 3,
    time: "09:42:24",
    service: "gateway",
    message: "Upstream connection refused",
    level: "Error",
    duration: 800,
  },
  {
    id: 4,
    time: "09:42:29",
    service: "indexer",
    message: "Batch indexed",
    level: "Info",
    duration: 180,
  },
  {
    id: 5,
    time: "09:42:32",
    service: "worker",
    message: "Job completed",
    level: "Info",
    duration: 94,
  },
  {
    id: 6,
    time: "09:42:36",
    service: "gateway",
    message: "Upstream connection restored",
    level: "Info",
    duration: 51,
  },
];
function Screen({ dark, setDark }) {
  const { euiTheme } = useEuiTheme();
  const [query, setQuery] = useState(""),
    [level, setLevel] = useState("all"),
    [saved, setSaved] = useState([]);
  const visible = logs.filter(
    (x) =>
      (level === "all" || x.level === level) &&
      (x.service + " " + x.message).toLowerCase().includes(query.toLowerCase()),
  );
  const colors = {
    Info: euiTheme.colors.primary,
    Warning: euiTheme.colors.warning,
    Error: euiTheme.colors.danger,
  };
  const columns = [
    { field: "time", name: "Time", width: "105px" },
    { field: "service", name: "Service", width: "105px" },
    {
      field: "message",
      name: "Event",
      render: (value, item) => (
        <span>
          {value}
          {saved.includes(item.id) ? " · Saved locally" : ""}
        </span>
      ),
    },
    {
      field: "level",
      name: "Level",
      width: "110px",
      render: (value) => <EuiHealth color={colors[value]}>{value}</EuiHealth>,
    },
    {
      name: "Action",
      width: "110px",
      render: (item) => (
        <EuiButtonEmpty
          size="xs"
          onClick={() =>
            setSaved((v) =>
              v.includes(item.id)
                ? v.filter((id) => id !== item.id)
                : [...v, item.id],
            )
          }
        >
          {saved.includes(item.id) ? "Unsave" : "Save event"}
        </EuiButtonEmpty>
      ),
    },
  ];
  return (
    <main
      style={{
        padding: 24,
        background: euiTheme.colors.backgroundBasePlain,
        color: euiTheme.colors.textParagraph,
      }}
    >
      <EuiFlexGroup justifyContent="spaceBetween" alignItems="center">
        <EuiFlexItem>
          <EuiText size="xs">
            <p>ELASTIC UI · LOG EXPLORER</p>
          </EuiText>
          <EuiTitle size="m">
            <h1>Investigate gateway events</h1>
          </EuiTitle>
        </EuiFlexItem>
        <EuiFlexItem grow={false}>
          <EuiSwitch
            label="Dark mode"
            checked={dark}
            onChange={(e) => setDark(e.target.checked)}
          />
        </EuiFlexItem>
      </EuiFlexGroup>
      <EuiSpacer size="l" />
      <EuiFlexGroup>
        <EuiFlexItem>
          <EuiPanel>
            <EuiStat title="6" description="Sample events" titleSize="m" />
          </EuiPanel>
        </EuiFlexItem>
        <EuiFlexItem>
          <EuiPanel>
            <EuiStat
              title="1"
              description="Error event"
              titleSize="m"
              titleColor="danger"
            />
          </EuiPanel>
        </EuiFlexItem>
        <EuiFlexItem>
          <EuiPanel>
            <EuiStat
              title={String(saved.length)}
              description="Saved in this preview"
              titleSize="m"
            />
          </EuiPanel>
        </EuiFlexItem>
      </EuiFlexGroup>
      <EuiSpacer size="l" />
      <EuiPanel>
        <EuiTitle size="xs">
          <h2>Event stream</h2>
        </EuiTitle>
        <EuiText size="s">
          <p>09:42:18–09:42:36 · fictional data · no live telemetry</p>
        </EuiText>
        <EuiSpacer size="m" />
        <EuiFlexGroup alignItems="center">
          <EuiFlexItem>
            <EuiFieldSearch
              fullWidth
              aria-label="Search log events"
              placeholder="Search service or message"
              value={query}
              onChange={(e) => setQuery(e.target.value)}
              incremental
            />
          </EuiFlexItem>
          <EuiFlexItem grow={false}>
            <EuiButtonGroup
              legend="Filter severity"
              options={[
                { id: "all", label: "All" },
                { id: "Warning", label: "Warning" },
                { id: "Error", label: "Error" },
              ]}
              idSelected={level}
              onChange={(id) => setLevel(id)}
            />
          </EuiFlexItem>
        </EuiFlexGroup>
        <EuiSpacer size="m" />
        <EuiText size="xs">
          <p aria-live="polite">{visible.length} matching events</p>
        </EuiText>
        <div style={{ overflowX: "auto", maxWidth: "100%" }}>
          <div style={{ minWidth: 640 }}>
            <EuiBasicTable
                  responsiveBreakpoint={false}
              items={visible}
              itemId="id"
              columns={columns}
              tableCaption="Fictional application events"
              noItemsMessage="No events match the current filters."
            />
          </div>
        </div>
        {!visible.length && (
          <EuiButtonEmpty
            onClick={() => {
              setLevel("all");
              setQuery("");
            }}
          >
            Clear filters
          </EuiButtonEmpty>
        )}
      </EuiPanel>
      <EuiSpacer size="l" />
      <EuiCallOut size="s" title="Local investigation workspace">
        Saving an event only changes this preview. No query is sent to
        Elasticsearch and no incident is created.
      </EuiCallOut>
      <EuiSpacer size="m" />
      <EuiText size="xs">
        <p>
          Native Elastic UI 123.0.0 · Borealis 8.1.0 theme · controlled filters
          and table actions.
        </p>
      </EuiText>
    </main>
  );
}
function App() {
  const [dark, setDark] = useState(false);
  return (
    <EuiProvider colorMode={dark ? "dark" : "light"}>
      <Screen dark={dark} setDark={setDark} />
    </EuiProvider>
  );
}
createRoot(document.getElementById("root")).render(<App />);

Code-Referenz

  • Als src/main.jsx im React-Grundgerüst speichern. In diesem Einstiegspunkt wird StrictMode bewusst nicht aktiviert.
  • Die begrenzte Tabellenbreite von 640px ist eine Anwendungsentscheidung unter CSS; alle visuellen Komponenten stammen von EUI.

Benutzerdefinierter Theme-Hinweis

Das aktive Theme innerhalb eines Providers verwenden, statt benutzerdefiniertes Markup an generierte Komponentenklassen zu koppeln.

jsx
import React from 'react';
import { useEuiTheme } from '@elastic/eui';
export function InvestigationNote({ children }) {
  const { euiTheme } = useEuiTheme();
  return <aside style={{ padding: euiTheme.size.m, color: euiTheme.colors.textParagraph, borderLeft: `2px solid ${euiTheme.colors.primary}` }}>{children}</aside>;
}

Code-Referenz

  • InvestigationNote unter EuiProvider rendern. Der Hinweis übernimmt den ausgewählten Darstellungsmodus.
04

Elastic UI-Designsystem: Einrichtung für AI-Agenten

Ausgangspunkt für die Implementierung

Die offizielle EUI-Anleitung dokumentiert die Installation mit Yarn und die Unterstützung von React 18. Einschränkungen bei Bundlern ohne Webpack sind dokumentiert; dieses spezielle native Beispiel wurde mit esbuild gebündelt und im Browser getestet. Verwenden Sie eine von Ihrem Grundgerüst unterstützte Node.js-Version.

sh
yarn create vite elastic-investigation --template react
cd elastic-investigation
yarn add [email protected] [email protected] @elastic/[email protected] @elastic/[email protected] @elastic/datemath @emotion/react @emotion/css moment
# Replace src/main.jsx with the complete example above.
yarn dev

Ein Prompt für dein Projekt

Agenten-Prompt
Erstellen Sie eine Oberfläche zur Untersuchung von Logs mit Elastic UI 123.0.0, Borealis 8.1.0 und React 18. Lesen Sie den bereitgestellten Theme-Export und den nativen Quellcode. Verwenden Sie EuiProvider, eine gesteuerte EuiBasicTable sowie barrierefreie Filter für Suche und Schweregrad. Speichern Sie Ereignisse anhand ihrer stabilen ID, erhalten Sie Lesezeichen beim Filtern und unterscheiden Sie den lokalen UI-Zustand von einer echten Elasticsearch-Abfrage oder Persistenzantwort. Halten Sie die Tabelle auf Mobilgeräten innerhalb des Ansichtsbereichs.
05

Elastic UI-Designsystem: Quellen und Geltungsbereich

Ein von OpenDesign verfasster Leitfaden und ein fiktiver lokaler Log-Explorer mit nativem Elastic UI 123.0.0 und Borealis 8.1.0. Die Beispieldaten sind keine Live-Telemetriedaten, und die Speicheraktion erfolgt ausschließlich im Arbeitsspeicher. Für EUI gelten eigene Lizenzbedingungen nach Elastic/SSPL; beachten Sie für Ihre Distribution die offizielle Paketlizenz.