From 7b6e948aa2059f0bab011eacf9441956926f7124 Mon Sep 17 00:00:00 2001 From: Ted Liang Date: Thu, 8 Jan 2026 11:30:45 +1100 Subject: [PATCH 01/15] refactor: reuse svgToPng function (#2365) --- packages/lib/server-only/pdf/render-certificate.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/lib/server-only/pdf/render-certificate.ts b/packages/lib/server-only/pdf/render-certificate.ts index 2a525caaf..43209b9c7 100644 --- a/packages/lib/server-only/pdf/render-certificate.ts +++ b/packages/lib/server-only/pdf/render-certificate.ts @@ -8,7 +8,6 @@ import 'konva/skia-backend'; import { DateTime } from 'luxon'; import fs from 'node:fs'; import path from 'node:path'; -import sharp from 'sharp'; import type { Canvas } from 'skia-canvas'; import { FontLibrary } from 'skia-canvas'; import { Image as SkiaImage } from 'skia-canvas'; @@ -22,6 +21,7 @@ import { RECIPIENT_ROLE_SIGNING_REASONS, } from '../../constants/recipient-roles'; import type { TDocumentAuditLogBaseSchema } from '../../types/document-audit-logs'; +import { svgToPng } from '../../utils/images/svg-to-png'; type ColumnWidths = [number, number, number]; @@ -584,7 +584,7 @@ const renderBranding = async ({ qrToken, i18n }: { qrToken: string | null; i18n: ecc: 'Q', }); - const svgImage = await sharp(Buffer.from(qrSvg)).toFormat('png').toBuffer(); + const svgImage = await svgToPng(qrSvg); // eslint-disable-next-line @typescript-eslint/consistent-type-assertions const qrSkiaImage = new SkiaImage(svgImage) as unknown as HTMLImageElement; From 6b041c23b4728de5a8ca0235035015f8f56917e5 Mon Sep 17 00:00:00 2001 From: Lucas Smith Date: Thu, 8 Jan 2026 15:16:57 +1100 Subject: [PATCH 02/15] v2.4.0 --- apps/remix/package.json | 2 +- package-lock.json | 6 +++--- package.json | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/remix/package.json b/apps/remix/package.json index c0527c75c..3d6124545 100644 --- a/apps/remix/package.json +++ b/apps/remix/package.json @@ -107,5 +107,5 @@ "vite-plugin-babel-macros": "^1.0.6", "vite-tsconfig-paths": "^5.1.4" }, - "version": "2.3.2" + "version": "2.4.0" } diff --git a/package-lock.json b/package-lock.json index c15b62044..716402720 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@documenso/root", - "version": "2.3.2", + "version": "2.4.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@documenso/root", - "version": "2.3.2", + "version": "2.4.0", "hasInstallScript": true, "workspaces": [ "apps/*", @@ -109,7 +109,7 @@ }, "apps/remix": { "name": "@documenso/remix", - "version": "2.3.2", + "version": "2.4.0", "dependencies": { "@cantoo/pdf-lib": "^2.5.3", "@documenso/api": "*", diff --git a/package.json b/package.json index 697feeab1..ce59d8a7b 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "apps/*", "packages/*" ], - "version": "2.3.2", + "version": "2.4.0", "scripts": { "postinstall": "patch-package", "build": "turbo run build", From a995961c4e90d907774f9577b4c04c16fea946bf Mon Sep 17 00:00:00 2001 From: Konrad <11725227+mKoonrad@users.noreply.github.com> Date: Sun, 11 Jan 2026 23:28:16 +0100 Subject: [PATCH 03/15] fix: mark document auth types for translation (#2331) --- packages/lib/constants/document-auth.ts | 15 +++++++++------ .../document-global-auth-access-select.tsx | 2 +- .../document-global-auth-action-select.tsx | 2 +- .../recipient/recipient-action-auth-select.tsx | 2 +- 4 files changed, 12 insertions(+), 9 deletions(-) diff --git a/packages/lib/constants/document-auth.ts b/packages/lib/constants/document-auth.ts index 3301a700c..b83353752 100644 --- a/packages/lib/constants/document-auth.ts +++ b/packages/lib/constants/document-auth.ts @@ -1,30 +1,33 @@ +import type { MessageDescriptor } from '@lingui/core'; +import { msg } from '@lingui/core/macro'; + import type { TDocumentAuth } from '../types/document-auth'; import { DocumentAuth } from '../types/document-auth'; type DocumentAuthTypeData = { key: TDocumentAuth; - value: string; + value: MessageDescriptor; }; export const DOCUMENT_AUTH_TYPES: Record = { [DocumentAuth.ACCOUNT]: { key: DocumentAuth.ACCOUNT, - value: 'Require account', + value: msg`Require account`, }, [DocumentAuth.PASSKEY]: { key: DocumentAuth.PASSKEY, - value: 'Require passkey', + value: msg`Require passkey`, }, [DocumentAuth.TWO_FACTOR_AUTH]: { key: DocumentAuth.TWO_FACTOR_AUTH, - value: 'Require 2FA', + value: msg`Require 2FA`, }, [DocumentAuth.PASSWORD]: { key: DocumentAuth.PASSWORD, - value: 'Require password', + value: msg`Require password`, }, [DocumentAuth.EXPLICIT_NONE]: { key: DocumentAuth.EXPLICIT_NONE, - value: 'None (Overrides global settings)', + value: msg`None (Overrides global settings)`, }, } satisfies Record; diff --git a/packages/ui/components/document/document-global-auth-access-select.tsx b/packages/ui/components/document/document-global-auth-access-select.tsx index 227f31d04..ed4cbce6f 100644 --- a/packages/ui/components/document/document-global-auth-access-select.tsx +++ b/packages/ui/components/document/document-global-auth-access-select.tsx @@ -35,7 +35,7 @@ export const DocumentGlobalAuthAccessSelect = ({ }, ...Object.values(DocumentAccessAuth).map((authType) => ({ value: authType, - label: DOCUMENT_AUTH_TYPES[authType].value, + label: _(DOCUMENT_AUTH_TYPES[authType].value), })), ]; diff --git a/packages/ui/components/document/document-global-auth-action-select.tsx b/packages/ui/components/document/document-global-auth-action-select.tsx index 35ab93dc8..71db18219 100644 --- a/packages/ui/components/document/document-global-auth-action-select.tsx +++ b/packages/ui/components/document/document-global-auth-action-select.tsx @@ -35,7 +35,7 @@ export const DocumentGlobalAuthActionSelect = ({ .filter((auth) => auth !== DocumentAuth.ACCOUNT) .map((authType) => ({ value: authType, - label: DOCUMENT_AUTH_TYPES[authType].value, + label: _(DOCUMENT_AUTH_TYPES[authType].value), })), ]; diff --git a/packages/ui/components/recipient/recipient-action-auth-select.tsx b/packages/ui/components/recipient/recipient-action-auth-select.tsx index d49f5b158..678b794e1 100644 --- a/packages/ui/components/recipient/recipient-action-auth-select.tsx +++ b/packages/ui/components/recipient/recipient-action-auth-select.tsx @@ -39,7 +39,7 @@ export const RecipientActionAuthSelect = ({ .filter((auth) => auth !== RecipientActionAuth.ACCOUNT) .map((authType) => ({ value: authType, - label: DOCUMENT_AUTH_TYPES[authType].value, + label: _(DOCUMENT_AUTH_TYPES[authType].value), })), ]; From 912530ca171cd3745035208081b4894c3d65169b Mon Sep 17 00:00:00 2001 From: Konrad <11725227+mKoonrad@users.noreply.github.com> Date: Mon, 12 Jan 2026 00:17:03 +0100 Subject: [PATCH 04/15] fix: mark document visibility options for translation (#2330) --- .../envelope-editor-settings-dialog.tsx | 4 +++- packages/lib/constants/document-visibility.ts | 11 +++++++---- .../document/document-visibility-select.tsx | 12 +++++++----- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/apps/remix/app/components/general/envelope-editor/envelope-editor-settings-dialog.tsx b/apps/remix/app/components/general/envelope-editor/envelope-editor-settings-dialog.tsx index 475dc5b62..5c946f22c 100644 --- a/apps/remix/app/components/general/envelope-editor/envelope-editor-settings-dialog.tsx +++ b/apps/remix/app/components/general/envelope-editor/envelope-editor-settings-dialog.tsx @@ -341,7 +341,9 @@ export const EnvelopeEditorSettingsDialog = ({ {/* Sidebar. */}
- Document Settings + + Document Settings +