Already have an account?
diff --git a/src/app/components/SignUpKey.svelte b/src/app/components/SignUpKey.svelte
new file mode 100644
index 00000000..6e521f6f
--- /dev/null
+++ b/src/app/components/SignUpKey.svelte
@@ -0,0 +1,84 @@
+
+
+
diff --git a/src/app/components/SignUpKeyConfirm.svelte b/src/app/components/SignUpKeyConfirm.svelte
new file mode 100644
index 00000000..88ff3b04
--- /dev/null
+++ b/src/app/components/SignUpKeyConfirm.svelte
@@ -0,0 +1,66 @@
+
+
+
diff --git a/src/app/components/SignUpProfile.svelte b/src/app/components/SignUpProfile.svelte
new file mode 100644
index 00000000..863e5a01
--- /dev/null
+++ b/src/app/components/SignUpProfile.svelte
@@ -0,0 +1,28 @@
+
+
+
+ {#snippet footer()}
+
+ {/snippet}
+
diff --git a/src/lib/html.ts b/src/lib/html.ts
index c1f989a5..d9123606 100644
--- a/src/lib/html.ts
+++ b/src/lib/html.ts
@@ -76,3 +76,16 @@ export const createScroller = ({
}
export const isMobile = "ontouchstart" in document.documentElement
+
+export const downloadText = (filename: string, text: string) => {
+ const blob = new Blob([text], {type: "text/plain"})
+ const url = URL.createObjectURL(blob)
+ const a = document.createElement("a")
+
+ a.href = url
+ a.download = filename
+ document.body.appendChild(a)
+ a.click()
+ document.body.removeChild(a)
+ URL.revokeObjectURL(url)
+}