feat(web): in-canvas zoom & pan for the object eraser and split tools (#320)

* feat(web): add pure zoom/pan math module with unit tests

* feat(i18n): add a11y.pan key across all locales (English, matching adjacent zoom labels)

* feat(web): add useZoomPan hook (state + gestures over pure math)

* feat(web): add ZoomToolbar component

* feat(web): zoom & pan in the object eraser canvas

* feat(web): zoom & pan in the split tool preview

* fix(web): synchronous pan-mode refs so drag-pan is race-free under fast input

* test(e2e): zoom & pan acceptance (split always-on, eraser bundle-gated)
This commit is contained in:
SnapOtter
2026-06-22 20:50:28 +08:00
committed by GitHub
parent 313d4ae04e
commit 95d100c20b
28 changed files with 907 additions and 56 deletions
+1
View File
@@ -3398,6 +3398,7 @@ export const ar: TranslationKeys = {
zoomOut: "تصغير",
fitToView: "ملاءمة العرض",
actualSize: "الحجم الفعلي",
pan: "تحريك",
previousImage: "الملف السابق",
nextImage: "الملف التالي",
imageArea: "منطقة المعاينة",
+1
View File
@@ -3440,6 +3440,7 @@ export const de: TranslationKeys = {
zoomOut: "Verkleinern",
fitToView: "Einpassen",
actualSize: "Originalgröße",
pan: "Verschieben",
previousImage: "Vorherige Datei",
nextImage: "Nächste Datei",
imageArea: "Vorschaubereich",
+1
View File
@@ -3368,6 +3368,7 @@ export const en = {
zoomOut: "Zoom out",
fitToView: "Fit to view",
actualSize: "Actual size",
pan: "Pan",
previousImage: "Previous file",
nextImage: "Next file",
imageArea: "Preview area",
+1
View File
@@ -3422,6 +3422,7 @@ export const es: TranslationKeys = {
zoomOut: "Alejar",
fitToView: "Ajustar a la vista",
actualSize: "Tamaño real",
pan: "Desplazar",
previousImage: "Archivo anterior",
nextImage: "Siguiente archivo",
imageArea: "Área de vista previa",
+1
View File
@@ -3446,6 +3446,7 @@ export const fr: TranslationKeys = {
zoomOut: "Zoom arrière",
fitToView: "Ajuster à la vue",
actualSize: "Taille réelle",
pan: "Déplacer",
previousImage: "Fichier précédent",
nextImage: "Fichier suivant",
imageArea: "Zone d'aperçu",
+1
View File
@@ -3393,6 +3393,7 @@ export const hi: TranslationKeys = {
zoomOut: "ज़ूम आउट",
fitToView: "दृश्य में फ़िट करें",
actualSize: "वास्तविक आकार",
pan: "पैन करें",
previousImage: "पिछली फ़ाइल",
nextImage: "अगली फ़ाइल",
imageArea: "पूर्वावलोकन क्षेत्र",
+1
View File
@@ -3421,6 +3421,7 @@ export const id: TranslationKeys = {
zoomOut: "Perkecil",
fitToView: "Sesuaikan tampilan",
actualSize: "Ukuran asli",
pan: "Geser",
previousImage: "Previous image",
nextImage: "Next image",
imageArea: "Image area",
+1
View File
@@ -3435,6 +3435,7 @@ export const it: TranslationKeys = {
zoomOut: "Riduci",
fitToView: "Adatta alla vista",
actualSize: "Dimensione reale",
pan: "Sposta",
previousImage: "Immagine precedente",
nextImage: "Immagine successiva",
imageArea: "Area immagine",
+1
View File
@@ -3373,6 +3373,7 @@ export const ja: TranslationKeys = {
zoomOut: "縮小",
fitToView: "画面に合わせる",
actualSize: "実寸表示",
pan: "移動",
previousImage: "Previous image",
nextImage: "Next image",
imageArea: "Image area",
+1
View File
@@ -3355,6 +3355,7 @@ export const ko: TranslationKeys = {
zoomOut: "축소",
fitToView: "화면에 맞추기",
actualSize: "실제 크기",
pan: "이동",
previousImage: "Previous image",
nextImage: "Next image",
imageArea: "Image area",
+1
View File
@@ -3429,6 +3429,7 @@ export const nl: TranslationKeys = {
zoomOut: "Uitzoomen",
fitToView: "Passend in beeld",
actualSize: "Werkelijke grootte",
pan: "Verschuiven",
previousImage: "Previous image",
nextImage: "Next image",
imageArea: "Image area",
+1
View File
@@ -3437,6 +3437,7 @@ export const pl: TranslationKeys = {
zoomOut: "Pomniejsz",
fitToView: "Dopasuj do widoku",
actualSize: "Rzeczywisty rozmiar",
pan: "Przesuń",
previousImage: "Poprzedni plik",
nextImage: "Następny plik",
imageArea: "Obszar podglądu",
+1
View File
@@ -3429,6 +3429,7 @@ export const ptBR: TranslationKeys = {
zoomOut: "Diminuir zoom",
fitToView: "Ajustar à tela",
actualSize: "Tamanho real",
pan: "Mover",
previousImage: "Arquivo anterior",
nextImage: "Próximo arquivo",
imageArea: "Área de visualização",
+1
View File
@@ -3424,6 +3424,7 @@ export const ru: TranslationKeys = {
zoomOut: "Уменьшить",
fitToView: "Вписать в окно",
actualSize: "Реальный размер",
pan: "Перемещение",
previousImage: "Предыдущий файл",
nextImage: "Следующий файл",
imageArea: "Область предпросмотра",
+1
View File
@@ -3416,6 +3416,7 @@ export const sv: TranslationKeys = {
zoomOut: "Zooma ut",
fitToView: "Anpassa till vy",
actualSize: "Verklig storlek",
pan: "Panorera",
previousImage: "Föregående fil",
nextImage: "Nästa fil",
imageArea: "Förhandsvisningsområde",
+1
View File
@@ -3379,6 +3379,7 @@ export const th: TranslationKeys = {
zoomOut: "ซูมออก",
fitToView: "พอดีกับหน้าจอ",
actualSize: "ขนาดจริง",
pan: "เลื่อน",
previousImage: "ไฟล์ก่อนหน้า",
nextImage: "ไฟล์ถัดไป",
imageArea: "พื้นที่แสดงตัวอย่าง",
+1
View File
@@ -3431,6 +3431,7 @@ export const tr: TranslationKeys = {
zoomOut: "Uzaklaştır",
fitToView: "Görünüme sığdır",
actualSize: "Gerçek boyut",
pan: "Kaydır",
previousImage: "Önceki dosya",
nextImage: "Sonraki dosya",
imageArea: "Önizleme alanı",
+1
View File
@@ -3426,6 +3426,7 @@ export const uk: TranslationKeys = {
zoomOut: "Зменшити",
fitToView: "Вписати у вікно",
actualSize: "Справжній розмір",
pan: "Переміщення",
previousImage: "Попередній файл",
nextImage: "Наступний файл",
imageArea: "Область попереднього перегляду",
+1
View File
@@ -3417,6 +3417,7 @@ export const vi: TranslationKeys = {
zoomOut: "Thu nhỏ",
fitToView: "Vừa khung nhìn",
actualSize: "Kích thước thực",
pan: "Di chuyển",
previousImage: "Tệp trước",
nextImage: "Tệp tiếp theo",
imageArea: "Vùng xem trước",
+1
View File
@@ -3328,6 +3328,7 @@ export const zhCN: TranslationKeys = {
zoomOut: "缩小",
fitToView: "适应视图",
actualSize: "实际大小",
pan: "平移",
previousImage: "上一个文件",
nextImage: "下一个文件",
imageArea: "预览区域",
+1
View File
@@ -3328,6 +3328,7 @@ export const zhTW: TranslationKeys = {
zoomOut: "縮小",
fitToView: "符合檢視大小",
actualSize: "實際大小",
pan: "平移",
previousImage: "上一個檔案",
nextImage: "下一個檔案",
imageArea: "預覽區域",