diff --git a/README.md b/README.md
index 26f91e8d2..39cbb4332 100644
--- a/README.md
+++ b/README.md
@@ -13,9 +13,9 @@
·
Issues
·
- Roadmap
+ Upcoming Releases
·
- Upcoming Launches
+ Roadmap
@@ -284,12 +284,16 @@ WantedBy=multi-user.target
### Railway
-[](https://railway.app/template/DjrRRX)
+[](https://railway.app/template/bG6D4p)
### Render
[](https://render.com/deploy?repo=https://github.com/documenso/documenso)
+### Koyeb
+
+[](https://app.koyeb.com/deploy?type=git&repository=github.com/documenso/documenso&branch=main&name=documenso-app&builder=dockerfile&dockerfile=/docker/Dockerfile)
+
## Troubleshooting
### I'm not receiving any emails when using the developer quickstart.
diff --git a/apps/marketing/package.json b/apps/marketing/package.json
index 83d13d07c..1cfb7337f 100644
--- a/apps/marketing/package.json
+++ b/apps/marketing/package.json
@@ -36,7 +36,7 @@
"react-hook-form": "^7.43.9",
"react-icons": "^4.11.0",
"recharts": "^2.7.2",
- "sharp": "0.32.5",
+ "sharp": "0.33.1",
"typescript": "5.2.2",
"zod": "^3.22.4"
},
diff --git a/apps/marketing/src/components/(marketing)/widget.tsx b/apps/marketing/src/components/(marketing)/widget.tsx
index c1ceadafe..80c13b275 100644
--- a/apps/marketing/src/components/(marketing)/widget.tsx
+++ b/apps/marketing/src/components/(marketing)/widget.tsx
@@ -1,6 +1,7 @@
'use client';
-import { HTMLAttributes, KeyboardEvent, useMemo, useState } from 'react';
+import type { HTMLAttributes, KeyboardEvent } from 'react';
+import { useMemo, useState } from 'react';
import { zodResolver } from '@hookform/resolvers/zod';
import { AnimatePresence, motion } from 'framer-motion';
@@ -90,10 +91,10 @@ export const Widget = ({ className, children, ...props }: WidgetProps) => {
}
if (step === STEP.EMAIL) {
- return 1;
+ return 3;
}
- return 3;
+ return 1;
}, [step]);
const onNextStepClick = () => {
diff --git a/apps/web/package.json b/apps/web/package.json
index 150982c2d..89675318f 100644
--- a/apps/web/package.json
+++ b/apps/web/package.json
@@ -42,7 +42,7 @@
"react-hotkeys-hook": "^4.4.1",
"react-icons": "^4.11.0",
"react-rnd": "^10.4.1",
- "sharp": "0.32.5",
+ "sharp": "0.33.1",
"ts-pattern": "^5.0.5",
"typescript": "5.2.2",
"uqr": "^0.1.2",
diff --git a/apps/web/src/app/(signing)/sign/[token]/form.tsx b/apps/web/src/app/(signing)/sign/[token]/form.tsx
index 4f20a8199..f5c94e6ec 100644
--- a/apps/web/src/app/(signing)/sign/[token]/form.tsx
+++ b/apps/web/src/app/(signing)/sign/[token]/form.tsx
@@ -49,6 +49,11 @@ export const SigningForm = ({ document, recipient, fields }: SigningFormProps) =
return sortFieldsByPosition(fields.filter((field) => !field.inserted));
}, [fields]);
+ const fieldsValidated = () => {
+ setValidateUninsertedFields(true);
+ validateFieldsInserted(fields);
+ };
+
const onFormSubmit = async () => {
setValidateUninsertedFields(true);
@@ -154,6 +159,7 @@ export const SigningForm = ({ document, recipient, fields }: SigningFormProps) =
onSignatureComplete={handleSubmit(onFormSubmit)}
document={document}
fields={fields}
+ fieldsValidated={fieldsValidated}
/>
diff --git a/apps/web/src/app/(signing)/sign/[token]/sign-dialog.tsx b/apps/web/src/app/(signing)/sign/[token]/sign-dialog.tsx
index faecf5d7e..e4d4571fc 100644
--- a/apps/web/src/app/(signing)/sign/[token]/sign-dialog.tsx
+++ b/apps/web/src/app/(signing)/sign/[token]/sign-dialog.tsx
@@ -15,6 +15,7 @@ export type SignDialogProps = {
isSubmitting: boolean;
document: Document;
fields: Field[];
+ fieldsValidated: () => void | Promise;
onSignatureComplete: () => void | Promise;
};
@@ -22,6 +23,7 @@ export const SignDialog = ({
isSubmitting,
document,
fields,
+ fieldsValidated,
onSignatureComplete,
}: SignDialogProps) => {
const [showDialog, setShowDialog] = useState(false);
@@ -29,16 +31,16 @@ export const SignDialog = ({
const isComplete = fields.every((field) => field.inserted);
return (
-