feat: add custom font sizes to fields (#1376)

Adds custom font sizes to fields

https://github.com/user-attachments/assets/1473a4d7-8dc6-4ead-acf5-dd78be7782a0
This commit is contained in:
Ephraim Duncan
2024-10-16 05:05:41 +00:00
committed by GitHub
parent 0bd2760792
commit e0c948c2ac
30 changed files with 663 additions and 186 deletions

View File

@ -128,7 +128,7 @@ export const SigningFieldContainer = ({
};
return (
<div className={cn('[container-type:size]', type === 'Checkbox' ? 'group' : '')}>
<div className={cn('[container-type:size]', { group: type === 'Checkbox' })}>
<FieldRootContainer field={field}>
{!field.inserted && !loading && !readOnlyField && (
<button

View File

@ -1,15 +1,10 @@
import { checkboxValidationSigns } from '@documenso/ui/primitives/document-flow/field-items-advanced-settings/constants';
interface CheckboxFieldMeta {
readOnly?: boolean;
required?: boolean;
validationRule?: string;
validationLength?: number;
}
import type { TCheckboxFieldMeta } from '../types/field-meta';
export const validateCheckboxField = (
values: string[],
fieldMeta: CheckboxFieldMeta,
fieldMeta: TCheckboxFieldMeta,
isSigningPage: boolean = false,
): string[] => {
const errors = [];

View File

@ -1,14 +1,10 @@
interface DropdownFieldMeta {
readOnly?: boolean;
required?: boolean;
values?: { value: string }[];
defaultValue?: string;
}
import type { TDropdownFieldMeta as DropdownFieldMeta } from '../types/field-meta';
export const validateDropdownField = (
value: string | undefined,
fieldMeta: DropdownFieldMeta,
isSigningPage: boolean = false,
fontSize?: number,
): string[] => {
const errors = [];
@ -50,5 +46,9 @@ export const validateDropdownField = (
errors.push('Duplicate values are not allowed');
}
if (fontSize && (fontSize < 8 || fontSize > 96)) {
errors.push('Font size must be between 8 and 96.');
}
return errors;
};

View File

@ -0,0 +1,19 @@
import type {
TDateFieldMeta as DateFieldMeta,
TEmailFieldMeta as EmailFieldMeta,
TInitialsFieldMeta as InitialsFieldMeta,
TNameFieldMeta as NameFieldMeta,
} from '../types/field-meta';
export const validateFields = (
fieldMeta: DateFieldMeta | EmailFieldMeta | InitialsFieldMeta | NameFieldMeta,
): string[] => {
const errors = [];
const { fontSize } = fieldMeta;
if (fontSize && (fontSize < 8 || fontSize > 96)) {
errors.push('Font size must be between 8 and 96.');
}
return errors;
};

View File

@ -1,12 +1,5 @@
// import { numberFormatValues } from '@documenso/ui/primitives/document-flow/field-items-advanced-settings/constants';
interface NumberFieldMeta {
minValue?: number;
maxValue?: number;
readOnly?: boolean;
required?: boolean;
numberFormat?: string;
}
import type { TNumberFieldMeta as NumberFieldMeta } from '../types/field-meta';
export const validateNumberField = (
value: string,
@ -15,7 +8,7 @@ export const validateNumberField = (
): string[] => {
const errors = [];
const { minValue, maxValue, readOnly, required, numberFormat } = fieldMeta || {};
const { minValue, maxValue, readOnly, required, numberFormat, fontSize } = fieldMeta || {};
const formatRegex: { [key: string]: RegExp } = {
'123,456,789.00': /^(?:\d{1,3}(?:,\d{3})*|\d+)(?:\.\d{1,2})?$/,
@ -63,5 +56,9 @@ export const validateNumberField = (
errors.push('A field cannot be both read-only and required');
}
if (fontSize && (fontSize < 8 || fontSize > 96)) {
errors.push('Font size must be between 8 and 96.');
}
return errors;
};

View File

@ -1,8 +1,4 @@
interface RadioFieldMeta {
readOnly?: boolean;
required?: boolean;
values?: { checked: boolean; value: string }[];
}
import type { TRadioFieldMeta as RadioFieldMeta } from '../types/field-meta';
export const validateRadioField = (
value: string | undefined,

View File

@ -1,8 +1,4 @@
interface TextFieldMeta {
characterLimit?: number;
readOnly?: boolean;
required?: boolean;
}
import type { TTextFieldMeta as TextFieldMeta } from '../types/field-meta';
export const validateTextField = (
value: string,
@ -11,7 +7,7 @@ export const validateTextField = (
): string[] => {
const errors = [];
const { characterLimit, readOnly, required } = fieldMeta;
const { characterLimit, readOnly, required, fontSize } = fieldMeta;
if (required && !value && isSigningPage) {
errors.push('Value is required');
@ -29,5 +25,9 @@ export const validateTextField = (
errors.push('A field cannot be both read-only and required');
}
if (fontSize && (fontSize < 8 || fontSize > 96)) {
errors.push('Font size must be between 8 and 96.');
}
return errors;
};

View File

@ -1,6 +1,7 @@
// https://github.com/Hopding/pdf-lib/issues/20#issuecomment-412852821
import fontkit from '@pdf-lib/fontkit';
import { PDFDocument, RotationTypes, degrees, radiansToDegrees } from 'pdf-lib';
import type { PDFDocument } from 'pdf-lib';
import { RotationTypes, degrees, radiansToDegrees } from 'pdf-lib';
import { P, match } from 'ts-pattern';
import {
@ -13,7 +14,16 @@ import { FieldType } from '@documenso/prisma/client';
import { isSignatureFieldType } from '@documenso/prisma/guards/is-signature-field';
import type { FieldWithSignature } from '@documenso/prisma/types/field-with-signature';
import { ZCheckboxFieldMeta, ZRadioFieldMeta } from '../../types/field-meta';
import {
ZCheckboxFieldMeta,
ZDateFieldMeta,
ZEmailFieldMeta,
ZInitialsFieldMeta,
ZNameFieldMeta,
ZNumberFieldMeta,
ZRadioFieldMeta,
ZTextFieldMeta,
} from '../../types/field-meta';
export const insertFieldInPDF = async (pdf: PDFDocument, field: FieldWithSignature) => {
const fontCaveat = await fetch(process.env.FONT_CAVEAT_URI).then(async (res) =>
@ -32,7 +42,6 @@ export const insertFieldInPDF = async (pdf: PDFDocument, field: FieldWithSignatu
const minFontSize = isSignatureField ? MIN_HANDWRITING_FONT_SIZE : MIN_STANDARD_FONT_SIZE;
const maxFontSize = isSignatureField ? DEFAULT_HANDWRITING_FONT_SIZE : DEFAULT_STANDARD_FONT_SIZE;
let fontSize = maxFontSize;
const page = pages.at(field.page - 1);
@ -207,16 +216,33 @@ export const insertFieldInPDF = async (pdf: PDFDocument, field: FieldWithSignatu
}
})
.otherwise((field) => {
const fieldMetaParsers = {
[FieldType.TEXT]: ZTextFieldMeta,
[FieldType.NUMBER]: ZNumberFieldMeta,
[FieldType.DATE]: ZDateFieldMeta,
[FieldType.EMAIL]: ZEmailFieldMeta,
[FieldType.NAME]: ZNameFieldMeta,
[FieldType.INITIALS]: ZInitialsFieldMeta,
} as const;
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
const Parser = fieldMetaParsers[field.type as keyof typeof fieldMetaParsers];
const meta = Parser ? Parser.safeParse(field.fieldMeta) : null;
const customFontSize = meta?.success && meta.data.fontSize ? meta.data.fontSize : null;
const longestLineInTextForWidth = field.customText
.split('\n')
.sort((a, b) => b.length - a.length)[0];
let fontSize = customFontSize || maxFontSize;
let textWidth = font.widthOfTextAtSize(longestLineInTextForWidth, fontSize);
const textHeight = font.heightAtSize(fontSize);
const scalingFactor = Math.min(fieldWidth / textWidth, fieldHeight / textHeight, 1);
if (!customFontSize) {
const scalingFactor = Math.min(fieldWidth / textWidth, fieldHeight / textHeight, 1);
fontSize = Math.max(Math.min(fontSize * scalingFactor, maxFontSize), minFontSize);
}
fontSize = Math.max(Math.min(fontSize * scalingFactor, maxFontSize), minFontSize);
textWidth = font.widthOfTextAtSize(longestLineInTextForWidth, fontSize);
let textX = fieldX + (fieldWidth - textWidth) / 2;
@ -250,17 +276,6 @@ export const insertFieldInPDF = async (pdf: PDFDocument, field: FieldWithSignatu
return pdf;
};
export const insertFieldInPDFBytes = async (
pdf: ArrayBuffer | Uint8Array | string,
field: FieldWithSignature,
) => {
const pdfDoc = await PDFDocument.load(pdf);
await insertFieldInPDF(pdfDoc, field);
return await pdfDoc.save();
};
const adjustPositionForRotation = (
pageWidth: number,
pageHeight: number,

View File

@ -10,6 +10,7 @@ export async function insertTextInPDF(
positionY: number,
page = 0,
useHandwritingFont = true,
customFontSize?: number,
): Promise<string> {
// Fetch the font file from the public URL.
const fontResponse = await fetch(CAVEAT_FONT_PATH());
@ -24,7 +25,7 @@ export async function insertTextInPDF(
const pages = pdfDoc.getPages();
const pdfPage = pages[page];
const textSize = useHandwritingFont ? 50 : 15;
const textSize = customFontSize || (useHandwritingFont ? 50 : 15);
const textWidth = font.widthOfTextAtSize(text, textSize);
const textHeight = font.heightAtSize(textSize);
const fieldSize = { width: 250, height: 64 };

View File

@ -73,11 +73,11 @@ msgstr "Fügen Sie dem Dokument eine externe ID hinzu. Diese kann verwendet werd
msgid "Add an external ID to the template. This can be used to identify in external systems."
msgstr "Fügen Sie der Vorlage eine externe ID hinzu. Diese kann zur Identifizierung in externen Systemen verwendet werden."
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:177
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:187
msgid "Add another option"
msgstr "Weitere Option hinzufügen"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:230
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:232
#: packages/ui/primitives/document-flow/field-items-advanced-settings/radio-field.tsx:167
msgid "Add another value"
msgstr "Weiteren Wert hinzufügen"
@ -98,11 +98,11 @@ msgstr "Platzhalterempfänger hinzufügen"
msgid "Add Signer"
msgstr "Unterzeichner hinzufügen"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:70
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:73
msgid "Add text"
msgstr "Text hinzufügen"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:75
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:78
msgid "Add text to the field"
msgstr "Text zum Feld hinzufügen"
@ -148,7 +148,7 @@ msgstr "Schwarz"
msgid "Blue"
msgstr "Blau"
#: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:287
#: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:356
#: packages/ui/primitives/document-flow/send-document-action-dialog.tsx:58
msgid "Cancel"
msgstr "Abbrechen"
@ -174,7 +174,7 @@ msgstr "CC"
msgid "CC'd"
msgstr "CC'd"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:83
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:86
msgid "Character Limit"
msgstr "Zeichenbeschränkung"
@ -183,7 +183,7 @@ msgstr "Zeichenbeschränkung"
msgid "Checkbox"
msgstr "Checkbox"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:195
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:197
msgid "Checkbox values"
msgstr "Checkbox-Werte"
@ -261,7 +261,7 @@ msgstr "Ziehen Sie Ihr PDF hierher."
msgid "Dropdown"
msgstr "Dropdown"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:148
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:158
msgid "Dropdown options"
msgstr "Dropdown-Optionen"
@ -295,7 +295,7 @@ msgstr "Aktiviere die Signaturreihenfolge"
msgid "Enter password"
msgstr "Passwort eingeben"
#: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:216
#: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:257
msgid "Error"
msgstr "Fehler"
@ -304,26 +304,44 @@ msgstr "Fehler"
msgid "External ID"
msgstr "Externe ID"
#: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:217
#: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:258
msgid "Failed to save settings."
msgstr "Einstellungen konnten nicht gespeichert werden."
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:90
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:93
msgid "Field character limit"
msgstr "Zeichenbeschränkung des Feldes"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:107
#: packages/ui/primitives/document-flow/field-items-advanced-settings/date-field.tsx:62
#: packages/ui/primitives/document-flow/field-items-advanced-settings/email-field.tsx:44
#: packages/ui/primitives/document-flow/field-items-advanced-settings/initials-field.tsx:44
#: packages/ui/primitives/document-flow/field-items-advanced-settings/name-field.tsx:44
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:130
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:107
msgid "Field font size"
msgstr ""
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:110
msgid "Field format"
msgstr "Feldformat"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:50
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:53
msgid "Field label"
msgstr "Feldbeschriftung"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:62
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:65
msgid "Field placeholder"
msgstr "Feldplatzhalter"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/date-field.tsx:56
#: packages/ui/primitives/document-flow/field-items-advanced-settings/email-field.tsx:38
#: packages/ui/primitives/document-flow/field-items-advanced-settings/initials-field.tsx:38
#: packages/ui/primitives/document-flow/field-items-advanced-settings/name-field.tsx:38
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:124
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:101
msgid "Font Size"
msgstr ""
#: packages/ui/components/document/document-global-auth-action-select.tsx:64
msgid "Global recipient action authentication"
msgstr "Globale Empfängerauthentifizierung"
@ -361,9 +379,9 @@ msgstr "Ich bin verpflichtet, eine Kopie dieses Dokuments zu erhalten"
msgid "Inherit authentication method"
msgstr "Authentifizierungsmethode erben"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:64
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:69
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:45
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:67
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:72
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:48
msgid "Label"
msgstr "Beschriftung"
@ -371,7 +389,7 @@ msgstr "Beschriftung"
msgid "Manager"
msgstr "Manager"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:168
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:188
msgid "Max"
msgstr "Max"
@ -384,7 +402,7 @@ msgstr "Mitglied"
msgid "Message <0>(Optional)</0>"
msgstr "Nachricht <0>(Optional)</0>"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:156
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:176
msgid "Min"
msgstr "Min"
@ -445,7 +463,7 @@ msgstr "Kein Wert gefunden."
msgid "Number"
msgstr "Nummer"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:100
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:103
msgid "Number format"
msgstr "Zahlenformat"
@ -465,13 +483,13 @@ msgstr "Seite {0} von {1}"
msgid "Password Required"
msgstr "Passwort erforderlich"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:154
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:156
msgid "Pick a number"
msgstr "Wählen Sie eine Zahl"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:76
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:81
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:57
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:79
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:84
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:60
msgid "Placeholder"
msgstr "Platzhalter"
@ -484,11 +502,11 @@ msgstr "Radio"
msgid "Radio values"
msgstr "Radio-Werte"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:184
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:137
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:136
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:186
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:147
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:156
#: packages/ui/primitives/document-flow/field-items-advanced-settings/radio-field.tsx:122
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:114
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:133
msgid "Read only"
msgstr "Nur lesen"
@ -515,11 +533,11 @@ msgstr "Weiterleitungs-URL"
msgid "Remove"
msgstr "Entfernen"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:174
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:127
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:126
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:176
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:137
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:146
#: packages/ui/primitives/document-flow/field-items-advanced-settings/radio-field.tsx:112
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:104
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:123
msgid "Required field"
msgstr "Pflichtfeld"
@ -527,7 +545,7 @@ msgstr "Pflichtfeld"
msgid "Rows per page"
msgstr "Zeilen pro Seite"
#: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:286
#: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:355
msgid "Save"
msgstr "Speichern"
@ -539,7 +557,7 @@ msgstr "Vorlage speichern"
msgid "Search languages..."
msgstr "Sprachen suchen..."
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:105
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:115
msgid "Select"
msgstr "Auswählen"
@ -547,11 +565,11 @@ msgstr "Auswählen"
msgid "Select an option"
msgstr "Option auswählen"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:137
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:139
msgid "Select at least"
msgstr "Wählen Sie mindestens"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:95
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:105
msgid "Select default option"
msgstr "Standardoption auswählen"
@ -749,13 +767,13 @@ msgstr "Upgrade"
msgid "Upload Template Document"
msgstr "Vorlagendokument hochladen"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:130
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:147
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:132
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:167
msgid "Validation"
msgstr "Validierung"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:88
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:93
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:91
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:96
msgid "Value"
msgstr "Wert"

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -68,11 +68,11 @@ msgstr "Add an external ID to the document. This can be used to identify the doc
msgid "Add an external ID to the template. This can be used to identify in external systems."
msgstr "Add an external ID to the template. This can be used to identify in external systems."
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:177
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:187
msgid "Add another option"
msgstr "Add another option"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:230
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:232
#: packages/ui/primitives/document-flow/field-items-advanced-settings/radio-field.tsx:167
msgid "Add another value"
msgstr "Add another value"
@ -93,11 +93,11 @@ msgstr "Add Placeholder Recipient"
msgid "Add Signer"
msgstr "Add Signer"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:70
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:73
msgid "Add text"
msgstr "Add text"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:75
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:78
msgid "Add text to the field"
msgstr "Add text to the field"
@ -143,7 +143,7 @@ msgstr "Black"
msgid "Blue"
msgstr "Blue"
#: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:287
#: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:356
#: packages/ui/primitives/document-flow/send-document-action-dialog.tsx:58
msgid "Cancel"
msgstr "Cancel"
@ -169,7 +169,7 @@ msgstr "CC"
msgid "CC'd"
msgstr "CC'd"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:83
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:86
msgid "Character Limit"
msgstr "Character Limit"
@ -178,7 +178,7 @@ msgstr "Character Limit"
msgid "Checkbox"
msgstr "Checkbox"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:195
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:197
msgid "Checkbox values"
msgstr "Checkbox values"
@ -256,7 +256,7 @@ msgstr "Drag & drop your PDF here."
msgid "Dropdown"
msgstr "Dropdown"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:148
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:158
msgid "Dropdown options"
msgstr "Dropdown options"
@ -290,7 +290,7 @@ msgstr "Enable signing order"
msgid "Enter password"
msgstr "Enter password"
#: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:216
#: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:257
msgid "Error"
msgstr "Error"
@ -299,26 +299,44 @@ msgstr "Error"
msgid "External ID"
msgstr "External ID"
#: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:217
#: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:258
msgid "Failed to save settings."
msgstr "Failed to save settings."
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:90
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:93
msgid "Field character limit"
msgstr "Field character limit"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:107
#: packages/ui/primitives/document-flow/field-items-advanced-settings/date-field.tsx:62
#: packages/ui/primitives/document-flow/field-items-advanced-settings/email-field.tsx:44
#: packages/ui/primitives/document-flow/field-items-advanced-settings/initials-field.tsx:44
#: packages/ui/primitives/document-flow/field-items-advanced-settings/name-field.tsx:44
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:130
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:107
msgid "Field font size"
msgstr "Field font size"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:110
msgid "Field format"
msgstr "Field format"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:50
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:53
msgid "Field label"
msgstr "Field label"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:62
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:65
msgid "Field placeholder"
msgstr "Field placeholder"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/date-field.tsx:56
#: packages/ui/primitives/document-flow/field-items-advanced-settings/email-field.tsx:38
#: packages/ui/primitives/document-flow/field-items-advanced-settings/initials-field.tsx:38
#: packages/ui/primitives/document-flow/field-items-advanced-settings/name-field.tsx:38
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:124
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:101
msgid "Font Size"
msgstr "Font Size"
#: packages/ui/components/document/document-global-auth-action-select.tsx:64
msgid "Global recipient action authentication"
msgstr "Global recipient action authentication"
@ -356,9 +374,9 @@ msgstr "I am required to receive a copy of this document"
msgid "Inherit authentication method"
msgstr "Inherit authentication method"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:64
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:69
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:45
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:67
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:72
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:48
msgid "Label"
msgstr "Label"
@ -366,7 +384,7 @@ msgstr "Label"
msgid "Manager"
msgstr "Manager"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:168
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:188
msgid "Max"
msgstr "Max"
@ -379,7 +397,7 @@ msgstr "Member"
msgid "Message <0>(Optional)</0>"
msgstr "Message <0>(Optional)</0>"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:156
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:176
msgid "Min"
msgstr "Min"
@ -440,7 +458,7 @@ msgstr "No value found."
msgid "Number"
msgstr "Number"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:100
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:103
msgid "Number format"
msgstr "Number format"
@ -460,13 +478,13 @@ msgstr "Page {0} of {1}"
msgid "Password Required"
msgstr "Password Required"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:154
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:156
msgid "Pick a number"
msgstr "Pick a number"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:76
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:81
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:57
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:79
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:84
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:60
msgid "Placeholder"
msgstr "Placeholder"
@ -479,11 +497,11 @@ msgstr "Radio"
msgid "Radio values"
msgstr "Radio values"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:184
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:137
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:136
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:186
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:147
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:156
#: packages/ui/primitives/document-flow/field-items-advanced-settings/radio-field.tsx:122
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:114
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:133
msgid "Read only"
msgstr "Read only"
@ -510,11 +528,11 @@ msgstr "Redirect URL"
msgid "Remove"
msgstr "Remove"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:174
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:127
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:126
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:176
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:137
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:146
#: packages/ui/primitives/document-flow/field-items-advanced-settings/radio-field.tsx:112
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:104
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:123
msgid "Required field"
msgstr "Required field"
@ -522,7 +540,7 @@ msgstr "Required field"
msgid "Rows per page"
msgstr "Rows per page"
#: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:286
#: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:355
msgid "Save"
msgstr "Save"
@ -534,7 +552,7 @@ msgstr "Save Template"
msgid "Search languages..."
msgstr "Search languages..."
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:105
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:115
msgid "Select"
msgstr "Select"
@ -542,11 +560,11 @@ msgstr "Select"
msgid "Select an option"
msgstr "Select an option"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:137
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:139
msgid "Select at least"
msgstr "Select at least"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:95
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:105
msgid "Select default option"
msgstr "Select default option"
@ -744,13 +762,13 @@ msgstr "Upgrade"
msgid "Upload Template Document"
msgstr "Upload Template Document"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:130
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:147
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:132
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:167
msgid "Validation"
msgstr "Validation"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:88
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:93
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:91
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:96
msgid "Value"
msgstr "Value"

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -73,11 +73,11 @@ msgstr "Ajouter un ID externe au document. Cela peut être utilisé pour identif
msgid "Add an external ID to the template. This can be used to identify in external systems."
msgstr "Ajouter un ID externe au modèle. Cela peut être utilisé pour identifier dans des systèmes externes."
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:177
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:187
msgid "Add another option"
msgstr "Ajouter une autre option"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:230
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:232
#: packages/ui/primitives/document-flow/field-items-advanced-settings/radio-field.tsx:167
msgid "Add another value"
msgstr "Ajouter une autre valeur"
@ -98,11 +98,11 @@ msgstr "Ajouter un destinataire de substitution"
msgid "Add Signer"
msgstr "Ajouter un signataire"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:70
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:73
msgid "Add text"
msgstr "Ajouter du texte"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:75
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:78
msgid "Add text to the field"
msgstr "Ajouter du texte au champ"
@ -148,7 +148,7 @@ msgstr "Noir"
msgid "Blue"
msgstr "Bleu"
#: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:287
#: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:356
#: packages/ui/primitives/document-flow/send-document-action-dialog.tsx:58
msgid "Cancel"
msgstr "Annuler"
@ -174,7 +174,7 @@ msgstr "CC"
msgid "CC'd"
msgstr "CC'd"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:83
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:86
msgid "Character Limit"
msgstr "Limite de caractères"
@ -183,7 +183,7 @@ msgstr "Limite de caractères"
msgid "Checkbox"
msgstr "Case à cocher"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:195
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:197
msgid "Checkbox values"
msgstr "Valeurs de case à cocher"
@ -261,7 +261,7 @@ msgstr "Faites glisser et déposez votre PDF ici."
msgid "Dropdown"
msgstr "Liste déroulante"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:148
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:158
msgid "Dropdown options"
msgstr "Options de liste déroulante"
@ -295,7 +295,7 @@ msgstr "Activer l'ordre de signature"
msgid "Enter password"
msgstr "Entrez le mot de passe"
#: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:216
#: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:257
msgid "Error"
msgstr "Erreur"
@ -304,26 +304,44 @@ msgstr "Erreur"
msgid "External ID"
msgstr "ID externe"
#: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:217
#: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:258
msgid "Failed to save settings."
msgstr "Échec de l'enregistrement des paramètres."
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:90
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:93
msgid "Field character limit"
msgstr "Limite de caractères du champ"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:107
#: packages/ui/primitives/document-flow/field-items-advanced-settings/date-field.tsx:62
#: packages/ui/primitives/document-flow/field-items-advanced-settings/email-field.tsx:44
#: packages/ui/primitives/document-flow/field-items-advanced-settings/initials-field.tsx:44
#: packages/ui/primitives/document-flow/field-items-advanced-settings/name-field.tsx:44
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:130
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:107
msgid "Field font size"
msgstr ""
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:110
msgid "Field format"
msgstr "Format du champ"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:50
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:53
msgid "Field label"
msgstr "Étiquette du champ"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:62
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:65
msgid "Field placeholder"
msgstr "Espace réservé du champ"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/date-field.tsx:56
#: packages/ui/primitives/document-flow/field-items-advanced-settings/email-field.tsx:38
#: packages/ui/primitives/document-flow/field-items-advanced-settings/initials-field.tsx:38
#: packages/ui/primitives/document-flow/field-items-advanced-settings/name-field.tsx:38
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:124
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:101
msgid "Font Size"
msgstr ""
#: packages/ui/components/document/document-global-auth-action-select.tsx:64
msgid "Global recipient action authentication"
msgstr "Authentification d'action de destinataire globale"
@ -361,9 +379,9 @@ msgstr "Je dois recevoir une copie de ce document"
msgid "Inherit authentication method"
msgstr "Hériter de la méthode d'authentification"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:64
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:69
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:45
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:67
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:72
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:48
msgid "Label"
msgstr "Étiquette"
@ -371,7 +389,7 @@ msgstr "Étiquette"
msgid "Manager"
msgstr "Gestionnaire"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:168
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:188
msgid "Max"
msgstr "Max"
@ -384,7 +402,7 @@ msgstr "Membre"
msgid "Message <0>(Optional)</0>"
msgstr "Message <0>(Optionnel)</0>"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:156
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:176
msgid "Min"
msgstr "Min"
@ -445,7 +463,7 @@ msgstr "Aucune valeur trouvée."
msgid "Number"
msgstr "Numéro"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:100
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:103
msgid "Number format"
msgstr "Format de numéro"
@ -465,13 +483,13 @@ msgstr "Page {0} sur {1}"
msgid "Password Required"
msgstr "Mot de passe requis"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:154
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:156
msgid "Pick a number"
msgstr "Choisissez un numéro"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:76
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:81
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:57
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:79
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:84
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:60
msgid "Placeholder"
msgstr "Espace réservé"
@ -484,11 +502,11 @@ msgstr "Radio"
msgid "Radio values"
msgstr "Valeurs radio"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:184
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:137
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:136
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:186
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:147
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:156
#: packages/ui/primitives/document-flow/field-items-advanced-settings/radio-field.tsx:122
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:114
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:133
msgid "Read only"
msgstr "Lecture seule"
@ -515,11 +533,11 @@ msgstr "URL de redirection"
msgid "Remove"
msgstr "Retirer"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:174
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:127
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:126
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:176
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:137
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:146
#: packages/ui/primitives/document-flow/field-items-advanced-settings/radio-field.tsx:112
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:104
#: packages/ui/primitives/document-flow/field-items-advanced-settings/text-field.tsx:123
msgid "Required field"
msgstr "Champ requis"
@ -527,7 +545,7 @@ msgstr "Champ requis"
msgid "Rows per page"
msgstr "Lignes par page"
#: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:286
#: packages/ui/primitives/document-flow/field-item-advanced-settings.tsx:355
msgid "Save"
msgstr "Sauvegarder"
@ -539,7 +557,7 @@ msgstr "Sauvegarder le modèle"
msgid "Search languages..."
msgstr "Rechercher des langues..."
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:105
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:115
msgid "Select"
msgstr "Sélectionner"
@ -547,11 +565,11 @@ msgstr "Sélectionner"
msgid "Select an option"
msgstr "Sélectionner une option"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:137
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:139
msgid "Select at least"
msgstr "Sélectionnez au moins"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:95
#: packages/ui/primitives/document-flow/field-items-advanced-settings/dropdown-field.tsx:105
msgid "Select default option"
msgstr "Sélectionner l'option par défaut"
@ -749,13 +767,13 @@ msgstr "Améliorer"
msgid "Upload Template Document"
msgstr "Télécharger le document modèle"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:130
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:147
#: packages/ui/primitives/document-flow/field-items-advanced-settings/checkbox-field.tsx:132
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:167
msgid "Validation"
msgstr "Validation"
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:88
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:93
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:91
#: packages/ui/primitives/document-flow/field-items-advanced-settings/number-field.tsx:96
msgid "Value"
msgstr "Valeur"

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -9,10 +9,39 @@ export const ZBaseFieldMeta = z.object({
export type TBaseFieldMeta = z.infer<typeof ZBaseFieldMeta>;
export const ZInitialsFieldMeta = z.object({
type: z.literal('initials').default('initials'),
fontSize: z.number().min(8).max(96).optional(),
});
export type TInitialsFieldMeta = z.infer<typeof ZInitialsFieldMeta>;
export const ZNameFieldMeta = z.object({
type: z.literal('name').default('name'),
fontSize: z.number().min(8).max(96).optional(),
});
export type TNameFieldMeta = z.infer<typeof ZNameFieldMeta>;
export const ZEmailFieldMeta = z.object({
type: z.literal('email').default('email'),
fontSize: z.number().min(8).max(96).optional(),
});
export type TEmailFieldMeta = z.infer<typeof ZEmailFieldMeta>;
export const ZDateFieldMeta = z.object({
type: z.literal('date').default('date'),
fontSize: z.number().min(8).max(96).optional(),
});
export type TDateFieldMeta = z.infer<typeof ZDateFieldMeta>;
export const ZTextFieldMeta = ZBaseFieldMeta.extend({
type: z.literal('text').default('text'),
text: z.string().optional(),
characterLimit: z.number().optional(),
fontSize: z.number().min(8).max(96).optional(),
});
export type TTextFieldMeta = z.infer<typeof ZTextFieldMeta>;
@ -23,6 +52,7 @@ export const ZNumberFieldMeta = ZBaseFieldMeta.extend({
value: z.string().optional(),
minValue: z.number().optional(),
maxValue: z.number().optional(),
fontSize: z.number().min(8).max(96).optional(),
});
export type TNumberFieldMeta = z.infer<typeof ZNumberFieldMeta>;
@ -69,6 +99,10 @@ export type TDropdownFieldMeta = z.infer<typeof ZDropdownFieldMeta>;
export const ZFieldMetaSchema = z
.union([
ZBaseFieldMeta.extend(ZInitialsFieldMeta.shape),
ZBaseFieldMeta.extend(ZNameFieldMeta.shape),
ZBaseFieldMeta.extend(ZEmailFieldMeta.shape),
ZBaseFieldMeta.extend(ZDateFieldMeta.shape),
ZTextFieldMeta,
ZNumberFieldMeta,
ZRadioFieldMeta,

View File

@ -13,8 +13,12 @@ import { match } from 'ts-pattern';
import {
type TBaseFieldMeta as BaseFieldMeta,
type TCheckboxFieldMeta as CheckboxFieldMeta,
type TDateFieldMeta as DateFieldMeta,
type TDropdownFieldMeta as DropdownFieldMeta,
type TEmailFieldMeta as EmailFieldMeta,
type TFieldMetaSchema as FieldMeta,
type TInitialsFieldMeta as InitialsFieldMeta,
type TNameFieldMeta as NameFieldMeta,
type TNumberFieldMeta as NumberFieldMeta,
type TRadioFieldMeta as RadioFieldMeta,
type TTextFieldMeta as TextFieldMeta,
@ -33,7 +37,11 @@ import {
} from './document-flow-root';
import { FieldItem } from './field-item';
import { CheckboxFieldAdvancedSettings } from './field-items-advanced-settings/checkbox-field';
import { DateFieldAdvancedSettings } from './field-items-advanced-settings/date-field';
import { DropdownFieldAdvancedSettings } from './field-items-advanced-settings/dropdown-field';
import { EmailFieldAdvancedSettings } from './field-items-advanced-settings/email-field';
import { InitialsFieldAdvancedSettings } from './field-items-advanced-settings/initials-field';
import { NameFieldAdvancedSettings } from './field-items-advanced-settings/name-field';
import { NumberFieldAdvancedSettings } from './field-items-advanced-settings/number-field';
import { RadioFieldAdvancedSettings } from './field-items-advanced-settings/radio-field';
import { TextFieldAdvancedSettings } from './field-items-advanced-settings/text-field';
@ -55,10 +63,34 @@ export type FieldMetaKeys =
| keyof NumberFieldMeta
| keyof RadioFieldMeta
| keyof CheckboxFieldMeta
| keyof DropdownFieldMeta;
| keyof DropdownFieldMeta
| keyof InitialsFieldMeta
| keyof NameFieldMeta
| keyof EmailFieldMeta
| keyof DateFieldMeta;
const getDefaultState = (fieldType: FieldType): FieldMeta => {
switch (fieldType) {
case FieldType.INITIALS:
return {
type: 'initials',
fontSize: 14,
};
case FieldType.NAME:
return {
type: 'name',
fontSize: 14,
};
case FieldType.EMAIL:
return {
type: 'email',
fontSize: 14,
};
case FieldType.DATE:
return {
type: 'date',
fontSize: 14,
};
case FieldType.TEXT:
return {
type: 'text',
@ -66,6 +98,7 @@ const getDefaultState = (fieldType: FieldType): FieldMeta => {
placeholder: '',
text: '',
characterLimit: 0,
fontSize: 14,
required: false,
readOnly: false,
};
@ -80,6 +113,7 @@ const getDefaultState = (fieldType: FieldType): FieldMeta => {
maxValue: 0,
required: false,
readOnly: false,
fontSize: 14,
};
case FieldType.RADIO:
return {
@ -180,10 +214,17 @@ export const FieldAdvancedSettings = forwardRef<HTMLDivElement, FieldAdvancedSet
const handleFieldChange = (
key: FieldMetaKeys,
value: string | { checked: boolean; value: string }[] | { value: string }[] | boolean,
value:
| string
| { checked: boolean; value: string }[]
| { value: string }[]
| boolean
| number,
) => {
setFieldState((prevState: FieldMeta) => {
if (['characterLimit', 'minValue', 'maxValue', 'validationLength'].includes(key)) {
if (
['characterLimit', 'minValue', 'maxValue', 'validationLength', 'fontSize'].includes(key)
) {
const parsedValue = Number(value);
return {
@ -232,6 +273,35 @@ export const FieldAdvancedSettings = forwardRef<HTMLDivElement, FieldAdvancedSet
))}
{match(field.type)
.with(FieldType.INITIALS, () => (
<InitialsFieldAdvancedSettings
fieldState={fieldState}
handleFieldChange={handleFieldChange}
handleErrors={setErrors}
/>
))
.with(FieldType.NAME, () => (
<NameFieldAdvancedSettings
fieldState={fieldState}
handleFieldChange={handleFieldChange}
handleErrors={setErrors}
/>
))
.with(FieldType.EMAIL, () => (
<EmailFieldAdvancedSettings
fieldState={fieldState}
handleFieldChange={handleFieldChange}
handleErrors={setErrors}
/>
))
.with(FieldType.DATE, () => (
<DateFieldAdvancedSettings
fieldState={fieldState}
handleFieldChange={handleFieldChange}
handleErrors={setErrors}
/>
))
.with(FieldType.TEXT, () => (
<TextFieldAdvancedSettings
fieldState={fieldState}
@ -268,7 +338,6 @@ export const FieldAdvancedSettings = forwardRef<HTMLDivElement, FieldAdvancedSet
/>
))
.otherwise(() => null)}
{errors.length > 0 && (
<div className="mt-4">
<ul>

View File

@ -76,7 +76,17 @@ export const FieldItem = ({
const signerStyles = useSignerColors(recipientIndex);
const advancedField = ['NUMBER', 'RADIO', 'CHECKBOX', 'DROPDOWN', 'TEXT'].includes(field.type);
const advancedField = [
'NUMBER',
'RADIO',
'CHECKBOX',
'DROPDOWN',
'TEXT',
'INITIALS',
'EMAIL',
'DATE',
'NAME',
].includes(field.type);
const calculateCoords = useCallback(() => {
const $page = document.querySelector<HTMLElement>(

View File

@ -66,6 +66,7 @@ export const CheckboxFieldAdvancedSettings = ({
required,
validationRule,
validationLength,
type: 'checkbox',
},
);
handleErrors(errors);
@ -86,6 +87,7 @@ export const CheckboxFieldAdvancedSettings = ({
required,
validationRule,
validationLength,
type: 'checkbox',
},
);
handleErrors(errors);

View File

@ -0,0 +1,71 @@
import { Trans, msg } from '@lingui/macro';
import { useLingui } from '@lingui/react';
import { validateFields as validateDateFields } from '@documenso/lib/advanced-fields-validation/validate-fields';
import { type TDateFieldMeta as DateFieldMeta } from '@documenso/lib/types/field-meta';
import { Input } from '@documenso/ui/primitives/input';
import { Label } from '@documenso/ui/primitives/label';
type DateFieldAdvancedSettingsProps = {
fieldState: DateFieldMeta;
handleFieldChange: (key: keyof DateFieldMeta, value: string | boolean) => void;
handleErrors: (errors: string[]) => void;
};
export const DateFieldAdvancedSettings = ({
fieldState,
handleFieldChange,
handleErrors,
}: DateFieldAdvancedSettingsProps) => {
const { _ } = useLingui();
// const handleInput = (field: keyof DateFieldMeta, value: string | boolean) => {
// if (field === 'fontSize') {
// const fontSize = value === '' ? '' : Number(value);
// if (typeof fontSize === 'number' && !Number.isNaN(fontSize)) {
// const errors = validateDateFields({
// fontSize,
// type: 'date',
// });
// handleErrors(errors);
// handleFieldChange(field, fontSize.toString());
// } else {
// handleErrors(['Invalid font size']);
// }
// } else {
// handleFieldChange(field, value);
// }
// };
const handleInput = (field: keyof DateFieldMeta, value: string | boolean) => {
const fontSize = field === 'fontSize' ? Number(value) : Number(fieldState.fontSize ?? 14);
const errors = validateDateFields({
fontSize,
type: 'date',
});
handleErrors(errors);
handleFieldChange(field, value);
};
return (
<div className="flex flex-col gap-4">
<div>
<Label>
<Trans>Font Size</Trans>
</Label>
<Input
id="fontSize"
type="number"
className="bg-background mt-2"
placeholder={_(msg`Field font size`)}
value={fieldState.fontSize}
onChange={(e) => handleInput('fontSize', e.target.value)}
min={8}
max={96}
/>
</div>
</div>
);
};

View File

@ -62,7 +62,12 @@ export const DropdownFieldAdvancedSettings = ({
setReadOnly(readOnly);
setRequired(required);
const errors = validateDropdownField(undefined, { readOnly, required, values });
const errors = validateDropdownField(undefined, {
readOnly,
required,
values,
type: 'dropdown',
});
handleErrors(errors);
handleFieldChange(field, value);
@ -76,7 +81,12 @@ export const DropdownFieldAdvancedSettings = ({
};
useEffect(() => {
const errors = validateDropdownField(undefined, { readOnly, required, values });
const errors = validateDropdownField(undefined, {
readOnly,
required,
values,
type: 'dropdown',
});
handleErrors(errors);
}, [values]);

View File

@ -0,0 +1,53 @@
import { Trans, msg } from '@lingui/macro';
import { useLingui } from '@lingui/react';
import { validateFields as validateEmailFields } from '@documenso/lib/advanced-fields-validation/validate-fields';
import { type TEmailFieldMeta as EmailFieldMeta } from '@documenso/lib/types/field-meta';
import { Input } from '@documenso/ui/primitives/input';
import { Label } from '@documenso/ui/primitives/label';
type EmailFieldAdvancedSettingsProps = {
fieldState: EmailFieldMeta;
handleFieldChange: (key: keyof EmailFieldMeta, value: string | boolean) => void;
handleErrors: (errors: string[]) => void;
};
export const EmailFieldAdvancedSettings = ({
fieldState,
handleFieldChange,
handleErrors,
}: EmailFieldAdvancedSettingsProps) => {
const { _ } = useLingui();
const handleInput = (field: keyof EmailFieldMeta, value: string | boolean) => {
const fontSize = field === 'fontSize' ? Number(value) : Number(fieldState.fontSize ?? 14);
const errors = validateEmailFields({
fontSize,
type: 'email',
});
handleErrors(errors);
handleFieldChange(field, value);
};
return (
<div className="flex flex-col gap-4">
<div>
<Label>
<Trans>Font Size</Trans>
</Label>
<Input
id="fontSize"
type="number"
className="bg-background mt-2"
placeholder={_(msg`Field font size`)}
value={fieldState.fontSize}
onChange={(e) => handleInput('fontSize', e.target.value)}
min={8}
max={96}
/>
</div>
</div>
);
};

View File

@ -0,0 +1,53 @@
import { Trans, msg } from '@lingui/macro';
import { useLingui } from '@lingui/react';
import { validateFields as validateInitialsFields } from '@documenso/lib/advanced-fields-validation/validate-fields';
import { type TInitialsFieldMeta as InitialsFieldMeta } from '@documenso/lib/types/field-meta';
import { Input } from '@documenso/ui/primitives/input';
import { Label } from '@documenso/ui/primitives/label';
type InitialsFieldAdvancedSettingsProps = {
fieldState: InitialsFieldMeta;
handleFieldChange: (key: keyof InitialsFieldMeta, value: string | boolean) => void;
handleErrors: (errors: string[]) => void;
};
export const InitialsFieldAdvancedSettings = ({
fieldState,
handleFieldChange,
handleErrors,
}: InitialsFieldAdvancedSettingsProps) => {
const { _ } = useLingui();
const handleInput = (field: keyof InitialsFieldMeta, value: string | boolean) => {
const fontSize = field === 'fontSize' ? Number(value) : Number(fieldState.fontSize ?? 14);
const errors = validateInitialsFields({
fontSize,
type: 'initials',
});
handleErrors(errors);
handleFieldChange(field, value);
};
return (
<div className="flex flex-col gap-4">
<div>
<Label>
<Trans>Font Size</Trans>
</Label>
<Input
id="fontSize"
type="number"
className="bg-background mt-2"
placeholder={_(msg`Field font size`)}
value={fieldState.fontSize}
onChange={(e) => handleInput('fontSize', e.target.value)}
min={8}
max={96}
/>
</div>
</div>
);
};

View File

@ -0,0 +1,53 @@
import { Trans, msg } from '@lingui/macro';
import { useLingui } from '@lingui/react';
import { validateFields as validateNameFields } from '@documenso/lib/advanced-fields-validation/validate-fields';
import { type TNameFieldMeta as NameFieldMeta } from '@documenso/lib/types/field-meta';
import { Input } from '@documenso/ui/primitives/input';
import { Label } from '@documenso/ui/primitives/label';
type NameFieldAdvancedSettingsProps = {
fieldState: NameFieldMeta;
handleFieldChange: (key: keyof NameFieldMeta, value: string | boolean) => void;
handleErrors: (errors: string[]) => void;
};
export const NameFieldAdvancedSettings = ({
fieldState,
handleFieldChange,
handleErrors,
}: NameFieldAdvancedSettingsProps) => {
const { _ } = useLingui();
const handleInput = (field: keyof NameFieldMeta, value: string | boolean) => {
const fontSize = field === 'fontSize' ? Number(value) : Number(fieldState.fontSize ?? 14);
const errors = validateNameFields({
fontSize,
type: 'name',
});
handleErrors(errors);
handleFieldChange(field, value);
};
return (
<div className="flex flex-col gap-4">
<div>
<Label>
<Trans>Font Size</Trans>
</Label>
<Input
id="fontSize"
type="number"
className="bg-background mt-2"
placeholder={_(msg`Field font size`)}
value={fieldState.fontSize}
onChange={(e) => handleInput('fontSize', e.target.value)}
min={8}
max={96}
/>
</div>
</div>
);
};

View File

@ -38,12 +38,13 @@ export const NumberFieldAdvancedSettings = ({
const [showValidation, setShowValidation] = useState(false);
const handleInput = (field: keyof NumberFieldMeta, value: string | boolean) => {
const userValue = field === 'value' ? value : fieldState.value || 0;
const userMinValue = field === 'minValue' ? Number(value) : Number(fieldState.minValue || 0);
const userMaxValue = field === 'maxValue' ? Number(value) : Number(fieldState.maxValue || 0);
const userValue = field === 'value' ? value : fieldState.value ?? 0;
const userMinValue = field === 'minValue' ? Number(value) : Number(fieldState.minValue ?? 0);
const userMaxValue = field === 'maxValue' ? Number(value) : Number(fieldState.maxValue ?? 0);
const readOnly = field === 'readOnly' ? Boolean(value) : Boolean(fieldState.readOnly);
const required = field === 'required' ? Boolean(value) : Boolean(fieldState.required);
const numberFormat = field === 'numberFormat' ? String(value) : fieldState.numberFormat || '';
const numberFormat = field === 'numberFormat' ? String(value) : fieldState.numberFormat ?? '';
const fontSize = field === 'fontSize' ? Number(value) : Number(fieldState.fontSize ?? 14);
const valueErrors = validateNumberField(String(userValue), {
minValue: userMinValue,
@ -51,6 +52,8 @@ export const NumberFieldAdvancedSettings = ({
readOnly,
required,
numberFormat,
fontSize,
type: 'number',
});
handleErrors(valueErrors);
@ -115,6 +118,23 @@ export const NumberFieldAdvancedSettings = ({
</SelectContent>
</Select>
</div>
<div>
<Label>
<Trans>Font Size</Trans>
</Label>
<Input
id="fontSize"
type="number"
className="bg-background mt-2"
placeholder={_(msg`Field font size`)}
value={fieldState.fontSize}
onChange={(e) => handleInput('fontSize', e.target.value)}
min={8}
max={96}
/>
</div>
<div className="mt-2 flex flex-col gap-4">
<div className="flex flex-row items-center gap-2">
<Switch

View File

@ -70,7 +70,7 @@ export const RadioFieldAdvancedSettings = ({
setReadOnly(readOnly);
setRequired(required);
const errors = validateRadioField(String(value), { readOnly, required, values });
const errors = validateRadioField(String(value), { readOnly, required, values, type: 'radio' });
handleErrors(errors);
handleFieldChange(field, value);
@ -95,7 +95,7 @@ export const RadioFieldAdvancedSettings = ({
}, [fieldState.values]);
useEffect(() => {
const errors = validateRadioField(undefined, { readOnly, required, values });
const errors = validateRadioField(undefined, { readOnly, required, values, type: 'radio' });
handleErrors(errors);
}, [values]);

View File

@ -22,9 +22,10 @@ export const TextFieldAdvancedSettings = ({
const { _ } = useLingui();
const handleInput = (field: keyof TextFieldMeta, value: string | boolean) => {
const text = field === 'text' ? String(value) : fieldState.text || '';
const text = field === 'text' ? String(value) : fieldState.text ?? '';
const limit =
field === 'characterLimit' ? Number(value) : Number(fieldState.characterLimit || 0);
field === 'characterLimit' ? Number(value) : Number(fieldState.characterLimit ?? 0);
const fontSize = field === 'fontSize' ? Number(value) : Number(fieldState.fontSize ?? 14);
const readOnly = field === 'readOnly' ? Boolean(value) : Boolean(fieldState.readOnly);
const required = field === 'required' ? Boolean(value) : Boolean(fieldState.required);
@ -32,6 +33,8 @@ export const TextFieldAdvancedSettings = ({
characterLimit: Number(limit),
readOnly,
required,
fontSize,
type: 'text',
});
handleErrors(textErrors);
@ -93,6 +96,22 @@ export const TextFieldAdvancedSettings = ({
/>
</div>
<div>
<Label>
<Trans>Font Size</Trans>
</Label>
<Input
id="fontSize"
type="number"
className="bg-background mt-2"
placeholder={_(msg`Field font size`)}
value={fieldState.fontSize}
onChange={(e) => handleInput('fontSize', e.target.value)}
min={8}
max={96}
/>
</div>
<div className="mt-4 flex flex-col gap-4">
<div className="flex flex-row items-center gap-2">
<Switch