UNPKG

@smitch/fluid

Version:

A Next/React ui-component libray.

69 lines (68 loc) 3.23 kB
import { jsx as _jsx } from "react/jsx-runtime"; import { useMemo, Suspense, lazy } from 'react'; import { Chart as ChartJS, registerables } from 'chart.js'; import { twMerge } from 'tailwind-merge'; var LazyBubble = lazy(function () { return import('react-chartjs-2').then(function (module) { return ({ default: module.Bubble }); }); }); var LazyLine = lazy(function () { return import('react-chartjs-2').then(function (module) { return ({ default: module.Line }); }); }); var LazyBar = lazy(function () { return import('react-chartjs-2').then(function (module) { return ({ default: module.Bar }); }); }); var LazyPie = lazy(function () { return import('react-chartjs-2').then(function (module) { return ({ default: module.Pie }); }); }); var LazyDoughnut = lazy(function () { return import('react-chartjs-2').then(function (module) { return ({ default: module.Doughnut }); }); }); var LazyRadar = lazy(function () { return import('react-chartjs-2').then(function (module) { return ({ default: module.Radar }); }); }); var LazyPolarArea = lazy(function () { return import('react-chartjs-2').then(function (module) { return ({ default: module.PolarArea }); }); }); var LazyScatter = lazy(function () { return import('react-chartjs-2').then(function (module) { return ({ default: module.Scatter }); }); }); var merge = require('deepmerge'); ChartJS.register.apply(ChartJS, registerables); var aspects = { landscape: 'aspect-[4/3]', portrait: 'aspect-[3/4]', square: 'aspect-square', auto: 'aspect-auto', }; var ChartWrap = function (_a) { var data = _a.data, options = _a.options, title = _a.title, legendposition = _a.legendposition, chartType = _a.chartType, _b = _a.aspect, aspect = _b === void 0 ? 'auto' : _b, className = _a.className, style = _a.style; var aspectClasses = useMemo(function () { return aspects[aspect]; }, [aspect]); var defaultOptions = useMemo(function () { return { responsive: true, maintainAspectRatio: false, plugins: { legend: { position: legendposition, }, title: { display: !!title, text: title, }, }, }; }, [legendposition, title]); var chartComponents = { bubble: LazyBubble, line: LazyLine, bar: LazyBar, pie: LazyPie, doughnut: LazyDoughnut, radar: LazyRadar, polarArea: LazyPolarArea, scatter: LazyScatter, mixed: LazyBar, }; var ChartComponent = chartComponents[chartType]; var combinedOptions = useMemo(function () { if (options) return merge(defaultOptions, options); return defaultOptions; }, [defaultOptions, options]); return (_jsx("figure", { className: twMerge("chart-wrap h-auto min-w-full ".concat(aspectClasses), className), children: _jsx(Suspense, { fallback: _jsx("div", { className: 'text-center text-sm italic', children: "Loading Chart" }), children: _jsx(ChartComponent, { data: data, options: combinedOptions, title: title, legendposition: legendposition, style: style }) }) })); }; export default ChartWrap;