Análisis de datos · Nuevo recurso

Sistema de diseño Palantir Blueprint.

Crea un espacio de trabajo de datos denso con Blueprint: tokens verificados de tipografía e intención, una tabla de conjuntos de datos seleccionable, un panel de revisión y el código fuente completo de React.

Guía de OpenDesign8 capítulos60 entradas de referenciaGuía de aplicación original
01

Vista previa de la interfaz del sistema de diseño Palantir Blueprint

Filtra por nombre o tipo, selecciona un conjunto de datos, cambia la densidad de las filas y la apariencia, y valida una nota de revisión antes de actualizar el estado local.

Tabla del conjunto de datos e inspector de revisiónAbrir ejemplo completo
Blueprint nativo 6.21.0 con React 18.3.1. Composición original de un espacio de trabajo adaptable; sin servidor ni revisión guardada. · Referencia de implementación
02

Referencia de diseño del sistema de diseño Palantir Blueprint

Blueprint core 6.21.0 publicado CSS y componentes nativos React. Estos son valores seleccionados de tokens del tema claro; usa el tema oscuro de la biblioteca en lugar de invertirlos manualmente. Las decisiones de diseño de la aplicación se identifican en el ejemplo CSS.

Colores de intención y estados de interacción

Fuente
Nombre / ReglaValor / ConfiguraciónUso
--bp-intent-primary-rest#2d72d2 Usa el rol semántico indicado; mantén juntos el estado y las combinaciones de color del primer plano.
--bp-intent-primary-hover#215db0 Usa el rol semántico indicado; mantén juntos el estado y las combinaciones de color del primer plano.
--bp-intent-primary-active#184a90 Usa el rol semántico indicado; mantén juntos el estado y las combinaciones de color del primer plano.
--bp-intent-primary-disabled#4c90f0 Usa el rol semántico indicado; mantén juntos el estado y las combinaciones de color del primer plano.
--bp-intent-primary-foreground#ffffff Usa el rol semántico indicado; mantén juntos el estado y las combinaciones de color del primer plano.
--bp-intent-success-rest#238551 Usa el rol semántico indicado; mantén juntos el estado y las combinaciones de color del primer plano.
--bp-intent-success-hover#1c6e42 Usa el rol semántico indicado; mantén juntos el estado y las combinaciones de color del primer plano.
--bp-intent-success-active#165a36 Usa el rol semántico indicado; mantén juntos el estado y las combinaciones de color del primer plano.
--bp-intent-success-disabled#32a467 Usa el rol semántico indicado; mantén juntos el estado y las combinaciones de color del primer plano.
--bp-intent-success-foreground#ffffff Usa el rol semántico indicado; mantén juntos el estado y las combinaciones de color del primer plano.
--bp-intent-warning-rest#c87619 Usa el rol semántico indicado; mantén juntos el estado y las combinaciones de color del primer plano.
--bp-intent-warning-hover#935610 Usa el rol semántico indicado; mantén juntos el estado y las combinaciones de color del primer plano.
--bp-intent-warning-active#77450d Usa el rol semántico indicado; mantén juntos el estado y las combinaciones de color del primer plano.
--bp-intent-warning-disabled#ec9a3c Usa el rol semántico indicado; mantén juntos el estado y las combinaciones de color del primer plano.
--bp-intent-warning-foreground#111418 Usa el rol semántico indicado; mantén juntos el estado y las combinaciones de color del primer plano.
--bp-intent-danger-rest#cd4246 Usa el rol semántico indicado; mantén juntos el estado y las combinaciones de color del primer plano.
--bp-intent-danger-hover#ac2f33 Usa el rol semántico indicado; mantén juntos el estado y las combinaciones de color del primer plano.
--bp-intent-danger-active#8e292c Usa el rol semántico indicado; mantén juntos el estado y las combinaciones de color del primer plano.
--bp-intent-danger-disabled#e76a6e Usa el rol semántico indicado; mantén juntos el estado y las combinaciones de color del primer plano.
--bp-intent-danger-foreground#ffffff Usa el rol semántico indicado; mantén juntos el estado y las combinaciones de color del primer plano.

Escala tipográfica y pesos

Fuente
Nombre / ReglaValor / ConfiguraciónUso
--bp-typography-size-body-x-small10pxEscala para texto del cuerpo, etiquetas y datos complementarios; no conviertas los metadatos pequeños en el tamaño principal de lectura.
--bp-typography-size-body-small12pxEscala para texto del cuerpo, etiquetas y datos complementarios; no conviertas los metadatos pequeños en el tamaño principal de lectura.
--bp-typography-size-body-medium14pxEscala para texto del cuerpo, etiquetas y datos complementarios; no conviertas los metadatos pequeños en el tamaño principal de lectura.
--bp-typography-size-body-large16pxEscala para texto del cuerpo, etiquetas y datos complementarios; no conviertas los metadatos pequeños en el tamaño principal de lectura.
--bp-typography-size-heading-small16pxAplica el rol en el nivel jerárquico indicado; las cifras de la tabla también pueden usar numerales tabulares.
--bp-typography-size-heading-medium20pxAplica el rol en el nivel jerárquico indicado; las cifras de la tabla también pueden usar numerales tabulares.
--bp-typography-size-heading-large24pxAplica el rol en el nivel jerárquico indicado; las cifras de la tabla también pueden usar numerales tabulares.
--bp-typography-size-heading-x-large28pxAplica el rol en el nivel jerárquico indicado; las cifras de la tabla también pueden usar numerales tabulares.
--bp-typography-size-heading-display46pxAplica el rol en el nivel jerárquico indicado; las cifras de la tabla también pueden usar numerales tabulares.
--bp-typography-size-code-small12pxAplica el rol en el nivel jerárquico indicado; las cifras de la tabla también pueden usar numerales tabulares.
--bp-typography-size-code-medium13pxAplica el rol en el nivel jerárquico indicado; las cifras de la tabla también pueden usar numerales tabulares.
--bp-typography-size-code-large14pxAplica el rol en el nivel jerárquico indicado; las cifras de la tabla también pueden usar numerales tabulares.
--bp-typography-weight-default400Aplica el rol en el nivel jerárquico indicado; las cifras de la tabla también pueden usar numerales tabulares.
--bp-typography-weight-bold600Aplica el rol en el nivel jerárquico indicado; las cifras de la tabla también pueden usar numerales tabulares.
--bp-typography-line-height-default1.28581Aplica el rol en el nivel jerárquico indicado; las cifras de la tabla también pueden usar numerales tabulares.
--bp-typography-line-height-large1.5Aplica el rol en el nivel jerárquico indicado; las cifras de la tabla también pueden usar numerales tabulares.

Superficies, bordes y texto semántico

Fuente
Nombre / ReglaValor / ConfiguraciónUso
--bp-surface-border-color-default#5f6b7c1fUsa el rol semántico indicado; mantén juntos el estado y las combinaciones de color del primer plano.
--bp-surface-border-color-strong#5f6b7c40Usa el rol semántico indicado; mantén juntos el estado y las combinaciones de color del primer plano.
--bp-surface-border-width1pxUsa el rol semántico indicado; mantén juntos el estado y las combinaciones de color del primer plano.
--bp-surface-border-radius4pxUsa el rol semántico indicado; mantén juntos el estado y las combinaciones de color del primer plano.
--bp-surface-spacing4pxUsa el rol semántico indicado; mantén juntos el estado y las combinaciones de color del primer plano.
--bp-surface-background-color-default-rest#ffffff Usa el rol semántico indicado; mantén juntos el estado y las combinaciones de color del primer plano.
--bp-surface-background-color-default-hover#f6f7f9 Usa el rol semántico indicado; mantén juntos el estado y las combinaciones de color del primer plano.
--bp-typography-color-default-rest#1c2127 Usa el rol semántico indicado; mantén juntos el estado y las combinaciones de color del primer plano.
--bp-typography-color-muted#5f6b7c Usa el rol semántico indicado; mantén juntos el estado y las combinaciones de color del primer plano.

Foco y movimiento

Fuente
Nombre / ReglaValor / ConfiguraciónUso
--bp-emphasis-transition-duration100msUsa el rol semántico indicado; mantén juntos el estado y las combinaciones de color del primer plano.
--bp-emphasis-ease-defaultcubic-bezier(0.4, 1, 0.75, 0.9)Usa el rol semántico indicado; mantén juntos el estado y las combinaciones de color del primer plano.
--bp-emphasis-ease-bouncecubic-bezier(0.54, 1.12, 0.38, 1.11)Usa el rol semántico indicado; mantén juntos el estado y las combinaciones de color del primer plano.
--bp-emphasis-focus-color#2d72d2 Usa el rol semántico indicado; mantén juntos el estado y las combinaciones de color del primer plano.
--bp-emphasis-focus-width2pxUsa el rol semántico indicado; mantén juntos el estado y las combinaciones de color del primer plano.
--bp-emphasis-focus-offset2pxUsa el rol semántico indicado; mantén juntos el estado y las combinaciones de color del primer plano.
--bp-emphasis-motion-reduced0Usa el rol semántico indicado; mantén juntos el estado y las combinaciones de color del primer plano.

Componentes nativos utilizados en el espacio de trabajo del conjunto de datos

Fuente
Nombre / ReglaValor / ConfiguraciónUso
HTMLTablestriped · interactive · condensedTabla semántica nativa; la propiedad condensed cambia la densidad sin modificar los datos.
InputGroupvalue · onChange · intentBúsqueda controlada y nota de revisión; la validación de la aplicación establece la intención de peligro.
FormGrouplabelFor · helperText · intentAsocia una etiqueta visible al campo y explica por qué la nota no es válida.
HTMLSelectoptions · value · onChangeUn selector nativo para el pequeño conjunto fijo de tipos de conjuntos de datos.
Tagminimal · intentCombina el texto de estado con el tratamiento de éxito o advertencia.
Buttonintent="primary" · type="submit"Confirma la revisión local mediante un formulario real; los botones de selección siguen siendo secundarios.
Switchchecked · onChangeControles independientes de apariencia y densidad.
Calloutintent · titleExplica que no hay resultados o comunica el desenlace; no transmitas el estado solo mediante el color.
03

Guía completa del sistema de diseño Palantir Blueprint

Una guía práctica para elegir, aplicar y revisar este sistema en una interfaz real.

DESIGN-palantir-blueprint.md

Orientación completa, un punto de partida para la implementación y enlaces al código fuente.

Descargar la guía

Espacio de trabajo de sistema de diseño Palantir Blueprint basado en datos

Controles densos con un orden de lectura explícito

Blueprint resulta útil cuando una pantalla combina una colección, filtros, estados y acciones contextuales. El ejemplo coloca la tabla del conjunto de datos a la izquierda y el registro seleccionado a la derecha. Así, se pueden comparar registros sin abrir una página nueva para cada uno. El inspector contiene la nota de revisión editable; la tabla sirve para explorar los datos.

De esta guía de OpenDesign

Usa el contrato del paquete v6

El ejemplo se compila con @blueprintjs/core 6.21.0. Su espacio de nombres CSS es bp6 y sus tokens semánticos publicados empiezan por --bp-. Una hoja de estilos antigua de bp5 no sustituye los componentes CSS de v6. Importa la hoja de estilos del paquete una sola vez en el punto de entrada de la aplicación y luego limita las reglas de diseño de la aplicación a una clase independiente.

Intenciones y roles de color del sistema de diseño Palantir Blueprint

Separa el estado del registro de su selección

Una etiqueta de advertencia indica que el conjunto de datos requiere revisión; la fila con el color principal indica que está seleccionada. Son significados independientes. Al marcar una fila como revisada, cambian su etiqueta y su intención a éxito, mientras que la selección sigue en el mismo conjunto de datos. La tabla conserva el texto de cada estado para que el color no transmita todo el significado.

Mantén el modo oscuro en el límite del componente

El ejemplo añade bp6-dark a su contenedor para que los componentes nativos apliquen sus estilos oscuros. Los valores del tema claro anteriores son una referencia, no una indicación para sobrescribir cada componente. Al introducir un portal, como Dialog, asegúrate de que su contenido renderizado reciba el mismo contexto de tema; un contenedor que no incluya el portal no es suficiente.

Tipografía del sistema de diseño Palantir Blueprint para registros y metadatos

Lee la escala de texto del cuerpo antes de elegir los encabezados

Los tamaños publicados para el texto del cuerpo incluyen 10, 12, 14 y 16px; el tamaño medio es 14px. Los nombres de los conjuntos de datos mantienen el nivel principal de lectura. Los ID y los tipos de registro usan texto complementario, mientras que los recuentos numéricos emplean numerales tabulares para que sea fácil comparar los valores cuando cambian. La guía no recomienda 10px para el contenido principal.

Da al inspector una jerarquía compacta

El inspector usa un encabezado de 20px y una lista de definiciones para el ID, el propietario, el tipo y el recuento. Las etiquetas y los valores mantienen una alineación estable en dos columnas. La nota de revisión aparece después de esos datos, separada por una línea, para que no se confunda la acción con un filtro de la tabla.

Tabla, filtros e inspector del sistema de diseño Palantir Blueprint

Conserva la semántica de la tabla intacta

HTMLTable proporciona una tabla nativa con los estilos de Blueprint. Los botones de la primera celda permiten seleccionar registros y siguen siendo accesibles con el teclado; el ejemplo no depende exclusivamente de un controlador de fila que solo funcione con el puntero para permitir la selección. La propiedad interactive aplica estilos de resaltado al pasar el cursor sobre las filas, y condensed modifica la densidad de forma independiente de los filtros.

Haz visible el flujo de datos controlado

  1. Busca un conjunto de datos por el nombre que se muestra.
  2. Acota la misma colección con el selector de tipo.
  3. Selecciona el botón del nombre para cargar el panel de inspección.
  4. Escribe una nota de revisión y envíala para registrar la revisión local.

Espaciado, superficies y densidad del sistema de diseño Palantir Blueprint

Usa una unidad menor sin reducir demasiado todos los espacios

El token publicado para el espaciado entre superficies es de 4px. El espacio de trabajo usa múltiplos a nivel de aplicación: 12px entre los controles de filtro, 20px entre la colección y el panel de inspección, y 24px alrededor del ejemplo para escritorio. Son decisiones de composición que se muestran en CSS. El token de radio de borde de 4px mantiene moderadas las formas de los controles y las superficies.

Adapta la composición antes de sacrificar las etiquetas

En el punto de quiebre de aplicación de 800px del ejemplo, el panel de inspección pasa debajo de la colección. Los filtros se ajustan a varias líneas, el relleno principal pasa a 16px y, cuando es necesario, la tabla dispone de su propio contenedor con desplazamiento horizontal. Este punto de quiebre pertenece a este espacio de trabajo; no se presenta como un punto de quiebre oficial y universal de Blueprint.

Revisión y estados vacíos del sistema de diseño Palantir Blueprint

La validación forma parte de la operación de revisión

Al enviar una nota vacía, se establece la intención danger en InputGroup y FormGroup, se añade un texto de ayuda explicativo y el foco pasa al campo. Al escribir texto, se borra el error. Un envío válido solo modifica el registro local seleccionado, borra la nota y muestra un Callout de éxito que indica explícitamente que no se han enviado datos.

Ofrece una opción de recuperación junto a la colección vacía

El Callout de que no hay resultados ofrece la opción Borrar filtros. Esta restablece tanto la consulta de búsqueda como el selector de tipo para que vuelva a aparecer la colección completa. No elimina filas ni modifica el panel de inspección. Los siguientes límites entre estados son intencionados:

  • La selección cambia el registro inspeccionado, no su estado de revisión.
  • El modo compacto cambia la densidad, no el orden de los registros.
  • El tema cambia la apariencia visual, no los filtros activos.
  • Una revisión local completada modifica un registro y anuncia el resultado.

Enfoque y uso accesible de componentes del sistema de diseño Palantir Blueprint

Etiqueta cada control nativo

InputGroup recibe un nombre accesible para la búsqueda y un id para el campo de revisión etiquetado. HTMLSelect tiene su propio nombre, Switch muestra etiquetas visibles y cada registro se abre con un botón real. Usa estas API de la biblioteca en lugar de sustituir los controles por elementos div con estilos.

Mantén visible el indicador de foco

La referencia del paquete incluye un ancho de foco de 2px y un desplazamiento de 2px. Mantén visible el indicador de foco sobre Cards y las filas seleccionadas. Las personas que usan el teclado deberían poder recorrer los filtros, los botones de fila y el formulario de revisión en el orden del documento. El párrafo de estado y el Callout de éxito del ejemplo comunican los resultados sin llevar a quien lee a otra pantalla.

Instalación y límites de la aplicación del sistema de diseño Palantir Blueprint

Ejecuta el mismo código fuente que el ejemplo

A continuación se proporcionan el código completo de App y la aplicación CSS. App se monta en el elemento raíz que genera la plantilla de Vite React. Al instalar el paquete principal fijado a una versión, se obtienen los componentes nativos y el paquete CSS; el ejemplo basado en texto no requiere ningún recurso de diseño oculto.

Amplía la revisión con un contrato de persistencia real

Ejemplos de componentes del sistema de diseño Palantir Blueprint

main.jsx — aplicación completa de revisión de conjuntos de datos

Una composición completa de componentes nativos con filtrado, selección, densidad, tema, validación de campos y un resultado de revisión local.

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

Referencia de código

  • Guarda este archivo como src/main.jsx y el siguiente ejemplo como src/blueprint.css.
  • La llamada a createRoot usa el elemento raíz de index.html de Vite React.

blueprint.css — composición adaptable del espacio de trabajo

Las reglas de composición de la aplicación complementan los componentes nativos importados de CSS. El punto de quiebre de 800px y el panel de inspección de 260px son decisiones explícitas de este ejemplo.

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

Referencia de código

  • La clase bp6-dark activa el tema de la biblioteca; el fondo del lienzo del ejemplo forma parte del código de aplicación CSS.
04

Configuración del agente de IA para el sistema de diseño Palantir Blueprint

Punto de partida para la implementación

La vista previa nativa se compiló y ejecutó con React 18.3.1 y Blueprint 6.21.0. Usa una versión de Node.js compatible con la versión de Vite que hayas elegido. Ambos archivos de la aplicación se proporcionan arriba.

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

Una instrucción para tu proyecto

Instrucción para el agente
Usa Blueprint 6.21.0 para crear un espacio de trabajo de revisión de conjuntos de datos. Consulta los tokens proporcionados y el ejemplo completo React/CSS. Conserva HTMLTable nativo, InputGroup/FormGroup con etiquetas, Tags de estado y selección de filas accesible con el teclado. Mantén independientes los estados de filtro, selección, densidad, apariencia y revisión. Añade el servicio de guardado real solo cuando se proporcione su API; muestra las respuestas de operación pendiente y error sin perder la nota. Conserva el panel de inspección adaptable y los indicadores de foco visibles.
05

Fuentes y alcance del sistema de diseño Palantir Blueprint

Guía de aplicación de OpenDesign para Blueprint 6.21.0, con un ejemplo original de revisión de conjuntos de datos que ejecuta el paquete React real. Los nombres de conjuntos de datos y los resultados de revisión son datos de ejemplo locales. La composición del espacio de trabajo es código de aplicación; los valores de referencia proceden del paquete publicado y versionado.