Adaptadores de frameworks

Utilize os gráficos de linhas e de ações da Sixtyfold a partir de 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 a lógica de renderização, não transformam dados, não adicionam telemetria em runtime nem incorporam todos os gráficos na sua aplicação.

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

pnpm add @sixtyfold/react@1 @sixtyfold/line@1
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() no unmount. Isto também termina um chart worker 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 | MultiSeriesDataOHLCVDataTransferência única de dados em massa transferíveis, reativos por identidade de objeto. Atribua sempre buffers novos com um objeto novo.
dataUpdateOptionsLineDataUpdateOptions—Definições reativas para substituição animada de dados de linha, incluindo preservePreviousFrame; alterá‑las isoladamente não retransfere dados já definidos.
appearanceDeepPartial<LineAppearanceOptions>DeepPartial<StockAppearanceOptions>Correção visual profunda aplicada sem recriar o gráfico nem substituir os dados.
viewportPartial<Viewport>Partial<Viewport>Intervalo X reativo. Forneça xMin, xMax ou ambos nas unidades X do gráfico.
viewportAnimatedbooleanbooleanSubstitui a animação para a atualização de viewport correspondente. Deixe indefinido para herdar as opções do gráfico.
statsIntervalMsnumbernumberIntervalo mínimo de callback de telemetria em milissegundos; a telemetria permanece desativada sem um listener.
callback/evento de prontidãoLineChartStockChartDispara uma vez por instância do gráfico após a inicialização e o primeiro lote de props de dados, aparência e viewport bem‑sucedido; não aguarda um frame pintado.
callback/event de errounknownunknownReporta erros de construção e de instalação reativa de props, falhas de inicialização/execução do renderer e falhas na resolução ou entrega de overlays.
callback/event de estatísticasLineChartStatsStockChartStatsReporta telemetria do renderer e dos dados em statsIntervalMs.
callback/event de visibilidade-de-sérieSeriesVisibilityChangeEvent—Reporta alterações de visibilidade originadas na inicialização, chamadas à API e pela legenda interativa.

Cada adapter reporta prontidão, erros de construção e de instalação de props, erros do renderer e de overlays, 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 da sua API convencional de ref ou componente, para que operações imperativas invulgares permaneçam disponíveis.

Prontidão significa que as props iniciais foram aceites, não que o primeiro frame do canvas tenha sido pintado. Alterações imperativas efectuadas no callback de ready não são sobrescritas por um lote diferido de props iniciais.

Tratar falhas do gráfico

Os hooks de erro do adaptador aceitam unknown porque erros de construção JavaScript não são obrigados a usar uma determinada classe. Falhas emitidas pelo renderer da Sixtyfold são instâncias de ChartRendererError. Falhas de resolução de overlay ou de entrega pelo renderer são instâncias de ChartOverlayError. Restrinja o 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 de gráfico; remonte o adaptador se a aplicação optar por recuperar. Uma falha de overlay não é fatal: os itens instalados com sucesso mantêm‑se; se cada item solicitado falhar, o overlay previamente renderizado mantém‑se.

Uma instalação rejeitada de props reativas regista um erro e retém a notificação inicial de pronto. Forneça props corrigidas para tentar novamente sem remontar. Dados já instalados com sucesso não são transferidos novamente quando uma prop posterior falha. Esta recuperação não se aplica a erros terminais do renderer.

Arrays tipados em massa são transferidos para o worker. Trate cada objeto de dados como de utilização única: não o altere no local e atribua um objeto novo com buffers novos para cada actualizaçã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 normais de canvas. O seu ref expõe ref.current?.chart. A construção inicial é diferida por microtask para que a sonda do ciclo de vida de desenvolvimento do React Strict Mode não possa transferir os dados iniciais duas vezes.

React 19.2+ Activity pode ocultar e revelar um gráfico sem recriar o seu renderer nem retransmitir dados. A instalação de props e as notificações de prontidão/erro aguardam até à revelação; estatísticas e callbacks de visibilidade de séries são desligados enquanto ocultos. O worker e os buffers retidos são libertados quando o componente é efetivamente desmontado, incluindo uma desmontagem enquanto estiver oculto.

O React desliga o ref encaminhado enquanto oculto. Um handle previamente capturado também retorna null de .chart até à revelação. O React 18 e as versões do React 19 anteriores destroem os gráficos na desmontagem através de limpeza passiva, incluindo gráficos ocultos por um boundary re-suspenso Suspense.

Superfície apenas ReactTipoDescrição
refRef<LineChartHandle | StockChartHandle>Handle encaminhado cujo campo chart contém a instância imperativa montada ou null.
atributos nativos do canvasCanvasHTMLAttributes<HTMLCanvasElement>Transmitidos para o canvas, excluindo children. Use-os para aria-label, nomes de classe, estilo inline, testes e metadados de ponteiro.
onReady(chart) => voidChamado uma vez após a inicialização e o primeiro lote reativo de props bem‑sucedido.
onError(error: unknown) => voidChamado para construção, instalação reativa de props, inicialização/execução do renderer, ou falha na resolução/entrega de overlays.
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>

Utilize 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.

A recolha de estatísticas segue os ouvintes reativos. Um único ouvinte @stats.once desativa a recolha após o seu primeiro evento; um ouvinte normal @stats mantém‑na ativa. Um ouvinte consumido .once permanece consumido durante a vida útil desse componente.

Superfície VueTipoDescrição
props partilhadasConsulte o índice de props do frameworkAs props Vue usam os mesmos nomes e tipos que o contrato partilhado.
ready eventoLineChart | StockChartEmite o gráfico após a inicialização e o primeiro lote reativo de props bem‑sucedido.
error eventounknownEmite falha na construção, na instalação reativa de props, na inicialização/execução do renderer ou na resolução/entrega de overlays.
stats eventLineChartStats | StockChartStatsAtiva e emite telemetria.
seriesVisibilityChange eventSeriesVisibilityChangeEventEvento de visibilidade apenas para linhas.
atributos herdadosAtributos nativos do canvasAtributos não reconhecidos como aria-label, class e style são encaminhados para o canvas.
template ref chartShallowRef<LineChart | StockChart | null>Expõe o chart imperativo montado sem o proxy profundo.

Angular

O pacote Angular 20–22 utiliza componentes autónomos 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 de acessibilidade focados e canvasAttributes. Os outputs são chartReady, chartError e stats; o componente de linha também emite seriesVisibilityChange. Uma referência ao componente expõe o seu chart público.

A recolha de estatísticas é ativada apenas enquanto um subscritor ativo puder receber o output stats. Esta cessa depois do último subscritor cancelar a subscrição, incluindo take(1), e quando o output completa, produz um erro ou é fechado.

O construtor de aplicações do Angular não transforma URLs de workers do Vite pertencentes a pacotes. Adicione os engines usados pela aplicação ao array assets do destino 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, pelo que o SSR do Angular não altera globais do browser.

Entrada AngularTipoDescrição
optionsLineChartOptions | StockChartOptionsInstantâneo em tempo de construção.
dataLineData | OHLCVDataConjunto de dados reativo transferível de utilização única.
dataUpdateOptionsLineDataUpdateOptionsOpções de animação de substituição apenas para linhas.
appearanceDeepPartial<LineAppearanceOptions | StockAppearanceOptions>Correção visual reativa.
viewportPartial<Viewport>Correção reativa do domínio X.
viewportAnimatedboolean | undefinedAnulação da animação para a entrada da viewport.
statsIntervalMsnumber | undefinedIntervalo mínimo de telemetria quando stats tem assinantes.
canvasClassstringClasse aplicada ao canvas interior.
ariaLabelstringNome acessível do canvas.
ariaDescribedBystringIDs de alternativas adjacentes de texto ou tabela que descrevem o gráfico.
canvasRolestringPapel explícito do canvas; normalmente deixe o gráfico escolher application ou img.
canvasTabIndexnumberOrdem de tabulação explícita; gráficos apenas para visualização são omitidos por omissão.
canvasAttributesRecord<string, string | number | boolean | null | undefined>Atributos adicionais do canvas como hooks de teste e metadata. Class, style, size, role, ordem de tabulação e os inputs de acessibilidade com foco continuam geridos separadamente.
Angular outputPayloadDescription
chartReadyLineChart | StockChartEmite o gráfico após a inicialização e após o primeiro lote reativo de props bem‑sucedido.
chartErrorunknownEmite falhas de construção, instalação reativa de props, inicialização/tempo de execução do renderizador ou resolução/entrega de sobreposições.
statsLineChartStats | StockChartStatsAtiva e emite telemetria do renderizador.
seriesVisibilityChangeSeriesVisibilityChangeEventSaída de visibilidade apenas de linha.
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. As propriedades Svelte adicionais são onReady, onError, onStats, onSeriesVisibilityChange para gráficos de linha, canvasClass, canvasStyle e ariaLabel.

Svelte prop/bindingTipoDescrição
props partilhadasVeja o índice de props do frameworkUtiliza as props partilhadas options, data, appearance, viewport, telemetry e callback.
onReady(chart) => voidRecebe o chart após a inicialização e o primeiro lote reactivo de instalação de props bem‑sucedido.
onError(error: unknown) => voidReporta falha na construção, na instalação reactiva de props, na inicialização/execução do renderer ou na resolução/entrega de overlays.
onStats(stats) => voidAtiva e recebe telemetria.
onSeriesVisibilityChange(event) => voidRetorno de chamada de visibilidade apenas para linhas.
canvasClassstringClasse aplicada ao canvas.
canvasStylestringTexto de declaração CSS aplicado ao canvas.
ariaLabelstringNome acessível do canvas.
ligável chartLineChart | StockChart | nullGráfico imperativo montado; reinicia para null durante a 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 mais tarde null durante a limpeza. canvasProps transmite atributos nativos do canvas. Todos os demais props seguem o contrato partilhado.

Surface apenas para SolidJSTipoDescrição
chartRef(chart | null) => voidRecebe o gráfico imperativo montado e posteriormente null durante a limpeza.
canvasPropsJSX.CanvasHTMLAttributes<HTMLCanvasElement>Atributos nativos de canvas, metadados de acessibilidade, class, style e ganchos de teste.
onReady(chart) => voidChamado após a inicialização e o primeiro lote reativo de propriedades com sucesso.
onError(error: unknown) => voidChamado para construção, instalação de props reativos, inicialização/execução do renderer, ou falha na resolução/entrega de sobreposição.
onStats(stats) => voidAtiva e recebe telemetria.
onSeriesVisibilityChange(event) => voidCallback de visibilidade apenas por 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 forma dos dados, a configuração do gráfico e a limpeza necessárias para reproduzir tanto um gráfico de linhas como um gráfico de ações.