store/resources/js/components/ui/chart/index.ts

40 lines
1.1 KiB
TypeScript

import type { Component, InjectionKey, Ref } from 'vue'
import { createApp, h, ref } from 'vue'
export const ChartConfigSymbol: InjectionKey<Ref<ChartConfig>> = Symbol('chartConfig')
export type ChartConfig = {
[key in string]: {
label?: string
icon?: Component
color?: string
theme?: Record<string, string>
}
}
export { default as ChartContainer } from './ChartContainer.vue'
export { default as ChartTooltip } from './ChartTooltip.vue'
export { default as ChartTooltipContent } from './ChartTooltipContent.vue'
export { default as ChartCrosshair } from './ChartCrosshair.vue'
export { default as ChartLegend } from './ChartLegend.vue'
export { default as ChartLegendContent } from './ChartLegendContent.vue'
export function componentToString(
config: ChartConfig,
component: Component,
props?: any,
) {
if (typeof window === 'undefined') return ''
const container = document.createElement('div')
const app = createApp({
render() {
return h(component, props)
},
})
app.provide(ChartConfigSymbol, ref(config))
app.mount(container)
const html = container.innerHTML
app.unmount()
return html
}