diff --git a/app/components/PackageDownloadAnalytics.vue b/app/components/PackageDownloadAnalytics.vue index 12e0a2bf03..1db59f1c64 100644 --- a/app/components/PackageDownloadAnalytics.vue +++ b/app/components/PackageDownloadAnalytics.vue @@ -426,6 +426,14 @@ const chartData = computed<{ dataset: VueUiXyDatasetItem[] | null; dates: string const formatter = ({ value }: { value: number }) => formatCompactNumber(value, { decimals: 1 }) +const loadFile = (link: string, filename: string) => { + const a = document.createElement('a') + a.href = link + a.download = filename + a.click() + a.remove() +} + const config = computed(() => ({ theme: isDarkMode.value ? 'dark' : 'default', chart: { @@ -438,6 +446,22 @@ const config = computed(() => ({ table: false, tooltip: false, }, + callbacks: { + img: ({ imageUri }: { imageUri: string }) => { + loadFile(imageUri, `${packageName}-${selectedGranularity.value}.png`) + }, + csv: (csvStr: string) => { + const blob = new Blob([csvStr.replace('data:text/csv;charset=utf-8,', '')]) + const url = URL.createObjectURL(blob) + loadFile(url, `${packageName}-${selectedGranularity.value}.csv`) + URL.revokeObjectURL(url) + }, + svg: ({ blob }: { blob: Blob }) => { + const url = URL.createObjectURL(blob) + loadFile(url, `${packageName}-${selectedGranularity.value}.svg`) + URL.revokeObjectURL(url) + }, + }, }, backgroundColor: isDarkMode.value ? '#0A0A0A' : '#FFFFFF', grid: {