diff --git a/src/lib/charts/index.ts b/src/lib/charts/index.ts
index c73108a13..488756ecb 100644
--- a/src/lib/charts/index.ts
+++ b/src/lib/charts/index.ts
@@ -1,2 +1,3 @@
export { default as BarChart } from './bar.svelte';
export { default as LineChart } from './line.svelte';
+export { default as Legend, type LegendData } from './legend.svelte';
diff --git a/src/lib/charts/legend.svelte b/src/lib/charts/legend.svelte
new file mode 100644
index 000000000..671f4cce3
--- /dev/null
+++ b/src/lib/charts/legend.svelte
@@ -0,0 +1,23 @@
+
+
+
+
+
+ {#each legendData as { name, value }, index}
+
+
+ {name} ({value})
+
+ {/each}
+
diff --git a/src/lib/layout/index.ts b/src/lib/layout/index.ts
index e45069dd1..fa8289f73 100644
--- a/src/lib/layout/index.ts
+++ b/src/lib/layout/index.ts
@@ -13,6 +13,7 @@ export { default as WizardStep } from './wizardStep.svelte';
export { default as Breadcrumbs } from './breadcrumbs.svelte';
export { default as Unauthenticated } from './unauthenticated.svelte';
export { default as Usage, type UsagePeriods } from './usage.svelte';
+export { default as UsageMultiple } from './usageMultiple.svelte';
export { default as Activity } from './activity.svelte';
export { default as Progress } from './progress.svelte';
export { default as GridHeader } from './gridHeader.svelte';
diff --git a/src/lib/layout/usageMultiple.svelte b/src/lib/layout/usageMultiple.svelte
new file mode 100644
index 000000000..6e3d3be43
--- /dev/null
+++ b/src/lib/layout/usageMultiple.svelte
@@ -0,0 +1,63 @@
+
+
+
+
+ {title}
+ {#if path}
+
+
+ 24h
+
+
+ 30d
+
+
+ 90d
+
+
+ {/if}
+
+
+ {#if count}
+
+
+ ({
+ name: legendData[index].name,
+ data: accumulateFromEndingTotal(c, total[index])
+ }))} />
+
+
+ {#if legendData}
+
+ {/if}
+
+ {/if}
+
+
+
+