Datenanalyse · Neue Ressource

Palantir Blueprint-Designsystem.

Erstellen Sie mit Blueprint einen datenintensiven Arbeitsbereich: mit verifizierten Typografie- und Intent-Tokens, einer Tabelle mit auswählbarem Datensatz, einem Prüfbereich und vollständigem React-Quellcode.

OpenDesign-Leitfaden8 Kapitel60 ReferenzeinträgeOriginaler Anwendungsleitfaden
01

Vorschau der Benutzeroberfläche des Palantir Blueprint-Designsystems

Nach Name oder Typ filtern, einen Datensatz auswählen, die Zeilendichte ändern, das Erscheinungsbild wechseln und eine Prüfnotiz validieren, bevor der lokale Status aktualisiert wird.

Datensatztabelle und PrüfbereichVollständiges Beispiel öffnen
Natives Blueprint 6.21.0 mit React 18.3.1. Originale, responsive Arbeitsbereichskomposition; weder Server noch gespeicherte Prüfung. · Implementierungsreferenz
02

Designreferenz für das Palantir Blueprint-Designsystem

Blueprint Core 6.21.0 veröffentlicht CSS und native React-Komponenten. Dies sind ausgewählte Tokenwerte für das helle Design; verwende statt einer manuellen Umkehrung das dunkle Design der Bibliothek. Layoutentscheidungen der Anwendung sind im Beispiel CSS gekennzeichnet.

Farbrollen und Interaktionszustände

Quelle
Name / RegelWert / KonfigurationVerwendung
--bp-intent-primary-rest#2d72d2 Verwende die benannte semantische Rolle; ordne Zustände und Vordergrundfarben einander zu.
--bp-intent-primary-hover#215db0 Verwende die benannte semantische Rolle; ordne Zustände und Vordergrundfarben einander zu.
--bp-intent-primary-active#184a90 Verwende die benannte semantische Rolle; ordne Zustände und Vordergrundfarben einander zu.
--bp-intent-primary-disabled#4c90f0 Verwende die benannte semantische Rolle; ordne Zustände und Vordergrundfarben einander zu.
--bp-intent-primary-foreground#ffffff Verwende die benannte semantische Rolle; ordne Zustände und Vordergrundfarben einander zu.
--bp-intent-success-rest#238551 Verwende die benannte semantische Rolle; ordne Zustände und Vordergrundfarben einander zu.
--bp-intent-success-hover#1c6e42 Verwende die benannte semantische Rolle; ordne Zustände und Vordergrundfarben einander zu.
--bp-intent-success-active#165a36 Verwende die benannte semantische Rolle; ordne Zustände und Vordergrundfarben einander zu.
--bp-intent-success-disabled#32a467 Verwende die benannte semantische Rolle; ordne Zustände und Vordergrundfarben einander zu.
--bp-intent-success-foreground#ffffff Verwende die benannte semantische Rolle; ordne Zustände und Vordergrundfarben einander zu.
--bp-intent-warning-rest#c87619 Verwende die benannte semantische Rolle; ordne Zustände und Vordergrundfarben einander zu.
--bp-intent-warning-hover#935610 Verwende die benannte semantische Rolle; ordne Zustände und Vordergrundfarben einander zu.
--bp-intent-warning-active#77450d Verwende die benannte semantische Rolle; ordne Zustände und Vordergrundfarben einander zu.
--bp-intent-warning-disabled#ec9a3c Verwende die benannte semantische Rolle; ordne Zustände und Vordergrundfarben einander zu.
--bp-intent-warning-foreground#111418 Verwende die benannte semantische Rolle; ordne Zustände und Vordergrundfarben einander zu.
--bp-intent-danger-rest#cd4246 Verwende die benannte semantische Rolle; ordne Zustände und Vordergrundfarben einander zu.
--bp-intent-danger-hover#ac2f33 Verwende die benannte semantische Rolle; ordne Zustände und Vordergrundfarben einander zu.
--bp-intent-danger-active#8e292c Verwende die benannte semantische Rolle; ordne Zustände und Vordergrundfarben einander zu.
--bp-intent-danger-disabled#e76a6e Verwende die benannte semantische Rolle; ordne Zustände und Vordergrundfarben einander zu.
--bp-intent-danger-foreground#ffffff Verwende die benannte semantische Rolle; ordne Zustände und Vordergrundfarben einander zu.

Typografische Skalierung und Schriftschnitte

Quelle
Name / RegelWert / KonfigurationVerwendung
--bp-typography-size-body-x-small10pxSkalierung für Fließtext, Beschriftungen und ergänzende Daten; kleine Metadaten sollten nicht zur primären Leseschrift werden.
--bp-typography-size-body-small12pxSkalierung für Fließtext, Beschriftungen und ergänzende Daten; kleine Metadaten sollten nicht zur primären Leseschrift werden.
--bp-typography-size-body-medium14pxSkalierung für Fließtext, Beschriftungen und ergänzende Daten; kleine Metadaten sollten nicht zur primären Leseschrift werden.
--bp-typography-size-body-large16pxSkalierung für Fließtext, Beschriftungen und ergänzende Daten; kleine Metadaten sollten nicht zur primären Leseschrift werden.
--bp-typography-size-heading-small16pxWende die Rolle auf der entsprechenden Hierarchieebene an; Tabellenwerte können zusätzlich tabellarische Ziffern verwenden.
--bp-typography-size-heading-medium20pxWende die Rolle auf der entsprechenden Hierarchieebene an; Tabellenwerte können zusätzlich tabellarische Ziffern verwenden.
--bp-typography-size-heading-large24pxWende die Rolle auf der entsprechenden Hierarchieebene an; Tabellenwerte können zusätzlich tabellarische Ziffern verwenden.
--bp-typography-size-heading-x-large28pxWende die Rolle auf der entsprechenden Hierarchieebene an; Tabellenwerte können zusätzlich tabellarische Ziffern verwenden.
--bp-typography-size-heading-display46pxWende die Rolle auf der entsprechenden Hierarchieebene an; Tabellenwerte können zusätzlich tabellarische Ziffern verwenden.
--bp-typography-size-code-small12pxWende die Rolle auf der entsprechenden Hierarchieebene an; Tabellenwerte können zusätzlich tabellarische Ziffern verwenden.
--bp-typography-size-code-medium13pxWende die Rolle auf der entsprechenden Hierarchieebene an; Tabellenwerte können zusätzlich tabellarische Ziffern verwenden.
--bp-typography-size-code-large14pxWende die Rolle auf der entsprechenden Hierarchieebene an; Tabellenwerte können zusätzlich tabellarische Ziffern verwenden.
--bp-typography-weight-default400Wende die Rolle auf der entsprechenden Hierarchieebene an; Tabellenwerte können zusätzlich tabellarische Ziffern verwenden.
--bp-typography-weight-bold600Wende die Rolle auf der entsprechenden Hierarchieebene an; Tabellenwerte können zusätzlich tabellarische Ziffern verwenden.
--bp-typography-line-height-default1.28581Wende die Rolle auf der entsprechenden Hierarchieebene an; Tabellenwerte können zusätzlich tabellarische Ziffern verwenden.
--bp-typography-line-height-large1.5Wende die Rolle auf der entsprechenden Hierarchieebene an; Tabellenwerte können zusätzlich tabellarische Ziffern verwenden.

Oberflächen, Rahmen und semantische Textfarben

Quelle
Name / RegelWert / KonfigurationVerwendung
--bp-surface-border-color-default#5f6b7c1fVerwende die benannte semantische Rolle; ordne Zustände und Vordergrundfarben einander zu.
--bp-surface-border-color-strong#5f6b7c40Verwende die benannte semantische Rolle; ordne Zustände und Vordergrundfarben einander zu.
--bp-surface-border-width1pxVerwende die benannte semantische Rolle; ordne Zustände und Vordergrundfarben einander zu.
--bp-surface-border-radius4pxVerwende die benannte semantische Rolle; ordne Zustände und Vordergrundfarben einander zu.
--bp-surface-spacing4pxVerwende die benannte semantische Rolle; ordne Zustände und Vordergrundfarben einander zu.
--bp-surface-background-color-default-rest#ffffff Verwende die benannte semantische Rolle; ordne Zustände und Vordergrundfarben einander zu.
--bp-surface-background-color-default-hover#f6f7f9 Verwende die benannte semantische Rolle; ordne Zustände und Vordergrundfarben einander zu.
--bp-typography-color-default-rest#1c2127 Verwende die benannte semantische Rolle; ordne Zustände und Vordergrundfarben einander zu.
--bp-typography-color-muted#5f6b7c Verwende die benannte semantische Rolle; ordne Zustände und Vordergrundfarben einander zu.

Fokus und Bewegung

Quelle
Name / RegelWert / KonfigurationVerwendung
--bp-emphasis-transition-duration100msVerwende die benannte semantische Rolle; ordne Zustände und Vordergrundfarben einander zu.
--bp-emphasis-ease-defaultcubic-bezier(0.4, 1, 0.75, 0.9)Verwende die benannte semantische Rolle; ordne Zustände und Vordergrundfarben einander zu.
--bp-emphasis-ease-bouncecubic-bezier(0.54, 1.12, 0.38, 1.11)Verwende die benannte semantische Rolle; ordne Zustände und Vordergrundfarben einander zu.
--bp-emphasis-focus-color#2d72d2 Verwende die benannte semantische Rolle; ordne Zustände und Vordergrundfarben einander zu.
--bp-emphasis-focus-width2pxVerwende die benannte semantische Rolle; ordne Zustände und Vordergrundfarben einander zu.
--bp-emphasis-focus-offset2pxVerwende die benannte semantische Rolle; ordne Zustände und Vordergrundfarben einander zu.
--bp-emphasis-motion-reduced0Verwende die benannte semantische Rolle; ordne Zustände und Vordergrundfarben einander zu.

Native Komponenten im Arbeitsbereich für Datensätze

Quelle
Name / RegelWert / KonfigurationVerwendung
HTMLTablestriped · interactive · condensedNative semantische Tabelle; die condensed prop ändert die Dichte, ohne die Daten zu verändern.
InputGroupvalue · onChange · intentKontrollierte Suche und Prüfnotiz; die Validierung der Anwendung setzt die danger-Intention.
FormGrouplabelFor · helperText · intentVerknüpfe eine sichtbare Feldbeschriftung und erläutere, warum die Notiz ungültig ist.
HTMLSelectoptions · value · onChangeEin natives Select für die kleine, festgelegte Auswahl an Datensatztypen.
Tagminimal · intentKombiniere den Statustext mit einer Erfolgs- oder Warnkennzeichnung.
Buttonintent="primary" · type="submit"Schließe die lokale Prüfung über ein echtes Formular ab; Auswahlschaltflächen bleiben nachrangig.
Switchchecked · onChangeUnabhängige Steuerelemente für Erscheinungsbild und Dichte.
Calloutintent · titleErläutere, wenn keine Ergebnisse vorliegen, oder beschreibe das Ergebnis; vermittle den Status nicht allein über Farbe.
03

Vollständiger Leitfaden zum Palantir Blueprint-Designsystem

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

DESIGN-palantir-blueprint.md

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

Leitfaden herunterladen

Ein um Daten herum gestalteter Arbeitsbereich für das Palantir Blueprint-Designsystem

Kompakte Steuerelemente mit eindeutiger Lesereihenfolge

Blueprint eignet sich, wenn eine Ansicht eine Sammlung, Filter, Statusangaben und kontextbezogene Aktionen kombiniert. Im Beispiel befindet sich die Datensatztabelle links und der ausgewählte Datensatz rechts. So lassen sich Datensätze vergleichen, ohne für jeden eine neue Seite zu öffnen. Im Detailbereich befindet sich die bearbeitbare Prüfnotiz; die Tabelle dient der schnellen Übersicht.

Aus diesem OpenDesign-Leitfaden

Verwende den Paketvertrag von v6

Das Beispiel wird mit @blueprintjs/core 6.21.0 kompiliert. Sein CSS-Namespace lautet bp6, und seine veröffentlichten semantischen Tokens beginnen mit --bp-. Ein älteres bp5-Stylesheet ist kein Ersatz für die Komponenten von v6 unter CSS. Importiere das Paket-Stylesheet einmal am Einstiegspunkt der Anwendung und beschränke anschließend die Layoutregeln der Anwendung auf eine separate Klasse.

Farbintentionen und Farbrollen des Palantir Blueprint-Designsystems

Datensatzstatus und Auswahl getrennt halten

Ein Tag mit Warnkennzeichnung bedeutet, dass der Datensatz geprüft werden muss; die primär eingefärbte Zeile kennzeichnet die Auswahl. Diese Bedeutungen sind voneinander unabhängig. Wenn ein Datensatz als geprüft markiert wird, ändern sich Beschriftung und Farbintention zu „Erfolg“, während die Auswahl auf demselben Datensatz bleibt. Für jeden Status verwendet die Tabelle zusätzlich Text, damit die Bedeutung nicht allein von der Farbe abhängt.

Den Dunkelmodus an der Komponentengrenze anwenden

Das Beispiel versieht seinen Wrapper mit bp6-dark, sodass native Komponenten ihre dunkle Darstellung verwenden können. Die Werte für das helle Design oben sind eine Referenzaufnahme und keine Aufforderung, jede Komponente zu überschreiben. Wenn du ein Portal wie Dialog einführst, stelle sicher, dass dessen gerenderter Inhalt denselben Designkontext erhält; ein Wrapper, der das Portal nicht enthält, reicht nicht aus.

Typografie für Datensätze und Metadaten im Palantir Blueprint-Designsystem

Lies zuerst die Fließtext-Skalierung, bevor du Überschriften auswählst

Die veröffentlichten Schriftgrößen für Fließtext umfassen 10, 12, 14 und 16px; die mittlere Fließtextgröße beträgt 14px. Datensatznamen bleiben auf der primären Lesestufe. IDs und Datensatztypen verwenden ergänzenden Text, während numerische Datensatzanzahlen tabellarische Ziffern nutzen, damit sich verändernde Werte leicht vergleichen lassen. Der Leitfaden empfiehlt keine 10px für primäre Inhalte.

Dem Detailbereich eine kompakte Hierarchie geben

Der Detailbereich verwendet eine Überschrift mit 20px sowie eine Definitionsliste für ID, zuständige Person, Typ und Anzahl. Beschriftungen und Werte sind stabil in zwei Spalten angeordnet. Die Prüfnotiz folgt nach einer Trennlinie auf diese Angaben, damit sie nicht mit einem Tabellenfilter verwechselt wird.

Tabelle, Filter und Detailbereich im Palantir Blueprint-Designsystem

Die Semantik der Tabelle beibehalten

HTMLTable stellt eine native Tabelle im Blueprint-Stil bereit. Schaltflächen in der ersten Zelle wählen Datensätze aus und sind weiterhin per Tastatur erreichbar; im Beispiel ist ein ausschließlich mit dem Mauszeiger bedienbarer Zeilen-Handler nicht der einzige Weg zur Auswahl. Die interaktive prop sorgt für eine Hover-Darstellung der Zeilen, und condensed ändert unabhängig von der Filterung die Dichte.

Den kontrollierten Datenfluss sichtbar machen

  1. Einen Datensatz anhand seines angezeigten Namens finden.
  2. Dieselbe Sammlung mit der Typauswahl eingrenzen.
  3. Die Namensschaltfläche auswählen, um den Detailbereich zu laden.
  4. Eine Prüfnotiz eingeben und die lokale Prüfung absenden.

Abstände, Oberflächen und Dichte im Palantir Blueprint-Designsystem

Eine kleinere Einheit verwenden, ohne alle Abstände winzig zu machen

Das veröffentlichte Token für Oberflächenabstände beträgt 4px. Der Arbeitsbereich verwendet Vielfache davon: 12px zwischen Filtersteuerelementen, 20px zwischen Sammlung und Detailbereich sowie 24px rund um das Desktop-Beispiel. Dies sind Kompositionsentscheidungen aus CSS. Der Token für einen Rahmenradius von 4px sorgt für eine zurückhaltende Geometrie von Steuerelementen und Oberflächen.

Das Layout ändern, bevor Beschriftungen geopfert werden

Am Anwendungs-Breakpoint von 800px im Beispiel wird der Inspektor unter die Sammlung verschoben. Die Filter umbrechen, der Innenabstand des Hauptbereichs wird auf 16px reduziert und die Tabelle erhält bei Bedarf einen eigenen horizontalen Scrollbereich. Dieser Breakpoint gilt für diesen Arbeitsbereich und wird nicht als offizieller, universeller Blueprint-Breakpoint dargestellt.

Palantir Blueprint Designsystemprüfung und leere Zustände

Die Validierung gehört zum Prüfvorgang

Beim Absenden einer leeren Notiz erhalten InputGroup und FormGroup die Fehlerabsicht (danger), es wird erklärender Hilfetext angezeigt und der Fokus auf das Feld gesetzt. Durch die Eingabe von Text wird der Fehler behoben. Bei einer gültigen Übermittlung wird nur der ausgewählte lokale Datensatz geändert, die Notiz geleert und ein Erfolgs-Callout angezeigt, das ausdrücklich darauf hinweist, dass keine Daten gesendet wurden.

Die Möglichkeit zur Wiederherstellung gehört direkt neben die leere Sammlung

Der Callout für keine Treffer bietet die Option „Filter löschen“. Damit werden sowohl die Suchanfrage als auch die Typauswahl zurückgesetzt und die gesamte Sammlung wieder angezeigt. Es werden keine Zeilen gelöscht und der Inspektor bleibt unverändert. Die folgenden Zustandsgrenzen sind beabsichtigt:

  • Durch die Auswahl ändert sich der geprüfte Datensatz, nicht dessen Prüfstatus.
  • Der Kompaktmodus ändert die Dichte, nicht die Reihenfolge der Datensätze.
  • Das Design ändert die visuelle Darstellung, nicht die aktuellen Filter.
  • Eine erfolgreiche lokale Prüfung ändert einen Datensatz und gibt das Ergebnis bekannt.

Palantir Blueprint Designsystem: Fokus und barrierefreie Komponentennutzung

Jedes native Steuerelement beschriften

InputGroup erhält einen zugänglichen Namen für die Suche und eine id für das beschriftete Prüffeld. HTMLSelect hat einen eigenen Namen, Switch zeigt sichtbare Beschriftungen an und jeder Datensatz wird über eine echte Schaltfläche geöffnet. Verwenden Sie diese Bibliotheks-APIs, statt die Steuerelemente durch gestaltete div-Elemente zu ersetzen.

Eine sichtbare Fokusmarkierung beibehalten

Die Paketdokumentation sieht eine Fokusbreite von 2px und einen Fokusabstand von 2px vor. Die Fokusmarkierung muss auf Cards und ausgewählten Zeilen sichtbar bleiben. Tastaturnutzende sollten die Filter, Zeilenschaltflächen und das Prüfungsformular in Dokumentreihenfolge erreichen können. Der Statusabsatz und der Erfolgs-Callout des Beispiels vermitteln Ergebnisse, ohne die lesende Person auf einen anderen Bildschirm zu versetzen.

Palantir Blueprint Designsystem: Installation und Anwendungsgrenzen

Denselben Quellcode wie im Beispiel ausführen

Der vollständige App-Quellcode und die Anwendung CSS sind unten enthalten. App wird in das Stammelement eingebunden, das von der Vite React-Vorlage erzeugt wird. Die Installation des festgelegten Kernpakets stellt die nativen Komponenten und das Paket CSS bereit; für das textbasierte Beispiel ist kein verborgenes Design-Asset erforderlich.

Die Prüfung um einen echten Persistenzvertrag erweitern

Palantir Blueprint Designsystem: Komponentenbeispiele

main.jsx — vollständige Anwendung zur Datensatzprüfung

Eine vollständige native Komposition mit Filtern, Auswahl, Dichte, Design, Feldvalidierung und lokalem Prüfergebnis.

jsx
import React, { useState } from "react";
import { createRoot } from "react-dom/client";
import {
  Button,
  Card,
  Callout,
  FormGroup,
  HTMLSelect,
  HTMLTable,
  InputGroup,
  Switch,
  Tag,
} from "@blueprintjs/core";
import "@blueprintjs/core/lib/css/blueprint.css";
import "./blueprint.css";
const initial = [
  {
    id: "D-1042",
    name: "Harbor sensors",
    type: "Telemetry",
    rows: "18,420",
    owner: "Maya",
    status: "Reviewed",
  },
  {
    id: "D-1043",
    name: "Transit stops",
    type: "Reference",
    rows: "842",
    owner: "Alex",
    status: "Needs review",
  },
  {
    id: "D-1044",
    name: "Water samples",
    type: "Field survey",
    rows: "2,608",
    owner: "Sam",
    status: "Reviewed",
  },
  {
    id: "D-1045",
    name: "Street survey",
    type: "Field survey",
    rows: "4,120",
    owner: "Lee",
    status: "Needs review",
  },
];
function App() {
  const [dark, setDark] = useState(false),
    [compact, setCompact] = useState(false),
    [query, setQuery] = useState(""),
    [rows, setRows] = useState(initial),
    [selected, setSelected] = useState(initial[1]),
    [note, setNote] = useState(""),
    [notice, setNotice] = useState(""),
    [error, setError] = useState(false),
    [type, setType] = useState("All");
  const visible = rows.filter(
    (r) =>
      r.name.toLowerCase().includes(query.toLowerCase()) &&
      (type === "All" || r.type === type),
  );
  function review(e) {
    e.preventDefault();
    if (!note.trim()) {
      setError(true);
      document.getElementById("review-note").focus();
      return;
    }
    const updated = { ...selected, status: "Reviewed" };
    setRows(rows.map((r) => (r.id === selected.id ? updated : r)));
    setSelected(updated);
    setNotice(
      `${selected.name} marked reviewed in this local example. No data was sent.`,
    );
    setNote("");
    setError(false);
  }
  return (
    <main className={"specimen " + (dark ? "bp6-dark" : "")}>
      <header>
        <div>
          <span className="eyebrow">BLUEPRINT · DATA WORKSPACE</span>
          <h1 className="bp6-heading">Dataset review</h1>
          <p className="bp6-text-muted">
            Inspect a record and attach a review note.
          </p>
        </div>
        <Switch
          label="Dark theme"
          checked={dark}
          onChange={(e) => setDark(e.target.checked)}
        />
      </header>
      <div className="workbench">
        <Card className="collection">
          <div className="toolbar">
            <InputGroup
              aria-label="Find a dataset"
              placeholder="Find a dataset…"
              value={query}
              onChange={(e) => setQuery(e.target.value)}
            />
            <HTMLSelect
              aria-label="Dataset type"
              value={type}
              onChange={(e) => setType(e.target.value)}
              options={["All", "Telemetry", "Reference", "Field survey"]}
            />
            <Switch
              label="Compact rows"
              checked={compact}
              onChange={(e) => setCompact(e.target.checked)}
            />
          </div>
          <p className="bp6-text-small bp6-text-muted" role="status">
            {visible.length} matching datasets
          </p>
          <div className="table-scroll">
            <HTMLTable
              striped
              interactive
              condensed={compact}
              style={{ width: "100%" }}
            >
              <thead>
                <tr>
                  <th>Name</th>
                  <th>Records</th>
                  <th>Status</th>
                </tr>
              </thead>
              <tbody>
                {visible.map((r) => (
                  <tr
                    key={r.id}
                    className={selected.id === r.id ? "selected" : ""}
                  >
                    <td>
                      <Button
                        variant="minimal"
                        onClick={() => {
                          setSelected(r);
                          setError(false);
                          setNote("");
                        }}
                        text={r.name}
                      />
                      <div className="bp6-text-small bp6-text-muted">
                        {r.id} · {r.type}
                      </div>
                    </td>
                    <td className="numeric">{r.rows}</td>
                    <td>
                      <Tag
                        minimal
                        intent={r.status === "Reviewed" ? "success" : "warning"}
                      >
                        {r.status}
                      </Tag>
                    </td>
                  </tr>
                ))}
              </tbody>
            </HTMLTable>
          </div>
          {!visible.length && (
            <Callout title="No matching datasets">
              Clear the search or choose a different dataset type.
              <Button
                variant="minimal"
                onClick={() => {
                  setQuery("");
                  setType("All");
                }}
              >
                Clear filters
              </Button>
            </Callout>
          )}
        </Card>
        <Card className="inspector">
          <span className="eyebrow">SELECTED DATASET</span>
          <h2 className="bp6-heading">{selected.name}</h2>
          <dl>
            <dt>Dataset ID</dt>
            <dd>
              <code>{selected.id}</code>
            </dd>
            <dt>Owner</dt>
            <dd>{selected.owner}</dd>
            <dt>Type</dt>
            <dd>{selected.type}</dd>
            <dt>Records</dt>
            <dd>{selected.rows}</dd>
          </dl>
          <form onSubmit={review}>
            <FormGroup
              label="Review note"
              labelFor="review-note"
              intent={error ? "danger" : "none"}
              helperText={
                error
                  ? "Add a note describing what you checked."
                  : "A short note keeps the decision understandable."
              }
            >
              <InputGroup
                id="review-note"
                value={note}
                intent={error ? "danger" : "none"}
                aria-invalid={error}
                onChange={(e) => {
                  setNote(e.target.value);
                  setError(false);
                }}
              />
            </FormGroup>
            <Button intent="primary" type="submit" fill>
              Mark reviewed locally
            </Button>
          </form>
          <p className="bp6-text-small bp6-text-muted">
            Selection, filters and review notes exist only in this preview.
          </p>
        </Card>
      </div>
      {notice && (
        <Callout intent="success" role="status">
          {notice}
        </Callout>
      )}
      <footer>
        Native Blueprint 6.21.0 · HTMLTable, Card, FormGroup, InputGroup,
        Switch, Tag and Callout.
      </footer>
    </main>
  );
}
createRoot(document.getElementById("root")).render(<App />);

Code-Referenz

  • Speichern Sie dies als src/main.jsx und das nächste Beispiel als src/blueprint.css.
  • Der Aufruf von createRoot verwendet das Stammelement in der Vite-React-Datei index.html.

blueprint.css — responsives Layout des Arbeitsbereichs

Die Layoutregeln der Anwendung ergänzen die importierten nativen Komponenten von CSS. Der Breakpoint von 800px und der 260px breite Inspektor sind explizite Festlegungen dieses Beispiels.

css
* {
  box-sizing: border-box;
}
body {
  margin: 0;
}
.specimen {
  padding: 24px;
  background: #f6f7f9;
  color: #1c2127;
  font-size: 14px;
}
.specimen.bp6-dark {
  background: #252a31;
  color: #f6f7f9;
}
.specimen header {
  display: flex;
  justify-content: space-between;
  gap: 16px;
  align-items: center;
  margin-bottom: 24px;
}
.eyebrow {
  font-size: 10px;
  font-weight: 600;
  letter-spacing: 0.08em;
  color: var(--bp-typography-color-muted);
}
h1.bp6-heading {
  margin: 8px 0;
  font-size: 28px;
}
.workbench {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 260px;
  gap: 20px;
}
.collection,
.inspector {
  min-width: 0;
}
.toolbar {
  display: flex;
  flex-wrap: wrap;
  gap: 12px;
  align-items: center;
}
.toolbar > .bp6-input-group {
  flex: 1;
  min-width: 150px;
}
.toolbar .bp6-control {
  margin: 0;
}
.table-scroll {
  overflow: auto;
}
table td {
  vertical-align: middle !important;
}
.numeric {
  font-variant-numeric: tabular-nums;
}
tr.selected td {
  background: #2d72d20d !important;
}
.inspector h2 {
  font-size: 20px;
  margin-top: 12px;
}
.inspector dl {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 12px;
  margin: 24px 0;
}
.inspector dt {
  color: var(--bp-typography-color-muted);
}
.inspector dd {
  margin: 0;
}
.inspector form {
  border-top: 1px solid var(--bp-surface-border-color-default);
  padding-top: 20px;
}
.inspector p {
  margin: 16px 0 0;
}
.specimen > .bp6-callout {
  margin-top: 20px;
}
.specimen footer {
  font-size: 11px;
  margin-top: 24px;
  color: var(--bp-typography-color-muted);
}
@media (max-width: 800px) {
  .workbench {
    grid-template-columns: 1fr;
  }
  .specimen {
    padding: 16px;
  }
  .specimen header {
    align-items: start;
  }
  .toolbar {
    gap: 16px;
  }
  h1.bp6-heading {
    font-size: 24px;
  }
}
@media (prefers-reduced-motion: reduce) {
  * {
    transition: none !important;
  }
}

.bp6-dark .eyebrow,
.bp6-dark .inspector dt,
.bp6-dark footer {
  color: #abb3bf;
}

Code-Referenz

  • Die Klasse bp6-dark aktiviert das Bibliotheksdesign; der Hintergrund der Beispielansicht gehört zur Anwendung CSS.
04

Palantir Blueprint Designsystem: Agenteneinrichtung

Ausgangspunkt für die Implementierung

Die native Vorschau wurde mit React 18.3.1 und Blueprint 6.21.0 erstellt und ausgeführt. Verwenden Sie eine von Ihrer gewählten Vite-Version unterstützte Node.js-Version. Beide Anwendungsdateien sind oben enthalten.

sh
npm create vite@latest blueprint-review -- --template react
cd blueprint-review
npm install
npm install [email protected] [email protected] @blueprintjs/[email protected]
# Replace src/main.jsx and add src/blueprint.css using the complete examples.
npm run dev

Ein Prompt für dein Projekt

Agenten-Prompt
Verwenden Sie Blueprint 6.21.0, um einen Arbeitsbereich zur Datensatzprüfung zu erstellen. Lesen Sie die bereitgestellten Tokens und das vollständige Beispiel React/CSS. Behalten Sie die native HTMLTable, beschriftete InputGroup/FormGroup, Status-Tags und per Tastatur erreichbare Zeilenauswahl bei. Filter, Auswahl, Dichte, Darstellung und Prüfstatus müssen voneinander unabhängig bleiben. Ergänzen Sie den tatsächlichen Speicherdienst erst, wenn dessen API vorliegt; zeigen Sie ausstehende und fehlgeschlagene Antworten an, ohne die Notiz zu verlieren. Behalten Sie den responsiven Inspektor und die sichtbaren Fokusmarkierungen bei.
05

Palantir Blueprint Designsystem: Quellen und Geltungsbereich

OpenDesign Anwendungsleitfaden für Blueprint 6.21.0 mit einem eigens erstellten Beispiel zur Datensatzprüfung, das das tatsächliche Paket React verwendet. Datensatznamen und Prüfergebnisse sind lokale Beispieldaten. Das Layout des Arbeitsbereichs ist Anwendungscode; die Referenzwerte stammen aus der versionierten, veröffentlichten Paketversion.