@synergy-design-system/components
Version:
115 lines (114 loc) • 4.96 kB
TypeScript
import { type EChartsType } from 'echarts/core.js';
import type { CSSResultGroup, PropertyValues } from 'lit';
import SynergyElement from '../../internal/synergy-element.js';
import { type ChartPalette } from './chart.palettes.js';
import type { ChartConfigType } from './types.js';
/**
* @summary The `<syn-chart>` component is a container for displaying charts. It provides a structured layout and styling for chart elements, allowing for consistent presentation across different types of charts. The chart component is based on [Apache ECharts](https://echarts.apache.org)
*
* @documentation https://synergy-design-system.github.io/?path=/docs/charting-syn-chart--docs
* @status experimental
* @since 3.15.0
*
* @csspart base - The component's base wrapper.
*/
export default class SynChart extends SynergyElement {
static styles: CSSResultGroup;
private chartContainer;
private chartInstance;
private resizeObserver;
private resolvedConfig;
/**
* The ECharts configuration input.
*
* This property accepts either:
* - a plain `ECConfig` object, or
* - a callback that receives a typed preset handle and applies chart presets.
*
* The resolved result maps 1:1 to the ECharts `option` parameter passed to
* `setOption()`.
* Consult the [ECharts option documentation](https://echarts.apache.org/en/option.html)
* and assign either the object directly or build it through the handle.
*
* > **Note:** Currently only **line charts** (`series[].type: 'line'`) are supported.
* > Support for additional chart types (bar, pie, etc.) will be added in future releases or can be requested.
*
* Assigning a new config input completely replaces the previous chart
* configuration (`notMerge: true`).
* To update only parts of the chart, access the underlying ECharts instance directly and
* call `setOption()` with custom merge options.
*
* @example
* ```js
* // Using a plain object
* chart.config = {
* xAxis: { type: 'category', data: ['Mon', 'Tue', 'Wed'] },
* yAxis: { type: 'value' },
* series: [{ type: 'line', data: [150, 230, 224] }],
* };
*
* // Using the handle with method chaining
* chart.config = (handle) => handle
* .baseConfig({
* xAxis: { type: 'category', data: ['Mon', 'Tue', 'Wed'] },
* yAxis: { type: 'value' },
* series: [{ type: 'line', data: [150, 230, 224] }],
* })
* .axesShowSplitLines();
*
* // Using the handle with sequential calls
* chart.config = (handle) => {
* handle.baseConfig({
* xAxis: { type: 'category', data: ['Mon', 'Tue', 'Wed'] },
* yAxis: { type: 'value' },
* series: [{ type: 'line', data: [150, 230, 224] }],
* });
* handle.axesShowSplitLines();
* };
* ```
*/
config: ChartConfigType;
/**
* The color palette to apply to chart series.
*
* - `categorical` (default) — 12 distinct colors for comparing unrelated data series
* - `sequential-01` … `sequential-07` — 10-step single-hue ramps:
* `01`=primary, `02`=accent, `03`=muted, `04`=purple, `05`=teal, `06`=magenta, `07`=neutral
* - `sequential-status-critical`, `sequential-status-error`, `sequential-status-info`,
* `sequential-status-success`, `sequential-status-warning` — 10-step status ramps
*
* The palette sets the ECharts `color` array. If `config.color` is explicitly provided,
* it takes precedence over the palette.
*/
palette: ChartPalette;
/** Resolves palette CSS custom properties to computed color values and applies them to the chart. */
private applyPalette;
protected updated(changedProperties: PropertyValues<this>): void;
connectedCallback(): void;
protected firstUpdated(_changedProperties: PropertyValues): void;
disconnectedCallback(): void;
/**
* Returns the underlying ECharts instance, giving direct access to the full
* [ECharts API](https://echarts.apache.org/en/api.html#echartsInstance).
*
* Use this when the `config` property alone is not sufficient — for example to
* imperatively call `setOption()` with custom merge flags, listen to ECharts events,
* trigger actions, or retrieve chart data.
*
* Returns `undefined` if called before the component has been connected to the DOM
* (i.e. before `firstUpdated` has run).
*
* @example
* ```js
* const instance = chart.getInstance();
*
* // Listen to ECharts events
* instance?.on('click', params => console.log(params));
*
* // Partial update without replacing the full option
* instance?.setOption({ series: [{ data: [1, 2, 3] }] }, { replaceMerge: 'series' });
* ```
*/
getInstance(): EChartsType | undefined;
render(): import("lit").TemplateResult<1>;
}