diff --git a/v3/astro.config.ts b/v3/astro.config.ts
index 462563a..2f5778f 100644
--- a/v3/astro.config.ts
+++ b/v3/astro.config.ts
@@ -15,6 +15,8 @@ import astrowind from './vendor/integration';
import { readingTimeRemarkPlugin, responsiveTablesRehypePlugin, lazyImagesRehypePlugin } from './src/utils/frontmatter';
+import react from '@astrojs/react';
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
const hasExternalScripts = false;
@@ -25,6 +27,7 @@ export default defineConfig({
output: 'static',
integrations: [
+ react(),
tailwind({
applyBaseStyles: false,
}),
diff --git a/v3/package-lock.json b/v3/package-lock.json
index c4806b8..47c2bef 100644
--- a/v3/package-lock.json
+++ b/v3/package-lock.json
@@ -8,16 +8,30 @@
"name": "@onwidget/astrowind",
"version": "1.0.0-beta.46",
"dependencies": {
+ "@astrojs/react": "^3.6.2",
"@astrojs/rss": "^4.0.7",
"@astrojs/sitemap": "^3.1.6",
"@astrolib/analytics": "^0.5.0",
"@astrolib/seo": "^1.0.0-beta.6",
"@fontsource-variable/inter": "^5.1.0",
+ "@radix-ui/react-icons": "^1.3.0",
+ "@radix-ui/react-slot": "^1.1.0",
+ "@types/react": "^18.3.11",
+ "@types/react-dom": "^18.3.0",
"astro": "^4.15.5",
"astro-embed": "^0.7.2",
"astro-icon": "^1.1.1",
+ "class-variance-authority": "^0.7.0",
+ "clsx": "^2.1.1",
+ "embla-carousel-react": "^8.3.0",
"limax": "4.1.0",
"lodash.merge": "^4.6.2",
+ "lucide-react": "^0.451.0",
+ "react": "^18.3.1",
+ "react-dom": "^18.3.1",
+ "react-img-placeholder": "^0.1.5",
+ "swiper": "^11.1.14",
+ "tailwindcss-animate": "^1.0.7",
"unpic": "^3.18.0",
"vanilla-cookieconsent": "^3.0.1"
},
@@ -47,7 +61,7 @@
"prettier-plugin-astro": "^0.14.1",
"reading-time": "^1.5.0",
"sharp": "0.33.5",
- "tailwind-merge": "^2.5.2",
+ "tailwind-merge": "^2.5.3",
"tailwindcss": "^3.4.11",
"typescript": "^5.6.2",
"typescript-eslint": "^8.6.0",
@@ -67,7 +81,6 @@
},
"node_modules/@alloc/quick-lru": {
"version": "5.2.0",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=10"
@@ -325,6 +338,25 @@
"node": "^18.17.1 || ^20.3.0 || >=21.0.0"
}
},
+ "node_modules/@astrojs/react": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/@astrojs/react/-/react-3.6.2.tgz",
+ "integrity": "sha512-fK29lYI7zK/KG4ZBy956x4dmauZcZ18osFkuyGa8r3gmmCQa2NZ9XNu9WaVYEUm0j89f4Gii4tbxLoyM8nk2MA==",
+ "license": "MIT",
+ "dependencies": {
+ "@vitejs/plugin-react": "^4.3.1",
+ "ultrahtml": "^1.5.3"
+ },
+ "engines": {
+ "node": "^18.17.1 || ^20.3.0 || >=21.0.0"
+ },
+ "peerDependencies": {
+ "@types/react": "^17.0.50 || ^18.0.21",
+ "@types/react-dom": "^17.0.17 || ^18.0.6",
+ "react": "^17.0.2 || ^18.0.0 || ^19.0.0-beta",
+ "react-dom": "^17.0.2 || ^18.0.0 || ^19.0.0-beta"
+ }
+ },
"node_modules/@astrojs/rss": {
"version": "4.0.7",
"resolved": "https://registry.npmjs.org/@astrojs/rss/-/rss-4.0.7.tgz",
@@ -534,9 +566,10 @@
}
},
"node_modules/@babel/helper-plugin-utils": {
- "version": "7.24.8",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz",
- "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==",
+ "version": "7.25.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.7.tgz",
+ "integrity": "sha512-eaPZai0PiqCi09pPs3pAFfl/zYgGaE6IdXtYvmf0qlcDTd3WCtO7JWCcRd64e0EQrcYgiHibEZnOGsSY4QSgaw==",
+ "license": "MIT",
"engines": {
"node": ">=6.9.0"
}
@@ -649,6 +682,36 @@
"@babel/core": "^7.0.0-0"
}
},
+ "node_modules/@babel/plugin-transform-react-jsx-self": {
+ "version": "7.25.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.25.7.tgz",
+ "integrity": "sha512-JD9MUnLbPL0WdVK8AWC7F7tTG2OS6u/AKKnsK+NdRhUiVdnzyR1S3kKQCaRLOiaULvUiqK6Z4JQE635VgtCFeg==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.25.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-react-jsx-source": {
+ "version": "7.25.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.25.7.tgz",
+ "integrity": "sha512-S/JXG/KrbIY06iyJPKfxr0qRxnhNOdkNXYBl/rmwgDd72cQLH9tEGkDm/yJPGvcSIUoikzfjMios9i+xT/uv9w==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.25.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
"node_modules/@babel/template": {
"version": "7.25.0",
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz",
@@ -1744,7 +1807,6 @@
},
"node_modules/@isaacs/cliui": {
"version": "8.0.2",
- "dev": true,
"license": "ISC",
"dependencies": {
"string-width": "^5.1.2",
@@ -1760,7 +1822,6 @@
},
"node_modules/@isaacs/cliui/node_modules/string-width": {
"version": "5.1.2",
- "dev": true,
"license": "MIT",
"dependencies": {
"eastasianwidth": "^0.2.0",
@@ -1892,7 +1953,6 @@
},
"node_modules/@pkgjs/parseargs": {
"version": "0.11.0",
- "dev": true,
"license": "MIT",
"optional": true,
"engines": {
@@ -1922,6 +1982,48 @@
"fast-glob": "3.3.2"
}
},
+ "node_modules/@radix-ui/react-compose-refs": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz",
+ "integrity": "sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==",
+ "license": "MIT",
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-icons": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-icons/-/react-icons-1.3.0.tgz",
+ "integrity": "sha512-jQxj/0LKgp+j9BiTXz3O3sgs26RNet2iLWmsPyRz2SIcR4q/4SbazXfnYwbAr+vLYKSfc7qxzyGQA1HLlYiuNw==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react": "^16.x || ^17.x || ^18.x"
+ }
+ },
+ "node_modules/@radix-ui/react-slot": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.0.tgz",
+ "integrity": "sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-compose-refs": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
"node_modules/@rollup/pluginutils": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz",
@@ -2379,6 +2481,31 @@
"undici-types": "~5.26.4"
}
},
+ "node_modules/@types/prop-types": {
+ "version": "15.7.13",
+ "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.13.tgz",
+ "integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==",
+ "license": "MIT"
+ },
+ "node_modules/@types/react": {
+ "version": "18.3.11",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.11.tgz",
+ "integrity": "sha512-r6QZ069rFTjrEYgFdOck1gK7FLVsgJE7tTz0pQBczlBNUhBNk0MQH4UbnFSwjpQLMkLzgqvBBa+qGpLje16eTQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/prop-types": "*",
+ "csstype": "^3.0.2"
+ }
+ },
+ "node_modules/@types/react-dom": {
+ "version": "18.3.0",
+ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz",
+ "integrity": "sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/react": "*"
+ }
+ },
"node_modules/@types/sax": {
"version": "1.2.7",
"resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.7.tgz",
@@ -2603,6 +2730,25 @@
"version": "1.2.0",
"license": "ISC"
},
+ "node_modules/@vitejs/plugin-react": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.2.tgz",
+ "integrity": "sha512-hieu+o05v4glEBucTcKMK3dlES0OeJlD9YVOAPraVMOInBCwzumaIFiUjr4bHK7NPgnAHgiskUoceKercrN8vg==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/core": "^7.25.2",
+ "@babel/plugin-transform-react-jsx-self": "^7.24.7",
+ "@babel/plugin-transform-react-jsx-source": "^7.24.7",
+ "@types/babel__core": "^7.20.5",
+ "react-refresh": "^0.14.2"
+ },
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "vite": "^4.2.0 || ^5.0.0"
+ }
+ },
"node_modules/@volar/kit": {
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/@volar/kit/-/kit-2.4.1.tgz",
@@ -2797,12 +2943,10 @@
},
"node_modules/any-promise": {
"version": "1.3.0",
- "dev": true,
"license": "MIT"
},
"node_modules/anymatch": {
"version": "3.1.3",
- "dev": true,
"license": "ISC",
"dependencies": {
"normalize-path": "^3.0.0",
@@ -3688,7 +3832,6 @@
},
"node_modules/balanced-match": {
"version": "1.0.2",
- "dev": true,
"license": "MIT"
},
"node_modules/base-64": {
@@ -3697,7 +3840,6 @@
},
"node_modules/binary-extensions": {
"version": "2.3.0",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
@@ -3757,7 +3899,6 @@
},
"node_modules/brace-expansion": {
"version": "2.0.1",
- "dev": true,
"license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0"
@@ -3852,7 +3993,6 @@
},
"node_modules/camelcase-css": {
"version": "2.0.1",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">= 6"
@@ -3991,7 +4131,6 @@
},
"node_modules/chokidar": {
"version": "3.6.0",
- "dev": true,
"license": "MIT",
"dependencies": {
"anymatch": "~3.1.2",
@@ -4033,6 +4172,27 @@
"node": ">=8"
}
},
+ "node_modules/class-variance-authority": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.0.tgz",
+ "integrity": "sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "clsx": "2.0.0"
+ },
+ "funding": {
+ "url": "https://joebell.co.uk"
+ }
+ },
+ "node_modules/class-variance-authority/node_modules/clsx": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz",
+ "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/clean-css": {
"version": "5.3.3",
"dev": true,
@@ -4196,6 +4356,7 @@
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
"integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
+ "license": "MIT",
"engines": {
"node": ">=6"
}
@@ -4313,7 +4474,6 @@
},
"node_modules/cross-spawn": {
"version": "7.0.3",
- "dev": true,
"license": "MIT",
"dependencies": {
"path-key": "^3.1.0",
@@ -4391,6 +4551,12 @@
"resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz",
"integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw=="
},
+ "node_modules/csstype": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
+ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
+ "license": "MIT"
+ },
"node_modules/debug": {
"version": "4.3.7",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
@@ -4487,7 +4653,6 @@
},
"node_modules/didyoumean": {
"version": "1.2.2",
- "dev": true,
"license": "Apache-2.0"
},
"node_modules/diff": {
@@ -4585,6 +4750,34 @@
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.832.tgz",
"integrity": "sha512-cTen3SB0H2SGU7x467NRe1eVcQgcuS6jckKfWJHia2eo0cHIGOqHoAxevIYZD4eRHcWjkvFzo93bi3vJ9W+1lA=="
},
+ "node_modules/embla-carousel": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/embla-carousel/-/embla-carousel-8.3.0.tgz",
+ "integrity": "sha512-Ve8dhI4w28qBqR8J+aMtv7rLK89r1ZA5HocwFz6uMB/i5EiC7bGI7y+AM80yAVUJw3qqaZYK7clmZMUR8kM3UA==",
+ "license": "MIT"
+ },
+ "node_modules/embla-carousel-react": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/embla-carousel-react/-/embla-carousel-react-8.3.0.tgz",
+ "integrity": "sha512-P1FlinFDcIvggcErRjNuVqnUR8anyo8vLMIH8Rthgofw7Nj8qTguCa2QjFAbzxAUTQTPNNjNL7yt0BGGinVdFw==",
+ "license": "MIT",
+ "dependencies": {
+ "embla-carousel": "8.3.0",
+ "embla-carousel-reactive-utils": "8.3.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.1 || ^18.0.0"
+ }
+ },
+ "node_modules/embla-carousel-reactive-utils": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/embla-carousel-reactive-utils/-/embla-carousel-reactive-utils-8.3.0.tgz",
+ "integrity": "sha512-EYdhhJ302SC4Lmkx8GRsp0sjUhEN4WyFXPOk0kGu9OXZSRMmcBlRgTvHcq8eKJE1bXWBsOi1T83B+BSSVZSmwQ==",
+ "license": "MIT",
+ "peerDependencies": {
+ "embla-carousel": "8.3.0"
+ }
+ },
"node_modules/emmet": {
"version": "2.4.7",
"resolved": "https://registry.npmjs.org/emmet/-/emmet-2.4.7.tgz",
@@ -5336,7 +5529,6 @@
},
"node_modules/foreground-child": {
"version": "3.1.1",
- "dev": true,
"license": "ISC",
"dependencies": {
"cross-spawn": "^7.0.0",
@@ -5414,7 +5606,6 @@
},
"node_modules/function-bind": {
"version": "1.1.2",
- "dev": true,
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -5454,7 +5645,6 @@
},
"node_modules/glob": {
"version": "10.3.12",
- "dev": true,
"license": "ISC",
"dependencies": {
"foreground-child": "^3.1.0",
@@ -5485,7 +5675,6 @@
},
"node_modules/glob/node_modules/minipass": {
"version": "7.0.4",
- "dev": true,
"license": "ISC",
"engines": {
"node": ">=16 || 14 >=14.17"
@@ -5573,7 +5762,6 @@
},
"node_modules/hasown": {
"version": "2.0.2",
- "dev": true,
"license": "MIT",
"dependencies": {
"function-bind": "^1.1.2"
@@ -5965,7 +6153,6 @@
},
"node_modules/is-binary-path": {
"version": "2.1.0",
- "dev": true,
"license": "MIT",
"dependencies": {
"binary-extensions": "^2.0.0"
@@ -5976,7 +6163,6 @@
},
"node_modules/is-core-module": {
"version": "2.13.1",
- "dev": true,
"license": "MIT",
"dependencies": {
"hasown": "^2.0.0"
@@ -6134,12 +6320,10 @@
},
"node_modules/isexe": {
"version": "2.0.0",
- "dev": true,
"license": "ISC"
},
"node_modules/jackspeak": {
"version": "2.3.6",
- "dev": true,
"license": "BlueOak-1.0.0",
"dependencies": {
"@isaacs/cliui": "^8.0.2"
@@ -6156,7 +6340,6 @@
},
"node_modules/jiti": {
"version": "1.21.0",
- "dev": true,
"license": "MIT",
"bin": {
"jiti": "bin/jiti.js"
@@ -6471,7 +6654,6 @@
},
"node_modules/lilconfig": {
"version": "3.1.1",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=14"
@@ -6495,7 +6677,6 @@
},
"node_modules/lines-and-columns": {
"version": "1.2.4",
- "dev": true,
"license": "MIT"
},
"node_modules/linkedom": {
@@ -6655,6 +6836,18 @@
"url": "https://github.com/sponsors/wooorm"
}
},
+ "node_modules/loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "license": "MIT",
+ "dependencies": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ },
+ "bin": {
+ "loose-envify": "cli.js"
+ }
+ },
"node_modules/lower-case": {
"version": "2.0.2",
"dev": true,
@@ -6671,6 +6864,15 @@
"yallist": "^3.0.2"
}
},
+ "node_modules/lucide-react": {
+ "version": "0.451.0",
+ "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.451.0.tgz",
+ "integrity": "sha512-OwQ3uljZLp2cerj8sboy5rnhtGTCl9UCJIhT1J85/yOuGVlEH+xaUPR7tvNdddPvmV5M5VLdr7cQuWE3hzA4jw==",
+ "license": "ISC",
+ "peerDependencies": {
+ "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc"
+ }
+ },
"node_modules/magic-string": {
"version": "0.30.11",
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz",
@@ -7700,7 +7902,6 @@
},
"node_modules/minimatch": {
"version": "9.0.4",
- "dev": true,
"license": "ISC",
"dependencies": {
"brace-expansion": "^2.0.1"
@@ -7792,7 +7993,6 @@
},
"node_modules/mz": {
"version": "2.7.0",
- "dev": true,
"license": "MIT",
"dependencies": {
"any-promise": "^1.0.0",
@@ -7856,7 +8056,6 @@
},
"node_modules/normalize-path": {
"version": "3.0.0",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
@@ -7882,7 +8081,6 @@
},
"node_modules/object-assign": {
"version": "4.1.1",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
@@ -7890,7 +8088,6 @@
},
"node_modules/object-hash": {
"version": "3.0.0",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">= 6"
@@ -8187,7 +8384,6 @@
},
"node_modules/path-key": {
"version": "3.1.1",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
@@ -8195,12 +8391,10 @@
},
"node_modules/path-parse": {
"version": "1.0.7",
- "dev": true,
"license": "MIT"
},
"node_modules/path-scurry": {
"version": "1.10.2",
- "dev": true,
"license": "BlueOak-1.0.0",
"dependencies": {
"lru-cache": "^10.2.0",
@@ -8215,7 +8409,6 @@
},
"node_modules/path-scurry/node_modules/lru-cache": {
"version": "10.2.0",
- "dev": true,
"license": "ISC",
"engines": {
"node": "14 || >=16.14"
@@ -8223,7 +8416,6 @@
},
"node_modules/path-scurry/node_modules/minipass": {
"version": "7.0.4",
- "dev": true,
"license": "ISC",
"engines": {
"node": ">=16 || 14 >=14.17"
@@ -8275,7 +8467,6 @@
},
"node_modules/pify": {
"version": "2.3.0",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
@@ -8287,7 +8478,6 @@
},
"node_modules/pirates": {
"version": "4.0.6",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">= 6"
@@ -8392,7 +8582,6 @@
},
"node_modules/postcss-import": {
"version": "15.1.0",
- "dev": true,
"license": "MIT",
"dependencies": {
"postcss-value-parser": "^4.0.0",
@@ -8408,7 +8597,6 @@
},
"node_modules/postcss-js": {
"version": "4.0.1",
- "dev": true,
"license": "MIT",
"dependencies": {
"camelcase-css": "^2.0.1"
@@ -8426,7 +8614,6 @@
},
"node_modules/postcss-load-config": {
"version": "4.0.2",
- "dev": true,
"funding": [
{
"type": "opencollective",
@@ -8460,7 +8647,6 @@
},
"node_modules/postcss-nested": {
"version": "6.0.1",
- "dev": true,
"license": "MIT",
"dependencies": {
"postcss-selector-parser": "^6.0.11"
@@ -8478,7 +8664,6 @@
},
"node_modules/postcss-nested/node_modules/postcss-selector-parser": {
"version": "6.0.16",
- "dev": true,
"license": "MIT",
"dependencies": {
"cssesc": "^3.0.0",
@@ -8502,7 +8687,6 @@
},
"node_modules/postcss-value-parser": {
"version": "4.2.0",
- "dev": true,
"license": "MIT"
},
"node_modules/preferred-pm": {
@@ -8630,9 +8814,54 @@
],
"license": "MIT"
},
+ "node_modules/react": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
+ "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
+ "license": "MIT",
+ "dependencies": {
+ "loose-envify": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/react-dom": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
+ "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==",
+ "license": "MIT",
+ "dependencies": {
+ "loose-envify": "^1.1.0",
+ "scheduler": "^0.23.2"
+ },
+ "peerDependencies": {
+ "react": "^18.3.1"
+ }
+ },
+ "node_modules/react-img-placeholder": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/react-img-placeholder/-/react-img-placeholder-0.1.5.tgz",
+ "integrity": "sha512-peXMI1ScTAw09Xm1ck42NeaZbQP97M0NqSoTBlVFKgdNh1x85y0ps0sjEb2RsOwUYzG0FL7x1+/6HOUx9JexiQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "react": ">=16"
+ }
+ },
+ "node_modules/react-refresh": {
+ "version": "0.14.2",
+ "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz",
+ "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/read-cache": {
"version": "1.0.0",
- "dev": true,
"license": "MIT",
"dependencies": {
"pify": "^2.3.0"
@@ -8640,7 +8869,6 @@
},
"node_modules/readdirp": {
"version": "3.6.0",
- "dev": true,
"license": "MIT",
"dependencies": {
"picomatch": "^2.2.1"
@@ -8832,7 +9060,6 @@
},
"node_modules/resolve": {
"version": "1.22.8",
- "dev": true,
"license": "MIT",
"dependencies": {
"is-core-module": "^2.13.0",
@@ -9013,6 +9240,15 @@
"resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz",
"integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg=="
},
+ "node_modules/scheduler": {
+ "version": "0.23.2",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz",
+ "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==",
+ "license": "MIT",
+ "dependencies": {
+ "loose-envify": "^1.1.0"
+ }
+ },
"node_modules/section-matter": {
"version": "1.0.0",
"license": "MIT",
@@ -9084,7 +9320,6 @@
},
"node_modules/shebang-command": {
"version": "2.0.0",
- "dev": true,
"license": "MIT",
"dependencies": {
"shebang-regex": "^3.0.0"
@@ -9095,7 +9330,6 @@
},
"node_modules/shebang-regex": {
"version": "3.0.0",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
@@ -9256,7 +9490,6 @@
"node_modules/string-width-cjs": {
"name": "string-width",
"version": "4.2.3",
- "dev": true,
"license": "MIT",
"dependencies": {
"emoji-regex": "^8.0.0",
@@ -9269,7 +9502,6 @@
},
"node_modules/string-width-cjs/node_modules/ansi-regex": {
"version": "5.0.1",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
@@ -9277,12 +9509,10 @@
},
"node_modules/string-width-cjs/node_modules/emoji-regex": {
"version": "8.0.0",
- "dev": true,
"license": "MIT"
},
"node_modules/string-width-cjs/node_modules/strip-ansi": {
"version": "6.0.1",
- "dev": true,
"license": "MIT",
"dependencies": {
"ansi-regex": "^5.0.1"
@@ -9324,7 +9554,6 @@
"node_modules/strip-ansi-cjs": {
"name": "strip-ansi",
"version": "6.0.1",
- "dev": true,
"license": "MIT",
"dependencies": {
"ansi-regex": "^5.0.1"
@@ -9335,7 +9564,6 @@
},
"node_modules/strip-ansi-cjs/node_modules/ansi-regex": {
"version": "5.0.1",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
@@ -9383,7 +9611,6 @@
},
"node_modules/sucrase": {
"version": "3.35.0",
- "dev": true,
"license": "MIT",
"dependencies": {
"@jridgewell/gen-mapping": "^0.3.2",
@@ -9404,7 +9631,6 @@
},
"node_modules/sucrase/node_modules/commander": {
"version": "4.1.1",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">= 6"
@@ -9431,7 +9657,6 @@
},
"node_modules/supports-preserve-symlinks-flag": {
"version": "1.0.0",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
@@ -9481,6 +9706,25 @@
"resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz",
"integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA=="
},
+ "node_modules/swiper": {
+ "version": "11.1.14",
+ "resolved": "https://registry.npmjs.org/swiper/-/swiper-11.1.14.tgz",
+ "integrity": "sha512-VbQLQXC04io6AoAjIUWuZwW4MSYozkcP9KjLdrsG/00Q/yiwvhz9RQyt0nHXV10hi9NVnDNy1/wv7Dzq1lkOCQ==",
+ "funding": [
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/swiperjs"
+ },
+ {
+ "type": "open_collective",
+ "url": "http://opencollective.com/swiper"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4.7.0"
+ }
+ },
"node_modules/synckit": {
"version": "0.9.0",
"resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.0.tgz",
@@ -9498,10 +9742,11 @@
}
},
"node_modules/tailwind-merge": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.5.2.tgz",
- "integrity": "sha512-kjEBm+pvD+6eAwzJL2Bi+02/9LFLal1Gs61+QB7HvTfQQ0aXwC5LGT8PEt1gS0CWKktKe6ysPTAy3cBC5MeiIg==",
+ "version": "2.5.3",
+ "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.5.3.tgz",
+ "integrity": "sha512-d9ZolCAIzom1nf/5p4LdD5zvjmgSxY0BGgdSvmXIoMYAiPdAW/dSpP7joCDYFY7r/HkEa2qmPtkgsu0xjQeQtw==",
"dev": true,
+ "license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/dcastil"
@@ -9511,7 +9756,6 @@
"version": "3.4.11",
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.11.tgz",
"integrity": "sha512-qhEuBcLemjSJk5ajccN9xJFtM/h0AVCPaA6C92jNP+M2J8kX+eMJHI7R2HFKUvvAsMpcfLILMCFYSeDwpMmlUg==",
- "dev": true,
"license": "MIT",
"dependencies": {
"@alloc/quick-lru": "^5.2.0",
@@ -9545,9 +9789,17 @@
"node": ">=14.0.0"
}
},
+ "node_modules/tailwindcss-animate": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz",
+ "integrity": "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==",
+ "license": "MIT",
+ "peerDependencies": {
+ "tailwindcss": ">=3.0.0 || insiders"
+ }
+ },
"node_modules/tailwindcss/node_modules/glob-parent": {
"version": "6.0.2",
- "dev": true,
"license": "ISC",
"dependencies": {
"is-glob": "^4.0.3"
@@ -9558,7 +9810,6 @@
},
"node_modules/tailwindcss/node_modules/lilconfig": {
"version": "2.1.0",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=10"
@@ -9566,7 +9817,6 @@
},
"node_modules/tailwindcss/node_modules/postcss-selector-parser": {
"version": "6.0.16",
- "dev": true,
"license": "MIT",
"dependencies": {
"cssesc": "^3.0.0",
@@ -9635,7 +9885,6 @@
},
"node_modules/thenify": {
"version": "3.3.1",
- "dev": true,
"license": "MIT",
"dependencies": {
"any-promise": "^1.0.0"
@@ -9643,7 +9892,6 @@
},
"node_modules/thenify-all": {
"version": "1.6.0",
- "dev": true,
"license": "MIT",
"dependencies": {
"thenify": ">= 3.1.0 < 4"
@@ -9704,7 +9952,6 @@
},
"node_modules/ts-interface-checker": {
"version": "0.1.13",
- "dev": true,
"license": "Apache-2.0"
},
"node_modules/tsconfck": {
@@ -9815,6 +10062,12 @@
"resolved": "https://registry.npmjs.org/uhyphen/-/uhyphen-0.2.0.tgz",
"integrity": "sha512-qz3o9CHXmJJPGBdqzab7qAYuW8kQGKNEuoHFYrBwV6hWIMcpAmxDLXojcHfFr9US1Pe6zUswEIJIbLI610fuqA=="
},
+ "node_modules/ultrahtml": {
+ "version": "1.5.3",
+ "resolved": "https://registry.npmjs.org/ultrahtml/-/ultrahtml-1.5.3.tgz",
+ "integrity": "sha512-GykOvZwgDWZlTQMtp5jrD4BVL+gNn2NVlVafjcFUJ7taY20tqYdwdoWBFy6GBJsNTZe1GkGPkSl5knQAjtgceg==",
+ "license": "MIT"
+ },
"node_modules/undici": {
"version": "6.19.8",
"resolved": "https://registry.npmjs.org/undici/-/undici-6.19.8.tgz",
@@ -10029,7 +10282,6 @@
},
"node_modules/util-deprecate": {
"version": "1.0.2",
- "dev": true,
"license": "MIT"
},
"node_modules/vanilla-cookieconsent": {
@@ -10418,7 +10670,6 @@
},
"node_modules/which": {
"version": "2.0.2",
- "dev": true,
"license": "ISC",
"dependencies": {
"isexe": "^2.0.0"
@@ -10494,7 +10745,6 @@
"node_modules/wrap-ansi-cjs": {
"name": "wrap-ansi",
"version": "7.0.0",
- "dev": true,
"license": "MIT",
"dependencies": {
"ansi-styles": "^4.0.0",
@@ -10510,7 +10760,6 @@
},
"node_modules/wrap-ansi-cjs/node_modules/ansi-regex": {
"version": "5.0.1",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
@@ -10518,7 +10767,6 @@
},
"node_modules/wrap-ansi-cjs/node_modules/ansi-styles": {
"version": "4.3.0",
- "dev": true,
"license": "MIT",
"dependencies": {
"color-convert": "^2.0.1"
@@ -10532,7 +10780,6 @@
},
"node_modules/wrap-ansi-cjs/node_modules/color-convert": {
"version": "2.0.1",
- "dev": true,
"license": "MIT",
"dependencies": {
"color-name": "~1.1.4"
@@ -10543,17 +10790,14 @@
},
"node_modules/wrap-ansi-cjs/node_modules/color-name": {
"version": "1.1.4",
- "dev": true,
"license": "MIT"
},
"node_modules/wrap-ansi-cjs/node_modules/emoji-regex": {
"version": "8.0.0",
- "dev": true,
"license": "MIT"
},
"node_modules/wrap-ansi-cjs/node_modules/string-width": {
"version": "4.2.3",
- "dev": true,
"license": "MIT",
"dependencies": {
"emoji-regex": "^8.0.0",
@@ -10566,7 +10810,6 @@
},
"node_modules/wrap-ansi-cjs/node_modules/strip-ansi": {
"version": "6.0.1",
- "dev": true,
"license": "MIT",
"dependencies": {
"ansi-regex": "^5.0.1"
@@ -10627,7 +10870,6 @@
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.0.tgz",
"integrity": "sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==",
- "dev": true,
"bin": {
"yaml": "bin.mjs"
},
diff --git a/v3/package.json b/v3/package.json
index ec436f5..2373d80 100644
--- a/v3/package.json
+++ b/v3/package.json
@@ -22,16 +22,29 @@
"fix:prettier": "prettier -w ."
},
"dependencies": {
+ "@astrojs/react": "^3.6.2",
"@astrojs/rss": "^4.0.7",
"@astrojs/sitemap": "^3.1.6",
"@astrolib/analytics": "^0.5.0",
"@astrolib/seo": "^1.0.0-beta.6",
"@fontsource-variable/inter": "^5.1.0",
+ "@radix-ui/react-icons": "^1.3.0",
+ "@radix-ui/react-slot": "^1.1.0",
+ "@types/react": "^18.3.11",
+ "@types/react-dom": "^18.3.0",
"astro": "^4.15.5",
"astro-embed": "^0.7.2",
"astro-icon": "^1.1.1",
+ "class-variance-authority": "^0.7.0",
+ "clsx": "^2.1.1",
+ "embla-carousel-react": "^8.3.0",
"limax": "4.1.0",
"lodash.merge": "^4.6.2",
+ "lucide-react": "^0.451.0",
+ "react": "^18.3.1",
+ "react-dom": "^18.3.1",
+ "swiper": "^11.1.14",
+ "tailwindcss-animate": "^1.0.7",
"unpic": "^3.18.0",
"vanilla-cookieconsent": "^3.0.1"
},
@@ -61,7 +74,7 @@
"prettier-plugin-astro": "^0.14.1",
"reading-time": "^1.5.0",
"sharp": "0.33.5",
- "tailwind-merge": "^2.5.2",
+ "tailwind-merge": "^2.5.3",
"tailwindcss": "^3.4.11",
"typescript": "^5.6.2",
"typescript-eslint": "^8.6.0",
diff --git a/v3/src/assets/images/console.png b/v3/public/console.png
similarity index 100%
rename from v3/src/assets/images/console.png
rename to v3/public/console.png
diff --git a/v3/public/custom.png b/v3/public/custom.png
new file mode 100644
index 0000000..dcbfe56
Binary files /dev/null and b/v3/public/custom.png differ
diff --git a/v3/public/main.png b/v3/public/main.png
new file mode 100644
index 0000000..c7c4ee2
Binary files /dev/null and b/v3/public/main.png differ
diff --git a/v3/public/remote.jpg b/v3/public/remote.jpg
new file mode 100644
index 0000000..ac63dc5
Binary files /dev/null and b/v3/public/remote.jpg differ
diff --git a/v3/src/assets/images/app-store.png b/v3/src/assets/images/app-store.png
deleted file mode 100644
index 8d634c0..0000000
Binary files a/v3/src/assets/images/app-store.png and /dev/null differ
diff --git a/v3/src/assets/images/google-play.png b/v3/src/assets/images/google-play.png
deleted file mode 100644
index 179f1ff..0000000
Binary files a/v3/src/assets/images/google-play.png and /dev/null differ
diff --git a/v3/src/components/widgets/Carousel.jsx b/v3/src/components/widgets/Carousel.jsx
new file mode 100644
index 0000000..300015f
--- /dev/null
+++ b/v3/src/components/widgets/Carousel.jsx
@@ -0,0 +1,39 @@
+/* https://swiperjs.com/demos */
+
+import 'swiper/css';
+import 'swiper/css/pagination';
+import { Autoplay, Pagination, Scrollbar, Mousewheel } from 'swiper/modules';
+import { Swiper, SwiperSlide } from 'swiper/react';
+
+const Carousel = ({ list }) => {
+ return (
+ console.log('slide change')}
+ onSwiper={(swiper) => console.log(swiper)}
+ pagination={{ clickable: true }}
+ style={{
+ '--swiper-pagination-bullet-inactive-color': '#fff',
+ '--swiper-pagination-bullet-size': '12px',
+ }}
+ mousewheel={{ forceToAxis: true, sensitivity: 0.1, releaseOnEdges: true }}
+ autoplay={{
+ delay: 2500,
+ disableOnInteraction: true,
+ }}
+ lazy={true}
+ scrollbar
+ modules={[Pagination, Autoplay, Scrollbar, Mousewheel]}
+ >
+ {list.map((item, i) => (
+
+
+
+
+ ))}
+
+ );
+};
+
+export default Carousel;
diff --git a/v3/src/components/widgets/Header.astro b/v3/src/components/widgets/Header.astro
index 1bd51f6..f0b7bcf 100644
--- a/v3/src/components/widgets/Header.astro
+++ b/v3/src/components/widgets/Header.astro
@@ -157,7 +157,7 @@ const currentPath = `/${trimSlash(new URL(Astro.url).pathname)}`;
title="If you like RustDesk, give us a star."
href="https://github.com/rustdesk/rustdesk"
>
-
+
)
}
diff --git a/v3/src/layouts/PageLayout.astro b/v3/src/layouts/PageLayout.astro
index aad475f..1c5ef02 100644
--- a/v3/src/layouts/PageLayout.astro
+++ b/v3/src/layouts/PageLayout.astro
@@ -1,7 +1,7 @@
---
import Layout from '~/layouts/Layout.astro';
import Header from '~/components/widgets/Header.astro';
-import Footer from '~/components/widgets/Footer.astro';
+import Footer, {type Props as FD} from '~/components/widgets/Footer.astro';
import Announcement from '~/components/widgets/Announcement.astro';
import { headerData, footerData } from '~/navigation';
@@ -26,6 +26,6 @@ const { metadata } = Astro.props;
-
+
diff --git a/v3/src/pages/index.astro b/v3/src/pages/index.astro
index 8de1828..d222f24 100644
--- a/v3/src/pages/index.astro
+++ b/v3/src/pages/index.astro
@@ -7,6 +7,7 @@ import Content from '~/components/widgets/Content.astro';
import BlogLatestPosts from '~/components/widgets/BlogLatestPosts.astro';
import Stats from '~/components/widgets/Stats.astro';
import CallToAction from '~/components/widgets/CallToAction.astro';
+import Carousel from '~/components/widgets/Carousel.jsx';
const metadata = {
title: 'RustDesk: Open-Source Remote Desktop with Self-Hosted Server Solutions',
@@ -16,7 +17,6 @@ const metadata = {
-
-
- The Fast Open-Source Remote Access and Support Software
-
+ The Fast Open-Source Remote Access and Support Software
- Switch from TeamViewer, AnyDesk, and Splashtop to RustDesk for a secure and reliable remote desktop experience with your own self-hosted servers.
+ Switch from TeamViewer, AnyDesk, and Splashtop to RustDesk for a secure and reliable remote desktop experience
+ with your own self-hosted servers.
+
+
+
+
@@ -52,23 +62,19 @@ const metadata = {
items={[
{
title: 'Data sovereignty',
- description:
- 'Regulatory compliance made easy: self-hosted RustDesk ensures data sovereignty.',
+ description: 'Regulatory compliance made easy: self-hosted RustDesk ensures data sovereignty.',
},
{
title: 'Enhanced security',
- description:
- 'Fortify your security: on-premise deployment keeps your data under your control.',
+ description: 'Fortify your security: on-premise deployment keeps your data under your control.',
},
{
title: 'Performance and reliability',
- description:
- 'Guaranteed uptime: on-premise deployment ensures optimal performance and minimal downtime.',
+ description: 'Guaranteed uptime: on-premise deployment ensures optimal performance and minimal downtime.',
},
{
title: 'Flexibility and customization',
- description:
- 'Tailor RustDesk on-premise to fit your unique requirements.',
+ description: 'Tailor RustDesk on-premise to fit your unique requirements.',
},
]}
image={{
@@ -78,7 +84,8 @@ const metadata = {
>
Why self-hosting?
- Are you frustrated with SaaS platforms due to their unstable performance, lack of transparency, and uncertain data security risks?
+ Are you frustrated with SaaS platforms due to their unstable performance, lack of transparency, and uncertain data
+ security risks?
@@ -119,7 +126,7 @@ const metadata = {
}}
>
- Custom client
+ Custom Client
Customize your client with your brand and make it truly yours.
@@ -136,18 +143,18 @@ const metadata = {
items={[
{
title: 'Step 1: Install Docker',
- description:
- "sudo apt install -y docker.io",
+ description: 'sudo apt install -y docker.io',
icon: 'tabler:package',
},
{
title: 'Step 2: Download compose.yml',
- description: 'wget rustdesk.com/oss.yml -O compose.yml
or
wget rustdesk.com/pro.yml -O compose.yml',
+ description:
+ 'wget rustdesk.com/oss.yml -O compose.yml
or
wget rustdesk.com/pro.yml -O compose.yml',
icon: 'tabler:download',
},
{
title: `Step 3: Compose`,
- description: "docker compose up -d",
+ description: 'docker compose up -d',
icon: 'tabler:hammer',
},
{
@@ -163,27 +170,25 @@ const metadata = {
-
-
+
+
-
- Join the community
-
+ Join the community
-
- Discover what our community has to say about their RustDesk experience.
-
+ Discover what our community has to say about their RustDesk experience.
-
- Experience RustDesk for yourself
-
+ Experience RustDesk for yourself
diff --git a/v3/tsconfig.json b/v3/tsconfig.json
index 52c9113..462f175 100644
--- a/v3/tsconfig.json
+++ b/v3/tsconfig.json
@@ -5,8 +5,17 @@
"allowJs": true,
"baseUrl": ".",
"paths": {
- "~/*": ["src/*"]
- }
+ "~/*": [
+ "src/*"
+ ],
+ "@/*": [
+ "./src/*"
+ ]
+ },
+ "jsx": "react-jsx",
+ "jsxImportSource": "react"
},
- "exclude": ["dist/"]
-}
+ "exclude": [
+ "dist/"
+ ]
+}
\ No newline at end of file