mirror of
https://github.com/Dokploy/website
synced 2025-06-26 18:16:01 +00:00
feat: integrate Stripe for self-hosted license purchasing and update pricing component
This commit is contained in:
File diff suppressed because one or more lines are too long
@@ -36,7 +36,7 @@ const NumberInput = React.forwardRef<HTMLInputElement, InputProps>(
|
|||||||
return (
|
return (
|
||||||
<Input
|
<Input
|
||||||
type="text"
|
type="text"
|
||||||
className={cn("text-left", className)}
|
className={cn("text-center", className)}
|
||||||
ref={ref}
|
ref={ref}
|
||||||
{...props}
|
{...props}
|
||||||
value={props.value === undefined ? undefined : String(props.value)}
|
value={props.value === undefined ? undefined : String(props.value)}
|
||||||
@@ -45,7 +45,9 @@ const NumberInput = React.forwardRef<HTMLInputElement, InputProps>(
|
|||||||
if (value === "") {
|
if (value === "") {
|
||||||
props.onChange?.(e);
|
props.onChange?.(e);
|
||||||
} else {
|
} else {
|
||||||
const number = Number.parseInt(value, 10);
|
// Remove currency symbol and convert to number
|
||||||
|
const numericValue = value.replace(/[^0-9.]/g, "");
|
||||||
|
const number = Number.parseFloat(numericValue);
|
||||||
if (!Number.isNaN(number)) {
|
if (!Number.isNaN(number)) {
|
||||||
const syntheticEvent = {
|
const syntheticEvent = {
|
||||||
...e,
|
...e,
|
||||||
|
|||||||
@@ -181,6 +181,7 @@
|
|||||||
"selfHosted": {
|
"selfHosted": {
|
||||||
"title": "Self-Hosted License",
|
"title": "Self-Hosted License",
|
||||||
"description": "Deploy and manage Dokploy on your own infrastructure with enterprise-grade features and support",
|
"description": "Deploy and manage Dokploy on your own infrastructure with enterprise-grade features and support",
|
||||||
|
"servers": "{serverQuantity} Servers",
|
||||||
"basic": {
|
"basic": {
|
||||||
"title": "Basic License",
|
"title": "Basic License",
|
||||||
"description": "Perfect for small teams and startups",
|
"description": "Perfect for small teams and startups",
|
||||||
|
|||||||
@@ -176,6 +176,20 @@
|
|||||||
"f7": "Nouvelles mises à jour"
|
"f7": "Nouvelles mises à jour"
|
||||||
},
|
},
|
||||||
"go": "S'abonner"
|
"go": "S'abonner"
|
||||||
|
},
|
||||||
|
"selfHosted": {
|
||||||
|
"title": "Licence Auto-hébergée",
|
||||||
|
"description": "Déployez et gérez Dokploy sur votre propre infrastructure avec des fonctionnalités et un support de niveau entreprise",
|
||||||
|
"servers": "{serverQuantity} Serveurs",
|
||||||
|
"features": {
|
||||||
|
"f1": "Complete Flexibility: Install Dokploy UI on your own infrastructure",
|
||||||
|
"f2": "Infrastructure Auto-Hébergée",
|
||||||
|
"f3": "Support de la communauté",
|
||||||
|
"f4": "Accès à toutes les fonctionnalités",
|
||||||
|
"f5": "Accès à toutes les mises à jour",
|
||||||
|
"f9": "Serveurs Illimitées"
|
||||||
|
},
|
||||||
|
"go": "Installation"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"faq": {
|
"faq": {
|
||||||
|
|||||||
@@ -122,6 +122,11 @@
|
|||||||
},
|
},
|
||||||
"footer": {
|
"footer": {
|
||||||
"copyright": "版权属于 © {year} Dokploy, 保留所有权利"
|
"copyright": "版权属于 © {year} Dokploy, 保留所有权利"
|
||||||
|
},
|
||||||
|
"selfHosted": {
|
||||||
|
"title": "自托管许可证",
|
||||||
|
"description": "在您自己的基础设施上部署和管理 Dokploy,享受企业级功能和支持",
|
||||||
|
"servers": "{serverQuantity} 台服务器"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"404": {
|
"404": {
|
||||||
|
|||||||
@@ -12,9 +12,9 @@
|
|||||||
},
|
},
|
||||||
"browserslist": "defaults, not ie <= 11",
|
"browserslist": "defaults, not ie <= 11",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"hast-util-to-jsx-runtime": "2.3.5",
|
|
||||||
"@headlessui/react": "^2.2.0",
|
"@headlessui/react": "^2.2.0",
|
||||||
"@headlessui/tailwindcss": "^0.2.0",
|
"@headlessui/tailwindcss": "^0.2.0",
|
||||||
|
"@prettier/plugin-xml": "^3.4.1",
|
||||||
"@radix-ui/react-accordion": "^1.2.1",
|
"@radix-ui/react-accordion": "^1.2.1",
|
||||||
"@radix-ui/react-avatar": "^1.1.1",
|
"@radix-ui/react-avatar": "^1.1.1",
|
||||||
"@radix-ui/react-scroll-area": "^1.2.0",
|
"@radix-ui/react-scroll-area": "^1.2.0",
|
||||||
@@ -23,6 +23,7 @@
|
|||||||
"@radix-ui/react-switch": "^1.0.3",
|
"@radix-ui/react-switch": "^1.0.3",
|
||||||
"@radix-ui/react-tabs": "1.1.1",
|
"@radix-ui/react-tabs": "1.1.1",
|
||||||
"@radix-ui/react-tooltip": "^1.1.3",
|
"@radix-ui/react-tooltip": "^1.1.3",
|
||||||
|
"@stripe/stripe-js": "^6.1.0",
|
||||||
"@tabler/icons-react": "3.21.0",
|
"@tabler/icons-react": "3.21.0",
|
||||||
"@tryghost/content-api": "^1.11.21",
|
"@tryghost/content-api": "^1.11.21",
|
||||||
"@types/node": "20.4.6",
|
"@types/node": "20.4.6",
|
||||||
@@ -32,9 +33,11 @@
|
|||||||
"class-variance-authority": "^0.7.0",
|
"class-variance-authority": "^0.7.0",
|
||||||
"clsx": "^2.1.0",
|
"clsx": "^2.1.0",
|
||||||
"framer-motion": "^11.3.19",
|
"framer-motion": "^11.3.19",
|
||||||
|
"hast-util-to-jsx-runtime": "2.3.5",
|
||||||
"lucide-react": "0.364.0",
|
"lucide-react": "0.364.0",
|
||||||
"next": "15.2.0",
|
"next": "15.2.0",
|
||||||
"next-intl": "^3.26.5",
|
"next-intl": "^3.26.5",
|
||||||
|
"prettier": "^3.3.3",
|
||||||
"react": "18.2.0",
|
"react": "18.2.0",
|
||||||
"react-dom": "18.2.0",
|
"react-dom": "18.2.0",
|
||||||
"react-ga4": "^2.1.0",
|
"react-ga4": "^2.1.0",
|
||||||
@@ -52,9 +55,7 @@
|
|||||||
"tailwindcss-animate": "^1.0.7",
|
"tailwindcss-animate": "^1.0.7",
|
||||||
"turndown": "^7.2.0",
|
"turndown": "^7.2.0",
|
||||||
"turndown-plugin-gfm": "^1.0.2",
|
"turndown-plugin-gfm": "^1.0.2",
|
||||||
"typescript": "5.1.6",
|
"typescript": "5.1.6"
|
||||||
"prettier": "^3.3.3",
|
|
||||||
"@prettier/plugin-xml": "^3.4.1"
|
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/core": "^7.26.9",
|
"@babel/core": "^7.26.9",
|
||||||
|
|||||||
9
pnpm-lock.yaml
generated
9
pnpm-lock.yaml
generated
@@ -124,6 +124,9 @@ importers:
|
|||||||
'@radix-ui/react-tooltip':
|
'@radix-ui/react-tooltip':
|
||||||
specifier: ^1.1.3
|
specifier: ^1.1.3
|
||||||
version: 1.1.3(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
|
version: 1.1.3(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
|
||||||
|
'@stripe/stripe-js':
|
||||||
|
specifier: ^6.1.0
|
||||||
|
version: 6.1.0
|
||||||
'@tabler/icons-react':
|
'@tabler/icons-react':
|
||||||
specifier: 3.21.0
|
specifier: 3.21.0
|
||||||
version: 3.21.0(react@18.2.0)
|
version: 3.21.0(react@18.2.0)
|
||||||
@@ -1649,6 +1652,10 @@ packages:
|
|||||||
engines: {node: '>= 8.0.0'}
|
engines: {node: '>= 8.0.0'}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
|
|
||||||
|
'@stripe/stripe-js@6.1.0':
|
||||||
|
resolution: {integrity: sha512-/5zxRol+MU4I7fjZXPxP2M6E1nuHOxAzoc0tOEC/TLnC31Gzc+5EE93mIjoAnu28O1Sqpl7/BkceDHwnGmn75A==}
|
||||||
|
engines: {node: '>=12.16'}
|
||||||
|
|
||||||
'@swc/counter@0.1.3':
|
'@swc/counter@0.1.3':
|
||||||
resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==}
|
resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==}
|
||||||
|
|
||||||
@@ -5388,6 +5395,8 @@ snapshots:
|
|||||||
fflate: 0.7.4
|
fflate: 0.7.4
|
||||||
string.prototype.codepointat: 0.2.1
|
string.prototype.codepointat: 0.2.1
|
||||||
|
|
||||||
|
'@stripe/stripe-js@6.1.0': {}
|
||||||
|
|
||||||
'@swc/counter@0.1.3': {}
|
'@swc/counter@0.1.3': {}
|
||||||
|
|
||||||
'@swc/helpers@0.5.13':
|
'@swc/helpers@0.5.13':
|
||||||
|
|||||||
Reference in New Issue
Block a user