diff --git a/astro.config.mjs b/astro.config.mjs
index c7ed262..36950f5 100644
--- a/astro.config.mjs
+++ b/astro.config.mjs
@@ -1,5 +1,8 @@
import { defineConfig } from 'astro/config';
import starlight from '@astrojs/starlight';
+import solidJs from "@astrojs/solid-js";
+import robotsTxt from "astro-robots-txt";
+import sitemap from "@astrojs/sitemap";
// https://astro.build/config
export default defineConfig({
@@ -97,6 +100,8 @@ export default defineConfig({
lang:"zh-CN",
},
},
+ customCss: ['./src/assets/landing.css'],
}),
+ solidJs(), robotsTxt(), sitemap(),
],
});
diff --git a/package-lock.json b/package-lock.json
index b9690c7..adfd8d9 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -9,8 +9,11 @@
"version": "0.0.1",
"dependencies": {
"@astrojs/check": "^0.7.0",
+ "@astrojs/sitemap": "^3.1.6",
+ "@astrojs/solid-js": "^4.4.0",
"@astrojs/starlight": "^0.24.4",
"astro": "^4.10.2",
+ "astro-robots-txt": "^1.0.0",
"sharp": "^0.32.5",
"typescript": "^5.5.2"
}
@@ -167,6 +170,26 @@
"zod": "^3.23.8"
}
},
+ "node_modules/@astrojs/solid-js": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmmirror.com/@astrojs/solid-js/-/solid-js-4.4.0.tgz",
+ "integrity": "sha512-nNX7x9dTcutb69yVGGC7/4vRECsV0dySmkl48AeV4qIAdCYXuH74Yu8KvPwRWRjtF0Z2Xp9ZgXG5KYCVHdBXJw==",
+ "dependencies": {
+ "vite-plugin-solid": "^2.10.2"
+ },
+ "engines": {
+ "node": "^18.17.1 || ^20.3.0 || >=21.0.0"
+ },
+ "peerDependencies": {
+ "solid-devtools": "^0.30.1",
+ "solid-js": "^1.8.5"
+ },
+ "peerDependenciesMeta": {
+ "solid-devtools": {
+ "optional": true
+ }
+ }
+ },
"node_modules/@astrojs/starlight": {
"version": "0.24.4",
"resolved": "https://registry.npmmirror.com/@astrojs/starlight/-/starlight-0.24.4.tgz",
@@ -2200,6 +2223,15 @@
"astro": "^4.0.0-beta || ^3.3.0"
}
},
+ "node_modules/astro-robots-txt": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmmirror.com/astro-robots-txt/-/astro-robots-txt-1.0.0.tgz",
+ "integrity": "sha512-6JQSLid4gMhoWjOm85UHLkgrw0+hHIjnJVIUqxjU2D6feKlVyYukMNYjH44ZDZBK1P8hNxd33PgWlHzCASvedA==",
+ "dependencies": {
+ "valid-filename": "^4.0.0",
+ "zod": "^3.22.2"
+ }
+ },
"node_modules/astro/node_modules/sharp": {
"version": "0.33.4",
"resolved": "https://registry.npmmirror.com/sharp/-/sharp-0.33.4.tgz",
@@ -2253,6 +2285,43 @@
"resolved": "https://registry.npmmirror.com/b4a/-/b4a-1.6.6.tgz",
"integrity": "sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg=="
},
+ "node_modules/babel-plugin-jsx-dom-expressions": {
+ "version": "0.37.23",
+ "resolved": "https://registry.npmmirror.com/babel-plugin-jsx-dom-expressions/-/babel-plugin-jsx-dom-expressions-0.37.23.tgz",
+ "integrity": "sha512-Y/r8LyLi/njnwPTaDuPEReWk30FJ1KplloYvcFUhHmiH1F7yVVj5mWojD7mbO/IruKyvOs9OIPUoeMi3Z++J4w==",
+ "dependencies": {
+ "@babel/helper-module-imports": "7.18.6",
+ "@babel/plugin-syntax-jsx": "^7.18.6",
+ "@babel/types": "^7.20.7",
+ "html-entities": "2.3.3",
+ "validate-html-nesting": "^1.2.1"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.20.12"
+ }
+ },
+ "node_modules/babel-plugin-jsx-dom-expressions/node_modules/@babel/helper-module-imports": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz",
+ "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==",
+ "dependencies": {
+ "@babel/types": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/babel-preset-solid": {
+ "version": "1.8.18",
+ "resolved": "https://registry.npmmirror.com/babel-preset-solid/-/babel-preset-solid-1.8.18.tgz",
+ "integrity": "sha512-ky0FA4cCS9dk+xYBBItHoxtbRnaDIOGpmHLFqKPaR81hpMbJBOiLOZia2hT0JBwx4zn/D2OjMRvRr6kqtRMoUw==",
+ "dependencies": {
+ "babel-plugin-jsx-dom-expressions": "^0.37.23"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
"node_modules/bail": {
"version": "2.0.2",
"resolved": "https://registry.npmmirror.com/bail/-/bail-2.0.2.tgz",
@@ -2885,6 +2954,12 @@
"node": ">=4"
}
},
+ "node_modules/csstype": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz",
+ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
+ "peer": true
+ },
"node_modules/debug": {
"version": "4.3.5",
"resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.5.tgz",
@@ -3292,6 +3367,17 @@
"reusify": "^1.0.4"
}
},
+ "node_modules/filename-reserved-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmmirror.com/filename-reserved-regex/-/filename-reserved-regex-3.0.0.tgz",
+ "integrity": "sha512-hn4cQfU6GOT/7cFHXBqeBg2TbrMBgdD0kcjLhvSQYYwm3s4B6cjvBfb7nBALJLAXqmU5xajSa7X2NnUud/VCdw==",
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/fill-range": {
"version": "7.1.1",
"resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.1.1.tgz",
@@ -3797,6 +3883,11 @@
"url": "https://opencollective.com/unified"
}
},
+ "node_modules/html-entities": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmmirror.com/html-entities/-/html-entities-2.3.3.tgz",
+ "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA=="
+ },
"node_modules/html-escaper": {
"version": "3.0.3",
"resolved": "https://registry.npmmirror.com/html-escaper/-/html-escaper-3.0.3.tgz",
@@ -4054,6 +4145,17 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/is-what": {
+ "version": "4.1.16",
+ "resolved": "https://registry.npmmirror.com/is-what/-/is-what-4.1.16.tgz",
+ "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==",
+ "engines": {
+ "node": ">=12.13"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mesqueeb"
+ }
+ },
"node_modules/is-wsl": {
"version": "3.1.0",
"resolved": "https://registry.npmmirror.com/is-wsl/-/is-wsl-3.1.0.tgz",
@@ -4577,6 +4679,20 @@
"url": "https://opencollective.com/unified"
}
},
+ "node_modules/merge-anything": {
+ "version": "5.1.7",
+ "resolved": "https://registry.npmmirror.com/merge-anything/-/merge-anything-5.1.7.tgz",
+ "integrity": "sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ==",
+ "dependencies": {
+ "is-what": "^4.1.8"
+ },
+ "engines": {
+ "node": ">=12.13"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mesqueeb"
+ }
+ },
"node_modules/merge-stream": {
"version": "2.0.0",
"resolved": "https://registry.npmmirror.com/merge-stream/-/merge-stream-2.0.0.tgz",
@@ -6441,6 +6557,27 @@
"node": ">=10"
}
},
+ "node_modules/seroval": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmmirror.com/seroval/-/seroval-1.0.7.tgz",
+ "integrity": "sha512-n6ZMQX5q0Vn19Zq7CIKNIo7E75gPkGCFUEqDpa8jgwpYr/vScjqnQ6H09t1uIiZ0ZSK0ypEGvrYK2bhBGWsGdw==",
+ "peer": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/seroval-plugins": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmmirror.com/seroval-plugins/-/seroval-plugins-1.0.7.tgz",
+ "integrity": "sha512-GO7TkWvodGp6buMEX9p7tNyIkbwlyuAWbI6G9Ec5bhcm7mQdu3JOK1IXbEUwb3FVzSc363GraG/wLW23NSavIw==",
+ "peer": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "seroval": "^1.0"
+ }
+ },
"node_modules/sharp": {
"version": "0.32.6",
"resolved": "https://registry.npmmirror.com/sharp/-/sharp-0.32.6.tgz",
@@ -6566,6 +6703,30 @@
"resolved": "https://registry.npmmirror.com/@types/node/-/node-17.0.45.tgz",
"integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw=="
},
+ "node_modules/solid-js": {
+ "version": "1.8.18",
+ "resolved": "https://registry.npmmirror.com/solid-js/-/solid-js-1.8.18.tgz",
+ "integrity": "sha512-cpkxDPvO/AuKBugVv6xKFd1C9VC0XZMu4VtF56IlHoux8HgyW44uqNSWbozMnVcpIzHIhS3vVXPAVZYM26jpWw==",
+ "peer": true,
+ "dependencies": {
+ "csstype": "^3.1.0",
+ "seroval": "^1.0.4",
+ "seroval-plugins": "^1.0.3"
+ }
+ },
+ "node_modules/solid-refresh": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmmirror.com/solid-refresh/-/solid-refresh-0.6.3.tgz",
+ "integrity": "sha512-F3aPsX6hVw9ttm5LYlth8Q15x6MlI/J3Dn+o3EQyRTtTxidepSTwAYdozt01/YA+7ObcciagGEyXIopGZzQtbA==",
+ "dependencies": {
+ "@babel/generator": "^7.23.6",
+ "@babel/helper-module-imports": "^7.22.15",
+ "@babel/types": "^7.23.6"
+ },
+ "peerDependencies": {
+ "solid-js": "^1.3"
+ }
+ },
"node_modules/source-map": {
"version": "0.7.4",
"resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.7.4.tgz",
@@ -7053,6 +7214,25 @@
"resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz",
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
},
+ "node_modules/valid-filename": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmmirror.com/valid-filename/-/valid-filename-4.0.0.tgz",
+ "integrity": "sha512-VEYTpTVPMgO799f2wI7zWf0x2C54bPX6NAfbZ2Z8kZn76p+3rEYCTYVYzMUcVSMvakxMQTriBf24s3+WeXJtEg==",
+ "dependencies": {
+ "filename-reserved-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/validate-html-nesting": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmmirror.com/validate-html-nesting/-/validate-html-nesting-1.2.2.tgz",
+ "integrity": "sha512-hGdgQozCsQJMyfK5urgFcWEqsSSrK63Awe0t/IMR0bZ0QMtnuaiHzThW81guu3qx9abLi99NEuiaN6P9gVYsNg=="
+ },
"node_modules/vfile": {
"version": "6.0.1",
"resolved": "https://registry.npmmirror.com/vfile/-/vfile-6.0.1.tgz",
@@ -7147,6 +7327,29 @@
}
}
},
+ "node_modules/vite-plugin-solid": {
+ "version": "2.10.2",
+ "resolved": "https://registry.npmmirror.com/vite-plugin-solid/-/vite-plugin-solid-2.10.2.tgz",
+ "integrity": "sha512-AOEtwMe2baBSXMXdo+BUwECC8IFHcKS6WQV/1NEd+Q7vHPap5fmIhLcAzr+DUJ04/KHx/1UBU0l1/GWP+rMAPQ==",
+ "dependencies": {
+ "@babel/core": "^7.23.3",
+ "@types/babel__core": "^7.20.4",
+ "babel-preset-solid": "^1.8.4",
+ "merge-anything": "^5.1.7",
+ "solid-refresh": "^0.6.3",
+ "vitefu": "^0.2.5"
+ },
+ "peerDependencies": {
+ "@testing-library/jest-dom": "^5.16.6 || ^5.17.0 || ^6.*",
+ "solid-js": "^1.7.2",
+ "vite": "^3.0.0 || ^4.0.0 || ^5.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@testing-library/jest-dom": {
+ "optional": true
+ }
+ }
+ },
"node_modules/vitefu": {
"version": "0.2.5",
"resolved": "https://registry.npmmirror.com/vitefu/-/vitefu-0.2.5.tgz",
diff --git a/package.json b/package.json
index a939ce7..d697a77 100644
--- a/package.json
+++ b/package.json
@@ -10,10 +10,13 @@
"astro": "astro"
},
"dependencies": {
+ "@astrojs/check": "^0.7.0",
+ "@astrojs/sitemap": "^3.1.6",
+ "@astrojs/solid-js": "^4.4.0",
"@astrojs/starlight": "^0.24.4",
"astro": "^4.10.2",
+ "astro-robots-txt": "^1.0.0",
"sharp": "^0.32.5",
- "@astrojs/check": "^0.7.0",
"typescript": "^5.5.2"
}
-}
\ No newline at end of file
+}
diff --git a/src/assets/landing.css b/src/assets/landing.css
new file mode 100644
index 0000000..f8b5880
--- /dev/null
+++ b/src/assets/landing.css
@@ -0,0 +1,226 @@
+:root {
+ --accent-hsl: 222, 71%, 44%;
+ --overlay-blurple: hsla(var(--accent-hsl), 0.2);
+ --overlay-purple: #9e33d07b 20%;
+ --sl-color-text-accent: #30519f;
+ --sl-color-text-accent-darker: #143b95;
+ --color-bg-elevation: #1b1b1d;
+ --sl-color-black: #111112;
+ --sl-color-gray-6: #1b1b1d;
+ --sl-color-text-invert: #f1f5f9;
+}
+
+:root[data-theme='light'] {
+ --accent-hsl: 255, 85%, 65%;
+ --overlay-blurple: hsla(var(--accent-hsl), 0.3);
+ --overlay-purple: #357de1c0 20%;
+ --sl-color-text-accent: #2458d1;
+ --sl-color-text-accent-darker: #1947b0;
+ --color-bg-elevation: #e7e7e7;
+ --sl-color-black: #f0eff3;
+ --sl-color-gray-6: #d8d8d8;
+ --sl-color-gray-7: #eeeeee;
+}
+
+[data-has-hero] .page {
+ background:
+ radial-gradient(#09129bb1, #2551ff2b, transparent 60%) no-repeat 25rem -8rem /
+ 140rem 80rem;
+}
+
+[data-has-hero] header {
+ border-bottom: 1px solid transparent;
+ background-color: transparent;
+ -webkit-backdrop-filter: blur(16px);
+ backdrop-filter: blur(16px);
+}
+
+[data-has-hero] header site-search > button {
+ display: none !important;
+}
+
+[data-has-hero] .hero img {
+ position: absolute;
+ overflow: hidden;
+ top: 15vh;
+ width: 60%;
+ aspect-ratio: 16-9;
+}
+
+[data-has-hero] {
+ overflow-x: hidden;
+}
+
+[data-has-hero] .hero > div.sl-flex{
+ align-self: flex-start;
+}
+
+[data-has-hero] .sl-container {
+ margin: 0 auto;
+ max-width: 90vw;
+}
+
+[data-has-hero] .hero .action {
+ border-radius: 24px;
+ transition: background-color ease-in-out 0.25s;
+}
+
+[data-has-hero] .hero .action.primary {
+ color: #fefefe;
+ font-weight: bold;
+}
+
+[data-has-hero] .hero .action.primary:hover {
+ background: var(--sl-color-text-accent-darker);
+}
+
+[data-has-hero] .hero .action.minimal {
+ border: solid 1px var(--sl-color-text-accent);
+ padding: 1rem 1.25rem;
+}
+
+[data-has-hero] .hero .action.minimal:hover {
+ background: var(--sl-color-text-accent);
+ color: #fefefe;
+}
+
+[data-has-hero] .hero .actions {
+ gap: 1.25rem;
+}
+
+[data-has-hero] .hero .hero-gradient-text {
+ background: radial-gradient(circle at top left, hsl(296, 100%, 50%) 0%, transparent 50%),
+ radial-gradient(circle at center, rgb(113, 147, 233) 0%, transparent 100%),
+ radial-gradient(circle at bottom right, rgb(0, 68, 255) 0%, transparent 50%);
+ color: transparent;
+ background-clip: text;
+ -webkit-background-clip: text;
+ -webkit-text-fill-color: transparent;
+}
+
+[data-has-hero] .card {
+ border-radius: 12px;
+ position: relative;
+ background: var(--color-bg-elevation);
+}
+
+[data-has-hero] .card::before {
+ content: "";
+ position: absolute;
+ inset: 0px;
+ border-radius: inherit;
+ transition: opacity 400ms ease 0s;
+ will-change: background, opacity;
+ background: radial-gradient(
+ 800px circle at var(--mouse-x) var(--mouse-y),
+ rgba(91, 106, 159, 0.212),
+ transparent 40%
+ );
+ opacity: 0;
+ z-index: 2;
+ pointer-events: none;
+}
+
+[data-has-hero] .card:hover::before {
+ opacity: 1;
+}
+
+[data-has-hero] .star-text {
+ margin-top: 8px !important;
+ font-size: 20px;
+ font-weight: 500;
+ letter-spacing: wider;
+}
+
+.card-grid.stagger {
+ margin-bottom: 64px;
+}
+
+.star-section {
+ background-color: var(--color-bg-elevation);
+ padding: 64px 12px;
+ margin: 64px 0;
+ text-align: center;
+}
+
+.star-section > p {
+ font-size: 18px;
+ margin-bottom: 16px;
+}
+
+.star-section > a {
+ display: inline-block;
+ padding: 12px 20px;
+ background-color: var(--sl-color-text-accent);
+ border-radius: 24px;
+ color: #fefefe;
+ font-weight: bold;
+ transition: background-color ease-in-out 0.25s;
+ text-decoration: none;
+}
+
+.star-section > a:hover {
+ background: var(--sl-color-text-accent-darker);
+}
+
+.kanban-cards-row {
+ margin-top: 20px;
+ display: grid;
+ grid-template-columns: repeat(auto-fit, minmax(340px, 1fr));
+ grid-gap: 20px;
+}
+
+.kanban-info-card {
+ padding: 24px;
+ background: var(--color-bg-elevation);
+ border: 1px solid var(--sl-color-gray-5);
+ margin: 0 !important;
+ border-radius: 12px;
+ color: var(--sl-color-gray-1);
+}
+
+.kanban-info-card > span {
+ font-size: 24px;
+ font-weight: bold;
+ color: var(--sl-color-white);
+}
+
+[data-has-hero] footer {
+ margin-top: 80px !important;
+}
+
+@media (max-width: 50em) {
+ [data-has-hero] .hero img {
+ display: none;
+ aspect-ratio: 1.74;
+ width: 10px;
+ }
+
+ [data-has-hero] .header .right-group {
+ display: flex !important;
+ }
+}
+
+@media (min-width: 1700px) {
+ [data-has-hero] .hero img {
+ position: absolute;
+ overflow: hidden;
+ top: 10vh;
+ right: -10vw;
+ width: 1000px;
+ }
+
+ [data-has-hero] header {
+ padding: 0px 86px;
+ }
+}
+
+@media (min-width: 2400px) {
+ [data-has-hero] .hero img {
+ position: absolute;
+ overflow: hidden;
+ top: 6vh;
+ right: 0vw;
+ width: 1200px;
+ }
+}
\ No newline at end of file
diff --git a/src/assets/vmr.gif b/src/assets/vmr.gif
new file mode 100644
index 0000000..fd836e7
Binary files /dev/null and b/src/assets/vmr.gif differ
diff --git a/src/assets/vmr_capture.png b/src/assets/vmr_capture.png
new file mode 100644
index 0000000..2e0320c
Binary files /dev/null and b/src/assets/vmr_capture.png differ
diff --git a/src/content/docs/index.mdx b/src/content/docs/index.mdx
index a9f68b4..adae0fe 100644
--- a/src/content/docs/index.mdx
+++ b/src/content/docs/index.mdx
@@ -5,7 +5,7 @@ template: splash
hero:
tagline: A General Version Manager for Multiple SDKs.
image:
- file: ../../assets/vmr_word_cloud.png
+ html: ""
actions:
- text: Quick Start
link: /starts/quickstart/
diff --git a/src/content/docs/zh-cn/index.mdx b/src/content/docs/zh-cn/index.mdx
index dc8b892..032b59c 100644
--- a/src/content/docs/zh-cn/index.mdx
+++ b/src/content/docs/zh-cn/index.mdx
@@ -5,7 +5,7 @@ template: splash
hero:
tagline: VMR是一个支持多款SDK的通用版本管理器.
image:
- file: ../../../assets/vmr_word_cloud.png
+ html: ""
actions:
- text: 快速开始
link: /zh-cn/starts/quickstart/