import type {
VueUiXyDatasetItem,
VueUiXyConfig,
VueUiDonutDatasetItem,
VueUiDonutConfig,
VueUiDonutDatapoint,
} from 'vue-data-ui';
export type {
VueUiXyDatasetItem,
VueUiXyConfig,
VueUiDonutDatasetItem,
VueUiDonutConfig,
VueUiDonutDatapoint,
};
export type VueUiXyAdditionalSvgContentContext = {
width: number;
height: number;
drawingArea: {
top: number;
right: number;
bottom: number;
left: number;
width: number;
height: number;
scaleLabelX?: number;
rightScaleLabelX?: number;
scaleLabelsOffset?: number;
yAxisLabelWidth?: number;
individualOffsetX?: number;
};
scale: {
min: number;
max: number;
tickSize: number;
ticks: number[];
};
config: VueUiXyConfig;
series: Array<
VueUiXyDatasetItem & {
color: string;
type: 'line' | 'bar' | 'plot';
plots: Array<{
x: number;
y: number | null;
value: number | null;
index: number;
label: string;
__barLabelX?: number;
}>;
}
>;
};
export type VueUiXyAdditionalSvgContent =
| string
| ((
context: VueUiXyAdditionalSvgContentContext,
) => string | null | undefined);
export type RenderStaticVueUiXyState = {
dataset: VueUiXyDatasetItem[];
config?: VueUiXyConfig;
width?: number;
height?: number;
svgTitle?: string;
additionalSvgContent?: VueUiXyAdditionalSvgContent;
};
/**
* Generates a static SVG representation of a VueUiXy chart.
*
* This function is designed for server-side rendering and returns a complete
* SVG string that can be embedded directly into HTML, saved to a file, or
* converted to other formats such as PNG or PDF.
*
* The input state accepts the same dataset and configuration options as the
* VueUiXy component, along with optional rendering dimensions and custom SVG
* injections via `additionalSvgContent`.
*
* @example
* ```ts
* import { createStaticVueUiXy } from 'vue-data-ui';
*
* const svg = await createStaticVueUiXy({
* dataset: [
* {
* name: 'Sales',
* type: 'line',
* series: [12, 18, 25, 21, 30]
* }
* ],
* config: {
* chart: {
* title: {
* text: 'Monthly Sales'
* }
* }
* },
* });
*
* console.log(svg);
* ```
*
* @example
* ```ts
* const svg = await createStaticVueUiXy({
* dataset,
* config,
* additionalSvgContent: ({ series }) => {
* return series.map((serie) => {
* const lastPlot = serie.plots.at(-1);
*
* if (!lastPlot || lastPlot.value === null) {
* return '';
* }
*
* return `
*
* ${lastPlot.value}
*
* `;
* }).join('');
* }
* });
* ```
*
* @param state - Chart rendering state containing the dataset, configuration,
* dimensions, and optional rendering metadata.
* @returns A promise resolving to the generated SVG markup.
*/
export function createStaticVueUiXy(
state: RenderStaticVueUiXyState,
): Promise;
/**
* vue-ui-donut
*/
export type VueUiDonutAdditionalSvgContentContext = {
center: { x: number; y: number };
config: VueUiDonutConfig;
drawingArea: {
bottom: number;
height: number;
left: number;
right: number;
top: number;
width: number;
};
height: number;
innerRadius: number;
radius: number;
series: VueUiDonutDatapoint[];
thickness: number;
width: number;
};
export type VueUiDonutAdditionalSvgContent =
| string
| ((
context: VueUiDonutAdditionalSvgContentContext,
) => string | null | undefined);
export type RenderStaticVueUiDonutState = {
dataset: VueUiDonutDatasetItem[];
config?: VueUiDonutConfig;
width?: number;
height?: number;
svgTitle?: string;
additionalSvgContent?: VueUiDonutAdditionalSvgContent;
};
export function createStaticVueUiDonut(
state: RenderStaticVueUiDonutState,
): Promise;