Adaptadores de framework

Use gráficos de linhas e de ações da Sixtyfold em React, Vue, Angular, Svelte e SolidJS.

Os pacotes de framework da Sixtyfold são adaptadores de ciclo de vida leves em torno dos mesmos motores LineChart e StockChart. Não duplicam lógica de renderização, não remodelam dados, não acrescentam telemetria em tempo de execução nem incorporam todos os gráficos na sua aplicação.

Instale um adaptador mais o motor que utiliza. Importe apenas o seu ponto de entrada /line ou /stock:

pnpm add @sixtyfold/react@next @sixtyfold/line@next
import { SixtyfoldLineChart } from "@sixtyfold/react/line";

Substitua react por vue, angular, svelte ou solid. Para um gráfico de ações, instale @sixtyfold/stock e importe /stock. Os motores de gráfico são dependências peer opcionais do adaptador, pelo que instalar um gráfico de linhas não instala o de ações.

Contrato partilhado do adaptador

Todos os adaptadores criam o gráfico após o componente montar, aguardam initialize(), aplicam entradas reativas e chamam destroy() ao desmontar. Isto também termina um worker do gráfico e liberta observadores, ouvintes e referências a buffers grandes. Durante SSR o componente emite apenas o seu host de canvas; use @sixtyfold/ssr quando o servidor tiver de pintar pixels do gráfico.

Prop/entradaTipo de linhaTipo de açõesComportamento
optionsLineChartOptionsStockChartOptionsInstantâneo em tempo de construção. Remonte o adaptador para o substituir; use appearance para alterações visuais em direto.
dataTimeSeriesData | MultiSeriesDataOHLCVDataDados massivos transferíveis one-shot, reativos por identidade de objeto. Atribua sempre buffers novos com um objeto novo.
dataUpdateOptionsLineDataUpdateOptionsControla a substituição animada de dados de linha, incluindo preservePreviousFrame.
appearanceDeepPartial<LineAppearanceOptions>DeepPartial<StockAppearanceOptions>Patch visual profundo aplicado sem recriar o gráfico ou substituir os dados.
viewportPartial<Viewport>Partial<Viewport>Intervalo reativo em X. Forneça xMin, xMax ou ambos nas unidades X do gráfico.
viewportAnimatedbooleanbooleanSubstitui a animação para a atualização correspondente do viewport. Deixe indefinido para herdar as opções do gráfico.
statsIntervalMsnumbernumberIntervalo mínimo do callback de telemetria em milissegundos; a telemetria permanece desativada sem um listener.
callback/evento de prontidãoLineChartStockChartDispara uma vez após initialize() resolver e expõe o gráfico imperativo.
callback/event de errounknownunknownReporta erros de construção, falhas de inicialização/execução do renderer e falhas de resolução ou entrega de sobreposições.
callback/event de estatísticasLineChartStatsStockChartStatsReporta telemetria do renderer e dos dados em statsIntervalMs.
callback/event de visibilidade da sérieSeriesVisibilityChangeEventReporta alterações de visibilidade desde a inicialização, chamadas da API e a legenda interativa.

Cada adapter reporta prontidão, erros de construção, do renderer e de sobreposições, além de estatísticas de renderização. Os adapters de linha também reportam SeriesVisibilityChangeEvent. Cada framework expõe a instância subjacente LineChart ou StockChart através do seu ref convencional ou API de componente, para que operações imperativas incomuns permaneçam disponíveis.

Tratar falhas de gráfico

Os hooks de erro do adaptador aceitam unknown porque erros de construção JavaScript não são obrigados a usar uma classe específica. Falhas emitidas pelo renderer da Sixtyfold são instâncias ChartRendererError. Falhas de resolução ou entrega de sobreposições são instâncias ChartOverlayError. Afixe o tipo do valor antes de ler campos estruturados:

import {
  ChartOverlayError,
  ChartRendererError,
} from "@sixtyfold/line";

export function reportChartError(error: unknown) {
  if (error instanceof ChartRendererError) {
    console.error(error.phase, error.message);
    return;
  }
  if (error instanceof ChartOverlayError) {
    console.error("Overlay sources failed:", error.sources);
    return;
  }
  console.error(error);
}

Use a mesma importação de @sixtyfold/stock numa aplicação apenas com stock. error.phase é ou "initialization" ou "runtime". Uma falha do renderer destrói essa instância do gráfico; volte a montar o adaptador se a aplicação optar por recuperar. Uma falha de sobreposição não é fatal: os itens bem-sucedidos permanecem instalados; se todos os itens pedidos falharem, mantém-se a sobreposição renderizada anteriormente.

Arrays tipados em massa transferem para o worker. Trate cada objecto de dados como one-shot: não o mutar in-place, e atribua um objecto novo com buffers novos para cada atualização. Isto preserva o caminho zero-copy para conjuntos de dados com milhões de pontos.

React

import { useMemo, useRef } from "react";
import {
  SixtyfoldLineChart,
  type LineChartHandle,
} from "@sixtyfold/react/line";

export function Signals() {
  const chartRef = useRef<LineChartHandle>(null);
  const data = useMemo(() => ({
    x: new Float64Array([0, 1, 2, 3]),
    y: new Float64Array([3, 7, 4, 9]),
    length: 4,
  }), []);

  return (
    <SixtyfoldLineChart
      ref={chartRef}
      data={data}
      aria-label="Signal history"
      onError={console.error}
    />
  );
}

O componente aceita atributos ordinários de canvas. O seu ref expõe ref.current?.chart. A construção inicial é adiada para microtask por isso a rotina de verificação do ciclo de vida de desenvolvimento do React Strict Mode não pode transferir os dados iniciais duas vezes.

Superfície apenas para ReactTipoDescrição
refRef<LineChartHandle | StockChartHandle>Handle encaminhado cujo campo chart contém a instância imperativa montada ou null.
atributos nativos do canvasCanvasHTMLAttributes<HTMLCanvasElement>Passados para o canvas, excluindo children. Use-os para aria-label, nomes de classe, estilo inline, testes e metadados de pointer.
onReady(chart) => voidChamado uma vez após a inicialização bem-sucedida.
onError(error: unknown) => voidChamado para construção, inicialização/execução do renderer ou falha de resolução/entrega da sobreposição.
onStats(stats) => voidPermite e recebe telemetria do renderer.
onSeriesVisibilityChange(event) => voidCallback de visibilidade apenas para séries de linha.

Vue

<script setup lang="ts">
import { shallowRef } from "vue";
import { SixtyfoldLineChart } from "@sixtyfold/vue/line";

const data = shallowRef({
  x: new Float64Array([0, 1, 2, 3]),
  y: new Float64Array([3, 7, 4, 9]),
  length: 4,
});
</script>

<template>
  <SixtyfoldLineChart
    :data="data"
    aria-label="Signal history"
    @error="console.error"
  />
</template>

Use shallowRef ou markRaw para dados em massa em vez de proxies profundos do Vue. O componente emite ready, error e stats; gráficos de linhas também emitem seriesVisibilityChange. Uma ref de template expõe a sua ref superficial chart.

Superfície VueTipoDescrição
shared propsConsulte o índice de props do frameworkAs props do Vue usam os mesmos nomes e tipos do contrato partilhado.
ready eventoLineChart | StockChartEmite o gráfico imperativo inicializado.
error eventounknownEmite construção, inicialização/execução do renderer ou falha de resolução/entrega da sobreposição.
stats eventoLineChartStats | StockChartStatsAtiva e emite telemetria.
seriesVisibilityChange eventoSeriesVisibilityChangeEventEvento de visibilidade apenas de linha.
atributos herdadosAtributos nativos do canvasAtributos não reconhecidos como aria-label, class e style são encaminhados para o canvas.
referência de template chartShallowRef<LineChart | StockChart | null>Exponibiliza o gráfico imperativo montado sem o proxy profundo.

Angular

O pacote Angular 20–22 usa componentes standalone e pontos de entrada secundários no Angular Package Format.

import { Component } from "@angular/core";
import { SixtyfoldLineChartComponent } from "@sixtyfold/angular/line";

@Component({
  standalone: true,
  imports: [SixtyfoldLineChartComponent],
  template: `
    <sixtyfold-line-chart
      [data]="data"
      ariaLabel="Signal history"
      (chartError)="reportError($event)"
    />
  `,
})
export class Signals {
  data = {
    x: new Float64Array([0, 1, 2, 3]),
    y: new Float64Array([3, 7, 4, 9]),
    length: 4,
  };

  reportError(error: unknown) {
    console.error(error);
  }
}

Os inputs seguem a tabela partilhada mais campos focados de acessibilidade e canvasAttributes. Os outputs são chartReady, chartError e stats; o componente de linha também emite seriesVisibilityChange. Uma referência de componente expõe o seu público chart.

O construtor de aplicações do Angular não transforma URLs de worker pertencentes ao pacote. Adicione os engines usados pela aplicação ao array assets do target de build em angular.json:

[
  { "glob": "**/*", "input": "node_modules/@sixtyfold/line/dist/assets", "output": "assets" },
  { "glob": "**/*", "input": "node_modules/@sixtyfold/stock/dist/assets", "output": "assets" }
]

A construção do gráfico é protegida com isPlatformBrowser, portanto o Angular SSR não altera os globals do browser.

Angular inputTipoDescrição
optionsLineChartOptions | StockChartOptionsInstantâneo no momento da construção.
dataLineData | OHLCVDataConjunto de dados reativo transferível de uso único.
dataUpdateOptionsLineDataUpdateOptionsOpções de animação de substituição apenas para linhas.
appearanceDeepPartial<LineAppearanceOptions | StockAppearanceOptions>Patch visual reativo.
viewportPartial<Viewport>Patch reativo X-domain.
viewportAnimatedboolean | undefinedAnulação de animação para a entrada do viewport.
statsIntervalMsnumber | undefinedIntervalo mínimo de telemetria quando stats tem subscritores.
canvasClassstringClasse aplicada ao canvas interno.
ariaLabelstringNome acessível do canvas.
ariaDescribedBystringIDs de alternativas em texto adjacente ou tabela que descrevem o gráfico.
canvasRolestringPapel explícito do canvas; normalmente deixar o gráfico escolher application ou img.
canvasTabIndexnumberOrdem de tabulação explícita; gráficos apenas de visualização são omitidos por predefinição.
canvasAttributesRecord<string, string | number | boolean | null | undefined>Atributos adicionais do canvas, como ganchos de teste e metadados. Classe, estilo, tamanho, função, ordem de tabulação e os inputs de acessibilidade focados continuam a ser geridos separadamente.
Angular outputPayloadDescription
chartReadyLineChart | StockChartEmite o gráfico imperativo inicializado.
chartErrorunknownEmite falha na construção, inicialização/execução do renderer ou na resolução/entrega da sobreposição.
statsLineChartStats | StockChartStatsAtiva e emite telemetria do renderer.
seriesVisibilityChangeSeriesVisibilityChangeEventSaída de visibilidade apenas de linhas.
public chartLineChart | StockChart | nullInstância imperativa exposta numa referência de componente.

Svelte

<script lang="ts">
  import LineChart from "@sixtyfold/svelte/line";

  const data = {
    x: new Float64Array([0, 1, 2, 3]),
    y: new Float64Array([3, 7, 4, 9]),
    length: 4,
  };
</script>

<LineChart
  {data}
  ariaLabel="Signal history"
  onError={console.error}
/>

chart é vinculável para acesso imperativo. Props Svelte adicionais são onReady, onError, onStats, onSeriesVisibilityChange para gráficos de linhas, canvasClass, canvasStyle e ariaLabel.

Prop/vinculação SvelteTipoDescrição
props partilhadasConsulte o índice de props do frameworkUsa as props partilhadas options, data, appearance, viewport, telemetry e callbacks.
onReady(chart) => voidRecebe o gráfico imperativo inicializado.
onError(error: unknown) => voidInforma falhas na construção, inicialização/execução do renderer ou na resolução/entrega da sobreposição.
onStats(stats) => voidAtiva e recebe telemetria.
onSeriesVisibilityChange(event) => voidCallback de visibilidade apenas para linhas.
canvasClassstringClasse aplicada ao canvas.
canvasStylestringDeclaração CSS aplicada ao canvas.
ariaLabelstringNome acessível do canvas.
bindable chartLineChart | StockChart | nullGráfico imperativo montado; reinicia para null na limpeza.

SolidJS

import { SixtyfoldLineChart } from "@sixtyfold/solid/line";

const data = {
  x: new Float64Array([0, 1, 2, 3]),
  y: new Float64Array([3, 7, 4, 9]),
  length: 4,
};

export function Signals() {
  return (
    <SixtyfoldLineChart
      data={data}
      canvasProps={{ "aria-label": "Signal history" }}
      chartRef={(chart) => console.log(chart)}
      onError={console.error}
    />
  );
}

chartRef recebe o gráfico montado e, durante a limpeza, null. canvasProps transmite atributos nativos do canvas. Todas as restantes props seguem o contrato partilhado.

Superfície exclusiva SolidJSTipoDescrição
chartRef(chart | null) => voidRecebe o gráfico imperativo montado e, durante a limpeza, null.
canvasPropsJSX.CanvasHTMLAttributes<HTMLCanvasElement>Atributos nativos do canvas, metadados de acessibilidade, class, style e ganchos de teste.
onReady(chart) => voidChamado após a inicialização bem-sucedida.
onError(error: unknown) => voidChamado para construção, inicialização/execução do renderer ou falha de resolução/entrega da sobreposição.
onStats(stats) => voidAtiva e recebe telemetria.
onSeriesVisibilityChange(event) => voidCallback de visibilidade apenas para linha.

Exemplos completos

O repositório público inclui uma aplicação responsiva mínima para cada framework suportado. Cada aplicação mostra os pacotes, a estrutura dos dados, a configuração do gráfico e a limpeza necessária para reproduzir tanto um gráfico de linha como um gráfico de ações.