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;