Analisi dei dati · Nuova risorsa

Palantir Blueprint Sistema di progettazione.

Crea un’area di lavoro dati ad alta densità con Blueprint: token verificati per tipografia e intenti, tabella dati selezionabile, pannello di revisione e codice sorgente completo in React.

Guida OpenDesign8 capitoli60 voci di riferimentoGuida applicativa originale
01

Anteprima dell’interfaccia del sistema di progettazione sistema di design Palantir Blueprint

Filtra per nome o tipo, seleziona un set di dati, modifica la densità delle righe, cambia aspetto e convalida una nota di revisione prima di aggiornare lo stato locale.

Tabella dei set di dati e pannello di revisioneApri l’esempio completo
Blueprint nativo 6.21.0 con React 18.3.1. Composizione originale e adattabile dell’area di lavoro; nessun server o revisione salvata. · Riferimento per l’implementazione
02

Riferimento di progettazione per il sistema di progettazione sistema di design Palantir Blueprint

Blueprint core 6.21.0 pubblicato CSS e componenti nativi React. Questi sono valori selezionati dei token del tema chiaro; usa il tema scuro della libreria invece di invertirli manualmente. Le scelte di layout dell’applicazione sono indicate nell’esempio CSS.

Colori semantici e stati di interazione

Fonte
Nome / regolaValore / configurazioneUtilizzo
--bp-intent-primary-rest#2d72d2 Usa il ruolo semantico indicato; mantieni abbinate le combinazioni di stato e colore di primo piano.
--bp-intent-primary-hover#215db0 Usa il ruolo semantico indicato; mantieni abbinate le combinazioni di stato e colore di primo piano.
--bp-intent-primary-active#184a90 Usa il ruolo semantico indicato; mantieni abbinate le combinazioni di stato e colore di primo piano.
--bp-intent-primary-disabled#4c90f0 Usa il ruolo semantico indicato; mantieni abbinate le combinazioni di stato e colore di primo piano.
--bp-intent-primary-foreground#ffffff Usa il ruolo semantico indicato; mantieni abbinate le combinazioni di stato e colore di primo piano.
--bp-intent-success-rest#238551 Usa il ruolo semantico indicato; mantieni abbinate le combinazioni di stato e colore di primo piano.
--bp-intent-success-hover#1c6e42 Usa il ruolo semantico indicato; mantieni abbinate le combinazioni di stato e colore di primo piano.
--bp-intent-success-active#165a36 Usa il ruolo semantico indicato; mantieni abbinate le combinazioni di stato e colore di primo piano.
--bp-intent-success-disabled#32a467 Usa il ruolo semantico indicato; mantieni abbinate le combinazioni di stato e colore di primo piano.
--bp-intent-success-foreground#ffffff Usa il ruolo semantico indicato; mantieni abbinate le combinazioni di stato e colore di primo piano.
--bp-intent-warning-rest#c87619 Usa il ruolo semantico indicato; mantieni abbinate le combinazioni di stato e colore di primo piano.
--bp-intent-warning-hover#935610 Usa il ruolo semantico indicato; mantieni abbinate le combinazioni di stato e colore di primo piano.
--bp-intent-warning-active#77450d Usa il ruolo semantico indicato; mantieni abbinate le combinazioni di stato e colore di primo piano.
--bp-intent-warning-disabled#ec9a3c Usa il ruolo semantico indicato; mantieni abbinate le combinazioni di stato e colore di primo piano.
--bp-intent-warning-foreground#111418 Usa il ruolo semantico indicato; mantieni abbinate le combinazioni di stato e colore di primo piano.
--bp-intent-danger-rest#cd4246 Usa il ruolo semantico indicato; mantieni abbinate le combinazioni di stato e colore di primo piano.
--bp-intent-danger-hover#ac2f33 Usa il ruolo semantico indicato; mantieni abbinate le combinazioni di stato e colore di primo piano.
--bp-intent-danger-active#8e292c Usa il ruolo semantico indicato; mantieni abbinate le combinazioni di stato e colore di primo piano.
--bp-intent-danger-disabled#e76a6e Usa il ruolo semantico indicato; mantieni abbinate le combinazioni di stato e colore di primo piano.
--bp-intent-danger-foreground#ffffff Usa il ruolo semantico indicato; mantieni abbinate le combinazioni di stato e colore di primo piano.

Scala e pesi tipografici

Fonte
Nome / regolaValore / configurazioneUtilizzo
--bp-typography-size-body-x-small10pxCorpo del testo, etichette e dati di supporto; non usare i metadati piccoli come dimensione principale di lettura.
--bp-typography-size-body-small12pxCorpo del testo, etichette e dati di supporto; non usare i metadati piccoli come dimensione principale di lettura.
--bp-typography-size-body-medium14pxCorpo del testo, etichette e dati di supporto; non usare i metadati piccoli come dimensione principale di lettura.
--bp-typography-size-body-large16pxCorpo del testo, etichette e dati di supporto; non usare i metadati piccoli come dimensione principale di lettura.
--bp-typography-size-heading-small16pxApplica il ruolo al livello gerarchico indicato; per i valori nelle tabelle puoi usare anche le cifre tabulari.
--bp-typography-size-heading-medium20pxApplica il ruolo al livello gerarchico indicato; per i valori nelle tabelle puoi usare anche le cifre tabulari.
--bp-typography-size-heading-large24pxApplica il ruolo al livello gerarchico indicato; per i valori nelle tabelle puoi usare anche le cifre tabulari.
--bp-typography-size-heading-x-large28pxApplica il ruolo al livello gerarchico indicato; per i valori nelle tabelle puoi usare anche le cifre tabulari.
--bp-typography-size-heading-display46pxApplica il ruolo al livello gerarchico indicato; per i valori nelle tabelle puoi usare anche le cifre tabulari.
--bp-typography-size-code-small12pxApplica il ruolo al livello gerarchico indicato; per i valori nelle tabelle puoi usare anche le cifre tabulari.
--bp-typography-size-code-medium13pxApplica il ruolo al livello gerarchico indicato; per i valori nelle tabelle puoi usare anche le cifre tabulari.
--bp-typography-size-code-large14pxApplica il ruolo al livello gerarchico indicato; per i valori nelle tabelle puoi usare anche le cifre tabulari.
--bp-typography-weight-default400Applica il ruolo al livello gerarchico indicato; per i valori nelle tabelle puoi usare anche le cifre tabulari.
--bp-typography-weight-bold600Applica il ruolo al livello gerarchico indicato; per i valori nelle tabelle puoi usare anche le cifre tabulari.
--bp-typography-line-height-default1.28581Applica il ruolo al livello gerarchico indicato; per i valori nelle tabelle puoi usare anche le cifre tabulari.
--bp-typography-line-height-large1.5Applica il ruolo al livello gerarchico indicato; per i valori nelle tabelle puoi usare anche le cifre tabulari.

Superfici, bordi e testo semantico

Fonte
Nome / regolaValore / configurazioneUtilizzo
--bp-surface-border-color-default#5f6b7c1fUsa il ruolo semantico indicato; mantieni abbinate le combinazioni di stato e colore di primo piano.
--bp-surface-border-color-strong#5f6b7c40Usa il ruolo semantico indicato; mantieni abbinate le combinazioni di stato e colore di primo piano.
--bp-surface-border-width1pxUsa il ruolo semantico indicato; mantieni abbinate le combinazioni di stato e colore di primo piano.
--bp-surface-border-radius4pxUsa il ruolo semantico indicato; mantieni abbinate le combinazioni di stato e colore di primo piano.
--bp-surface-spacing4pxUsa il ruolo semantico indicato; mantieni abbinate le combinazioni di stato e colore di primo piano.
--bp-surface-background-color-default-rest#ffffff Usa il ruolo semantico indicato; mantieni abbinate le combinazioni di stato e colore di primo piano.
--bp-surface-background-color-default-hover#f6f7f9 Usa il ruolo semantico indicato; mantieni abbinate le combinazioni di stato e colore di primo piano.
--bp-typography-color-default-rest#1c2127 Usa il ruolo semantico indicato; mantieni abbinate le combinazioni di stato e colore di primo piano.
--bp-typography-color-muted#5f6b7c Usa il ruolo semantico indicato; mantieni abbinate le combinazioni di stato e colore di primo piano.

Focus e animazioni

Fonte
Nome / regolaValore / configurazioneUtilizzo
--bp-emphasis-transition-duration100msUsa il ruolo semantico indicato; mantieni abbinate le combinazioni di stato e colore di primo piano.
--bp-emphasis-ease-defaultcubic-bezier(0.4, 1, 0.75, 0.9)Usa il ruolo semantico indicato; mantieni abbinate le combinazioni di stato e colore di primo piano.
--bp-emphasis-ease-bouncecubic-bezier(0.54, 1.12, 0.38, 1.11)Usa il ruolo semantico indicato; mantieni abbinate le combinazioni di stato e colore di primo piano.
--bp-emphasis-focus-color#2d72d2 Usa il ruolo semantico indicato; mantieni abbinate le combinazioni di stato e colore di primo piano.
--bp-emphasis-focus-width2pxUsa il ruolo semantico indicato; mantieni abbinate le combinazioni di stato e colore di primo piano.
--bp-emphasis-focus-offset2pxUsa il ruolo semantico indicato; mantieni abbinate le combinazioni di stato e colore di primo piano.
--bp-emphasis-motion-reduced0Usa il ruolo semantico indicato; mantieni abbinate le combinazioni di stato e colore di primo piano.

Componenti nativi usati nell’area di lavoro dei set di dati

Fonte
Nome / regolaValore / configurazioneUtilizzo
HTMLTablestriped · interactive · condensedTabella semantica nativa; la prop condensed modifica la densità senza cambiare i dati.
InputGroupvalue · onChange · intentRicerca controllata e nota di revisione; la validazione dell’applicazione imposta l’intento danger.
FormGrouplabelFor · helperText · intentCollega un’etichetta di campo visibile e spiega perché la nota non è valida.
HTMLSelectoptions · value · onChangeUn select nativo per il set limitato e fisso di tipi di set di dati.
Tagminimal · intentAbbina il testo dello stato al trattamento success o warning.
Buttonintent="primary" · type="submit"Conferma la revisione locale tramite un vero form; i pulsanti di selezione restano secondari.
Switchchecked · onChangeControlli indipendenti per aspetto e densità.
Calloutintent · titleSpiega l’assenza di risultati o l’esito; evita di comunicare lo stato solo tramite il colore.
03

Sistema di design Palantir Blueprint Guida completa del sistema di progettazione

Una guida pratica per scegliere, applicare e valutare questo sistema in un’interfaccia reale.

DESIGN-palantir-blueprint.md

Indicazioni complete, un punto di partenza per l’implementazione e link alle fonti.

Scarica la guida

Sistema di design Palantir Blueprint Sistema di progettazione: un’area di lavoro basata sui dati

Controlli compatti con un ordine di lettura esplicito

Blueprint è utile quando una schermata combina una raccolta, filtri, stato e azioni contestuali. L’esempio mantiene la tabella dei set di dati a sinistra e il record selezionato a destra. Chi legge può confrontare i record senza aprire una nuova pagina per ciascuno. Il pannello di ispezione contiene la nota di revisione modificabile; la tabella resta una superficie per la consultazione rapida.

Da questa guida su OpenDesign

Usa il contratto del pacchetto v6

L’esempio è compilato con @blueprintjs/core 6.21.0. Il suo namespace CSS è bp6 e i token semantici pubblicati iniziano con --bp-. Un foglio di stile bp5 meno recente non sostituisce i componenti CSS della v6. Importa una sola volta il foglio di stile del pacchetto nel punto d’ingresso dell’applicazione, poi assegna le regole di layout dell’applicazione a una classe separata.

Sistema di design Palantir Blueprint Intenti e ruoli dei colori del sistema di progettazione

Separa lo stato del record dalla selezione

Un tag warning indica che il set di dati deve essere revisionato; la riga con tinta primaria indica che è selezionato. I due significati sono indipendenti. Contrassegnando una riga come revisionata, l’etichetta e l’intento diventano success, mentre la selezione resta sullo stesso set di dati. La tabella mantiene una descrizione testuale per ogni stato, così il colore non è l’unico veicolo del significato.

Mantieni la modalità scura al livello dei componenti

L’esempio aggiunge bp6-dark al contenitore, così i componenti nativi possono applicare lo stile scuro. I valori del tema chiaro riportati sopra sono un riferimento, non un’indicazione a sovrascrivere ogni componente. Quando introduci un portal, per esempio Dialog, assicurati che il contenuto renderizzato riceva lo stesso contesto del tema: un contenitore che non include il portal non è sufficiente.

Palantir Blueprint Tipografia del sistema di design per record e metadati

Leggi la scala del testo del corpo prima di scegliere le intestazioni

Le dimensioni pubblicate per il testo del corpo sono 10, 12, 14 e 16px; la dimensione media è 14px. I nomi dei dataset mantengono il livello di lettura principale. Gli ID e i tipi di record usano testo secondario, mentre i conteggi numerici dei record usano cifre tabulari, così è più facile confrontare i valori quando cambiano. La guida non consiglia di usare 10px per i contenuti principali.

Organizza le informazioni dell’ispettore in una gerarchia compatta

L’ispettore usa un’intestazione da 20px e un elenco di definizioni per ID, responsabile, tipo e conteggio. Etichette e valori sono allineati stabilmente su due colonne. La nota di revisione segue questi dati, separata da una linea, così non può essere confusa con un filtro della tabella.

Palantir Blueprint Tabella, filtri e ispettore del sistema di design

Mantieni intatta la semantica della tabella

HTMLTable fornisce una tabella nativa con lo stile di Blueprint. I pulsanti nella prima cella selezionano i record e sono raggiungibili da tastiera; l’esempio non affida la selezione esclusivamente a un gestore di riga attivabile solo con il puntatore. La prop interactive applica lo stile di evidenziazione al passaggio del mouse sulle righe, mentre condensed modifica la densità senza influire sui filtri.

Rendi visibile il flusso dei dati controllato

  1. Trova un dataset in base al nome visualizzato.
  2. Restringi la stessa raccolta con il selettore del tipo.
  3. Seleziona il pulsante del nome per caricare l’ispettore.
  4. Inserisci una nota di revisione e invia la revisione locale.

Palantir Blueprint Spaziatura, superfici e densità del sistema di design

Usa un’unità più piccola senza ridurre ogni spazio

Il token pubblicato per la spaziatura delle superfici è 4px. L’area di lavoro usa multipli definiti dall’applicazione: 12px tra i controlli dei filtri, 20px tra la raccolta e l’ispettore e 24px attorno all’esempio desktop. Sono scelte compositive illustrate in CSS. Il token di raggio del bordo da 4px mantiene sobri i profili dei controlli e delle superfici.

Modifica il layout prima di sacrificare le etichette

Al breakpoint dell’applicazione dell’esempio, 800px, l’ispettore si sposta sotto la raccolta. I filtri vanno a capo, il padding principale passa a 16px e, quando necessario, la tabella dispone di un proprio contenitore con scorrimento orizzontale. Questo breakpoint appartiene a questa area di lavoro: non è presentato come breakpoint universale ufficiale di Blueprint.

Palantir Blueprint Revisione e stati vuoti del sistema di design

La convalida fa parte dell’operazione di revisione

Se invii una nota vuota, InputGroup e FormGroup ricevono l’intento danger, viene fornito un testo di aiuto esplicativo e il focus viene spostato sul campo. L’inserimento di testo cancella l’errore. Un invio valido modifica solo il record locale selezionato, cancella la nota e mostra un Callout di successo che specifica chiaramente che non è stato inviato alcun dato.

Tieni le opzioni per ripristinare la raccolta vuota nelle vicinanze

Il Callout che segnala l’assenza di risultati offre l’opzione Cancella filtri. Azzera la query di ricerca e il selettore del tipo, ripristinando così l’intera raccolta. Non elimina righe né modifica l’ispettore. I seguenti limiti di stato sono intenzionali:

  • La selezione modifica il record esaminato, non il suo stato di revisione.
  • La modalità compatta modifica la densità, non l’ordine dei record.
  • Il tema modifica l’aspetto visivo, non i filtri correnti.
  • Una revisione locale completata modifica un record e ne comunica il risultato.

Palantir Blueprint Focus e uso accessibile dei componenti del sistema di design

Assegna un’etichetta a ogni controllo nativo

InputGroup riceve un nome accessibile per la ricerca e un id per il campo di revisione associato alla sua etichetta. HTMLSelect ha un proprio nome, Switch mostra etichette visibili e ogni record si apre tramite un vero pulsante. Usa queste API della libreria invece di sostituire i controlli con div stilizzati.

Mantieni visibile lo stile del focus

Il riferimento del pacchetto include una larghezza del focus di 2px e un offset di 2px. Mantieni visibile l’indicatore di focus sulle Card e sulle righe selezionate. Chi usa la tastiera deve poter raggiungere filtri, pulsanti delle righe e modulo di revisione nell’ordine del documento. Il paragrafo di stato e il Callout di successo dell’esempio comunicano i risultati senza spostare il lettore a un’altra schermata.

Palantir Blueprint Installazione e confini dell’applicazione del sistema di design

Esegui lo stesso codice sorgente dell’esempio

Di seguito sono forniti il sorgente completo di App e l’CSS dell’applicazione. App viene montato nell’elemento root generato dal modello React di Vite. L’installazione del pacchetto core con versione bloccata fornisce i componenti nativi e l’CSS del pacchetto; l’esempio basato su testo non richiede risorse di design nascoste.

Estendi la revisione con un contratto di persistenza reale

Palantir Blueprint Esempi di componenti del sistema di design

main.jsx — applicazione completa per la revisione dei dataset

Una composizione nativa completa con filtri, selezione, densità, tema, convalida dei campi e risultato della revisione locale.

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 />);

Riferimento del codice

  • Salva questo file come src/main.jsx e il prossimo esempio come src/blueprint.css.
  • La chiamata createRoot usa l’elemento root di index.html nel modello React di Vite.

blueprint.css — layout adattabile dell’area di lavoro

Le regole di layout dell’applicazione affiancano CSS nativo importato. Il breakpoint di 800px e l’ispettore da 260px sono scelte esplicite di questo esempio.

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;
}

Riferimento del codice

  • La classe bp6-dark attiva il tema della libreria; lo sfondo dell’area di anteprima è CSS dell’applicazione.
04

Palantir Blueprint Configurazione dell’agent del sistema di design

Punto di partenza per l’implementazione

L’anteprima nativa è stata creata ed eseguita con React 18.3.1 e Blueprint 6.21.0. Usa una versione di Node.js supportata dalla versione di Vite scelta. Entrambi i file dell’applicazione sono forniti sopra.

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

Un prompt per il tuo progetto

Prompt per l’agente
Usa Blueprint 6.21.0 per creare un’area di lavoro per la revisione dei dataset. Consulta i token forniti e l’esempio completo React/CSS. Mantieni HTMLTable nativo, InputGroup/FormGroup con etichette, Tag di stato e selezione delle righe raggiungibile da tastiera. Mantieni indipendenti lo stato dei filtri, della selezione, della densità, dell’aspetto e della revisione. Aggiungi il servizio di salvataggio reale solo quando viene fornito il relativo API; mostra gli stati in sospeso e gli errori senza perdere la nota. Mantieni l’ispettore adattabile e gli stati di focus visibili.
05

Palantir Blueprint Fonti e ambito del sistema di design

Guida dell’applicazione OpenDesign a Blueprint 6.21.0, con un esempio originale per la revisione dei dataset che esegue il pacchetto React effettivo. I nomi dei dataset e i risultati della revisione sono dati di esempio locali. Il layout dell’area di lavoro è codice dell’applicazione; i valori di riferimento provengono dal pacchetto pubblicato con versione specifica.