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/