This PR is handles the changes required to support envelopes. The new
envelope editor/signing page will be hidden during release.
The core changes here is to migrate the documents and templates model to
a centralized envelopes model.
Even though Documents and Templates are removed, from the user
perspective they will still exist as we remap envelopes to documents and
templates.
Improves the mobile signing UX making actions available via the floating
navbar more obvious.
Also adds an automatic switch to the complete button once all fields
have been signed.
On larger documents we could accidentally start trying to render fields
while not all pages of the PDF have loaded due to us checking for a
single page existing. This would cause an error to be thrown, hard
locking those documents.
This change resolves this by grabbing the highest page number from the
given fields and using it for the visibility check instead.
This PR improves the mobile experience of the document signing page by
implementing a collapsible widget design for the signing form. On mobile
devices, the form now appears as a fixed bottom sheet that can be
expanded/collapsed, while maintaining the sticky sidebar layout on
desktop.
## Description
General fixes to the email domain features
Changes made:
- Add "email" validation for "Reply-To email" fields
- Fix issue where you can't remove the "Reply-To" email after it's set
- Fix issue where setting the "Sender email" back to Documenso would
still send using the org/team pref
Currently new lines are not rendered in text fields correctly on the
`/sign` page. This is an issue because when the field is inserted and
sealed we respect new lines.
Prevent users from creating a separate organisation for individual
plans. Only applies to users who have 1 personal organisation and are
subscribing to the "Individual" plan.
The reason for this change is to keep the layout in the "Personal" mode
which means it doesn't show a bunch of unusable "organisation" related
UI.
Currently users who cancel their plan are stuck without the ability to
resubscribe. This allows them to choose a plan to subscribe
This assumes that a Subscription in the "INACTIVE" state means that the
plan has been paid but canceled.
No tests have been done to determine the relation between "PAST_DUE" and
"INACTIVE" states within our context.
## Description
Add a new document audit log to detect when the document is viewed. This
should only be visible in the document audit log page
Notes:
1. I wanted to reuse the `DOCUMENT_OPENED` event and add an additional
paramter to track sequential views, but it's not query-able
2. This will log "DOCUMENT_VIEWED" before "DOCUMENT_OPENED" but i don't
think it matters
Adds password reauthentication to our existing reauth providers,
additionally swaps from an exclusive provider to an inclusive type where
multiple methods can be selected to offer a this or that experience.
Adds document access tokens and QR code functionality to enable secure
document sharing via URLs. It includes a new document access page that
allows viewing and downloading documents through tokenized links.
## Description
Previously we weren't passing the DocumentMeta to our readonly field
component which is used for displaying completed fields by other
recipients.
Due to this dates that were not using the default format were displaying
as invalid date adding confusion to the signing process.
## Related Issue
Reported via support email.
## Changes Made
- Pass the document meta to the readonly field component.
- Support showing completed fields within the embedding UI.
## Testing Performed
- Manual testing
Fix webhooks being sent twice due to duplicate frontend calls
Updated the assistant confirmation dialog so the next signer is always
visible (if dictate is enabled). Because if the form is invalid (due to
no name) there is no visual queue that the form is invalid (since it's
hidden)
## Notes
Didn't bother to remove the weird assistants form since it currently
works for now

## Tests
- Currently running locally
- Tested webhooks via network tab and via webhook.site