cardamon 0.0.1

Cardamon is a tool to help development teams measure the power consumption and carbon emissions of their software.
<template>
  <Line :data="chartData" :options="computedChartOptions" />
</template>

<script setup lang="ts">
import { defineProps, computed } from 'vue'
import { Line } from 'vue-chartjs'
import {
  Chart as ChartJS,
  Title,
  Tooltip,
  Legend,
  LineElement,
  PointElement,
  LinearScale,
  CategoryScale,
  type ChartData,
  type ChartOptions
} from 'chart.js'
import { useThemeStore } from '@/stores/theme'

ChartJS.register(Title, Tooltip, Legend, LineElement, PointElement, LinearScale, CategoryScale)

interface ChartProps {
  chartData: ChartData<'line'>
  chartOptions: ChartOptions<'line'>
}

const props = defineProps<ChartProps>()

const themeStore = useThemeStore()
const darkMode = computed(() => themeStore.darkMode)

const computedChartOptions = computed(() => {
  const baseOptions: ChartOptions<'line'> = {
    responsive: true,
    maintainAspectRatio: false,
    plugins: {
      legend: {
        display: true,
        position: 'top',
        labels: {
          color: darkMode.value ? 'white' : 'black' // Adjust legend text color
        }
      },
      tooltip: {
        enabled: true,
        backgroundColor: darkMode.value ? 'rgba(255, 255, 255, 0.8)' : 'rgba(0, 0, 0, 0.8)', // Adjust tooltip background color
        titleColor: darkMode.value ? 'black' : 'white', // Adjust tooltip title color
        bodyColor: darkMode.value ? 'black' : 'white' // Adjust tooltip body color
      },
      title: {
        display: true,
        text: 'Line Chart',
        color: darkMode.value ? 'white' : 'black' // Adjust title color
      }
    },
    scales: {
      x: {
        ticks: {
          color: darkMode.value ? 'white' : 'black' // Adjust x-axis tick color
        },
        grid: {
          color: darkMode.value ? 'rgba(255, 255, 255, 0.1)' : 'rgba(0, 0, 0, 0.1)' // Adjust x-axis grid color
        }
      },
      y: {
        ticks: {
          color: darkMode.value ? 'white' : 'black' // Adjust y-axis tick color
        },
        grid: {
          color: darkMode.value ? 'rgba(255, 255, 255, 0.1)' : 'rgba(0, 0, 0, 0.1)' // Adjust y-axis grid color
        }
      }
    },
    interaction: {
      mode: 'nearest',
      axis: 'x',
      intersect: false
    }
  }

  return {
    ...props.chartOptions,
    ...baseOptions
  }
})
</script>