(
+ servers?.[0]?.serverId || "",
+ );
+ const { data, refetch, error, isLoading, isError } =
+ api.server.validate.useQuery(
+ { serverId },
+ {
+ enabled: !!serverId,
+ },
+ );
+ const [isRefreshing, setIsRefreshing] = useState(false);
+
+ const { data: server } = api.server.one.useQuery(
+ {
+ serverId,
+ },
+ {
+ enabled: !!serverId,
+ },
+ );
+
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+ Check if your server is ready for deployment
+
+
+
+
+
+ {isError && (
+
+ {error.message}
+
+ )}
+
+
+
+
+ {isLoading ? (
+
+
+ Checking Server configuration
+
+ ) : (
+
+
+
Status
+
+ Shows the server configuration status
+
+
+
+
+
+
+
+
+
+
+
+
+ )}
+
+
+
+
+ );
+};
diff --git a/apps/dokploy/components/dashboard/settings/servers/welcome-stripe/welcome-suscription.tsx b/apps/dokploy/components/dashboard/settings/servers/welcome-stripe/welcome-suscription.tsx
new file mode 100644
index 00000000..253bcbdd
--- /dev/null
+++ b/apps/dokploy/components/dashboard/settings/servers/welcome-stripe/welcome-suscription.tsx
@@ -0,0 +1,366 @@
+import { Button } from "@/components/ui/button";
+import {
+ Dialog,
+ DialogContent,
+ DialogDescription,
+ DialogFooter,
+ DialogHeader,
+ DialogTitle,
+} from "@/components/ui/dialog";
+import { Puzzle } from "lucide-react";
+import { useRouter } from "next/router";
+import { useEffect, useState } from "react";
+import { defineStepper } from "@stepperize/react";
+import React from "react";
+import { Separator } from "@/components/ui/separator";
+import { AlertBlock } from "@/components/shared/alert-block";
+import { CreateServer } from "./create-server";
+import { CreateSSHKey } from "./create-ssh-key";
+import { Setup } from "./setup";
+import { Verify } from "./verify";
+import {
+ Database,
+ Globe,
+ GitMerge,
+ Code,
+ Users,
+ Code2,
+ Plug,
+} from "lucide-react";
+import ConfettiExplosion from "react-confetti-explosion";
+
+interface Props {
+ children?: React.ReactNode;
+}
+
+export const { useStepper, steps, Scoped } = defineStepper(
+ {
+ id: "requisites",
+ title: "Requisites",
+ description: "Check your requisites",
+ },
+ {
+ id: "create-ssh-key",
+ title: "SSH Key",
+ description: "Create your ssh key",
+ },
+ {
+ id: "connect-server",
+ title: "Connect",
+ description: "Connect",
+ },
+ { id: "setup", title: "Setup", description: "Setup your server" },
+ { id: "verify", title: "Verify", description: "Verify your server" },
+ { id: "complete", title: "Complete", description: "Checkout complete" },
+);
+
+export const WelcomeSuscription = ({ children }: Props) => {
+ const [showConfetti, setShowConfetti] = useState(false);
+ const stepper = useStepper();
+ const [isOpen, setIsOpen] = useState(true);
+ const { push } = useRouter();
+
+ useEffect(() => {
+ const confettiShown = localStorage.getItem("hasShownConfetti");
+ if (!confettiShown) {
+ setShowConfetti(true);
+ localStorage.setItem("hasShownConfetti", "true");
+ }
+ }, [showConfetti]);
+
+ return (
+
+ );
+};
diff --git a/apps/dokploy/package.json b/apps/dokploy/package.json
index ba725bdc..599e1ba0 100644
--- a/apps/dokploy/package.json
+++ b/apps/dokploy/package.json
@@ -35,7 +35,8 @@
"test": "vitest --config __test__/vitest.config.ts"
},
"dependencies": {
- "@reactour/tour": "3.7.0",
+ "react-confetti-explosion":"2.1.2",
+ "@stepperize/react": "4.0.1",
"@codemirror/lang-json": "^6.0.1",
"@codemirror/lang-yaml": "^6.1.1",
"@codemirror/language": "^6.10.1",
diff --git a/apps/dokploy/pages/_app.tsx b/apps/dokploy/pages/_app.tsx
index d5a5090a..b8891437 100644
--- a/apps/dokploy/pages/_app.tsx
+++ b/apps/dokploy/pages/_app.tsx
@@ -4,7 +4,6 @@ import { SearchCommand } from "@/components/dashboard/search-command";
import { Toaster } from "@/components/ui/sonner";
import { Languages } from "@/lib/languages";
import { api } from "@/utils/api";
-import { TourProvider } from "@reactour/tour";
import type { NextPage } from "next";
import { appWithTranslation } from "next-i18next";
import { ThemeProvider } from "next-themes";
@@ -16,21 +15,6 @@ import type { ReactElement, ReactNode } from "react";
const inter = Inter({ subsets: ["latin"] });
-export const steps = [
- {
- selector: ".first-step",
- content: "This is the first Step",
- },
- {
- selector: ".second-step",
- content: "This is the second Step",
- },
- {
- selector: ".third-step",
- content: "This is the third Step",
- },
-];
-
export type NextPageWithLayout = NextPage
& {
getLayout?: (page: ReactElement) => ReactNode;
// session: Session | null;
@@ -65,19 +49,17 @@ const MyApp = ({
/>
)}
-
-
-
-
- {getLayout()}
-
-
+
+
+
+ {getLayout()}
+
>
);
};
diff --git a/apps/dokploy/server/api/routers/ssh-key.ts b/apps/dokploy/server/api/routers/ssh-key.ts
index dcc10827..ceb32993 100644
--- a/apps/dokploy/server/api/routers/ssh-key.ts
+++ b/apps/dokploy/server/api/routers/ssh-key.ts
@@ -17,7 +17,7 @@ import {
updateSSHKeyById,
} from "@dokploy/server";
import { TRPCError } from "@trpc/server";
-import { eq } from "drizzle-orm";
+import { desc, eq } from "drizzle-orm";
export const sshRouter = createTRPCRouter({
create: protectedProcedure
@@ -71,6 +71,7 @@ export const sshRouter = createTRPCRouter({
all: protectedProcedure.query(async ({ ctx }) => {
return await db.query.sshKeys.findMany({
...(IS_CLOUD && { where: eq(sshKeys.adminId, ctx.user.adminId) }),
+ orderBy: desc(sshKeys.createdAt),
});
// TODO: Remove this line when the cloud version is ready
}),
diff --git a/apps/dokploy/server/api/routers/stripe.ts b/apps/dokploy/server/api/routers/stripe.ts
index 0f794a5d..7a8a537c 100644
--- a/apps/dokploy/server/api/routers/stripe.ts
+++ b/apps/dokploy/server/api/routers/stripe.ts
@@ -81,7 +81,7 @@ export const stripeRouter = createTRPCRouter({
adminId: admin.adminId,
},
allow_promotion_codes: true,
- success_url: `${WEBSITE_URL}/dashboard/settings/billing`,
+ success_url: `${WEBSITE_URL}/dashboard/settings/servers?success=true`,
cancel_url: `${WEBSITE_URL}/dashboard/settings/billing`,
});
diff --git a/packages/server/src/setup/server-setup.ts b/packages/server/src/setup/server-setup.ts
index 3ee95cd0..d68bed6f 100644
--- a/packages/server/src/setup/server-setup.ts
+++ b/packages/server/src/setup/server-setup.ts
@@ -55,7 +55,7 @@ export const serverSetup = async (serverId: string) => {
} catch (err) {
console.log(err);
await updateDeploymentStatus(deployment.deploymentId, "error");
- writeStream.write(err);
+ writeStream.write(`${err} ❌\n`);
writeStream.close();
}
};
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 89232199..62ba2f56 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -178,9 +178,9 @@ importers:
'@radix-ui/react-tooltip':
specifier: ^1.0.7
version: 1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
- '@reactour/tour':
- specifier: 3.7.0
- version: 3.7.0(react@18.2.0)
+ '@stepperize/react':
+ specifier: 4.0.1
+ version: 4.0.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
'@stripe/stripe-js':
specifier: 4.8.0
version: 4.8.0
@@ -301,6 +301,9 @@ importers:
react:
specifier: 18.2.0
version: 18.2.0
+ react-confetti-explosion:
+ specifier: 2.1.2
+ version: 2.1.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
react-dom:
specifier: 18.2.0
version: 18.2.0(react@18.2.0)
@@ -863,6 +866,12 @@ packages:
'@emnapi/runtime@1.3.1':
resolution: {integrity: sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==}
+ '@emotion/is-prop-valid@0.7.3':
+ resolution: {integrity: sha512-uxJqm/sqwXw3YPA5GXX365OBcJGFtxUVkB6WyezqFHlNe9jqUWH5ur2O2M8dGBz61kn1g3ZBlzUunFQXQIClhA==}
+
+ '@emotion/memoize@0.7.1':
+ resolution: {integrity: sha512-Qv4LTqO11jepd5Qmlp3M1YEjBumoTHcHFdgPTQ+sFlIL5myi/7xu/POwP7IRu6odBdmLXdtIs1D6TuW6kbwbbg==}
+
'@esbuild-kit/core-utils@3.3.2':
resolution: {integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==}
@@ -2874,26 +2883,6 @@ packages:
peerDependencies:
react: ^18.2.0
- '@reactour/mask@1.1.0':
- resolution: {integrity: sha512-GkJMLuTs3vTsm4Ryq2uXcE4sMzRP1p4xSd6juSOMqbHa7IVD/UiLCLqJWHR9xGSQPbYhpZAZAORUG5cS0U5tBA==}
- peerDependencies:
- react: 16.x || 17.x || 18.x
-
- '@reactour/popover@1.2.0':
- resolution: {integrity: sha512-1JMykZ+MmDmRlEVC5+DwlvK1exwV5bFHtiSFwVXnoPZmsSfwId6SLyjo9H6bybeuNtNEzviKdsF/ZBC1UQbDqg==}
- peerDependencies:
- react: 16.x || 17.x || 18.x
-
- '@reactour/tour@3.7.0':
- resolution: {integrity: sha512-p0USaOBc5fcNBS5ZiQ2lsmztAhIGCUfx913Zw14FbEM8bhSXpR1F2JD0alVj9Ya1N+pnTNYatf14rSNGJsEnCg==}
- peerDependencies:
- react: 16.x || 17.x || 18.x
-
- '@reactour/utils@0.5.0':
- resolution: {integrity: sha512-yQs5Nm/Dg1xRM7d/S/UILBV5OInrTgrjGzgc81/RP5khqdO5KnpOaC46yF83kDtCalte8X3RCwp+F2YA509k1w==}
- peerDependencies:
- react: 16.x || 17.x || 18.x
-
'@redis/bloom@1.2.0':
resolution: {integrity: sha512-HG2DFjYKbpNmVXsa0keLHp/3leGJz1mjh09f2RLGGLQZzSHpkmZWuwJbAvo3QcRY8p80m5+ZdXZdYOSBLlp7Cg==}
peerDependencies:
@@ -3003,11 +2992,6 @@ packages:
cpu: [x64]
os: [win32]
- '@rooks/use-mutation-observer@4.11.2':
- resolution: {integrity: sha512-vpsdrZdr6TkB1zZJcHx+fR1YC/pHs2BaqcuYiEGjBVbwY5xcC49+h0hAUtQKHth3oJqXfIX/Ng8S7s5HFHdM/A==}
- peerDependencies:
- react: '>=16.8.0'
-
'@selderee/plugin-htmlparser2@0.11.0':
resolution: {integrity: sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ==}
@@ -3022,6 +3006,12 @@ packages:
resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==}
engines: {node: '>=18'}
+ '@stepperize/react@4.0.1':
+ resolution: {integrity: sha512-LAOcfi3d2mM/Jn740Xy35qsuTwmoLIuitvWZTZRURYeGsc7a6sIKAkk3+L1joZGkLFvf5q4I6V7LxWWfB5hDvg==}
+ peerDependencies:
+ react: ^17.0.0 || ^18.0.0 || ^19.0.0
+ react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0
+
'@stripe/stripe-js@4.8.0':
resolution: {integrity: sha512-+4Cb0bVHlV4BJXxkJ3cCLSLuWxm3pXKtgcRacox146EuugjCzRRII5T5gUMgL4HpzrBLVwVxjKaZqntNWAXawQ==}
engines: {node: '>=12.16'}
@@ -3985,6 +3975,12 @@ packages:
uWebSockets.js:
optional: true
+ css-jss@10.10.0:
+ resolution: {integrity: sha512-YyMIS/LsSKEGXEaVJdjonWe18p4vXLo8CMA4FrW/kcaEyqdIGKCFXao31gbJddXEdIxSXFFURWrenBJPlKTgAA==}
+
+ css-vendor@2.0.8:
+ resolution: {integrity: sha512-x9Aq0XTInxrkuFeHKbYC7zWY8ai7qJ04Kxd9MnvbC1uO5DagxoHQjm4JvG+vCdXOoFtCjbL2XSZfxmoYa9uQVQ==}
+
css.escape@1.5.1:
resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==}
@@ -4754,6 +4750,9 @@ packages:
resolution: {integrity: sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==}
engines: {node: '>=10.18'}
+ hyphenate-style-name@1.1.0:
+ resolution: {integrity: sha512-WDC/ui2VVRrz3jOVi+XtjqkDjiVjTtFaAGiW37k6b+ohyQ5wYDOGkvCZa8+H0nx3gyvv0+BST9xuOgIyGQ00gw==}
+
i18next-fs-backend@2.3.2:
resolution: {integrity: sha512-LIwUlkqDZnUI8lnUxBnEj8K/FrHQTT/Sc+1rvDm9E8YvvY5YxzoEAASNx+W5M9DfD5s77lI5vSAFWeTp26B/3Q==}
@@ -4878,6 +4877,9 @@ packages:
is-hexadecimal@1.0.4:
resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==}
+ is-in-browser@1.1.3:
+ resolution: {integrity: sha512-FeXIBgG/CPGd/WUxuEyvgGTEfwiG9Z4EKGxjNMRqviiIIfsmgrpnHLffEDdwUHqNva1VEW91o3xBT/m8Elgl9g==}
+
is-ip@4.0.0:
resolution: {integrity: sha512-4B4XA2HEIm/PY+OSpeMBXr8pGWBYbXuHgjMAqrwbLO3CPTCAd9ArEJzBUKGZtk9viY6+aSfadGnWyjY3ydYZkw==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
@@ -4969,6 +4971,48 @@ packages:
resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==}
engines: {node: '>=12', npm: '>=6'}
+ jss-plugin-camel-case@10.10.0:
+ resolution: {integrity: sha512-z+HETfj5IYgFxh1wJnUAU8jByI48ED+v0fuTuhKrPR+pRBYS2EDwbusU8aFOpCdYhtRc9zhN+PJ7iNE8pAWyPw==}
+
+ jss-plugin-compose@10.10.0:
+ resolution: {integrity: sha512-F5kgtWpI2XfZ3Z8eP78tZEYFdgTIbpA/TMuX3a8vwrNolYtN1N4qJR/Ob0LAsqIwCMLojtxN7c7Oo/+Vz6THow==}
+
+ jss-plugin-default-unit@10.10.0:
+ resolution: {integrity: sha512-SvpajxIECi4JDUbGLefvNckmI+c2VWmP43qnEy/0eiwzRUsafg5DVSIWSzZe4d2vFX1u9nRDP46WCFV/PXVBGQ==}
+
+ jss-plugin-expand@10.10.0:
+ resolution: {integrity: sha512-ymT62W2OyDxBxr7A6JR87vVX9vTq2ep5jZLIdUSusfBIEENLdkkc0lL/Xaq8W9s3opUq7R0sZQpzRWELrfVYzA==}
+
+ jss-plugin-extend@10.10.0:
+ resolution: {integrity: sha512-sKYrcMfr4xxigmIwqTjxNcHwXJIfvhvjTNxF+Tbc1NmNdyspGW47Ey6sGH8BcQ4FFQhLXctpWCQSpDwdNmXSwg==}
+
+ jss-plugin-global@10.10.0:
+ resolution: {integrity: sha512-icXEYbMufiNuWfuazLeN+BNJO16Ge88OcXU5ZDC2vLqElmMybA31Wi7lZ3lf+vgufRocvPj8443irhYRgWxP+A==}
+
+ jss-plugin-nested@10.10.0:
+ resolution: {integrity: sha512-9R4JHxxGgiZhurDo3q7LdIiDEgtA1bTGzAbhSPyIOWb7ZubrjQe8acwhEQ6OEKydzpl8XHMtTnEwHXCARLYqYA==}
+
+ jss-plugin-props-sort@10.10.0:
+ resolution: {integrity: sha512-5VNJvQJbnq/vRfje6uZLe/FyaOpzP/IH1LP+0fr88QamVrGJa0hpRRyAa0ea4U/3LcorJfBFVyC4yN2QC73lJg==}
+
+ jss-plugin-rule-value-function@10.10.0:
+ resolution: {integrity: sha512-uEFJFgaCtkXeIPgki8ICw3Y7VMkL9GEan6SqmT9tqpwM+/t+hxfMUdU4wQ0MtOiMNWhwnckBV0IebrKcZM9C0g==}
+
+ jss-plugin-rule-value-observable@10.10.0:
+ resolution: {integrity: sha512-ZLMaYrR3QE+vD7nl3oNXuj79VZl9Kp8/u6A1IbTPDcuOu8b56cFdWRZNZ0vNr8jHewooEeq2doy8Oxtymr2ZPA==}
+
+ jss-plugin-template@10.10.0:
+ resolution: {integrity: sha512-ocXZBIOJOA+jISPdsgkTs8wwpK6UbsvtZK5JI7VUggTD6LWKbtoxUzadd2TpfF+lEtlhUmMsCkTRNkITdPKa6w==}
+
+ jss-plugin-vendor-prefixer@10.10.0:
+ resolution: {integrity: sha512-UY/41WumgjW8r1qMCO8l1ARg7NHnfRVWRhZ2E2m0DMYsr2DD91qIXLyNhiX83hHswR7Wm4D+oDYNC1zWCJWtqg==}
+
+ jss-preset-default@10.10.0:
+ resolution: {integrity: sha512-GL175Wt2FGhjE+f+Y3aWh+JioL06/QWFgZp53CbNNq6ZkVU0TDplD8Bxm9KnkotAYn3FlplNqoW5CjyLXcoJ7Q==}
+
+ jss@10.10.0:
+ resolution: {integrity: sha512-cqsOTS7jqPsPMjtKYDUpdFC0AbhYFLTcuGRqymgmdJIeQ8cH7+AgX7YSgQy79wXloZq2VvATYxUOUQEvS1V/Zw==}
+
jwa@1.4.1:
resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==}
@@ -5827,6 +5871,12 @@ packages:
resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==}
hasBin: true
+ react-confetti-explosion@2.1.2:
+ resolution: {integrity: sha512-4UzDFBajAGXmF9TSJoRMO2QOBCIXc66idTxH8l7Mkul48HLGtk+tMzK9HYDYsy7Zmw5sEGchi2fbn4AJUuLrZw==}
+ peerDependencies:
+ react: ^18.x
+ react-dom: ^18.x
+
react-copy-to-clipboard@5.1.0:
resolution: {integrity: sha512-k61RsNgAayIJNoy9yDsYzDe/yAZAzEbEgcz3DZMhF686LEyukcE1hzurxe85JandPUG+yTfGVFzuEw3xt8WP/A==}
peerDependencies:
@@ -5837,6 +5887,9 @@ packages:
peerDependencies:
react: ^15.3.0 || 16 || 17 || 18
+ react-display-name@0.2.5:
+ resolution: {integrity: sha512-I+vcaK9t4+kypiSgaiVWAipqHRXYmZIuAiS8vzFvXHHXVigg/sMKwlRgLy6LH2i3rmP+0Vzfl5lFsFRwF1r3pg==}
+
react-dom@18.2.0:
resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==}
peerDependencies:
@@ -5884,6 +5937,11 @@ packages:
react-is@18.3.1:
resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==}
+ react-jss@10.10.0:
+ resolution: {integrity: sha512-WLiq84UYWqNBF6579/uprcIUnM1TSywYq6AIjKTTTG5ziJl9Uy+pwuvpN3apuyVwflMbD60PraeTKT7uWH9XEQ==}
+ peerDependencies:
+ react: '>=16.8.6'
+
react-promise-suspense@0.3.4:
resolution: {integrity: sha512-I42jl7L3Ze6kZaq+7zXWSunBa3b1on5yfvUW6Eo/3fFOj6dZ5Bqmcd264nJbTK/gn1HjjILAjSwnZbV4RpSaNQ==}
@@ -6040,9 +6098,6 @@ packages:
reselect@5.1.1:
resolution: {integrity: sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==}
- resize-observer-polyfill@1.5.1:
- resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==}
-
resolve-alpn@1.2.1:
resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==}
@@ -6162,6 +6217,9 @@ packages:
resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==}
hasBin: true
+ shallow-equal@1.2.1:
+ resolution: {integrity: sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA==}
+
sharp@0.33.5:
resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
@@ -6373,6 +6431,10 @@ packages:
react: '>=16.8.0 <19'
react-dom: '>=16.8.0 <19'
+ symbol-observable@1.2.0:
+ resolution: {integrity: sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==}
+ engines: {node: '>=0.10.0'}
+
tailwind-merge@2.4.0:
resolution: {integrity: sha512-49AwoOQNKdqKPd9CViyH5wJoSKsCDjUlzL8DxuGp3P1FsGY36NJDAa18jLZcaHAUUuTj+JB8IAo8zWgBNvBF7A==}
@@ -6426,6 +6488,12 @@ packages:
resolution: {integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==}
engines: {node: '>=8'}
+ theming@3.3.0:
+ resolution: {integrity: sha512-u6l4qTJRDaWZsqa8JugaNt7Xd8PPl9+gonZaIe28vAhqgHMIG/DOyFPqiKN/gQLQYj05tHv+YQdNILL4zoiAVA==}
+ engines: {node: '>=8'}
+ peerDependencies:
+ react: '>=16.3'
+
thenify-all@1.6.0:
resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
engines: {node: '>=0.8'}
@@ -6452,6 +6520,9 @@ packages:
tiny-invariant@1.3.3:
resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==}
+ tiny-warning@1.0.3:
+ resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==}
+
tinybench@2.8.0:
resolution: {integrity: sha512-1/eK7zUnIklz4JUUlL+658n58XO2hHLQfSk1Zf2LKieUjxidN16eKFEoDEfjHc3ohofSSqK3X5yO6VGb6iW8Lw==}
@@ -7146,6 +7217,12 @@ snapshots:
tslib: 2.6.3
optional: true
+ '@emotion/is-prop-valid@0.7.3':
+ dependencies:
+ '@emotion/memoize': 0.7.1
+
+ '@emotion/memoize@0.7.1': {}
+
'@esbuild-kit/core-utils@3.3.2':
dependencies:
esbuild: 0.18.20
@@ -8859,29 +8936,6 @@ snapshots:
dependencies:
react: 18.2.0
- '@reactour/mask@1.1.0(react@18.2.0)':
- dependencies:
- '@reactour/utils': 0.5.0(react@18.2.0)
- react: 18.2.0
-
- '@reactour/popover@1.2.0(react@18.2.0)':
- dependencies:
- '@reactour/utils': 0.5.0(react@18.2.0)
- react: 18.2.0
-
- '@reactour/tour@3.7.0(react@18.2.0)':
- dependencies:
- '@reactour/mask': 1.1.0(react@18.2.0)
- '@reactour/popover': 1.2.0(react@18.2.0)
- '@reactour/utils': 0.5.0(react@18.2.0)
- react: 18.2.0
-
- '@reactour/utils@0.5.0(react@18.2.0)':
- dependencies:
- '@rooks/use-mutation-observer': 4.11.2(react@18.2.0)
- react: 18.2.0
- resize-observer-polyfill: 1.5.1
-
'@redis/bloom@1.2.0(@redis/client@1.6.0)':
dependencies:
'@redis/client': 1.6.0
@@ -8956,10 +9010,6 @@ snapshots:
'@rollup/rollup-win32-x64-msvc@4.19.1':
optional: true
- '@rooks/use-mutation-observer@4.11.2(react@18.2.0)':
- dependencies:
- react: 18.2.0
-
'@selderee/plugin-htmlparser2@0.11.0':
dependencies:
domhandler: 5.0.3
@@ -8971,6 +9021,11 @@ snapshots:
'@sindresorhus/merge-streams@2.3.0': {}
+ '@stepperize/react@4.0.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)':
+ dependencies:
+ react: 18.2.0
+ react-dom: 18.2.0(react@18.2.0)
+
'@stripe/stripe-js@4.8.0': {}
'@swagger-api/apidom-ast@1.0.0-alpha.9':
@@ -10270,6 +10325,17 @@ snapshots:
crossws@0.2.4: {}
+ css-jss@10.10.0:
+ dependencies:
+ '@babel/runtime': 7.25.0
+ jss: 10.10.0
+ jss-preset-default: 10.10.0
+
+ css-vendor@2.0.8:
+ dependencies:
+ '@babel/runtime': 7.25.0
+ is-in-browser: 1.1.3
+
css.escape@1.5.1: {}
cssesc@3.0.0: {}
@@ -11049,6 +11115,8 @@ snapshots:
hyperdyperid@1.2.0: {}
+ hyphenate-style-name@1.1.0: {}
+
i18next-fs-backend@2.3.2: {}
i18next@23.16.5:
@@ -11156,6 +11224,8 @@ snapshots:
is-hexadecimal@1.0.4: {}
+ is-in-browser@1.1.3: {}
+
is-ip@4.0.0:
dependencies:
ip-regex: 5.0.0
@@ -11241,6 +11311,98 @@ snapshots:
ms: 2.1.3
semver: 7.6.2
+ jss-plugin-camel-case@10.10.0:
+ dependencies:
+ '@babel/runtime': 7.25.0
+ hyphenate-style-name: 1.1.0
+ jss: 10.10.0
+
+ jss-plugin-compose@10.10.0:
+ dependencies:
+ '@babel/runtime': 7.25.0
+ jss: 10.10.0
+ tiny-warning: 1.0.3
+
+ jss-plugin-default-unit@10.10.0:
+ dependencies:
+ '@babel/runtime': 7.25.0
+ jss: 10.10.0
+
+ jss-plugin-expand@10.10.0:
+ dependencies:
+ '@babel/runtime': 7.25.0
+ jss: 10.10.0
+
+ jss-plugin-extend@10.10.0:
+ dependencies:
+ '@babel/runtime': 7.25.0
+ jss: 10.10.0
+ tiny-warning: 1.0.3
+
+ jss-plugin-global@10.10.0:
+ dependencies:
+ '@babel/runtime': 7.25.0
+ jss: 10.10.0
+
+ jss-plugin-nested@10.10.0:
+ dependencies:
+ '@babel/runtime': 7.25.0
+ jss: 10.10.0
+ tiny-warning: 1.0.3
+
+ jss-plugin-props-sort@10.10.0:
+ dependencies:
+ '@babel/runtime': 7.25.0
+ jss: 10.10.0
+
+ jss-plugin-rule-value-function@10.10.0:
+ dependencies:
+ '@babel/runtime': 7.25.0
+ jss: 10.10.0
+ tiny-warning: 1.0.3
+
+ jss-plugin-rule-value-observable@10.10.0:
+ dependencies:
+ '@babel/runtime': 7.25.0
+ jss: 10.10.0
+ symbol-observable: 1.2.0
+
+ jss-plugin-template@10.10.0:
+ dependencies:
+ '@babel/runtime': 7.25.0
+ jss: 10.10.0
+ tiny-warning: 1.0.3
+
+ jss-plugin-vendor-prefixer@10.10.0:
+ dependencies:
+ '@babel/runtime': 7.25.0
+ css-vendor: 2.0.8
+ jss: 10.10.0
+
+ jss-preset-default@10.10.0:
+ dependencies:
+ '@babel/runtime': 7.25.0
+ jss: 10.10.0
+ jss-plugin-camel-case: 10.10.0
+ jss-plugin-compose: 10.10.0
+ jss-plugin-default-unit: 10.10.0
+ jss-plugin-expand: 10.10.0
+ jss-plugin-extend: 10.10.0
+ jss-plugin-global: 10.10.0
+ jss-plugin-nested: 10.10.0
+ jss-plugin-props-sort: 10.10.0
+ jss-plugin-rule-value-function: 10.10.0
+ jss-plugin-rule-value-observable: 10.10.0
+ jss-plugin-template: 10.10.0
+ jss-plugin-vendor-prefixer: 10.10.0
+
+ jss@10.10.0:
+ dependencies:
+ '@babel/runtime': 7.25.0
+ csstype: 3.1.3
+ is-in-browser: 1.1.3
+ tiny-warning: 1.0.3
+
jwa@1.4.1:
dependencies:
buffer-equal-constant-time: 1.0.1
@@ -12077,6 +12239,13 @@ snapshots:
strip-json-comments: 2.0.1
optional: true
+ react-confetti-explosion@2.1.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0):
+ dependencies:
+ lodash: 4.17.21
+ react: 18.2.0
+ react-dom: 18.2.0(react@18.2.0)
+ react-jss: 10.10.0(react@18.2.0)
+
react-copy-to-clipboard@5.1.0(react@18.2.0):
dependencies:
copy-to-clipboard: 3.3.3
@@ -12089,6 +12258,8 @@ snapshots:
prop-types: 15.8.1
react: 18.2.0
+ react-display-name@0.2.5: {}
+
react-dom@18.2.0(react@18.2.0):
dependencies:
loose-envify: 1.4.0
@@ -12127,6 +12298,21 @@ snapshots:
react-is@18.3.1: {}
+ react-jss@10.10.0(react@18.2.0):
+ dependencies:
+ '@babel/runtime': 7.25.0
+ '@emotion/is-prop-valid': 0.7.3
+ css-jss: 10.10.0
+ hoist-non-react-statics: 3.3.2
+ is-in-browser: 1.1.3
+ jss: 10.10.0
+ jss-preset-default: 10.10.0
+ prop-types: 15.8.1
+ react: 18.2.0
+ shallow-equal: 1.2.1
+ theming: 3.3.0(react@18.2.0)
+ tiny-warning: 1.0.3
+
react-promise-suspense@0.3.4:
dependencies:
fast-deep-equal: 2.0.1
@@ -12296,8 +12482,6 @@ snapshots:
reselect@5.1.1: {}
- resize-observer-polyfill@1.5.1: {}
-
resolve-alpn@1.2.1: {}
resolve-from@4.0.0: {}
@@ -12423,6 +12607,8 @@ snapshots:
inherits: 2.0.4
safe-buffer: 5.2.1
+ shallow-equal@1.2.1: {}
+
sharp@0.33.5:
dependencies:
color: 4.2.3
@@ -12692,6 +12878,8 @@ snapshots:
- '@types/react'
- debug
+ symbol-observable@1.2.0: {}
+
tailwind-merge@2.4.0: {}
tailwindcss-animate@1.0.7(tailwindcss@3.4.7):
@@ -12771,6 +12959,14 @@ snapshots:
text-extensions@2.4.0: {}
+ theming@3.3.0(react@18.2.0):
+ dependencies:
+ hoist-non-react-statics: 3.3.2
+ prop-types: 15.8.1
+ react: 18.2.0
+ react-display-name: 0.2.5
+ tiny-warning: 1.0.3
+
thenify-all@1.6.0:
dependencies:
thenify: 3.3.1
@@ -12796,6 +12992,8 @@ snapshots:
tiny-invariant@1.3.3: {}
+ tiny-warning@1.0.3: {}
+
tinybench@2.8.0: {}
tinypool@0.8.4: {}