diff --git a/frontend/editor/public/locales/ar-AR/translation.toml b/frontend/editor/public/locales/ar-AR/translation.toml
index 4c4d45e2b4..4180d77811 100644
--- a/frontend/editor/public/locales/ar-AR/translation.toml
+++ b/frontend/editor/public/locales/ar-AR/translation.toml
@@ -3526,7 +3526,6 @@ label = "إحداثي Y"
[crop.error]
failed = "فشل قصّ PDF"
-invalidArea = "منطقة القص تتجاوز حدود PDF"
[crop.preview]
title = "معاينة منطقة القص"
diff --git a/frontend/editor/public/locales/az-AZ/translation.toml b/frontend/editor/public/locales/az-AZ/translation.toml
index f73930133e..0033be05d5 100644
--- a/frontend/editor/public/locales/az-AZ/translation.toml
+++ b/frontend/editor/public/locales/az-AZ/translation.toml
@@ -3526,7 +3526,6 @@ label = "Y mövqeyi"
[crop.error]
failed = "PDF-i kəsmək alınmadı"
-invalidArea = "Kəsmə sahəsi PDF sərhədlərini aşır"
[crop.preview]
title = "Kəsmə sahəsinin seçimi"
diff --git a/frontend/editor/public/locales/bg-BG/translation.toml b/frontend/editor/public/locales/bg-BG/translation.toml
index dc6ef92e39..07cf5a73d3 100644
--- a/frontend/editor/public/locales/bg-BG/translation.toml
+++ b/frontend/editor/public/locales/bg-BG/translation.toml
@@ -3526,7 +3526,6 @@ label = "Y позиция"
[crop.error]
failed = "Неуспешно изрязване на PDF"
-invalidArea = "Областта за изрязване излиза извън границите на PDF"
[crop.preview]
title = "Избор на област за изрязване"
diff --git a/frontend/editor/public/locales/bo-CN/translation.toml b/frontend/editor/public/locales/bo-CN/translation.toml
index 86d0b4f10d..21193f5f2d 100644
--- a/frontend/editor/public/locales/bo-CN/translation.toml
+++ b/frontend/editor/public/locales/bo-CN/translation.toml
@@ -3526,7 +3526,6 @@ label = "Yཡི་གནས་བབ།"
[crop.error]
failed = "སོན་བཟང་མ་འདང་བ། PDF"
-invalidArea = "སོན་འདེབས་རྒྱ་ཁྱོན་དེ་PDFམཚམས་ཐིག་ལས་བརྒལ་ཡོད།"
[crop.preview]
title = "སོན་བཟང་ཁུལ་འདེམས་པ།"
diff --git a/frontend/editor/public/locales/ca-CA/translation.toml b/frontend/editor/public/locales/ca-CA/translation.toml
index 498da94436..c22244ac98 100644
--- a/frontend/editor/public/locales/ca-CA/translation.toml
+++ b/frontend/editor/public/locales/ca-CA/translation.toml
@@ -3526,7 +3526,6 @@ label = "Posició Y"
[crop.error]
failed = "No s'ha pogut retallar el PDF"
-invalidArea = "L'àrea de retall s'estén més enllà dels límits del PDF"
[crop.preview]
title = "Selecció de l'àrea de retall"
diff --git a/frontend/editor/public/locales/cs-CZ/translation.toml b/frontend/editor/public/locales/cs-CZ/translation.toml
index 7b234329c7..f2161674f4 100644
--- a/frontend/editor/public/locales/cs-CZ/translation.toml
+++ b/frontend/editor/public/locales/cs-CZ/translation.toml
@@ -3526,7 +3526,6 @@ label = "Pozice Y"
[crop.error]
failed = "Oříznutí PDF se nezdařilo"
-invalidArea = "Oblast ořezu přesahuje hranice PDF"
[crop.preview]
title = "Výběr oblasti ořezu"
diff --git a/frontend/editor/public/locales/da-DK/translation.toml b/frontend/editor/public/locales/da-DK/translation.toml
index f4c068da92..a0ddd7f4d9 100644
--- a/frontend/editor/public/locales/da-DK/translation.toml
+++ b/frontend/editor/public/locales/da-DK/translation.toml
@@ -3526,7 +3526,6 @@ label = "Y-position"
[crop.error]
failed = "Kunne ikke beskære PDF"
-invalidArea = "Beskæringsområdet strækker sig ud over PDF'ens grænser"
[crop.preview]
title = "Valg af beskæringsområde"
diff --git a/frontend/editor/public/locales/de-DE/translation.toml b/frontend/editor/public/locales/de-DE/translation.toml
index 7c1bc79a8c..81c88d7599 100644
--- a/frontend/editor/public/locales/de-DE/translation.toml
+++ b/frontend/editor/public/locales/de-DE/translation.toml
@@ -3526,7 +3526,6 @@ label = "Y-Position"
[crop.error]
failed = "PDF zuschneiden fehlgeschlagen"
-invalidArea = "Zuschneidebereich überschreitet die PDF-Grenzen"
[crop.preview]
title = "Zuschneidebereich-Auswahl"
diff --git a/frontend/editor/public/locales/el-GR/translation.toml b/frontend/editor/public/locales/el-GR/translation.toml
index 5269791aec..57ebd2eb6b 100644
--- a/frontend/editor/public/locales/el-GR/translation.toml
+++ b/frontend/editor/public/locales/el-GR/translation.toml
@@ -3526,7 +3526,6 @@ label = "Θέση Y"
[crop.error]
failed = "Αποτυχία περικοπής του PDF"
-invalidArea = "Η περιοχή περικοπής εκτείνεται πέρα από τα όρια του PDF"
[crop.preview]
title = "Επιλογή περιοχής περικοπής"
diff --git a/frontend/editor/public/locales/en-GB/translation.toml b/frontend/editor/public/locales/en-GB/translation.toml
index 8fdd452928..d2b2aa38e3 100644
--- a/frontend/editor/public/locales/en-GB/translation.toml
+++ b/frontend/editor/public/locales/en-GB/translation.toml
@@ -3526,7 +3526,6 @@ label = "Y Position"
[crop.error]
failed = "Failed to crop PDF"
-invalidArea = "Crop area extends beyond PDF boundaries"
[crop.preview]
title = "Crop Area Selection"
diff --git a/frontend/editor/public/locales/en-US/translation.toml b/frontend/editor/public/locales/en-US/translation.toml
index 378157818c..baee16cd02 100644
--- a/frontend/editor/public/locales/en-US/translation.toml
+++ b/frontend/editor/public/locales/en-US/translation.toml
@@ -3846,7 +3846,6 @@ label = "Y Position"
[crop.error]
failed = "Failed to crop PDF"
-invalidArea = "Crop area extends beyond PDF boundaries"
[crop.preview]
title = "Crop Area Selection"
diff --git a/frontend/editor/public/locales/es-ES/translation.toml b/frontend/editor/public/locales/es-ES/translation.toml
index 73aeb53429..5fffd6eae8 100644
--- a/frontend/editor/public/locales/es-ES/translation.toml
+++ b/frontend/editor/public/locales/es-ES/translation.toml
@@ -3526,7 +3526,6 @@ label = "Posición Y"
[crop.error]
failed = "Error al recortar PDF"
-invalidArea = "El área de recorte se extiende más allá de los límites del PDF"
[crop.preview]
title = "Selección de Área de Recorte"
diff --git a/frontend/editor/public/locales/eu-ES/translation.toml b/frontend/editor/public/locales/eu-ES/translation.toml
index b5a2388e67..018bfbabc5 100644
--- a/frontend/editor/public/locales/eu-ES/translation.toml
+++ b/frontend/editor/public/locales/eu-ES/translation.toml
@@ -3526,7 +3526,6 @@ label = "Y posizioa"
[crop.error]
failed = "Huts egin du PDFa mozteak"
-invalidArea = "Mozketa-area PDFaren mugak baino harago doa"
[crop.preview]
title = "Mozketa-arearen hautapena"
diff --git a/frontend/editor/public/locales/fa-IR/translation.toml b/frontend/editor/public/locales/fa-IR/translation.toml
index 14a40c4694..000d039dfa 100644
--- a/frontend/editor/public/locales/fa-IR/translation.toml
+++ b/frontend/editor/public/locales/fa-IR/translation.toml
@@ -3526,7 +3526,6 @@ label = "موقعیت Y"
[crop.error]
failed = "برش PDF ناموفق بود"
-invalidArea = "ناحیه برش از مرزهای PDF فراتر رفته است"
[crop.preview]
title = "انتخاب ناحیه برش"
diff --git a/frontend/editor/public/locales/fr-FR/translation.toml b/frontend/editor/public/locales/fr-FR/translation.toml
index 5550076052..e7d8a2a9ab 100644
--- a/frontend/editor/public/locales/fr-FR/translation.toml
+++ b/frontend/editor/public/locales/fr-FR/translation.toml
@@ -3526,7 +3526,6 @@ label = "Position Y"
[crop.error]
failed = "Échec du recadrage du PDF"
-invalidArea = "La zone de recadrage dépasse les limites du PDF"
[crop.preview]
title = "Sélection de la zone de recadrage"
diff --git a/frontend/editor/public/locales/ga-IE/translation.toml b/frontend/editor/public/locales/ga-IE/translation.toml
index 4d3ad56168..1507ae92df 100644
--- a/frontend/editor/public/locales/ga-IE/translation.toml
+++ b/frontend/editor/public/locales/ga-IE/translation.toml
@@ -3526,7 +3526,6 @@ label = "Suíomh Y"
[crop.error]
failed = "Theip ar an PDF a bhearradh"
-invalidArea = "Téann an limistéar bearrtha thar theorainneacha an PDF"
[crop.preview]
title = "Roghnú Limistéir Bhearrtha"
diff --git a/frontend/editor/public/locales/hi-IN/translation.toml b/frontend/editor/public/locales/hi-IN/translation.toml
index ae5993b387..bd769216a8 100644
--- a/frontend/editor/public/locales/hi-IN/translation.toml
+++ b/frontend/editor/public/locales/hi-IN/translation.toml
@@ -3526,7 +3526,6 @@ label = "Y स्थान"
[crop.error]
failed = "PDF क्रॉप करने में विफल"
-invalidArea = "क्रॉप क्षेत्र PDF सीमाओं से बाहर जा रहा है"
[crop.preview]
title = "क्रॉप क्षेत्र चयन"
diff --git a/frontend/editor/public/locales/hr-HR/translation.toml b/frontend/editor/public/locales/hr-HR/translation.toml
index 587933825b..371c1b782c 100644
--- a/frontend/editor/public/locales/hr-HR/translation.toml
+++ b/frontend/editor/public/locales/hr-HR/translation.toml
@@ -3526,7 +3526,6 @@ label = "Y položaj"
[crop.error]
failed = "Izrezivanje PDF-a nije uspjelo"
-invalidArea = "Područje izrezivanja prelazi granice PDF-a"
[crop.preview]
title = "Odabir područja izrezivanja"
diff --git a/frontend/editor/public/locales/hu-HU/translation.toml b/frontend/editor/public/locales/hu-HU/translation.toml
index 98d393c047..c8fb681564 100644
--- a/frontend/editor/public/locales/hu-HU/translation.toml
+++ b/frontend/editor/public/locales/hu-HU/translation.toml
@@ -3526,7 +3526,6 @@ label = "Y pozíció"
[crop.error]
failed = "A PDF vágása sikertelen"
-invalidArea = "A vágási terület túlnyúlik a PDF határain"
[crop.preview]
title = "Vágási terület kiválasztása"
diff --git a/frontend/editor/public/locales/id-ID/translation.toml b/frontend/editor/public/locales/id-ID/translation.toml
index 15fe756aa6..83751f1dce 100644
--- a/frontend/editor/public/locales/id-ID/translation.toml
+++ b/frontend/editor/public/locales/id-ID/translation.toml
@@ -3526,7 +3526,6 @@ label = "Posisi Y"
[crop.error]
failed = "Gagal memangkas PDF"
-invalidArea = "Area pangkas melampaui batas PDF"
[crop.preview]
title = "Pilihan Area Pangkas"
diff --git a/frontend/editor/public/locales/it-IT/translation.toml b/frontend/editor/public/locales/it-IT/translation.toml
index a99f00a343..592f644216 100644
--- a/frontend/editor/public/locales/it-IT/translation.toml
+++ b/frontend/editor/public/locales/it-IT/translation.toml
@@ -3526,7 +3526,6 @@ label = "Posizione Y"
[crop.error]
failed = "Impossibile ritagliare il PDF"
-invalidArea = "L’area di ritaglio supera i limiti del PDF"
[crop.preview]
title = "Selezione area di ritaglio"
diff --git a/frontend/editor/public/locales/ja-JP/translation.toml b/frontend/editor/public/locales/ja-JP/translation.toml
index dcc5735dbd..a8d6730ba4 100644
--- a/frontend/editor/public/locales/ja-JP/translation.toml
+++ b/frontend/editor/public/locales/ja-JP/translation.toml
@@ -3526,7 +3526,6 @@ label = "Y 位置"
[crop.error]
failed = "PDF の切り抜きに失敗しました"
-invalidArea = "切り抜き範囲が PDF の境界を超えています"
[crop.preview]
title = "切り抜き範囲の選択"
diff --git a/frontend/editor/public/locales/ko-KR/translation.toml b/frontend/editor/public/locales/ko-KR/translation.toml
index 833f710c7f..33ca27a071 100644
--- a/frontend/editor/public/locales/ko-KR/translation.toml
+++ b/frontend/editor/public/locales/ko-KR/translation.toml
@@ -3526,7 +3526,6 @@ label = "Y 위치"
[crop.error]
failed = "PDF 자르기에 실패했습니다"
-invalidArea = "자르기 영역이 PDF 경계를 벗어났습니다"
[crop.preview]
title = "자르기 영역 선택"
diff --git a/frontend/editor/public/locales/ml-ML/translation.toml b/frontend/editor/public/locales/ml-ML/translation.toml
index 53e8ef302f..10235abe24 100644
--- a/frontend/editor/public/locales/ml-ML/translation.toml
+++ b/frontend/editor/public/locales/ml-ML/translation.toml
@@ -3526,7 +3526,6 @@ label = "Y സ്ഥാനം"
[crop.error]
failed = "PDF ക്രോപ്പ് ചെയ്യാൻ കഴിഞ്ഞില്ല"
-invalidArea = "ക്രോപ്പ് ഏരിയ PDF അതിരുകൾക്ക് പുറത്തേക്ക് നീളുന്നു"
[crop.preview]
title = "ക്രോപ്പ് ഏരിയ തിരഞ്ഞെടുപ്പ്"
diff --git a/frontend/editor/public/locales/nl-NL/translation.toml b/frontend/editor/public/locales/nl-NL/translation.toml
index d4ada20e32..e5841842f2 100644
--- a/frontend/editor/public/locales/nl-NL/translation.toml
+++ b/frontend/editor/public/locales/nl-NL/translation.toml
@@ -3526,7 +3526,6 @@ label = "Y-positie"
[crop.error]
failed = "PDF bijsnijden mislukt"
-invalidArea = "Bijsnijgebied valt buiten PDF-randen"
[crop.preview]
title = "Selectie bijsnijgebied"
diff --git a/frontend/editor/public/locales/no-NB/translation.toml b/frontend/editor/public/locales/no-NB/translation.toml
index 9402f04f22..1dd1167219 100644
--- a/frontend/editor/public/locales/no-NB/translation.toml
+++ b/frontend/editor/public/locales/no-NB/translation.toml
@@ -3526,7 +3526,6 @@ label = "Y-posisjon"
[crop.error]
failed = "Kunne ikke beskjære PDF"
-invalidArea = "Beskjæringsområdet går utenfor PDF-grensene"
[crop.preview]
title = "Valg av beskjæringsområde"
diff --git a/frontend/editor/public/locales/pl-PL/translation.toml b/frontend/editor/public/locales/pl-PL/translation.toml
index 566a681f9a..c327cf2483 100644
--- a/frontend/editor/public/locales/pl-PL/translation.toml
+++ b/frontend/editor/public/locales/pl-PL/translation.toml
@@ -3526,7 +3526,6 @@ label = "Pozycja Y"
[crop.error]
failed = "Nie udało się przyciąć PDF"
-invalidArea = "Obszar przycięcia wykracza poza granice PDF"
[crop.preview]
title = "Wybór obszaru przycięcia"
diff --git a/frontend/editor/public/locales/pt-BR/translation.toml b/frontend/editor/public/locales/pt-BR/translation.toml
index d89968fdfa..8455176984 100644
--- a/frontend/editor/public/locales/pt-BR/translation.toml
+++ b/frontend/editor/public/locales/pt-BR/translation.toml
@@ -3526,7 +3526,6 @@ label = "Posição Y"
[crop.error]
failed = "Falha ao recortar o PDF"
-invalidArea = "A área de corte se estende além dos limites do PDF"
[crop.preview]
title = "Seleção da área de corte"
diff --git a/frontend/editor/public/locales/pt-PT/translation.toml b/frontend/editor/public/locales/pt-PT/translation.toml
index 0f9aebeff7..0b24388d75 100644
--- a/frontend/editor/public/locales/pt-PT/translation.toml
+++ b/frontend/editor/public/locales/pt-PT/translation.toml
@@ -3526,7 +3526,6 @@ label = "Posição Y"
[crop.error]
failed = "Falha ao recortar o PDF"
-invalidArea = "A área de recorte excede os limites do PDF"
[crop.preview]
title = "Seleção da área de recorte"
diff --git a/frontend/editor/public/locales/ro-RO/translation.toml b/frontend/editor/public/locales/ro-RO/translation.toml
index 0f7c1555b8..2a3f4eba7d 100644
--- a/frontend/editor/public/locales/ro-RO/translation.toml
+++ b/frontend/editor/public/locales/ro-RO/translation.toml
@@ -3526,7 +3526,6 @@ label = "Poziția Y"
[crop.error]
failed = "Nu s-a putut decupa PDF-ul"
-invalidArea = "Zona de decupare depășește limitele PDF-ului"
[crop.preview]
title = "Selecție zonă de decupare"
diff --git a/frontend/editor/public/locales/ru-RU/translation.toml b/frontend/editor/public/locales/ru-RU/translation.toml
index eae673f896..7d32f58a6f 100644
--- a/frontend/editor/public/locales/ru-RU/translation.toml
+++ b/frontend/editor/public/locales/ru-RU/translation.toml
@@ -3526,7 +3526,6 @@ label = "Положение Y"
[crop.error]
failed = "Не удалось обрезать PDF"
-invalidArea = "Область обрезки выходит за границы PDF"
[crop.preview]
title = "Выбор области обрезки"
diff --git a/frontend/editor/public/locales/sk-SK/translation.toml b/frontend/editor/public/locales/sk-SK/translation.toml
index 1906d101d0..9383f6a866 100644
--- a/frontend/editor/public/locales/sk-SK/translation.toml
+++ b/frontend/editor/public/locales/sk-SK/translation.toml
@@ -3526,7 +3526,6 @@ label = "Pozícia Y"
[crop.error]
failed = "Nepodarilo sa orezať PDF"
-invalidArea = "Oblasť orezania presahuje hranice PDF"
[crop.preview]
title = "Výber oblasti orezania"
diff --git a/frontend/editor/public/locales/sl-SI/translation.toml b/frontend/editor/public/locales/sl-SI/translation.toml
index 120606f790..c6c9cdbd54 100644
--- a/frontend/editor/public/locales/sl-SI/translation.toml
+++ b/frontend/editor/public/locales/sl-SI/translation.toml
@@ -3526,7 +3526,6 @@ label = "Položaj Y"
[crop.error]
failed = "Obrezovanje PDF-ja ni uspelo"
-invalidArea = "Območje obrezovanja presega meje PDF-ja"
[crop.preview]
title = "Izbira območja obrezovanja"
diff --git a/frontend/editor/public/locales/sr-LATN-RS/translation.toml b/frontend/editor/public/locales/sr-LATN-RS/translation.toml
index 2e4cb53c7b..c639e19155 100644
--- a/frontend/editor/public/locales/sr-LATN-RS/translation.toml
+++ b/frontend/editor/public/locales/sr-LATN-RS/translation.toml
@@ -3526,7 +3526,6 @@ label = "Y pozicija"
[crop.error]
failed = "Nije uspelo isecanje PDF-a"
-invalidArea = "Oblast isečka prelazi granice PDF-a"
[crop.preview]
title = "Izbor oblasti za isecanje"
diff --git a/frontend/editor/public/locales/sv-SE/translation.toml b/frontend/editor/public/locales/sv-SE/translation.toml
index bd61dbedff..ba2b56e5e0 100644
--- a/frontend/editor/public/locales/sv-SE/translation.toml
+++ b/frontend/editor/public/locales/sv-SE/translation.toml
@@ -3526,7 +3526,6 @@ label = "Y-position"
[crop.error]
failed = "Det gick inte att beskära PDF"
-invalidArea = "Beskärningsområdet sträcker sig utanför PDF:ens gränser"
[crop.preview]
title = "Val av beskärningsområde"
diff --git a/frontend/editor/public/locales/th-TH/translation.toml b/frontend/editor/public/locales/th-TH/translation.toml
index 6b1c927d9f..6a294505f1 100644
--- a/frontend/editor/public/locales/th-TH/translation.toml
+++ b/frontend/editor/public/locales/th-TH/translation.toml
@@ -3526,7 +3526,6 @@ label = "ตำแหน่ง Y"
[crop.error]
failed = "ครอบตัด PDF ไม่สำเร็จ"
-invalidArea = "พื้นที่ครอบตัดเกินขอบเขตของ PDF"
[crop.preview]
title = "การเลือกพื้นที่ครอบตัด"
diff --git a/frontend/editor/public/locales/tr-TR/translation.toml b/frontend/editor/public/locales/tr-TR/translation.toml
index 6ac3a86d07..ae580843e5 100644
--- a/frontend/editor/public/locales/tr-TR/translation.toml
+++ b/frontend/editor/public/locales/tr-TR/translation.toml
@@ -3526,7 +3526,6 @@ label = "Y Konumu"
[crop.error]
failed = "PDF kırpılamadı"
-invalidArea = "Kırpma alanı PDF sınırlarının dışına taşıyor"
[crop.preview]
title = "Kırpma Alanı Seçimi"
diff --git a/frontend/editor/public/locales/uk-UA/translation.toml b/frontend/editor/public/locales/uk-UA/translation.toml
index d51189230b..2f9e2daeef 100644
--- a/frontend/editor/public/locales/uk-UA/translation.toml
+++ b/frontend/editor/public/locales/uk-UA/translation.toml
@@ -3526,7 +3526,6 @@ label = "Позиція Y"
[crop.error]
failed = "Не вдалося обрізати PDF"
-invalidArea = "Область обрізки виходить за межі PDF"
[crop.preview]
title = "Вибір області обрізки"
diff --git a/frontend/editor/public/locales/vi-VN/translation.toml b/frontend/editor/public/locales/vi-VN/translation.toml
index a574d29833..566568dade 100644
--- a/frontend/editor/public/locales/vi-VN/translation.toml
+++ b/frontend/editor/public/locales/vi-VN/translation.toml
@@ -3526,7 +3526,6 @@ label = "Vị trí Y"
[crop.error]
failed = "Không cắt được PDF"
-invalidArea = "Vùng cắt vượt quá ranh giới PDF"
[crop.preview]
title = "Chọn vùng cắt"
diff --git a/frontend/editor/public/locales/zh-BO/translation.toml b/frontend/editor/public/locales/zh-BO/translation.toml
index 895fbc5c82..7a64d7453e 100644
--- a/frontend/editor/public/locales/zh-BO/translation.toml
+++ b/frontend/editor/public/locales/zh-BO/translation.toml
@@ -3526,7 +3526,6 @@ label = "Y 位置"
[crop.error]
failed = "裁剪 PDF 失败"
-invalidArea = "裁剪区域超出 PDF 边界"
[crop.preview]
title = "裁剪区域选择"
diff --git a/frontend/editor/public/locales/zh-CN/translation.toml b/frontend/editor/public/locales/zh-CN/translation.toml
index ccf73691ff..b29e3442d4 100644
--- a/frontend/editor/public/locales/zh-CN/translation.toml
+++ b/frontend/editor/public/locales/zh-CN/translation.toml
@@ -3526,7 +3526,6 @@ label = "Y 位置"
[crop.error]
failed = "裁剪 PDF 失败"
-invalidArea = "裁剪区域超出 PDF 边界"
[crop.preview]
title = "裁剪区域选择"
diff --git a/frontend/editor/public/locales/zh-TW/translation.toml b/frontend/editor/public/locales/zh-TW/translation.toml
index 269d9c9d59..efb8adb8b9 100644
--- a/frontend/editor/public/locales/zh-TW/translation.toml
+++ b/frontend/editor/public/locales/zh-TW/translation.toml
@@ -3526,7 +3526,6 @@ label = "Y 位置"
[crop.error]
failed = "裁切 PDF 失敗"
-invalidArea = "裁切區域超出 PDF 邊界"
[crop.preview]
title = "裁切區域選擇"
diff --git a/frontend/editor/src/core/components/tools/crop/CropSettings.tsx b/frontend/editor/src/core/components/tools/crop/CropSettings.tsx
index 82516059b0..0229613959 100644
--- a/frontend/editor/src/core/components/tools/crop/CropSettings.tsx
+++ b/frontend/editor/src/core/components/tools/crop/CropSettings.tsx
@@ -1,13 +1,5 @@
import { useState, useEffect } from "react";
-import {
- Stack,
- Text,
- Box,
- Group,
- Center,
- Alert,
- Checkbox,
-} from "@mantine/core";
+import { Stack, Text, Box, Group, Center, Checkbox } from "@mantine/core";
import { ActionIcon } from "@app/ui/ActionIcon";
import { useTranslation } from "react-i18next";
import RestartAltIcon from "@mui/icons-material/RestartAlt";
@@ -161,7 +153,6 @@ const CropSettings = ({ parameters, disabled = false }: CropSettingsProps) => {
);
}
- const isCropValid = parameters.isCropAreaValid(pdfBounds);
const isFullCrop = parameters.isFullPDFCrop(pdfBounds);
return (
@@ -239,18 +230,6 @@ const CropSettings = ({ parameters, disabled = false }: CropSettingsProps) => {
showAutomationInfo={false}
/>
)}
-
- {/* Validation Alert - Only show when autoCrop is false */}
- {!parameters.parameters.autoCrop && !isCropValid && (
-
-
- {t(
- "crop.error.invalidArea",
- "Crop area extends beyond PDF boundaries",
- )}
-
-
- )}
);
};
diff --git a/frontend/editor/src/core/hooks/tools/crop/useCropParameters.ts b/frontend/editor/src/core/hooks/tools/crop/useCropParameters.ts
index cc37421cdf..62e7ede14b 100644
--- a/frontend/editor/src/core/hooks/tools/crop/useCropParameters.ts
+++ b/frontend/editor/src/core/hooks/tools/crop/useCropParameters.ts
@@ -8,6 +8,7 @@ import {
Rectangle,
PDFBounds,
constrainCropAreaToPDF,
+ createDefaultCropArea,
createFullPDFCropArea,
roundCropArea,
isRectangle,
@@ -29,6 +30,8 @@ export type CropParametersHook = BaseParametersHook & {
setCropArea: (cropArea: Rectangle, pdfBounds?: PDFBounds) => void;
/** Get current crop area as CropArea object */
getCropArea: () => Rectangle;
+ /** Reset to default inset crop area inside PDF bounds */
+ resetToDefaultCropArea: (pdfBounds: PDFBounds) => void;
/** Reset to full PDF dimensions */
resetToFullPDF: (pdfBounds: PDFBounds) => void;
/** Check if current crop area is valid for the PDF */
@@ -76,6 +79,15 @@ export const useCropParameters = (): CropParametersHook => {
[baseHook],
);
+ // Reset to default crop area inside PDF bounds (10% inset)
+ const resetToDefaultCropArea = useCallback(
+ (pdfBounds: PDFBounds) => {
+ const defaultCropArea = createDefaultCropArea(pdfBounds);
+ setCropArea(defaultCropArea);
+ },
+ [setCropArea],
+ );
+
// Reset to cover entire PDF
const resetToFullPDF = useCallback(
(pdfBounds: PDFBounds) => {
@@ -85,31 +97,11 @@ export const useCropParameters = (): CropParametersHook => {
[setCropArea],
);
- // Check if current crop area is valid for the given PDF bounds
+ // Check if current crop area is valid (dimensions must be non-zero; out-of-bounds coordinates clamp automatically)
const isCropAreaValid = useCallback(
- (pdfBounds?: PDFBounds): boolean => {
+ (_pdfBounds?: PDFBounds): boolean => {
const cropArea = getCropArea();
-
- // Basic validation
- if (
- cropArea.x < 0 ||
- cropArea.y < 0 ||
- cropArea.width <= 0 ||
- cropArea.height <= 0
- ) {
- return false;
- }
-
- // PDF bounds validation if provided
- if (pdfBounds) {
- const tolerance = 0.01; // Small tolerance for floating point precision
- return (
- cropArea.x + cropArea.width <= pdfBounds.actualWidth + tolerance &&
- cropArea.y + cropArea.height <= pdfBounds.actualHeight + tolerance
- );
- }
-
- return true;
+ return cropArea.width > 0 && cropArea.height > 0;
},
[getCropArea],
);
@@ -174,6 +166,7 @@ export const useCropParameters = (): CropParametersHook => {
validateParameters: () => validateParameters(),
setCropArea,
getCropArea,
+ resetToDefaultCropArea,
resetToFullPDF,
isCropAreaValid,
isFullPDFCrop,
diff --git a/frontend/editor/src/core/utils/cropCoordinates.ts b/frontend/editor/src/core/utils/cropCoordinates.ts
index 5a275c85ea..4b3bf1c600 100644
--- a/frontend/editor/src/core/utils/cropCoordinates.ts
+++ b/frontend/editor/src/core/utils/cropCoordinates.ts
@@ -204,7 +204,21 @@ export const isPointInThumbnail = (
};
/**
- * Create a default crop area that covers the entire PDF
+ * Create a default crop area inside PDF bounds (10% inset from each edge, centered)
+ */
+export const createDefaultCropArea = (pdfBounds: PDFBounds): Rectangle => {
+ const insetX = pdfBounds.actualWidth * 0.1;
+ const insetY = pdfBounds.actualHeight * 0.1;
+ return {
+ x: Math.round(insetX * 10) / 10,
+ y: Math.round(insetY * 10) / 10,
+ width: Math.round((pdfBounds.actualWidth - insetX * 2) * 10) / 10,
+ height: Math.round((pdfBounds.actualHeight - insetY * 2) * 10) / 10,
+ };
+};
+
+/**
+ * Create a crop area that covers the entire PDF
*/
export const createFullPDFCropArea = (pdfBounds: PDFBounds): Rectangle => {
return {