Adaptateurs de framework

Utilisez les graphiques en lignes et cours de Sixtyfold depuis React, Vue, Angular, Svelte et SolidJS.

Les packages pour frameworks de Sixtyfold sont de minces adaptateurs de cycle de vie autour des mêmes moteurs LineChart et StockChart. Ils ne dupliquent pas la logique de rendu, ne transforment pas les données, n’ajoutent pas de télémétrie d’exécution et n’intègrent pas chaque graphique dans votre application.

Installez un adaptateur et le moteur que vous utilisez. Importez uniquement son point d’entrée /line ou /stock :

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

Remplacez react par vue, angular, svelte ou solid. Pour un graphique boursier, installez @sixtyfold/stock et importez /stock. Les moteurs de graphique sont des dépendances peer optionnelles de l’adaptateur ; installer un graphique en ligne n’installe donc pas le module stock.

Contrat d’adaptateur partagé

Tous les adaptateurs créent le graphique après le montage du composant, attendent initialize(), appliquent les entrées réactives et appellent destroy() au démontage. Cela termine également un worker de graphique et libère les observers, listeners et références aux gros buffers. Pendant le SSR, le composant n’émet que son hôte canvas ; utilisez @sixtyfold/ssr lorsque le serveur doit peindre les pixels du graphique.

Prop/entréeType ligneType stockComportement
optionsLineChartOptionsStockChartOptionsInstantané au moment de la construction. Remontez l’adaptateur pour le remplacer ; utilisez appearance pour des modifications visuelles en direct.
dataTimeSeriesData | MultiSeriesDataOHLCVDataDonnées massives transférables à usage unique, réactives par identité d’objet. Assignez toujours des tampons neufs avec un objet neuf.
dataUpdateOptionsLineDataUpdateOptionsContrôle le remplacement animé des données de ligne, y compris preservePreviousFrame.
appearanceDeepPartial<LineAppearanceOptions>DeepPartial<StockAppearanceOptions>Patch visuel profond appliqué sans recréer le graphique ni remplacer les données.
viewportPartial<Viewport>Partial<Viewport>Plage X réactive. Fournissez xMin, xMax, ou les deux dans les unités X du graphique.
viewportAnimatedbooleanbooleanRemplace l’animation pour la mise à jour de viewport correspondante. Laisser indéfini pour hériter des options du graphique.
statsIntervalMsnumbernumberIntervalle minimum de rappel de télémétrie en millisecondes ; la télémétrie reste désactivée sans écouteur.
rappel/événement de disponibilitéLineChartStockChartSe déclenche une fois après la résolution de initialize() et expose le graphique impératif.
callback/événement d'erreurunknownunknownSignale les erreurs de construction, les échecs d'initialisation/exécution du renderer et les échecs de résolution ou de livraison des superpositions.
callback/événement de statistiquesLineChartStatsStockChartStatsSignale la télémétrie du renderer et des données à statsIntervalMs.
callback/événement de visibilité de sérieSeriesVisibilityChangeEventSignale les changements de visibilité provenant de l'initialisation, des appels d'API et de la légende interactive.

Chaque adaptateur signale la disponibilité, les erreurs de construction, du renderer et des superpositions, ainsi que les statistiques de rendu. Les adaptateurs de type ligne signalent aussi SeriesVisibilityChangeEvent. Chaque framework expose l'instance sous-jacente LineChart ou StockChart via son API de ref ou de composant conventionnelle, de sorte que les opérations impératives peu courantes restent disponibles.

Gérer les défaillances des graphiques

Les hooks d'erreur d'adaptateur acceptent unknown car les erreurs de construction JavaScript ne sont pas tenues d'utiliser une classe particulière. Les échecs émis par le renderer Sixtyfold sont des instances de ChartRendererError. Les échecs de résolution ou de livraison des overlays sont des instances de ChartOverlayError. Restreignez la valeur avant de lire des champs structurés :

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

Utilisez la même importation depuis @sixtyfold/stock dans une application n'utilisant que le stock. error.phase est soit "initialization" soit "runtime". Une défaillance du renderer détruit cette instance de graphique ; remontez l'adaptateur si l'application choisit de récupérer. Une défaillance d'overlay n'est pas fatale : les éléments valides restent installés ; si tous les éléments demandés échouent, la superposition rendue précédemment est conservée.

Les tableaux typés en masse sont transférés vers le worker. Traitez chaque objet de données comme à usage unique : ne le muter pas sur place, et assignez un nouvel objet avec de nouveaux buffers pour chaque mise à jour. Cela préserve la voie zéro-copie pour des jeux de données de plusieurs millions de points.

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

Le composant accepte les attributs canvas ordinaires. Son ref expose ref.current?.chart. La construction initiale est différée en microtâche afin que le cycle de vie de développement de React Strict Mode ne puisse pas transférer les données initiales deux fois.

Surface réservée à ReactTypeDescription
refRef<LineChartHandle | StockChartHandle>Poignée transmise dont le champ chart contient l’instance impérative montée ou null.
attributs natifs du canvasCanvasHTMLAttributes<HTMLCanvasElement>Transmis au canvas, à l’exclusion de children. Utilisez-les pour aria-label, les noms de classe, le style inline, les tests et les métadonnées de pointeur.
onReady(chart) => voidAppelée une fois après une initialisation réussie.
onError(error: unknown) => voidAppelée pour la construction, l’initialisation/exécution du renderer ou un échec de résolution/livraison de l’overlay.
onStats(stats) => voidActive et reçoit la télémétrie du renderer.
onSeriesVisibilityChange(event) => voidRappel de visibilité des séries uniquement pour les lignes.

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>

Utilisez shallowRef ou markRaw pour des données en masse plutôt que les proxies profonds de Vue. Le composant émet ready, error et stats ; les graphiques en ligne émettent aussi seriesVisibilityChange. Une ref de template expose sa ref superficielle chart.

Surface VueTypeDescription
shared propsVoir l'index des props du frameworkLes props Vue utilisent les mêmes noms et types que le contrat partagé.
ready événementLineChart | StockChartÉmet le chart impératif initialisé.
error événementunknownÉmet la construction, l'initialisation/exécution du renderer ou un échec de résolution/livraison de la superposition.
stats événementLineChartStats | StockChartStatsActive et émet la télémétrie.
seriesVisibilityChange événementSeriesVisibilityChangeEventÉvénement de visibilité réservé aux lignes.
attributs héritésAttributs natifs du canvasLes attributs non reconnus tels que aria-label, class et style sont transmis au canvas.
réf de template chartShallowRef<LineChart | StockChart | null>Expose le chart impératif monté sans le proxyfier en profondeur.

Angular

Le paquet Angular 20–22 utilise des composants standalone et des points d’entrée secondaires au format 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);
  }
}

Les entrées suivent le tableau partagé plus des champs d’accessibilité ciblés et canvasAttributes. Les sorties sont chartReady, chartError et stats ; le composant de courbe émet aussi seriesVisibilityChange. Une référence de composant expose son chart public.

Le générateur d’application Angular ne transforme pas les URL de worker de Vite appartenant au paquet. Ajoutez les engines utilisés par l’application au tableau assets de la cible de build dans angular.json :

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

La construction du graphique est protégée par isPlatformBrowser, ainsi l’Angular SSR ne touche pas aux globals du navigateur.

Angular inputTypeDescription
optionsLineChartOptions | StockChartOptionsInstantané au moment de la construction.
dataLineData | OHLCVDataJeu de données réactif transférable en une seule fois.
dataUpdateOptionsLineDataUpdateOptionsOptions d'animation de remplacement uniquement pour les lignes.
appearanceDeepPartial<LineAppearanceOptions | StockAppearanceOptions>Correctif visuel réactif.
viewportPartial<Viewport>Correctif réactif multi-domaine.
viewportAnimatedboolean | undefinedSurcharge d'animation pour l'entrée du viewport.
statsIntervalMsnumber | undefinedIntervalle télémétrique minimum lorsque stats a des abonnés.
canvasClassstringClasse appliquée au canvas interne.
ariaLabelstringNom accessible du canvas.
ariaDescribedBystringIdentifiants du texte adjacent ou des alternatives tabulaires qui décrivent le graphique.
canvasRolestringRôle explicite du canvas ; en général laisser le graphique choisir application ou img.
canvasTabIndexnumberOrdre d'onglets explicite ; les graphiques en lecture seule sont omis par défaut.
canvasAttributesRecord<string, string | number | boolean | null | undefined>Attributs canvas supplémentaires tels que des hooks de test et des métadonnées. La classe, le style, la taille, le rôle, l'ordre d'onglets et les entrées d'accessibilité focalisées restent gérés séparément.
Sortie AngularCharge utileDescription
chartReadyLineChart | StockChartÉmet le graphique impératif initialisé.
chartErrorunknownDéclenche un échec de construction, d’initialisation/exécution du rendu ou de résolution/livraison de la superposition.
statsLineChartStats | StockChartStatsActive et émet la télémétrie du renderer.
seriesVisibilityChangeSeriesVisibilityChangeEventSortie de visibilité uniquement pour les lignes.
public chartLineChart | StockChart | nullInstance impérative exposée sur une référence de composant.

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 est bindable pour un accès impératif. Les props Svelte supplémentaires sont onReady, onError, onStats, onSeriesVisibilityChange pour les graphiques en lignes, canvasClass, canvasStyle et ariaLabel.

Prop/binding SvelteTypeDescription
props partagéesVoir l'index des props pour les frameworksUtilise les props partagées options, data, appearance, viewport, telemetry et callback.
onReady(chart) => voidReçoit le graphique impératif initialisé.
onError(error: unknown) => voidSignale un échec de construction, d'initialisation/exécution du renderer ou de résolution/livraison de la superposition.
onStats(stats) => voidActive et reçoit la télémétrie.
onSeriesVisibilityChange(event) => voidRappel de visibilité limité aux lignes.
canvasClassstringClasse appliquée au canvas.
canvasStylestringDéclaration CSS appliquée au canvas.
ariaLabelstringNom accessible du canvas.
bindable chartLineChart | StockChart | nullGraphe impératif monté ; réinitialisé à null lors du nettoyage.

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 reçoit le graphique monté et null ultérieurement lors du nettoyage. canvasProps transmet les attributs natifs du canvas. Tous les autres props suivent le contrat partagé.

Surface spécifique à SolidJSTypeDescription
chartRef(chart | null) => voidReçoit le graphique impératif monté et null ultérieurement lors du nettoyage.
canvasPropsJSX.CanvasHTMLAttributes<HTMLCanvasElement>Attributs natifs du canvas, métadonnées d'accessibilité, class, style et hooks de test.
onReady(chart) => voidAppelé après une initialisation réussie.
onError(error: unknown) => voidAppelé pour la construction, l'initialisation/exécution du renderer ou en cas d'échec de résolution/livraison de l'overlay.
onStats(stats) => voidActive et reçoit la télémétrie.
onSeriesVisibilityChange(event) => voidRappel de visibilité uniquement pour les lignes.

Exemples complets

Le dépôt public inclut une application réactive minimale pour chaque framework pris en charge. Chaque application montre les packages, la structure des données, la configuration du graphique et le nettoyage nécessaires pour reproduire à la fois un graphique en ligne et un graphique boursier.