Veri analizi · Yeni kaynak

Palantir Blueprint Tasarım Sistemi.

Blueprint ile yoğun bir veri çalışma alanı oluşturun: doğrulanmış tür ve amaç belirteçleri, seçilebilir bir veri kümesi tablosu, inceleme paneli ve eksiksiz React kaynak kodu.

OpenDesign Kılavuzu8 Bölüm60 Referans KaydıÖzgün Uygulama Kılavuzu
01

Palantir Blueprint Tasarım Sistemi Arayüz Önizlemesi

Ada veya türe göre filtreleyin, bir veri kümesi seçin, satır yoğunluğunu değiştirin, görünümü değiştirin ve yerel durumu güncellemeden önce bir inceleme notunu doğrulayın.

Veri kümesi tablosu ve inceleme denetçisiÖrneğin Tamamını Aç
React 18.3.1 ile yerel Blueprint 6.21.0. Özgün, duyarlı çalışma alanı düzeni; sunucu veya kaydedilmiş inceleme yok. · Uygulama başvurusu
02

Palantir Blueprint Tasarım Sistemi Tasarım Referansı

Blueprint core 6.21.0, CSS üzerinde yayımlanmıştır ve yerel React bileşenleri içerir. Bunlar seçili açık tema tasarım token’ı değerleridir; bunları elle tersine çevirmek yerine kitaplığın koyu temasını kullanın. Uygulama düzeni tercihleri örnek CSS içinde belirtilmiştir.

Niyet renkleri ve etkileşim durumları

Kaynak
Ad / KuralDeğer / YapılandırmaKullanım
--bp-intent-primary-rest#2d72d2 Adlandırılmış anlamsal rolü kullanın; durum ve ön plan eşleşmelerini birlikte tutun.
--bp-intent-primary-hover#215db0 Adlandırılmış anlamsal rolü kullanın; durum ve ön plan eşleşmelerini birlikte tutun.
--bp-intent-primary-active#184a90 Adlandırılmış anlamsal rolü kullanın; durum ve ön plan eşleşmelerini birlikte tutun.
--bp-intent-primary-disabled#4c90f0 Adlandırılmış anlamsal rolü kullanın; durum ve ön plan eşleşmelerini birlikte tutun.
--bp-intent-primary-foreground#ffffff Adlandırılmış anlamsal rolü kullanın; durum ve ön plan eşleşmelerini birlikte tutun.
--bp-intent-success-rest#238551 Adlandırılmış anlamsal rolü kullanın; durum ve ön plan eşleşmelerini birlikte tutun.
--bp-intent-success-hover#1c6e42 Adlandırılmış anlamsal rolü kullanın; durum ve ön plan eşleşmelerini birlikte tutun.
--bp-intent-success-active#165a36 Adlandırılmış anlamsal rolü kullanın; durum ve ön plan eşleşmelerini birlikte tutun.
--bp-intent-success-disabled#32a467 Adlandırılmış anlamsal rolü kullanın; durum ve ön plan eşleşmelerini birlikte tutun.
--bp-intent-success-foreground#ffffff Adlandırılmış anlamsal rolü kullanın; durum ve ön plan eşleşmelerini birlikte tutun.
--bp-intent-warning-rest#c87619 Adlandırılmış anlamsal rolü kullanın; durum ve ön plan eşleşmelerini birlikte tutun.
--bp-intent-warning-hover#935610 Adlandırılmış anlamsal rolü kullanın; durum ve ön plan eşleşmelerini birlikte tutun.
--bp-intent-warning-active#77450d Adlandırılmış anlamsal rolü kullanın; durum ve ön plan eşleşmelerini birlikte tutun.
--bp-intent-warning-disabled#ec9a3c Adlandırılmış anlamsal rolü kullanın; durum ve ön plan eşleşmelerini birlikte tutun.
--bp-intent-warning-foreground#111418 Adlandırılmış anlamsal rolü kullanın; durum ve ön plan eşleşmelerini birlikte tutun.
--bp-intent-danger-rest#cd4246 Adlandırılmış anlamsal rolü kullanın; durum ve ön plan eşleşmelerini birlikte tutun.
--bp-intent-danger-hover#ac2f33 Adlandırılmış anlamsal rolü kullanın; durum ve ön plan eşleşmelerini birlikte tutun.
--bp-intent-danger-active#8e292c Adlandırılmış anlamsal rolü kullanın; durum ve ön plan eşleşmelerini birlikte tutun.
--bp-intent-danger-disabled#e76a6e Adlandırılmış anlamsal rolü kullanın; durum ve ön plan eşleşmelerini birlikte tutun.
--bp-intent-danger-foreground#ffffff Adlandırılmış anlamsal rolü kullanın; durum ve ön plan eşleşmelerini birlikte tutun.

Tipografi ölçeği ve kalınlıkları

Kaynak
Ad / KuralDeğer / YapılandırmaKullanım
--bp-typography-size-body-x-small10pxGövde, etiket ve destekleyici veri ölçeği; küçük üst verileri birincil okuma boyutuna dönüştürmeyin.
--bp-typography-size-body-small12pxGövde, etiket ve destekleyici veri ölçeği; küçük üst verileri birincil okuma boyutuna dönüştürmeyin.
--bp-typography-size-body-medium14pxGövde, etiket ve destekleyici veri ölçeği; küçük üst verileri birincil okuma boyutuna dönüştürmeyin.
--bp-typography-size-body-large16pxGövde, etiket ve destekleyici veri ölçeği; küçük üst verileri birincil okuma boyutuna dönüştürmeyin.
--bp-typography-size-heading-small16pxRolü, adlandırılmış hiyerarşi düzeyinde uygulayın; tablo rakamlarında ayrıca eş aralıklı rakamlar kullanılabilir.
--bp-typography-size-heading-medium20pxRolü, adlandırılmış hiyerarşi düzeyinde uygulayın; tablo rakamlarında ayrıca eş aralıklı rakamlar kullanılabilir.
--bp-typography-size-heading-large24pxRolü, adlandırılmış hiyerarşi düzeyinde uygulayın; tablo rakamlarında ayrıca eş aralıklı rakamlar kullanılabilir.
--bp-typography-size-heading-x-large28pxRolü, adlandırılmış hiyerarşi düzeyinde uygulayın; tablo rakamlarında ayrıca eş aralıklı rakamlar kullanılabilir.
--bp-typography-size-heading-display46pxRolü, adlandırılmış hiyerarşi düzeyinde uygulayın; tablo rakamlarında ayrıca eş aralıklı rakamlar kullanılabilir.
--bp-typography-size-code-small12pxRolü, adlandırılmış hiyerarşi düzeyinde uygulayın; tablo rakamlarında ayrıca eş aralıklı rakamlar kullanılabilir.
--bp-typography-size-code-medium13pxRolü, adlandırılmış hiyerarşi düzeyinde uygulayın; tablo rakamlarında ayrıca eş aralıklı rakamlar kullanılabilir.
--bp-typography-size-code-large14pxRolü, adlandırılmış hiyerarşi düzeyinde uygulayın; tablo rakamlarında ayrıca eş aralıklı rakamlar kullanılabilir.
--bp-typography-weight-default400Rolü, adlandırılmış hiyerarşi düzeyinde uygulayın; tablo rakamlarında ayrıca eş aralıklı rakamlar kullanılabilir.
--bp-typography-weight-bold600Rolü, adlandırılmış hiyerarşi düzeyinde uygulayın; tablo rakamlarında ayrıca eş aralıklı rakamlar kullanılabilir.
--bp-typography-line-height-default1.28581Rolü, adlandırılmış hiyerarşi düzeyinde uygulayın; tablo rakamlarında ayrıca eş aralıklı rakamlar kullanılabilir.
--bp-typography-line-height-large1.5Rolü, adlandırılmış hiyerarşi düzeyinde uygulayın; tablo rakamlarında ayrıca eş aralıklı rakamlar kullanılabilir.

Arka plan katmanları, kenarlıklar ve anlamsal metin

Kaynak
Ad / KuralDeğer / YapılandırmaKullanım
--bp-surface-border-color-default#5f6b7c1fAdlandırılmış anlamsal rolü kullanın; durum ve ön plan eşleşmelerini birlikte tutun.
--bp-surface-border-color-strong#5f6b7c40Adlandırılmış anlamsal rolü kullanın; durum ve ön plan eşleşmelerini birlikte tutun.
--bp-surface-border-width1pxAdlandırılmış anlamsal rolü kullanın; durum ve ön plan eşleşmelerini birlikte tutun.
--bp-surface-border-radius4pxAdlandırılmış anlamsal rolü kullanın; durum ve ön plan eşleşmelerini birlikte tutun.
--bp-surface-spacing4pxAdlandırılmış anlamsal rolü kullanın; durum ve ön plan eşleşmelerini birlikte tutun.
--bp-surface-background-color-default-rest#ffffff Adlandırılmış anlamsal rolü kullanın; durum ve ön plan eşleşmelerini birlikte tutun.
--bp-surface-background-color-default-hover#f6f7f9 Adlandırılmış anlamsal rolü kullanın; durum ve ön plan eşleşmelerini birlikte tutun.
--bp-typography-color-default-rest#1c2127 Adlandırılmış anlamsal rolü kullanın; durum ve ön plan eşleşmelerini birlikte tutun.
--bp-typography-color-muted#5f6b7c Adlandırılmış anlamsal rolü kullanın; durum ve ön plan eşleşmelerini birlikte tutun.

Odak ve hareket

Kaynak
Ad / KuralDeğer / YapılandırmaKullanım
--bp-emphasis-transition-duration100msAdlandırılmış anlamsal rolü kullanın; durum ve ön plan eşleşmelerini birlikte tutun.
--bp-emphasis-ease-defaultcubic-bezier(0.4, 1, 0.75, 0.9)Adlandırılmış anlamsal rolü kullanın; durum ve ön plan eşleşmelerini birlikte tutun.
--bp-emphasis-ease-bouncecubic-bezier(0.54, 1.12, 0.38, 1.11)Adlandırılmış anlamsal rolü kullanın; durum ve ön plan eşleşmelerini birlikte tutun.
--bp-emphasis-focus-color#2d72d2 Adlandırılmış anlamsal rolü kullanın; durum ve ön plan eşleşmelerini birlikte tutun.
--bp-emphasis-focus-width2pxAdlandırılmış anlamsal rolü kullanın; durum ve ön plan eşleşmelerini birlikte tutun.
--bp-emphasis-focus-offset2pxAdlandırılmış anlamsal rolü kullanın; durum ve ön plan eşleşmelerini birlikte tutun.
--bp-emphasis-motion-reduced0Adlandırılmış anlamsal rolü kullanın; durum ve ön plan eşleşmelerini birlikte tutun.

Veri kümesi çalışma alanında kullanılan yerel bileşenler

Kaynak
Ad / KuralDeğer / YapılandırmaKullanım
HTMLTablestriped · interactive · condensedYerel anlamsal tablo; condensed prop’u verileri değiştirmeden yoğunluğu değiştirir.
InputGroupvalue · onChange · intentKontrollü arama ve inceleme notu; uygulama doğrulaması danger niyetini belirler.
FormGrouplabelFor · helperText · intentGörünür bir alan etiketini bağlayın ve geçersiz notu açıklayın.
HTMLSelectoptions · value · onChangeAz sayıda, sabit veri kümesi türü için yerel bir select.
Tagminimal · intentDurum metnini success veya warning biçimiyle eşleştirin.
Buttonintent="primary" · type="submit"Yerel incelemeyi gerçek bir form üzerinden tamamlayın; seçim düğmeleri ikincil kalır.
Switchchecked · onChangeBirbirinden bağımsız görünüm ve yoğunluk denetimleri.
Calloutintent · titleSonuç bulunamadığını veya sonucu açıklayın; durumu yalnızca renkle iletmekten kaçının.
03

Palantir Blueprint Eksiksiz Tasarım Sistemi Kılavuzu

Bu sistemi gerçek bir arayüz için seçmeye, uygulamaya ve gözden geçirmeye yönelik pratik bir kılavuz.

DESIGN-palantir-blueprint.md

Eksiksiz yönlendirme, uygulama için başlangıç noktası ve kaynak bağlantıları.

Kılavuzu İndir

Palantir Blueprint Veri Odaklı Tasarım Sistemi Çalışma Alanı

Açık bir okuma sırasına sahip yoğun denetimler

Blueprint, bir ekran koleksiyonu; filtreleri, durumu ve bağlamsal eylemleri bir araya getirdiğinde kullanışlıdır. Örnek, veri kümesi tablosunu solda ve seçili kaydı sağda tutar. Okuyucu, her kayıt için yeni bir sayfa açmadan kayıtları karşılaştırabilir. Denetçi, düzenlenebilir inceleme notunu içerir; tablo ise taramaya uygun bir yüzey olarak kalır.

Bu OpenDesign kılavuzundan

v6 paket sözleşmesini kullanın

Örnek, @blueprintjs/core 6.21.0 ile derlenmiştir. CSS ad alanı bp6, yayımlanan anlamsal tasarım token’ları ise --bp- ile başlar. Eski bir bp5 stil sayfası, v6 bileşenlerinin CSS yerine kullanılamaz. Paket stil sayfasını uygulama girişinde bir kez içe aktarın; ardından uygulama düzeni kurallarını ayrı bir sınıf kapsamında tanımlayın.

Palantir Blueprint Tasarım Sistemi Niyet ve Renk Rolleri

Kayıt durumunu seçimden ayrı tutun

warning Tag, veri kümesinin incelenmesi gerektiğini belirtir; birincil renk tonlu satır ise seçili olduğunu gösterir. Bu anlamlar birbirinden bağımsızdır. Bir satır incelendi olarak işaretlendiğinde etiketi ve niyeti success olarak değişir; seçim aynı veri kümesinde kalır. Tablo, her durum için sözcükleri korur; böylece anlamı yalnızca renk taşımaz.

Koyu modu bileşen sınırında tutun

Örnek, sarmalayıcısına bp6-dark sınıfını ekleyerek yerel bileşenlerin koyu tema stillerini kullanmasını sağlar. Yukarıdaki açık tema değerleri bir referans anlık görüntüsüdür; her bileşenin üzerine yazılması gerektiği anlamına gelmez. Dialog gibi bir portal eklerken, oluşturulan içeriğin de aynı tema bağlamını aldığından emin olun; portalı kapsamayan bir sarmalayıcı yeterli değildir.

Palantir Blueprint Kayıtlar ve Metadata için Tasarım Sistemi Tipografisi

Başlıkları seçmeden önce gövde metni ölçeğini inceleyin

Yayımlanmış gövde metni boyutları 10, 12, 14 ve 16px değerlerini içerir; orta boy gövde metni 14px'tir. Veri kümesi adları ana okuma düzeyinde kalır. Kimlikler ve kayıt türleri yardımcı metin olarak kullanılır; sayısal kayıt adetlerinde ise değerler değişirken karşılaştırmayı kolaylaştırmak için eş aralıklı rakamlar kullanılır. Kılavuz, birincil içerik için 10px boyutunu önermez.

Denetleyici panelde kompakt bir hiyerarşi kurun

Denetleyici panelde 20px başlık ve kimlik, sahip, tür ve adet bilgilerini içeren bir tanım listesi kullanılır. Etiketler ve değerler, iki sütunda tutarlı biçimde hizalanır. İnceleme notu, bu bilgilerden bir çizgiyle ayrılarak gelir; böylece işlem bir tablo filtresiyle karıştırılmaz.

Palantir Blueprint Tablo, Filtreler ve Denetleyici Panel için Tasarım Sistemi

Tablo semantiğini koruyun

HTMLTable, Blueprint stillendirmesiyle yerel bir tablo sunar. İlk hücredeki düğmeler kayıtları seçer ve klavyeyle erişilebilir kalır; örnekte yalnızca işaretçiyle çalışan bir satır işleyicisi, seçim için tek yol değildir. interactive özelliği satır üzerine gelindiğinde stil uygular; condensed ise yoğunluğu filtrelemeden bağımsız olarak değiştirir.

Denetlenen veri akışını görünür kılın

  1. Görüntülenen adına göre bir veri kümesi bulun.
  2. Tür seçicisini kullanarak aynı koleksiyonu daraltın.
  3. Denetleyici paneli doldurmak için ad düğmesini seçin.
  4. İnceleme notu girin ve yerel incelemeyi gönderin.

Palantir Blueprint Boşluk, Arka Plan Yüzeyleri ve Yoğunluk için Tasarım Sistemi

Her boşluğu küçültmeden daha küçük bir birim kullanın

Yayımlanmış yüzey boşluğu belirteci 4px'tir. Çalışma alanında uygulamaya özgü katlar kullanılır: filtre kontrolleri arasında 12px, koleksiyon ile denetleyici panel arasında 20px ve masaüstü örneğinin çevresinde 24px. Bunlar CSS içinde gösterilen düzenleme tercihleridir. 4px köşe yarıçapı belirteci, kontrol ve yüzey geometrisini ölçülü tutar.

Etiketlerden vazgeçmeden önce düzeni değiştirin

Örnekteki 800px uygulama kırılma noktasında denetleyici panel, koleksiyonun altına taşınır. Filtreler alt satıra geçer, ana iç boşluk 16px olur ve gerektiğinde tablo için ayrı bir yatay kaydırma kapsayıcısı kullanılır. Bu kırılma noktası bu çalışma alanına özeldir; resmî, evrensel bir Blueprint kırılma noktası olarak sunulmaz.

Palantir Blueprint İnceleme ve Boş Durumlar için Tasarım Sistemi

Doğrulama, inceleme işleminin parçasıdır

Boş bir not gönderildiğinde InputGroup ve FormGroup için danger amacı ayarlanır, açıklayıcı yardımcı metin gösterilir ve odak alana taşınır. Metin girildiğinde hata temizlenir. Geçerli bir gönderim yalnızca seçili yerel kaydı değiştirir, notu temizler ve hiçbir verinin gönderilmediğini açıkça belirten bir başarı Callout'u gösterir.

Kurtarma seçeneğini boş koleksiyonun yanında tutun

Sonuç bulunamadığında gösterilen Callout, Filtreleri temizle seçeneğini sunar. Bu seçenek hem arama sorgusunu hem de tür seçicisini sıfırlayarak koleksiyonun tamamını geri getirir. Satırları silmez veya denetleyici paneli değiştirmez. Aşağıdaki durum sınırları bilinçli tercihlerdir:

  • Seçim, incelemeye alınan kaydı değiştirir; inceleme durumunu değiştirmez.
  • Kompakt mod, kayıtların sırasını değil yoğunluğu değiştirir.
  • Tema, geçerli filtreleri değil görsel görünümü değiştirir.
  • Başarılı bir yerel inceleme tek bir kaydı değiştirir ve sonucu duyurur.

Palantir Blueprint Odak ve Erişilebilir Bileşen Kullanımı için Tasarım Sistemi

Her yerel kontrole etiket ekleyin

InputGroup, arama için erişilebilir bir ad alır; etiketli inceleme alanı içinse bir id kullanılır. HTMLSelect'in kendi adı vardır, Switch görünür etiketler oluşturur ve her kayıt gerçek bir düğmeyle açılır. Kontrolleri stil verilmiş div'lerle değiştirmek yerine bu kitaplık API'lerini kullanın.

Görünür odak stilini koruyun

Paket referansında 2px odak genişliği ve 2px ofset bulunur. Cards ve seçili satırlara karşı odak göstergesini görünür tutun. Klavye kullananlar filtrelere, satır düğmelerine ve inceleme formuna belge sırasını izleyerek erişebilmelidir. Örnekteki durum paragrafı ve başarı Callout'u, okuyucuyu başka bir ekrana taşımadan sonuçları iletir.

Palantir Blueprint Kurulum ve Uygulama Sınırları için Tasarım Sistemi

Örnekle aynı kaynağı çalıştırın

Eksiksiz App kaynak kodu ve uygulama CSS aşağıda verilmiştir. App, Vite React şablonunun oluşturduğu root öğesine bağlanır. Sabitlenmiş temel paketin kurulması yerel bileşenleri ve paket CSS öğesini sağlar; metin tabanlı örnek için gizli bir tasarım varlığı gerekmez.

İncelemeyi gerçek bir kalıcılık sözleşmesiyle genişletin

Palantir Blueprint Bileşen Örnekleri için Tasarım Sistemi

main.jsx — eksiksiz veri kümesi inceleme uygulaması

Filtreleme, seçim, yoğunluk, tema, alan doğrulaması ve yerel inceleme sonucu içeren eksiksiz bir yerel bileşen düzenlemesi.

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

Kod referansı

  • Bunu src/main.jsx adıyla, sonraki örneği ise src/blueprint.css adıyla kaydedin.
  • createRoot çağrısı, Vite React index.html dosyasındaki root öğesini kullanır.

blueprint.css — duyarlı çalışma alanı düzeni

Uygulama düzeni kuralları, içe aktarılan yerel CSS bileşenlerini tamamlar. 800px kırılma noktası ve 260px denetleyici panel, örneğe özgü açık tercihlerdir.

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

Kod referansı

  • bp6-dark sınıfı kitaplık temasını etkinleştirir; örnek alanının arka planı uygulamaya özgü bir CSS değeridir.
04

Palantir Blueprint tasarım sistemi Yapay Zekâ Agent'ı Kurulum Kılavuzu

Uygulamaya Başlangıç Noktası

Yerel önizleme, React 18.3.1 ve Blueprint 6.21.0 ile paketlenip çalıştırıldı. Seçtiğiniz Vite sürümünün desteklediği bir Node.js sürümü kullanın. Her iki uygulama dosyası da yukarıda verilmiştir.

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

Projeniz İçin Bir İstem

Ajan İstemi
Bir veri kümesi inceleme çalışma alanı oluşturmak için Blueprint 6.21.0 kullanın. Sağlanan belirteçleri ve eksiksiz React/CSS örneğini inceleyin. Yerel HTMLTable bileşenini, etiketli InputGroup/FormGroup bileşenlerini, durum Tag'lerini ve klavyeyle erişilebilen satır seçimini koruyun. Filtre, seçim, yoğunluk, görünüm ve inceleme durumlarını birbirinden bağımsız tutun. Gerçek kaydetme hizmetini yalnızca API sağlandığında ekleyin; notu kaybetmeden bekleme ve hata yanıtlarını gösterin. Duyarlı denetleyici paneli ve görünür odak durumlarını koruyun.
05

Palantir Blueprint Kaynaklar ve Kapsam için Tasarım Sistemi

Blueprint 6.21.0 için OpenDesign uygulama kılavuzu; gerçek React paketiyle çalışan, özgün bir veri kümesi inceleme örneği içerir. Veri kümesi adları ve inceleme sonuçları yerel örnek verilerdir. Çalışma alanı düzeni uygulama kodudur; referans değerleri sürümlenmiş yayımlanmış paketten alınmıştır.