diff --git a/apps/web/app/landing/download.tsx b/apps/web/app/landing/download.tsx
new file mode 100644
index 00000000..21052327
--- /dev/null
+++ b/apps/web/app/landing/download.tsx
@@ -0,0 +1,20 @@
+"use client"
+import * as htmlToImage from "html-to-image"
+
+export function Download({ selector }: { selector: string }) {
+ const onClick = async () => {
+ const nodes = document.querySelectorAll(selector) as any
+ for (const node of nodes) {
+ const dataUrl = await htmlToImage.toPng(node as HTMLElement)
+ var img = new Image()
+ img.src = dataUrl
+ document.getElementById("out")!.appendChild(img)
+ }
+ }
+ return (
+
+ )
+}
diff --git a/apps/web/package.json b/apps/web/package.json
index cea779f6..f7bd58a3 100644
--- a/apps/web/package.json
+++ b/apps/web/package.json
@@ -26,6 +26,7 @@
"diff": "^5.1.0",
"dotenv": "^16.4.1",
"estree-util-to-js": "^2.0.0",
+ "html-to-image": "^1.11.11",
"lucide-react": "^0.303.0",
"next": "14.1.0",
"next-docs-mdx": "7.1.2",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 4606390b..90afdf7a 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -107,6 +107,9 @@ importers:
estree-util-to-js:
specifier: ^2.0.0
version: 2.0.0
+ html-to-image:
+ specifier: ^1.11.11
+ version: 1.11.11
lucide-react:
specifier: ^0.303.0
version: 0.303.0(react@18.2.0)
@@ -2677,6 +2680,9 @@ packages:
hosted-git-info@2.8.9:
resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==}
+ html-to-image@1.11.11:
+ resolution: {integrity: sha512-9gux8QhvjRO/erSnDPv28noDZcPZmYE7e1vFsBLKLlRlKDSqNJYebj6Qz1TGd5lsRV+X+xYyjCKjuZdABinWjA==}
+
human-id@1.0.2:
resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==}
@@ -7236,6 +7242,8 @@ snapshots:
hosted-git-info@2.8.9: {}
+ html-to-image@1.11.11: {}
+
human-id@1.0.2: {}
human-id@4.1.1: {}