sy-funnel-chart
Pyramid
Represent stage sizes as a pyramid.
sy-funnel-chart
Use to explain layered structures such as foundation, growth, and expertise.
A pyramid uses Funnel's reversed and neck settings. Provide a table for precise size comparisons.
Base chart tier: Community. Features such as additional renderers and custom branding have separate entitlement requirements.
| Input | Data description |
|---|---|
data | An array of { name, value }, starting with the widest layer. |
reversed | Set true to form a pyramid. |
neckWidth | Set to 0. |
neckHeight | Set to 0. |
- Run in Components
Change options and view framework-specific code
- Shared installation and integration
Complete implementation example
<div id="chart-container" style="width: 100%; min-width: 0;"></div>
<script type="module">
import { defineCustomElement as define0 } from '@syidax/advanced/components/sy-funnel-chart.js';
define0();
const specs = [
{
"id": "example-chart",
"tag": "sy-funnel-chart",
"props": {
"engine": "standard",
"reversed": true,
"neckWidth": 0,
"neckHeight": 0,
"data": [
{
"name": "Opening",
"value": 60
},
{
"name": "Growth",
"value": 30
},
{
"name": "Expert",
"value": 10
}
],
"colors": ["#8263d9", "#239c91", "#e99954", "#d76c8f", "#4d89c4", "#95a551"],
"width": 640,
"height": 360,
"brandPosition": "bottom-right",
"brandLogo": ""
}
}
];
const container = document.querySelector('#chart-container');
const elements = specs.map(({ tag, id, props }) => {
const element = document.createElement(tag);
element.id = id;
Object.assign(element, props);
element.setAttribute('aria-label', 'pyramid example chart');
return element;
});
container.replaceChildren(...elements);
const chart = elements.at(-1);
const onEvent = event => {
console.log('sectionClick', event.detail);
};
chart.addEventListener('sectionClick', onEvent);
const observer = new ResizeObserver(([entry]) => {
const width = Math.max(160, Math.floor(entry.contentRect.width));
elements.forEach(element => { element.width = width; });
});
observer.observe(container);
// In an SPA, call this function when the view is disposed.
function disposeChart() {
observer.disconnect();
chart.removeEventListener('sectionClick', onEvent);
container.replaceChildren();
}
</script>Properties
data
An array of { name, value }, starting with the widest layer.
| Item | Value |
|---|---|
| JavaScript property | data |
| HTML attribute | Pass objects, arrays, and callbacks as JavaScript properties |
| Type | FunnelChartData |
| Default | [] |
- FunnelChartData
Type definition
width
Chart width in pixels. If the container width changes, update width from a ResizeObserver.
| Item | Value |
|---|---|
| JavaScript property | width |
| HTML attribute | width |
| Type | number |
| Default | 420 |
height
Chart height in pixels. Allow space for axes, titles, and the legend.
| Item | Value |
|---|---|
| JavaScript property | height |
| HTML attribute | height |
| Type | number |
| Default | 360 |
brandLogo
The default is the Syidax symbol and wordmark. With the Pro chart.branding entitlement, set none to remove it or provide a PNG, JPEG, or WebP data URL to replace it.
| Item | Value |
|---|---|
| JavaScript property | brandLogo |
| HTML attribute | brand-logo |
| Type | string |
| Default | undefined |
undefined means this property was not explicitly set. The effective value may depend on the chart type and other settings.
brandPosition
The corner where the logo is anchored. Community and Pro both support all four corners, using the same position on screen and in image exports.
| Item | Value |
|---|---|
| JavaScript property | brandPosition |
| HTML attribute | brand-position |
| Type | 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' |
| Default | 'bottom-right' |
| Allowed values | top-left, top-right, bottom-left, bottom-right |
reversed
Set true to form a pyramid.
| Item | Value |
|---|---|
| JavaScript property | reversed |
| HTML attribute | reversed |
| Type | boolean |
| Default | false |
neckWidth
Set to 0.
| Item | Value |
|---|---|
| JavaScript property | neckWidth |
| HTML attribute | neck-width |
| Type | number |
| Default | 0.3 |
neckHeight
Set to 0.
| Item | Value |
|---|---|
| JavaScript property | neckHeight |
| HTML attribute | neck-height |
| Type | number |
| Default | 0.25 |
gap
Vertical gap between sections (px).
| Item | Value |
|---|---|
| JavaScript property | gap |
| HTML attribute | gap |
| Type | number |
| Default | 2 |
color
Set as an HTML attribute or JavaScript property. type: string.
| Item | Value |
|---|---|
| JavaScript property | color |
| HTML attribute | color |
| Type | string |
| Default | '#2563eb' |
colors
Per-section palette. Per-section color always wins.
| Item | Value |
|---|---|
| JavaScript property | colors |
| HTML attribute | Pass objects, arrays, and callbacks as JavaScript properties |
| Type | ReadonlyArray<string> |
| Default | undefined |
undefined means this property was not explicitly set. The effective value may depend on the chart type and other settings.
labelPlacement
Allowed values: none, left, right, inside. Default: 'inside'.
| Item | Value |
|---|---|
| JavaScript property | labelPlacement |
| HTML attribute | label-placement |
| Type | FunnelLabelPlacement |
| Default | 'inside' |
| Allowed values | none, left, right, inside |
- FunnelLabelPlacement
Type definition
labelColor
Set as an HTML attribute or JavaScript property. type: string.
| Item | Value |
|---|---|
| JavaScript property | labelColor |
| HTML attribute | label-color |
| Type | string |
| Default | '#374151' |
insideLabelColor
Set as an HTML attribute or JavaScript property. type: string.
| Item | Value |
|---|---|
| JavaScript property | insideLabelColor |
| HTML attribute | inside-label-color |
| Type | string |
| Default | '#ffffff' |
labelFontSize
Set as an HTML attribute or JavaScript property. type: number.
| Item | Value |
|---|---|
| JavaScript property | labelFontSize |
| HTML attribute | label-font-size |
| Type | number |
| Default | 12 |
showValue
Set as an HTML attribute or JavaScript property. type: boolean.
| Item | Value |
|---|---|
| JavaScript property | showValue |
| HTML attribute | show-value |
| Type | boolean |
| Default | true |
showPercent
Set as an HTML attribute or JavaScript property. type: boolean.
| Item | Value |
|---|---|
| JavaScript property | showPercent |
| HTML attribute | show-percent |
| Type | boolean |
| Default | false |
valueFormat
Set as an HTML attribute or JavaScript property. type: string.
| Item | Value |
|---|---|
| JavaScript property | valueFormat |
| HTML attribute | value-format |
| Type | string |
| Default | undefined |
undefined means this property was not explicitly set. The effective value may depend on the chart type and other settings.
leaderColor
Set as an HTML attribute or JavaScript property. type: string.
| Item | Value |
|---|---|
| JavaScript property | leaderColor |
| HTML attribute | leader-color |
| Type | string |
| Default | '#cbd5e1' |
chartTitle
The title inside the chart. Explain the data's unit and meaning alongside it.
| Item | Value |
|---|---|
| JavaScript property | chartTitle |
| HTML attribute | chart-title |
| Type | string |
| Default | undefined |
undefined means this property was not explicitly set. The effective value may depend on the chart type and other settings.
chartSubtitle
The subtitle inside the chart.
| Item | Value |
|---|---|
| JavaScript property | chartSubtitle |
| HTML attribute | chart-subtitle |
| Type | string |
| Default | undefined |
undefined means this property was not explicitly set. The effective value may depend on the chart type and other settings.
tooltipShow
Whether to display the built-in tooltip.
| Item | Value |
|---|---|
| JavaScript property | tooltipShow |
| HTML attribute | tooltip-show |
| Type | boolean |
| Default | true |
tooltipFormat
Pass as a JavaScript property. type: (detail: FunnelChartPointerEventDetail) => string.
| Item | Value |
|---|---|
| JavaScript property | tooltipFormat |
| HTML attribute | Pass objects, arrays, and callbacks as JavaScript properties |
| Type | (detail: FunnelChartPointerEventDetail) => string |
| Default | undefined |
undefined means this property was not explicitly set. The effective value may depend on the chart type and other settings.
- FunnelChartPointerEventDetail
Type definition
tooltip
Tooltip settings for pointer-driven values, position, and content.
| Item | Value |
|---|---|
| JavaScript property | tooltip |
| HTML attribute | Pass objects, arrays, and callbacks as JavaScript properties |
| Type | FunnelChartTooltipInput |
| Default | undefined |
| Literals in the type | auto, off |
undefined means this property was not explicitly set. The effective value may depend on the chart type and other settings.
- FunnelChartTooltipInput
Type definition
enableMouseTracking
Set as an HTML attribute or JavaScript property. type: boolean.
| Item | Value |
|---|---|
| JavaScript property | enableMouseTracking |
| HTML attribute | enable-mouse-tracking |
| Type | boolean |
| Default | true |
inactiveOtherSections
Set as an HTML attribute or JavaScript property. type: boolean.
| Item | Value |
|---|---|
| JavaScript property | inactiveOtherSections |
| HTML attribute | inactive-other-sections |
| Type | boolean |
| Default | false |
inactiveSectionOpacity
Set as an HTML attribute or JavaScript property. type: number.
| Item | Value |
|---|---|
| JavaScript property | inactiveSectionOpacity |
| HTML attribute | inactive-section-opacity |
| Type | number |
| Default | 0.3 |
activeSectionIndex
Set as an HTML attribute or JavaScript property. type: number.
| Item | Value |
|---|---|
| JavaScript property | activeSectionIndex |
| HTML attribute | active-section-index |
| Type | number |
| Default | undefined |
undefined means this property was not explicitly set. The effective value may depend on the chart type and other settings.
legend
Whether to show a legend for series or items.
| Item | Value |
|---|---|
| JavaScript property | legend |
| HTML attribute | legend |
| Type | boolean |
| Default | false |
legendPosition
Where the legend is positioned.
| Item | Value |
|---|---|
| JavaScript property | legendPosition |
| HTML attribute | legend-position |
| Type | FunnelChartLegendPosition |
| Default | 'bottom' |
| Allowed values | top, bottom, left, right |
- FunnelChartLegendPosition
Type definition
legendItems
Pass as a JavaScript property. type: LegendItem[].
| Item | Value |
|---|---|
| JavaScript property | legendItems |
| HTML attribute | Pass objects, arrays, and callbacks as JavaScript properties |
| Type | LegendItem[] |
| Default | undefined |
undefined means this property was not explicitly set. The effective value may depend on the chart type and other settings.
- LegendItem
Type definition
animated
Whether to animate initial display and data changes.
| Item | Value |
|---|---|
| JavaScript property | animated |
| HTML attribute | animate |
| Type | boolean |
| Default | false |
animationDuration
Animation duration in milliseconds.
| Item | Value |
|---|---|
| JavaScript property | animationDuration |
| HTML attribute | animation-duration |
| Type | number |
| Default | 700 |
animationEasing
Allowed values: linear, ease-out, ease-in, ease-in-out. Default: 'ease-out'.
| Item | Value |
|---|---|
| JavaScript property | animationEasing |
| HTML attribute | animation-easing |
| Type | FunnelChartEasing |
| Default | 'ease-out' |
| Allowed values | linear, ease-out, ease-in, ease-in-out |
- FunnelChartEasing
Type definition
animationType
Allowed values: initial, update. Default: undefined.
| Item | Value |
|---|---|
| JavaScript property | animationType |
| HTML attribute | animation-type |
| Type | FunnelChartAnimationType |
| Default | undefined |
| Allowed values | initial, update |
undefined means this property was not explicitly set. The effective value may depend on the chart type and other settings.
- FunnelChartAnimationType
Type definition
streamSource
A stream source for live data. Check the contract for the specific type.
| Item | Value |
|---|---|
| JavaScript property | streamSource |
| HTML attribute | Pass objects, arrays, and callbacks as JavaScript properties |
| Type | FunnelChartStreamSource |
| Default | undefined |
undefined means this property was not explicitly set. The effective value may depend on the chart type and other settings.
- FunnelChartStreamSource
Type definition
streamWindow
The streaming data range to keep visible.
| Item | Value |
|---|---|
| JavaScript property | streamWindow |
| HTML attribute | stream-window |
| Type | number |
| Default | undefined |
undefined means this property was not explicitly set. The effective value may depend on the chart type and other settings.
streamMax
The maximum number of streaming data points to retain.
| Item | Value |
|---|---|
| JavaScript property | streamMax |
| HTML attribute | stream-max |
| Type | number |
| Default | undefined |
undefined means this property was not explicitly set. The effective value may depend on the chart type and other settings.
engine
Renderer selection: auto, standard, or pro. Engine selection is separate from permission to use a Pro chart type.
| Item | Value |
|---|---|
| JavaScript property | engine |
| HTML attribute | engine |
| Type | FunnelChartEngineMode |
| Default | 'auto' |
| Allowed values | auto, standard, pro |
- FunnelChartEngineMode
Type definition
proThreshold
Set as an HTML attribute or JavaScript property. type: number.
| Item | Value |
|---|---|
| JavaScript property | proThreshold |
| HTML attribute | pro-threshold |
| Type | number |
| Default | 50_000 |
Events
rendered
Emits rendering results in detail when chart drawing completes.
Event name: rendered. Names are case-sensitive. Read the payload from detail on CustomEvent<FunnelChartRenderResult & { tier: FunnelChartEngineTier }>.
chart.addEventListener('rendered', event => {
console.log(event.detail); // FunnelChartRenderResult & { tier: FunnelChartEngineTier }
});- FunnelChartRenderResult
Type definition
- FunnelChartEngineTier
Type definition
sectionClick
CustomEvent.detail type: FunnelChartPointerEventDetail. Event names are case-sensitive.
Event name: sectionClick. Names are case-sensitive. Read the payload from detail on CustomEvent<FunnelChartPointerEventDetail>.
chart.addEventListener('sectionClick', event => {
console.log(event.detail); // FunnelChartPointerEventDetail
});- FunnelChartPointerEventDetail
Type definition
sectionHover
CustomEvent.detail type: FunnelChartPointerEventDetail | null. Event names are case-sensitive.
Event name: sectionHover. Names are case-sensitive. Read the payload from detail on CustomEvent<FunnelChartPointerEventDetail | null>.
chart.addEventListener('sectionHover', event => {
console.log(event.detail); // FunnelChartPointerEventDetail | null
});- FunnelChartPointerEventDetail
Type definition
pointContextMenu
CustomEvent.detail type: ChartPointContextMenuEventDetail<FunnelChartPointerEventDetail>. Event names are case-sensitive.
Event name: pointContextMenu. Names are case-sensitive. Read the payload from detail on CustomEvent<ChartPointContextMenuEventDetail<FunnelChartPointerEventDetail>>.
chart.addEventListener('pointContextMenu', event => {
console.log(event.detail); // ChartPointContextMenuEventDetail<FunnelChartPointerEventDetail>
});- ChartPointContextMenuEventDetail
Type definition
- FunnelChartPointerEventDetail
Type definition
tooltipShow
Whether to display the built-in tooltip.
Event name: tooltipShow. Names are case-sensitive. Read the payload from detail on CustomEvent<FunnelChartTooltipShowEventDetail>.
chart.addEventListener('tooltipShow', event => {
console.log(event.detail); // FunnelChartTooltipShowEventDetail
});- FunnelChartTooltipShowEventDetail
Type definition
tooltipHide
CustomEvent.detail type: void. Event names are case-sensitive.
Event name: tooltipHide. Names are case-sensitive. Read the payload from detail on CustomEvent<void>.
chart.addEventListener('tooltipHide', event => {
console.log(event.detail); // void
});tooltipAction
CustomEvent.detail type: FunnelChartTooltipActionEventDetail. Event names are case-sensitive.
Event name: tooltipAction. Names are case-sensitive. Read the payload from detail on CustomEvent<FunnelChartTooltipActionEventDetail>.
chart.addEventListener('tooltipAction', event => {
console.log(event.detail); // FunnelChartTooltipActionEventDetail
});- FunnelChartTooltipActionEventDetail
Type definition
legendItemClick
CustomEvent.detail type: { index: number; sectionId: string; label: string; disabled: boolean }. Event names are case-sensitive.
Event name: legendItemClick. Names are case-sensitive. Read the payload from detail on CustomEvent<{ index: number; sectionId: string; label: string; disabled: boolean }>.
chart.addEventListener('legendItemClick', event => {
console.log(event.detail); // { index: number; sectionId: string; label: string; disabled: boolean }
});sectionToggled
CustomEvent.detail type: { index: number; sectionId: string; disabled: boolean }. Event names are case-sensitive.
Event name: sectionToggled. Names are case-sensitive. Read the payload from detail on CustomEvent<{ index: number; sectionId: string; disabled: boolean }>.
chart.addEventListener('sectionToggled', event => {
console.log(event.detail); // { index: number; sectionId: string; disabled: boolean }
});appended
CustomEvent.detail type: { count: number }. Event names are case-sensitive.
Event name: appended. Names are case-sensitive. Read the payload from detail on CustomEvent<{ count: number }>.
chart.addEventListener('appended', event => {
console.log(event.detail); // { count: number }
});windowSlid
CustomEvent.detail type: { dropped: number }. Event names are case-sensitive.
Event name: windowSlid. Names are case-sensitive. Read the payload from detail on CustomEvent<{ dropped: number }>.
chart.addEventListener('windowSlid', event => {
console.log(event.detail); // { dropped: number }
});chartAnimationStart
CustomEvent.detail type: void. Event names are case-sensitive.
Event name: chartAnimationStart. Names are case-sensitive. Read the payload from detail on CustomEvent<void>.
chart.addEventListener('chartAnimationStart', event => {
console.log(event.detail); // void
});chartAnimationEnd
CustomEvent.detail type: void. Event names are case-sensitive.
Event name: chartAnimationEnd. Names are case-sensitive. Read the payload from detail on CustomEvent<void>.
chart.addEventListener('chartAnimationEnd', event => {
console.log(event.detail); // void
});chartAnimationInterrupted
CustomEvent.detail type: void. Event names are case-sensitive.
Event name: chartAnimationInterrupted. Names are case-sensitive. Read the payload from detail on CustomEvent<void>.
chart.addEventListener('chartAnimationInterrupted', event => {
console.log(event.detail); // void
});Methods
redraw
Redraw the chart using its current data and options. Inspect the rendered result after the returned Promise resolves.
redraw(): Promise<FunnelChartRenderResult>Return type: Promise<FunnelChartRenderResult>. Call the method after element registration and await its Promise result.
- FunnelChartRenderResult
Type definition
getActiveTier
An asynchronous method. Check the argument and return types below.
getActiveTier(): Promise<FunnelChartEngineTier>Return type: Promise<FunnelChartEngineTier>. Call the method after element registration and await its Promise result.
- FunnelChartEngineTier
Type definition
setData
Replace the bar set.
setData(data: FunnelChartData): Promise<void>| Arguments | Type | Required |
|---|---|---|
data | FunnelChartData | Required |
Return type: Promise<void>. Call the method after element registration and await its Promise result.
- FunnelChartData
Type definition
addSection
Funnel / pyramid-only — add a section (stage). Returns its index.
addSection(section: FunnelSectionSpec | number, opts?: { insertAt?: number }): Promise<number>| Arguments | Type | Required |
|---|---|---|
section | FunnelSectionSpec | number | Required |
opts | { insertAt?: number } | Optional |
Return type: Promise<number>. Call the method after element registration and await its Promise result.
- FunnelSectionSpec
Type definition
removeSection
Funnel / pyramid-only — remove a section by id or index.
removeSection(idOrIndex: string | number): Promise<boolean>| Arguments | Type | Required |
|---|---|---|
idOrIndex | string | number | Required |
Return type: Promise<boolean>. Call the method after element registration and await its Promise result.
updateSection
Funnel / pyramid-only — patch a section.
updateSection(idOrIndex: string | number, patch: Partial<FunnelSectionSpec>): Promise<boolean>| Arguments | Type | Required |
|---|---|---|
idOrIndex | string | number | Required |
patch | Partial<FunnelSectionSpec> | Required |
Return type: Promise<boolean>. Call the method after element registration and await its Promise result.
- FunnelSectionSpec
Type definition
appendPoint
Append one value to the stream. Check the argument type and the licensing requirements for streaming.
appendPoint(section: FunnelSectionSpec | number): Promise<void>| Arguments | Type | Required |
|---|---|---|
section | FunnelSectionSpec | number | Required |
Return type: Promise<void>. Call the method after element registration and await its Promise result.
- FunnelSectionSpec
Type definition
appendBatch
Append multiple values to the stream. Check the argument type and the licensing requirements for streaming.
appendBatch(sections: ReadonlyArray<FunnelSectionSpec | number>): Promise<void>| Arguments | Type | Required |
|---|---|---|
sections | ReadonlyArray<FunnelSectionSpec | number> | Required |
Return type: Promise<void>. Call the method after element registration and await its Promise result.
- FunnelSectionSpec
Type definition
shift
Drop the oldest streamed categories (the data boxes are not the stream).
shift(count?: number): Promise<void>| Arguments | Type | Required |
|---|---|---|
count | number | Optional |
Return type: Promise<void>. Call the method after element registration and await its Promise result.
replace
Swap the streamed set (replace([]) clears it); the base values never leave. Without chart.streaming the dies upsert into the base like a batch (quietly: no appended, no binChanged, as a ring replace).
replace(sections: ReadonlyArray<FunnelSectionSpec | number>): Promise<void>| Arguments | Type | Required |
|---|---|---|
sections | ReadonlyArray<FunnelSectionSpec | number> | Required |
Return type: Promise<void>. Call the method after element registration and await its Promise result.
- FunnelSectionSpec
Type definition
getStreamSource
The stream session's source (Chart Pro): like the stream methods it waits for a license still being confirmed.
getStreamSource(): Promise<FunnelChartStreamSource | undefined>Return type: Promise<FunnelChartStreamSource | undefined>. Call the method after element registration and await its Promise result.
- FunnelChartStreamSource
Type definition
setAnimation
An asynchronous method. Check the argument and return types below.
setAnimation(options: { duration?: number; easing?: FunnelChartEasing; enabled?: boolean; type?: FunnelChartAnimationType }): Promise<void>| Arguments | Type | Required |
|---|---|---|
options | { duration?: number; easing?: FunnelChartEasing; enabled?: boolean; type?: FunnelChartAnimationType } | Required |
Return type: Promise<void>. Call the method after element registration and await its Promise result.
- FunnelChartEasing
Type definition
- FunnelChartAnimationType
Type definition
pauseAnimation
Pause the current animation.
pauseAnimation(): Promise<void>Return type: Promise<void>. Call the method after element registration and await its Promise result.
resumeAnimation
Resume a paused animation.
resumeAnimation(): Promise<void>Return type: Promise<void>. Call the method after element registration and await its Promise result.
replayAnimation
Replay the initial sweep from min → value(s). No-op when animation is off / reduced.
replayAnimation(): Promise<void>Return type: Promise<void>. Call the method after element registration and await its Promise result.
hitTest
The box under a host-local CSS point (the nearest slot, within half a pitch), or null.
hitTest(cssX: number, cssY: number): Promise<FunnelChartPointerEventDetail | null>| Arguments | Type | Required |
|---|---|---|
cssX | number | Required |
cssY | number | Required |
Return type: Promise<FunnelChartPointerEventDetail | null>. Call the method after element registration and await its Promise result.
- FunnelChartPointerEventDetail
Type definition
showTooltipAt
An asynchronous method. Check the argument and return types below.
showTooltipAt(idOrIndex: string | number): Promise<FunnelChartPointerEventDetail | null>| Arguments | Type | Required |
|---|---|---|
idOrIndex | string | number | Required |
Return type: Promise<FunnelChartPointerEventDetail | null>. Call the method after element registration and await its Promise result.
- FunnelChartPointerEventDetail
Type definition
hideTooltip
Close the currently visible tooltip.
hideTooltip(): Promise<void>Return type: Promise<void>. Call the method after element registration and await its Promise result.
getEngineStatus
Requested engine vs what runs, and why (CHART-ADD-08): always Standard (this type has no WebGPU renderer); read without side effects, never consults the license.
getEngineStatus(): Promise<ChartEngineStatus>Return type: Promise<ChartEngineStatus>. Call the method after element registration and await its Promise result.
- ChartEngineStatus
Type definition