Biểu đồ và hình ảnh

<LineChart>, <BarChart>, <Sparkline>, <ProgressBar>, <Gradient> và <Image>.

Biểu đồ được vẽ bằng ký tự khối. Thanh dùng tám mức trên mỗi ô, còn đường dùng lưới chấm 2×2 trên mỗi ô.

Trực tiếp72×14 · booting Turbolog…tsx
preview://charts:1
<LineChart  height={6}  series={[    { label: "p50", data: p50 },    { label: "p95", data: p95, color: "muted" },  ]}  formatValue={(v) => `${Math.round(v)}ms`}/><BarChart data={[{ label: "iad1", value: 1240 }, { label: "sfo1", value: 860 }]} /><Sparkline data={requests} /><ProgressBar label="Build" value={0.42} />

<LineChart>

Biểu đồ đường dạng ma trận chấm có trục y và chú giải.

PropMô tả
series{ data, label?, color? }[]
dataCách viết tắt cho một chuỗi dữ liệu
heightSố dòng (mặc định 8)
min / maxGiới hạn cố định (mặc định: theo dữ liệu)
axisTrục y với nhãn giá trị nhỏ nhất / lớn nhất
formatValueNhãn trục (mặc định 1.2k)
markerquadrant (mặc định) hoặc braille

braille chứa 2×4 chấm trên mỗi ô. Dùng trong terminal: Menlo, phông chữ console của DevTools trên macOS, không có ký tự braille, và các ký tự thay thế rộng hơn một ô.

Màu chuỗi dữ liệu mặc định là accent, success, warning, info và danger.

<BarChart>

Thanh ngang với nhãn và giá trị căn thẳng hàng, có độ chính xác đến một phần tám ô.

<BarChart data={regions} max={2000} formatValue={(v) => `${v} req/s`} />

<Sparkline>

Lấp đầy chiều rộng bằng các điểm mới nhất. height lớn hơn 1 render một vùng tô kín.

<Sparkline data={throughput} height={3} />

sparkline(values) trả về cùng sparkline đó dưới dạng chuỗi.

<ProgressBar>

PropMô tả
value / maxTiến độ (bỏ qua để dùng trạng thái không xác định)
variantblock (mượt) line thin
widthSố ô (mặc định: lấp đầy)
labelVăn bản đầu thanh
formatValueVăn bản cuối thanh (mặc định 42%)

Thanh không xác định quét theo nhịp frame của bộ render và dừng khi đầu ra tạm dừng.

<Gradient>

Nội suy màu theo từng ô. Chuỗi nhiều dòng dùng chung một dải chuyển màu, nên có thể kết hợp với <AsciiFont>.

<Gradient colors={["#ff4d8d", "#3291ff"]} bold>▼ Text.js</Gradient><Gradient colors="dusk">{renderAsciiFont("SHIP").join("\n")}</Gradient>

Dải chuyển màu có tên: geist dusk ocean mono ember.

<Image>

Console của Chromium và Firefox vẽ ảnh dưới dạng sprite pixel. Ảnh pixel art (256 màu trở xuống, không có pixel bán trong suốt) giữ tối đa 8 × 16 pixel trên mỗi ô, còn ảnh chụp giữ tối đa 4 × 8. Safari, terminal, bản sao văn bản thuần và trang có runtime = "server" dùng nửa khối ▀: mỗi ô chứa hai pixel, pixel trên dùng màu chữ và pixel dưới dùng màu nền. Truyền renderMode="halfblock" để vẽ nửa khối ở mọi nơi, như <Image> trong phiên bản 1.3.

<Image src="/avatar.png" width={24} /><Image pixels={{ width, height, data }} height={8} fit="cover" />
PropMô tả
srcURL ảnh (chỉ trên trình duyệt)
pixelsRGBA thô dưới dạng { width, height, data }, 4 byte mỗi pixel theo thứ tự dòng
width / heightChiều rộng theo ô, chiều cao theo dòng. Truyền một trong hai để giữ tỷ lệ khung hình, hoặc không truyền cả hai để dùng 1 × 2 pixel mỗi ô (src co giãn đến tối đa 256 × 256 px)
fitcontain (mặc định), cover hoặc fill
altVăn bản hiển thị khi src đang tải hoặc tải thất bại
renderModeauto (mặc định: sprite ở nơi hỗ trợ, nửa khối ▀ ở nơi khác) hoặc halfblock

<Image> cũng nhận prop layout.

src tải qua canvas, nên ảnh khác nguồn cần CORS. pixels nhận RGBA thô ở mọi nơi, kể cả terminal.

Ảnh cũng hiển thị dưới dạng nửa khối trong Chromium và Firefox khi không thể vẽ thành một sprite:

  • Hai ảnh nằm cạnh nhau trên cùng các dòng, như trong thư viện ảnh.
  • Ảnh chụp có văn bản bên cạnh. Pixel art bên cạnh văn bản vẫn là sprite.
  • Ảnh bị cắt bởi hộp overflow="hidden", hoặc bị hộp khác che một phần.
  • Pixel trong suốt nằm trên văn bản hoặc trên nhiều hơn một màu nền.

<Pixels> (thử nghiệm)

@textjs/react/experimental xuất <Pixels> cho bộ đệm frame 0xRRGGBBAA cập nhật trực tiếp như trò chơi, trình giả lập và video. Ghi trực tiếp pixel đóng gói vào source.data và tăng frame để vẽ lại.

import { Pixels, type PixelSource } from "@textjs/react/experimental";const source: PixelSource = { width: 320, height: 200, data: new Uint32Array(320 * 200) };<Pixels source={source} frame={frame} width={80} height={25} pixelAspect={5 / 6} />
PropMô tả
source{ width, height, data: Uint32Array } theo thứ tự 0xRRGGBBAA
frameBộ đếm frame; tăng sau khi sửa source.data
width / heightKích thước hộp theo ô và dòng
fitcontain (mặc định) hoặc fill
pixelAspectChiều rộng hiển thị chia cho chiều cao của một pixel nguồn (mặc định 1)
paletteBảng màu PackedColor[] tùy chọn để lượng tử hóa màu theo
sampleBộ lọc dự phòng cho nửa khối: nearest (mặc định) hoặc average
renderModeauto (mặc định: sprite ở nơi hỗ trợ, nửa khối ▀ ở nơi khác) hoặc halfblock

renderMode="auto" vẽ sprite dạng pixel trong Chromium và trong Firefox theo quy tắc kiểu của console (chưa đo hiệu năng), đồng thời dùng nửa khối ▀ làm phương án dự phòng trong Safari, terminal, bản sao văn bản thuần và trang có runtime = "server". Truyền renderMode="halfblock" để vẽ nửa khối ở mọi nơi.

Để vẽ pixel không dùng React, nhập drawPixels từ @textjs/core/experimental cùng với DrawPixelsOptions, PixelSource, PixelFit, PixelSample, PixelRenderMode, PixelEncoding và PixelRect. Tùy chọn encoding: "rgba" giữ hơn 256 màu và độ trong suốt alpha chuyển mượt cho ảnh tĩnh, còn fallback vẽ các ô do bạn định nghĩa ở nơi không thể hiển thị sprite. Xem Thay đổi không tương thích để biết cách đánh phiên bản cho các thành phần xuất thử nghiệm.

Sửa trang này trên GitHub