Compare commits

...
Author SHA1 Message Date
prafull-opensignlabs 04543e826a Merge pull request #1105 from nxglabs/raktima-main-patch-2
fix: managesign report alignment and loader issue
2025-08-06 07:35:09 +00:00
prafull-opensignlabsandGitHub 04f6e38778 Merge pull request #1881 from OpenSignLabs/updates-16679049560
refactor: remove form-name from form title
2025-08-01 21:03:59 +05:30
prafull-opensignlabs 1b5c85fd5f Merge pull request #1085 from nxglabs/signers_completed_main
refactor: remove form-name from form title
2025-08-01 15:33:06 +00:00
prafull-opensignlabsandGitHub 123425d7d1 Merge pull request #1880 from OpenSignLabs/updates-16678047946
feat: allow preferences menu for all user
2025-08-01 20:18:07 +05:30
prafull-opensignlabs a5b9d8178c Merge pull request #1084 from nxglabs/signers_completed_main
feat: allow preferences menu for all user and add smtp setting in it
2025-08-01 14:46:44 +00:00
prafull-opensignlabsandGitHub aefd2ff933 Merge pull request #1868 from OpenSignLabs/updates-16625254839
refactor: correct grammar and normalise font size of signer email in report
2025-07-30 19:54:36 +05:30
nxglabs fe93be8be7 Merge pull request #1070 from nxglabs/signers_completed_main 2025-07-30 14:22:07 +00:00
prafull-opensignlabsandGitHub 369e3660fc Merge pull request #1865 from OpenSignLabs/updates-16598173522
fix: add dynamic truncate for email in list of signers
2025-07-29 19:29:57 +05:30
nxglabs 378c0f057b Merge pull request #1066 from nxglabs/signers_completed_main 2025-07-29 13:54:44 +00:00
prafull-opensignlabsandGitHub 4f3c034cec Merge pull request #1864 from OpenSignLabs/updates-16597572999
Fix: show signers list in completed documents
2025-07-29 19:04:08 +05:30
nxglabs e7d3453744 Merge pull request #1064 from nxglabs/signers_completed_main 2025-07-29 13:30:45 +00:00
prafull-opensignlabsandGitHub 47cc0ef580 Merge pull request #1858 from OpenSignLabs/updates-16525889391
remove checkbox from sign agreement screen
2025-07-25 21:18:33 +05:30
prafull-opensignlabs 04f71be6a2 Merge pull request #1044 from nxglabs/raktima-patch-main-2
fix: remove agreement checkbox and remove agreement checkbox tour
2025-07-25 15:38:38 +00:00
prafull-opensignlabsandGitHub 07603f4bc2 Merge pull request #1856 from OpenSignLabs/imgbot
[ImgBot] Optimize images
2025-07-24 14:40:19 +05:30
ImgBotApp ea16180551 [ImgBot] Optimize images
*Total -- 487.98kb -> 238.96kb (51.03%)

/apps/OpenSign/public/logo512.png -- 10.72kb -> 2.72kb (74.62%)
/apps/OpenSignServer/logo.png -- 86.48kb -> 24.83kb (71.28%)
/apps/OpenSign/src/assets/images/logo.png -- 86.48kb -> 24.83kb (71.28%)
/apps/OpenSign/public/static/js/assets/images/logo.2a7bff0c1189183fafe71d7d5b94e0cd.png -- 86.48kb -> 24.83kb (71.28%)
/apps/OpenSign/public/logo192.png -- 2.13kb -> 0.65kb (69.69%)
/apps/OpenSign/src/assets/images/dp.png -- 12.83kb -> 4.25kb (66.9%)
/apps/OpenSign/src/assets/images/folder.png -- 4.39kb -> 1.93kb (56.05%)
/apps/OpenSign/public/static/js/assets/images/logo-dark.png -- 95.21kb -> 57.21kb (39.91%)
/apps/OpenSignServer/public/assets/images/parse-logo.png -- 5.16kb -> 3.81kb (26.21%)
/apps/OpenSign/src/assets/images/pdf3.png -- 11.66kb -> 9.77kb (16.21%)
/apps/OpenSign/src/assets/images/login_img.svg -- 40.75kb -> 39.10kb (4.04%)
/apps/OpenSign/src/assets/images/recreatedoc.png -- 40.69kb -> 40.08kb (1.48%)
/apps/OpenSign/src/assets/images/pad.svg -- 5.00kb -> 4.94kb (1.07%)

Signed-off-by: ImgBotApp <ImgBotHelp@gmail.com>
2025-07-24 08:28:02 +00:00
prafull-opensignlabsandGitHub 75ad566d54 Merge pull request #1841 from OpenSignLabs/updates-16144605887
v2.26.1
2025-07-08 19:01:19 +05:30
nxglabs fda9fb534b Merge pull request #963 from nxglabs/staging
v2.26.1
2025-07-08 13:27:37 +00:00
prafull-opensignlabsandGitHub cb3e31ebbf Merge pull request #1838 from OpenSignLabs/updates-16124490027
dark-theme logo
2025-07-07 23:43:31 +05:30
nxglabs 400525debb Merge pull request #960 from nxglabs/fix_customlogo
fix: custom applogo not visible in header
2025-07-07 18:07:24 +00:00
31 changed files with 1087 additions and 505 deletions
+21 -7
View File
@@ -2730,19 +2730,32 @@
} }
}, },
"node_modules/@eslint/plugin-kit": { "node_modules/@eslint/plugin-kit": {
"version": "0.3.1", "version": "0.3.4",
"resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.1.tgz", "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.4.tgz",
"integrity": "sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w==", "integrity": "sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==",
"dev": true, "dev": true,
"license": "Apache-2.0", "license": "Apache-2.0",
"dependencies": { "dependencies": {
"@eslint/core": "^0.14.0", "@eslint/core": "^0.15.1",
"levn": "^0.4.1" "levn": "^0.4.1"
}, },
"engines": { "engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0" "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
} }
}, },
"node_modules/@eslint/plugin-kit/node_modules/@eslint/core": {
"version": "0.15.1",
"resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.1.tgz",
"integrity": "sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"@types/json-schema": "^7.0.15"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
}
},
"node_modules/@floating-ui/core": { "node_modules/@floating-ui/core": {
"version": "1.7.0", "version": "1.7.0",
"resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.0.tgz", "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.0.tgz",
@@ -8655,14 +8668,15 @@
} }
}, },
"node_modules/form-data": { "node_modules/form-data": {
"version": "4.0.2", "version": "4.0.4",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz",
"integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"asynckit": "^0.4.0", "asynckit": "^0.4.0",
"combined-stream": "^1.0.8", "combined-stream": "^1.0.8",
"es-set-tostringtag": "^2.1.0", "es-set-tostringtag": "^2.1.0",
"hasown": "^2.0.2",
"mime-types": "^2.1.12" "mime-types": "^2.1.12"
}, },
"engines": { "engines": {
+110 -10
View File
@@ -26,6 +26,8 @@
"Name": "Name", "Name": "Name",
"Date": "Datum" "Date": "Datum"
}, },
"folder": "Ordner",
"pdf": "Pdf",
"context-menu": { "context-menu": {
"Download": "Herunterladen", "Download": "Herunterladen",
"Rename": "Umbenennen", "Rename": "Umbenennen",
@@ -44,6 +46,10 @@
"contact-now": "Jetzt kontaktieren", "contact-now": "Jetzt kontaktieren",
"upgrade-to": "Upgrade zu", "upgrade-to": "Upgrade zu",
"plan": "Plan", "plan": "Plan",
"connect": "Verbinden",
"connect-to-g-drive": "Mit Google Drive verbinden",
"reconnect-to-g-drive": "Erneut mit Google Drive verbinden",
"gdrive-info-connect": "Wenn Google Drive verbunden ist, wird das abgeschlossene Dokument im Ordner {{appName}} auf Google Drive gespeichert.",
"subscription-renew-warning": "Ihr Abonnement läuft in {{remainingDays}} Tagen ab. Bitte verlängern Sie Ihr Abonnement.", "subscription-renew-warning": "Ihr Abonnement läuft in {{remainingDays}} Tagen ab. Bitte verlängern Sie Ihr Abonnement.",
"subscribe-card-teamplan": "Entfesseln Sie die volle Kraft der Zusammenarbeit! Erstellen Sie unbegrenzt Organisationen, Teams und Hierarchien. Teilen Sie Vorlagen nahtlos zwischen Teams und weisen Sie benutzerdefinierte Benutzerrollen zu. Optimieren Sie Ihren Workflow noch heute!", "subscribe-card-teamplan": "Entfesseln Sie die volle Kraft der Zusammenarbeit! Erstellen Sie unbegrenzt Organisationen, Teams und Hierarchien. Teilen Sie Vorlagen nahtlos zwischen Teams und weisen Sie benutzerdefinierte Benutzerrollen zu. Optimieren Sie Ihren Workflow noch heute!",
"subscribe-card-plan": "Entsperren Sie Premium-Funktionen ab nur {{premiumPrice}}/Monat. Genießen Sie eine verbesserte Leistung und zahlen Sie nur {{addonPrice}} pro zusätzlichem Credit nach den enthaltenen Premium-Credits.", "subscribe-card-plan": "Entsperren Sie Premium-Funktionen ab nur {{premiumPrice}}/Monat. Genießen Sie eine verbesserte Leistung und zahlen Sie nur {{addonPrice}} pro zusätzlichem Credit nach den enthaltenen Premium-Credits.",
@@ -58,7 +64,7 @@
"welcome": "Willkommen zurück!", "welcome": "Willkommen zurück!",
"Login-to-your-account": "Melden Sie sich bei Ihrem Konto an", "Login-to-your-account": "Melden Sie sich bei Ihrem Konto an",
"password": "Passwort", "password": "Passwort",
"forgot-password": "Passwort vergessen?", "forgot-password": "Passwort vergessen",
"loading": "Wird geladen...", "loading": "Wird geladen...",
"of": "von", "of": "von",
"sign-SSO": "Mit SSO anmelden", "sign-SSO": "Mit SSO anmelden",
@@ -181,7 +187,9 @@
"created-date": "Erstellungsdatum", "created-date": "Erstellungsdatum",
"Type": "Type", "Type": "Type",
"Logs": "Protokolle", "Logs": "Protokolle",
"Expiry-date": "Ablaufdatum" "Expiry-date": "Ablaufdatum",
"Company": "Unternehmen",
"JobTitle": "Berufsbezeichnung"
}, },
"report-help": { "report-help": {
"Draft Documents": "Dies sind Dokumente, die Sie begonnen, aber noch nicht zum Versenden fertiggestellt haben.", "Draft Documents": "Dies sind Dokumente, die Sie begonnen, aber noch nicht zum Versenden fertiggestellt haben.",
@@ -193,16 +201,15 @@
"Contactbook": "Dies ist eine Liste von Kontakten/Unterzeichnern, die Sie hinzugefügt haben. Diese erscheinen als Vorschläge, wenn Sie neue Unterzeichner hinzufügen möchten.", "Contactbook": "Dies ist eine Liste von Kontakten/Unterzeichnern, die Sie hinzugefügt haben. Diese erscheinen als Vorschläge, wenn Sie neue Unterzeichner hinzufügen möchten.",
"Templates": "Dies ist eine Liste von Vorlagen, die Ihnen zur Verfügung stehen, um Dokumente zu erstellen. Sie können die Schaltfläche 'Verwenden' anklicken, um ein neues Dokument mit einer Vorlage zu erstellen, das Dokument zu ändern und Unterzeichner im nächsten Schritt hinzuzufügen." "Templates": "Dies ist eine Liste von Vorlagen, die Ihnen zur Verfügung stehen, um Dokumente zu erstellen. Sie können die Schaltfläche 'Verwenden' anklicken, um ein neues Dokument mit einer Vorlage zu erstellen, das Dokument zu ändern und Unterzeichner im nächsten Schritt hinzuzufügen."
}, },
"form-name": { "Sign Yourself": "Selbst unterschreiben",
"Sign Yourself": "Selbst unterschreiben", "Request Signatures": "Signaturen anfordern",
"Request Signatures": "Signaturen anfordern", "New Template": "Neue Vorlage",
"New Template": "Neue Vorlage"
},
"file-type": "pdf, png, jpg, jpeg", "file-type": "pdf, png, jpg, jpeg",
"docx": "docx", "docx": "docx",
"file-selected": "Datei ausgewählt", "file-selected": "Datei ausgewählt",
"template-title": "Vorlagentitel", "template-title": "Vorlagentitel",
"document-title": "Dokumenttitel", "document-title": "Dokumenttitel",
"title": "Titel",
"description": "Beschreibung", "description": "Beschreibung",
"time-to-complete": "Bearbeitungszeit (Tage)", "time-to-complete": "Bearbeitungszeit (Tage)",
"send-in-order": "In der Reihenfolge senden", "send-in-order": "In der Reihenfolge senden",
@@ -379,6 +386,7 @@
"certificate": "Zertifikat", "certificate": "Zertifikat",
"decline": "Ablehnen", "decline": "Ablehnen",
"finish": "Fertigstellen", "finish": "Fertigstellen",
"done": "Fertig",
"mail": "E-Mail", "mail": "E-Mail",
"sign-now": "Jetzt unterzeichnen", "sign-now": "Jetzt unterzeichnen",
"successfully-signed": "Erfolgreich unterzeichnet!", "successfully-signed": "Erfolgreich unterzeichnet!",
@@ -388,6 +396,10 @@
"Email-verified-alert-1": "E-Mail wurde verifiziert.", "Email-verified-alert-1": "E-Mail wurde verifiziert.",
"Email-verified-alert-2": "E-Mail wurde bereits verifiziert.", "Email-verified-alert-2": "E-Mail wurde bereits verifiziert.",
"upload-stamp-image": "Stempelbild hochladen", "upload-stamp-image": "Stempelbild hochladen",
"draw-signature": "Unterschrift zeichnen",
"draw-initials": "Initialen zeichnen",
"enter-text": "Text eingeben",
"enter-widgettype": "{{widgetType}} eingeben",
"draw": "Zeichnen", "draw": "Zeichnen",
"type": "Schreiben", "type": "Schreiben",
"color-type": { "color-type": {
@@ -728,7 +740,7 @@
"public-tour-message": "Die Vorlage muss öffentlich sein, bevor Sie einen teilbaren Link generieren können.", "public-tour-message": "Die Vorlage muss öffentlich sein, bevor Sie einen teilbaren Link generieren können.",
"add-user-template": "Sie müssen eine Rolle hinzufügen, bevor Sie Felder dafür hinzufügen können.", "add-user-template": "Sie müssen eine Rolle hinzufügen, bevor Sie Felder dafür hinzufügen können.",
"pdf-uncompatible": "Diese PDF-Datei ist nicht kompatibel, bitte kontaktieren Sie {{appName}}", "pdf-uncompatible": "Diese PDF-Datei ist nicht kompatibel, bitte kontaktieren Sie {{appName}}",
"text-field-tour": "Felder vom Typ 'Text' müssen im Voraus ausgefüllt werden, bevor das Dokument versendet wird. Wenn Sie möchten, dass die Unterzeichner Eingaben machen, verwenden Sie das Feld 'Texteingabe'.", "text-field-tour": "Felder zum Vorabfüllen müssen vor dem Senden des Dokuments ausgefüllt werden. Wenn Sie Eingaben von den Unterzeichnern benötigen, verwenden Sie stattdessen die Felder für Unterzeichner.",
"attach-signer-tour": "Sie müssen einen Unterzeichner jeder Rolle zuweisen. Dies können Sie durch Klicken auf dieses Symbol tun. Sobald Sie einen Unterzeichner auswählen, wird er allen Feldern der zugehörigen Rolle zugewiesen, die in derselben Farbe erscheinen.", "attach-signer-tour": "Sie müssen einen Unterzeichner jeder Rolle zuweisen. Dies können Sie durch Klicken auf dieses Symbol tun. Sobald Sie einen Unterzeichner auswählen, wird er allen Feldern der zugehörigen Rolle zugewiesen, die in derselben Farbe erscheinen.",
"allowed-signature-types": "Erlaubte Signaturtypen", "allowed-signature-types": "Erlaubte Signaturtypen",
"at-least-one-signature-type": "Mindestens ein Signaturtyp sollte aktiviert sein.", "at-least-one-signature-type": "Mindestens ein Signaturtyp sollte aktiviert sein.",
@@ -776,7 +788,7 @@
"agree-p1": "Ich bestätige, dass ich die ", "agree-p1": "Ich bestätige, dass ich die ",
"agree-p2": "Offenlegung elektronischer Aufzeichnungen und Signaturen", "agree-p2": "Offenlegung elektronischer Aufzeichnungen und Signaturen",
"agree-p3": "gelesen und verstanden habe und der Verwendung elektronischer Aufzeichnungen und Signaturen zustimme.", "agree-p3": "gelesen und verstanden habe und der Verwendung elektronischer Aufzeichnungen und Signaturen zustimme.",
"agrre-button": "Zustimmen & Fortfahren", "agrre-button": "Ich bestätige und stimme zu, fortzufahren",
"term-cond-title": "Allgemeine Geschäftsbedingungen", "term-cond-title": "Allgemeine Geschäftsbedingungen",
"term-cond-h": "OFFENLEGUNG ELEKTRONISCHER AUFZEICHNUNGEN UND SIGNATUREN", "term-cond-h": "OFFENLEGUNG ELEKTRONISCHER AUFZEICHNUNGEN UND SIGNATUREN",
"term-cond-p1": "Diese Offenlegung elektronischer Aufzeichnungen und Signaturen ('Offenlegung') ist eine Vereinbarung zwischen dem Dokumentersteller ('Sender') und dem Unterzeichner ('Ihnen'), bereitgestellt über die {{appName}} Plattform ('Plattform'). Durch das Signieren von Dokumenten über {{appName}} stimmen Sie den in dieser Offenlegung beschriebenen Bedingungen zu. Bitte lesen Sie sie sorgfältig durch, bevor Sie fortfahren.", "term-cond-p1": "Diese Offenlegung elektronischer Aufzeichnungen und Signaturen ('Offenlegung') ist eine Vereinbarung zwischen dem Dokumentersteller ('Sender') und dem Unterzeichner ('Ihnen'), bereitgestellt über die {{appName}} Plattform ('Plattform'). Durch das Signieren von Dokumenten über {{appName}} stimmen Sie den in dieser Offenlegung beschriebenen Bedingungen zu. Bitte lesen Sie sie sorgfältig durch, bevor Sie fortfahren.",
@@ -1036,10 +1048,98 @@
"search-templates": "Vorlagen durchsuchen…", "search-templates": "Vorlagen durchsuchen…",
"search-documents": "Dokumente suchen…", "search-documents": "Dokumente suchen…",
"search-contacts": "Kontakte durchsuchen…", "search-contacts": "Kontakte durchsuchen…",
"edit-draft": "Entwurf bearbeiten",
"add-role-alert": "Bitte fügen Sie mindestens eine Rolle hinzu",
"invalid-email-found": "Ungültige E-Mail gefunden: {{email}}", "invalid-email-found": "Ungültige E-Mail gefunden: {{email}}",
"duplicate-email-found": "Doppelte E-Mail gefunden: {{email}}", "duplicate-email-found": "Doppelte E-Mail gefunden: {{email}}",
"vertical": "Vertikal", "vertical": "Vertikal",
"horizontal": "Horizontal", "horizontal": "Horizontal",
"billing": "Abrechnung", "billing": "Abrechnung",
"console": "Konsole" "console": "Konsole",
"prefill-widget": "Vorausgefüllte Widgets",
"action-prohibited": "Diese Aktion ist für Ihre E-Mail-Domain nicht erlaubt. Bitte wenden Sie sich an Ihren Administrator, um Hilfe zu erhalten.",
"must-have-at-least-one-vacant-role": "Mindestens eine Rolle muss unzugewiesen sein, bevor Sie ein template auf 'public' setzen.",
"remove-duplicate": "Bitte doppelte Option entfernen",
"prefill-bulk-error": "Der Massenversand ist nicht erlaubt, wenn Prefill-Widgets hinzugefügt wurden. Bitte entfernen Sie die Prefill-Widgets, um fortzufahren.",
"session-expired-title": "Sitzung abgelaufen",
"access-denied": "Zugriff verweigert",
"upgrade": "Upgrade",
"do-not-access-app": "Sie haben keinen Zugriff auf diese Anwendung.",
"dont-have-access": "Sie haben keinen Zugriff.",
"valid-email-alert": "Bitte geben Sie eine gültige E-Mail-Adresse ein.",
"otp-not-validate": "OTP ist ungültig.",
"domain-not-allowed": "Diese Domain ist nicht erlaubt",
"atleast-one-recipient-alert": "Bitte fügen Sie mindestens einen Empfänger hinzu!",
"incorrect-password-or-decryption-failed": "Falsches Passwort oder Entschlüsselung fehlgeschlagen.",
"incorrect-password-for-file": "Falsches Passwort für Datei: {{file}}",
"error-uploading-pdf": "Fehler beim Hochladen der PDF.",
"provide-password": "Bitte geben Sie das Passwort an.",
"only-pdf-allowed": "Nur PDF-Dateien sind erlaubt.",
"invalid-username-password-region": "Ungültiger Benutzername/Passwort oder Region.",
"pfx-extension-alert": "Bitte laden Sie eine Datei mit der Endung .pfx hoch.",
"email-already-exist": "E-Mail existiert bereits",
"branding": "Markenbildung",
"branding-help": "Branding ermöglicht White-Labeling für Ihre App",
"custom-sub-domain": "Benutzerdefinierte Subdomain",
"app-name": "App Name",
"provide-domain-name": "Geben Sie Ihren Domainnamen an",
"provide-app-name": "Geben Sie Ihren App-Namen an",
"logo": "Logo",
"upload-app-logo": "Laden Sie Ihr App-Logo hoch",
"prefill-unfilled-widget": "Die folgenden Pflichtfelder dürfen nicht leer sein: {{emptyWidget}}. Bitte füllen Sie diese aus, um fortzufahren.",
"Dashboard": "Armaturenbrett",
"Analytics": "Analytik",
"Templates": "Vorlagen",
"Need your sign": "Benötigt Ihre Unterschrift",
"In Progress": "In Bearbeitung",
"Completed": "Abgeschlossen",
"Drafts": "Entwürfe",
"Declined": "Abgelehnt",
"Expired": "Abgelaufen",
"Contactbook": "Kontaktbuch",
"My Signature": "Meine Unterschrift",
"API Token": "API-Token",
"Webhook": "Webhook",
"Preferences": "Einstellungen",
"Teams": "Teams",
"Users": "Benutzer",
"Drive": "Drive",
"Branding": "Markenbildung",
"Mail": "Mail",
"Storage": "Speicher",
"Signing certificate": "Signierzertifikat",
"General": "Allgemein",
"Organizations": "Organisationen",
"OrgAdmins": "OrgAdmins",
"Debug Pdf": "PDF debuggen",
"New Document": "Neues Dokument",
"subscription": "Abonnement",
"Draft document": "Dokumententwurf",
"Draft template": "Vorlagenentwurf",
"Public sign": "Öffentliche Signatur",
"Signup": "Registrieren",
"delete-contact": "Kontakt löschen",
"total-records-found": "Gesamtanzahl gefundener Einträge: {{count}}",
"Invalid-records-found": "Ungültige Einträge gefunden: {{records}}",
"previous": "Zurück",
"page-n-of-n": "Seite {{currentPage}} von {{totalPages}}",
"import": "Importieren",
"search": "Suchen",
"viewed-on": "Angesehen am: {{ViewedOn}}",
"signed-on": "Unterschrieben am: {{SignedOn}}",
"hide": "Ausblenden",
"show-more": "Mehr anzeigen",
"browse-or-drag-to-replace-existing-file": "Durchsuchen oder per Drag & Drop eine neue Datei ziehen, um die vorhandene zu ersetzen",
"optional-details": "Optionale Angaben",
"mail-adapter-subscription-alert": "Bitte upgraden Sie auf den Professional- oder Team-Plan, um den Mail-Adapter einzurichten.",
"connect-to-mail": "Mit Gmail verbinden",
"custom-smtp": "Benutzerdefiniertes SMTP",
"default-smtp": "{{appName}} Standard-SMTP",
"host": "Host",
"port": "Port",
"sender-email": "Absender-E-Mail",
"username": "Benutzername",
"use-default-mail-adapter": "Möchten Sie wirklich die Standard-Mailserver von {{appName}} verwenden, um Ihre Signaturanfragen zu versenden? Wir empfehlen, Ihre eigenen Gmail- oder SMTP-Server zu verwenden, um die Zustellbarkeit zu verbessern.",
"verification-code-sent-registered-email": "Ein Bestätigungscode wurde an Ihre registrierte E-Mail-Adresse <1>{{useremail}}</1> gesendet. Bitte geben Sie den Code unten ein, um Ihre Einstellungen zu bestätigen.",
"smpt-credentials": "SMTP-Zugangsdaten"
} }
+112 -11
View File
@@ -26,6 +26,8 @@
"Name": "Name", "Name": "Name",
"Date": "Date" "Date": "Date"
}, },
"folder": "Folder",
"pdf": "Pdf",
"context-menu": { "context-menu": {
"Download": "Download", "Download": "Download",
"Rename": "Rename", "Rename": "Rename",
@@ -44,6 +46,10 @@
"contact-now": "Contact now", "contact-now": "Contact now",
"upgrade-to": "Upgrade to", "upgrade-to": "Upgrade to",
"plan": "Plan", "plan": "Plan",
"connect": "connect",
"connect-to-g-drive": "Connect to Google Drive",
"reconnect-to-g-drive": "Reconnect to Google Drive",
"gdrive-info-connect": "When Google Drive is connected, the completed document will be saved in the {{appName}} folder on Google Drive.",
"subscription-renew-warning": "Your subscription will expire in {{remainingDays}} days. Please renew your subscription.", "subscription-renew-warning": "Your subscription will expire in {{remainingDays}} days. Please renew your subscription.",
"subscribe-card-teamplan": "Unlock the full power of collaboration! Create unlimited organizations, teams, and hierarchies. Share templates seamlessly across teams and assign custom user roles. Elevate your workflow today!", "subscribe-card-teamplan": "Unlock the full power of collaboration! Create unlimited organizations, teams, and hierarchies. Share templates seamlessly across teams and assign custom user roles. Elevate your workflow today!",
"subscribe-card-plan": "Unlock premium features starting at just {{premiumPrice}}/month. Enjoy enhanced performance and only {{addonPrice}} per additional credit after your included premium credits.", "subscribe-card-plan": "Unlock premium features starting at just {{premiumPrice}}/month. Enjoy enhanced performance and only {{addonPrice}} per additional credit after your included premium credits.",
@@ -58,7 +64,7 @@
"welcome": "Welcome back!", "welcome": "Welcome back!",
"Login-to-your-account": "Login to your account", "Login-to-your-account": "Login to your account",
"password": "Password", "password": "Password",
"forgot-password": "Forgot password?", "forgot-password": "Forgot password",
"loading": "Loading...", "loading": "Loading...",
"of": "of", "of": "of",
"sign-SSO": "Sign in with SSO", "sign-SSO": "Sign in with SSO",
@@ -181,7 +187,9 @@
"created-date": "Created date", "created-date": "Created date",
"Type": "Type", "Type": "Type",
"Logs": "Logs", "Logs": "Logs",
"Expiry-date": "Expiry date" "Expiry-date": "Expiry date",
"Company": "Company",
"JobTitle": "Job title"
}, },
"report-help": { "report-help": {
"Draft Documents": "These are documents you have started but have not finalized for sending.", "Draft Documents": "These are documents you have started but have not finalized for sending.",
@@ -193,16 +201,15 @@
"Contactbook": "This is a list of contacts/signers added by you. These will appear as suggestions when you try to add signers to a new document.", "Contactbook": "This is a list of contacts/signers added by you. These will appear as suggestions when you try to add signers to a new document.",
"Templates": "This is a list of templates that are available to you for creating documents. You can click the 'use' button to create a new document using a template, modify the document & add signers in the next step." "Templates": "This is a list of templates that are available to you for creating documents. You can click the 'use' button to create a new document using a template, modify the document & add signers in the next step."
}, },
"form-name": { "Sign Yourself": "Sign yourself",
"Sign Yourself": "Sign yourself", "Request Signatures": "Request signatures",
"Request Signatures": "Request signatures", "New Template": "New template",
"New Template": "New template"
},
"file-type": "pdf, png, jpg, jpeg", "file-type": "pdf, png, jpg, jpeg",
"docx": "docx", "docx": "docx",
"file-selected": "file(s) selected", "file-selected": "file(s) selected",
"template-title": "Template title", "template-title": "Template title",
"document-title": "Document title", "document-title": "Document title",
"title": "Title",
"description": "Description", "description": "Description",
"time-to-complete": "Time to complete (Days)", "time-to-complete": "Time to complete (Days)",
"send-in-order": "Send in order", "send-in-order": "Send in order",
@@ -379,6 +386,7 @@
"certificate": "Certificate", "certificate": "Certificate",
"decline": "Decline", "decline": "Decline",
"finish": "Finish", "finish": "Finish",
"done": "Done",
"mail": "Mail", "mail": "Mail",
"sign-now": "Sign now", "sign-now": "Sign now",
"successfully-signed": "Successfully signed!", "successfully-signed": "Successfully signed!",
@@ -388,6 +396,10 @@
"Email-verified-alert-1": "Email is verified.", "Email-verified-alert-1": "Email is verified.",
"Email-verified-alert-2": "Email is already verified.", "Email-verified-alert-2": "Email is already verified.",
"upload-stamp-image": "Upload stamp image", "upload-stamp-image": "Upload stamp image",
"draw-signature": "Draw signature",
"draw-initials": "Draw initials",
"enter-text": "Enter text",
"enter-widgettype": "Enter {{widgetType}}",
"draw": "Draw", "draw": "Draw",
"type": "Type", "type": "Type",
"color-type": { "color-type": {
@@ -408,6 +420,7 @@
"reset-password-alert-3": "Reset Your Password", "reset-password-alert-3": "Reset Your Password",
"faild-animation": "Failed to load animation", "faild-animation": "Failed to load animation",
"apply": "Apply", "apply": "Apply",
"select-columns": "Select columns",
"copy-type": { "copy-type": {
"All pages": "All pages", "All pages": "All pages",
"All pages but last": "All pages but last", "All pages but last": "All pages but last",
@@ -471,7 +484,7 @@
"placeholder-alert-3": " Are you sure you want to send out this document for signatures?", "placeholder-alert-3": " Are you sure you want to send out this document for signatures?",
"placeholder-alert-4": "You have successfully sent mails to all recipients!", "placeholder-alert-4": "You have successfully sent mails to all recipients!",
"placeholder-mail-alert": "You have successfully sent email to {{name}}. Subsequent signers will get email(s) once {{name}} signs the document", "placeholder-mail-alert": "You have successfully sent email to {{name}}. Subsequent signers will get email(s) once {{name}} signs the document",
"placeholder-mail-alert-you": "Subsequent signers will get email(s) once you signs the document.", "placeholder-mail-alert-you": "Subsequent signers will get email(s) once you sign the document.",
"placeholder-alert-5": "Do you want to sign the document right now?", "placeholder-alert-5": "Do you want to sign the document right now?",
"placeholder-alert-6": "Please setup mail adapter to send mail!", "placeholder-alert-6": "Please setup mail adapter to send mail!",
"placeholder-alert-7": "Please select signer for add placeholder!", "placeholder-alert-7": "Please select signer for add placeholder!",
@@ -728,7 +741,7 @@
"public-tour-message": "The template needs to be public before you can generate a shareable link.", "public-tour-message": "The template needs to be public before you can generate a shareable link.",
"add-user-template": "You need to add a role before you can add fields for it.", "add-user-template": "You need to add a role before you can add fields for it.",
"pdf-uncompatible": "This pdf is not compatible, please contact {{appName}}", "pdf-uncompatible": "This pdf is not compatible, please contact {{appName}}",
"text-field-tour": "Fields of type 'Text' must be filled in advance before the document is sent. If you need the signers to provide input, use the 'Text Input' field instead.", "text-field-tour": "'Prefill' fields must be filled in advance before the document is sent. If you need the signers to provide input, use signers fields instead.",
"attach-signer-tour": "You need to attach a Signer to every role. You can do that by clicking this icon. Once you select a Signer it will be attached to all the fields associated with that role which appear in the same colour.", "attach-signer-tour": "You need to attach a Signer to every role. You can do that by clicking this icon. Once you select a Signer it will be attached to all the fields associated with that role which appear in the same colour.",
"allowed-signature-types": "Allowed signature types", "allowed-signature-types": "Allowed signature types",
"at-least-one-signature-type": "At least one signature type should be enabled.", "at-least-one-signature-type": "At least one signature type should be enabled.",
@@ -776,7 +789,7 @@
"agree-p1": "I confirm that I have read and understood the ", "agree-p1": "I confirm that I have read and understood the ",
"agree-p2": "Electronic Record and Signature Disclosure", "agree-p2": "Electronic Record and Signature Disclosure",
"agree-p3": "and consent to use electronic records and signatures.", "agree-p3": "and consent to use electronic records and signatures.",
"agrre-button": " Agree & Continue", "agrre-button": "I confirm & agree to continue",
"term-cond-title": "Terms and conditions", "term-cond-title": "Terms and conditions",
"term-cond-h": "ELECTRONIC RECORD AND SIGNATURE DISCLOSURE", "term-cond-h": "ELECTRONIC RECORD AND SIGNATURE DISCLOSURE",
"term-cond-p1": "This Electronic Record and Signature Disclosure ('Disclosure') is an agreement between the Document Creator ('Sender') and the Signer ('You'), facilitated through the {{appName}} platform ('Platform'). By signing documents via {{appName}}, you agree to the terms outlined in this Disclosure. Please read it carefully before proceeding.", "term-cond-p1": "This Electronic Record and Signature Disclosure ('Disclosure') is an agreement between the Document Creator ('Sender') and the Signer ('You'), facilitated through the {{appName}} platform ('Platform'). By signing documents via {{appName}}, you agree to the terms outlined in this Disclosure. Please read it carefully before proceeding.",
@@ -1036,10 +1049,98 @@
"search-templates": "Search templates…", "search-templates": "Search templates…",
"search-documents": "Search documents…", "search-documents": "Search documents…",
"search-contacts": "Search contacts…", "search-contacts": "Search contacts…",
"add-role-alert":"Please add at least one role",
"edit-draft":"Edit draft",
"invalid-email-found": "Invalid email found: {{email}}", "invalid-email-found": "Invalid email found: {{email}}",
"duplicate-email-found": "Duplicate email found: {{email}}", "duplicate-email-found": "Duplicate email found: {{email}}",
"vertical": "Vertical", "vertical": "Vertical",
"horizontal": "Horizontal", "horizontal": "Horizontal",
"billing": "Billing", "billing": "Billing",
"console": "Console" "console": "Console",
"prefill-widget":"Prefill Widgets",
"action-prohibited": "This action isn't allowed for your email domain. Please contact your administrator for assistance.",
"must-have-at-least-one-vacant-role": "You must have at least one role unassigned before setting a template to 'public'.",
"remove-duplicate": "Please remove duplicate option",
"prefill-bulk-error":"Bulk send is not allowed when prefill widgets are added. Please remove the prefill widgets to proceed.",
"session-expired-title": "Session Expired",
"access-denied": "Access denied",
"upgrade": "Upgrade",
"do-not-access-app": "You don't have access to this application.",
"dont-have-access": "You don't have access.",
"valid-email-alert": "Please enter a valid email address.",
"otp-not-validate": "OTP is not valid.",
"domain-not-allowed": "This domain is not allowed",
"atleast-one-recipient-alert": "Please add at least one recipient!",
"incorrect-password-or-decryption-failed": "Incorrect password or decryption failed.",
"incorrect-password-for-file": "Incorrect password for file: {{file}}",
"error-uploading-pdf": "Error while uploading PDF.",
"provide-password": "Please provide password.",
"only-pdf-allowed": "Only PDF files are allowed.",
"invalid-username-password-region": "Invalid username/password or region.",
"pfx-extension-alert": "Please upload a file with a .pfx extension.",
"email-already-exist": "Email already exists",
"branding": "Branding",
"branding-help": "Branding provides white labelling to your app",
"custom-sub-domain": "Custom sub-domain",
"app-name": "App Name",
"provide-domain-name": "provide your domain name",
"provide-app-name": "provide your app name",
"logo":"Logo",
"upload-app-logo": "upload your app logo",
"prefill-unfilled-widget" :"The following required field(s) cannot be left empty: {{emptyWidget}} Please fill them out to proceed.",
"Dashboard": "Dashboard",
"Analytics": "Analytics",
"Templates": "Templates",
"Need your sign": "Need your sign",
"In Progress": "In progress",
"Completed": "Completed",
"Drafts": "Drafts",
"Declined": "Declined",
"Expired": "Expired",
"Contactbook": "Contactbook",
"My Signature": "My signature",
"API Token": "API token",
"Webhook": "Webhook",
"Preferences": "Preferences",
"Teams": "Teams",
"Users": "Users",
"Drive": "Drive",
"Branding": "Branding",
"Mail": "Mail",
"Storage": "Storage",
"Signing certificate": "Signing certificate",
"General": "General",
"Organizations": "Organizations",
"OrgAdmins": "OrgAdmins",
"Debug Pdf": "Debug Pdf",
"New Document": "New Document",
"subscription": "subscription",
"Draft document": "Draft document",
"Draft template": "Draft template",
"Public sign": "Public sign",
"Signup": "Signup",
"delete-contact": "Delete Contact",
"total-records-found": "Total records found: {{count}}",
"Invalid-records-found": "Invalid records found: {{records}}",
"previous": "Previous",
"page-n-of-n": "Page {{currentPage}} of {{totalPages}}",
"import": "Import",
"search": "Search",
"viewed-on": "Viewed on: {{ViewedOn}}",
"signed-on": "Signed on: {{SignedOn}}",
"hide": "Hide",
"show-more": "Show More",
"browse-or-drag-to-replace-existing-file": "Browse or drag & drop a new file to replace the existing one",
"optional-details": "Optional details",
"mail-adapter-subscription-alert": "Please upgrade to Professional or Team plan to setup custom SMTP.",
"connect-to-mail": "Connect to Gmail",
"custom-smtp": "Custom SMTP",
"default-smtp": "{{appName}} default SMTP",
"host":"Host",
"port":"Port",
"sender-email": "Sender Email",
"username": "Username",
"use-default-mail-adapter": "Are you sure you want to use {{appName}}'s default mail servers to send your signature request emails? We recommend using your own Gmail or SMTP servers for improved inbox deliverability.",
"verification-code-sent-registered-email": "A verification code has been sent to your registered email <1>{{useremail}}</1> confirm your settings. Please enter the code below.",
"smpt-credentials": "SMTP Credentials"
} }
+112 -11
View File
@@ -26,6 +26,8 @@
"Name": "Nombre", "Name": "Nombre",
"Date": "Fecha" "Date": "Fecha"
}, },
"folder": "Carpeta",
"pdf": "Pdf",
"context-menu": { "context-menu": {
"Download": "Descargar", "Download": "Descargar",
"Rename": "Renombrar", "Rename": "Renombrar",
@@ -44,6 +46,10 @@
"contact-now": "Contactar ahora", "contact-now": "Contactar ahora",
"upgrade-to": "Mejorar a", "upgrade-to": "Mejorar a",
"plan": "Plan", "plan": "Plan",
"connect": "Conectar",
"connect-to-g-drive": "Conectar con Google Drive",
"reconnect-to-g-drive": "Volver a conectar con Google Drive",
"gdrive-info-connect": "Cuando Google Drive está conectado, el documento completado se guardará en la carpeta {{appName}} de Google Drive.",
"subscription-renew-warning": "Su suscripción vencerá en {{remainingDays}} días. Por favor, renueve su suscripción.", "subscription-renew-warning": "Su suscripción vencerá en {{remainingDays}} días. Por favor, renueve su suscripción.",
"subscribe-card-teamplan": "¡Libera todo el poder de la colaboración! Crea organizaciones, equipos y jerarquías ilimitadas. Comparte plantillas sin problemas entre equipos y asigna funciones de usuario personalizadas. ¡Mejora tu flujo de trabajo hoy mismo!", "subscribe-card-teamplan": "¡Libera todo el poder de la colaboración! Crea organizaciones, equipos y jerarquías ilimitadas. Comparte plantillas sin problemas entre equipos y asigna funciones de usuario personalizadas. ¡Mejora tu flujo de trabajo hoy mismo!",
"subscribe-card-plan": "Desbloquea funciones premium desde solo {{premiumPrice}}/mes. Disfruta de un rendimiento mejorado y solo {{addonPrice}} por crédito adicional después de tus créditos premium incluidos.", "subscribe-card-plan": "Desbloquea funciones premium desde solo {{premiumPrice}}/mes. Disfruta de un rendimiento mejorado y solo {{addonPrice}} por crédito adicional después de tus créditos premium incluidos.",
@@ -58,7 +64,7 @@
"welcome": "¡Bienvenido de nuevo!", "welcome": "¡Bienvenido de nuevo!",
"Login-to-your-account": "Ingresa a tu cuenta", "Login-to-your-account": "Ingresa a tu cuenta",
"password": "Contraseña", "password": "Contraseña",
"forgot-password": "¿Olvidaste la contraseña?", "forgot-password": "¿Olvidaste la contraseña",
"loading": "Cargando...", "loading": "Cargando...",
"of": "de", "of": "de",
"sign-SSO": "Ingresar con SSO", "sign-SSO": "Ingresar con SSO",
@@ -181,7 +187,9 @@
"created-date": "Fecha de creación", "created-date": "Fecha de creación",
"Type": "Tipo", "Type": "Tipo",
"Logs": "Registros", "Logs": "Registros",
"Expiry-date": "Date d'expiration" "Expiry-date": "Date d'expiration",
"Company": "Compañía",
"JobTitle": "Título del puesto"
}, },
"report-help": { "report-help": {
"Draft Documents": "Estos son documentos que has iniciado pero no has finalizado para su envío.", "Draft Documents": "Estos son documentos que has iniciado pero no has finalizado para su envío.",
@@ -193,16 +201,15 @@
"Contactbook": "Esta es una lista de contactos/firmantes añadidos por ti. Aparecerán como sugerencias cuando intentes añadir firmantes a un nuevo documento.", "Contactbook": "Esta es una lista de contactos/firmantes añadidos por ti. Aparecerán como sugerencias cuando intentes añadir firmantes a un nuevo documento.",
"Templates": "Esta es una lista de plantillas que están a tu disposición para crear documentos. Puedes hacer clic en el botón «usar» para crear un nuevo documento utilizando una plantilla, modifica el documento y añade firmantes en el siguiente paso." "Templates": "Esta es una lista de plantillas que están a tu disposición para crear documentos. Puedes hacer clic en el botón «usar» para crear un nuevo documento utilizando una plantilla, modifica el documento y añade firmantes en el siguiente paso."
}, },
"form-name": { "Sign Yourself": "Firmar",
"Sign Yourself": "Firmar", "Request Signatures": "Solicitar firmas",
"Request Signatures": "Solicitar firmas", "New Template": "Nueva plantilla",
"New Template": "Nueva plantilla"
},
"file-type": "pdf, png, jpg, jpeg", "file-type": "pdf, png, jpg, jpeg",
"docx": "docx", "docx": "docx",
"file-selected": "archivo seleccionado", "file-selected": "archivo seleccionado",
"template-title": "Título de la plantilla", "template-title": "Título de la plantilla",
"document-title": "Título del documento", "document-title": "Título del documento",
"title": "Título",
"description": "Descripción", "description": "Descripción",
"time-to-complete": "Plazo de finalización (días)", "time-to-complete": "Plazo de finalización (días)",
"send-in-order": "Enviar en orden", "send-in-order": "Enviar en orden",
@@ -380,6 +387,7 @@
"certificate": "Certificado", "certificate": "Certificado",
"decline": "Rechazar", "decline": "Rechazar",
"finish": "Finalizar", "finish": "Finalizar",
"done": "Hecho",
"mail": "Correo", "mail": "Correo",
"sign-now": "Firmar ahora", "sign-now": "Firmar ahora",
"successfully-signed": "¡Firmado exitosamente!", "successfully-signed": "¡Firmado exitosamente!",
@@ -389,6 +397,10 @@
"Email-verified-alert-1": "El correo está verificado.", "Email-verified-alert-1": "El correo está verificado.",
"Email-verified-alert-2": "El correo ya ha sido verificado.", "Email-verified-alert-2": "El correo ya ha sido verificado.",
"upload-stamp-image": "Subir imagen del sello", "upload-stamp-image": "Subir imagen del sello",
"draw-signature": "Dibujar firma",
"draw-initials": "Dibujar iniciales",
"enter-text": "Introducir texto",
"enter-widgettype": "Introduzca {{widgetType}}",
"draw": "Dibujar", "draw": "Dibujar",
"type": "Escribir", "type": "Escribir",
"color-type": { "color-type": {
@@ -409,6 +421,7 @@
"reset-password-alert-3": "Restablece tu contraseña", "reset-password-alert-3": "Restablece tu contraseña",
"faild-animation": "Error al cargar la animación", "faild-animation": "Error al cargar la animación",
"apply": "Aplicar", "apply": "Aplicar",
"select-columns": "Seleccionar columnas",
"copy-type": { "copy-type": {
"All pages": "Todas las páginas", "All pages": "Todas las páginas",
"All pages but last": "Todas las páginas menos la última", "All pages but last": "Todas las páginas menos la última",
@@ -471,7 +484,7 @@
"placeholder-alert-3": " ¿En definitiva quieres enviar este documento para ser firmado?", "placeholder-alert-3": " ¿En definitiva quieres enviar este documento para ser firmado?",
"placeholder-alert-4": "¡Has enviado exitosamente correos a todos los destinatarios!", "placeholder-alert-4": "¡Has enviado exitosamente correos a todos los destinatarios!",
"placeholder-mail-alert": "Has enviado un correo electrónico con éxito a {{name}}. Los siguientes firmantes recibirán un correo electrónico una vez que {{name}} firme el documento.", "placeholder-mail-alert": "Has enviado un correo electrónico con éxito a {{name}}. Los siguientes firmantes recibirán un correo electrónico una vez que {{name}} firme el documento.",
"placeholder-mail-alert-you": "Los firmantes posteriores recibirán correos electrónicos una vez que firme el documento.", "placeholder-mail-alert-you": "Los firmantes siguientes recibirán un correo electrónico una vez que usted firme el documento.",
"placeholder-alert-5": "¿Quieres firmar documentos ahora mismo?", "placeholder-alert-5": "¿Quieres firmar documentos ahora mismo?",
"placeholder-alert-6": "¡Por favor, configura el adaptador de correo para enviar correos!", "placeholder-alert-6": "¡Por favor, configura el adaptador de correo para enviar correos!",
"placeholder-alert-7": "¡Por favor, selecciona un firmante para agregar un marcador de posición!", "placeholder-alert-7": "¡Por favor, selecciona un firmante para agregar un marcador de posición!",
@@ -728,7 +741,7 @@
}, },
"form-title-1": "Configuración del flujo de documentos", "form-title-1": "Configuración del flujo de documentos",
"form-title-2": "Configuración de seguridad", "form-title-2": "Configuración de seguridad",
"text-field-tour": "Los campos de tipo 'Texto' deben completarse con anticipación antes de enviar el documento. Si necesita que los firmantes proporcionen información, utilice el campo 'Entrada de texto'", "text-field-tour": "Los campos de 'Rellenado previo' deben completarse antes de enviar el documento. Si necesita que los firmantes proporcionen información, utilice los campos de firmantes.",
"attach-signer-tour": "Debe adjuntar un firmante a cada función. Puede hacerlo haciendo clic en este icono. Una vez que seleccione un Firmante, se adjuntará a todos los campos asociados con ese rol que aparecen en el mismo color.", "attach-signer-tour": "Debe adjuntar un firmante a cada función. Puede hacerlo haciendo clic en este icono. Una vez que seleccione un Firmante, se adjuntará a todos los campos asociados con ese rol que aparecen en el mismo color.",
"allowed-signature-types": "Tipos de firma permitidos", "allowed-signature-types": "Tipos de firma permitidos",
"at-least-one-signature-type": "Se debe habilitar al menos un tipo de firma.", "at-least-one-signature-type": "Se debe habilitar al menos un tipo de firma.",
@@ -776,7 +789,7 @@
"agree-p1": "Confirmo que he leído y comprendido el ", "agree-p1": "Confirmo que he leído y comprendido el ",
"agree-p2": "Registro Electrónico y Divulgación de Firma", "agree-p2": "Registro Electrónico y Divulgación de Firma",
"agree-p3": "y consentimiento para utilizar registros y firmas electrónicas.", "agree-p3": "y consentimiento para utilizar registros y firmas electrónicas.",
"agrre-button": "Aceptar y continuar", "agrre-button": "Confirmo y acepto continuar",
"term-cond-title": "Términos y condiciones", "term-cond-title": "Términos y condiciones",
"term-cond-h": "DIVULGACIÓN DE REGISTRO ELECTRÓNICO Y FIRMA", "term-cond-h": "DIVULGACIÓN DE REGISTRO ELECTRÓNICO Y FIRMA",
"term-cond-p1": "Esta Divulgación de Firma y Registro Electrónico ('Divulgación') es un acuerdo entre el Creador del Documento ('Remitente') y el Firmante ('Usted'), facilitado a través de la plataforma {{appName}} ('Plataforma'). Al firmar documentos a través de {{appName}}, usted acepta los términos descritos en esta Divulgación. Léala detenidamente antes de continuar.", "term-cond-p1": "Esta Divulgación de Firma y Registro Electrónico ('Divulgación') es un acuerdo entre el Creador del Documento ('Remitente') y el Firmante ('Usted'), facilitado a través de la plataforma {{appName}} ('Plataforma'). Al firmar documentos a través de {{appName}}, usted acepta los términos descritos en esta Divulgación. Léala detenidamente antes de continuar.",
@@ -1039,7 +1052,95 @@
"invalid-email-found": "Correo electrónico no válido encontrado: {{email}}", "invalid-email-found": "Correo electrónico no válido encontrado: {{email}}",
"duplicate-email-found": "Correo electrónico duplicado encontrado: {{email}}", "duplicate-email-found": "Correo electrónico duplicado encontrado: {{email}}",
"vertical": "Vertical", "vertical": "Vertical",
"add-role-alert": "Por favor, agregue al menos un rol",
"edit-draft": "Editar borrador",
"horizontal": "Horizontal", "horizontal": "Horizontal",
"billing": "Facturación", "billing": "Facturación",
"console": "Consola" "console": "Consola",
"prefill-widget": "Widgets de Relleno Previo",
"action-prohibited": "Esta acción no está permitida para su dominio de correo electrónico. Por favor, contacte con su administrador para obtener ayuda.",
"must-have-at-least-one-vacant-role": "Debe dejar al menos un rol sin asignar antes de establecer un template como 'public'.",
"remove-duplicate": "Por favor, elimina la opción duplicada",
"prefill-bulk-error": "El envío masivo no está permitido cuando se han agregado widgets de pre-rellenado. Por favor, elimine los widgets de pre-rellenado para continuar.",
"session-expired-title": "Sesión expirada",
"access-denied": "Acceso denegado",
"upgrade": "Actualizar",
"do-not-access-app": "No tienes acceso a esta aplicación.",
"dont-have-access": "No tienes acceso.",
"valid-email-alert": "Por favor ingresa una dirección de correo electrónico válida.",
"otp-not-validate": "OTP no es válido.",
"domain-not-allowed": "Este dominio no está permitido",
"atleast-one-recipient-alert": "¡Por favor agrega al menos un destinatario!",
"incorrect-password-or-decryption-failed": "Contraseña incorrecta o fallo de descifrado.",
"incorrect-password-for-file": "Contraseña incorrecta para el archivo: {{file}}",
"error-uploading-pdf": "Error al subir PDF.",
"provide-password": "Por favor proporciona la contraseña.",
"only-pdf-allowed": "Solo se permiten archivos PDF.",
"invalid-username-password-region": "Usuario/contraseña o región inválidos.",
"pfx-extension-alert": "Por favor sube un archivo con extensión .pfx.",
"email-already-exist": "El correo electrónico ya existe",
"branding": "Marca",
"branding-help": "El branding permite el white labelling de su aplicación",
"custom-sub-domain": "Subdominio personalizado",
"app-name": "Nombre de la aplicación",
"provide-domain-name": "Proporcione su nombre de dominio",
"provide-app-name": "Proporcione el nombre de su aplicación",
"logo": "Logo",
"upload-app-logo": "Suba el logotipo de su aplicación",
"prefill-unfilled-widget": "Los siguientes campos obligatorios no pueden quedar vacíos: {{emptyWidget}}. Por favor, complételos para continuar.",
"Dashboard": "Panel",
"Analytics": "Analítica",
"Templates": "Plantillas",
"Need your sign": "Necesitan tu firma",
"In Progress": "En progreso",
"Completed": "Completado",
"Drafts": "Borradores",
"Declined": "Rechazados",
"Expired": "Expirados",
"Contactbook": "Agenda de contactos",
"My Signature": "Mi firma",
"API Token": "Token API",
"Webhook": "Webhook",
"Preferences": "Preferencias",
"Teams": "Equipos",
"Users": "Usuarios",
"Drive": "Drive",
"Branding": "Marca",
"Mail": "Correo",
"Storage": "Almacenamiento",
"Signing certificate": "Certificado de firma",
"General": "General",
"Organizations": "Organizaciones",
"OrgAdmins": "OrgAdmins",
"Debug Pdf": "Depurar PDF",
"New Document": "Nuevo documento",
"subscription": "Suscripción",
"Draft document": "Borrador de documento",
"Draft template": "Borrador de plantilla",
"Public sign": "Firma pública",
"Signup": "Registrarse",
"delete-contact": "Eliminar contacto",
"total-records-found": "Total de registros encontrados: {{count}}",
"Invalid-records-found": "Registros inválidos encontrados: {{records}}",
"previous": "Anterior",
"page-n-of-n": "Página {{currentPage}} de {{totalPages}}",
"import": "Importar",
"search": "Buscar",
"viewed-on": "Visto el: {{ViewedOn}}",
"signed-on": "Firmado el: {{SignedOn}}",
"hide": "Ocultar",
"show-more": "Mostrar más",
"browse-or-drag-to-replace-existing-file": "Busque o arrastre y suelte un nuevo archivo para reemplazar el existente",
"optional-details": "Detalles opcionales",
"mail-adapter-subscription-alert": "Bitte upgraden Sie auf den Professional- oder Team-Plan, um ein benutzerdefiniertes SMTP einzurichten.",
"connect-to-mail": "Conectar con Gmail",
"custom-smtp": "SMTP personalizado",
"default-smtp": "SMTP predeterminado de {{appName}}",
"host": "Host",
"port": "Puerto",
"sender-email": "Correo del remitente",
"username": "Nombre de usuario",
"use-default-mail-adapter": "¿Está seguro de que desea usar los servidores de correo predeterminados de {{appName}} para enviar solicitudes de firma? Recomendamos usar su propio servidor de Gmail o SMTP para una mejor entregabilidad.",
"verification-code-sent-registered-email": "Se ha enviado un código de verificación a su correo registrado <1>{{useremail}}</1>. Ingrese el código a continuación para confirmar su configuración.",
"smpt-credentials": "Credenciales SMTP"
} }
+112 -12
View File
@@ -26,6 +26,8 @@
"Name": "Nom et Prénom", "Name": "Nom et Prénom",
"Date": "Date" "Date": "Date"
}, },
"folder": "Dossier",
"pdf": "Pdf",
"context-menu": { "context-menu": {
"Download": "Télécharger", "Download": "Télécharger",
"Rename": "Renommer", "Rename": "Renommer",
@@ -45,6 +47,10 @@
"upgrade-to": "Mettre à niveau vers", "upgrade-to": "Mettre à niveau vers",
"pro": "PRO", "pro": "PRO",
"plan": "Offre", "plan": "Offre",
"connect": "Connecter",
"connect-to-g-drive": "Se connecter à Google Drive",
"reconnect-to-g-drive": "Se reconnecter à Google Drive",
"gdrive-info-connect": "Lorsque Google Drive est connecté, le document complété sera enregistré dans le dossier {{appName}} sur Google Drive.",
"subscription-renew-warning": "Votre abonnement expirera dans {{remainingDays}} jours. Veuillez renouveler votre abonnement.", "subscription-renew-warning": "Votre abonnement expirera dans {{remainingDays}} jours. Veuillez renouveler votre abonnement.",
"subscribe-card-teamplan": "Libérez toute la puissance de la collaboration ! Créez un nombre illimité d'organisations, d'équipes et de hiérarchies. Partagez des modèles de manière transparente entre les équipes et attribuez des rôles d'utilisateur personnalisés. Améliorez votre flux de travail dès aujourd'hui !", "subscribe-card-teamplan": "Libérez toute la puissance de la collaboration ! Créez un nombre illimité d'organisations, d'équipes et de hiérarchies. Partagez des modèles de manière transparente entre les équipes et attribuez des rôles d'utilisateur personnalisés. Améliorez votre flux de travail dès aujourd'hui !",
"subscribe-card-plan": "Débloquez des fonctionnalités premium à partir de seulement {{premiumPrice}}/mois. Bénéficiez de performances améliorées et de seulement {{addonPrice}} par crédit supplémentaire après vos crédits premium inclus.", "subscribe-card-plan": "Débloquez des fonctionnalités premium à partir de seulement {{premiumPrice}}/mois. Bénéficiez de performances améliorées et de seulement {{addonPrice}} par crédit supplémentaire après vos crédits premium inclus.",
@@ -58,7 +64,7 @@
"welcome": "Content de te revoir!", "welcome": "Content de te revoir!",
"Login-to-your-account": "Se connecter à son compte", "Login-to-your-account": "Se connecter à son compte",
"password": "Mot de passe", "password": "Mot de passe",
"forgot-password": "Mot de passe oublié?", "forgot-password": "Mot de passe oublié",
"loading": "Chargement...", "loading": "Chargement...",
"of": "de", "of": "de",
"sign-SSO": "Connectez-vous avec SSO", "sign-SSO": "Connectez-vous avec SSO",
@@ -155,7 +161,9 @@
"created-date": "Date de création", "created-date": "Date de création",
"Type": "Saisir", "Type": "Saisir",
"Logs": "Journaux", "Logs": "Journaux",
"Expiry-date": "Fecha de caducidad" "Expiry-date": "Fecha de caducidad",
"Company": "Organisation",
"JobTitle": "Votre Fonction"
}, },
"btnLabel": { "btnLabel": {
"sign": "Signer", "sign": "Signer",
@@ -192,16 +200,15 @@
"Contactbook": "Il s'agit d'une liste de contacts/signataires que vous avez ajoutés. Ceux-ci apparaîtront sous forme de suggestions lorsque vous tenterez d'ajouter des signataires à un nouveau document.", "Contactbook": "Il s'agit d'une liste de contacts/signataires que vous avez ajoutés. Ceux-ci apparaîtront sous forme de suggestions lorsque vous tenterez d'ajouter des signataires à un nouveau document.",
"Templates": "Il s'agit d'une liste de modèles à votre disposition pour créer des documents. Vous pouvez cliquer sur le bouton 'Utiliser' pour créer un nouveau document à l'aide d'un modèle, modifier le document et ajouter des signataires à l'étape suivante." "Templates": "Il s'agit d'une liste de modèles à votre disposition pour créer des documents. Vous pouvez cliquer sur le bouton 'Utiliser' pour créer un nouveau document à l'aide d'un modèle, modifier le document et ajouter des signataires à l'étape suivante."
}, },
"form-name": { "Sign Yourself": "signez vous-même",
"Sign Yourself": "signez vous-même", "Request Signatures": "Demander des signatures",
"Request Signatures": "Demander des signatures", "New Template": "Nouveau modèle",
"New Template": "Nouveau modèle"
},
"file-type": "pdf, png, jpg, jpeg", "file-type": "pdf, png, jpg, jpeg",
"docx": "docx", "docx": "docx",
"file-selected": "fichier sélectionné", "file-selected": "fichier sélectionné",
"template-title": "Titre du modèle", "template-title": "Titre du modèle",
"document-title": "Titre du document", "document-title": "Titre du document",
"title": "Titre",
"description": "Description", "description": "Description",
"time-to-complete": "Temps de réalisation (jours)", "time-to-complete": "Temps de réalisation (jours)",
"send-in-order": "Envoyer dans l'ordre ?", "send-in-order": "Envoyer dans l'ordre ?",
@@ -379,6 +386,7 @@
"certificate": "Certificat", "certificate": "Certificat",
"decline": "refusé", "decline": "refusé",
"finish": "terminé", "finish": "terminé",
"done": "Terminé",
"mail": "Mail", "mail": "Mail",
"sign-now": "Signez maintenant", "sign-now": "Signez maintenant",
"successfully-signed": "Signé avec succès !", "successfully-signed": "Signé avec succès !",
@@ -388,6 +396,10 @@
"Email-verified-alert-1": "L'e-mail est vérifié.", "Email-verified-alert-1": "L'e-mail est vérifié.",
"Email-verified-alert-2": "L'e-mail est déjà vérifié.", "Email-verified-alert-2": "L'e-mail est déjà vérifié.",
"upload-stamp-image": "Télécharger l'image du tampon", "upload-stamp-image": "Télécharger l'image du tampon",
"draw-signature": "Dessiner la signature",
"draw-initials": "Dessiner les initiales",
"enter-text": "Saisir du texte",
"enter-widgettype": "Saisir {{widgetType}}",
"draw": "Dessiner", "draw": "Dessiner",
"type": "Taper", "type": "Taper",
"color-type": { "color-type": {
@@ -471,7 +483,7 @@
"placeholder-alert-3": "Etes-vous sûr de vouloir envoyer ce document pour signature ? ", "placeholder-alert-3": "Etes-vous sûr de vouloir envoyer ce document pour signature ? ",
"placeholder-alert-4": "Vous avez envoyé avec succès des mails à tous les", "placeholder-alert-4": "Vous avez envoyé avec succès des mails à tous les",
"placeholder-mail-alert": "Vous avez envoyé un e-mail avec succès à {{name}}. Les signataires suivants recevront un e-mail une fois que {{name}} aura signé le document.", "placeholder-mail-alert": "Vous avez envoyé un e-mail avec succès à {{name}}. Les signataires suivants recevront un e-mail une fois que {{name}} aura signé le document.",
"placeholder-mail-alert-you": "Les signataires suivants recevront un e-mail s que vous signez le document.", "placeholder-mail-alert-you": "Les signataires suivants recevront un e-mail une fois que vous aurez signé le document.",
"placeholder-alert-5": "Voulez-vous signer des documents maintenant ?", "placeholder-alert-5": "Voulez-vous signer des documents maintenant ?",
"placeholder-alert-6": "Veuillez configurer l'adaptateur de messagerie pour envoyer du courrier !", "placeholder-alert-6": "Veuillez configurer l'adaptateur de messagerie pour envoyer du courrier !",
"placeholder-alert-7": "Veuillez sélectionner le signataire pour ajouter un espace réservé !", "placeholder-alert-7": "Veuillez sélectionner le signataire pour ajouter un espace réservé !",
@@ -696,7 +708,7 @@
"quota-mail-info": "Pour maintenir la qualité du service et prévenir le spam, OpenSign permet jusqu'à 15 e-mails par mois avec le plan gratuit. Passez à l'offre supérieure pour un envoi illimité d'e-mails.", "quota-mail-info": "Pour maintenir la qualité du service et prévenir le spam, OpenSign permet jusqu'à 15 e-mails par mois avec le plan gratuit. Passez à l'offre supérieure pour un envoi illimité d'e-mails.",
"quota-mail-reset": "Les crédits de votre email de demande de signature seront réinitialisés le", "quota-mail-reset": "Les crédits de votre email de demande de signature seront réinitialisés le",
"quota-mail": "Vous avez atteint votre limite de 15 e-mails de demande de signature pour ce mois. Mettez à niveau maintenant pour continuer à envoyer des e-mails directement.", "quota-mail": "Vous avez atteint votre limite de 15 e-mails de demande de signature pour ce mois. Mettez à niveau maintenant pour continuer à envoyer des e-mails directement.",
"quota-mail-tip-tip": "Astuce: Vous pouvez toujours signer un nombre <1>illimité de documents</1> en partageant manuellement le lien de demande de signature.", "quota-mail-tip": "Astuce: Vous pouvez toujours signer un nombre <1>illimité de documents</1> en partageant manuellement le lien de demande de signature.",
"quota-mail-head": "Quota atteint", "quota-mail-head": "Quota atteint",
"unauthorized-modal": "Vous n'êtes pas autorisé à effectuer cette action, veuillez contacter {{adminEmail}}.", "unauthorized-modal": "Vous n'êtes pas autorisé à effectuer cette action, veuillez contacter {{adminEmail}}.",
"sent-this-month": "envoyé ce mois-ci", "sent-this-month": "envoyé ce mois-ci",
@@ -728,7 +740,7 @@
"public-tour-message": "Le modèle doit être public avant que vous puissiez générer un lien partageable.", "public-tour-message": "Le modèle doit être public avant que vous puissiez générer un lien partageable.",
"add-user-template": "Vous devez ajouter un rôle avant de pouvoir lui ajouter des champs. ", "add-user-template": "Vous devez ajouter un rôle avant de pouvoir lui ajouter des champs. ",
"pdf-uncompatible": "PDF n'est pas compatible, veuillez contacter {{appName}}", "pdf-uncompatible": "PDF n'est pas compatible, veuillez contacter {{appName}}",
"text-field-tour": "Les champs de type 'Texte' doivent être remplis à l'avance avant l'envoi du document. Si vous avez besoin que les signataires fournissent des informations, utilisez plutôt le champ 'Saisie de texte'.", "text-field-tour": "Les champs 'Pré-remplissage' doivent être remplis avant l'envoi du document. Si vous avez besoin de l'intervention des signataires, utilisez plutôt les champs réservés aux signataires.",
"attach-signer-tour": "Vous devez associer un signataire à chaque rôle. Vous pouvez le faire en cliquant sur cette icône. Une fois que vous avez sélectionné un signataire, il sera attaché à tous les champs associés à ce rôle qui apparaissent dans la même couleur.", "attach-signer-tour": "Vous devez associer un signataire à chaque rôle. Vous pouvez le faire en cliquant sur cette icône. Une fois que vous avez sélectionné un signataire, il sera attaché à tous les champs associés à ce rôle qui apparaissent dans la même couleur.",
"allowed-signature-types": "Types de signature autorisés", "allowed-signature-types": "Types de signature autorisés",
"at-least-one-signature-type": "Au moins un type de signature doit être activé.", "at-least-one-signature-type": "Au moins un type de signature doit être activé.",
@@ -776,7 +788,7 @@
"agree-p1": "Je confirme avoir lu et compris les ", "agree-p1": "Je confirme avoir lu et compris les ",
"agree-p2": "Divulgation des enregistrements électroniques et des signatures", "agree-p2": "Divulgation des enregistrements électroniques et des signatures",
"agree-p3": "et consentez à l'utilisation d'enregistrements et de signatures électroniques.", "agree-p3": "et consentez à l'utilisation d'enregistrements et de signatures électroniques.",
"agrre-button": " Accepter et continuer ", "agrre-button": "Je confirme et j'accepte de continuer",
"term-cond-title": "Termes et conditions", "term-cond-title": "Termes et conditions",
"term-cond-h": "DIVULGATION D'ENREGISTREMENT ÉLECTRONIQUE ET DE SIGNATURE", "term-cond-h": "DIVULGATION D'ENREGISTREMENT ÉLECTRONIQUE ET DE SIGNATURE",
"term-cond-p1": "Cette divulgation d'enregistrement électronique et de signature (' Divulgation ') est un accord entre le créateur du document (' Expéditeur ') et le signataire (' Vous '), facilité via la plateforme {{appName}} ( Plateforme ). En signant des documents via {{appName}}, vous acceptez les conditions décrites dans cette divulgation. Veuillez la lire attentivement avant de continuer.", "term-cond-p1": "Cette divulgation d'enregistrement électronique et de signature (' Divulgation ') est un accord entre le créateur du document (' Expéditeur ') et le signataire (' Vous '), facilité via la plateforme {{appName}} ( Plateforme ). En signant des documents via {{appName}}, vous acceptez les conditions décrites dans cette divulgation. Veuillez la lire attentivement avant de continuer.",
@@ -1036,10 +1048,98 @@
"search-templates": "Rechercher des modèles…", "search-templates": "Rechercher des modèles…",
"search-documents": "Rechercher des documents…", "search-documents": "Rechercher des documents…",
"search-contacts": "Rechercher des contacts…", "search-contacts": "Rechercher des contacts…",
"add-role-alert": "Veuillez ajouter au moins un rôle",
"edit-draft": "Modifier le brouillon",
"invalid-email-found": "Adresse e-mail invalide trouvée : {{email}}", "invalid-email-found": "Adresse e-mail invalide trouvée : {{email}}",
"duplicate-email-found": "Adresse e-mail en double trouvée : {{email}}", "duplicate-email-found": "Adresse e-mail en double trouvée : {{email}}",
"vertical": "Vertical", "vertical": "Vertical",
"horizontal": "Horizontal", "horizontal": "Horizontal",
"billing": "Facturation", "billing": "Facturation",
"console": "Console" "console": "Console",
"prefill-widget": "Widgets de Préremplissage",
"action-prohibited": "Cette action n'est pas autorisée pour votre domaine de messagerie. Veuillez contacter votre administrateur pour obtenir de l'aide.",
"must-have-at-least-one-vacant-role": "Vous devez laisser au moins un rôle non attribué avant de définir un template comme 'public'.",
"remove-duplicate": "Veuillez supprimer l'option en double",
"prefill-bulk-error": "L'envoi en masse n'est pas autorisé lorsque des widgets de pré-remplissage sont ajoutés. Veuillez supprimer les widgets de pré-remplissage pour continuer.",
"session-expired-title": "Session expirée",
"access-denied": "Accès refusé",
"upgrade": "Mettre à jour",
"do-not-access-app": "Vous n'avez pas accès à cette application.",
"dont-have-access": "Vous n'avez pas accès.",
"valid-email-alert": "Veuillez saisir une adresse e-mail valide.",
"otp-not-validate": "OTP non valide.",
"domain-not-allowed": "Ce domaine n'est pas autorisé",
"atleast-one-recipient-alert": "Veuillez ajouter au moins un destinataire !",
"incorrect-password-or-decryption-failed": "Mot de passe incorrect ou échec du déchiffrement.",
"incorrect-password-for-file": "Mot de passe incorrect pour le fichier : {{file}}",
"error-uploading-pdf": "Erreur lors du téléchargement du PDF.",
"provide-password": "Veuillez fournir le mot de passe.",
"only-pdf-allowed": "Seuls les fichiers PDF sont autorisés.",
"invalid-username-password-region": "Nom d'utilisateur/mot de passe ou région invalide.",
"pfx-extension-alert": "Veuillez télécharger un fichier avec l'extension .pfx.",
"email-already-exist": "L'e-mail existe déjà",
"branding": "Image de marque",
"branding-help": "Le branding permet le white labelling de votre application",
"custom-sub-domain": "Sous-domaine personnalisé",
"app-name": "Nom de l'application",
"provide-domain-name": "Fournissez votre nom de domaine",
"provide-app-name": "Fournissez le nom de votre application",
"logo": "Logo",
"upload-app-logo": "Téléchargez le logo de votre application",
"prefill-unfilled-widget": "Les champs obligatoires suivants ne peuvent pas être vides : {{emptyWidget}}. Veuillez les remplir pour continuer.",
"Dashboard": "Tableau de bord",
"Analytics": "Analytique",
"Templates": "Modèles",
"Need your sign": "Besoin de votre signature",
"In Progress": "En cours",
"Completed": "Complété",
"Drafts": "Brouillons",
"Declined": "Signature refusé",
"Expired": "Expiré",
"Contactbook": "Carnet de contacts",
"My Signature": "Ma signature",
"API Token": "Jeton API",
"Webhook": "Webhook",
"Preferences": "Préférences",
"Teams": "Équipe",
"Users": "Utilisateurs",
"Drive": "Lecteur",
"Branding": "Image de marque",
"Mail": "Courrier",
"Storage": "Stockage",
"Signing certificate": "Certificat de signature",
"General": "Général",
"Organizations": "Organisations",
"OrgAdmins": "OrgAdmins",
"Debug Pdf": "Déboguer le PDF",
"New Document": "Nouveau document",
"subscription": "Abonnement",
"Draft document": "Brouillon de document",
"Draft template": "Brouillon de modèle",
"Public sign": "Signature publique",
"Signup": "Inscription",
"delete-contact": "Supprimer le contact",
"total-records-found": "Nombre total d'enregistrements trouvés : {{count}}",
"Invalid-records-found": "Enregistrements invalides trouvés : {{records}}",
"previous": "Précédent",
"page-n-of-n": "Page {{currentPage}} sur {{totalPages}}",
"import": "Importer",
"search": "Rechercher",
"viewed-on": "Consulté le : {{ViewedOn}}",
"signed-on": "Signé le : {{SignedOn}}",
"hide": "Masquer",
"show-more": "Afficher plus",
"browse-or-drag-to-replace-existing-file": "Parcourez ou faites glisser un nouveau fichier pour remplacer l'existant",
"optional-details": "Détails facultatifs",
"mail-adapter-subscription-alert": "Veuillez passer au plan Professionnel ou Équipe pour configurer un SMTP personnalisé.",
"connect-to-mail": "Se connecter à Gmail",
"custom-smtp": "SMTP personnalisé",
"default-smtp": "SMTP par défaut de {{appName}}",
"host": "Hôte",
"port": "Port",
"sender-email": "Email de l'expéditeur",
"username": "Nom d'utilisateur",
"use-default-mail-adapter": "Voulez-vous vraiment utiliser les serveurs de messagerie par défaut de {{appName}} pour envoyer vos demandes de signature ? Nous vous recommandons d'utiliser votre propre serveur Gmail ou SMTP pour une meilleure délivrabilité.",
"verification-code-sent-registered-email": "Un code de vérification a été envoyé à votre email enregistré <1>{{useremail}}</1>. Veuillez entrer le code ci-dessous pour confirmer vos paramètres.",
"smpt-credentials": "Identifiants SMTP"
} }
+111 -11
View File
@@ -26,6 +26,8 @@
"Name": "नाम", "Name": "नाम",
"Date": "दिनांक" "Date": "दिनांक"
}, },
"folder": "फ़ोल्डर",
"pdf": "पीडीएफ़",
"context-menu": { "context-menu": {
"Download": "डाउनलोड करें", "Download": "डाउनलोड करें",
"Rename": "नाम बदलें", "Rename": "नाम बदलें",
@@ -44,6 +46,10 @@
"contact-now": "अभी संपर्क करें", "contact-now": "अभी संपर्क करें",
"upgrade-to": "इसमें अपग्रेड करें", "upgrade-to": "इसमें अपग्रेड करें",
"plan": "योजना", "plan": "योजना",
"connect": "कनेक्ट करें",
"connect-to-g-drive": "Google Drive से कनेक्ट करें",
"reconnect-to-g-drive": "Google Drive से फिर से कनेक्ट करें",
"gdrive-info-connect": "जब Google Drive जुड़ा होता है, तो पूर्ण दस्तावेज़ {{appName}} फ़ोल्डर में Google Drive पर सहेजा जाएगा।",
"subscription-renew-warning": "आपकी सदस्यता {{remainingDays}} दिनों में समाप्त हो जाएगी। कृपया अपनी सदस्यता नवीनीकृत करें।", "subscription-renew-warning": "आपकी सदस्यता {{remainingDays}} दिनों में समाप्त हो जाएगी। कृपया अपनी सदस्यता नवीनीकृत करें।",
"subscribe-card-teamplan": "सहयोग की पूरी शक्ति को अनलॉक करें! असीमित संगठन, टीम और पदानुक्रम बनाएं। टीमों में टेम्पलेट को निर्बाध रूप से साझा करें और कस्टम उपयोगकर्ता भूमिकाएँ असाइन करें। आज ही अपने वर्कफ़्लो को उन्नत करें!", "subscribe-card-teamplan": "सहयोग की पूरी शक्ति को अनलॉक करें! असीमित संगठन, टीम और पदानुक्रम बनाएं। टीमों में टेम्पलेट को निर्बाध रूप से साझा करें और कस्टम उपयोगकर्ता भूमिकाएँ असाइन करें। आज ही अपने वर्कफ़्लो को उन्नत करें!",
"subscribe-card-plan": "केवल {{premiumPrice}}/माह से शुरू होने वाली प्रीमियम सुविधाओं को अनलॉक करें। अपने शामिल प्रीमियम क्रेडिट के बाद प्रति अतिरिक्त क्रेडिट केवल {{addonPrice}} पर बढ़ी हुई प्रदर्शन का आनंद लें।", "subscribe-card-plan": "केवल {{premiumPrice}}/माह से शुरू होने वाली प्रीमियम सुविधाओं को अनलॉक करें। अपने शामिल प्रीमियम क्रेडिट के बाद प्रति अतिरिक्त क्रेडिट केवल {{addonPrice}} पर बढ़ी हुई प्रदर्शन का आनंद लें।",
@@ -58,7 +64,7 @@
"welcome": "वापसी पर स्वागत है!", "welcome": "वापसी पर स्वागत है!",
"Login-to-your-account": "अपने खाते में प्रवेश करे", "Login-to-your-account": "अपने खाते में प्रवेश करे",
"password": "पासवर्ड", "password": "पासवर्ड",
"forgot-password": "पासवर्ड भूल गए?", "forgot-password": "पासवर्ड भूल गए",
"loading": "लोड हो रहा है...", "loading": "लोड हो रहा है...",
"of": "का", "of": "का",
"sign-SSO": "SSO के साथ साइन इन करें", "sign-SSO": "SSO के साथ साइन इन करें",
@@ -181,7 +187,9 @@
"created-date": "निर्माण तिथि", "created-date": "निर्माण तिथि",
"Type": "प्रकार", "Type": "प्रकार",
"Logs": "लॉग", "Logs": "लॉग",
"Expiry-date": "समाप्ति तिथि" "Expiry-date": "समाप्ति तिथि",
"Company": "कंपनी",
"JobTitle": "पद"
}, },
"report-help": { "report-help": {
"Draft Documents": "ये वे दस्तावेज़ हैं जिन्हें आपने शुरू तो किया है लेकिन भेजने के लिए अंतिम रूप नहीं दिया है।", "Draft Documents": "ये वे दस्तावेज़ हैं जिन्हें आपने शुरू तो किया है लेकिन भेजने के लिए अंतिम रूप नहीं दिया है।",
@@ -193,16 +201,15 @@
"Contactbook": "यह आपके द्वारा जोड़े गए संपर्कों/हस्ताक्षरकर्ताओं की सूची है। जब आप किसी नए दस्तावेज़ में हस्ताक्षरकर्ताओं को जोड़ने का प्रयास करेंगे तो ये सुझावों के रूप में दिखाई देंगे।", "Contactbook": "यह आपके द्वारा जोड़े गए संपर्कों/हस्ताक्षरकर्ताओं की सूची है। जब आप किसी नए दस्तावेज़ में हस्ताक्षरकर्ताओं को जोड़ने का प्रयास करेंगे तो ये सुझावों के रूप में दिखाई देंगे।",
"Templates": "यह उन टेम्पलेट्स की सूची है जो दस्तावेज़ बनाने के लिए आपके लिए उपलब्ध हैं। आप टेम्पलेट का उपयोग करके एक नया दस्तावेज़ बनाने के लिए 'उपयोग करें' बटन पर क्लिक कर सकते हैं, दस्तावेज़ को संशोधित कर सकते हैं और अगले चरण में हस्ताक्षरकर्ताओं को जोड़ सकते हैं।" "Templates": "यह उन टेम्पलेट्स की सूची है जो दस्तावेज़ बनाने के लिए आपके लिए उपलब्ध हैं। आप टेम्पलेट का उपयोग करके एक नया दस्तावेज़ बनाने के लिए 'उपयोग करें' बटन पर क्लिक कर सकते हैं, दस्तावेज़ को संशोधित कर सकते हैं और अगले चरण में हस्ताक्षरकर्ताओं को जोड़ सकते हैं।"
}, },
"form-name": { "Sign Yourself": "स्वयं हस्ताक्षर करें",
"Sign Yourself": "स्वयं हस्ताक्षर करें", "Request Signatures": "हस्ताक्षर का अनुरोध करें",
"Request Signatures": "हस्ताक्षर का अनुरोध करें", "New Template": "नया टेम्पलेट",
"New Template": "नया टेम्पलेट"
},
"file-type": "pdf, png, jpg, jpeg", "file-type": "pdf, png, jpg, jpeg",
"docx": "docx", "docx": "docx",
"file-selected": "फ़ाइल चयनित", "file-selected": "फ़ाइल चयनित",
"template-title": "टेम्पलेट शीर्षक", "template-title": "टेम्पलेट शीर्षक",
"document-title": "दस्तावेज़ शीर्षक", "document-title": "दस्तावेज़ शीर्षक",
"title": "शीर्षक",
"description": "विवरण", "description": "विवरण",
"time-to-complete": "पूरा करने का समय (दिन)", "time-to-complete": "पूरा करने का समय (दिन)",
"send-in-order": "क्रम से भेजें", "send-in-order": "क्रम से भेजें",
@@ -379,6 +386,7 @@
"certificate": "प्रमाण पत्र", "certificate": "प्रमाण पत्र",
"decline": "अस्वीकार करें", "decline": "अस्वीकार करें",
"finish": "समाप्त करें", "finish": "समाप्त करें",
"done": "हो गया",
"mail": "मेल", "mail": "मेल",
"sign-now": "अभी हस्ताक्षर करें", "sign-now": "अभी हस्ताक्षर करें",
"successfully-signed": "सफलतापूर्वक हस्ताक्षर किए गए!", "successfully-signed": "सफलतापूर्वक हस्ताक्षर किए गए!",
@@ -388,6 +396,10 @@
"Email-verified-alert-1": "ईमेल सत्यापित है।", "Email-verified-alert-1": "ईमेल सत्यापित है।",
"Email-verified-alert-2": "ईमेल पहले से ही सत्यापित है।", "Email-verified-alert-2": "ईमेल पहले से ही सत्यापित है।",
"upload-stamp-image": "मोहर छवि अपलोड करें", "upload-stamp-image": "मोहर छवि अपलोड करें",
"draw-signature": "हस्ताक्षर बनाएं",
"draw-initials": "इनिशियल्स बनाएं",
"enter-text": "पाठ दर्ज करें",
"enter-widgettype": "{{widgetType}} दर्ज करें",
"draw": "आरेखित करें", "draw": "आरेखित करें",
"type": "टाइप", "type": "टाइप",
"color-type": { "color-type": {
@@ -471,7 +483,7 @@
"placeholder-alert-3": " क्या आप वाकई इस दस्तावेज़ को हस्ताक्षर के लिए भेजना चाहते हैं?", "placeholder-alert-3": " क्या आप वाकई इस दस्तावेज़ को हस्ताक्षर के लिए भेजना चाहते हैं?",
"placeholder-alert-4": "आपने सभी प्राप्तकर्ताओं को सफलतापूर्वक मेल भेज दिए हैं!", "placeholder-alert-4": "आपने सभी प्राप्तकर्ताओं को सफलतापूर्वक मेल भेज दिए हैं!",
"placeholder-mail-alert": "आपने {{name}} को सफलतापूर्वक ईमेल भेज दिया है। {{name}} द्वारा दस्तावेज़ पर हस्ताक्षर करने के बाद बाद के हस्ताक्षरकर्ताओं को ईमेल प्राप्त होंगे", "placeholder-mail-alert": "आपने {{name}} को सफलतापूर्वक ईमेल भेज दिया है। {{name}} द्वारा दस्तावेज़ पर हस्ताक्षर करने के बाद बाद के हस्ताक्षरकर्ताओं को ईमेल प्राप्त होंगे",
"placeholder-mail-alert-you": "आपके द्वारा दस्तावेज़ पर हस्ताक्षर करने के बाद बाद के हस्ताक्षरकर्ताओं को ईमेल प्राप्त होंगे।", "placeholder-mail-alert-you": "आपके दस्तावेज़ पर हस्ताक्षर करने के बाद अगले हस्ताक्षरकर्ता को ईमेल प्राप्त होगा।",
"placeholder-alert-5": "क्या आप अभी दस्तावेज़ पर हस्ताक्षर करना चाहते हैं?", "placeholder-alert-5": "क्या आप अभी दस्तावेज़ पर हस्ताक्षर करना चाहते हैं?",
"placeholder-alert-6": "मेल भेजने के लिए कृपया मेल एडॉप्टर सेटअप करें!", "placeholder-alert-6": "मेल भेजने के लिए कृपया मेल एडॉप्टर सेटअप करें!",
"placeholder-alert-7": "प्लेसहोल्डर जोड़ने के लिए कृपया हस्ताक्षरकर्ता चुनें!", "placeholder-alert-7": "प्लेसहोल्डर जोड़ने के लिए कृपया हस्ताक्षरकर्ता चुनें!",
@@ -728,7 +740,7 @@
"public-tour-message": "साझा करने योग्य लिंक उत्पन्न करने से पहले टेम्पलेट को सार्वजनिक होना चाहिए।", "public-tour-message": "साझा करने योग्य लिंक उत्पन्न करने से पहले टेम्पलेट को सार्वजनिक होना चाहिए।",
"add-user-template": "इसके लिए फ़ील्ड जोड़ने से पहले आपको एक भूमिका जोड़ने की आवश्यकता है।", "add-user-template": "इसके लिए फ़ील्ड जोड़ने से पहले आपको एक भूमिका जोड़ने की आवश्यकता है।",
"pdf-uncompatible": "यह पीडीएफ संगत नहीं है, कृपया {{appName}} से संपर्क करें", "pdf-uncompatible": "यह पीडीएफ संगत नहीं है, कृपया {{appName}} से संपर्क करें",
"text-field-tour": "दस्तावेज़ भेजे जाने से पहले 'टेक्स्ट' प्रकार के फ़ील्ड पहले से भरे जाने चाहिए। यदि आपको हस्ताक्षरकर्ताओं से इनपुट प्रदान करने की आवश्यकता है, तो इसके बजाय 'टेक्स्ट इनपुट' फ़ील्ड का उपयोग करें।", "text-field-tour": "दस्तावेज़ सबमिट करने से पहले 'प्रीफ़िल' फ़ील्ड को पहले से भरना होगा। यदि आपको हस्ताक्षरकर्ताओं से इनपुट की आवश्यकता है, तो इसके बजाय हस्ताक्षरकर्ता फ़ील्ड का उपयोग करें।",
"attach-signer-tour": "आपको प्रत्येक भूमिका में एक हस्ताक्षरकर्ता संलग्न करने की आवश्यकता है। आप इस आइकन पर क्लिक करके ऐसा कर सकते हैं। एक बार जब आप एक हस्ताक्षरकर्ता का चयन कर लेते हैं तो यह उस भूमिका से जुड़े सभी फ़ील्ड से जुड़ जाएगा जो एक ही रंग में दिखाई देते हैं।", "attach-signer-tour": "आपको प्रत्येक भूमिका में एक हस्ताक्षरकर्ता संलग्न करने की आवश्यकता है। आप इस आइकन पर क्लिक करके ऐसा कर सकते हैं। एक बार जब आप एक हस्ताक्षरकर्ता का चयन कर लेते हैं तो यह उस भूमिका से जुड़े सभी फ़ील्ड से जुड़ जाएगा जो एक ही रंग में दिखाई देते हैं।",
"allowed-signature-types": "अनुमत हस्ताक्षर प्रकार", "allowed-signature-types": "अनुमत हस्ताक्षर प्रकार",
"at-least-one-signature-type": "कम से कम एक हस्ताक्षर प्रकार सक्षम होना चाहिए।", "at-least-one-signature-type": "कम से कम एक हस्ताक्षर प्रकार सक्षम होना चाहिए।",
@@ -776,7 +788,7 @@
"agree-p1": "मैं पुष्टि करता हूं कि मैंने पढ़ लिया है और समझ लिया है ", "agree-p1": "मैं पुष्टि करता हूं कि मैंने पढ़ लिया है और समझ लिया है ",
"agree-p2": "इलेक्ट्रॉनिक रिकॉर्ड और हस्ताक्षर प्रकटीकरण", "agree-p2": "इलेक्ट्रॉनिक रिकॉर्ड और हस्ताक्षर प्रकटीकरण",
"agree-p3": "और इलेक्ट्रॉनिक रिकॉर्ड और हस्ताक्षर का उपयोग करने के लिए सहमति।", "agree-p3": "और इलेक्ट्रॉनिक रिकॉर्ड और हस्ताक्षर का उपयोग करने के लिए सहमति।",
"agrre-button": " सहमत हूँ और जारी रखें", "agrre-button": "मैं पुष्टि करता हूँ और आगे बढ़ने के लिए सहमत हूँ",
"term-cond-title": "नियम और शर्तें", "term-cond-title": "नियम और शर्तें",
"term-cond-h": "इलेक्ट्रॉनिक रिकॉर्ड और हस्ताक्षर प्रकटीकरण", "term-cond-h": "इलेक्ट्रॉनिक रिकॉर्ड और हस्ताक्षर प्रकटीकरण",
"term-cond-p1": "यह इलेक्ट्रॉनिक रिकॉर्ड और हस्ताक्षर प्रकटीकरण ('प्रकटीकरण') दस्तावेज़ निर्माता ('प्रेषक') और हस्ताक्षरकर्ता ('आप') के बीच एक समझौता है, जिसे {{appName}} प्लेटफ़ॉर्म ('प्लेटफ़ॉर्म') के माध्यम से सुगम बनाया गया है। {{appName}} के माध्यम से दस्तावेज़ों पर हस्ताक्षर करके, आप इस प्रकटीकरण में उल्लिखित शर्तों से सहमत होते हैं। कृपया आगे बढ़ने से पहले इसे ध्यान से पढ़ें।", "term-cond-p1": "यह इलेक्ट्रॉनिक रिकॉर्ड और हस्ताक्षर प्रकटीकरण ('प्रकटीकरण') दस्तावेज़ निर्माता ('प्रेषक') और हस्ताक्षरकर्ता ('आप') के बीच एक समझौता है, जिसे {{appName}} प्लेटफ़ॉर्म ('प्लेटफ़ॉर्म') के माध्यम से सुगम बनाया गया है। {{appName}} के माध्यम से दस्तावेज़ों पर हस्ताक्षर करके, आप इस प्रकटीकरण में उल्लिखित शर्तों से सहमत होते हैं। कृपया आगे बढ़ने से पहले इसे ध्यान से पढ़ें।",
@@ -1036,10 +1048,98 @@
"search-templates": "टेम्पलेट खोजें…", "search-templates": "टेम्पलेट खोजें…",
"search-documents": "दस्तावेज़ खोजें…", "search-documents": "दस्तावेज़ खोजें…",
"search-contacts": "संपर्क खोजें…", "search-contacts": "संपर्क खोजें…",
"add-role-alert": "कृपया कम से कम एक भूमिका जोड़ें",
"edit-draft": "ड्राफ्ट संपादित करें",
"invalid-email-found": "अमान्य ईमेल पाया गया: {{email}}", "invalid-email-found": "अमान्य ईमेल पाया गया: {{email}}",
"duplicate-email-found": "डुप्लिकेट ईमेल पाया गया: {{email}}", "duplicate-email-found": "डुप्लिकेट ईमेल पाया गया: {{email}}",
"vertical": "वर्टिकल", "vertical": "वर्टिकल",
"horizontal": "हॉरिज़ॉन्टल", "horizontal": "हॉरिज़ॉन्टल",
"billing": "बिलिंग", "billing": "बिलिंग",
"console": "कंसोल" "console": "कंसोल",
"prefill-widget": "पूर्व भराव विजेट्स",
"action-prohibited": "यह क्रिया आपके ईमेल डोमेन के लिए अनुमत नहीं है। कृपया सहायता के लिए अपने व्यवस्थापक से संपर्क करें।",
"must-have-at-least-one-vacant-role": "किसी टेम्पलेट को 'public' पर सेट करने से पहले कम से कम एक भूमिका खाली होनी चाहिए।",
"remove-duplicate": "कृपया डुप्लिकेट विकल्प हटाएं",
"prefill-bulk-error": "जब प्रीफ़िल विजेट जोड़े जाते हैं तो बल्क भेजना अनुमति नहीं है। कृपया आगे बढ़ने के लिए प्रीफ़िल विजेट हटा दें।",
"session-expired-title": "सत्र समाप्त हो गया",
"access-denied": "पहुंच अस्वीकृत",
"upgrade": "अपग्रेड",
"do-not-access-app": "आपको इस एप्लिकेशन तक पहुंच नहीं है।",
"dont-have-access": "आपको पहुंच नहीं है।",
"valid-email-alert": "कृपया एक मान्य ईमेल पता दर्ज करें।",
"otp-not-validate": "ओटीपी मान्य नहीं है।",
"domain-not-allowed": "यह डोमेन अनुमति नहीं है",
"atleast-one-recipient-alert": "कृपया कम से कम एक प्राप्तकर्ता जोड़ें!",
"incorrect-password-or-decryption-failed": "गलत पासवर्ड या डिक्रिप्शन विफल।",
"incorrect-password-for-file": "फ़ाइल के लिए गलत पासवर्ड: {{file}}",
"error-uploading-pdf": "PDF अपलोड करते समय त्रुटि।",
"provide-password": "कृपया पासवर्ड प्रदान करें।",
"only-pdf-allowed": "केवल PDF फ़ाइलें अनुमत हैं।",
"invalid-username-password-region": "अमान्य उपयोगकर्ता नाम/पासवर्ड या क्षेत्र।",
"pfx-extension-alert": ".pfx एक्सटेंशन वाली फ़ाइल अपलोड करें।",
"email-already-exist": "ईमेल पहले से मौजूद है",
"branding": "ब्रांडिंग",
"branding-help": "ब्रांडिंग आपकी ऐप में वाइट लेबलिंग की सुविधा देती है",
"custom-sub-domain": "कस्टम सब-डोमेन",
"app-name": "ऐप का नाम",
"provide-domain-name": "अपना डोमेन नाम दर्ज करें",
"provide-app-name": "अपना ऐप नाम दर्ज करें",
"logo": "लोगो",
"upload-app-logo": "अपने ऐप का लोगो अपलोड करें",
"prefill-unfilled-widget": "निम्न अनिवार्य फ़ील्ड खाली नहीं छोड़े जा सकते: {{emptyWidget}}। कृपया आगे बढ़ने के लिए इन्हें भरें।",
"Dashboard": "डैशबोर्ड",
"Analytics": "विश्लेषिकी",
"Templates": "टेम्पलेट्स",
"Need your sign": "आपके हस्ताक्षर की आवश्यकता है",
"In Progress": "प्रगति में है",
"Completed": "पूरा हुआ",
"Drafts": "ड्राफ्ट",
"Declined": "अस्वीकृत",
"Expired": "समाप्त",
"Contactbook": "संपर्क पुस्तिका",
"My Signature": "मेरा हस्ताक्षर",
"API Token": "एपीआई टोकन",
"Webhook": "वेबहूक",
"Preferences": "वरीयताएँ",
"Teams": "टीमें",
"Users": "उपयोगकर्ता",
"Drive": "ड्राइव",
"Branding": "ब्रांडिंग",
"Mail": "मेल",
"Storage": "भंडारण",
"Signing certificate": "हस्ताक्षर प्रमाण पत्र",
"General": "सामान्य",
"Organizations": "संगठन",
"OrgAdmins": "संगठन व्यवस्थापक",
"Debug Pdf": "पीडीएफ़ डीबग करें",
"New Document": "नया दस्तावेज़",
"subscription": "सब्सक्रिप्शन",
"Draft document": "ड्राफ्ट दस्तावेज़",
"Draft template": "ड्राफ्ट टेम्पलेट",
"Public sign": "पब्लिक साइन",
"Signup": "साइन अप करें",
"delete-contact": "संपर्क हटाएं",
"total-records-found": "कुल रिकॉर्ड मिले: {{count}}",
"Invalid-records-found": "अमान्य रिकॉर्ड मिले: {{records}}",
"previous": "पिछला",
"page-n-of-n": "पृष्ठ {{currentPage}} का {{totalPages}}",
"import": "आयात करें",
"search": "खोजें",
"viewed-on": "देखा गया: {{ViewedOn}}",
"signed-on": "हस्ताक्षर किया गया: {{SignedOn}}",
"hide": "छिपाएं",
"show-more": "और दिखाएं",
"browse-or-drag-to-replace-existing-file": "नई फ़ाइल ब्राउज़ करें या खींचकर छोड़ें ताकि मौजूदा फ़ाइल को बदला जा सके",
"optional-details": "वैकल्पिक विवरण",
"mail-adapter-subscription-alert": "कस्टम SMTP सेटअप करने के लिए कृपया प्रोफेशनल या टीम प्लान में अपग्रेड करें।",
"connect-to-mail": "Gmail से कनेक्ट करें",
"custom-smtp": "कस्टम SMTP",
"default-smtp": "{{appName}} डिफ़ॉल्ट SMTP",
"host": "होस्ट",
"port": "पोर्ट",
"sender-email": "प्रेषक ईमेल",
"username": "यूज़रनेम",
"use-default-mail-adapter": "क्या आप वाकई {{appName}} के डिफ़ॉल्ट मेल सर्वर का उपयोग करके सिग्नेचर अनुरोध भेजना चाहते हैं? बेहतर इनबॉक्स डिलीवरी के लिए हम अपने Gmail या SMTP सर्वर का उपयोग करने की सिफारिश करते हैं।",
"verification-code-sent-registered-email": "आपके पंजीकृत ईमेल <1>{{useremail}}</1> पर एक सत्यापन कोड भेजा गया है। कृपया अपनी सेटिंग की पुष्टि के लिए नीचे कोड दर्ज करें।",
"smpt-credentials": "SMTP क्रेडेंशियल्स"
} }
+110 -11
View File
@@ -26,6 +26,8 @@
"Name": "Nome", "Name": "Nome",
"Date": "Data" "Date": "Data"
}, },
"folder": "Cartella",
"pdf": "Pdf",
"context-menu": { "context-menu": {
"Download": "Scarica", "Download": "Scarica",
"Rename": "Rinomina", "Rename": "Rinomina",
@@ -44,6 +46,10 @@
"contact-now": "Contatta ora", "contact-now": "Contatta ora",
"upgrade-to": "Aggiorna a", "upgrade-to": "Aggiorna a",
"plan": "Piano", "plan": "Piano",
"connect": "Connetti",
"connect-to-g-drive": "Connetti a Google Drive",
"reconnect-to-g-drive": "Riconnetti a Google Drive",
"gdrive-info-connect": "Quando Google Drive è connesso, il documento completato verrà salvato nella cartella {{appName}} su Google Drive.",
"subscription-renew-warning": "Il tuo abbonamento scadrà tra {{remainingDays}} giorni. Ti preghiamo di rinnovarlo.", "subscription-renew-warning": "Il tuo abbonamento scadrà tra {{remainingDays}} giorni. Ti preghiamo di rinnovarlo.",
"subscribe-card-teamplan": "Sblocca tutto il potenziale della collaborazione! Crea organizzazioni, team e gerarchie illimitati. Condividi modelli senza problemi tra i team e assegna ruoli personalizzati agli utenti. Migliora il tuo flusso di lavoro oggi stesso!", "subscribe-card-teamplan": "Sblocca tutto il potenziale della collaborazione! Crea organizzazioni, team e gerarchie illimitati. Condividi modelli senza problemi tra i team e assegna ruoli personalizzati agli utenti. Migliora il tuo flusso di lavoro oggi stesso!",
"subscribe-card-plan": "Sblocca le funzionalità premium a partire da soli {{premiumPrice}}/mese. Approfitta di prestazioni migliorate e paga solo {{addonPrice}} per ogni credito aggiuntivo dopo quelli inclusi.", "subscribe-card-plan": "Sblocca le funzionalità premium a partire da soli {{premiumPrice}}/mese. Approfitta di prestazioni migliorate e paga solo {{addonPrice}} per ogni credito aggiuntivo dopo quelli inclusi.",
@@ -58,7 +64,7 @@
"welcome": "Bentornato!", "welcome": "Bentornato!",
"Login-to-your-account": "Accedi al tuo account", "Login-to-your-account": "Accedi al tuo account",
"password": "Password", "password": "Password",
"forgot-password": "Password dimenticata?", "forgot-password": "Password dimenticata",
"loading": "Caricamento...", "loading": "Caricamento...",
"of": "di", "of": "di",
"sign-SSO": "Accedi con SSO", "sign-SSO": "Accedi con SSO",
@@ -181,7 +187,9 @@
"created-date": "Data di creazione", "created-date": "Data di creazione",
"Type": "Tipo", "Type": "Tipo",
"Logs": "Log", "Logs": "Log",
"Expiry-date": "Data di scadenza" "Expiry-date": "Data di scadenza",
"Company": "Azienda",
"JobTitle": "Titolo professionale"
}, },
"report-help": { "report-help": {
"Draft Documents": "Questi sono documenti che hai iniziato ma non hai ancora finalizzato per l'invio.", "Draft Documents": "Questi sono documenti che hai iniziato ma non hai ancora finalizzato per l'invio.",
@@ -193,16 +201,15 @@
"Contactbook": "Questa è una lista di contatti/firmatari aggiunti da te. Appariranno come suggerimenti quando provi ad aggiungere firmatari a un nuovo documento.", "Contactbook": "Questa è una lista di contatti/firmatari aggiunti da te. Appariranno come suggerimenti quando provi ad aggiungere firmatari a un nuovo documento.",
"Templates": "Questa è una lista di modelli disponibili per creare documenti. Puoi fare clic sul pulsante 'Usa' per creare un nuovo documento utilizzando un modello, modificare il documento e aggiungere firmatari nel passaggio successivo." "Templates": "Questa è una lista di modelli disponibili per creare documenti. Puoi fare clic sul pulsante 'Usa' per creare un nuovo documento utilizzando un modello, modificare il documento e aggiungere firmatari nel passaggio successivo."
}, },
"form-name": { "Sign Yourself": "Firma tu stesso",
"Sign Yourself": "Firma tu stesso", "Request Signatures": "Richiedi firme",
"Request Signatures": "Richiedi firme", "New Template": "Nuovo modello",
"New Template": "Nuovo modello"
},
"file-type": "pdf, png, jpg, jpeg", "file-type": "pdf, png, jpg, jpeg",
"docx": "docx", "docx": "docx",
"file-selected": "file selezionato", "file-selected": "file selezionato",
"template-title": "Titolo del modello", "template-title": "Titolo del modello",
"document-title": "Titolo del documento", "document-title": "Titolo del documento",
"title": "Titolo",
"description": "Descrizione", "description": "Descrizione",
"time-to-complete": "Tempo per completare (giorni)", "time-to-complete": "Tempo per completare (giorni)",
"send-in-order": "Invia in ordine", "send-in-order": "Invia in ordine",
@@ -379,6 +386,7 @@
"certificate": "Certificato", "certificate": "Certificato",
"decline": "Rifiuta", "decline": "Rifiuta",
"finish": "Completa", "finish": "Completa",
"done": "Fatto",
"mail": "Email", "mail": "Email",
"sign-now": "Firma ora", "sign-now": "Firma ora",
"successfully-signed": "Firmato con successo!", "successfully-signed": "Firmato con successo!",
@@ -388,6 +396,10 @@
"Email-verified-alert-1": "Email verificata.", "Email-verified-alert-1": "Email verificata.",
"Email-verified-alert-2": "Email già verificata.", "Email-verified-alert-2": "Email già verificata.",
"upload-stamp-image": "Carica immagine timbro", "upload-stamp-image": "Carica immagine timbro",
"draw-signature": "Disegna la firma",
"draw-initials": "Disegna le iniziali",
"enter-text": "Inserisci testo",
"enter-widgettype": "Inserisci {{widgetType}}",
"draw": "Disegno", "draw": "Disegno",
"type": "Digitata", "type": "Digitata",
"color-type": { "color-type": {
@@ -471,7 +483,7 @@
"placeholder-alert-3": "Sei sicuro di voler inviare questo documento per le firme?", "placeholder-alert-3": "Sei sicuro di voler inviare questo documento per le firme?",
"placeholder-alert-4": "Hai inviato con successo le mail a tutti i destinatari!", "placeholder-alert-4": "Hai inviato con successo le mail a tutti i destinatari!",
"placeholder-mail-alert": "Hai inviato con successo un'e-mail a {{name}}. I firmatari successivi riceveranno un'e-mail una volta che {{name}} avrà firmato il documento.", "placeholder-mail-alert": "Hai inviato con successo un'e-mail a {{name}}. I firmatari successivi riceveranno un'e-mail una volta che {{name}} avrà firmato il documento.",
"placeholder-mail-alert-you": "I firmatari successivi riceveranno un'email non appena firmi il documento.", "placeholder-mail-alert-you": "I firmatari successivi riceveranno un'email dopo che avrai firmato il documento.",
"placeholder-alert-5": "Vuoi firmare i documenti ora?", "placeholder-alert-5": "Vuoi firmare i documenti ora?",
"placeholder-alert-6": "Configura l'adattatore email per inviare mail!", "placeholder-alert-6": "Configura l'adattatore email per inviare mail!",
"placeholder-alert-7": "Seleziona il firmatario per aggiungere un segnaposto!", "placeholder-alert-7": "Seleziona il firmatario per aggiungere un segnaposto!",
@@ -728,7 +740,7 @@
"public-tour-message": "Il modello deve essere pubblico prima di poter generare un link condivisibile.", "public-tour-message": "Il modello deve essere pubblico prima di poter generare un link condivisibile.",
"add-user-template": "Devi aggiungere un ruolo prima di poter aggiungere i campi per esso.", "add-user-template": "Devi aggiungere un ruolo prima di poter aggiungere i campi per esso.",
"pdf-uncompatible": "Questo PDF non è compatibile, contatta {{appName}}", "pdf-uncompatible": "Questo PDF non è compatibile, contatta {{appName}}",
"text-field-tour": "I campi di tipo 'Testo' devono essere compilati in anticipo prima che il documento venga inviato. Se hai bisogno che i firmatari forniscano un input, usa invece il campo 'Testo di input'.", "text-field-tour": "I campi 'Prefill' devono essere compilati in anticipo prima dell'invio del documento. Se hai bisogno che i firmatari forniscano input, usa invece i campi dei firmatari.",
"attach-signer-tour": "Devi allegare un firmatario a ogni ruolo. Puoi farlo cliccando su questa icona. Una volta selezionato un firmatario, sarà associato a tutti i campi associati a quel ruolo che appariranno dello stesso colore.", "attach-signer-tour": "Devi allegare un firmatario a ogni ruolo. Puoi farlo cliccando su questa icona. Una volta selezionato un firmatario, sarà associato a tutti i campi associati a quel ruolo che appariranno dello stesso colore.",
"allowed-signature-types": "Tipi di firma consentiti", "allowed-signature-types": "Tipi di firma consentiti",
"at-least-one-signature-type": "Almeno un tipo di firma deve essere abilitato.", "at-least-one-signature-type": "Almeno un tipo di firma deve essere abilitato.",
@@ -776,7 +788,7 @@
"agree-p1": "Confermo di aver letto e compreso il", "agree-p1": "Confermo di aver letto e compreso il",
"agree-p2": "Divulgazione sulle registrazioni e firme elettroniche", "agree-p2": "Divulgazione sulle registrazioni e firme elettroniche",
"agree-p3": "e acconsento all'uso di registrazioni e firme elettroniche.", "agree-p3": "e acconsento all'uso di registrazioni e firme elettroniche.",
"agrre-button": "Accetta e Continua", "agrre-button": "Confermo e accetto di continuare",
"term-cond-title": "Termini e Condizioni", "term-cond-title": "Termini e Condizioni",
"term-cond-h": "DIVULGAZIONE SULLE REGISTRAZIONI E FIRME ELETTRONICHE", "term-cond-h": "DIVULGAZIONE SULLE REGISTRAZIONI E FIRME ELETTRONICHE",
"term-cond-p1": "Questa Divulgazione sulle Registrazioni e Firme Elettroniche ('Divulgazione') è un accordo tra il Creatore del Documento ('Mittente') e il Firmatario ('Tu'), facilitato tramite la piattaforma {{appName}} (Piattaforma). Firmando documenti tramite {{appName}}, accetti i termini descritti in questa Divulgazione. Ti preghiamo di leggerla attentamente prima di procedere.", "term-cond-p1": "Questa Divulgazione sulle Registrazioni e Firme Elettroniche ('Divulgazione') è un accordo tra il Creatore del Documento ('Mittente') e il Firmatario ('Tu'), facilitato tramite la piattaforma {{appName}} (Piattaforma). Firmando documenti tramite {{appName}}, accetti i termini descritti in questa Divulgazione. Ti preghiamo di leggerla attentamente prima di procedere.",
@@ -1036,10 +1048,97 @@
"search-templates": "Cerca modelli…", "search-templates": "Cerca modelli…",
"search-documents": "Cerca documenti…", "search-documents": "Cerca documenti…",
"search-contacts": "Cerca contatti…", "search-contacts": "Cerca contatti…",
"add-role-alert": "Si prega di aggiungere almeno un ruolo",
"edit-draft": "Modifica bozza",
"invalid-email-found": "Email non valida trovata: {{email}}", "invalid-email-found": "Email non valida trovata: {{email}}",
"duplicate-email-found": "Email duplicata trovata: {{email}}", "duplicate-email-found": "Email duplicata trovata: {{email}}",
"vertical": "Verticale", "vertical": "Verticale",
"horizontal": "Orizzontale", "horizontal": "Orizzontale",
"billing": "Fatturazione", "billing": "Fatturazione",
"console": "Console" "console": "Console",
"prefill-widget": "Widget Precompilati",
"action-prohibited": "Questa azione non è consentita per il tuo dominio email. Contatta il tuo amministratore per ricevere assistenza.",
"must-have-at-least-one-vacant-role": "Devi lasciare almeno un ruolo non assegnato prima di impostare un template su 'public'.",
"remove-duplicate": "Si prega di rimuovere l'opzione duplicata",
"prefill-bulk-error": "L'invio in blocco non è consentito quando sono stati aggiunti i widget di precompilazione. Si prega di rimuovere i widget di precompilazione per procedere.",
"session-expired-title": "Sessione scaduta",
"access-denied": "Accesso negato",
"upgrade": "Aggiorna",
"do-not-access-app": "Non hai accesso a questa applicazione.",
"dont-have-access": "Non hai accesso.",
"valid-email-alert": "Inserisci un indirizzo email valido.",
"otp-not-validate": "OTP non valido.",
"domain-not-allowed": "Questo dominio non è consentito",
"atleast-one-recipient-alert": "Aggiungi almeno un destinatario!",
"incorrect-password-or-decryption-failed": "Password errata o decrittazione non riuscita.",
"incorrect-password-for-file": "Password errata per il file: {{file}}",
"error-uploading-pdf": "Errore durante il caricamento del PDF.",
"provide-password": "Fornisci la password.",
"only-pdf-allowed": "Sono consentiti solo file PDF.",
"invalid-username-password-region": "Nome utente/password o regione non valida.",
"pfx-extension-alert": "Carica un file con estensione .pfx.",
"email-already-exist": "L'email esiste già",
"branding": "Marchio",
"branding-help": "Il branding consente il white labelling della tua app",
"custom-sub-domain": "Sottodominio personalizzato",
"app-name": "Nome dell'app",
"provide-domain-name": "Fornisci il tuo nome di dominio",
"provide-app-name": "Fornisci il nome della tua app",
"logo": "Logo",
"upload-app-logo": "Carica il logo della tua app",
"prefill-unfilled-widget": "I seguenti campi obbligatori non possono essere lasciati vuoti: {{emptyWidget}}. Per favore compilali per procedere.",
"Dashboard": "Dashboard",
"Analytics": "Analitica",
"Templates": "Modelli",
"Need your sign": "Necessita della tua firma",
"In Progress": "In corso",
"Completed": "Completati",
"Drafts": "Bozze",
"Declined": "Rifiutati",
"Expired": "Scaduti",
"Contactbook": "Rubrica",
"My Signature": "La mia firma",
"API Token": "Token API",
"Webhook": "Webhook",
"Preferences": "Preferenze",
"Teams": "Team",
"Users": "Utenti",
"Drive": "Drive",
"Branding": "Marchio",
"Mail": "Posta",
"Storage": "Archiviazione",
"Signing certificate": "Certificato di firma",
"General": "Generale",
"Organizations": "Organizzazioni",
"OrgAdmins": "OrgAdmins",
"Debug Pdf": "Debug PDF",
"New Document": "Nuovo documento",
"subscription": "Abbonamento",
"Draft document": "Bozza di documento",
"Draft template": "Bozza di modello",
"Public sign": "Firma pubblica",
"Signup": "Registrazione",
"delete-contact": "Elimina contatto",
"total-records-found": "Totale record trovati: {{count}}",
"Invalid-records-found": "Record non validi trovati: {{records}}",
"previous": "Precedente",
"page-n-of-n": "Pagina {{currentPage}} di {{totalPages}}",
"import": "Importa",
"search": "Cerca",
"viewed-on": "Visualizzato il: {{ViewedOn}}",
"signed-on": "Firmato il: {{SignedOn}}",
"hide": "Nascondi",
"show-more": "Mostra di più",
"browse-or-drag-to-replace-existing-file": "Sfoglia o trascina un nuovo file per sostituire quello esistente",
"optional-details": "Dettagli facoltativi",
"mail-adapter-subscription-alert": "Esegui l'upgrade al piano Professional o Team per configurare un SMTP personalizzato.", "connect-to-mail": "Connetti a Gmail",
"custom-smtp": "SMTP personalizzato",
"default-smtp": "SMTP predefinito di {{appName}}",
"host": "Host",
"port": "Porta",
"sender-email": "Email del mittente",
"username": "Nome utente",
"use-default-mail-adapter": "Sei sicuro di voler usare i server di posta predefiniti di {{appName}} per inviare le richieste di firma? Ti consigliamo di usare i tuoi server Gmail o SMTP per una migliore consegna in posta in arrivo.",
"verification-code-sent-registered-email": "Un codice di verifica è stato inviato alla tua email registrata <1>{{useremail}}</1>. Inserisci il codice qui sotto per confermare le impostazioni.",
"smpt-credentials": "Credenziali SMTP"
} }
+16 -14
View File
@@ -19,8 +19,13 @@ const Header = ({ showSidebar, setIsMenu, isConsole }) => {
const { width } = useWindowSize(); const { width } = useWindowSize();
const username = localStorage.getItem("username") || ""; const username = localStorage.getItem("username") || "";
const image = localStorage.getItem("profileImg") || dp; const image = localStorage.getItem("profileImg") || dp;
const isAdmin =
localStorage.getItem("Extand_Class") &&
JSON.parse(localStorage.getItem("Extand_Class"))?.[0]?.UserRole ===
"contracts_Admin";
const [isOpen, setIsOpen] = useState(false); const [isOpen, setIsOpen] = useState(false);
const [applogo, setAppLogo] = useState(""); const [applogo, setAppLogo] = useState("");
const [isDarkTheme, setIsDarkTheme] = useState();
const toggleDropdown = () => { const toggleDropdown = () => {
setIsOpen(!isOpen); setIsOpen(!isOpen);
@@ -88,22 +93,15 @@ const Header = ({ showSidebar, setIsMenu, isConsole }) => {
useEffect(() => { useEffect(() => {
const updateLogoForTheme = () => { const updateThemeStatus = () => {
const isDarkMode = const isDarkTheme =
document.documentElement.getAttribute("data-theme") === "opensigndark"; document.documentElement.getAttribute("data-theme") === "opensigndark";
const logo = isDarkMode setIsDarkTheme(isDarkTheme);
? "/static/js/assets/images/logo-dark.png" // Path to the dark mode logo
: appInfo.applogo; // Use current logo for light mode
if (applogo !== logo) {
setAppLogo(logo);
}
}; };
updateThemeStatus();
// Set the logo immediately based on the current theme
updateLogoForTheme();
const observer = new MutationObserver(() => { const observer = new MutationObserver(() => {
updateLogoForTheme(); updateThemeStatus();
}); });
observer.observe(document.documentElement, { observer.observe(document.documentElement, {
@@ -112,7 +110,7 @@ const Header = ({ showSidebar, setIsMenu, isConsole }) => {
}); });
return () => observer.disconnect(); return () => observer.disconnect();
}, [applogo]); }, []);
return ( return (
<div> <div>
@@ -130,7 +128,11 @@ const Header = ({ showSidebar, setIsMenu, isConsole }) => {
{applogo && ( {applogo && (
<img <img
className="object-contain h-full w-auto" className="object-contain h-full w-auto"
src={applogo} src={
isDarkTheme
? "/static/js/assets/images/logo-dark.png"
: applogo
}
alt="logo" alt="logo"
/> />
)} )}
@@ -9,7 +9,6 @@ function AgreementContent(props) {
const h2Style = "text-base-content font-medium text-lg"; const h2Style = "text-base-content font-medium text-lg";
const ulStyle = "list-disc px-4 py-3"; const ulStyle = "list-disc px-4 py-3";
const handleOnclick = () => { const handleOnclick = () => {
props.setIsAgreeTour(false);
props.setIsAgree(true); props.setIsAgree(true);
props.setIsShowAgreeTerms(false); props.setIsShowAgreeTerms(false);
props.showFirstWidget(); props.showFirstWidget();
@@ -4,7 +4,6 @@ import AgreementContent from "./AgreementContent";
function AgreementSign(props) { function AgreementSign(props) {
const { t } = useTranslation(); const { t } = useTranslation();
const [isChecked, setIsChecked] = useState(false);
const [isShowAgreeTerms, setIsShowAgreeTerms] = useState(false); const [isShowAgreeTerms, setIsShowAgreeTerms] = useState(false);
return ( return (
@@ -12,39 +11,12 @@ function AgreementSign(props) {
<div className="op-modal op-modal-open absolute z-[448]"> <div className="op-modal op-modal-open absolute z-[448]">
<div className="w-[95%] md:w-[60%] lg:w-[40%] op-modal-box overflow-y-auto hide-scrollbar text-sm p-4"> <div className="w-[95%] md:w-[60%] lg:w-[40%] op-modal-box overflow-y-auto hide-scrollbar text-sm p-4">
<div className="flex flex-row items-center"> <div className="flex flex-row items-center">
<label className="inline-flex justify-center items-center cursor-pointer mb-0">
{/* 1) This div becomes the “fake” checkbox */}
<div
data-tut="IsAgree"
className={`w-6 h-6 border-2 mr-3 rounded-full flex text-center items-center justify-center ${isChecked ? "op-border-primary" : "border-red-500"}`}
>
{isChecked ? (
<span className="op-text-primary text-sm font-bold"></span>
) : (
<span className="text-red-500 text-sm font-bold">X</span>
)}
</div>
{/* 2) Visually hide the native checkbox but keep it in the DOM */}
<input
className="sr-only"
type="checkbox"
checked={isChecked}
onChange={(e) => {
setIsChecked(e.target.checked);
if (e.target.checked) {
props.setIsAgreeTour(false);
}
props.showFirstWidget();
}}
/>
</label>
<div className="text-[11px] md:text-base text-base-content"> <div className="text-[11px] md:text-base text-base-content">
<span>{t("agree-p1")}</span> <span>{t("agree-p1")}</span>
<span <span
className="font-bold text-blue-600 cursor-pointer" className="font-bold text-blue-600 cursor-pointer"
onClick={() => { onClick={() => {
setIsShowAgreeTerms(true); setIsShowAgreeTerms(true);
props.setIsAgreeTour(false);
}} }}
> >
{t("agree-p2")} {t("agree-p2")}
@@ -52,15 +24,11 @@ function AgreementSign(props) {
<span> {t("agree-p3")}</span> <span> {t("agree-p3")}</span>
</div> </div>
</div> </div>
<div className="flex ml-[35px] mt-3"> <div className="flex mt-3">
<button <button
onClick={() => { onClick={() => {
if (isChecked) { props.setIsAgree(true);
props.setIsAgreeTour(false); props.showFirstWidget()
props.setIsAgree(true);
} else {
props.setIsAgreeTour(true);
}
}} }}
className="op-btn op-btn-primary op-btn-sm w-full md:w-auto" className="op-btn op-btn-primary op-btn-sm w-full md:w-auto"
> >
@@ -74,7 +42,6 @@ function AgreementSign(props) {
</div> </div>
{isShowAgreeTerms && ( {isShowAgreeTerms && (
<AgreementContent <AgreementContent
setIsAgreeTour={props.setIsAgreeTour}
setIsAgree={props.setIsAgree} setIsAgree={props.setIsAgree}
setIsShowAgreeTerms={setIsShowAgreeTerms} setIsShowAgreeTerms={setIsShowAgreeTerms}
showFirstWidget={props.showFirstWidget} showFirstWidget={props.showFirstWidget}
@@ -3,43 +3,39 @@ import { useTranslation } from "react-i18next";
import { useSelector } from "react-redux"; import { useSelector } from "react-redux";
function DefaultSignature(props) { function DefaultSignature(props) {
const { t } = useTranslation(); const { t } = useTranslation();
const defaultSignImg = useSelector((state) => state.widget.defaultSignImg); const defaultSignImg = useSelector((state) => state.widget.defaultSignImg);
const myInitial = useSelector((state) => state.widget.myInitial) const myInitial = useSelector((state) => state.widget.myInitial);
const tabName = ["my-signature", "my-initials"]; const tabName = ["my-signature", "my-initials"];
const [activeTab, setActiveTab] = useState(0); const [activeTab, setActiveTab] = useState(0);
const confirmToaddDefaultSign = (type) => { const confirmToaddDefaultSign = (type) => {
if (!props.isAgree) { if (props?.xyPosition.length > 0) {
props.setIsAgreeTour(true); //check signature or initial widgets exist or not for auto signing
} else { const getCurrentSignerXY = props?.xyPosition.filter(
if (props?.xyPosition.length > 0) { (data) => data.Id === props.uniqueId
//check signature or initial widgets exist or not for auto signing );
const getCurrentSignerXY = props?.xyPosition.filter( const checkIsSignInitialExist = getCurrentSignerXY?.every(
(data) => data.Id === props.uniqueId (placeholderObj) =>
); placeholderObj?.placeHolder?.some((placeholder) =>
const checkIsSignInitialExist = getCurrentSignerXY?.every( placeholder?.pos?.some((posItem) => posItem?.type === type)
(placeholderObj) => )
placeholderObj?.placeHolder?.some((placeholder) => );
placeholder?.pos?.some((posItem) => posItem?.type === type) if (checkIsSignInitialExist) {
) props?.setDefaultSignAlert({
); isShow: true,
if (checkIsSignInitialExist) { alertMessage: t("default-sign-alert", { widgetsType: type }),
props?.setDefaultSignAlert({ type: type
isShow: true, });
alertMessage: t("default-sign-alert", { widgetsType: type }),
type: type
});
} else {
props?.setDefaultSignAlert({
isShow: true,
alertMessage: t("defaultSign-alert", { widgetsType: type })
});
}
} else { } else {
props?.setDefaultSignAlert({ props?.setDefaultSignAlert({
isShow: true, isShow: true,
alertMessage: t("please-select-position!") alertMessage: t("defaultSign-alert", { widgetsType: type })
}); });
} }
} else {
props?.setDefaultSignAlert({
isShow: true,
alertMessage: t("please-select-position!")
});
} }
}; };
@@ -286,7 +286,7 @@ const EditTemplate = ({
htmlFor="fileUpload" htmlFor="fileUpload"
className="cursor-pointer text-center mb-0" className="cursor-pointer text-center mb-0"
> >
Browse or drag & drop a new file to replace the existng one {t("browse-or-drag-to-replace-existing-file")}
</label> </label>
</div> </div>
<input <input
@@ -180,13 +180,8 @@ function Placeholder(props) {
const widgetClickHandler = () => { const widgetClickHandler = () => {
props.setCurrWidgetsDetails && props.setCurrWidgetsDetails(props.pos); props.setCurrWidgetsDetails && props.setCurrWidgetsDetails(props.pos);
//condition to check in request signing flow user click on agree or not
if (props?.data?.signerObjId === props?.signerObjId && !props.isDragging) { if (props?.data?.signerObjId === props?.signerObjId && !props.isDragging) {
if (!props.isAgree && !props.isSelfSign) { handleWidgetIdandPopup();
props.setIsAgreeTour && props.setIsAgreeTour(true);
} else {
handleWidgetIdandPopup();
}
} //condition for open contact details popup when sign templet from public signing flow } //condition for open contact details popup when sign templet from public signing flow
else if (props?.uniqueId && props.data?.Id === props?.uniqueId) { else if (props?.uniqueId && props.data?.Id === props?.uniqueId) {
handleWidgetIdandPopup(); handleWidgetIdandPopup();
@@ -108,7 +108,7 @@ function PlaceholderType(props) {
alt="signature" alt="signature"
draggable="false" draggable="false"
src={props.pos.SignUrl} src={props.pos.SignUrl}
className="w-full h-full select-none-cls " className={`${props.pos.signatureType !== "type" ? "object-contain" : ""} w-full h-full select-none-cls`}
/> />
) : ( ) : (
<div className={widgetCls}> <div className={widgetCls}>
@@ -132,7 +132,7 @@ function PlaceholderType(props) {
alt="stamp" alt="stamp"
draggable="false" draggable="false"
src={props.pos.SignUrl} src={props.pos.SignUrl}
className="w-full h-full select-none-cls" className="w-full h-full select-none-cls object-contain"
/> />
) : ( ) : (
<div className={widgetCls}> <div className={widgetCls}>
@@ -253,7 +253,7 @@ function PlaceholderType(props) {
alt="initials" alt="initials"
draggable="false" draggable="false"
src={props.pos.SignUrl} src={props.pos.SignUrl}
className="w-full h-full select-none-cls" className={`${props.pos.signatureType !== "type" ? "object-contain" : ""} w-full h-full select-none-cls`}
/> />
) : ( ) : (
<div className={widgetCls}> <div className={widgetCls}>
@@ -402,7 +402,7 @@ function PlaceholderType(props) {
alt="image" alt="image"
draggable="false" draggable="false"
src={props.pos.SignUrl} src={props.pos.SignUrl}
className="w-full h-full select-none-cls" className="w-full h-full select-none-cls object-contain"
/> />
) : ( ) : (
<div className={widgetCls}> <div className={widgetCls}>
@@ -129,9 +129,9 @@ const RecipientList = (props) => {
} }
}} }}
> >
<div className="flex flex-row items-center w-full"> <div className="flex flex-row items-center w-full overflow-hidden pr-2">
<div <div
className="flex w-[30px] h-[30px] rounded-full items-center justify-center mr-2" className="flex flex-shrink-0 w-[30px] h-[30px] rounded-full items-center justify-center mr-2"
style={{ style={{
background: obj?.blockColor background: obj?.blockColor
? darkenColor(obj?.blockColor, 0.4) ? darkenColor(obj?.blockColor, 0.4)
@@ -153,7 +153,7 @@ const RecipientList = (props) => {
<div <div
className={`${ className={`${
obj.Name ? "flex-col" : "flex-row" obj.Name ? "flex-col" : "flex-row"
} flex items-center`} } flex overflow-hidden flex-grow-0`}
> >
{obj.Name ? ( {obj.Name ? (
<span <span
@@ -162,7 +162,7 @@ const RecipientList = (props) => {
props.isSelectListId === ind props.isSelectListId === ind
? "text-[#424242]" ? "text-[#424242]"
: "text-base-content" : "text-base-content"
} text-[12px] font-bold w-[100px] whitespace-nowrap overflow-hidden text-ellipsis`} } text-[12px] font-bold truncate whitespace-nowrap`}
> >
{obj.Name} {obj.Name}
</span> </span>
@@ -173,7 +173,7 @@ const RecipientList = (props) => {
props.isSelectListId === ind props.isSelectListId === ind
? "text-[#424242]" ? "text-[#424242]"
: "text-base-content" : "text-base-content"
} text-[12px] font-bold w-[100px] whitespace-nowrap overflow-hidden text-ellipsis cursor-pointer`} } text-[12px] font-bold truncate whitespace-nowrap cursor-pointer`}
onClick={() => { onClick={() => {
setIsEdit({ [obj.Id]: true }); setIsEdit({ [obj.Id]: true });
props.setRoleName(obj.Role); props.setRoleName(obj.Role);
@@ -182,7 +182,7 @@ const RecipientList = (props) => {
{isEdit?.[obj.Id] && props.handleRoleChange ? ( {isEdit?.[obj.Id] && props.handleRoleChange ? (
<input <input
ref={inputRef} ref={inputRef}
className="bg-transparent p-[3px]" className="bg-transparent p-[3px] w-full"
value={obj.Role} value={obj.Role}
onChange={(e) => props.handleRoleChange(e, obj.Id)} onChange={(e) => props.handleRoleChange(e, obj.Id)}
onBlur={() => { onBlur={() => {
@@ -210,7 +210,7 @@ const RecipientList = (props) => {
props.isSelectListId === ind props.isSelectListId === ind
? "text-[#424242]" ? "text-[#424242]"
: "text-base-content" : "text-base-content"
} text-[10px] font-medium w-[100px] whitespace-nowrap overflow-hidden text-ellipsis`} } text-[10px] font-medium truncate whitespace-nowrap`}
> >
{obj?.Role || obj?.Email} {obj?.Role || obj?.Email}
</span> </span>
@@ -160,8 +160,6 @@ function RenderPdf(props) {
ispublicTemplate={props.ispublicTemplate} ispublicTemplate={props.ispublicTemplate}
handleUserDetails={props.handleUserDetails} handleUserDetails={props.handleUserDetails}
isResize={props.isResize} isResize={props.isResize}
setIsAgreeTour={props.setIsAgreeTour}
isAgree={props.isAgree}
handleTabDrag={props.handleTabDrag} handleTabDrag={props.handleTabDrag}
handleStop={props.handleStop} handleStop={props.handleStop}
setUniqueId={props.setUniqueId} setUniqueId={props.setUniqueId}
@@ -27,12 +27,12 @@ function SignerListComponent(props) {
return ( return (
<div <div
className="rounded-xl mx-1 flex flex-row items-center py-[10px] mt-1" className="rounded-xl mx-1 flex flex-row flex-grow-0 items-center py-[10px] mt-1"
style={{ background: checkSignerBackColor(props.obj) }} style={{ background: checkSignerBackColor(props.obj) }}
> >
<div <div
style={{ background: checkUserNameColor(props.obj) }} style={{ background: checkUserNameColor(props.obj) }}
className="flex w-[30px] h-[30px] rounded-full justify-center items-center mx-1" className="flex flex-shrink-0 w-[30px] h-[30px] rounded-full justify-center items-center mx-1"
> >
<span className="text-[12px] text-center font-bold text-black uppercase"> <span className="text-[12px] text-center font-bold text-black uppercase">
{getFirstLetter( {getFirstLetter(
@@ -40,11 +40,11 @@ function SignerListComponent(props) {
)} )}
</span> </span>
</div> </div>
<div className="flex flex-col"> <div className="flex flex-grow-0 flex-col overflow-hidden pr-2">
<span className="text-[12px] font-bold text-[#424242] w-[100px] whitespace-nowrap overflow-hidden text-ellipsis"> <span className="text-[12px] font-bold truncate whitespace-nowrap">
{props.obj?.Name || props?.obj?.Role} {props.obj?.Name || props?.obj?.Role}
</span> </span>
<span className="text-[10px] font-medium text-[#424242] w-[100px] whitespace-nowrap overflow-hidden text-ellipsis"> <span className="text-[10px] font-medium truncate whitespace-nowrap">
{props.obj?.Email || props.obj?.email} {props.obj?.Email || props.obj?.email}
</span> </span>
</div> </div>
@@ -18,7 +18,8 @@ import {
cellsWidget, cellsWidget,
textWidget, textWidget,
years, years,
convertTextToImg convertTextToImg,
convertJpegToPng
} from "../../constant/Utils"; } from "../../constant/Utils";
import CellsWidget from "./CellsWidget"; import CellsWidget from "./CellsWidget";
import DatePicker from "react-datepicker"; import DatePicker from "react-datepicker";
@@ -110,7 +111,6 @@ function WidgetsValueModal(props) {
const [signature, setSignature] = useState(); const [signature, setSignature] = useState();
const [isImageSelect, setIsImageSelect] = useState(false); const [isImageSelect, setIsImageSelect] = useState(false);
const [isFinish, setIsFinish] = useState(false); const [isFinish, setIsFinish] = useState(false);
const [imgWH, setImgWH] = useState({});
const [fontSelect, setFontSelect] = useState(fontOptions[0].value); const [fontSelect, setFontSelect] = useState(fontOptions[0].value);
const [isSavedSign, setIsSavedSign] = useState(false); const [isSavedSign, setIsSavedSign] = useState(false);
const [isAutoSign, setIsAutoSign] = useState(false); const [isAutoSign, setIsAutoSign] = useState(false);
@@ -257,11 +257,11 @@ function WidgetsValueModal(props) {
setOriginalImage(null); // Reset original image when a new file is selected setOriginalImage(null); // Reset original image when a new file is selected
setRemoveBgEnabled(false); // Optionally reset toggle setRemoveBgEnabled(false); // Optionally reset toggle
// Ensure compressedFileSize calls setImage, which then triggers the useEffect for BG removal. // Ensure compressedFileSize calls setImage, which then triggers the useEffect for BG removal.
compressedFileSize(file, setImgWH, setImage); compressedFileSize(file, setImage);
} }
}; };
//function is used to save image,stamp widgets data //function is used to save image,stamp widgets data
const handleSaveImage = () => { const handleSaveImage = (signatureType) => {
const widgetsType = currWidgetsDetails?.type; const widgetsType = currWidgetsDetails?.type;
//`isApplyAll` is used when user edit stamp then updated signature apply all existing drawn signatures //`isApplyAll` is used when user edit stamp then updated signature apply all existing drawn signatures
const isApplyAll = true; const isApplyAll = true;
@@ -278,10 +278,10 @@ function WidgetsValueModal(props) {
// Get updated placeholder list // Get updated placeholder list
const updatedPlaceholders = onSaveImage( const updatedPlaceholders = onSaveImage(
signatureType,
signer.placeHolder, signer.placeHolder,
index, index,
currWidgetsDetails?.key, currWidgetsDetails?.key,
imgWH,
image, image,
isAutoSign, isAutoSign,
widgetsType, widgetsType,
@@ -299,11 +299,13 @@ function WidgetsValueModal(props) {
return object.pageNumber === pageNumber; return object.pageNumber === pageNumber;
}); });
const getImage = onSaveImage( const getImage = onSaveImage(
signatureType,
props?.xyPosition, props?.xyPosition,
index, index,
currWidgetsDetails?.key, currWidgetsDetails?.key,
imgWH, image,
image false,
widgetsType
); );
setXyPosition(getImage); setXyPosition(getImage);
} }
@@ -311,36 +313,28 @@ function WidgetsValueModal(props) {
}; };
//function is used to save draw type or initial type signature //function is used to save draw type or initial type signature
const handleSaveSignature = ( const handleSaveSignature = async (
type, signType,
isDefaultSign, isDefaultSign,
width, width,
height, height,
typedSignature typedSignature
) => { ) => {
//get current click widget type // get current click widget type
const widgetsType = currWidgetsDetails?.type; const widgetsType = currWidgetsDetails?.type;
//if there are any width and height then it will typed signature // if there are any width and height then it will typed signature
const isTypeText = width && height ? true : false; const isTypeText = width && height ? true : false;
//final getting signature url via default select sign/default initial sign/self draw sign // final getting signature url via default select sign/default initial sign/self draw sign
const signatureImg = isDefaultSign const signUrl = isDefaultSign
? isDefaultSign === "initials" ? isDefaultSign === "initials"
? myInitial ? await convertJpegToPng(myInitial, "myinitials") // default initials set through my signature tab
: defaultSignImg : await convertJpegToPng(defaultSignImg, "mysign") // default signature set through my signature tab
: signature; : signature; // signature done by user thorugh draw, upload, typed
const signatureImg = signUrl;
let imgWH = { width: width ? width : "", height: height ? height : "" }; let imgWH = { width: width ? width : "", height: height ? height : "" };
setIsImageSelect(false); setIsImageSelect(false);
setImage(); setImage();
//set default signature image width and height // `isApplyAll` is used when user edit signature/initial then updated signature apply all existing drawn signatures
if (isDefaultSign) {
const img = new Image();
img.src = defaultSignImg;
if (img.complete) {
imgWH = { width: img.width, height: img.height };
}
}
//`isApplyAll` is used when user edit signature/initial then updated signature apply all existing drawn signatures
const isApplyAll = true; const isApplyAll = true;
if (uniqueId) { if (uniqueId) {
setXyPosition((prevState) => setXyPosition((prevState) =>
@@ -351,13 +345,12 @@ function WidgetsValueModal(props) {
(x) => x.pageNumber === pageNumber (x) => x.pageNumber === pageNumber
); );
const updatedPlaceholders = onSaveSign( const updatedPlaceholders = onSaveSign(
type, signType,
signer.placeHolder, signer.placeHolder,
placeholderIndex, placeholderIndex,
currWidgetsDetails?.key, currWidgetsDetails?.key,
signatureImg, signatureImg,
imgWH, imgWH,
isDefaultSign,
isTypeText, isTypeText,
typedSignature, typedSignature,
isAutoSign, isAutoSign,
@@ -377,13 +370,12 @@ function WidgetsValueModal(props) {
return object.pageNumber === pageNumber; return object.pageNumber === pageNumber;
}); });
const getUpdatePosition = onSaveSign( const getUpdatePosition = onSaveSign(
type, signType,
props?.xyPosition, props?.xyPosition,
index, index,
currWidgetsDetails?.key, currWidgetsDetails?.key,
signatureImg, signatureImg,
imgWH, imgWH,
isDefaultSign,
isTypeText, isTypeText,
typedSignature, typedSignature,
false, false,
@@ -535,7 +527,7 @@ function WidgetsValueModal(props) {
} }
}; };
// `handlesavesign` is used to save signaute, initials, stamp as a default // `handlesavesign` is used to save signature, initials, stamp as a default
const handleSaveSign = async () => { const handleSaveSign = async () => {
if (signature || image?.src) { if (signature || image?.src) {
setIsLoader(true); setIsLoader(true);
@@ -556,7 +548,7 @@ function WidgetsValueModal(props) {
objectId: User?.id objectId: User?.id
}; };
if (imageUrl) { if (imageUrl) {
// below code is used to save or update default signaute, initials, stamp // below code is used to save or update default signature, initials, stamp
try { try {
const signCls = new Parse.Object("contracts_Signature"); const signCls = new Parse.Object("contracts_Signature");
if (props?.saveSignCheckbox?.signId) { if (props?.saveSignCheckbox?.signId) {
@@ -642,13 +634,14 @@ function WidgetsValueModal(props) {
} else { } else {
setSignature(""); setSignature("");
canvasRef?.current?.clear(); canvasRef?.current?.clear();
handleSaveSignature(isTab); const tab = isTab === "uploadImage" ? "image" : isTab;
handleSaveSignature(tab);
} }
} }
setPenColor("blue"); setPenColor("blue");
} else { } else {
setSignature(""); setSignature("");
handleSaveImage(); handleSaveImage("image");
} }
setIsImageSelect(false); setIsImageSelect(false);
setIsDefaultSign(false); setIsDefaultSign(false);
@@ -1178,7 +1171,9 @@ function WidgetsValueModal(props) {
hidden hidden
/> />
<i className="fa-light fa-cloud-upload-alt uploadImgLogo text-base-content"></i> <i className="fa-light fa-cloud-upload-alt uploadImgLogo text-base-content"></i>
<div className="text-[10px] text-base-content">{t("upload")}</div> <div className="text-[10px] text-base-content">
{t("upload")}
</div>
</div> </div>
</div> </div>
) : ( ) : (
@@ -1324,7 +1319,6 @@ function WidgetsValueModal(props) {
dotSize={1} dotSize={1}
/> />
</div> </div>
<div className="flex flex-row justify-between mt-[10px]"> <div className="flex flex-row justify-between mt-[10px]">
<PenColorComponent /> <PenColorComponent />
</div> </div>
@@ -1988,7 +1982,7 @@ function WidgetsValueModal(props) {
handleClickOnNext(isFinishDoc); handleClickOnNext(isFinishDoc);
}} }}
> >
{t("finish")} {t("done")}
</button> </button>
) : ( ) : (
<button <button
@@ -1,4 +1,4 @@
import React, { useState, useEffect } from "react"; import { useState, useEffect } from "react";
import Menu from "./Menu"; import Menu from "./Menu";
import Submenu from "./SubMenu"; import Submenu from "./SubMenu";
import SocialMedia from "../SocialMedia"; import SocialMedia from "../SocialMedia";
@@ -27,39 +27,18 @@ const Sidebar = ({ isOpen, closeSidebar }) => {
if (localStorage.getItem("defaultmenuid")) { if (localStorage.getItem("defaultmenuid")) {
const Extand_Class = localStorage.getItem("Extand_Class"); const Extand_Class = localStorage.getItem("Extand_Class");
const extClass = Extand_Class && JSON.parse(Extand_Class); const extClass = Extand_Class && JSON.parse(Extand_Class);
// console.log("extClass ", extClass); const userRole = extClass?.[0]?.UserRole || "contracts_User";
let userRole = "contracts_User"; const isAdmin =
if (extClass && extClass.length > 0) { userRole === "contracts_Admin" || userRole === "contracts_OrgAdmin";
userRole = extClass[0].UserRole; const newSidebarList = sidebarList.map((item) => {
} if (item.title !== "Settings") return item;
if ( const newItem = { ...item };
userRole === "contracts_Admin" || const baseChildren = isAdmin ? subSetting : subSetting?.slice(0, 1);
userRole === "contracts_OrgAdmin" const mysignature = newItem.children.slice(0, 1);
) { newItem.children = [...mysignature, ...baseChildren];
const newSidebarList = sidebarList.map((item) => { return newItem;
if (item.title === "Settings") { });
// Make a shallow copy of the item setmenuList(newSidebarList);
const newItem = { ...item };
const arr = newItem.children.slice(0, 1);
newItem.children = [...arr, ...subSetting];
return newItem;
}
return item;
});
setmenuList(newSidebarList);
} else {
const newSidebarList = sidebarList.map((item) => {
if (item.title === "Settings") {
// Make a shallow copy of the item
const newItem = { ...item };
const arr = newItem.children.slice(0, 1);
newItem.children = arr;
return newItem;
}
return item;
});
setmenuList(newSidebarList);
}
} }
} catch (e) { } catch (e) {
console.error("Problem", e); console.error("Problem", e);
+142 -62
View File
@@ -361,7 +361,7 @@ export const selectFormat = (data) => {
case "DD MMMM, YYYY": case "DD MMMM, YYYY":
return "dd MMMM, yyyy"; return "dd MMMM, yyyy";
case "DD.MM.YYYY": case "DD.MM.YYYY":
return "dd.MM.yyyy"; return "dd.MM.yyyy";
default: default:
return "MM/dd/yyyy"; return "MM/dd/yyyy";
} }
@@ -390,7 +390,7 @@ export const changeDateToMomentFormat = (format) => {
case "dd MMMM, yyyy": case "dd MMMM, yyyy":
return "DD MMMM, YYYY"; return "DD MMMM, YYYY";
case "dd.MM.yyyy": case "dd.MM.yyyy":
return"DD.MM.YYYY"; return "DD.MM.YYYY";
default: default:
return "L"; return "L";
} }
@@ -1318,15 +1318,14 @@ export function convertTextToImg(fontStyle, text, color, widgetDims) {
return dataUrl; return dataUrl;
} }
//function for save button to save signature or image url // `onSaveSign` trigger on save button to save for signature, initials widget for type: draw, typed, default
export function onSaveSign( export function onSaveSign(
type, type,
xyPosition, xyPosition,
index, index,
signKey, signKey,
signatureImg, signatureImg,
defaultImgWH, updatedImgWH,
isDefaultSign,
isTypeText, isTypeText,
typedSignature, typedSignature,
isAutoSign, isAutoSign,
@@ -1341,27 +1340,11 @@ export function onSaveSign(
widgetsType && ["signature", "initials"].includes(widgetsType); widgetsType && ["signature", "initials"].includes(widgetsType);
const updateXYData = getXYdata.map((position) => { const updateXYData = getXYdata.map((position) => {
if (position.key === signKey) { if (position.key === signKey) {
if (isDefaultSign === "initials") { if (isTypeText) {
let imgWH = { width: position.Width, height: position.Height };
getIMGWH = calculateImgAspectRatio(imgWH, position);
} else if (isDefaultSign === "default") {
getIMGWH = calculateImgAspectRatio(defaultImgWH, position);
} else if (isTypeText) {
getIMGWH = { getIMGWH = {
newWidth: defaultImgWH.width, newWidth: updatedImgWH.width,
newHeight: defaultImgWH.height newHeight: updatedImgWH.height
}; };
} else {
const defaultWidth = defaultWidthHeight(position?.type).width;
const defaultHeight = defaultWidthHeight(position?.type).height;
getIMGWH = calculateImgAspectRatio(
{
width: defaultWidth ? defaultWidth : 150,
height: defaultHeight ? defaultHeight : 60
},
position
);
} }
posWidth = getIMGWH ? getIMGWH.newWidth : 150; posWidth = getIMGWH ? getIMGWH.newWidth : 150;
posHeight = getIMGWH ? getIMGWH.newHeight : 60; posHeight = getIMGWH ? getIMGWH.newHeight : 60;
@@ -1371,8 +1354,8 @@ export function onSaveSign(
: signatureImg; : signatureImg;
return { return {
...position, ...position,
Width: posWidth, ...(type === "type" ? { Width: posWidth } : {}),
Height: posHeight, ...(type === "type" ? { Height: posHeight } : {}),
SignUrl: signImg, SignUrl: signImg,
...(isSignOrInitials && { signatureType: type || "" }), ...(isSignOrInitials && { signatureType: type || "" }),
options: { ...position.options, response: signImg }, options: { ...position.options, response: signImg },
@@ -1392,7 +1375,7 @@ export function onSaveSign(
} }
return obj; return obj;
}); });
//condition when draw/upload signature/initials then apply it all related to widgets (signature,image,typed signature or default signature) //condition when draw/upload signature/initials then apply it all related to widgets (draw, typed signature or default signature)
if (isApplyAll || isAutoSign) { if (isApplyAll || isAutoSign) {
const updatedArray = updateXYposition.map((page) => ({ const updatedArray = updateXYposition.map((page) => ({
...page, ...page,
@@ -1404,9 +1387,6 @@ export function onSaveSign(
: signatureImg; : signatureImg;
return { return {
...item, ...item,
// Only copy signature content, keep existing dimensions
// Width: posWidth,
// Height: posHeight,
SignUrl: signImg, SignUrl: signImg,
...(isSignOrInitials && { signatureType: type || "" }), ...(isSignOrInitials && { signatureType: type || "" }),
options: { ...item.options, response: signImg }, options: { ...item.options, response: signImg },
@@ -1426,6 +1406,54 @@ export function onSaveSign(
} }
} }
/**
* Scales and centers a base64encoded image into a fixedsize widget
* and returns a new base64 PNG.
*
* @param {string} base64Image A data-URL (e.g. "data:image/png;base64,…")
* @param {{ Width: number, Height: number }} widgetDims
* @returns {Promise<string>} A Promise that resolves to a data-URL of the new image
*/
export async function convertBase64ToImg(base64Image, widgetDims) {
const { Width: maxWidth, Height: maxHeight } = widgetDims;
// Detect input format from data URL
const match = base64Image.match(/^data:(image\/(png|jpeg|jpg|webp));base64,/);
const inputMime = match ? match[1] : "image/png"; // fallback to PNG if unknown
// 1. Load the image off-DOM
const img = new Image();
img.src = base64Image;
await new Promise((resolve, reject) => {
img.onload = resolve;
img.onerror = reject;
});
// 2. Compute scale to fit within widget (preserving aspect ratio)
const { naturalWidth: imgW, naturalHeight: imgH } = img;
const scale = Math.min(maxWidth / imgW, maxHeight / imgH, 1);
const drawW = imgW * scale;
const drawH = imgH * scale;
// 3. Prepare a high-DPI canvas
const pxRatio = (window.devicePixelRatio || 1) * 2;
const canvas = document.createElement("canvas");
canvas.width = Math.ceil(maxWidth * pxRatio);
canvas.height = Math.ceil(maxHeight * pxRatio);
const ctx = canvas.getContext("2d");
ctx.scale(pxRatio, pxRatio);
ctx.clearRect(0, 0, maxWidth, maxHeight);
// 4. Center the image in the widget rectangle
const x = (maxWidth - drawW) / 2;
const y = (maxHeight - drawH) / 2;
ctx.drawImage(img, x, y, drawW, drawH);
// 5. Return new base64 in same format as input
const quality =
inputMime.includes("jpeg") || inputMime.includes("jpg") ? 0.9 : undefined;
return canvas.toDataURL(inputMime, quality);
}
//function to use After setting the signature URL for the first signature widget, clicking on subsequent //function to use After setting the signature URL for the first signature widget, clicking on subsequent
//signature widgets should automatically apply and display the signature. apply for initial,signature and stamp widget //signature widgets should automatically apply and display the signature. apply for initial,signature and stamp widget
export const handleCopySignUrl = ( export const handleCopySignUrl = (
@@ -1488,35 +1516,30 @@ export const calculateImgAspectRatio = (imgWH, pos) => {
return { newHeight, newWidth }; return { newHeight, newWidth };
}; };
//function for upload stamp or image // `onSaveImage` trigger for upload image through stamp, image, signature, initials widgets
export function onSaveImage( export function onSaveImage(
signatureType,
xyPosition, xyPosition,
index, index,
signKey, signKey,
imgWH,
image, image,
isAutoSign, isAutoSign,
widgetsType, widgetsType,
isApplyAll isApplyAll
) { ) {
let getIMGWH; // let getIMGWH;
const isSignOrInitials =
widgetsType && ["signature", "initials"].includes(widgetsType);
//get current page position //get current page position
const getXYData = xyPosition[index].pos; const getXYData = xyPosition[index].pos;
const updateXYData = getXYData.map((position) => { const updateXYData = getXYData.map((position) => {
if (position.key === signKey) { if (position.key === signKey) {
getIMGWH = calculateImgAspectRatio(imgWH, position);
return { return {
...position, ...position,
Width: getIMGWH.newWidth,
Height: getIMGWH.newHeight,
SignUrl: image.src, SignUrl: image.src,
ImageType: image.imgType, ImageType: image.imgType,
options: { ...(isSignOrInitials && { signatureType: signatureType || "" }),
...position.options, options: { ...position.options, response: image.src }
response: image.src
}
}; };
} }
return position; return position;
@@ -1528,17 +1551,16 @@ export function onSaveImage(
} }
return obj; return obj;
}); });
//condition when user upload(stamp) then apply it all related to widgets // condition when user upload(stamp) then apply it all related to widgets
if (isApplyAll || isAutoSign) { if (isApplyAll || isAutoSign) {
const updatedArray = updateXYposition.map((page) => ({ const updatedArray = updateXYposition.map((page) => ({
...page, ...page,
pos: page.pos.map( pos: page.pos.map(
(item) => (item) =>
// below condition to exclude apply all for image widget
item.type === widgetsType && item.type !== "image" item.type === widgetsType && item.type !== "image"
? { ? {
...item, ...item,
// Width: getIMGWH.newWidth,
// Height: getIMGWH.newHeight,
SignUrl: image.src, SignUrl: image.src,
ImageType: image.imgType, ImageType: image.imgType,
options: { options: {
@@ -1556,7 +1578,7 @@ export function onSaveImage(
} }
//function for select image and upload image //function for select image and upload image
export const onImageSelect = (setImgWH, setImage, file) => { export const onImageSelect = (setImage, file) => {
const reader = new FileReader(); const reader = new FileReader();
reader.readAsDataURL(file); reader.readAsDataURL(file);
reader.onloadend = function (e) { reader.onloadend = function (e) {
@@ -1575,13 +1597,12 @@ export const onImageSelect = (setImgWH, setImage, file) => {
width = 184 * imgR; width = 184 * imgR;
height = 184; height = 184;
} }
setImgWH({ width: width, height: height });
}; };
image.src = reader.result; image.src = reader.result;
setImage({ src: image.src, imgType: file.type }); setImage({ src: image.src, imgType: file.type });
}; };
}; };
export const compressedFileSize = (file, setImgWH, setImage) => { export const compressedFileSize = (file, setImage) => {
// Create a new FileReader instance to read the uploaded file // Create a new FileReader instance to read the uploaded file
const reader = new FileReader(); const reader = new FileReader();
@@ -1606,7 +1627,7 @@ export const compressedFileSize = (file, setImgWH, setImage) => {
// Draw the image onto the canvas with the specified dimensions // Draw the image onto the canvas with the specified dimensions
ctx.drawImage(img, 0, 0, canvas.width, canvas.height); ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
// Get the original file type (default to "image/png" if not recognized) // Get the original file type (default to "image/png" if not recognized)
const fileType = file.type || "image/png"; const fileType = "image/png"; //file.type || "image/png"
// Compress the image and convert it into a Blob // Compress the image and convert it into a Blob
canvas.toBlob( canvas.toBlob(
(blob) => { (blob) => {
@@ -1616,7 +1637,7 @@ export const compressedFileSize = (file, setImgWH, setImage) => {
lastModified: Date.now() // Update the last modified timestamp lastModified: Date.now() // Update the last modified timestamp
}); });
// Pass the compressed file to a custom function for further processing // Pass the compressed file to a custom function for further processing
onImageSelect(setImgWH, setImage, compressedFile); onImageSelect(setImage, compressedFile);
}, },
fileType, // Output format for the compressed image fileType, // Output format for the compressed image
0.3 // Compression quality (30%) 0.3 // Compression quality (30%)
@@ -1741,10 +1762,12 @@ export const multiSignEmbed = async (widgets, pdfDoc, signyourself, scale) => {
widgetsPositionArr.map(async (widget) => { widgetsPositionArr.map(async (widget) => {
// `SignUrl` this is wrong nomenclature and maintain for older code in this options we save base64 of signature image from sign pad // `SignUrl` this is wrong nomenclature and maintain for older code in this options we save base64 of signature image from sign pad
let signbase64 = widget.SignUrl && widget.SignUrl; let signbase64 = widget.SignUrl && widget.SignUrl;
const widgetDims = { Width: widget.Width, Height: widget.Height };
if (signbase64) { if (signbase64) {
let arr = signbase64.split(","), let arr = signbase64.split(","),
mime = arr[0].match(/:(.*?);/)[1]; mime = arr[0].match(/:(.*?);/)[1];
const res = await fetch(signbase64); const signatureImg = await convertBase64ToImg(signbase64, widgetDims);
const res = await fetch(signatureImg);
const arrayBuffer = await res.arrayBuffer(); const arrayBuffer = await res.arrayBuffer();
const obj = { mimetype: mime, arrayBuffer: arrayBuffer }; const obj = { mimetype: mime, arrayBuffer: arrayBuffer };
return obj; return obj;
@@ -2272,28 +2295,25 @@ export const addDefaultSignatureImg = (xyPosition, defaultSignImg, type) => {
const img = new Image(); const img = new Image();
img.src = defaultSignImg; img.src = defaultSignImg;
if (img.complete) { if (img.complete) {
imgWH = { imgWH = { width: img.width, height: img.height };
width: img.width,
height: img.height
};
} }
let xyDefaultPos = []; let xyDefaultPos = [];
for (let i = 0; i < xyPosition.length; i++) { for (let i = 0; i < xyPosition.length; i++) {
let getIMGWH; // let getIMGWH;
const getXYdata = xyPosition[i].pos; const getXYdata = xyPosition[i].pos;
const getPageNo = xyPosition[i].pageNumber; const getPageNo = xyPosition[i].pageNumber;
const getPosData = getXYdata; const getPosData = getXYdata;
const addSign = getPosData.map((position) => { const addSign = getPosData.map((position) => {
getIMGWH = calculateImgAspectRatio(imgWH, position); // getIMGWH = calculateImgAspectRatio(imgWH, position);
if (position.type) { if (position.type) {
if (position?.type === type) { if (position?.type === type) {
return { return {
...position, ...position,
SignUrl: defaultSignImg, SignUrl: defaultSignImg,
Width: getIMGWH.newWidth, // Width: getIMGWH.newWidth,
Height: getIMGWH.newHeight, // Height: getIMGWH.newHeight,
ImageType: "default", ImageType: "default",
options: { options: {
...position.options, ...position.options,
@@ -2305,8 +2325,8 @@ export const addDefaultSignatureImg = (xyPosition, defaultSignImg, type) => {
return { return {
...position, ...position,
SignUrl: defaultSignImg, SignUrl: defaultSignImg,
Width: getIMGWH.newWidth, // Width: getIMGWH.newWidth,
Height: getIMGWH.newHeight, // Height: getIMGWH.newHeight,
ImageType: "default", ImageType: "default",
options: { options: {
...position.options, ...position.options,
@@ -2414,7 +2434,10 @@ export const getAppLogo = async () => {
}); });
if (tenant) { if (tenant) {
localStorage.setItem("appname", "OpenSign™"); localStorage.setItem("appname", "OpenSign™");
return { logo: tenant?.logo, user: tenant?.user }; return {
logo: tenant?.logo,
user: tenant?.user
};
} }
} catch (err) { } catch (err) {
console.log("err in getlogo ", err); console.log("err in getlogo ", err);
@@ -3650,3 +3673,60 @@ export function getFileAsArrayBuffer(file) {
reader.readAsArrayBuffer(file); reader.readAsArrayBuffer(file);
}); });
} }
/**
* Converts a JPEG/JPG File/Blob into a PNG File.
*
* @param {string} base64Image - A data-URL (e.g. "data:image/jpeg;base64,…")
* @param {string} filename - Desired filename (e.g. "input").
* @returns {Promise<File>} - A promise that resolves with a new PNG File.
*/
export function convertJpegToPng(base64Image, filename) {
const arr = base64Image.split(",");
const mimeMatch = arr[0].match(/:(.*?);/);
if (!mimeMatch) throw new Error("Invalid dataURL");
const mime = mimeMatch[1];
const type = mime.split("/")[1];
if (type === "png") {
return base64Image;
} else {
const bstr = atob(arr[1]);
let n = bstr.length;
const u8arr = new Uint8Array(n);
while (n--) u8arr[n] = bstr.charCodeAt(n);
const inputFile = new File([u8arr], `${filename}.${type}`, { type: mime });
return new Promise((resolve, reject) => {
// ensure its JPEG/JPG (you can remove this check if not needed)
if (!/image\/jpe?g/.test(inputFile.type)) {
return reject(new Error("Input must be a JPEG or JPG image"));
}
// Read the file as a data URL
const reader = new FileReader();
reader.onerror = () => reject(new Error("Failed to read the file"));
reader.onload = () => {
const img = new Image();
img.onerror = () => reject(new Error("Failed to load image"));
img.onload = () => {
// draw image onto a canvas
const canvas = document.createElement("canvas");
canvas.width = img.width;
canvas.height = img.height;
const ctx = canvas.getContext("2d");
ctx.drawImage(img, 0, 0);
// directly get PNG as base64 data URL
try {
const pngDataUrl = canvas.toDataURL("image/png");
resolve(pngDataUrl);
} catch (err) {
reject(new Error("Failed to convert canvas to PNG"));
}
};
img.src = reader.result;
};
reader.readAsDataURL(inputFile);
});
}
}
+1 -3
View File
@@ -680,9 +680,7 @@ const Forms = (props) => {
</ModalUi> </ModalUi>
<form onSubmit={handleSubmit}> <form onSubmit={handleSubmit}>
<div className="mb-[11px]"> <div className="mb-[11px]">
<h1 className="text-[20px] font-semibold"> <h1 className="text-[20px] font-semibold">{t(props?.title)}</h1>
{t(`form-name.${props?.title}`)}
</h1>
{props.title === "Sign Yourself" && ( {props.title === "Sign Yourself" && (
<div className="text-gray-500 text-xs mt-1"> <div className="text-gray-500 text-xs mt-1">
{t("signyour-self-description")} {t("signyour-self-description")}
+6 -2
View File
@@ -125,7 +125,11 @@ function Login() {
} }
} catch (error) { } catch (error) {
console.error("Error while logging in user", error); console.error("Error while logging in user", error);
showToast("danger", "Invalid username/password or region"); if (error?.code === 1001) {
showToast("danger", t("action-prohibited"));
} else {
showToast("danger", "Invalid username/password or region");
}
} }
}; };
const handleLoginBtn = async (event) => { const handleLoginBtn = async (event) => {
@@ -495,7 +499,7 @@ function Login() {
to="/forgetpassword" to="/forgetpassword"
className="text-[13px] op-link op-link-primary underline-offset-1 focus:outline-none ml-1" className="text-[13px] op-link op-link-primary underline-offset-1 focus:outline-none ml-1"
> >
{t("forgot-password")} {t("forgot-password")}?
</NavLink> </NavLink>
</div> </div>
</div> </div>
+2 -9
View File
@@ -324,13 +324,8 @@ const ManageSign = () => {
hidden hidden
/> />
<div className="relative"> <div className="relative">
{isLoader && (
<div className="absolute bg-black bg-opacity-30 z-50 w-full h-full flex justify-center items-center">
<Loader />
</div>
)}
{image ? ( {image ? (
<div className="signatureCanvas relative border-[2px] border-[#888] rounded-box overflow-hidden"> <div className="mysignatureCanvas relative border-[2px] border-[#888] rounded-box overflow-hidden">
<img <img
alt="signature" alt="signature"
src={image} src={image}
@@ -342,10 +337,8 @@ const ManageSign = () => {
ref={canvasRef} ref={canvasRef}
penColor={penColor} penColor={penColor}
canvasProps={{ canvasProps={{
width: "456px",
height: "180px",
className: className:
"signatureCanvas border-[2px] border-[#888] rounded-box" "mysignatureCanvas border-[2px] border-[#888] rounded-box"
}} }}
onEnd={() => onEnd={() =>
handleSignatureChange(canvasRef.current.toDataURL()) handleSignatureChange(canvasRef.current.toDataURL())
+4 -4
View File
@@ -712,14 +712,14 @@ function Opensigndrive() {
onClick={() => navigate("/form/sHAnZphf69")} onClick={() => navigate("/form/sHAnZphf69")}
> >
<i className="fa-light fa-pen-nib mr-[5px]"></i> <i className="fa-light fa-pen-nib mr-[5px]"></i>
{t("form-name.Sign Yourself")} {t("Sign Yourself")}
</span> </span>
<span <span
className="dropdown-item text-[10px] md:text-[13px]" className="dropdown-item text-[10px] md:text-[13px]"
onClick={() => navigate("/form/8mZzFxbG1z")} onClick={() => navigate("/form/8mZzFxbG1z")}
> >
<i className="fa-light fa-file-signature mr-[5px]"></i> <i className="fa-light fa-file-signature mr-[5px]"></i>
{t("form-name.Request Signatures")} {t("Request Signatures")}
</span> </span>
</div> </div>
</div> </div>
@@ -840,14 +840,14 @@ function Opensigndrive() {
onClick={() => navigate("/form/sHAnZphf69")} onClick={() => navigate("/form/sHAnZphf69")}
> >
<i className="fa-light fa-pen-nib mr-[5px]"></i> <i className="fa-light fa-pen-nib mr-[5px]"></i>
{t("form-name.Sign Yourself")} {t("Sign Yourself")}
</span> </span>
<span <span
className="dropdown-item text-[10px] md:text-[13px]" className="dropdown-item text-[10px] md:text-[13px]"
onClick={() => navigate("/form/8mZzFxbG1z")} onClick={() => navigate("/form/8mZzFxbG1z")}
> >
<i className="fa-light fa-file-signature mr-[5px]"></i> <i className="fa-light fa-file-signature mr-[5px]"></i>
{t("form-name.Request Signatures")} {t("Request Signatures")}
</span> </span>
</div> </div>
</div> </div>
+2 -30
View File
@@ -144,7 +144,6 @@ function PdfRequestFiles(
const [signatureType, setSignatureType] = useState([]); const [signatureType, setSignatureType] = useState([]);
const [pdfBase64Url, setPdfBase64Url] = useState(""); const [pdfBase64Url, setPdfBase64Url] = useState("");
const [isAgree, setIsAgree] = useState(false); const [isAgree, setIsAgree] = useState(false);
const [isAgreeTour, setIsAgreeTour] = useState(false);
const [redirectTimeLeft, setRedirectTimeLeft] = useState(5); const [redirectTimeLeft, setRedirectTimeLeft] = useState(5);
const [isredirectCanceled, setIsredirectCanceled] = useState(true); const [isredirectCanceled, setIsredirectCanceled] = useState(true);
const [isDragging, setIsDragging] = useState(false); const [isDragging, setIsDragging] = useState(false);
@@ -1378,18 +1377,7 @@ function PdfRequestFiles(
setIsUiLoading(false); setIsUiLoading(false);
alert(t("expiry-date-error")); alert(t("expiry-date-error"));
} }
}; };
const AgreementTour = [
{
selector: '[data-tut="IsAgree"]',
content: () => <p className="p-0">{t("agrrement-alert")}</p>,
position: "top",
style: { fontSize: "13px" }
}
];
const handleCloseAgreeTour = () => {
setIsAgreeTour(false);
};
// `handleRedirectCancel` is used to cancel redirecting to redirectUrl // `handleRedirectCancel` is used to cancel redirecting to redirectUrl
const handleRedirectCancel = () => { const handleRedirectCancel = () => {
setIsredirectCanceled(true); setIsredirectCanceled(true);
@@ -1599,7 +1587,7 @@ function PdfRequestFiles(
} }
} }
}; };
//function to get first widget and page number to assign currect signer and tour message //function to get first widget id and page number to assign correct signer and show tour message
const showFirstWidget = () => { const showFirstWidget = () => {
if (!requestSignTour) { if (!requestSignTour) {
const getCurrentUserPlaceholder = signerPos?.find( const getCurrentUserPlaceholder = signerPos?.find(
@@ -1644,21 +1632,9 @@ function PdfRequestFiles(
!isDecline?.isDeclined && ( !isDecline?.isDeclined && (
<AgreementSign <AgreementSign
setIsAgree={setIsAgree} setIsAgree={setIsAgree}
setIsAgreeTour={setIsAgreeTour}
showFirstWidget={showFirstWidget} showFirstWidget={showFirstWidget}
/> />
)} )}
<Tour
showNumber={false}
showNavigation={false}
showNavigationNumber={false}
onRequestClose={handleCloseAgreeTour}
steps={AgreementTour}
isOpen={isAgreeTour}
rounded={5}
closeWithMask={false}
/>
{isUiLoading && ( {isUiLoading && (
<div className="absolute h-[100vh] w-full flex flex-col justify-center items-center z-[999] bg-[#e6f2f2] bg-opacity-80"> <div className="absolute h-[100vh] w-full flex flex-col justify-center items-center z-[999] bg-[#e6f2f2] bg-opacity-80">
<Loader /> <Loader />
@@ -2011,8 +1987,6 @@ function PdfRequestFiles(
scale={scale} scale={scale}
uniqueId={uniqueId} uniqueId={uniqueId}
pdfBase64Url={pdfBase64Url} pdfBase64Url={pdfBase64Url}
setIsAgreeTour={setIsAgreeTour}
isAgree={isAgree}
handleTabDrag={handleTabDrag} handleTabDrag={handleTabDrag}
handleStop={handleStop} handleStop={handleStop}
isDragging={isDragging} isDragging={isDragging}
@@ -2095,8 +2069,6 @@ function PdfRequestFiles(
signatureType?.find((x) => x.name === "default") signatureType?.find((x) => x.name === "default")
?.enabled || false ?.enabled || false
} }
isAgree={isAgree}
setIsAgreeTour={setIsAgreeTour}
/> />
)} )}
</div> </div>
+1 -1
View File
@@ -217,7 +217,7 @@ const Preferences = () => {
}; };
const tenantEmailTemplate = async (tenantRes) => { const tenantEmailTemplate = async (tenantRes) => {
if (tenantRes === "user does not exist!") { if (tenantRes === "user does not exist!") {
alert("User does not exist"); alert(t("user-not-exist"));
} else if (tenantRes) { } else if (tenantRes) {
setIsLoader(true); setIsLoader(true);
const updateRes = tenantRes; const updateRes = tenantRes;
@@ -994,6 +994,7 @@ const ReportTable = (props) => {
const timezone = extClass?.[0]?.Timezone || ""; const timezone = extClass?.[0]?.Timezone || "";
const DateFormat = extClass?.[0]?.DateFormat || "MM/DD/YYYY"; const DateFormat = extClass?.[0]?.DateFormat || "MM/DD/YYYY";
const Is12Hr = extClass?.[0]?.Is12HourTime || false; const Is12Hr = extClass?.[0]?.Is12HourTime || false;
const isCompletedReport = props?.ReportName === "Completed Documents";
const signers = item?.Placeholders?.map((x, i) => { const signers = item?.Placeholders?.map((x, i) => {
const audit = item?.AuditTrail?.find( const audit = item?.AuditTrail?.find(
(audit) => audit?.UserPtr?.objectId === x.signerObjId (audit) => audit?.UserPtr?.objectId === x.signerObjId
@@ -1019,22 +1020,26 @@ const ReportTable = (props) => {
{displaySigners?.map((x, i) => ( {displaySigners?.map((x, i) => (
<div <div
key={i} key={i}
className="text-sm font-medium flex flex-row gap-2 items-center" className={`text-sm flex flex-row gap-2 items-center ${
i !== displaySigners.length - 1 ? "mb-2" : ""
}`}
> >
<button {!isCompletedReport && (
onClick={() => setIsModal({ [`${item.objectId}_${i}`]: true })} <button
className={`${ onClick={() => setIsModal({ [`${item.objectId}_${i}`]: true })}
x.Activity === "SIGNED" className={`${
? "op-border-primary op-text-primary" x.Activity === "SIGNED"
: x.Activity === "VIEWED" ? "op-border-primary op-text-primary"
? "border-green-400 text-green-400" : x.Activity === "VIEWED"
: "border-base-content text-base-content" ? "border-green-400 text-green-400"
} focus:outline-none border-2 w-[60px] h-[30px] text-[11px] rounded-full`} : "border-base-content text-base-content"
> } focus:outline-none border-2 w-[60px] h-[30px] text-[11px] rounded-full`}
{x?.Activity?.toUpperCase() || "-"} >
</button> {x?.Activity?.toUpperCase() || "-"}
<div className="py-2 font-bold text-[12px]">{x?.Email || "-"}</div> </button>
{isModal[`${item.objectId}_${i}`] && ( )}
<div className="text-[12px]">{x?.Email || "-"}</div>
{!isCompletedReport && isModal[`${item.objectId}_${i}`] && (
<ModalUi <ModalUi
isOpen isOpen
title={t("document-logs")} title={t("document-logs")}
@@ -1057,7 +1062,7 @@ const ReportTable = (props) => {
[item.objectId]: !isShowAllSigners[item.objectId] [item.objectId]: !isShowAllSigners[item.objectId]
}) })
} }
className="ml-2 text-xs font-medium text-blue-500 underline focus:outline-none" className="ml-2 mt-1 text-xs font-medium text-blue-500 underline focus:outline-none"
> >
{isShowAllSigners[item.objectId] ? "Hide" : "Show More"} {isShowAllSigners[item.objectId] ? "Hide" : "Show More"}
</button> </button>
@@ -1657,21 +1662,22 @@ const ReportTable = (props) => {
<React.Fragment key={index}> <React.Fragment key={index}>
<th className="p-2"> <th className="p-2">
{t(`report-heading.${item}`)} {t(`report-heading.${item}`)}
{props.ReportName === "Contactbook" && item === "Name" && ( {props.ReportName === "Contactbook" &&
<button item === "Name" && (
type="button" <button
onClick={toggleSortOrder} type="button"
className="ml-1" onClick={toggleSortOrder}
> className="ml-1"
<i >
className={ <i
sortOrder === "asc" className={
? "fa-light fa-arrow-down-a-z" sortOrder === "asc"
: "fa-light fa-arrow-up-a-z" ? "fa-light fa-arrow-down-a-z"
} : "fa-light fa-arrow-up-a-z"
></i> }
</button> ></i>
)} </button>
)}
</th> </th>
</React.Fragment> </React.Fragment>
))} ))}
@@ -1807,12 +1813,16 @@ const ReportTable = (props) => {
</td> </td>
)} )}
{props.heading.includes("Signers") && {props.heading.includes("Signers") &&
["In-progress documents", "Need your sign"].includes( [
props.ReportName "In-progress documents",
) ? ( "Need your sign",
"Completed Documents"
].includes(props.ReportName) ? (
<td className="px-1 py-2"> <td className="px-1 py-2">
{!item?.IsSignyourself && item?.Placeholders && ( {!item?.IsSignyourself && item?.Placeholders ? (
<>{formatStatusRow(item)}</> <>{formatStatusRow(item)}</>
) : (
<>-</>
)} )}
</td> </td>
) : ( ) : (
+43 -5
View File
@@ -6,18 +6,21 @@
.react-datepicker__input-container { .react-datepicker__input-container {
position: initial !important; position: initial !important;
} }
.select-none-cls { .select-none-cls {
-webkit-user-select: none; -webkit-user-select: none;
/* Disable text selection in WebKit browsers */ /* Disable text selection in WebKit browsers */
-moz-user-select: none; -moz-user-select: none;
user-select: none; user-select: none;
} }
.widgets { .widgets {
-webkit-user-select: none; -webkit-user-select: none;
/* Disable text selection in WebKit browsers */ /* Disable text selection in WebKit browsers */
-moz-user-select: none; -moz-user-select: none;
user-select: none; user-select: none;
} }
.radioButton { .radioButton {
width: 100%; width: 100%;
height: 100%; height: 100%;
@@ -33,12 +36,18 @@
width: 440px; width: 440px;
height: 167px; height: 167px;
} }
.tabWidth { .tabWidth {
border: 1px solid #f3f4f6; border: 1px solid #f3f4f6;
background-color: #f3f4f6; background-color: #f3f4f6;
width: 440px; width: 440px;
} }
.mysignatureCanvas {
width: 456px;
height: 180px;
}
[data-theme="opensigndark"] .tabWidth { [data-theme="opensigndark"] .tabWidth {
border: 1px solid #1f2937 !important; border: 1px solid #1f2937 !important;
background-color: #1f2937 !important; background-color: #1f2937 !important;
@@ -48,6 +57,7 @@
width: 150px; width: 150px;
height: 150px; height: 150px;
} }
.checked-radio::after { .checked-radio::after {
content: ""; content: "";
position: absolute; position: absolute;
@@ -56,14 +66,15 @@
width: 50%; width: 50%;
height: 50%; height: 50%;
border-radius: 9999px; border-radius: 9999px;
background-color: #111111; /* blue-500 */ background-color: #111111;
/* blue-500 */
} }
.intialSignature { .intialSignature {
border: 2px solid #888; border: 2px solid #888;
background-color: rgb(255, 255, 255); background-color: rgb(255, 255, 255);
width: 183px; width: 180px;
height: 183px; height: 180px;
} }
/* Dark mode support for initials box in /managesign */ /* Dark mode support for initials box in /managesign */
@@ -100,6 +111,12 @@
border-color: #4b5563 !important; border-color: #4b5563 !important;
} }
/* Also support signature canvas for consistency */
[data-theme="opensigndark"] .mysignatureCanvas {
background-color: #1f2937 !important;
border-color: #4b5563 !important;
}
.penContainerDefault { .penContainerDefault {
width: 460px; width: 460px;
} }
@@ -115,6 +132,7 @@
.ScrollbarsCustom-TrackY { .ScrollbarsCustom-TrackY {
width: 4px !important; width: 4px !important;
} }
.ScrollbarsCustom-TrackX { .ScrollbarsCustom-TrackX {
height: 4px !important; height: 4px !important;
} }
@@ -143,6 +161,7 @@
overflow: hidden !important; overflow: hidden !important;
text-overflow: ellipsis; text-overflow: ellipsis;
} }
.disabled { .disabled {
opacity: 0.5; opacity: 0.5;
/* Example: reduce opacity to visually indicate disabled state */ /* Example: reduce opacity to visually indicate disabled state */
@@ -431,7 +450,7 @@ option {
to prevent sudden quick movement (as the to prevent sudden quick movement (as the
navigation bar gets a new position at the top of the navigation bar gets a new position at the top of the
page (position:fixed and top:0) */ page (position:fixed and top:0) */
.stickyHead + .content { .stickyHead+.content {
padding-top: 60px; padding-top: 60px;
} }
} }
@@ -441,6 +460,12 @@ option {
width: 300px; width: 300px;
height: 120px; height: 120px;
} }
.mysignatureCanvas {
width: 300px;
height: 118px;
}
.tabWidth { .tabWidth {
width: 300px; width: 300px;
} }
@@ -462,11 +487,18 @@ option {
.scroll-hide::-webkit-scrollbar { .scroll-hide::-webkit-scrollbar {
display: none; display: none;
} }
@media screen and (max-width: 350px) and (min-width: 311px) { @media screen and (max-width: 350px) and (min-width: 311px) {
.signatureCanvas { .signatureCanvas {
width: 280px; width: 280px;
height: 112px; height: 112px;
} }
.mysignatureCanvas {
width: 280px;
height: 111px;
}
.tabWidth { .tabWidth {
width: 280px; width: 280px;
} }
@@ -491,6 +523,12 @@ option {
width: 230px; width: 230px;
height: 92px; height: 92px;
} }
.mysignatureCanvas {
width: 230px;
height: 91px;
}
.tabWidth { .tabWidth {
width: 230px; width: 230px;
} }
@@ -507,4 +545,4 @@ option {
.uploadImgLogo { .uploadImgLogo {
font-size: 20px; font-size: 20px;
} }
} }
@@ -43,9 +43,9 @@ async function saveUser(userDetails) {
} }
export default async function usersignup(request) { export default async function usersignup(request) {
const userDetails = request.params.userDetails; const userDetails = request.params.userDetails;
const user = await saveUser(userDetails);
try { try {
const user = await saveUser(userDetails);
const extClass = userDetails.role.split('_')[0]; const extClass = userDetails.role.split('_')[0];
const extQuery = new Parse.Query(extClass + '_Users'); const extQuery = new Parse.Query(extClass + '_Users');
+44 -103
View File
@@ -105,9 +105,10 @@
} }
}, },
"node_modules/@apollo/server": { "node_modules/@apollo/server": {
"version": "4.12.0", "version": "4.12.1",
"resolved": "https://registry.npmjs.org/@apollo/server/-/server-4.12.0.tgz", "resolved": "https://registry.npmjs.org/@apollo/server/-/server-4.12.1.tgz",
"integrity": "sha512-Z5RNTCnIia+dFsP5HW2ugQMrIOWgyNWyKP+jMVXthp/ECjYyyRYPC41ukCDwxHQY4vNZ3rgbgqroWVQUGFt2gA==", "integrity": "sha512-jceK1LK6l074in4mWu8XkwzDjvxdSzkmk8M7YpVLOGjQ6PmlaChcGRJ9BUwB46r22MxdPCXdC/6U5Vi8gzYbvQ==",
"deprecated": "Apollo Server v4 is deprecated and will transition to end-of-life on January 26, 2026. As long as you are already using a non-EOL version of Node.js, upgrading to v5 should take only a few minutes. See https://www.apollographql.com/docs/apollo-server/previous-versions for details.",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@apollo/cache-control-types": "^1.0.3", "@apollo/cache-control-types": "^1.0.3",
@@ -146,6 +147,7 @@
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/@apollo/server-gateway-interface/-/server-gateway-interface-1.1.1.tgz", "resolved": "https://registry.npmjs.org/@apollo/server-gateway-interface/-/server-gateway-interface-1.1.1.tgz",
"integrity": "sha512-pGwCl/po6+rxRmDMFgozKQo2pbsSwE91TpsDBAOgf74CRDPXHHtM88wbwjab0wMMZh95QfR45GGyDIdhY24bkQ==", "integrity": "sha512-pGwCl/po6+rxRmDMFgozKQo2pbsSwE91TpsDBAOgf74CRDPXHHtM88wbwjab0wMMZh95QfR45GGyDIdhY24bkQ==",
"deprecated": "@apollo/server-gateway-interface v1 is part of Apollo Server v4, which is deprecated and will transition to end-of-life on January 26, 2026. As long as you are already using a non-EOL version of Node.js, upgrading to v2 should take only a few minutes. See https://www.apollographql.com/docs/apollo-server/previous-versions for details.",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@apollo/usage-reporting-protobuf": "^4.1.1", "@apollo/usage-reporting-protobuf": "^4.1.1",
@@ -6119,18 +6121,30 @@
} }
}, },
"node_modules/@eslint/plugin-kit": { "node_modules/@eslint/plugin-kit": {
"version": "0.3.1", "version": "0.3.4",
"resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.1.tgz", "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.4.tgz",
"integrity": "sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w==", "integrity": "sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==",
"license": "Apache-2.0", "license": "Apache-2.0",
"dependencies": { "dependencies": {
"@eslint/core": "^0.14.0", "@eslint/core": "^0.15.1",
"levn": "^0.4.1" "levn": "^0.4.1"
}, },
"engines": { "engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0" "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
} }
}, },
"node_modules/@eslint/plugin-kit/node_modules/@eslint/core": {
"version": "0.15.1",
"resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.1.tgz",
"integrity": "sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==",
"license": "Apache-2.0",
"dependencies": {
"@types/json-schema": "^7.0.15"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
}
},
"node_modules/@fastify/busboy": { "node_modules/@fastify/busboy": {
"version": "3.1.1", "version": "3.1.1",
"resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-3.1.1.tgz", "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-3.1.1.tgz",
@@ -10978,23 +10992,6 @@
"form-data": "^2.5.0" "form-data": "^2.5.0"
} }
}, },
"node_modules/@types/request/node_modules/form-data": {
"version": "2.5.3",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.3.tgz",
"integrity": "sha512-XHIrMD0NpDrNM/Ckf7XJiBbLl57KEhT3+i3yY+eWm+cqYZJQTZrKo8Y8AWKnuV5GT4scfuUGt9LzNoIx3dU1nQ==",
"license": "MIT",
"optional": true,
"dependencies": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.8",
"es-set-tostringtag": "^2.1.0",
"mime-types": "^2.1.35",
"safe-buffer": "^5.2.1"
},
"engines": {
"node": ">= 0.12"
}
},
"node_modules/@types/send": { "node_modules/@types/send": {
"version": "0.17.4", "version": "0.17.4",
"resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz",
@@ -13468,9 +13465,9 @@
} }
}, },
"node_modules/form-data": { "node_modules/form-data": {
"version": "4.0.3", "version": "4.0.4",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.3.tgz", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz",
"integrity": "sha512-qsITQPfmvMOSAdeyZ+12I1c+CKSstAFAwu+97zrnWAbIr5u8wfsExUzCesVLC8NgHuRUqNN4Zy6UPWUTRGslcA==", "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"asynckit": "^0.4.0", "asynckit": "^0.4.0",
@@ -15737,9 +15734,9 @@
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
}, },
"node_modules/multer": { "node_modules/multer": {
"version": "2.0.1", "version": "2.0.2",
"resolved": "https://registry.npmjs.org/multer/-/multer-2.0.1.tgz", "resolved": "https://registry.npmjs.org/multer/-/multer-2.0.2.tgz",
"integrity": "sha512-Ug8bXeTIUlxurg8xLTEskKShvcKDZALo1THEX5E41pYCD2sCVub5/kIRIGqWNoqV6szyLyQKV6mD4QUrWE5GCQ==", "integrity": "sha512-u7f2xaZ/UG8oLXHvtF/oWTRvT44p9ecwBBqTwgJVq0+4BW1g8OW01TyMEGWBHbyMOYVHXslaut7qEQ1meATXgw==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"append-field": "^1.0.0", "append-field": "^1.0.0",
@@ -16476,13 +16473,13 @@
} }
}, },
"node_modules/parse-server": { "node_modules/parse-server": {
"version": "8.2.1", "version": "8.2.2",
"resolved": "https://registry.npmjs.org/parse-server/-/parse-server-8.2.1.tgz", "resolved": "https://registry.npmjs.org/parse-server/-/parse-server-8.2.2.tgz",
"integrity": "sha512-Z0k0a6UAmcbWTt21naacGDjNRNQpe3vrS+EM/cjSlXHPVAxYFnXuXK8R3kSCWKXU49tYkhep6A4KbtcFr2NsVw==", "integrity": "sha512-qFP5QpJW0NL6s3GhIonlmdCg5lJHwDCnTlxkINCsxnsoeKJVsFou0xy2x6dNquMIU0RJi3qolQaFbNGICZV3NA==",
"hasInstallScript": true, "hasInstallScript": true,
"license": "Apache-2.0", "license": "Apache-2.0",
"dependencies": { "dependencies": {
"@apollo/server": "4.12.0", "@apollo/server": "4.12.1",
"@babel/eslint-parser": "7.27.1", "@babel/eslint-parser": "7.27.1",
"@graphql-tools/merge": "9.0.24", "@graphql-tools/merge": "9.0.24",
"@graphql-tools/schema": "10.0.23", "@graphql-tools/schema": "10.0.23",
@@ -16508,7 +16505,7 @@
"lodash": "4.17.21", "lodash": "4.17.21",
"lru-cache": "10.4.0", "lru-cache": "10.4.0",
"mime": "4.0.7", "mime": "4.0.7",
"mongodb": "6.16.0", "mongodb": "6.17.0",
"mustache": "4.2.0", "mustache": "4.2.0",
"otpauth": "9.4.0", "otpauth": "9.4.0",
"parse": "6.1.1", "parse": "6.1.1",
@@ -16589,52 +16586,6 @@
"node": ">=18" "node": ">=18"
} }
}, },
"node_modules/parse-server/node_modules/mongodb": {
"version": "6.16.0",
"resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.16.0.tgz",
"integrity": "sha512-D1PNcdT0y4Grhou5Zi/qgipZOYeWrhLEpk33n3nm6LGtz61jvO88WlrWCK/bigMjpnOdAUKKQwsGIl0NtWMyYw==",
"license": "Apache-2.0",
"dependencies": {
"@mongodb-js/saslprep": "^1.1.9",
"bson": "^6.10.3",
"mongodb-connection-string-url": "^3.0.0"
},
"engines": {
"node": ">=16.20.1"
},
"peerDependencies": {
"@aws-sdk/credential-providers": "^3.188.0",
"@mongodb-js/zstd": "^1.1.0 || ^2.0.0",
"gcp-metadata": "^5.2.0",
"kerberos": "^2.0.1",
"mongodb-client-encryption": ">=6.0.0 <7",
"snappy": "^7.2.2",
"socks": "^2.7.1"
},
"peerDependenciesMeta": {
"@aws-sdk/credential-providers": {
"optional": true
},
"@mongodb-js/zstd": {
"optional": true
},
"gcp-metadata": {
"optional": true
},
"kerberos": {
"optional": true
},
"mongodb-client-encryption": {
"optional": true
},
"snappy": {
"optional": true
},
"socks": {
"optional": true
}
}
},
"node_modules/parse-server/node_modules/path-to-regexp": { "node_modules/parse-server/node_modules/path-to-regexp": {
"version": "6.3.0", "version": "6.3.0",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz",
@@ -17645,20 +17596,6 @@
"node": ">= 4" "node": ">= 4"
} }
}, },
"node_modules/request/node_modules/form-data": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
"integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
"license": "MIT",
"dependencies": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.6",
"mime-types": "^2.1.12"
},
"engines": {
"node": ">= 0.12"
}
},
"node_modules/request/node_modules/qs": { "node_modules/request/node_modules/qs": {
"version": "6.5.3", "version": "6.5.3",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz",
@@ -17985,16 +17922,23 @@
"integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
}, },
"node_modules/sha.js": { "node_modules/sha.js": {
"version": "2.4.11", "version": "2.4.12",
"resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.12.tgz",
"integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "integrity": "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==",
"license": "(MIT AND BSD-3-Clause)", "license": "(MIT AND BSD-3-Clause)",
"dependencies": { "dependencies": {
"inherits": "^2.0.1", "inherits": "^2.0.4",
"safe-buffer": "^5.0.1" "safe-buffer": "^5.2.1",
"to-buffer": "^1.2.0"
}, },
"bin": { "bin": {
"sha.js": "bin.js" "sha.js": "bin.js"
},
"engines": {
"node": ">= 0.10"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
} }
}, },
"node_modules/shebang-command": { "node_modules/shebang-command": {
@@ -18701,7 +18645,6 @@
"version": "1.2.1", "version": "1.2.1",
"resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.1.tgz", "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.1.tgz",
"integrity": "sha512-tB82LpAIWjhLYbqjx3X4zEeHN6M8CiuOEy2JY8SEQVdYRe3CCHOFaqrBW1doLDrfpWhplcW7BL+bO3/6S3pcDQ==", "integrity": "sha512-tB82LpAIWjhLYbqjx3X4zEeHN6M8CiuOEy2JY8SEQVdYRe3CCHOFaqrBW1doLDrfpWhplcW7BL+bO3/6S3pcDQ==",
"dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"isarray": "^2.0.5", "isarray": "^2.0.5",
@@ -18716,7 +18659,6 @@
"version": "2.0.5", "version": "2.0.5",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
"integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
"dev": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/to-regex-range": { "node_modules/to-regex-range": {
@@ -18868,7 +18810,6 @@
"version": "1.0.3", "version": "1.0.3",
"resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz",
"integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==",
"dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"call-bound": "^1.0.3", "call-bound": "^1.0.3",
+2 -1
View File
@@ -66,7 +66,8 @@
}, },
"overrides": { "overrides": {
"ws": "$ws", "ws": "$ws",
"parse": "$parse" "parse": "$parse",
"form-data": "$form-data"
}, },
"engines": { "engines": {
"node": "18 || 20 || 22" "node": "18 || 20 || 22"