| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- <template>
- <Bar
- :id="props.id"
- ref="chart_ref"
- :options="chartOptions"
- :data="computedChartData"
- />
- </template>
- <script setup>
- import {
- Chart as ChartJS,
- CategoryScale,
- LinearScale,
- BarElement,
- Tooltip,
- } from "chart.js";
- import { computed, useTemplateRef } from "vue";
- import { Bar } from "vue-chartjs";
- // Register only necessary components
- ChartJS.register(
- CategoryScale,
- LinearScale,
- BarElement,
- Tooltip,
- );
- const chart_ref = useTemplateRef(null);
- // Simplified props focusing on essential functionality
- const props = defineProps({
- // Core data props
- data: {
- type: Array,
- required: true,
- },
- // Essential styling
- barColor: {
- type: String,
- default: "#1976D2",
- },
- // Optional configurations for flexibility
- horizontal: {
- type: Boolean,
- default: false,
- },
- showTooltip: {
- type: Boolean,
- default: true,
- }
- });
- // Optimized chart options for mini-charts
- const chartOptions = computed(() => ({
- responsive: true,
- maintainAspectRatio: false,
- indexAxis: props.horizontal ? "y" : "x",
- plugins: {
- legend: {
- display: false, // Always hide legend in mini charts
- },
- tooltip: {
- enabled: props.showTooltip,
- displayColors: false,
- callbacks: {
- label: (context) => `${context.raw}`
- }
- },
- },
- scales: {
- x: {
- display: false,
- grid: {
- display: false,
- }
- },
- y: {
- display: false,
- grid: {
- display: false,
- },
- beginAtZero: true,
- },
- },
- animation: {
- duration: 750,
- easing: 'easeOutQuad',
- },
- }));
- // Simplified data computation
- const computedChartData = computed(() => ({
- labels: Array(props.data.length).fill(''),
- datasets: [{
- data: props.data,
- backgroundColor: props.barColor,
- borderRadius: 2,
- barThickness: 8,
- maxBarThickness: 10,
- }]
- }));
- // Expose essential methods
- defineExpose({
- chart_ref,
- });
- </script>
|