diff --git a/src/img/steam/review_graph_expander.png b/src/img/steam/review_graph_expander.png
new file mode 100644
index 000000000..a1a4ac6bd
Binary files /dev/null and b/src/img/steam/review_graph_expander.png differ
diff --git a/src/js/Content/Features/Store/Licenses/FLicensesSummary.svelte b/src/js/Content/Features/Store/Licenses/FLicensesSummary.svelte
index 018748c40..8aae894cc 100644
--- a/src/js/Content/Features/Store/Licenses/FLicensesSummary.svelte
+++ b/src/js/Content/Features/Store/Licenses/FLicensesSummary.svelte
@@ -1,5 +1,4 @@
-
-{Localization.str.wl.label}
-
-{#if show}
-
-
-
-
- {Localization.str.year} |
- {@html tableHeader}
- {Localization.str.all} |
-
-
-
- {@html rows}
-
-
-
- {Localization.str.all} |
- {@html tableFooter}
- {totalGlobal} |
-
-
-
+
+
+
+ {Localization.str.wl.label}
+ (isOpen = !isOpen)}>
+ {isOpen ? Localization.str.hide : Localization.str.show}
+
+
+
+
+ {#if isOpen}
+
+
+
+
+ {Localization.str.year} |
+ {#each Object.keys(total) as type}
+ {type} |
+ {/each}
+ {Localization.str.all} |
+
+
+
+ {#each Object.entries(yearly).reverse() as [year, map]}
+
+ {year} |
+ {#each Object.keys(total) as type}
+ {map[type] ?? 0} |
+ {/each}
+ {Object.values(map).reduce((result, currentValue) => result + currentValue, 0)} |
+
+ {/each}
+
+
+
+ {Localization.str.all} |
+ {#each Object.values(total) as count}
+ {count} |
+ {/each}
+ {Object.values(total).reduce((result, currentValue) => result + currentValue, 0)} |
+
+
+
+
+ {/if}
-{/if}
diff --git a/src/js/Content/Steam/SmallSteamButton.svelte b/src/js/Content/Steam/SmallSteamButton.svelte
new file mode 100644
index 000000000..81fb42457
--- /dev/null
+++ b/src/js/Content/Steam/SmallSteamButton.svelte
@@ -0,0 +1,26 @@
+
+
+
+
+
diff --git a/src/js/Content/Steam/ToggleIcon.svelte b/src/js/Content/Steam/ToggleIcon.svelte
new file mode 100644
index 000000000..9c7a5db80
--- /dev/null
+++ b/src/js/Content/Steam/ToggleIcon.svelte
@@ -0,0 +1,19 @@
+
+
+
+
+