diff --git a/web/src/lib/components/ui/Tooltip.stories.svelte b/web/src/lib/components/ui/Tooltip.stories.svelte
new file mode 100644
index 00000000..fb43523c
--- /dev/null
+++ b/web/src/lib/components/ui/Tooltip.stories.svelte
@@ -0,0 +1,94 @@
+
+
+
+
+{#snippet richContent()}
+ Sign the commit
+
+ Requires a key registered on your account.
+
+{/snippet}
+
+
+
+
+
+
+
+
+
+
+
+
+ {#each ["left", "top", "bottom", "right"] as const as side (side)}
+
+
+
+ {/each}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/web/src/lib/components/ui/Tooltip.svelte b/web/src/lib/components/ui/Tooltip.svelte
new file mode 100644
index 00000000..743e440a
--- /dev/null
+++ b/web/src/lib/components/ui/Tooltip.svelte
@@ -0,0 +1,367 @@
+
+
+
+
+
+ {@render children()}
+
+
+
+ {#if typeof content === "string"}
+ {content}
+ {:else}
+ {@render content()}
+ {/if}
+
+
+