From a730acc76ad19a4877a148e7efc778cef9b88e1d Mon Sep 17 00:00:00 2001
From: Catalin Pit <25515812+catalinpit@users.noreply.github.com>
Date: Thu, 5 Sep 2024 16:24:40 +0300
Subject: [PATCH] chore: reverted merge
---
.github/actions/cache-build/action.yml | 4 +-
.github/actions/node-install/action.yml | 2 +-
README.md | 4 -
apps/documentation/package.json | 4 +-
.../documentation/pages/developers/_meta.json | 3 +-
.../pages/developers/embedding/index.mdx | 131 ---
.../pages/developers/embedding/preact.mdx | 77 --
.../pages/developers/embedding/react.mdx | 77 --
.../pages/developers/embedding/solid.mdx | 77 --
.../pages/developers/embedding/svelte.mdx | 79 --
.../pages/developers/embedding/vue.mdx | 79 --
.../developers/local-development/_meta.json | 5 +-
.../local-development/translations.mdx | 128 ---
.../pages/users/signing-documents/fields.mdx | 84 +-
.../pages/users/signing-documents/index.mdx | 24 +-
apps/documentation/pages/users/templates.mdx | 16 +-
.../public/embedding/copy-recipient-token.png | Bin 172213 -> 0 bytes
.../public/embedding/enable-direct-link.png | Bin 83567 -> 0 bytes
.../public/embedding/team-templates.png | Bin 139608 -> 0 bytes
apps/marketing/package.json | 27 +-
.../src/app/(marketing)/[content]/page.tsx | 4 -
.../src/app/(marketing)/blog/[post]/page.tsx | 4 -
.../src/app/(marketing)/singleplayer/page.tsx | 4 -
apps/web/package.json | 28 +-
.../(recipient)/d/[token]/direct-template.tsx | 2 +-
.../sign/[token]/signing-page-view.tsx | 1 -
apps/web/src/app/embed/authenticate.tsx | 32 -
apps/web/src/app/embed/base-schema.ts | 8 -
apps/web/src/app/embed/client-loading.tsx | 7 -
apps/web/src/app/embed/completed.tsx | 36 -
.../app/embed/direct/[[...url]]/client.tsx | 456 -----------
.../app/embed/direct/[[...url]]/not-found.tsx | 3 -
.../src/app/embed/direct/[[...url]]/page.tsx | 93 ---
.../src/app/embed/direct/[[...url]]/schema.ts | 20 -
apps/web/src/app/embed/document-fields.tsx | 185 -----
apps/web/src/app/embed/paywall.tsx | 7 -
.../src/app/embed/sign/[[...url]]/client.tsx | 329 --------
.../app/embed/sign/[[...url]]/not-found.tsx | 3 -
.../src/app/embed/sign/[[...url]]/page.tsx | 100 ---
.../src/app/embed/sign/[[...url]]/schema.ts | 16 -
apps/web/src/components/forms/signin.tsx | 32 +-
apps/web/src/middleware.ts | 14 -
package-lock.json | 765 +++++++++++++-----
package.json | 17 +-
packages/api/v1/contract.ts | 3 +-
packages/api/v1/implementation.ts | 228 ++----
packages/api/v1/schema.ts | 31 +-
packages/ee/package.json | 4 +-
.../lib/client-only/hooks/use-throttle-fn.ts | 60 --
packages/lib/package.json | 4 +-
.../document/get-document-by-token.ts | 2 +-
.../lib/server-only/field/create-field.ts | 35 +-
.../lib/server-only/field/update-field.ts | 63 +-
.../get-active-subscriptions-by-user-id.ts | 21 -
.../create-document-from-direct-template.ts | 11 +-
packages/lib/translations/de/common.po | 28 +-
packages/lib/translations/de/web.js | 2 +-
packages/lib/translations/de/web.po | 100 +--
packages/lib/translations/en/common.po | 28 +-
packages/lib/translations/en/web.js | 2 +-
packages/lib/translations/en/web.po | 100 +--
.../document/document-share-button.tsx | 5 +-
packages/ui/components/signing-card.tsx | 1 -
packages/ui/package.json | 17 +-
.../template-flow/add-template-fields.tsx | 1 -
65 files changed, 922 insertions(+), 2811 deletions(-)
delete mode 100644 apps/documentation/pages/developers/embedding/index.mdx
delete mode 100644 apps/documentation/pages/developers/embedding/preact.mdx
delete mode 100644 apps/documentation/pages/developers/embedding/react.mdx
delete mode 100644 apps/documentation/pages/developers/embedding/solid.mdx
delete mode 100644 apps/documentation/pages/developers/embedding/svelte.mdx
delete mode 100644 apps/documentation/pages/developers/embedding/vue.mdx
delete mode 100644 apps/documentation/pages/developers/local-development/translations.mdx
delete mode 100644 apps/documentation/public/embedding/copy-recipient-token.png
delete mode 100644 apps/documentation/public/embedding/enable-direct-link.png
delete mode 100644 apps/documentation/public/embedding/team-templates.png
delete mode 100644 apps/web/src/app/embed/authenticate.tsx
delete mode 100644 apps/web/src/app/embed/base-schema.ts
delete mode 100644 apps/web/src/app/embed/client-loading.tsx
delete mode 100644 apps/web/src/app/embed/completed.tsx
delete mode 100644 apps/web/src/app/embed/direct/[[...url]]/client.tsx
delete mode 100644 apps/web/src/app/embed/direct/[[...url]]/not-found.tsx
delete mode 100644 apps/web/src/app/embed/direct/[[...url]]/page.tsx
delete mode 100644 apps/web/src/app/embed/direct/[[...url]]/schema.ts
delete mode 100644 apps/web/src/app/embed/document-fields.tsx
delete mode 100644 apps/web/src/app/embed/paywall.tsx
delete mode 100644 apps/web/src/app/embed/sign/[[...url]]/client.tsx
delete mode 100644 apps/web/src/app/embed/sign/[[...url]]/not-found.tsx
delete mode 100644 apps/web/src/app/embed/sign/[[...url]]/page.tsx
delete mode 100644 apps/web/src/app/embed/sign/[[...url]]/schema.ts
delete mode 100644 packages/lib/client-only/hooks/use-throttle-fn.ts
delete mode 100644 packages/lib/server-only/subscription/get-active-subscriptions-by-user-id.ts
diff --git a/.github/actions/cache-build/action.yml b/.github/actions/cache-build/action.yml
index 056b9a193..e1eb4da22 100644
--- a/.github/actions/cache-build/action.yml
+++ b/.github/actions/cache-build/action.yml
@@ -3,7 +3,7 @@ description: 'Cache or restore if necessary'
inputs:
node_version:
required: false
- default: v20.x
+ default: v18.x
runs:
using: 'composite'
steps:
@@ -17,7 +17,7 @@ runs:
**/.turbo/**
**/dist/**
- key: prod-build-${{ github.run_id }}-${{ hashFiles('package-lock.json') }}
+ key: prod-build-${{ github.run_id }}
restore-keys: prod-build-
- run: npm run build
diff --git a/.github/actions/node-install/action.yml b/.github/actions/node-install/action.yml
index 59b542fc8..77483a9a4 100644
--- a/.github/actions/node-install/action.yml
+++ b/.github/actions/node-install/action.yml
@@ -2,7 +2,7 @@ name: 'Setup node and cache node_modules'
inputs:
node_version:
required: false
- default: v20.x
+ default: v18.x
runs:
using: 'composite'
diff --git a/README.md b/README.md
index 178b1f0cf..f32438800 100644
--- a/README.md
+++ b/README.md
@@ -303,10 +303,6 @@ WantedBy=multi-user.target
[](https://app.koyeb.com/deploy?type=git&repository=github.com/documenso/documenso&branch=main&name=documenso-app&builder=dockerfile&dockerfile=/docker/Dockerfile)
-## Elestio
-
-[](https://elest.io/open-source/documenso)
-
## Troubleshooting
### I'm not receiving any emails when using the developer quickstart.
diff --git a/apps/documentation/package.json b/apps/documentation/package.json
index 7ab519307..0c555f39a 100644
--- a/apps/documentation/package.json
+++ b/apps/documentation/package.json
@@ -16,7 +16,7 @@
"@documenso/tailwind-config": "*",
"@documenso/trpc": "*",
"@documenso/ui": "*",
- "next": "14.2.6",
+ "next": "14.0.3",
"next-plausible": "^3.12.0",
"nextra": "^2.13.4",
"nextra-theme-docs": "^2.13.4",
@@ -32,4 +32,4 @@
"tailwindcss": "^3.3.0",
"typescript": "^5"
}
-}
\ No newline at end of file
+}
diff --git a/apps/documentation/pages/developers/_meta.json b/apps/documentation/pages/developers/_meta.json
index a9f3c3823..bb735320f 100644
--- a/apps/documentation/pages/developers/_meta.json
+++ b/apps/documentation/pages/developers/_meta.json
@@ -12,6 +12,5 @@
"title": "API & Integration Guides"
},
"public-api": "Public API",
- "embedding": "Embedding",
"webhooks": "Webhooks"
-}
\ No newline at end of file
+}
diff --git a/apps/documentation/pages/developers/embedding/index.mdx b/apps/documentation/pages/developers/embedding/index.mdx
deleted file mode 100644
index 383c9beb3..000000000
--- a/apps/documentation/pages/developers/embedding/index.mdx
+++ /dev/null
@@ -1,131 +0,0 @@
----
-title: Get Started
-description: Learn how to use embedding to bring signing to your own website or application
----
-
-# Embedding
-
-Our embedding feature lets you integrate our document signing experience into your own application or website. Whether you're building with React, Preact, Vue, Svelte, Solid, or using generalized web components, this guide will help you get started with embedding Documenso.
-
-## Availability
-
-Embedding is currently available for all users on a **Teams Plan** and above, as well as **Early Adopter's** within a team (Early Adopters can create a team for free).
-
-In the future, we will roll out a **Platform Plan** that will offer additional enhancements for embedding, including the option to remove Documenso branding for a more customized experience.
-
-## How Embedding Works
-
-Embedding with Documenso allows you to handle document signing in two main ways:
-
-1. **Using Direct Templates**: Using direct templates you can have an evergreen template that upon completion will create a new document within Documenso.
-2. **Using a Signing Token**: A more advanced option for those running rich integrations with Documenso already. Given a recipients signing token you can embed the signing experience in your application rather than direct the recipient to Documenso.
-
-_For most use-cases we recommend using direct templates, however if you have a need for a more advanced integration, we are happy to help you get started._
-
-## Supported Frameworks
-
-We support embedding across a range of popular JavaScript frameworks, including:
-
-| Framework | Package |
-| --------- | -------------------------------------------------------------------------------- |
-| React | [@documenso/embed-react](https://www.npmjs.com/package/@documenso/embed-react) |
-| Preact | [@documenso/embed-preact](https://www.npmjs.com/package/@documenso/embed-preact) |
-| Vue | [@documenso/embed-vue](https://www.npmjs.com/package/@documenso/embed-vue) |
-| Svelte | [@documenso/embed-svelte](https://www.npmjs.com/package/@documenso/embed-svelte) |
-| Solid | [@documenso/embed-solid](https://www.npmjs.com/package/@documenso/embed-solid) |
-
-Additionally, we provide **web components** for more generalized use. However, please note that web components are still in their early stages and haven't been extensively tested.
-
-## Embedding with Direct Templates
-
-#### Instructions
-
-To get started with embedding using a Direct Template we will need the URL segment which is also referred to as the token for the template.
-
-You can find your URL/Token by performing the following steps:
-
-1. **Navigate to your team's templates within Documenso**
-
-
-
-2. **Click on the direct link template you want to embed**
-
-This will copy the URL to your clipboard, e.g. `https://stg-app.documenso.com/d/-WoSwWVT-fYOERS2MI37k`
-
-**For the above url the token is `-WoSwWVT-fYOERS2MI37k`**
-
-3. Provide the token to the `EmbedDirectTemplate` component in your frameworks SDK
-
-```jsx
-import { EmbedDirectTemplate } from '@documenso/embed-react';
-
-const MyEmbeddingComponent = () => {
- const token = 'YOUR_TOKEN_HERE'; // Replace with the actual token
-
- return ;
-};
-```
-
----
-
-**Converting a regular template to a direct link template**
-
-If you don't currently have any direct link templates you can easily create one by selecting the "Direct Link" option within the actions dropdown on the templates table.
-
-This will show a dialog which will ask you to configure which recipient should be used as the direct link signer.
-
-
-
----
-
-## Embedding with Signing Tokens
-
-To embed the signing process for an ordinary document, you’ll need a **document signing token** for the recipient. This token provides the necessary access to load the document and facilitate the signing process securely.
-
-#### Instructions
-
-1. Retrieve the signing token for the recipient document you want to embed
-
-This will typically be done using an API integration where signing tokens are provided as part of the response when creating a document. Alternatively you can manually get a signing link by clicking hovering over a recipients avatar and clicking their email on a document that you own.
-
-
-
-With the signing url on our clipboard we can extract the token the same way we did for the direct link template.
-
-So `https://stg-app.documenso.com/sign/lm7Tp2_yhvFfzdeJQzYQF` will become `lm7Tp2_yhvFfzdeJQzYQF`
-
-2. Provide the token to the `EmbedSignDocument` component in your frameworks SDK
-
-```jsx
-import { EmbedSignDocument } from '@documenso/embed-react';
-
-const MyEmbeddingComponent = () => {
- const token = 'YOUR_TOKEN_HERE'; // Replace with the actual token
-
- return ;
-};
-```
-
----
-
-## Using Embedding in Your Application
-
-Once you've obtained the appropriate tokens, you can integrate the signing experience into your application. For framework-specific instructions, please refer to the guides provided in our documentation for:
-
-- [React](/developers/embedding/react)
-- [Preact](/developers/embedding/preact)
-- [Vue](/developers/embedding/vue)
-- [Svelte](/developers/embedding/svelte)
-- [Solid](/developers/embedding/solid)
-
-If you're using **web components**, the integration process is slightly different. Keep in mind that web components are currently less tested but can still provide flexibility for general use cases.
-
-## Stay Tuned for the Platform Plan
-
-While embedding is already a powerful tool, we're working on a **Platform Plan** that will introduce even more functionality. This plan will offer:
-
-- Additional customization options
-- The ability to remove Documenso branding
-- Additional controls for the signing experience
-
-More details will be shared as we approach the release.
diff --git a/apps/documentation/pages/developers/embedding/preact.mdx b/apps/documentation/pages/developers/embedding/preact.mdx
deleted file mode 100644
index 808b3aa49..000000000
--- a/apps/documentation/pages/developers/embedding/preact.mdx
+++ /dev/null
@@ -1,77 +0,0 @@
----
-title: Preact Integration
-description: Learn how to use our embedding SDK within your Preact application.
----
-
-# Preact Integration
-
-Our Preact SDK provides a simple way to embed a signing experience within your Preact application. It supports both direct link templates and signing tokens.
-
-## Installation
-
-To install the SDK, run the following command:
-
-```bash
-npm install @documenso/embed-preact
-```
-
-## Usage
-
-To embed a signing experience, you'll need to provide the token for the document you want to embed. This can be done in a few different ways, depending on your use case.
-
-### Direct Link Template
-
-If you have a direct link template, you can simply provide the token for the template to the `EmbedDirectTemplate` component.
-
-```jsx
-import { EmbedDirectTemplate } from '@documenso/embed-preact';
-
-const MyEmbeddingComponent = () => {
- const token = 'YOUR_TOKEN_HERE'; // Replace with the actual token
-
- return ;
-};
-```
-
-#### Props
-
-| Prop | Type | Description |
-| ------------------- | ------------------- | ------------------------------------------------------------------------------------------ |
-| token | string | The token for the document you want to embed |
-| host | string (optional) | The host to be used for the signing experience, relevant for self-hosters |
-| name | string (optional) | The name the signer that will be used by default for signing |
-| lockName | boolean (optional) | Whether or not the name field should be locked disallowing modifications |
-| email | string (optional) | The email the signer that will be used by default for signing |
-| lockEmail | boolean (optional) | Whether or not the email field should be locked disallowing modifications |
-| externalId | string (optional) | The external ID to be used for the document that will be created upon completion |
-| onDocumentReady | function (optional) | A callback function that will be called when the document is loaded and ready to be signed |
-| onDocumentCompleted | function (optional) | A callback function that will be called when the document has been completed |
-| onDocumentError | function (optional) | A callback function that will be called when an error occurs with the document |
-| onFieldSigned | function (optional) | A callback function that will be called when a field has been signed |
-| onFieldUnsigned | function (optional) | A callback function that will be called when a field has been unsigned |
-
-### Signing Token
-
-If you have a signing token, you can provide it to the `EmbedSignDocument` component.
-
-```jsx
-import { EmbedSignDocument } from '@documenso/embed-preact';
-
-const MyEmbeddingComponent = () => {
- const token = 'YOUR_TOKEN_HERE'; // Replace with the actual token
-
- return ;
-};
-```
-
-#### Props
-
-| Prop | Type | Description |
-| ------------------- | ------------------- | ------------------------------------------------------------------------------------------ |
-| token | string | The token for the document you want to embed |
-| host | string (optional) | The host to be used for the signing experience, relevant for self-hosters |
-| name | string (optional) | The name the signer that will be used by default for signing |
-| lockName | boolean (optional) | Whether or not the name field should be locked disallowing modifications |
-| onDocumentReady | function (optional) | A callback function that will be called when the document is loaded and ready to be signed |
-| onDocumentCompleted | function (optional) | A callback function that will be called when the document has been completed |
-| onDocumentError | function (optional) | A callback function that will be called when an error occurs with the document |
diff --git a/apps/documentation/pages/developers/embedding/react.mdx b/apps/documentation/pages/developers/embedding/react.mdx
deleted file mode 100644
index 7ba19474f..000000000
--- a/apps/documentation/pages/developers/embedding/react.mdx
+++ /dev/null
@@ -1,77 +0,0 @@
----
-title: React Integration
-description: Learn how to use our embedding SDK within your React application.
----
-
-# React Integration
-
-Our React SDK provides a simple way to embed a signing experience within your React application. It supports both direct link templates and signing tokens.
-
-## Installation
-
-To install the SDK, run the following command:
-
-```bash
-npm install @documenso/embed-react
-```
-
-## Usage
-
-To embed a signing experience, you'll need to provide the token for the document you want to embed. This can be done in a few different ways, depending on your use case.
-
-### Direct Link Template
-
-If you have a direct link template, you can simply provide the token for the template to the `EmbedDirectTemplate` component.
-
-```jsx
-import { EmbedDirectTemplate } from '@documenso/embed-react';
-
-const MyEmbeddingComponent = () => {
- const token = 'YOUR_TOKEN_HERE'; // Replace with the actual token
-
- return ;
-};
-```
-
-#### Props
-
-| Prop | Type | Description |
-| ------------------- | ------------------- | ------------------------------------------------------------------------------------------ |
-| token | string | The token for the document you want to embed |
-| host | string (optional) | The host to be used for the signing experience, relevant for self-hosters |
-| name | string (optional) | The name the signer that will be used by default for signing |
-| lockName | boolean (optional) | Whether or not the name field should be locked disallowing modifications |
-| email | string (optional) | The email the signer that will be used by default for signing |
-| lockEmail | boolean (optional) | Whether or not the email field should be locked disallowing modifications |
-| externalId | string (optional) | The external ID to be used for the document that will be created upon completion |
-| onDocumentReady | function (optional) | A callback function that will be called when the document is loaded and ready to be signed |
-| onDocumentCompleted | function (optional) | A callback function that will be called when the document has been completed |
-| onDocumentError | function (optional) | A callback function that will be called when an error occurs with the document |
-| onFieldSigned | function (optional) | A callback function that will be called when a field has been signed |
-| onFieldUnsigned | function (optional) | A callback function that will be called when a field has been unsigned |
-
-### Signing Token
-
-If you have a signing token, you can provide it to the `EmbedSignDocument` component.
-
-```jsx
-import { EmbedSignDocument } from '@documenso/embed-react';
-
-const MyEmbeddingComponent = () => {
- const token = 'YOUR_TOKEN_HERE'; // Replace with the actual token
-
- return ;
-};
-```
-
-#### Props
-
-| Prop | Type | Description |
-| ------------------- | ------------------- | ------------------------------------------------------------------------------------------ |
-| token | string | The token for the document you want to embed |
-| host | string (optional) | The host to be used for the signing experience, relevant for self-hosters |
-| name | string (optional) | The name the signer that will be used by default for signing |
-| lockName | boolean (optional) | Whether or not the name field should be locked disallowing modifications |
-| onDocumentReady | function (optional) | A callback function that will be called when the document is loaded and ready to be signed |
-| onDocumentCompleted | function (optional) | A callback function that will be called when the document has been completed |
-| onDocumentError | function (optional) | A callback function that will be called when an error occurs with the document |
diff --git a/apps/documentation/pages/developers/embedding/solid.mdx b/apps/documentation/pages/developers/embedding/solid.mdx
deleted file mode 100644
index 7feab2034..000000000
--- a/apps/documentation/pages/developers/embedding/solid.mdx
+++ /dev/null
@@ -1,77 +0,0 @@
----
-title: Solid.js Integration
-description: Learn how to use our embedding SDK within your Solid.js application.
----
-
-# Solid.js Integration
-
-Our Solid.js SDK provides a simple way to embed a signing experience within your Solid.js application. It supports both direct link templates and signing tokens.
-
-## Installation
-
-To install the SDK, run the following command:
-
-```bash
-npm install @documenso/embed-solid
-```
-
-## Usage
-
-To embed a signing experience, you'll need to provide the token for the document you want to embed. This can be done in a few different ways, depending on your use case.
-
-### Direct Link Template
-
-If you have a direct link template, you can simply provide the token for the template to the `EmbedDirectTemplate` component.
-
-```jsx
-import { EmbedDirectTemplate } from '@documenso/embed-solid';
-
-const MyEmbeddingComponent = () => {
- const token = 'YOUR_TOKEN_HERE'; // Replace with the actual token
-
- return ;
-};
-```
-
-#### Props
-
-| Prop | Type | Description |
-| ------------------- | ------------------- | ------------------------------------------------------------------------------------------ |
-| token | string | The token for the document you want to embed |
-| host | string (optional) | The host to be used for the signing experience, relevant for self-hosters |
-| name | string (optional) | The name the signer that will be used by default for signing |
-| lockName | boolean (optional) | Whether or not the name field should be locked disallowing modifications |
-| email | string (optional) | The email the signer that will be used by default for signing |
-| lockEmail | boolean (optional) | Whether or not the email field should be locked disallowing modifications |
-| externalId | string (optional) | The external ID to be used for the document that will be created upon completion |
-| onDocumentReady | function (optional) | A callback function that will be called when the document is loaded and ready to be signed |
-| onDocumentCompleted | function (optional) | A callback function that will be called when the document has been completed |
-| onDocumentError | function (optional) | A callback function that will be called when an error occurs with the document |
-| onFieldSigned | function (optional) | A callback function that will be called when a field has been signed |
-| onFieldUnsigned | function (optional) | A callback function that will be called when a field has been unsigned |
-
-### Signing Token
-
-If you have a signing token, you can provide it to the `EmbedSignDocument` component.
-
-```jsx
-import { EmbedSignDocument } from '@documenso/embed-solid';
-
-const MyEmbeddingComponent = () => {
- const token = 'YOUR_TOKEN_HERE'; // Replace with the actual token
-
- return ;
-};
-```
-
-#### Props
-
-| Prop | Type | Description |
-| ------------------- | ------------------- | ------------------------------------------------------------------------------------------ |
-| token | string | The token for the document you want to embed |
-| host | string (optional) | The host to be used for the signing experience, relevant for self-hosters |
-| name | string (optional) | The name the signer that will be used by default for signing |
-| lockName | boolean (optional) | Whether or not the name field should be locked disallowing modifications |
-| onDocumentReady | function (optional) | A callback function that will be called when the document is loaded and ready to be signed |
-| onDocumentCompleted | function (optional) | A callback function that will be called when the document has been completed |
-| onDocumentError | function (optional) | A callback function that will be called when an error occurs with the document |
diff --git a/apps/documentation/pages/developers/embedding/svelte.mdx b/apps/documentation/pages/developers/embedding/svelte.mdx
deleted file mode 100644
index d6a9abcf6..000000000
--- a/apps/documentation/pages/developers/embedding/svelte.mdx
+++ /dev/null
@@ -1,79 +0,0 @@
----
-title: Svelte Integration
-description: Learn how to use our embedding SDK within your Svelte application.
----
-
-# Svelte Integration
-
-Our Svelte SDK provides a simple way to embed a signing experience within your Svelte application. It supports both direct link templates and signing tokens.
-
-## Installation
-
-To install the SDK, run the following command:
-
-```bash
-npm install @documenso/embed-svelte
-```
-
-## Usage
-
-To embed a signing experience, you'll need to provide the token for the document you want to embed. This can be done in a few different ways, depending on your use case.
-
-### Direct Link Template
-
-If you have a direct link template, you can simply provide the token for the template to the `EmbedDirectTemplate` component.
-
-```html
-
-
-
-
-
-```
-
-#### Props
-
-| Prop | Type | Description |
-| ------------------- | ------------------- | ------------------------------------------------------------------------------------------ |
-| token | string | The token for the document you want to embed |
-| host | string (optional) | The host to be used for the signing experience, relevant for self-hosters |
-| name | string (optional) | The name the signer that will be used by default for signing |
-| lockName | boolean (optional) | Whether or not the name field should be locked disallowing modifications |
-| email | string (optional) | The email the signer that will be used by default for signing |
-| lockEmail | boolean (optional) | Whether or not the email field should be locked disallowing modifications |
-| externalId | string (optional) | The external ID to be used for the document that will be created upon completion |
-| onDocumentReady | function (optional) | A callback function that will be called when the document is loaded and ready to be signed |
-| onDocumentCompleted | function (optional) | A callback function that will be called when the document has been completed |
-| onDocumentError | function (optional) | A callback function that will be called when an error occurs with the document |
-| onFieldSigned | function (optional) | A callback function that will be called when a field has been signed |
-| onFieldUnsigned | function (optional) | A callback function that will be called when a field has been unsigned |
-
-### Signing Token
-
-If you have a signing token, you can provide it to the `EmbedSignDocument` component.
-
-```jsx
-import { EmbedSignDocument } from '@documenso/embed-svelte';
-
-const MyEmbeddingComponent = () => {
- const token = 'YOUR_TOKEN_HERE'; // Replace with the actual token
-
- return ;
-};
-```
-
-#### Props
-
-| Prop | Type | Description |
-| ------------------- | ------------------- | ------------------------------------------------------------------------------------------ |
-| token | string | The token for the document you want to embed |
-| host | string (optional) | The host to be used for the signing experience, relevant for self-hosters |
-| name | string (optional) | The name the signer that will be used by default for signing |
-| lockName | boolean (optional) | Whether or not the name field should be locked disallowing modifications |
-| onDocumentReady | function (optional) | A callback function that will be called when the document is loaded and ready to be signed |
-| onDocumentCompleted | function (optional) | A callback function that will be called when the document has been completed |
-| onDocumentError | function (optional) | A callback function that will be called when an error occurs with the document |
diff --git a/apps/documentation/pages/developers/embedding/vue.mdx b/apps/documentation/pages/developers/embedding/vue.mdx
deleted file mode 100644
index 588de28b0..000000000
--- a/apps/documentation/pages/developers/embedding/vue.mdx
+++ /dev/null
@@ -1,79 +0,0 @@
----
-title: Vue Integration
-description: Learn how to use our embedding SDK within your Vue application.
----
-
-# Vue Integration
-
-Our Vue SDK provides a simple way to embed a signing experience within your Vue application. It supports both direct link templates and signing tokens.
-
-## Installation
-
-To install the SDK, run the following command:
-
-```bash
-npm install @documenso/embed-vue
-```
-
-## Usage
-
-To embed a signing experience, you'll need to provide the token for the document you want to embed. This can be done in a few different ways, depending on your use case.
-
-### Direct Link Template
-
-If you have a direct link template, you can simply provide the token for the template to the `EmbedDirectTemplate` component.
-
-```html
-
-
-
-
-
-```
-
-#### Props
-
-| Prop | Type | Description |
-| ------------------- | ------------------- | ------------------------------------------------------------------------------------------ |
-| token | string | The token for the document you want to embed |
-| host | string (optional) | The host to be used for the signing experience, relevant for self-hosters |
-| name | string (optional) | The name the signer that will be used by default for signing |
-| lockName | boolean (optional) | Whether or not the name field should be locked disallowing modifications |
-| email | string (optional) | The email the signer that will be used by default for signing |
-| lockEmail | boolean (optional) | Whether or not the email field should be locked disallowing modifications |
-| externalId | string (optional) | The external ID to be used for the document that will be created upon completion |
-| onDocumentReady | function (optional) | A callback function that will be called when the document is loaded and ready to be signed |
-| onDocumentCompleted | function (optional) | A callback function that will be called when the document has been completed |
-| onDocumentError | function (optional) | A callback function that will be called when an error occurs with the document |
-| onFieldSigned | function (optional) | A callback function that will be called when a field has been signed |
-| onFieldUnsigned | function (optional) | A callback function that will be called when a field has been unsigned |
-
-### Signing Token
-
-If you have a signing token, you can provide it to the `EmbedSignDocument` component.
-
-```jsx
-import { EmbedSignDocument } from '@documenso/embed-vue';
-
-const MyEmbeddingComponent = () => {
- const token = 'YOUR_TOKEN_HERE'; // Replace with the actual token
-
- return ;
-};
-```
-
-#### Props
-
-| Prop | Type | Description |
-| ------------------- | ------------------- | ------------------------------------------------------------------------------------------ |
-| token | string | The token for the document you want to embed |
-| host | string (optional) | The host to be used for the signing experience, relevant for self-hosters |
-| name | string (optional) | The name the signer that will be used by default for signing |
-| lockName | boolean (optional) | Whether or not the name field should be locked disallowing modifications |
-| onDocumentReady | function (optional) | A callback function that will be called when the document is loaded and ready to be signed |
-| onDocumentCompleted | function (optional) | A callback function that will be called when the document has been completed |
-| onDocumentError | function (optional) | A callback function that will be called when an error occurs with the document |
diff --git a/apps/documentation/pages/developers/local-development/_meta.json b/apps/documentation/pages/developers/local-development/_meta.json
index 725e5e278..ff9f44207 100644
--- a/apps/documentation/pages/developers/local-development/_meta.json
+++ b/apps/documentation/pages/developers/local-development/_meta.json
@@ -3,6 +3,5 @@
"quickstart": "Developer Quickstart",
"manual": "Manual Setup",
"gitpod": "Gitpod",
- "signing-certificate": "Signing Certificate",
- "translations": "Translations"
-}
\ No newline at end of file
+ "signing-certificate": "Signing Certificate"
+}
diff --git a/apps/documentation/pages/developers/local-development/translations.mdx b/apps/documentation/pages/developers/local-development/translations.mdx
deleted file mode 100644
index a776dc50c..000000000
--- a/apps/documentation/pages/developers/local-development/translations.mdx
+++ /dev/null
@@ -1,128 +0,0 @@
----
-title: Translations
-description: Handling translations in code.
----
-
-# About
-
-Documenso uses the following stack to handle translations:
-
-- [Lingui](https://lingui.dev/) - React i10n library
-- [Crowdin](https://crowdin.com/) - Handles syncing translations
-- [OpenAI](https://openai.com/) - Provides AI translations
-
-Additional reading can be found in the [Lingui documentation](https://lingui.dev/introduction).
-
-## Requirements
-
-You **must** insert **`setupI18nSSR()`** when creating any of the following files:
-
-- Server layout.tsx
-- Server page.tsx
-- Server loading.tsx
-
-Server meaning it does not have `'use client'` in it.
-
-```tsx
-import { setupI18nSSR } from '@documenso/lib/client-only/providers/i18n.server';
-
-export default function SomePage() {
- setupI18nSSR(); // Required if there are translations within the page, or nested in components.
-
- // Rest of code...
-}
-```
-
-Additional information can be found [here.](https://lingui.dev/tutorials/react-rsc#pages-layouts-and-lingui)
-
-## Quick guide
-
-If you require more in-depth information, please see the [Lingui documentation](https://lingui.dev/introduction).
-
-### HTML
-
-Wrap all text to translate in **``** tags exported from **@lingui/macro** (not @lingui/react).
-
-```html
-
- Title
-
-```
-
-For text that is broken into elements, but represent a whole sentence, you must wrap it in a Trans tag so ensure the full message is extracted correctly.
-
-```html
-
-
- This is one
- full
- sentence
-
-
-```
-
-### Constants outside of react components
-
-```tsx
-import { Trans, msg } from '@lingui/macro';
-import { useLingui } from '@lingui/react';
-
-// Wrap text in msg`text to translate` when it's in a constant here, or another file/package.
-export const CONSTANT_WITH_MSG = {
- foo: msg`Hello`,
- bar: msg`World`,
-};
-
-export const SomeComponent = () => {
- const { _ } = useLingui();
-
- return (
-
- {/* This will render the correct translated text. */}
-
{_(CONSTANT_WITH_MSG.foo)}
-
- );
-};
-```
-
-### Plurals
-
-Lingui provides a Plural component to make it easy. See full documentation [here.](https://lingui.dev/ref/macro#plural-1)
-
-```tsx
-// Basic usage.
-
-```
-
-### Dates
-
-Lingui provides a [DateTime instance](https://lingui.dev/ref/core#i18n.date) with the configured locale.
-
-#### Server components
-
-Note that the i18n instance is coming from **setupI18nSSR**.
-
-```tsx
-import { Trans } from '@lingui/macro';
-import { useLingui } from '@lingui/react';
-
-export const SomeComponent = () => {
- const { i18n } = setupI18nSSR();
-
- return The current date is {i18n.date(new Date(), { dateStyle: 'short' })};
-};
-```
-
-#### Client components
-
-Note that the i18n instance is coming from the **import**.
-
-```tsx
-import { i18n } from '@lingui/core';
-import { Trans } from '@lingui/macro';
-import { useLingui } from '@lingui/react';
-
-export const SomeComponent = () => {
- return The current date is {i18n.date(new Date(), { dateStyle: 'short' })};
-};
-```
diff --git a/apps/documentation/pages/users/signing-documents/fields.mdx b/apps/documentation/pages/users/signing-documents/fields.mdx
index 005ed2595..bf02dd058 100644
--- a/apps/documentation/pages/users/signing-documents/fields.mdx
+++ b/apps/documentation/pages/users/signing-documents/fields.mdx
@@ -15,7 +15,7 @@ The signature field collects the signer's signature. It's required for each reci
The field doesn't have any additional settings. You just need to place it on the document where you want the signer to sign.
-
+
### Document Signing View
@@ -23,11 +23,11 @@ The recipient will see the signature field when they open the document to sign.
The recipient must click on the signature field to open the signing view, where they can sign using their mouse, touchpad, or touchscreen.
-
+
The image below shows the signature field signed by the recipient.
-
+
After signing, the recipient can click the "Complete" button to complete the signing process.
@@ -39,7 +39,7 @@ The email field is used to collect the signer's email address.
The field doesn't have any additional settings. You just need to place it on the document where you want the signer to sign.
-
+
### Document Signing View
@@ -47,11 +47,11 @@ When the recipient opens the document to sign, they will see the email field.
The recipient must click on the email field to automatically sign the field with the email associated with their account.
-
+
The image below shows the email field signed by the recipient.
-
+
After entering their email address, the recipient can click the "Complete" button to complete the signing process.
@@ -63,7 +63,7 @@ The name field is used to collect the signer's name.
The field doesn't have any additional settings. You just need to place it on the document where you want the signer to sign.
-
+
### Document Signing View
@@ -71,11 +71,11 @@ When the recipient opens the document to sign, they will see the name field.
The recipient must click on the name field, which will automatically sign the field with the name associated with their account.
-
+
The image below shows the name field signed by the recipient.
-
+
After entering their name, the recipient can click the "Complete" button to complete the signing process.
@@ -87,7 +87,7 @@ The date field is used to collect the date of the signature.
The field doesn't have any additional settings. You just need to place it on the document where you want the signer to sign.
-
+
### Document Signing View
@@ -95,11 +95,11 @@ When the recipient opens the document to sign, they will see the date field.
The recipient must click on the date field to automatically sign the field with the current date and time.
-
+
The image below shows the date field signed by the recipient.
-
+
After entering the date, the recipient can click the "Complete" button to complete the signing process.
@@ -111,11 +111,11 @@ The text field is used to collect text input from the signer.
Place the text field on the document where you want the signer to enter text. The text field comes with additional settings that can be configured.
-
+
To open the settings, click on the text field and then on the "Sliders" icon. That opens the settings panel on the right side of the screen.
-
+
The text field settings include:
@@ -137,7 +137,7 @@ It also comes with a couple of rules:
Let's look at the following example.
-
+
The field is configured as follows:
@@ -156,23 +156,23 @@ What the recipient sees when they open the document to sign depends on the setti
In this case, the recipient sees the text field signed with the default value.
-
+
The recipient can modify the text field value since the field is not read-only. To change the value, the recipient must click the field to un-sign it.
Once it's unsigned, the field uses the label set by the sender.
-
+
To sign the field with a different value, the recipient needs to click on the field and enter the new value.
-
+
Since the text field has a character limit, the recipient must enter a value that doesn't exceed the limit. Otherwise, an error message will appear, and the field will not be signed.
The image below illustrates the text field signed with a new value.
-
+
After signing the field, the recipient can click the "Complete" button to complete the signing process.
@@ -184,11 +184,11 @@ The number field is used for collecting a number input from the signer.
Place the number field on the document where you want the signer to enter a number. The number field comes with additional settings that can be configured.
-
+
To open the settings, click on the number field and then on the "Sliders" icon. That opens the settings panel on the right side of the screen.
-
+
The number field settings include:
@@ -221,7 +221,7 @@ In this example, the number field is configured as follows:
- Validation:
- Min value: 5, Max value: 50
-
+
Since the field has a label set, the label is displayed instead of the default number field value - "Add number".
@@ -231,23 +231,23 @@ What the recipient sees when they open the document to sign depends on the setti
The recipient sees the number field signed with the default value in this case.
-
+
Since the number field is not read-only, the recipient can modify its value. To change the value, the recipient must click the field to un-sign it.
Once it's unsigned, the field uses the label set by the sender.
-
+
To sign the field with a different value, the recipient needs to click on the field and enter the new value.
-
+
Since the number field has a validation rule set, the recipient must enter a value that meets the rules. In this example, the value needs to be between 5 and 50. Otherwise, an error message will appear, and the field will not be signed.
The image below illustrates the text field signed with a new value.
-
+
After signing the field, the recipient can click the "Complete" button to complete the signing process.
@@ -259,11 +259,11 @@ The radio field is used to collect a single choice from the signer.
Place the radio field on the document where you want the signer to select a choice. The radio field comes with additional settings that can be configured.
-
+
To open the settings, click on the radio field and then on the "Sliders" icon. That opens the settings panel on the right side of the screen.
-
+
The radio field settings include:
@@ -293,7 +293,7 @@ In this example, the radio field is configured as follows:
- Empty value
- Option 3
-
+
Since the field contains radio options, it displays them instead of the default radio field value, "Radio".
@@ -303,11 +303,11 @@ What the recipient sees when they open the document to sign depends on the setti
In this case, the recipient sees the radio field unsigned because the sender didn't select a value.
-
+
The recipient can select one of the options by clicking on the radio button next to the option.
-
+
After signing the field, the recipient can click the "Complete" button to complete the signing process.
@@ -319,11 +319,11 @@ The checkbox field is used to collect multiple choices from the signer.
Place the checkbox field on the document where you want the signer to select choices. The checkbox field comes with additional settings that can be configured.
-
+
To open the settings, click on the checkbox field and then on the "Sliders" icon. That opens the settings panel on the right side of the screen.
-
+
The checkbox field settings include the following:
@@ -356,7 +356,7 @@ In this example, the checkbox field is configured as follows:
- Option 3 (checked)
- Empty value
-
+
Since the field contains checkbox options, it displays them instead of the default checkbox field value, "Checkbox".
@@ -366,7 +366,7 @@ What the recipient sees when they open the document to sign depends on the setti
In this case, the recipient sees the checkbox field signed with the values selected by the sender.
-
+
Since the field is required, the recipient can either sign with the values selected by the sender or modify the values.
@@ -377,11 +377,11 @@ The values can be modified in 2 ways:
The image below illustrates the checkbox field with the values cleared by the recipient. Since the field is required, it has a red border instead of the yellow one (non-required fields).
-
+
Then, the recipient can select values other than the ones chosen by the sender.
-
+
After signing the field, the recipient can click the "Complete" button to complete the signing process.
@@ -393,11 +393,11 @@ The dropdown/select field collects a single choice from a list of options.
Place the dropdown/select field on the document where you want the signer to select a choice. The dropdown/select field comes with additional settings that can be configured.
-
+
To open the settings, click on the dropdown/select field and then on the "Sliders" icon. That opens the settings panel on the right side of the screen.
-
+
The dropdown/select field settings include:
@@ -433,14 +433,14 @@ What the recipient sees when they open the document to sign depends on the setti
In this case, the recipient sees the dropdown/select field with the default label, "-- Select ---" since the sender has not set a default value.
-
+
The recipient can modify the dropdown/select field value since the field is not read-only. To change the value, the recipient must click on the field for the dropdown list to appear.
-
+
The recipient can select one of the options from the list. The image below illustrates the dropdown/select field signed with a new value.
-
+
After signing the field, the recipient can click the "Complete" button to complete the signing process.
diff --git a/apps/documentation/pages/users/signing-documents/index.mdx b/apps/documentation/pages/users/signing-documents/index.mdx
index a0a32399d..df43b5851 100644
--- a/apps/documentation/pages/users/signing-documents/index.mdx
+++ b/apps/documentation/pages/users/signing-documents/index.mdx
@@ -18,17 +18,17 @@ The guide assumes you have a Documenso account. If you don't, you can create a f
Navigate to the [Documenso dashboard](https://app.documenso.com/documents) and click on the "Add a document" button. Select the document you want to upload and wait for the upload to complete.
-
+
After the upload is complete, you will be redirected to the document's page. You can configure the document's settings and add recipients and fields here.
-
+
### (Optional) Advanced Options
Click on the "Advanced options" button to access additional settings for the document. You can set an external ID, date format, time zone, and the redirect URL.
-
+
The external ID allows you to set a custom ID for the document that can be used to identify the document in your external system(s).
@@ -45,7 +45,7 @@ The available options are:
- **Require account** - The recipient must be signed in to view the document.
- **None** - The document can be accessed directly by the URL sent to the recipient.
-
+
The "Document Access" feature is only available for Enterprise accounts.
@@ -61,7 +61,7 @@ The available options are:
- **Require 2FA** - The recipient must have an account and 2FA enabled via their settings.
- **None** - No authentication required.
-
+
This can be overridden by setting the authentication requirements directly for each recipient in the next step.
@@ -75,11 +75,11 @@ Click the "+ Add Signer" button to add a new recipient. You can configure the re
You can choose any option from the ["Recipient Authentication"](#optional-recipient-authentication) section, or you can set it to "Inherit authentication method" to use the global action signing authentication method configured in the "General Settings" step.
-
+
You can also set the recipient's role, which determines their actions and permissions in the document.
-
+
#### Roles
@@ -96,7 +96,7 @@ Documenso has 4 roles for recipients with different permissions and actions.
Documenso supports 9 different field types that can be added to the document. Each field type collects various information from the recipients when they sign the document.
-
+
The available field types are:
@@ -121,13 +121,13 @@ All fields can be placed anywhere on the document and resized as needed.
Signer Roles require at least 1 signature field. You will get an error message if you try to send a document without a signature field.
-
+
### Email Settings
Before sending the document, you can configure the email settings and customize the subject line, message, and sender name.
-
+
If you leave the email subject and message empty, Documenso will use the default email template.
@@ -135,13 +135,13 @@ If you leave the email subject and message empty, Documenso will use the default
After configuring the document, click the "Send" button to send the document to the recipients. The recipients will receive an email with a link to sign the document.
-
+
#### Signing Link
If you need to copy the signing link for each recipient, you can do so by clicking on the recipient whose link you want to copy. The signing link is copied automatically to your clipboard.
-
+
The signing link has the following format:
diff --git a/apps/documentation/pages/users/templates.mdx b/apps/documentation/pages/users/templates.mdx
index aa3c86798..ba7fc7fd8 100644
--- a/apps/documentation/pages/users/templates.mdx
+++ b/apps/documentation/pages/users/templates.mdx
@@ -10,15 +10,15 @@ Documenso allows you to create templates, which are reusable documents. Template
To create a new template, navigate to the ["Templates" page](https://app.documenso.com/templates) and click on the "New Template" button.
-
+
Clicking on the "New Template" button opens a new modal to upload the document you want to use as a template. Select the document and wait for Documenso to upload it to your account.
-
+
Once the upload is complete, Documenso opens the template configuration page.
-
+
You can then configure the template by adding recipients, fields, and other options.
@@ -28,7 +28,7 @@ When you send a document for signing, Documenso emails the recipients with a lin
Documenso uses a generic subject and message but also allows you to customize them for each document and template.
-
+
To configure the email options, click the "Email Options" tab and fill in the subject and message fields. Every time you use this template for signing, Documenso will use the custom subject and message you provided. They can also be overridden before sending the document.
@@ -36,7 +36,7 @@ To configure the email options, click the "Email Options" tab and fill in the su
The template also has advanced options that you can configure. These options include settings such as the external ID, date format, time zone and the redirect URL.
-
+
The external ID allows you to set a custom ID for the document that can be used to identify the document in your external system(s).
@@ -50,7 +50,7 @@ You can add placeholders for the template recipients. Placeholders specify where
You can also add recipients directly to the template. Recipients are the people who will receive the document for signing.
-
+
If you add placeholders to the template, you must replace them with actual recipients when creating a document from it. See the modal from the ["Use a Template"](#use-a-template) section.
@@ -70,7 +70,7 @@ Documenso provides the following field types:
- **Checkbox** - Collects multiple choices from the signer
- **Dropdown/Select** - Collects a single choice from a list of choices
-
+
After adding the fields, press the "Save Template" button to save the template.
@@ -85,7 +85,7 @@ Click on the "Use Template" button to create a new document from the template. B
After filling in the recipients, click the "Create Document" button to create the document in your account.
-
+
You can also send the document straight to the recipients for signing by checking the "Send document" checkbox.
diff --git a/apps/documentation/public/embedding/copy-recipient-token.png b/apps/documentation/public/embedding/copy-recipient-token.png
deleted file mode 100644
index fde239b8370a528fd98f8d3dd22070546f53dec2..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 172213
zcmeFZcT`hNw?B?3q9CA15fHE;(gmb91rZ@qr1u~gkQRDxq7TvpR3JzfA@m-4M@s0u
zw}|u(0s#^dz9&A9_r1S+@8b2}-&!wgg>!PwoS8W@d-ne9&)$<@H5CO4GDb2YA|eXK
zr;pW%h%Ryy5uKI2a2~i~j=C&JM082UQcg}yQBLlLnxmb$r459L=xK1Y4ymq2J6)2&
zrwl^y>6>SP-%xoOV-VRY*
zetm}X{`q?`F?{Co3V~-|yG~N
z&d=sg#6&>?Gu}%6y6;|`ouK}FqnR8cs^QNC5jFBZ=1gy{rqMge
z)DJNig@!OUT&Z^gZV?SJT*l5XDF2X4IA27ucSVkS&?5chOXQJA_ufrqUJ<7YT#L6v
zqKRJAiN;85oNyyg%4!T(OfGSaW$JzUpgW%MVj8;ej4bj6XLIe>y|#Nnr8n?5<~wmW
zpK$06d^i^%W7XDa(G+*aC@Ar8>h=8~ikplzj$jVNiSWoYK4lq=@CI6Sb}qZd8vrT%A>et0P49&1d2w`IP(o
z)TTl~%)3rMzC}r!g%po{d@D_Dnak}*9%M%H)xN=n8gLE9{R}yw)w}L
zJNP%bhnMAj3bk2ul4KIdUG;95vRzue@DurtswaT&!UfGP<~6z?>K{?!tj#3&qL3m{
z`2?oCJ!JQ}%0_{iOQtc$-$WO5C5wo7p9V-L-Q*1l*O?Edhd9Zl(jI;9d?;%2mZ*V9
zeQcod&IgLWHfkwqx0U*@o~w9BEZ|QhdM~!|isDa}E0V4Lx3<|I6Mv9-&;y>~A`19$
zBHqjyPI*Ia#^4_7$FoVY38dd1^47pQ6oTJG;+q
za)DW;C*s#WrbsUC;7CyE3*<}pS1wW?3-TLZ75(&f{1U#+x^sRjH}}(#ijazw
z3Yf-+oWuL`#&rX`f_C0y`6M
zu3Wh#Z+>IRY=N<
zSCZl^-H+K*<(IvkFILgz$-1TPFDvfd@?_q44E}<<)}YC6)J5ae@c9~3=r{GkOV8eP
ze^V-Q%q7cdiTmzT7vf@CJEo8jH0W@ClSs$@LelHq?e;@%Z~i(KRPg9r-l5j<&6z;I
z+kF?_o%4Fb?k{%@)OP3D&8W*A7bh}9(n9`$bI)JB6u)3G?*#K
zrTJ4kr$4j?$>X
zD6c4y?CfmwY?f^PY}sM4Y-_E9>?94JOw7k@`O?(ltSn6qmy0f>`{(wB_bI}jAif^;
ztG^;CVJoqk;Fvf&K`K-gm&&LRRv>JUC!1%y5i$XCDXxNxgM8k2e)O!woY@Dh)-t}N
z;G!ryuVVʃ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