Compare commits

...
Author SHA1 Message Date
ephraimduncan a5147acd09 fix: correct attachment setting tests and docs
The E2E email settings checks now include `attachDocument`.
The API docs example sends the full `emailSettings` object,
because each omitted setting becomes `true`.
The admin view and the settings form use the same label for the attachment setting.
The completion email handler keeps the file name code from main.
2026-09-30 22:10:13 +00:00
ephraimduncan b8e6ba1c12 chore: remove translation catalog changes 2026-09-30 21:50:56 +00:00
ephraimduncan 917c698160 chore: remove issue 2766 test changes 2026-09-30 21:03:40 +00:00
ephraimduncan b4f5238206 feat: allow omitting document PDFs from emails 2026-09-30 21:02:42 +00:00
22 changed files with 147 additions and 44 deletions
@@ -569,6 +569,40 @@ const document = await response.json();
</Tab>
</Tabs>
### Omit document PDFs from email
Set `meta.emailSettings.attachDocument` to `false` when you create or update a document or template. Completion emails still go to the owner and to the enabled recipients, including CC recipients. These emails keep their document links but do not include the PDFs.
| Field | Type | Required | Description |
| ----------------------------------- | ------- | -------- | ------------------------------------------------------------- |
| `meta.emailSettings.attachDocument` | boolean | No | Attach completed document PDFs to emails. Defaults to `true`. |
The `emailSettings` object replaces all saved email settings. Each setting that you leave out becomes `true`. To change only the attachments, send the complete object with your current values:
```json
{
"envelopeId": "envelope_abc123",
"meta": {
"emailSettings": {
"attachDocument": false,
"recipientSigningRequest": true,
"recipientRemoved": true,
"recipientSigned": true,
"documentPending": true,
"documentCompleted": true,
"documentDeleted": true,
"ownerDocumentCompleted": true,
"ownerRecipientExpired": true,
"ownerDocumentCreated": true
}
}
}
```
When you use a template with `/envelope/use`, set the option in `override.emailSettings`. The document and template APIs, including API v1, accept the same option. The API rejects values that are not booleans.
If you omit the email settings on creation, the document inherits the team's defaults, which can inherit from the organisation. Existing documents and templates keep their saved settings when those defaults change.
---
## Send Document
@@ -48,6 +48,12 @@ Or you can customize it before sending the document, by clicking on the **Docume
![Editor email settings](/document-signing/documenso-editor-email-settings.webp)
### Document PDF attachments
In **Document Settings > Notifications**, clear **Attach completed document PDFs to emails** to send completion emails with document links only. This applies to the owner and all recipients, including CCs. The email notifications remain enabled, and recipients can access the document through their links.
PDF attachments are enabled by default. Signing invitations and pending emails already include links without document PDFs. You can also set the attachment default for new documents and templates in your [email preferences](/docs/users/organisations/preferences/email).
### Reply-to email (optional)
Set a reply-to address so recipient replies go to a specific email instead of the default.
@@ -25,6 +25,12 @@ To access the preferences, navigate to either the organisation or teams settings
| **Reply to email** | Email address used in the "Reply To" field in outgoing emails. Leave blank to inherit from the organisation. |
| **Default Email Settings** | Controls which emails are sent to recipients during document signing (e.g. signing invitations, completion notifications). Teams can inherit from the organisation or override with custom settings. |
### Document PDF attachments
Under **Default Email Settings**, clear **Attach completed document PDFs to emails** to omit PDFs from completion emails to the owner and all recipients, including CCs. Emails still include document links. Attachments are enabled by default.
Teams inherit this preference with the other email settings. Select **Override organisation settings** to configure it for a team, or **Inherit from organisation** to restore inheritance. Changes apply to new documents and templates; existing documents and templates keep their saved settings. You can change the attachment setting for an individual document or template in **Document Settings > Notifications**.
## See Also
- [Email Domains](/docs/users/organisations/email-domains) - Send emails from your own domain
@@ -10,6 +10,7 @@ import type { ReactNode } from 'react';
import { DetailsCard, DetailsValue } from '~/components/general/admin-details';
const EMAIL_SETTINGS_LABELS: Record<keyof TDocumentEmailSettings, MessageDescriptor> = {
attachDocument: msg`Attach completed document PDFs to emails`,
recipientSigningRequest: msg`Recipient signing request`,
recipientRemoved: msg`Recipient removed`,
recipientSigned: msg`Recipient signed`,
@@ -35,7 +35,7 @@ export default function OrganisationSettingsGeneral() {
emailId,
emailReplyTo: emailReplyTo || null,
// emailReplyToName,
emailDocumentSettings,
emailDocumentSettings: emailDocumentSettings ?? undefined,
includeSenderDetails: includeSenderDetails ?? undefined,
},
});
+3 -3
View File
@@ -8,7 +8,7 @@ import {
ZDocumentActionAuthTypesSchema,
ZRecipientActionAuthTypesSchema,
} from '@documenso/lib/types/document-auth';
import { ZDocumentEmailSettingsSchema } from '@documenso/lib/types/document-email';
import { ZDocumentEmailSettingsInputSchema } from '@documenso/lib/types/document-email';
import { ZEnvelopeAttachmentTypeSchema } from '@documenso/lib/types/envelope-attachment';
import { ZFieldMetaPrefillFieldsSchema, ZFieldMetaSchema } from '@documenso/lib/types/field-meta';
import { ZRecipientSigningOrderSchema } from '@documenso/lib/types/recipient';
@@ -172,7 +172,7 @@ export const ZCreateDocumentMutationSchema = z.object({
uploadSignatureEnabled: z.boolean().optional().default(true),
drawSignatureEnabled: z.boolean().optional().default(true),
distributionMethod: z.nativeEnum(DocumentDistributionMethod).optional(),
emailSettings: ZDocumentEmailSettingsSchema.optional(),
emailSettings: ZDocumentEmailSettingsInputSchema.optional(),
})
.partial()
.optional()
@@ -341,7 +341,7 @@ export const ZGenerateDocumentFromTemplateMutationSchema = z.object({
typedSignatureEnabled: z.boolean(),
uploadSignatureEnabled: z.boolean(),
drawSignatureEnabled: z.boolean(),
emailSettings: ZDocumentEmailSettingsSchema,
emailSettings: ZDocumentEmailSettingsInputSchema,
})
.partial()
.optional(),
@@ -198,6 +198,7 @@ test.describe('API V2 Envelopes', () => {
drawSignatureEnabled: false,
emailReplyTo: userA.email,
emailSettings: {
attachDocument: false,
recipientSigningRequest: false,
recipientRemoved: false,
recipientSigned: false,
@@ -230,6 +230,7 @@ test('[ORGANISATIONS]: manage email preferences', async ({ page }) => {
// Check that the team settings have inherited these values.
expect(teamSettings.emailReplyTo).toEqual('organisation@documenso.com');
expect(teamSettings.emailDocumentSettings).toEqual({
attachDocument: true,
recipientSigningRequest: true,
recipientRemoved: true,
recipientSigned: false, // unchecked
@@ -273,6 +274,7 @@ test('[ORGANISATIONS]: manage email preferences', async ({ page }) => {
// Check that the team settings have overridden the organisation values.
expect(updatedTeamSettings.emailReplyTo).toEqual('team@example.com');
expect(updatedTeamSettings.emailDocumentSettings).toEqual({
attachDocument: true,
recipientSigned: true,
recipientSigningRequest: false,
recipientRemoved: true,
@@ -295,6 +297,7 @@ test('[ORGANISATIONS]: manage email preferences', async ({ page }) => {
expect(teamOverrideDocumentMeta.emailReplyTo).toEqual('team@example.com');
expect(teamOverrideDocumentMeta.emailSettings).toEqual({
attachDocument: true,
recipientSigned: true,
recipientSigningRequest: false,
recipientRemoved: true,
@@ -322,6 +325,7 @@ test('[ORGANISATIONS]: manage email preferences', async ({ page }) => {
// Check that the team settings now inherit from organisation again.
expect(inheritedTeamSettings.emailReplyTo).toEqual('organisation@documenso.com');
expect(inheritedTeamSettings.emailDocumentSettings).toEqual({
attachDocument: true,
recipientSigningRequest: true,
recipientRemoved: true,
recipientSigned: false,
@@ -344,6 +348,7 @@ test('[ORGANISATIONS]: manage email preferences', async ({ page }) => {
expect(documentMeta.emailReplyTo).toEqual('organisation@documenso.com');
expect(documentMeta.emailSettings).toEqual({
attachDocument: true,
recipientSigningRequest: true,
recipientRemoved: true,
recipientSigned: false,
@@ -26,17 +26,6 @@ export const run = async ({ payload, io }: { payload: TSendDocumentCompletedEmai
const envelope = await prisma.envelope.findUnique({
where: unsafeBuildEnvelopeIdQuery({ type: 'envelopeId', id: envelopeId }, EnvelopeType.DOCUMENT),
include: {
envelopeItems: {
include: {
documentData: {
select: {
type: true,
id: true,
data: true,
},
},
},
},
documentMeta: true,
recipients: true,
user: {
@@ -83,8 +72,32 @@ export const run = async ({ payload, io }: { payload: TSendDocumentCompletedEmai
const { user: owner } = envelope;
const emailSettings = extractDerivedDocumentEmailSettings(envelope.documentMeta);
const isDocumentCompletedEmailEnabled = emailSettings.documentCompleted;
const isOwnerDocumentCompletedEmailEnabled = emailSettings.ownerDocumentCompleted;
if (!isDocumentCompletedEmailEnabled && !isOwnerDocumentCompletedEmailEnabled) {
return;
}
// Fetch PDF data only when attachments are enabled. Database-backed PDFs can
// contain the entire file in documentData.data.
const envelopeItems = emailSettings.attachDocument
? await prisma.envelopeItem.findMany({
where: { envelopeId: envelope.id },
include: {
documentData: {
select: {
type: true,
data: true,
},
},
},
})
: [];
const completedDocumentEmailAttachments = await Promise.all(
envelope.envelopeItems.map(async (envelopeItem) => {
envelopeItems.map(async (envelopeItem) => {
const file = await getFileServerSide(envelopeItem.documentData);
// Use the envelope title for version 1, and the envelope item title for version 2.
@@ -108,10 +121,6 @@ export const run = async ({ payload, io }: { payload: TSendDocumentCompletedEmai
documentOwnerDownloadLink = `${NEXT_PUBLIC_WEBAPP_URL()}/t/${envelope.team.url}/documents/${envelope.id}`;
}
const emailSettings = extractDerivedDocumentEmailSettings(envelope.documentMeta);
const isDocumentCompletedEmailEnabled = emailSettings.documentCompleted;
const isOwnerDocumentCompletedEmailEnabled = emailSettings.ownerDocumentCompleted;
// Send email to document owner if:
// 1. Owner document completed emails are enabled AND
// 2. Either:
@@ -437,6 +437,7 @@ export const generateSampleWebhookPayload = (event: WebhookTriggerEvents, webhoo
dateFormat: 'yyyy-MM-dd hh:mm a',
redirectUrl: '',
emailSettings: {
attachDocument: true,
documentDeleted: true,
documentPending: true,
recipientSigned: true,
+16 -3
View File
@@ -14,8 +14,14 @@ export enum DocumentEmailEvents {
OwnerDocumentCreated = 'ownerDocumentCreated',
}
export const ZDocumentEmailSettingsSchema = z
export const ZDocumentEmailSettingsInputSchema = z
.object({
attachDocument: z
.boolean()
.describe(
'Whether to attach the completed document PDFs to emails sent to the owner and recipients. Document links are always included.',
)
.default(true),
recipientSigningRequest: z
.boolean()
.describe('Whether to send an email to all recipients that the document is ready for them to sign.')
@@ -55,8 +61,13 @@ export const ZDocumentEmailSettingsSchema = z
.describe('Whether to send an email to the document owner when a document is created from a direct template.')
.default(true),
})
.strip()
.catch(() => ({ ...DEFAULT_DOCUMENT_EMAIL_SETTINGS }));
.strip();
// Persisted settings may be absent or predate new options. API inputs must use
// the input schema so invalid values cannot silently enable document attachments.
export const ZDocumentEmailSettingsSchema = ZDocumentEmailSettingsInputSchema.catch(() => ({
...DEFAULT_DOCUMENT_EMAIL_SETTINGS,
}));
export type TDocumentEmailSettings = z.infer<typeof ZDocumentEmailSettingsSchema>;
@@ -68,6 +79,7 @@ export const extractDerivedDocumentEmailSettings = (documentMeta?: DocumentMeta
}
return {
attachDocument: emailSettings.attachDocument,
recipientSigningRequest: false,
recipientRemoved: false,
recipientSigned: false,
@@ -81,6 +93,7 @@ export const extractDerivedDocumentEmailSettings = (documentMeta?: DocumentMeta
};
export const DEFAULT_DOCUMENT_EMAIL_SETTINGS: TDocumentEmailSettings = {
attachDocument: true,
recipientSigningRequest: true,
recipientRemoved: true,
recipientSigned: true,
+2 -2
View File
@@ -9,7 +9,7 @@ import { msg } from '@lingui/core/macro';
import { DocumentDistributionMethod, DocumentSigningOrder } from '@prisma/client';
import { z } from 'zod';
import { ZDocumentEmailSettingsSchema } from './document-email';
import { ZDocumentEmailSettingsInputSchema } from './document-email';
/**
* The full document response schema.
@@ -125,7 +125,7 @@ export const ZDocumentMetaCreateSchema = z.object({
drawSignatureEnabled: ZDocumentMetaDrawSignatureEnabledSchema.optional(),
emailId: z.string().nullish(),
emailReplyTo: zEmail().nullish(),
emailSettings: ZDocumentEmailSettingsSchema.nullish(),
emailSettings: ZDocumentEmailSettingsInputSchema.nullish(),
envelopeExpirationPeriod: ZEnvelopeExpirationPeriod.nullish(),
reminderSettings: ZEnvelopeReminderSettings.nullish(),
});
@@ -1,5 +1,5 @@
import { ZDocumentLiteSchema } from '@documenso/lib/types/document';
import { ZDocumentEmailSettingsSchema } from '@documenso/lib/types/document-email';
import { ZDocumentEmailSettingsInputSchema } from '@documenso/lib/types/document-email';
import {
ZDocumentMetaDateFormatSchema,
ZDocumentMetaDistributionMethodSchema,
@@ -39,7 +39,7 @@ export const ZDistributeDocumentRequestSchema = z.object({
language: ZDocumentMetaLanguageSchema.optional(),
emailId: z.string().nullish(),
emailReplyTo: zEmail().nullish(),
emailSettings: ZDocumentEmailSettingsSchema.optional(),
emailSettings: ZDocumentEmailSettingsInputSchema.optional(),
})
.optional(),
});
@@ -1,4 +1,4 @@
import { ZDocumentEmailSettingsSchema } from '@documenso/lib/types/document-email';
import { ZDocumentEmailSettingsInputSchema } from '@documenso/lib/types/document-email';
import {
ZDocumentMetaDateFormatSchema,
ZDocumentMetaDistributionMethodSchema,
@@ -66,7 +66,7 @@ export const ZCreateEmbeddingDocumentRequestSchema = z.object({
typedSignatureEnabled: ZDocumentMetaTypedSignatureEnabledSchema.optional(),
drawSignatureEnabled: ZDocumentMetaDrawSignatureEnabledSchema.optional(),
uploadSignatureEnabled: ZDocumentMetaUploadSignatureEnabledSchema.optional(),
emailSettings: ZDocumentEmailSettingsSchema.optional(),
emailSettings: ZDocumentEmailSettingsInputSchema.optional(),
})
.optional(),
});
@@ -1,4 +1,4 @@
import { ZDocumentEmailSettingsSchema } from '@documenso/lib/types/document-email';
import { ZDocumentEmailSettingsInputSchema } from '@documenso/lib/types/document-email';
import {
ZDocumentMetaDateFormatSchema,
ZDocumentMetaDistributionMethodSchema,
@@ -62,7 +62,7 @@ export const ZCreateEmbeddingTemplateRequestSchema = z.object({
typedSignatureEnabled: ZDocumentMetaTypedSignatureEnabledSchema.optional(),
drawSignatureEnabled: ZDocumentMetaDrawSignatureEnabledSchema.optional(),
uploadSignatureEnabled: ZDocumentMetaUploadSignatureEnabledSchema.optional(),
emailSettings: ZDocumentEmailSettingsSchema.optional(),
emailSettings: ZDocumentEmailSettingsInputSchema.optional(),
})
.optional(),
});
@@ -1,4 +1,4 @@
import { ZDocumentEmailSettingsSchema } from '@documenso/lib/types/document-email';
import { ZDocumentEmailSettingsInputSchema } from '@documenso/lib/types/document-email';
import {
ZDocumentMetaDateFormatSchema,
ZDocumentMetaDistributionMethodSchema,
@@ -67,7 +67,7 @@ export const ZUpdateEmbeddingDocumentRequestSchema = z.object({
typedSignatureEnabled: ZDocumentMetaTypedSignatureEnabledSchema.optional(),
drawSignatureEnabled: ZDocumentMetaDrawSignatureEnabledSchema.optional(),
uploadSignatureEnabled: ZDocumentMetaUploadSignatureEnabledSchema.optional(),
emailSettings: ZDocumentEmailSettingsSchema.optional(),
emailSettings: ZDocumentEmailSettingsInputSchema.optional(),
})
.optional(),
});
@@ -1,4 +1,4 @@
import { ZDocumentEmailSettingsSchema } from '@documenso/lib/types/document-email';
import { ZDocumentEmailSettingsInputSchema } from '@documenso/lib/types/document-email';
import {
ZDocumentMetaDateFormatSchema,
ZDocumentMetaDistributionMethodSchema,
@@ -66,7 +66,7 @@ export const ZUpdateEmbeddingTemplateRequestSchema = z.object({
typedSignatureEnabled: ZDocumentMetaTypedSignatureEnabledSchema.optional(),
drawSignatureEnabled: ZDocumentMetaDrawSignatureEnabledSchema.optional(),
uploadSignatureEnabled: ZDocumentMetaUploadSignatureEnabledSchema.optional(),
emailSettings: ZDocumentEmailSettingsSchema.optional(),
emailSettings: ZDocumentEmailSettingsInputSchema.optional(),
})
.optional(),
});
@@ -1,5 +1,5 @@
import { ZEnvelopeExpirationPeriod } from '@documenso/lib/constants/envelope-expiration';
import { ZDocumentEmailSettingsSchema } from '@documenso/lib/types/document-email';
import { ZDocumentEmailSettingsInputSchema } from '@documenso/lib/types/document-email';
import { ZDocumentFormValuesSchema } from '@documenso/lib/types/document-form-values';
import {
ZDocumentMetaDateFormatSchema,
@@ -89,7 +89,7 @@ export const ZUseEnvelopePayloadSchema = z.object({
dateFormat: ZDocumentMetaDateFormatSchema.optional(),
redirectUrl: ZDocumentMetaRedirectUrlSchema.optional(),
distributionMethod: ZDocumentMetaDistributionMethodSchema.optional(),
emailSettings: ZDocumentEmailSettingsSchema.optional(),
emailSettings: ZDocumentEmailSettingsInputSchema.optional(),
language: ZDocumentMetaLanguageSchema.optional(),
typedSignatureEnabled: ZDocumentMetaTypedSignatureEnabledSchema.optional(),
uploadSignatureEnabled: ZDocumentMetaUploadSignatureEnabledSchema.optional(),
@@ -4,7 +4,7 @@ import { ZEnvelopeReminderSettings } from '@documenso/lib/constants/envelope-rem
import { SUPPORTED_LANGUAGE_CODES } from '@documenso/lib/constants/i18n';
import { ZCssVarsSchema } from '@documenso/lib/types/css-vars';
import { ZDefaultRecipientsSchema } from '@documenso/lib/types/default-recipients';
import { ZDocumentEmailSettingsSchema } from '@documenso/lib/types/document-email';
import { ZDocumentEmailSettingsInputSchema } from '@documenso/lib/types/document-email';
import { ZDocumentMetaDateFormatSchema, ZDocumentMetaTimezoneSchema } from '@documenso/lib/types/document-meta';
import { DocumentVisibility } from '@documenso/lib/types/document-visibility';
import { ZSanitizeBrandingCssWarningSchema } from '@documenso/lib/utils/sanitize-branding-css';
@@ -41,7 +41,7 @@ export const ZUpdateOrganisationSettingsRequestSchema = z.object({
emailId: z.string().nullish(),
emailReplyTo: zEmail().nullish(),
// emailReplyToName: z.string().optional(),
emailDocumentSettings: ZDocumentEmailSettingsSchema.optional(),
emailDocumentSettings: ZDocumentEmailSettingsInputSchema.optional(),
// AI features settings.
aiFeaturesEnabled: z.boolean().optional(),
@@ -4,7 +4,7 @@ import { ZEnvelopeReminderSettings } from '@documenso/lib/constants/envelope-rem
import { SUPPORTED_LANGUAGE_CODES } from '@documenso/lib/constants/i18n';
import { ZCssVarsSchema } from '@documenso/lib/types/css-vars';
import { ZDefaultRecipientsSchema } from '@documenso/lib/types/default-recipients';
import { ZDocumentEmailSettingsSchema } from '@documenso/lib/types/document-email';
import { ZDocumentEmailSettingsInputSchema } from '@documenso/lib/types/document-email';
import { ZDocumentMetaDateFormatSchema, ZDocumentMetaTimezoneSchema } from '@documenso/lib/types/document-meta';
import { DocumentVisibility } from '@documenso/lib/types/document-visibility';
import { ZSanitizeBrandingCssWarningSchema } from '@documenso/lib/utils/sanitize-branding-css';
@@ -44,7 +44,7 @@ export const ZUpdateTeamSettingsRequestSchema = z.object({
emailId: z.string().nullish(),
emailReplyTo: zEmail().nullish(),
// emailReplyToName: z.string().nullish(),
emailDocumentSettings: ZDocumentEmailSettingsSchema.nullish(),
emailDocumentSettings: ZDocumentEmailSettingsInputSchema.nullish(),
// Default recipients settings.
defaultRecipients: ZDefaultRecipientsSchema.nullish(),
@@ -1,7 +1,7 @@
import { ZEnvelopeExpirationPeriod } from '@documenso/lib/constants/envelope-expiration';
import { ZDocumentSchema } from '@documenso/lib/types/document';
import { ZDocumentAccessAuthTypesSchema, ZDocumentActionAuthTypesSchema } from '@documenso/lib/types/document-auth';
import { ZDocumentEmailSettingsSchema } from '@documenso/lib/types/document-email';
import { ZDocumentEmailSettingsInputSchema } from '@documenso/lib/types/document-email';
import { ZDocumentFormValuesSchema } from '@documenso/lib/types/document-form-values';
import {
ZDocumentMetaDateFormatSchema,
@@ -60,7 +60,7 @@ export const ZTemplateMetaUpsertSchema = z.object({
distributionMethod: ZDocumentMetaDistributionMethodSchema.optional(),
emailId: z.string().nullish(),
emailReplyTo: zEmail().nullish(),
emailSettings: ZDocumentEmailSettingsSchema.optional(),
emailSettings: ZDocumentEmailSettingsInputSchema.optional(),
redirectUrl: ZDocumentMetaRedirectUrlSchema.optional(),
language: ZDocumentMetaLanguageSchema.optional(),
typedSignatureEnabled: ZDocumentMetaTypedSignatureEnabledSchema.optional(),
@@ -142,7 +142,7 @@ export const ZCreateDocumentFromTemplateRequestSchema = z.object({
dateFormat: ZDocumentMetaDateFormatSchema.optional(),
redirectUrl: ZDocumentMetaRedirectUrlSchema.optional(),
distributionMethod: ZDocumentMetaDistributionMethodSchema.optional(),
emailSettings: ZDocumentEmailSettingsSchema.optional(),
emailSettings: ZDocumentEmailSettingsInputSchema.optional(),
language: ZDocumentMetaLanguageSchema.optional(),
typedSignatureEnabled: ZDocumentMetaTypedSignatureEnabledSchema.optional(),
uploadSignatureEnabled: ZDocumentMetaUploadSignatureEnabledSchema.optional(),
@@ -21,6 +21,33 @@ export const DocumentEmailCheckboxes = ({ value, onChange, className, hiddenEven
return (
<div className={cn('space-y-3', className)}>
<div className="flex flex-row items-center">
<Checkbox
id="attachDocument"
className="h-5 w-5"
checked={value.attachDocument ?? true}
onCheckedChange={(checked) => onChange({ ...value, attachDocument: Boolean(checked) })}
/>
<label className="ml-2 flex flex-row items-center text-muted-foreground text-sm" htmlFor="attachDocument">
<Trans>Attach completed document PDFs to emails</Trans>
<Tooltip>
<TooltipTrigger>
<InfoIcon className="mx-2 h-4 w-4" />
</TooltipTrigger>
<TooltipContent className="max-w-md space-y-2 p-4 text-foreground">
<p>
<Trans>
Includes document PDFs in completion emails to the owner and all recipients, including CCs. Disable
this to send emails with document links only.
</Trans>
</p>
</TooltipContent>
</Tooltip>
</label>
</div>
{!isHidden(DocumentEmailEvents.RecipientSigned) && (
<div className="flex flex-row items-center">
<Checkbox