Docs Charts Hierarchy

FlameGraphChart

React example follows below.
ts
import { useState } from "react";
type FlameNode = {
readonly id: string;
readonly label: string;
readonly value?: number;
readonly children?: readonly FlameNode[];
};
const leaf = (id: string, label: string, value: number): FlameNode => ({ id, label, value });
const group = (id: string, label: string, children: readonly FlameNode[]): FlameNode => ({
id,
label,
children,
});
const profile = group("checkout-request", "POST /checkout", [
group("price-cart", "priceCart", [
group("read-cart", "readCart", [leaf("redis-get", "redisGet", 18), leaf("hydrate-lines", "hydrateLines", 22)]),
group("apply-promotions", "applyPromotions", [leaf("load-rules", "loadRules", 12), leaf("evaluate", "evaluate", 16)]),
group("calculate-tax", "calculateTax", [leaf("lookup-nexus", "lookupNexus", 8), leaf("apply-rates", "applyRates", 9)]),
]),
group("authorize-payment", "authorizePayment", [
leaf("tokenize-card", "tokenizeCard", 14),
group("fraud-score", "fraudScore", [leaf("device", "device", 9), leaf("velocity", "velocity", 11)]),
group("create-intent", "createIntent", [leaf("stripe", "stripe", 15), leaf("ledger", "ledger", 7)]),
]),
group("persist-order", "persistOrder", [
group("write-order", "writeOrder", [leaf("pg-begin", "pgBegin", 6), leaf("insert-order", "insertOrder", 14), leaf("insert-lines", "insertLines", 11)]),
leaf("publish-event", "publishEvent", 10),
group("send-receipt", "sendReceipt", [leaf("render", "render", 5), leaf("ses", "ses", 7)]),
]),
group("allocate-stock", "allocateStock", [leaf("reserve", "reserve", 13), leaf("confirm", "confirm", 8)]),
]);
const baseline = group("checkout-request", "POST /checkout", [
group("price-cart", "priceCart", [
group("read-cart", "readCart", [leaf("redis-get", "redisGet", 24), leaf("hydrate-lines", "hydrateLines", 27)]),
group("apply-promotions", "applyPromotions", [leaf("load-rules", "loadRules", 15), leaf("evaluate", "evaluate", 21)]),
group("calculate-tax", "calculateTax", [leaf("lookup-nexus", "lookupNexus", 9), leaf("apply-rates", "applyRates", 10)]),
]),
group("authorize-payment", "authorizePayment", [
leaf("tokenize-card", "tokenizeCard", 13),
group("fraud-score", "fraudScore", [leaf("device", "device", 8), leaf("velocity", "velocity", 9)]),
group("create-intent", "createIntent", [leaf("stripe", "stripe", 14), leaf("ledger", "ledger", 7)]),
]),
group("persist-order", "persistOrder", [
group("write-order", "writeOrder", [leaf("pg-begin", "pgBegin", 6), leaf("insert-order", "insertOrder", 18), leaf("insert-lines", "insertLines", 14)]),
leaf("publish-event", "publishEvent", 12),
group("send-receipt", "sendReceipt", [leaf("render", "render", 5), leaf("ses", "ses", 7)]),
]),
group("allocate-stock", "allocateStock", [leaf("reserve", "reserve", 16), leaf("confirm", "confirm", 9)]),
]);
const flameGraphDemoFixture = { hierarchy: profile, baseline } as const;
import { FlameGraphChart } from "@grassroot/charts-react";
import { VariantToggle } from "./VariantToggle";
const { hierarchy, baseline } = flameGraphDemoFixture;
export default function FlameGraphChartDemo() {
const [mode, setMode] = useState<"profile" | "diff">("profile");
return (
<div>
<VariantToggle
label="Profile"
options={[
{ value: "profile" as const, label: "Single" },
{ value: "diff" as const, label: "Diff" },
]}
value={mode}
onChange={setMode}
/>
<FlameGraphChart
root={hierarchy}
compareTo={mode === "diff" ? baseline : undefined}
ariaLabel="Checkout request CPU profile with 215 samples; diff mode compares the previous release" />
</div>
);
}
ts
<script setup lang="ts">
type FlameNode = {
readonly id: string;
readonly label: string;
readonly value?: number;
readonly children?: readonly FlameNode[];
};
const leaf = (id: string, label: string, value: number): FlameNode => ({ id, label, value });
const group = (id: string, label: string, children: readonly FlameNode[]): FlameNode => ({
id,
label,
children,
});
const profile = group("checkout-request", "POST /checkout", [
group("price-cart", "priceCart", [
group("read-cart", "readCart", [leaf("redis-get", "redisGet", 18), leaf("hydrate-lines", "hydrateLines", 22)]),
group("apply-promotions", "applyPromotions", [leaf("load-rules", "loadRules", 12), leaf("evaluate", "evaluate", 16)]),
group("calculate-tax", "calculateTax", [leaf("lookup-nexus", "lookupNexus", 8), leaf("apply-rates", "applyRates", 9)]),
]),
group("authorize-payment", "authorizePayment", [
leaf("tokenize-card", "tokenizeCard", 14),
group("fraud-score", "fraudScore", [leaf("device", "device", 9), leaf("velocity", "velocity", 11)]),
group("create-intent", "createIntent", [leaf("stripe", "stripe", 15), leaf("ledger", "ledger", 7)]),
]),
group("persist-order", "persistOrder", [
group("write-order", "writeOrder", [leaf("pg-begin", "pgBegin", 6), leaf("insert-order", "insertOrder", 14), leaf("insert-lines", "insertLines", 11)]),
leaf("publish-event", "publishEvent", 10),
group("send-receipt", "sendReceipt", [leaf("render", "render", 5), leaf("ses", "ses", 7)]),
]),
group("allocate-stock", "allocateStock", [leaf("reserve", "reserve", 13), leaf("confirm", "confirm", 8)]),
]);
const baseline = group("checkout-request", "POST /checkout", [
group("price-cart", "priceCart", [
group("read-cart", "readCart", [leaf("redis-get", "redisGet", 24), leaf("hydrate-lines", "hydrateLines", 27)]),
group("apply-promotions", "applyPromotions", [leaf("load-rules", "loadRules", 15), leaf("evaluate", "evaluate", 21)]),
group("calculate-tax", "calculateTax", [leaf("lookup-nexus", "lookupNexus", 9), leaf("apply-rates", "applyRates", 10)]),
]),
group("authorize-payment", "authorizePayment", [
leaf("tokenize-card", "tokenizeCard", 13),
group("fraud-score", "fraudScore", [leaf("device", "device", 8), leaf("velocity", "velocity", 9)]),
group("create-intent", "createIntent", [leaf("stripe", "stripe", 14), leaf("ledger", "ledger", 7)]),
]),
group("persist-order", "persistOrder", [
group("write-order", "writeOrder", [leaf("pg-begin", "pgBegin", 6), leaf("insert-order", "insertOrder", 18), leaf("insert-lines", "insertLines", 14)]),
leaf("publish-event", "publishEvent", 12),
group("send-receipt", "sendReceipt", [leaf("render", "render", 5), leaf("ses", "ses", 7)]),
]),
group("allocate-stock", "allocateStock", [leaf("reserve", "reserve", 16), leaf("confirm", "confirm", 9)]),
]);
const flameGraphDemoFixture = { hierarchy: profile, baseline } as const;
import { ref } from "vue";
import { FlameGraphChart } from "@grassroot/charts-vue";
import VariantToggle from "./VariantToggle.vue";
const mode = ref<"profile" | "diff">("profile");
const modes = [
{ value: "profile", label: "Single" },
{ value: "diff", label: "Diff" },
];
const { hierarchy, baseline } = flameGraphDemoFixture;
</script>
<template>
<div>
<VariantToggle v-model="mode" label="Profile" :options="modes" />
<FlameGraphChart
:root="hierarchy"
:compareTo="mode === 'diff' ? baseline : undefined"
aria-label="Checkout request CPU profile with 215 samples; diff mode compares the previous release" />
</div>
</template>
ts
import { ChangeDetectionStrategy, Component, signal } from "@angular/core";
type FlameNode = {
readonly id: string;
readonly label: string;
readonly value?: number;
readonly children?: readonly FlameNode[];
};
const leaf = (id: string, label: string, value: number): FlameNode => ({ id, label, value });
const group = (id: string, label: string, children: readonly FlameNode[]): FlameNode => ({
id,
label,
children,
});
const profile = group("checkout-request", "POST /checkout", [
group("price-cart", "priceCart", [
group("read-cart", "readCart", [leaf("redis-get", "redisGet", 18), leaf("hydrate-lines", "hydrateLines", 22)]),
group("apply-promotions", "applyPromotions", [leaf("load-rules", "loadRules", 12), leaf("evaluate", "evaluate", 16)]),
group("calculate-tax", "calculateTax", [leaf("lookup-nexus", "lookupNexus", 8), leaf("apply-rates", "applyRates", 9)]),
]),
group("authorize-payment", "authorizePayment", [
leaf("tokenize-card", "tokenizeCard", 14),
group("fraud-score", "fraudScore", [leaf("device", "device", 9), leaf("velocity", "velocity", 11)]),
group("create-intent", "createIntent", [leaf("stripe", "stripe", 15), leaf("ledger", "ledger", 7)]),
]),
group("persist-order", "persistOrder", [
group("write-order", "writeOrder", [leaf("pg-begin", "pgBegin", 6), leaf("insert-order", "insertOrder", 14), leaf("insert-lines", "insertLines", 11)]),
leaf("publish-event", "publishEvent", 10),
group("send-receipt", "sendReceipt", [leaf("render", "render", 5), leaf("ses", "ses", 7)]),
]),
group("allocate-stock", "allocateStock", [leaf("reserve", "reserve", 13), leaf("confirm", "confirm", 8)]),
]);
const baseline = group("checkout-request", "POST /checkout", [
group("price-cart", "priceCart", [
group("read-cart", "readCart", [leaf("redis-get", "redisGet", 24), leaf("hydrate-lines", "hydrateLines", 27)]),
group("apply-promotions", "applyPromotions", [leaf("load-rules", "loadRules", 15), leaf("evaluate", "evaluate", 21)]),
group("calculate-tax", "calculateTax", [leaf("lookup-nexus", "lookupNexus", 9), leaf("apply-rates", "applyRates", 10)]),
]),
group("authorize-payment", "authorizePayment", [
leaf("tokenize-card", "tokenizeCard", 13),
group("fraud-score", "fraudScore", [leaf("device", "device", 8), leaf("velocity", "velocity", 9)]),
group("create-intent", "createIntent", [leaf("stripe", "stripe", 14), leaf("ledger", "ledger", 7)]),
]),
group("persist-order", "persistOrder", [
group("write-order", "writeOrder", [leaf("pg-begin", "pgBegin", 6), leaf("insert-order", "insertOrder", 18), leaf("insert-lines", "insertLines", 14)]),
leaf("publish-event", "publishEvent", 12),
group("send-receipt", "sendReceipt", [leaf("render", "render", 5), leaf("ses", "ses", 7)]),
]),
group("allocate-stock", "allocateStock", [leaf("reserve", "reserve", 16), leaf("confirm", "confirm", 9)]),
]);
const flameGraphDemoFixture = { hierarchy: profile, baseline } as const;
import { GrassrootFlameGraphChart } from "@grassroot/charts-angular";
import { VariantToggleComponent } from "./VariantToggle.component";
@Component({
selector: "app-flame-graph-chart-chart-demo",
standalone: true,
imports: [GrassrootFlameGraphChart, VariantToggleComponent],
changeDetection: ChangeDetectionStrategy.OnPush,
template: `<app-variant-toggle
label="Profile"
[options]="modes"
[value]="mode()"
(valueChange)="setMode($event)"
/><grassroot-flame-graph-chart
[root]="hierarchy"
[compareTo]="mode() === 'diff' ? baseline : undefined"
ariaLabel="Checkout request CPU profile with 215 samples; diff mode compares the previous release"
/>`,
})
export class FlameGraphChartDemoComponent {
readonly mode = signal<"profile" | "diff">("profile");
readonly modes = [
{ value: "profile", label: "Single" },
{ value: "diff", label: "Diff" },
] as const;
readonly hierarchy = flameGraphDemoFixture.hierarchy;
readonly baseline = flameGraphDemoFixture.baseline;
setMode(value: string): void {
if (value === "profile" || value === "diff") this.mode.set(value);
}
}
export default FlameGraphChartDemoComponent;
ts
<script lang="ts">
type FlameNode = {
readonly id: string;
readonly label: string;
readonly value?: number;
readonly children?: readonly FlameNode[];
};
const leaf = (id: string, label: string, value: number): FlameNode => ({ id, label, value });
const group = (id: string, label: string, children: readonly FlameNode[]): FlameNode => ({
id,
label,
children,
});
const profile = group("checkout-request", "POST /checkout", [
group("price-cart", "priceCart", [
group("read-cart", "readCart", [leaf("redis-get", "redisGet", 18), leaf("hydrate-lines", "hydrateLines", 22)]),
group("apply-promotions", "applyPromotions", [leaf("load-rules", "loadRules", 12), leaf("evaluate", "evaluate", 16)]),
group("calculate-tax", "calculateTax", [leaf("lookup-nexus", "lookupNexus", 8), leaf("apply-rates", "applyRates", 9)]),
]),
group("authorize-payment", "authorizePayment", [
leaf("tokenize-card", "tokenizeCard", 14),
group("fraud-score", "fraudScore", [leaf("device", "device", 9), leaf("velocity", "velocity", 11)]),
group("create-intent", "createIntent", [leaf("stripe", "stripe", 15), leaf("ledger", "ledger", 7)]),
]),
group("persist-order", "persistOrder", [
group("write-order", "writeOrder", [leaf("pg-begin", "pgBegin", 6), leaf("insert-order", "insertOrder", 14), leaf("insert-lines", "insertLines", 11)]),
leaf("publish-event", "publishEvent", 10),
group("send-receipt", "sendReceipt", [leaf("render", "render", 5), leaf("ses", "ses", 7)]),
]),
group("allocate-stock", "allocateStock", [leaf("reserve", "reserve", 13), leaf("confirm", "confirm", 8)]),
]);
const baseline = group("checkout-request", "POST /checkout", [
group("price-cart", "priceCart", [
group("read-cart", "readCart", [leaf("redis-get", "redisGet", 24), leaf("hydrate-lines", "hydrateLines", 27)]),
group("apply-promotions", "applyPromotions", [leaf("load-rules", "loadRules", 15), leaf("evaluate", "evaluate", 21)]),
group("calculate-tax", "calculateTax", [leaf("lookup-nexus", "lookupNexus", 9), leaf("apply-rates", "applyRates", 10)]),
]),
group("authorize-payment", "authorizePayment", [
leaf("tokenize-card", "tokenizeCard", 13),
group("fraud-score", "fraudScore", [leaf("device", "device", 8), leaf("velocity", "velocity", 9)]),
group("create-intent", "createIntent", [leaf("stripe", "stripe", 14), leaf("ledger", "ledger", 7)]),
]),
group("persist-order", "persistOrder", [
group("write-order", "writeOrder", [leaf("pg-begin", "pgBegin", 6), leaf("insert-order", "insertOrder", 18), leaf("insert-lines", "insertLines", 14)]),
leaf("publish-event", "publishEvent", 12),
group("send-receipt", "sendReceipt", [leaf("render", "render", 5), leaf("ses", "ses", 7)]),
]),
group("allocate-stock", "allocateStock", [leaf("reserve", "reserve", 16), leaf("confirm", "confirm", 9)]),
]);
const flameGraphDemoFixture = { hierarchy: profile, baseline } as const;
import { FlameGraphChart } from "@grassroot/charts-svelte";
import VariantToggle from "./VariantToggle.svelte";
let mode = $state<"profile" | "diff">("profile");
const modes = [
{ value: "profile", label: "Single" },
{ value: "diff", label: "Diff" },
];
const { hierarchy, baseline } = flameGraphDemoFixture;
</script>
<div>
<VariantToggle
label="Profile"
options={modes}
value={mode}
onchange={(value) => (mode = value as typeof mode)}
/>
<FlameGraphChart
root={hierarchy}
compareTo={mode === "diff" ? baseline : undefined}
ariaLabel="Checkout request CPU profile with 215 samples; diff mode compares the previous release" />
</div>
ts
/** @jsxImportSource solid-js */
type FlameNode = {
readonly id: string;
readonly label: string;
readonly value?: number;
readonly children?: readonly FlameNode[];
};
const leaf = (id: string, label: string, value: number): FlameNode => ({ id, label, value });
const group = (id: string, label: string, children: readonly FlameNode[]): FlameNode => ({
id,
label,
children,
});
const profile = group("checkout-request", "POST /checkout", [
group("price-cart", "priceCart", [
group("read-cart", "readCart", [leaf("redis-get", "redisGet", 18), leaf("hydrate-lines", "hydrateLines", 22)]),
group("apply-promotions", "applyPromotions", [leaf("load-rules", "loadRules", 12), leaf("evaluate", "evaluate", 16)]),
group("calculate-tax", "calculateTax", [leaf("lookup-nexus", "lookupNexus", 8), leaf("apply-rates", "applyRates", 9)]),
]),
group("authorize-payment", "authorizePayment", [
leaf("tokenize-card", "tokenizeCard", 14),
group("fraud-score", "fraudScore", [leaf("device", "device", 9), leaf("velocity", "velocity", 11)]),
group("create-intent", "createIntent", [leaf("stripe", "stripe", 15), leaf("ledger", "ledger", 7)]),
]),
group("persist-order", "persistOrder", [
group("write-order", "writeOrder", [leaf("pg-begin", "pgBegin", 6), leaf("insert-order", "insertOrder", 14), leaf("insert-lines", "insertLines", 11)]),
leaf("publish-event", "publishEvent", 10),
group("send-receipt", "sendReceipt", [leaf("render", "render", 5), leaf("ses", "ses", 7)]),
]),
group("allocate-stock", "allocateStock", [leaf("reserve", "reserve", 13), leaf("confirm", "confirm", 8)]),
]);
const baseline = group("checkout-request", "POST /checkout", [
group("price-cart", "priceCart", [
group("read-cart", "readCart", [leaf("redis-get", "redisGet", 24), leaf("hydrate-lines", "hydrateLines", 27)]),
group("apply-promotions", "applyPromotions", [leaf("load-rules", "loadRules", 15), leaf("evaluate", "evaluate", 21)]),
group("calculate-tax", "calculateTax", [leaf("lookup-nexus", "lookupNexus", 9), leaf("apply-rates", "applyRates", 10)]),
]),
group("authorize-payment", "authorizePayment", [
leaf("tokenize-card", "tokenizeCard", 13),
group("fraud-score", "fraudScore", [leaf("device", "device", 8), leaf("velocity", "velocity", 9)]),
group("create-intent", "createIntent", [leaf("stripe", "stripe", 14), leaf("ledger", "ledger", 7)]),
]),
group("persist-order", "persistOrder", [
group("write-order", "writeOrder", [leaf("pg-begin", "pgBegin", 6), leaf("insert-order", "insertOrder", 18), leaf("insert-lines", "insertLines", 14)]),
leaf("publish-event", "publishEvent", 12),
group("send-receipt", "sendReceipt", [leaf("render", "render", 5), leaf("ses", "ses", 7)]),
]),
group("allocate-stock", "allocateStock", [leaf("reserve", "reserve", 16), leaf("confirm", "confirm", 9)]),
]);
const flameGraphDemoFixture = { hierarchy: profile, baseline } as const;
import { createSignal } from "solid-js";
import { FlameGraphChart } from "@grassroot/charts-solid";
import { VariantToggle } from "./VariantToggle";
const { hierarchy, baseline } = flameGraphDemoFixture;
export default function FlameGraphChartDemo() {
const [mode, setMode] = createSignal<"profile" | "diff">("profile");
const modes = [
{ value: "profile", label: "Single" },
{ value: "diff", label: "Diff" },
];
return (
<div>
<VariantToggle
label="Profile"
options={modes}
value={mode}
onChange={(value) => setMode(value as "profile" | "diff")}
/>
<FlameGraphChart
root={hierarchy}
compareTo={mode() === "diff" ? baseline : undefined}
ariaLabel="Checkout request CPU profile with 215 samples; diff mode compares the previous release" />
</div>
);
}

Installation

API Reference

Import

import { useState } from "react";
import { FlameGraphChart } from "@grassroot/charts-react";
import { VariantToggle } from "./VariantToggle";

Props

Prop
Type
Default
Requirement
Description
root
HierarchyDatum
—
required
—
compareTo
HierarchyDatum | undefined
—
optional
—
legend
boolean | import("@grassroot/chart-spec").LegendConfig | undefined
—
optional
—
tooltip
boolean | import("./base").ExpandedChartTooltipConfig<unknown> | undefined
—
optional
—
animation
boolean | import("./base").ExpandedChartAnimationConfig | undefined
—
optional
—
onHiddenSeriesChange
((ids: readonly string[]) => void) | undefined
—
optional
—
onActiveDatumChange
((id: string | null) => void) | undefined
—
optional
—
renderer
ChartRenderer | undefined
—
optional
—
className
string | undefined
—
optional
—
theme
import("@grassroot/theme").PartialChartTheme | undefined
—
optional
—
title
string | undefined
—
optional
—
description
string | undefined
—
optional
—
ariaLabel
string | undefined
—
optional
—
keyboardNavigation
boolean | undefined
—
optional
—
Prop
root
Type
HierarchyDatum
Default
—
Requirement
required
Description
—
Prop
compareTo
Type
HierarchyDatum | undefined
Default
—
Requirement
optional
Description
—
Prop
legend
Type
boolean | import("@grassroot/chart-spec").LegendConfig | undefined
Default
—
Requirement
optional
Description
—
Prop
tooltip
Type
boolean | import("./base").ExpandedChartTooltipConfig<unknown> | undefined
Default
—
Requirement
optional
Description
—
Prop
animation
Type
boolean | import("./base").ExpandedChartAnimationConfig | undefined
Default
—
Requirement
optional
Description
—
Prop
onHiddenSeriesChange
Type
((ids: readonly string[]) => void) | undefined
Default
—
Requirement
optional
Description
—
Prop
onActiveDatumChange
Type
((id: string | null) => void) | undefined
Default
—
Requirement
optional
Description
—
Prop
renderer
Type
ChartRenderer | undefined
Default
—
Requirement
optional
Description
—
Prop
className
Type
string | undefined
Default
—
Requirement
optional
Description
—
Prop
theme
Type
import("@grassroot/theme").PartialChartTheme | undefined
Default
—
Requirement
optional
Description
—
Prop
title
Type
string | undefined
Default
—
Requirement
optional
Description
—
Prop
description
Type
string | undefined
Default
—
Requirement
optional
Description
—
Prop
ariaLabel
Type
string | undefined
Default
—
Requirement
optional
Description
—
Prop
keyboardNavigation
Type
boolean | undefined
Default
—
Requirement
optional
Description
—
Prop
width
Type
number | undefined
Default
—
Requirement
optional
Description
—
Prop
height
Type
number | undefined
Default
—
Requirement
optional
Description
—
Prop
gpuBackend
Type
ChartGpuBackend | undefined
Default
—
Requirement
optional
Description
—
Prop
rendererStrategy
Type
Partial<import("@grassroot/core").ChartRendererStrategy> | undefined
Default
—
Requirement
optional
Description
—
Prop
renderPlanMode
Type
"svg" | "host" | undefined
Default
—
Requirement
optional
Description
—
Prop
showGrid
Type
boolean | undefined
Default
—
Requirement
optional
Description
—
Prop
interactive
Type
boolean | undefined
Default
—
Requirement
optional
Description
Gates every pointer/keyboard interaction the shell owns (hit-test on pointer move, focus-to-first, arrow navigation, Escape) and, with `keyboardNavigation`, whether the plot surface is focusable at all.
Prop
hiddenSeries
Type
readonly string[] | undefined
Default
—
Requirement
optional
Description
—
Prop
defaultHiddenSeries
Type
readonly string[] | undefined
Default
—
Requirement
optional
Description
—
Prop
activeDatum
Type
string | null | undefined
Default
—
Requirement
optional
Description
—
Prop
defaultActiveDatum
Type
string | null | undefined
Default
—
Requirement
optional
Description
Uncontrolled initial value for the `activeDatum`/`onActiveDatumChange` pair.
Prop
speed
Type
number | undefined
Default
—
Requirement
optional
Description
Playback-speed multiplier for entrance/ambient motion.
Prop
morphDurationMs
Type
number | undefined
Default
—
Requirement
optional
Description
How long a dataset change tweens, in milliseconds.
Prop
replayToken
Type
string | number | undefined
Default
—
Requirement
optional
Description
Changing this value replays the entrance animation.
Prop
selectionMode
Type
SelectionMode | undefined
Default
—
Requirement
optional
Description
—
Prop
selectedIds
Type
SelectionValue | undefined
Default
—
Requirement
optional
Description
—
Prop
defaultSelectedIds
Type
SelectionValue | undefined
Default
—
Requirement
optional
Description
—
Prop
onSelectedIdsChange
Type
((ids: readonly string[]) => void) | undefined
Default
—
Requirement
optional
Description
—

Events

EventPayload
onHiddenSeriesChange((ids: readonly string[]) => void) | undefined
onActiveDatumChange((id: string | null) => void) | undefined
onSelectedIdsChange((ids: readonly string[]) => void) | undefined

Content regions

  • children
  • dataSummary

Native attributes

Standard DOM and ARIA attributes not listed above spread onto the root element.

Import

import { ref } from "vue";
import { FlameGraphChart } from "@grassroot/charts-vue";
import VariantToggle from "./VariantToggle.vue";

Props

Prop
Type
Default
Requirement
className
string | undefined
—
optional
gpuBackend
"auto" | "webgpu" | "webgl2" | undefined
—
optional
width
number | undefined
—
optional
height
number | undefined
—
optional
renderer
ChartRenderer | undefined
—
optional
rendererStrategy
Partial<ChartRendererStrategy> | undefined
—
optional
renderPlanMode
"svg" | "host" | undefined
"host"
optional
showGrid
boolean | undefined
—
optional
legend
boolean | LegendConfig | undefined
false
optional
tooltip
boolean | TooltipBehaviorConfig | undefined
true
optional
animation
ChartAnimationInput | undefined
—
optional
interactive
boolean | undefined
true
optional
keyboardNavigation
boolean | undefined
true
optional
hiddenSeries
readonly string[] | undefined
—
optional
Prop
className
Type
string | undefined
Default
—
Requirement
optional
Prop
gpuBackend
Type
"auto" | "webgpu" | "webgl2" | undefined
Default
—
Requirement
optional
Prop
width
Type
number | undefined
Default
—
Requirement
optional
Prop
height
Type
number | undefined
Default
—
Requirement
optional
Prop
renderer
Type
ChartRenderer | undefined
Default
—
Requirement
optional
Prop
rendererStrategy
Type
Partial<ChartRendererStrategy> | undefined
Default
—
Requirement
optional
Prop
renderPlanMode
Type
"svg" | "host" | undefined
Default
"host"
Requirement
optional
Prop
showGrid
Type
boolean | undefined
Default
—
Requirement
optional
Prop
legend
Type
boolean | LegendConfig | undefined
Default
false
Requirement
optional
Prop
tooltip
Type
boolean | TooltipBehaviorConfig | undefined
Default
true
Requirement
optional
Prop
animation
Type
ChartAnimationInput | undefined
Default
—
Requirement
optional
Prop
interactive
Type
boolean | undefined
Default
true
Requirement
optional
Prop
keyboardNavigation
Type
boolean | undefined
Default
true
Requirement
optional
Prop
hiddenSeries
Type
readonly string[] | undefined
Default
—
Requirement
optional
Prop
defaultHiddenSeries
Type
readonly string[] | undefined
Default
() => []
Requirement
optional
Prop
activeDatum
Type
string | null | undefined
Default
—
Requirement
optional
Prop
defaultActiveDatum
Type
string | null | undefined
Default
—
Requirement
optional
Prop
speed
Type
number | undefined
Default
—
Requirement
optional
Prop
morphDurationMs
Type
number | undefined
Default
—
Requirement
optional
Prop
replayToken
Type
string | number | undefined
Default
—
Requirement
optional
Prop
theme
Type
PartialChartTheme | undefined
Default
—
Requirement
optional
Prop
title
Type
string | undefined
Default
—
Requirement
optional
Prop
description
Type
string | undefined
Default
—
Requirement
optional
Prop
ariaLabel
Type
string | undefined
Default
—
Requirement
optional
Prop
root
Type
HierarchyDatum
Default
—
Requirement
required
Prop
compareTo
Type
HierarchyDatum | undefined
Default
—
Requirement
optional
Prop
selectionMode
Type
SelectionMode | undefined
Default
"none"
Requirement
optional
Prop
selectedIds
Type
readonly string[] | undefined
Default
—
Requirement
optional
Prop
defaultSelectedIds
Type
readonly string[] | undefined
Default
—
Requirement
optional

Events

EventPayload
hiddenSeriesChange[ids: readonly string[]]
activeDatumChange[id: string | null]
selectedIdsChange[ids: readonly string[]]

Content regions

  • dataSummary
  • default

Import

import { ChangeDetectionStrategy, Component, signal } from "@angular/core";
import { GrassrootFlameGraphChart } from "@grassroot/charts-angular";
import { VariantToggleComponent } from "./VariantToggle.component";

Props

Prop
Type
Default
Requirement
renderer
ChartRenderer
—
optional
gpuBackend
ChartGpuBackend
—
optional
rendererStrategy
Partial<ChartRendererStrategy>
—
optional
renderPlanMode
"svg" | "host"
"host"
optional
ariaLabel
string
—
optional
title
string
—
optional
description
string
—
optional
theme
PartialChartTheme
—
optional
animation
ChartAnimationInput
—
optional
interactive
boolean
true
optional
keyboardNavigation
boolean
true
optional
tooltip
boolean | TooltipBehaviorConfig
true
optional
legend
boolean | LegendConfig
—
optional
hiddenSeries
readonly string[]
—
optional
Prop
renderer
Type
ChartRenderer
Default
—
Requirement
optional
Prop
gpuBackend
Type
ChartGpuBackend
Default
—
Requirement
optional
Prop
rendererStrategy
Type
Partial<ChartRendererStrategy>
Default
—
Requirement
optional
Prop
renderPlanMode
Type
"svg" | "host"
Default
"host"
Requirement
optional
Prop
ariaLabel
Type
string
Default
—
Requirement
optional
Prop
title
Type
string
Default
—
Requirement
optional
Prop
description
Type
string
Default
—
Requirement
optional
Prop
theme
Type
PartialChartTheme
Default
—
Requirement
optional
Prop
animation
Type
ChartAnimationInput
Default
—
Requirement
optional
Prop
interactive
Type
boolean
Default
true
Requirement
optional
Prop
keyboardNavigation
Type
boolean
Default
true
Requirement
optional
Prop
tooltip
Type
boolean | TooltipBehaviorConfig
Default
true
Requirement
optional
Prop
legend
Type
boolean | LegendConfig
Default
—
Requirement
optional
Prop
hiddenSeries
Type
readonly string[]
Default
—
Requirement
optional
Prop
defaultHiddenSeries
Type
readonly string[]
Default
[]
Requirement
optional
Prop
activeDatum
Type
string | null
Default
—
Requirement
optional
Prop
defaultActiveDatum
Type
string | null
Default
null
Requirement
optional
Prop
speed
Type
number
Default
—
Requirement
optional
Prop
morphDurationMs
Type
number
Default
—
Requirement
optional
Prop
replayToken
Type
string | number
Default
—
Requirement
optional
Prop
selectionMode
Type
SelectionMode
Default
"none"
Requirement
optional
Prop
selectedIds
Type
SelectionValue
Default
—
Requirement
optional
Prop
defaultSelectedIds
Type
SelectionValue
Default
—
Requirement
optional
Prop
onSelectedIdsChange
Type
(ids: SelectionValue) => void
Default
—
Requirement
optional
Prop
root
Type
HierarchyDatum
Default
—
Requirement
required
Prop
width
Type
number
Default
—
Requirement
optional
Prop
height
Type
number
Default
—
Requirement
optional
Prop
showGrid
Type
boolean
Default
—
Requirement
optional
Prop
className
Type
string
Default
—
Requirement
optional
Prop
compareTo
Type
HierarchyDatum
Default
—
Requirement
optional

Events

EventPayload
activeDatumChangestring | null
hiddenSeriesChangereadonly string[]
selectedIdsChangereadonly string[]

Content regions

  • dataSummary
  • default

Import

import { FlameGraphChart } from "@grassroot/charts-svelte";
import VariantToggle from "./VariantToggle.svelte";

Props

Prop
Type
Default
Requirement
root
HierarchyDatum
—
required
compareTo
HierarchyDatum
—
optional
selectionMode
"none" | "single" | "multiple"
"none"
optional
selectedIds
readonly string[]
—
optional
defaultSelectedIds
readonly string[]
—
optional
onSelectedIdsChange
(ids: readonly string[]) => void
—
optional
onHiddenSeriesChange
(ids: readonly string[]) => void
—
optional
onActiveDatumChange
(id: string | null) => void
—
optional
class
string
—
optional
style
string
—
optional
width
number
—
optional
height
number
—
optional
renderer
ChartRenderer
—
optional
gpuBackend
ChartGpuBackend
—
optional
Prop
root
Type
HierarchyDatum
Default
—
Requirement
required
Prop
compareTo
Type
HierarchyDatum
Default
—
Requirement
optional
Prop
selectionMode
Type
"none" | "single" | "multiple"
Default
"none"
Requirement
optional
Prop
selectedIds
Type
readonly string[]
Default
—
Requirement
optional
Prop
defaultSelectedIds
Type
readonly string[]
Default
—
Requirement
optional
Prop
onSelectedIdsChange
Type
(ids: readonly string[]) => void
Default
—
Requirement
optional
Prop
onHiddenSeriesChange
Type
(ids: readonly string[]) => void
Default
—
Requirement
optional
Prop
onActiveDatumChange
Type
(id: string | null) => void
Default
—
Requirement
optional
Prop
class
Type
string
Default
—
Requirement
optional
Prop
style
Type
string
Default
—
Requirement
optional
Prop
width
Type
number
Default
—
Requirement
optional
Prop
height
Type
number
Default
—
Requirement
optional
Prop
renderer
Type
ChartRenderer
Default
—
Requirement
optional
Prop
gpuBackend
Type
ChartGpuBackend
Default
—
Requirement
optional
Prop
rendererStrategy
Type
Partial<ChartRendererStrategy>
Default
—
Requirement
optional
Prop
renderPlanMode
Type
"svg" | "host"
Default
"host"
Requirement
optional
Prop
showGrid
Type
boolean
Default
—
Requirement
optional
Prop
legend
Type
boolean | LegendConfig
Default
false
Requirement
optional
Prop
tooltip
Type
boolean | TooltipBehaviorConfig
Default
true
Requirement
optional
Prop
animation
Type
ChartAnimationInput
Default
—
Requirement
optional
Prop
interactive
Type
boolean
Default
true
Requirement
optional
Prop
keyboardNavigation
Type
boolean
Default
true
Requirement
optional
Prop
hiddenSeries
Type
readonly string[]
Default
—
Requirement
optional
Prop
defaultHiddenSeries
Type
readonly string[]
Default
—
Requirement
optional
Prop
activeDatum
Type
string | null
Default
—
Requirement
optional
Prop
defaultActiveDatum
Type
string | null
Default
—
Requirement
optional
Prop
speed
Type
number
Default
—
Requirement
optional
Prop
morphDurationMs
Type
number
Default
—
Requirement
optional
Prop
replayToken
Type
string | number
Default
—
Requirement
optional
Prop
theme
Type
PartialChartTheme
Default
—
Requirement
optional
Prop
title
Type
string
Default
—
Requirement
optional
Prop
description
Type
string
Default
—
Requirement
optional
Prop
ariaLabel
Type
string
Default
—
Requirement
optional

Events

EventPayload
onSelectedIdsChange(ids: readonly string[]) => void
onHiddenSeriesChange(ids: readonly string[]) => void
onActiveDatumChange(id: string | null) => void

Content regions

  • children
  • dataSummary

Import

import { createSignal } from "solid-js";
import { FlameGraphChart } from "@grassroot/charts-solid";
import { VariantToggle } from "./VariantToggle";

Props

Prop
Type
Default
Requirement
root
HierarchyDatum
—
required
compareTo
HierarchyDatum
—
optional
selectionMode
SelectionMode
—
optional
selectedIds
readonly string[]
—
optional
defaultSelectedIds
readonly string[]
—
optional
onSelectedIdsChange
(ids: readonly string[]) => void
—
optional
onActiveDatumChange
(id: string | null) => void
—
optional
onHiddenSeriesChange
(ids: readonly string[]) => void
—
optional
class
string
—
optional
style
JSX.CSSProperties
—
optional
width
number
—
optional
height
number
—
optional
renderer
ChartRenderer
—
optional
gpuBackend
ChartGpuBackend
"auto"
optional
Prop
root
Type
HierarchyDatum
Default
—
Requirement
required
Prop
compareTo
Type
HierarchyDatum
Default
—
Requirement
optional
Prop
selectionMode
Type
SelectionMode
Default
—
Requirement
optional
Prop
selectedIds
Type
readonly string[]
Default
—
Requirement
optional
Prop
defaultSelectedIds
Type
readonly string[]
Default
—
Requirement
optional
Prop
onSelectedIdsChange
Type
(ids: readonly string[]) => void
Default
—
Requirement
optional
Prop
onActiveDatumChange
Type
(id: string | null) => void
Default
—
Requirement
optional
Prop
onHiddenSeriesChange
Type
(ids: readonly string[]) => void
Default
—
Requirement
optional
Prop
class
Type
string
Default
—
Requirement
optional
Prop
style
Type
JSX.CSSProperties
Default
—
Requirement
optional
Prop
width
Type
number
Default
—
Requirement
optional
Prop
height
Type
number
Default
—
Requirement
optional
Prop
renderer
Type
ChartRenderer
Default
—
Requirement
optional
Prop
gpuBackend
Type
ChartGpuBackend
Default
"auto"
Requirement
optional
Prop
rendererStrategy
Type
Partial<ChartRendererStrategy>
Default
—
Requirement
optional
Prop
renderPlanMode
Type
"svg" | "host"
Default
"host"
Requirement
optional
Prop
showGrid
Type
boolean
Default
—
Requirement
optional
Prop
legend
Type
boolean | LegendConfig
Default
—
Requirement
optional
Prop
tooltip
Type
boolean | TooltipBehaviorConfig
Default
—
Requirement
optional
Prop
animation
Type
ChartAnimationInput
Default
—
Requirement
optional
Prop
interactive
Type
boolean
Default
—
Requirement
optional
Prop
keyboardNavigation
Type
boolean
Default
—
Requirement
optional
Prop
hiddenSeries
Type
readonly string[]
Default
—
Requirement
optional
Prop
defaultHiddenSeries
Type
readonly string[]
Default
—
Requirement
optional
Prop
activeDatum
Type
string | null
Default
—
Requirement
optional
Prop
defaultActiveDatum
Type
string | null
Default
—
Requirement
optional
Prop
speed
Type
number
Default
—
Requirement
optional
Prop
morphDurationMs
Type
number
Default
—
Requirement
optional
Prop
replayToken
Type
string | number
Default
—
Requirement
optional
Prop
theme
Type
PartialChartTheme
Default
—
Requirement
optional
Prop
title
Type
string
Default
—
Requirement
optional
Prop
description
Type
string
Default
—
Requirement
optional
Prop
ariaLabel
Type
string
Default
—
Requirement
optional

Events

EventPayload
onSelectedIdsChange(ids: readonly string[]) => void
onActiveDatumChange(id: string | null) => void
onHiddenSeriesChange(ids: readonly string[]) => void

Content regions

  • children
  • dataSummary