@bylqwjc/media-editor-server 1.0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +36 -0
  3. package/dist/adapters/express.cjs +1 -0
  4. package/dist/adapters/express.d.ts +30 -0
  5. package/dist/adapters/express.js +1 -0
  6. package/dist/adapters/web.cjs +1 -0
  7. package/dist/adapters/web.d.ts +15 -0
  8. package/dist/adapters/web.js +1 -0
  9. package/dist/handler-DL4Inp7o.d.ts +47 -0
  10. package/dist/index.cjs +4 -0
  11. package/dist/index.d.ts +59 -0
  12. package/dist/index.js +4 -0
  13. package/node_modules/@media-editor/core/LICENSE +21 -0
  14. package/node_modules/@media-editor/core/README.md +14 -0
  15. package/node_modules/@media-editor/core/dist/browser.cjs +1 -0
  16. package/node_modules/@media-editor/core/dist/browser.d.ts +100 -0
  17. package/node_modules/@media-editor/core/dist/browser.js +3 -0
  18. package/node_modules/@media-editor/core/dist/chunk-MGKYVYOH.js +1 -0
  19. package/node_modules/@media-editor/core/dist/chunk-USY6UDGL.js +1 -0
  20. package/node_modules/@media-editor/core/dist/chunk-XCBM7P7N.js +1 -0
  21. package/node_modules/@media-editor/core/dist/engine.cjs +1 -0
  22. package/node_modules/@media-editor/core/dist/engine.d.ts +359 -0
  23. package/node_modules/@media-editor/core/dist/engine.js +1 -0
  24. package/node_modules/@media-editor/core/dist/filerobot.cjs +1 -0
  25. package/node_modules/@media-editor/core/dist/filerobot.d.ts +88 -0
  26. package/node_modules/@media-editor/core/dist/filerobot.js +1 -0
  27. package/node_modules/@media-editor/core/dist/index.cjs +1 -0
  28. package/node_modules/@media-editor/core/dist/index.d.ts +264 -0
  29. package/node_modules/@media-editor/core/dist/index.js +1 -0
  30. package/node_modules/@media-editor/core/dist/platform-presets-B-o4C6uY.d.ts +80 -0
  31. package/node_modules/@media-editor/core/dist/state-B85vkf7_.d.ts +1027 -0
  32. package/node_modules/@media-editor/core/node_modules/zod/LICENSE +21 -0
  33. package/node_modules/@media-editor/core/node_modules/zod/README.md +208 -0
  34. package/node_modules/@media-editor/core/node_modules/zod/index.cjs +1 -0
  35. package/node_modules/@media-editor/core/node_modules/zod/index.d.cts +4 -0
  36. package/node_modules/@media-editor/core/node_modules/zod/index.js +1 -0
  37. package/node_modules/@media-editor/core/node_modules/zod/package.json +76 -0
  38. package/node_modules/@media-editor/core/node_modules/zod/v3/ZodError.cjs +1 -0
  39. package/node_modules/@media-editor/core/node_modules/zod/v3/ZodError.d.cts +164 -0
  40. package/node_modules/@media-editor/core/node_modules/zod/v3/ZodError.js +1 -0
  41. package/node_modules/@media-editor/core/node_modules/zod/v3/errors.cjs +1 -0
  42. package/node_modules/@media-editor/core/node_modules/zod/v3/errors.d.cts +5 -0
  43. package/node_modules/@media-editor/core/node_modules/zod/v3/errors.js +1 -0
  44. package/node_modules/@media-editor/core/node_modules/zod/v3/external.cjs +1 -0
  45. package/node_modules/@media-editor/core/node_modules/zod/v3/external.d.cts +6 -0
  46. package/node_modules/@media-editor/core/node_modules/zod/v3/external.js +1 -0
  47. package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/enumUtil.cjs +1 -0
  48. package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/enumUtil.d.cts +8 -0
  49. package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/enumUtil.js +0 -0
  50. package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/errorUtil.cjs +1 -0
  51. package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/errorUtil.d.cts +9 -0
  52. package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/errorUtil.js +1 -0
  53. package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/parseUtil.cjs +1 -0
  54. package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/parseUtil.d.cts +78 -0
  55. package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/parseUtil.js +1 -0
  56. package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/partialUtil.cjs +1 -0
  57. package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/partialUtil.d.cts +8 -0
  58. package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/partialUtil.js +0 -0
  59. package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/typeAliases.cjs +1 -0
  60. package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/typeAliases.d.cts +2 -0
  61. package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/typeAliases.js +0 -0
  62. package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/util.cjs +1 -0
  63. package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/util.d.cts +85 -0
  64. package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/util.js +1 -0
  65. package/node_modules/@media-editor/core/node_modules/zod/v3/index.cjs +1 -0
  66. package/node_modules/@media-editor/core/node_modules/zod/v3/index.d.cts +4 -0
  67. package/node_modules/@media-editor/core/node_modules/zod/v3/index.js +1 -0
  68. package/node_modules/@media-editor/core/node_modules/zod/v3/locales/en.cjs +1 -0
  69. package/node_modules/@media-editor/core/node_modules/zod/v3/locales/en.d.cts +3 -0
  70. package/node_modules/@media-editor/core/node_modules/zod/v3/locales/en.js +1 -0
  71. package/node_modules/@media-editor/core/node_modules/zod/v3/standard-schema.cjs +1 -0
  72. package/node_modules/@media-editor/core/node_modules/zod/v3/standard-schema.d.cts +102 -0
  73. package/node_modules/@media-editor/core/node_modules/zod/v3/standard-schema.js +0 -0
  74. package/node_modules/@media-editor/core/node_modules/zod/v3/types.cjs +1 -0
  75. package/node_modules/@media-editor/core/node_modules/zod/v3/types.d.cts +1031 -0
  76. package/node_modules/@media-editor/core/node_modules/zod/v3/types.js +1 -0
  77. package/node_modules/@media-editor/core/package.json +42 -0
  78. package/package.json +43 -0
@@ -0,0 +1 @@
1
+ var c={"tool.trim":"\u526A\u8F91","tool.crop":"\u88C1\u526A","tool.tune":"\u8C03\u8272","tool.filter":"\u6EE4\u955C","tool.annotate":"\u6807\u6CE8","tool.sticker":"\u8D34\u7EB8","tool.resize":"\u6BD4\u4F8B","tune.brightness":"\u4EAE\u5EA6","tune.contrast":"\u5BF9\u6BD4","tune.saturation":"\u9971\u548C","tune.gamma":"Gamma","overlay.select":"\u9009\u62E9","overlay.pen":"\u753B\u7B14","overlay.eraser":"\u6A61\u76AE","overlay.line":"\u76F4\u7EBF","overlay.arrow":"\u7BAD\u5934","overlay.rect":"\u77E9\u5F62","overlay.ellipse":"\u692D\u5706","overlay.text":"\u6587\u5B57","overlay.color":"\u7EBF\u8272","overlay.width":"\u7EBF\u5BBD","overlay.copySelected":"\u590D\u5236","overlay.delSelected":"\u5220\u9664\u9009\u4E2D","overlay.editSelected":"\u7F16\u8F91","overlay.pickImage":"\u9009\u62E9\u56FE\u7247","overlay.hint":"\u70B9 emoji/\u56FE\u7247\u6DFB\u52A0 \u2192 \u753B\u5E03\u4E0A\u62D6\u52A8\u6446\u4F4D,\u62D6\u53F3\u4E0B\u89D2\u7D2B\u8272\u628A\u624B\u7F29\u653E","overlay.textPlaceholder":"\u8F93\u5165\u6587\u5B57,\u56DE\u8F66\u786E\u8BA4","filter.none":"\u539F\u56FE","filter.bw":"\u9ED1\u767D","filter.sepia":"\u590D\u53E4","filter.warm":"\u6696\u9633","filter.cool":"\u51B7\u8C03","filter.vivid":"\u9C9C\u8273","ratio.orig":"\u539F\u59CB","ratio.free":"\u81EA\u7531\u6BD4\u4F8B","ratio.9:16":"\u7AD6\u5C4F 9:16","ratio.16:9":"\u6A2A\u5C4F 16:9","ratio.1:1":"\u65B9\u5F62 1:1","ratio.4:5":"\u7AD6\u56FE 4:5","act.fit":"\u9002\u5E94","act.zoomFit":"\u7F29\u653E\u81F3\u9002\u5F53\u5927\u5C0F","act.zoomTo":"\u7F29\u653E\u81F3 {value}%","act.split":"\u5206\u5272","act.copy":"\u590D\u5236","act.delete":"\u5220\u9664","act.restore":"\u8FD8\u539F","act.deleteMusic":"\u5220\u9664\u97F3\u4E50","act.cancel":"\u53D6\u6D88","act.exportPoster":"\u5BFC\u51FA\u5C01\u9762","act.exporting":"\u5BFC\u51FA\u4E2D\u2026","act.poster":"\u{1F5BC} \u5C01\u9762","act.again":"\u518D\u6B21\u4E0B\u8F7D","act.saveDrive":"\u5B58\u7F51\u76D8","act.changeImage":"\u2190 \u6362\u4E00\u5F20","act.changeVideo":"\u2190 \u6362\u4E00\u4E2A","crop.rotateLeft":"\u21BA \u5411\u5DE6\u65CB\u8F6C","crop.flipX":"\u21CB \u6C34\u5E73\u7FFB\u8F6C","crop.flipY":"\u21F5 \u5782\u76F4\u7FFB\u8F6C","crop.rotateLeftShort":"\u5DE6\u8F6C","crop.flipXShort":"\u6A2A\u7FFB","crop.flipYShort":"\u7AD6\u7FFB","tip.close":"\u5173\u95ED(\u6362\u6587\u4EF6)","tip.undo":"\u64A4\u9500","tip.redo":"\u91CD\u505A","tip.resetOpened":"\u91CD\u7F6E\u5230\u6253\u5F00\u6587\u4EF6\u65F6","tip.previewZoom":"\u9884\u89C8\u7F29\u653E\u6BD4\u4F8B","tip.previewZoomOut":"\u7F29\u5C0F\u9884\u89C8","tip.previewZoomIn":"\u653E\u5927\u9884\u89C8","tip.previewZoomFit":"\u9002\u5E94\u9884\u89C8","tip.previewPointer":"\u6307\u9488\u5DE5\u5177","tip.previewPan":"\u624B\u5DE5\u5177\uFF1A\u62D6\u52A8\u753B\u9762","tip.poster":"\u9884\u89C8\u5E76\u9009\u62E9\u5C01\u9762\u5E27","tip.keepAudio":"\u539F\u89C6\u9891\u58F0\u97F3\u5F00\u5173(\u4E0E\u97F3\u4E50\u6DF7\u97F3;\u9884\u89C8\u540C\u6B65)","tip.split":"\u5728\u64AD\u653E\u5934\u5904\u628A\u5F53\u524D\u7247\u6BB5\u4E00\u5206\u4E3A\u4E8C","tip.zoomOut":"\u7F29\u5C0F\u65F6\u95F4\u8F74(Ctrl+\u6EDA\u8F6E)","tip.zoomIn":"\u653E\u5927\u65F6\u95F4\u8F74(Ctrl+\u6EDA\u8F6E)","tip.fit":"\u7F29\u653E\u5230\u9002\u5E94\u5BBD\u5EA6","tip.addVideo":"\u6DFB\u52A0\u89C6\u9891\u7247\u6BB5","tip.addAudio":"\u6DFB\u52A0\u97F3\u4E50(\u97F3\u9891\u6587\u4EF6,\u6216\u9009\u542B\u58F0\u97F3\u7684\u89C6\u9891\u81EA\u52A8\u63D0\u53D6\u97F3\u8F68;\u4E0E\u539F\u58F0\u6DF7\u97F3)","tip.dupClip":"\u590D\u5236\u8BE5\u7247\u6BB5(\u63D2\u5230\u5176\u540E)","tip.delClip":"\u5220\u9664\u8BE5\u7247\u6BB5","tip.lockAspect":"\u9501\u5B9A\u7EB5\u6A2A\u6BD4","tip.dblConfirm":"\u53CC\u51FB\u786E\u8BA4\u88C1\u526A","err.notVideo":"\u8BF7\u9009\u62E9\u89C6\u9891\u6587\u4EF6","err.maxVideo":"\u6700\u591A {max} \u4E2A\u89C6\u9891\u7D20\u6750","err.videoLoad":"\u89C6\u9891\u52A0\u8F7D\u5931\u8D25,\u8BF7\u6362\u4E00\u4E2A\u6587\u4EF6","err.notAudio":"\u8BF7\u9009\u62E9\u97F3\u9891\u6587\u4EF6(mp3/wav/m4a),\u6216\u542B\u58F0\u97F3\u7684\u89C6\u9891(\u81EA\u52A8\u63D0\u53D6\u97F3\u8F68)","err.maxAudio":"\u6700\u591A {max} \u4E2A\u97F3\u9891\u7D20\u6750","err.audioLoad":"\u97F3\u9891\u52A0\u8F7D\u5931\u8D25,\u8BF7\u6362\u4E00\u4E2A\u6587\u4EF6","err.processFailed":"\u5904\u7406\u5931\u8D25","err.posterFailed":"\u5C01\u9762\u6E32\u67D3\u5931\u8D25","err.canvas":"canvas \u4E0D\u53EF\u7528","err.imageRead":"\u56FE\u7247\u8BFB\u53D6\u5931\u8D25,\u8BF7\u6362\u4E00\u5F20","err.notImage":"\u8BF7\u9009\u62E9\u56FE\u7247\u6587\u4EF6","err.fileType":"\u53EA\u652F\u6301\u56FE\u7247\u6216\u89C6\u9891\u6587\u4EF6","err.saveDrive":"\u5B58\u7F51\u76D8\u5931\u8D25","msg.processing":"\u6B63\u5728\u5BFC\u51FA\u4E2D\u2026","msg.exportingHint":"\u8BF7\u7A0D\u5019\uFF0C\u5BFC\u51FA\u5B8C\u6210\u540E\u4F1A\u81EA\u52A8\u8FD4\u56DE\u7ED3\u679C\u3002","msg.done":"\u5B8C\u6210 \u2713","msg.loading":"\u7D20\u6750\u52A0\u8F7D\u4E2D\u2026","msg.exported":"\u5DF2\u5BFC\u51FA\uFF1A","msg.saving":"\u5B58\u7F51\u76D8\u4E2D\u2026","msg.saved":"\u5DF2\u5B58\u5230\u7F51\u76D8 \u2713","lbl.ratioSection":"\u753B\u9762\u6BD4\u4F8B(\u88C1\u526A,\u4E0D\u53D8\u5F62)","lbl.dragToReposition":"\u2194 \u62D6\u52A8\u9884\u89C8\u53EF\u8C03\u6574\u88C1\u526A\u4F4D\u7F6E","lbl.sizeSection":"\u5BFC\u51FA\u5C3A\u5BF8(\u50CF\u7D20;\u6BD4\u4F8B\u4E0D\u7B26\u65F6 cover \u5C45\u4E2D\u88C1\u526A)","lbl.currentOut":"\u5F53\u524D\u8F93\u51FA","lbl.zoomSize":"\u5927\u5C0F","lbl.noScale":"(\u672A\u7F29\u653E)","lbl.coverNote":"\xB7 \u6BD4\u4F8B\u4E0D\u4E00\u81F4\u65F6\u5C45\u4E2D\u88C1\u526A(cover),\u4E0D\u53D8\u5F62","lbl.audioTrackHint":"\u266A \u97F3\u9891\u8F68(\u53F3\u4FA7 \uFF0B \u6DFB\u52A0\u97F3\u4E50,\u4E0E\u539F\u58F0\u6DF7\u97F3)","lbl.volume":"\u97F3\u91CF","lbl.volNote":"(\u9884\u89C8\u6700\u5927 100%,\u5BFC\u51FA\u6309\u8BBE\u5B9A\u503C)","lbl.music":"\u97F3\u4E50","kbd.fit":"\u21E7 F","poster.title":"\u9009\u62E9\u5C01\u9762\u5E27","panel.title":"\u5A92\u4F53\u7F16\u8F91\u5668","panel.subtitle":"\u4E0A\u4F20\u56FE\u7247 / \u89C6\u9891\uFF0C\u88C1\u526A \xB7 \u6EE4\u955C \xB7 \u6587\u5B57 \xB7 \u5BFC\u51FA","panel.pick":"\u70B9\u51FB\u9009\u62E9\u56FE\u7247\u6216\u89C6\u9891","panel.pickHint":"\u56FE\u7247\u7528 Filerobot \xB7 \u89C6\u9891\u53EF\u88C1\u526A/\u9759\u97F3/\u5C01\u9762"},B={"tool.trim":"Trim","tool.crop":"Crop","tool.tune":"Tune","tool.filter":"Filters","tool.annotate":"Annotate","tool.sticker":"Stickers","tool.resize":"Ratio","tune.brightness":"Brightness","tune.contrast":"Contrast","tune.saturation":"Saturation","tune.gamma":"Gamma","overlay.select":"Select","overlay.pen":"Pen","overlay.eraser":"Eraser","overlay.line":"Line","overlay.arrow":"Arrow","overlay.rect":"Rect","overlay.ellipse":"Ellipse","overlay.text":"Text","overlay.color":"Color","overlay.width":"Width","overlay.copySelected":"Copy","overlay.delSelected":"Delete selected","overlay.editSelected":"Edit","overlay.pickImage":"Pick image","overlay.hint":"Tap emoji/image to add \u2192 drag to place, drag the purple corner handle to scale","overlay.textPlaceholder":"Type text, Enter to confirm","filter.none":"Original","filter.bw":"B&W","filter.sepia":"Sepia","filter.warm":"Warm","filter.cool":"Cool","filter.vivid":"Vivid","ratio.orig":"Original","ratio.free":"Free ratio","ratio.9:16":"Portrait 9:16","ratio.16:9":"Landscape 16:9","ratio.1:1":"Square 1:1","ratio.4:5":"Vertical 4:5","act.fit":"Fit","act.zoomFit":"Zoom to fit","act.zoomTo":"Zoom to {value}%","act.split":"Split","act.copy":"Copy","act.delete":"Delete","act.restore":"Reset","act.deleteMusic":"Remove music","act.cancel":"Cancel","act.exportPoster":"Export cover","act.exporting":"Exporting\u2026","act.poster":"\u{1F5BC} Cover","act.again":"Download again","act.saveDrive":"Save to drive","act.changeImage":"\u2190 Change image","act.changeVideo":"\u2190 Change file","crop.rotateLeft":"\u21BA Rotate left","crop.flipX":"\u21CB Flip horizontal","crop.flipY":"\u21F5 Flip vertical","crop.rotateLeftShort":"Rot","crop.flipXShort":"Flip","crop.flipYShort":"Flip","tip.close":"Close (change file)","tip.undo":"Undo","tip.redo":"Redo","tip.resetOpened":"Reset to opened file","tip.previewZoom":"Preview zoom","tip.previewZoomOut":"Zoom out preview","tip.previewZoomIn":"Zoom in preview","tip.previewZoomFit":"Fit preview","tip.previewPointer":"Pointer tool","tip.previewPan":"Hand tool: pan canvas","tip.poster":"Preview and pick a cover frame","tip.keepAudio":"Original audio on/off (mixed with music; preview follows)","tip.split":"Split the current clip at the playhead","tip.zoomOut":"Zoom out timeline (Ctrl+wheel)","tip.zoomIn":"Zoom in timeline (Ctrl+wheel)","tip.fit":"Fit to width","tip.addVideo":"Add video clip","tip.addAudio":"Add music (audio file, or a video with sound to extract its track; mixed with original)","tip.dupClip":"Duplicate clip (insert after)","tip.delClip":"Delete clip","tip.lockAspect":"Lock aspect ratio","tip.dblConfirm":"Double-click to confirm crop","err.notVideo":"Please choose a video file","err.maxVideo":"Up to {max} video sources","err.videoLoad":"Failed to load video, try another file","err.notAudio":"Choose an audio file (mp3/wav/m4a), or a video with sound (audio auto-extracted)","err.maxAudio":"Up to {max} audio sources","err.audioLoad":"Failed to load audio, try another file","err.processFailed":"Processing failed","err.posterFailed":"Failed to render cover","err.canvas":"Canvas unavailable","err.imageRead":"Failed to read image, try another","err.notImage":"Please choose an image file","err.fileType":"Only image or video files are supported","err.saveDrive":"Failed to save to drive","msg.processing":"Exporting\u2026","msg.exportingHint":"Please wait. The result will be returned automatically when export finishes.","msg.done":"Done \u2713","msg.loading":"Loading media\u2026","msg.exported":"Exported: ","msg.saving":"Saving\u2026","msg.saved":"Saved to drive \u2713","lbl.ratioSection":"Frame ratio (crop, no distortion)","lbl.dragToReposition":"\u2194 Drag the preview to reposition the crop","lbl.sizeSection":"Export size (px; cover center-crop when ratios differ)","lbl.currentOut":"Output","lbl.zoomSize":"Size","lbl.noScale":"(no scaling)","lbl.coverNote":"\xB7 center-cropped (cover) when ratios differ, no distortion","lbl.audioTrackHint":"\u266A Audio track (\uFF0B on the right to add music, mixed with original)","lbl.volume":"Volume","lbl.volNote":"(preview caps at 100%, export uses the set value)","lbl.music":"Music","kbd.fit":"\u21E7 F","poster.title":"Pick a cover frame","panel.title":"Media Editor","panel.subtitle":"Upload an image / video \u2014 crop \xB7 filters \xB7 text \xB7 export","panel.pick":"Click to choose an image or video","panel.pickHint":"Images via Filerobot \xB7 videos: trim/mute/cover"},A={"tool.trim":"Editar","tool.crop":"Recortar","tool.tune":"Ajustar color","tool.filter":"Filtros","tool.annotate":"Anotar","tool.sticker":"Stickers","tool.resize":"Proporci\xF3n","tune.brightness":"Brillo","tune.contrast":"Contraste","tune.saturation":"Saturaci\xF3n","tune.gamma":"Gamma","overlay.select":"Seleccionar","overlay.pen":"Pincel","overlay.eraser":"Borrador","overlay.line":"L\xEDnea","overlay.arrow":"Flecha","overlay.rect":"Rect\xE1ngulo","overlay.ellipse":"Elipse","overlay.text":"Texto","overlay.color":"Color","overlay.width":"Grosor","overlay.copySelected":"Copiar","overlay.delSelected":"Eliminar seleccionado","overlay.editSelected":"Editar","overlay.pickImage":"Elegir imagen","overlay.hint":"Toca un emoji/imagen para a\xF1adirlo \u2192 arrastra para colocarlo, arrastra el tirador morado para escalar","overlay.textPlaceholder":"Escribe texto, Enter para confirmar","filter.none":"Original","filter.bw":"Blanco y negro","filter.sepia":"Sepia","filter.warm":"C\xE1lido","filter.cool":"Fr\xEDo","filter.vivid":"Intenso","ratio.orig":"Original","ratio.free":"Libre","ratio.9:16":"Vertical 9:16","ratio.16:9":"Horizontal 16:9","ratio.1:1":"Cuadrado 1:1","ratio.4:5":"Vertical 4:5","act.fit":"Ajustar","act.zoomFit":"Ajustar a pantalla","act.zoomTo":"Zoom al {value}%","act.split":"Dividir","act.copy":"Copiar","act.delete":"Eliminar","act.restore":"Restablecer","act.deleteMusic":"Quitar m\xFAsica","act.cancel":"Cancelar","act.exportPoster":"Exportar portada","act.exporting":"Exportando\u2026","act.poster":"\u{1F5BC} Portada","act.again":"Descargar de nuevo","act.saveDrive":"Guardar en disco","act.changeImage":"\u2190 Cambiar imagen","act.changeVideo":"\u2190 Cambiar archivo","crop.rotateLeft":"\u21BA Girar a la izquierda","crop.flipX":"\u21CB Voltear horizontal","crop.flipY":"\u21F5 Voltear vertical","crop.rotateLeftShort":"Giro","crop.flipXShort":"Flip","crop.flipYShort":"Flip","tip.close":"Cerrar (cambiar archivo)","tip.undo":"Deshacer","tip.redo":"Rehacer","tip.resetOpened":"Restablecer al archivo abierto","tip.previewZoom":"Zoom de vista previa","tip.previewZoomOut":"Reducir vista previa","tip.previewZoomIn":"Ampliar vista previa","tip.previewZoomFit":"Ajustar vista previa","tip.previewPointer":"Herramienta de puntero","tip.previewPan":"Mano: desplazar lienzo","tip.poster":"Previsualizar y elegir portada","tip.keepAudio":"Activar/desactivar audio original (mezclado con m\xFAsica; la vista previa lo refleja)","tip.split":"Dividir el clip actual en el cursor","tip.zoomOut":"Reducir l\xEDnea de tiempo (Ctrl+rueda)","tip.zoomIn":"Ampliar l\xEDnea de tiempo (Ctrl+rueda)","tip.fit":"Ajustar al ancho","tip.addVideo":"A\xF1adir clip de v\xEDdeo","tip.addAudio":"A\xF1adir m\xFAsica (archivo de audio o v\xEDdeo con sonido para extraer la pista; se mezcla con el original)","tip.dupClip":"Duplicar clip (insertar despu\xE9s)","tip.delClip":"Eliminar clip","tip.lockAspect":"Bloquear proporci\xF3n","tip.dblConfirm":"Doble clic para confirmar recorte","err.notVideo":"Elige un archivo de v\xEDdeo","err.maxVideo":"M\xE1ximo {max} v\xEDdeos","err.videoLoad":"No se pudo cargar el v\xEDdeo, prueba con otro archivo","err.notAudio":"Elige un audio (mp3/wav/m4a) o un v\xEDdeo con sonido (se extrae autom\xE1ticamente)","err.maxAudio":"M\xE1ximo {max} audios","err.audioLoad":"No se pudo cargar el audio, prueba con otro archivo","err.processFailed":"Error de procesamiento","err.posterFailed":"No se pudo renderizar la portada","err.canvas":"Canvas no disponible","err.imageRead":"No se pudo leer la imagen, prueba con otra","err.notImage":"Elige un archivo de imagen","err.fileType":"Solo se admiten archivos de imagen o v\xEDdeo","err.saveDrive":"No se pudo guardar en disco","msg.processing":"Exportando\u2026","msg.exportingHint":"Espera un momento. El resultado se devolver\xE1 autom\xE1ticamente al finalizar.","msg.done":"Listo \u2713","msg.loading":"Cargando medios\u2026","msg.exported":"Exportado: ","msg.saving":"Guardando\u2026","msg.saved":"Guardado en disco \u2713","lbl.ratioSection":"Proporci\xF3n de imagen (recorte, sin deformar)","lbl.dragToReposition":"\u2194 Arrastra la vista previa para reposicionar el recorte","lbl.sizeSection":"Tama\xF1o de exportaci\xF3n (px; recorte cover centrado si la proporci\xF3n difiere)","lbl.currentOut":"Salida","lbl.zoomSize":"Tama\xF1o","lbl.noScale":"(sin escala)","lbl.coverNote":"\xB7 recorte centrado (cover) cuando la proporci\xF3n difiere, sin deformar","lbl.audioTrackHint":"\u266A Pista de audio (\uFF0B a la derecha para a\xF1adir m\xFAsica, mezclada con el original)","lbl.volume":"Volumen","lbl.volNote":"(la vista previa limita a 100%, la exportaci\xF3n usa el valor definido)","lbl.music":"M\xFAsica","kbd.fit":"\u21E7 F","poster.title":"Elegir portada","panel.title":"Editor multimedia","panel.subtitle":"Sube una imagen / v\xEDdeo \u2014 recorta \xB7 filtros \xB7 texto \xB7 exporta","panel.pick":"Haz clic para elegir una imagen o v\xEDdeo","panel.pickHint":"Im\xE1genes con Filerobot \xB7 v\xEDdeos: cortar/silenciar/portada"},D={\u7B80:"\u7C21",\u4F53:"\u9AD4",\u56FE:"\u5716",\u9891:"\u983B",\u89C6:"\u8996",\u8F91:"\u8F2F",\u8C03:"\u8ABF",\u6EE4:"\u6FFE",\u6807:"\u6A19",\u6CE8:"\u8A3B",\u8D34:"\u8CBC",\u9009:"\u9078",\u62E9:"\u64C7",\u7EBF:"\u7DDA",\u7BAD:"\u7BAD",\u5934:"\u982D",\u590D:"\u8907",\u5220:"\u522A",\u9664:"\u9664",\u7F16:"\u7DE8",\u8FB9:"\u908A",\u8F93:"\u8F38",\u5165:"\u5165",\u786E:"\u78BA",\u8BA4:"\u8A8D",\u9971:"\u98FD",\u5BF9:"\u5C0D",\u6696:"\u6696",\u9633:"\u967D",\u51B7:"\u51B7",\u7EB5:"\u7E31",\u6A2A:"\u6A6B",\u9002:"\u9069",\u5E94:"\u61C9",\u7F29:"\u7E2E",\u5B9E:"\u5BE6",\u9645:"\u969B",\u5BFC:"\u5C0E",\u51FA:"\u51FA",\u5C01:"\u5C01",\u9762:"\u9762",\u6362:"\u63DB",\u5F20:"\u5F35",\u9884:"\u9810",\u89C8:"\u89BD",\u52A8:"\u52D5",\u58F0:"\u8072",\u5F00:"\u958B",\u5173:"\u95DC",\u4E0E:"\u8207",\u4E50:"\u6A02",\u6DF7:"\u6DF7",\u5904:"\u8655",\u8F7D:"\u8F09",\u9519:"\u932F",\u8BEF:"\u8AA4",\u8BFB:"\u8B80",\u4EC5:"\u50C5",\u7EC8:"\u7D42",\u7A0D:"\u7A0D",\u5019:"\u5019",\u8FD4\u56DE:"\u8FD4\u56DE",\u5F53\u524D:"\u76EE\u524D",\u8F93\u51FA:"\u8F38\u51FA",\u753B:"\u756B",\u53D8:"\u8B8A",\u97F3\u9891:"\u97F3\u8A0A",\u97F3\u8F68:"\u97F3\u8ECC",\u6DFB\u52A0:"\u65B0\u589E",\u5220\u9664:"\u522A\u9664",\u4FDD\u5B58:"\u5132\u5B58",\u52A0\u8F7D:"\u8F09\u5165",\u7F51\u76D8:"\u7DB2\u76E4"},d=t=>{let u=t;for(const[o,e]of Object.entries(D).sort((a,i)=>i[0].length-a[0].length))u=u.replaceAll(o,e);return u},f=Object.fromEntries(Object.entries(c).map(([t,u])=>[t,d(u)])),n={zh:c,en:B,es:A,"zh-Hant":f};function g(t,u,o){let e=n[t]?.[u]??n.zh[u]??u;if(o)for(const[a,i]of Object.entries(o))e=e.replaceAll(`{${a}}`,String(i));return e}var l=[{platform:"tiktok",postType:"video",label:"TikTok Video",shortLabel:"TT\xB7Video",ratio:"9:16",imageSize:"1440x2560",videoRatio:"9:16",videoResolution:"720p"},{platform:"instagram",postType:"post",label:"Instagram Post",shortLabel:"IG\xB7Post",ratio:"1:1",imageSize:"2048x2048"},{platform:"instagram",postType:"reels",label:"Instagram Reels",shortLabel:"IG\xB7Reels",ratio:"9:16",imageSize:"1440x2560",videoRatio:"9:16",videoResolution:"720p"},{platform:"instagram",postType:"story",label:"Instagram Story",shortLabel:"IG\xB7Story",ratio:"9:16",imageSize:"1440x2560",videoRatio:"9:16",videoResolution:"720p"},{platform:"facebook",postType:"post",label:"Facebook Post",shortLabel:"FB\xB7Post",ratio:"1:1",imageSize:"2048x2048"},{platform:"facebook",postType:"reels",label:"Facebook Reels",shortLabel:"FB\xB7Reels",ratio:"9:16",imageSize:"1440x2560",videoRatio:"9:16",videoResolution:"720p"},{platform:"youtube",postType:"video",label:"YouTube Video",shortLabel:"YT\xB7Video",ratio:"16:9",imageSize:"2560x1440",videoRatio:"16:9",videoResolution:"1080p"},{platform:"youtube",postType:"shorts",label:"YouTube Shorts",shortLabel:"YT\xB7Shorts",ratio:"9:16",imageSize:"1440x2560",videoRatio:"9:16",videoResolution:"720p"},{platform:"pinterest",postType:"pin",label:"Pinterest Pin",shortLabel:"PIN",ratio:"2:3",imageSize:"1664x2496",videoRatio:"9:16",videoResolution:"720p"},{platform:"x",postType:"post",label:"X Post",shortLabel:"X\xB7Post",ratio:"16:9",imageSize:"2560x1440",videoRatio:"16:9",videoResolution:"720p"},{platform:"linkedin",postType:"post",label:"LinkedIn Post",shortLabel:"LI\xB7Post",ratio:"1:1",imageSize:"2048x2048"},{platform:"linkedin",postType:"video",label:"LinkedIn Video",shortLabel:"LI\xB7Video",ratio:"16:9",imageSize:"2560x1440",videoRatio:"16:9",videoResolution:"1080p"},{platform:"threads",postType:"post",label:"Threads Post",shortLabel:"TH\xB7Post",ratio:"1:1",imageSize:"2048x2048"},{platform:"telegram",postType:"post",label:"Telegram Post",shortLabel:"TG\xB7Post",ratio:"1:1",imageSize:"2048x2048",videoRatio:"9:16",videoResolution:"720p"},{platform:"reddit",postType:"post",label:"Reddit Post",shortLabel:"RD\xB7Post",ratio:"16:9",imageSize:"2560x1440",videoRatio:"16:9",videoResolution:"720p"}],x={"1:1":"\u65B9\u5F62 1:1","4:5":"\u7AD6\u56FE 4:5","3:4":"\u7AD6\u56FE 3:4","9:16":"\u7AD6\u5C4F 9:16","16:9":"\u6A2A\u5C4F 16:9","2:3":"\u7AD6\u56FE 2:3","1.91:1":"\u6A2A\u5E45 1.91:1"};function r(t){const[u,o]=t.split(":").map(Number);return!u||!o?1:u/o}function F(t){const u=new Set,o=[];for(const e of t)!e||u.has(e)||(u.add(e),o.push({ratio:e,value:r(e),label:x[e]??e}));return o}var C=F(["1:1","4:5","3:4","2:3","9:16","16:9","1.91:1"]),b=F(["9:16","16:9","1:1","4:5"]);function m(t=l){const u=new Set,o=[];for(const e of t){if(!e.videoRatio)continue;const a=`${e.platform}:${e.postType}:${e.videoRatio}`;if(u.has(a))continue;u.add(a);const i=e.label.split(" ").slice(0,-1).join(" ")||e.label;o.push({platform:e.platform,postType:e.postType,label:`${i} ${e.videoRatio}`,ratio:e.videoRatio,value:r(e.videoRatio)})}return o}var h=m();function v(t=l){const u=new Map;for(const o of t){const e=u.get(o.platform);(!e||e.postType!=="post"&&o.postType==="post")&&u.set(o.platform,o)}return Array.from(u.values()).map(o=>{const[e,a]=o.imageSize.split("x").map(Number),i=o.label.split(" ").slice(0,-1).join(" ")||o.label;return{platform:o.platform,label:`${i} ${o.ratio}`,ratio:o.ratio,value:r(o.ratio),w:e,h:a}})}var y=v();function S(t,u){return t>=1?{w:Math.round(u*t/2)*2,h:u}:{w:u,h:Math.round(u/t/2)*2}}function E(t=l){const u=new Set,o=[];for(const e of t){if(!e.videoRatio||!e.videoResolution)continue;const a=e.videoResolution==="1080p"?1080:720,{w:i,h:p}=S(r(e.videoRatio),a),s=`${i}x${p}`;u.has(s)||(u.add(s),o.push({label:`${e.shortLabel} ${i}\xD7${p}`,w:i,h:p}))}return o}var R=E();function T(t,u){if(t.isDuplicated)return{};if((t.rotation??0)!==0)return{};const o=u.adjustments?.rotation??0;return o?{rotation:-o}:{}}export{l as DEFAULT_PLATFORM_TARGETS,n as EDITOR_MESSAGES,y as IMAGE_PLATFORM_PRESETS,C as IMAGE_RATIO_PRESETS,h as VIDEO_PLATFORM_RATIO_PRESETS,b as VIDEO_RATIO_PRESETS,R as VIDEO_SIZE_PRESETS,v as buildImagePlatformPresets,m as buildVideoPlatformRatioPresets,E as buildVideoSizePresets,T as compensateAnnotationRotation,r as parseRatio,g as tEditor,d as toHant};
@@ -0,0 +1 @@
1
+ "use strict";var r=require("zod"),p={color:r.z.string().max(32),width:r.z.number().positive().max(200)},u={rotation:r.z.number().min(-180).max(180).optional()},A=r.z.discriminatedUnion("type",[r.z.object({type:r.z.literal("pen"),points:r.z.array(r.z.number()).min(4),...p,...u}),r.z.object({type:r.z.literal("line"),x1:r.z.number(),y1:r.z.number(),x2:r.z.number(),y2:r.z.number(),...p,...u}),r.z.object({type:r.z.literal("arrow"),x1:r.z.number(),y1:r.z.number(),x2:r.z.number(),y2:r.z.number(),...p,...u}),r.z.object({type:r.z.literal("rect"),x:r.z.number(),y:r.z.number(),w:r.z.number(),h:r.z.number(),...p,...u}),r.z.object({type:r.z.literal("ellipse"),x:r.z.number(),y:r.z.number(),w:r.z.number(),h:r.z.number(),...p,...u}),r.z.object({type:r.z.literal("text"),x:r.z.number(),y:r.z.number(),text:r.z.string().max(500),color:r.z.string().max(32),fontSize:r.z.number().positive().max(512),...u}),r.z.object({type:r.z.literal("sticker"),x:r.z.number(),y:r.z.number(),w:r.z.number().positive(),h:r.z.number().positive(),emoji:r.z.string().max(16).optional(),src:r.z.string().optional(),...u})]),B=r.z.object({srcIdx:r.z.number().int().min(0).max(7),in:r.z.number().min(0),out:r.z.number().min(0)}),I=r.z.object({srcIdx:r.z.number().int().min(0).max(2),startAt:r.z.number().min(0),in:r.z.number().min(0),out:r.z.number().min(0),volume:r.z.number().min(0).max(2)}),w=r.z.object({type:r.z.enum(["none","fade","slide","wipe","flip","clockWipe","star","circle","rectangle"]).default("none"),duration:r.z.number().min(0).max(2).default(.4)}),E=r.z.object({clips:r.z.array(B).min(1).max(50),audioClips:r.z.array(I).max(8).default([]),canvas:r.z.object({w:r.z.number().int().min(2).max(4096),h:r.z.number().int().min(2).max(4096)}),crop:r.z.object({x:r.z.number().min(0),y:r.z.number().min(0),width:r.z.number().positive(),height:r.z.number().positive()}).optional(),scale:r.z.object({width:r.z.number().positive(),height:r.z.number().positive(),fit:r.z.enum(["contain","cover","force"])}).optional(),rotation:r.z.number().min(-180).max(180).default(0),flipX:r.z.boolean().default(!1),flipY:r.z.boolean().default(!1),filters:r.z.object({brightness:r.z.number().min(-1).max(1),contrast:r.z.number().min(-1).max(1),saturation:r.z.number().min(-1).max(1),gamma:r.z.number().min(-1).max(1).default(0)}).default({brightness:0,contrast:0,saturation:0,gamma:0}),filterPreset:r.z.string().max(32).optional(),overlays:r.z.array(A).max(200).optional(),transitions:r.z.array(w).max(49).default([]),keepAudio:r.z.boolean().default(!0),poster:r.z.object({time:r.z.number().min(0)}).optional()}).superRefine((t,e)=>{t.clips.forEach((i,n)=>{i.out<=i.in&&e.addIssue({code:r.z.ZodIssueCode.custom,message:`clips[${n}].out \u5FC5\u987B\u5927\u4E8E in`,path:["clips",n,"out"]})}),t.audioClips?.forEach((i,n)=>{i.out<=i.in&&e.addIssue({code:r.z.ZodIssueCode.custom,message:`audioClips[${n}].out \u5FC5\u987B\u5927\u4E8E in`,path:["audioClips",n,"out"]})}),(t.canvas.w%2!==0||t.canvas.h%2!==0)&&e.addIssue({code:r.z.ZodIssueCode.custom,message:"canvas \u5BBD\u9AD8\u5FC5\u987B\u4E3A\u5076\u6570",path:["canvas"]})});function m(){return{clips:[],audioClips:[],canvas:{w:2,h:2},rotation:0,flipX:!1,flipY:!1,filters:{brightness:0,contrast:0,saturation:0,gamma:0},transitions:[],keepAudio:!0}}var j=100;function d(t){return{past:[],present:t,future:[]}}function f(t,e){if(e===t.present)return t;const i=[...t.past,t.present];return i.length>j&&i.shift(),{past:i,present:e,future:[]}}function y(t,e){return e===t.present?t:{...t,present:e}}function z(t){return t.past.length>0}function b(t){return t.future.length>0}function P(t){return z(t)?{past:t.past.slice(0,-1),present:t.past[t.past.length-1],future:[t.present,...t.future]}:t}function D(t){if(!b(t))return t;const[e,...i]=t.future;return{past:[...t.past,t.present],present:e,future:i}}var l=.1;function v(t){return t.out-t.in}function c(t){return t.reduce((e,i)=>e+v(i),0)}function x(t,e){if(!t.length||e<0)return null;let i=0;for(let n=0;n<t.length;n++){const s=v(t[n]);if(e<i+s)return{idx:n,srcTime:t[n].in+(e-i)};i+=s}if(Math.abs(e-i)<1e-9||e<=i){const n=t.length-1;return{idx:n,srcTime:t[n].out}}return null}function V(t,e){const i=x(t,e);if(!i)return t;const n=t[i.idx];return i.srcTime<n.in+l||i.srcTime>n.out-l?t:[...t.slice(0,i.idx),{...n,out:i.srcTime},{...n,in:i.srcTime},...t.slice(i.idx+1)]}function O(t,e){return t.length<=1||!t[e]?t:t.filter((i,n)=>n!==e)}function F(t,e){const i=t[e];return i?[...t.slice(0,e+1),{...i},...t.slice(e+1)]:t}function T(t,e,i){if(e===i||!t[e]||i<0||i>=t.length)return t;const n=[...t],[s]=n.splice(e,1);return n.splice(i,0,s),n}function k(t,e,i,n,s){if(!t[e])return t;const a=t.map(h=>({...h}));return i==="in"?a[e].in=Math.min(Math.max(n,0),a[e].out-l):a[e].out=Math.max(Math.min(n,s),a[e].in+l),a}function M(t,e,i){const n=Math.max(Math.min(t.out,e),l),s=Math.min(Math.max(t.in,0),n-l),o=Math.min(Math.max(t.startAt,0),Math.max(0,i-l));return{...t,in:s,out:n,startAt:o}}function R(t,e=[]){const i=c(t),n=e.reduce((s,o)=>Math.max(s,o.startAt+(o.out-o.in)),0);return Math.max(i,n)}function g(t){return[...new Set(t.map(e=>e.srcIdx))].sort((e,i)=>e-i)}function X(t,e){const i=new Map(e.map((n,s)=>[n,s]));return t.map(n=>({...n,srcIdx:i.get(n.srcIdx)??0}))}function C(t){const e=Math.min(Math.max(Math.round(t),2),4096);return e%2===0?e:e-1}var S=t=>Math.min(Math.max(t,-180),180),Y=class{constructor(t=m()){this.videoSources=[],this.audioSources=[],this.listeners=new Set,this.transientBase=null,this.getSnapshot=()=>this.history.present,this.subscribe=e=>(this.listeners.add(e),()=>this.listeners.delete(e)),this.history=d(t)}getState(){return this.history.present}emit(){const t=this.history.present;for(const e of this.listeners)e(t)}canUndo(){return z(this.history)}canRedo(){return b(this.history)}undo(){this.transientBase=null,this.history=P(this.history),this.emit()}redo(){this.transientBase=null,this.history=D(this.history),this.emit()}applyMut(t,e=!1){if(e)this.transientBase===null&&(this.transientBase=this.history.present),this.history=y(this.history,t(this.transientBase));else{const i=this.transientBase??this.history.present,n=t(i),s=this.transientBase?{...this.history,present:this.transientBase}:this.history;this.history=f(s,n),this.transientBase=null}this.emit()}registerVideoSource(t){const e=this.videoSources.length;this.videoSources.push(t);const i={srcIdx:e,in:0,out:t.duration};return e===0||this.history.present.clips.length===0?(this.transientBase=null,this.history=d({...m(),clips:[i],canvas:{w:C(t.width),h:C(t.height)},poster:{time:Math.min(1,t.duration/2)}}),this.emit()):this.applyMut(n=>({...n,clips:[...n.clips,i]})),e}registerAudioSource(t){const e=this.audioSources.length;return this.audioSources.push(t),this.applyMut(i=>{const n=M({srcIdx:e,startAt:0,in:0,out:t.duration,volume:1},t.duration,c(i.clips));return{...i,audioClips:[...i.audioClips,n]}}),e}getVideoSource(t){return this.videoSources[t]}getAudioSource(t){return this.audioSources[t]}addClipFromSource(t){const e=this.videoSources[t];e&&this.applyMut(i=>({...i,clips:[...i.clips,{srcIdx:t,in:0,out:e.duration}]}))}splitAtPlayhead(t){this.applyMut(e=>({...e,clips:V(e.clips,t)}))}removeClip(t){this.applyMut(e=>({...e,clips:O(e.clips,t)}))}duplicateClip(t){this.applyMut(e=>({...e,clips:F(e.clips,t)}))}reorderClips(t,e){this.applyMut(i=>({...i,clips:T(i.clips,t,e)}))}trimClip(t,e,i,n){this.applyMut(s=>{const o=s.clips[t];if(!o)return s;const a=this.videoSources[o.srcIdx]?.duration??o.out;return{...s,clips:k(s.clips,t,e,i,a)}},n?.transient)}moveAudioClip(t,e,i){this.applyMut(n=>this.patchAudio(n,t,s=>({...s,startAt:e})),i?.transient)}trimAudioClip(t,e,i,n){this.applyMut(s=>this.patchAudio(s,t,o=>{if(e==="in"){const a=i-o.in;return{...o,in:i,startAt:o.startAt+a}}return{...o,out:i}}),n?.transient)}setAudioVolume(t,e,i){this.applyMut(n=>this.patchAudio(n,t,s=>({...s,volume:e}),!1),i?.transient)}removeAudioClip(t){this.applyMut(e=>({...e,audioClips:e.audioClips.filter((i,n)=>n!==t)}))}patchAudio(t,e,i,n=!0){const s=t.audioClips[e];if(!s)return t;let o=i(s);if(n){const a=this.audioSources[s.srcIdx]?.duration??s.out;o=M(o,a,c(t.clips))}return{...t,audioClips:t.audioClips.map((a,h)=>h===e?o:a)}}setCrop(t,e){this.applyMut(i=>({...i,crop:t}),e?.transient)}clearCrop(){this.applyMut(t=>({...t,crop:void 0}))}setScale(t){this.applyMut(e=>({...e,scale:t}))}clearScale(){this.applyMut(t=>({...t,scale:void 0}))}setRotation(t,e){this.applyMut(i=>({...i,rotation:S(t)}),e?.transient)}rotateBy(t){this.applyMut(e=>{let i=e.rotation+t;return i>180&&(i-=360),i<-180&&(i+=360),{...e,rotation:S(i)}})}flipX(){this.applyMut(t=>({...t,flipX:!t.flipX}))}flipY(){this.applyMut(t=>({...t,flipY:!t.flipY}))}setFilter(t,e,i){this.applyMut(n=>({...n,filters:{...n.filters,[t]:e}}),i?.transient)}setFilters(t,e){this.applyMut(i=>({...i,filters:{...i.filters,...t}}),e?.transient)}setFilterPreset(t){this.applyMut(e=>({...e,filterPreset:t}))}addOverlay(t){this.applyMut(e=>({...e,overlays:[...e.overlays??[],t]}))}updateOverlay(t,e,i){this.applyMut(n=>{const s=n.overlays??[];return s[t]?{...n,overlays:s.map((o,a)=>a===t?{...o,...e}:o)}:n},i?.transient)}removeOverlay(t){this.applyMut(e=>({...e,overlays:(e.overlays??[]).filter((i,n)=>n!==t)}))}patch(t,e){e?.transient?(this.transientBase===null&&(this.transientBase=this.history.present),this.history=y(this.history,{...this.transientBase,...t}),this.emit()):this.commit(t)}commit(t){const e=t?{...this.history.present,...t}:this.history.present,i=this.transientBase;this.transientBase=null,this.history=f(i?{...this.history,present:i}:this.history,e),this.emit()}setKeepAudio(t){this.applyMut(e=>({...e,keepAudio:t}))}setPoster(t){this.applyMut(e=>({...e,poster:{time:Math.max(0,t)}}))}totalDuration(){return c(this.history.present.clips)}contentDuration(){const t=this.history.present;return R(t.clips,t.audioClips)}locate(t){return x(this.history.present.clips,t)}usedVideoSources(){return g(this.history.present.clips)}getExportPlan(){const t=this.history.present,e=g(t.clips),i=[...new Set(t.audioClips.map(s=>s.srcIdx))].sort((s,o)=>s-o),n=new Map(i.map((s,o)=>[s,o]));return{state:{...t,clips:X(t.clips,e),audioClips:t.audioClips.map(s=>({...s,srcIdx:n.get(s.srcIdx)??0}))},videoSrcOrder:e,audioSrcOrder:i}}validate(){return E.safeParse(this.getExportPlan().state)}reset(t=m()){this.transientBase=null,this.history=d(t),this.emit()}};exports.VideoEditorEngine=Y;
@@ -0,0 +1,359 @@
1
+ import * as zod from 'zod';
2
+ import { V as VideoEditStateT, O as OverlayT } from './state-B85vkf7_.js';
3
+
4
+ type TransitionT = {
5
+ type: 'none' | 'fade' | 'slide' | 'wipe' | 'flip' | 'clockWipe' | 'star' | 'circle' | 'rectangle';
6
+ duration: number;
7
+ };
8
+ type VideoEditStateWithTransitions = VideoEditStateT & {
9
+ transitions?: TransitionT[];
10
+ };
11
+
12
+ /** 视频源元数据(File/objectURL 是运行时的事,不进引擎;引擎只认 srcIdx + 元数据) */
13
+ interface VideoSourceMeta {
14
+ duration: number;
15
+ width: number;
16
+ height: number;
17
+ }
18
+ /** 音频源元数据 */
19
+ interface AudioSourceMeta {
20
+ duration: number;
21
+ }
22
+ interface MutOpts {
23
+ /** true = 瞬时(拖拽中间帧,不入 undo 栈) */
24
+ transient?: boolean;
25
+ }
26
+ type FilterKey = 'brightness' | 'contrast' | 'saturation' | 'temperature' | 'tint' | 'vibrance' | 'gamma' | 'highlights' | 'shadows' | 'whites' | 'blacks' | 'lightSense' | 'sharpen' | 'clarity' | 'grain' | 'fade' | 'vignette';
27
+ type EngineListener = (state: VideoEditStateWithTransitions) => void;
28
+ /** 导出计划:压缩后的状态 + 上传槽位映射(slot i 对应原 srcIdx = order[i]) */
29
+ interface ExportPlan {
30
+ state: VideoEditStateWithTransitions;
31
+ videoSrcOrder: number[];
32
+ audioSrcOrder: number[];
33
+ }
34
+ declare class VideoEditorEngine {
35
+ private history;
36
+ private videoSources;
37
+ private audioSources;
38
+ private listeners;
39
+ /** 瞬时拖拽序列的起始 base(拖拽前的提交态);null = 不在拖拽中 */
40
+ private transientBase;
41
+ constructor(initial?: VideoEditStateWithTransitions);
42
+ /** 当前编辑状态(引用稳定:仅在变更时换新对象,适配 useSyncExternalStore) */
43
+ getState(): VideoEditStateWithTransitions;
44
+ /** useSyncExternalStore 用别名 */
45
+ getSnapshot: () => VideoEditStateWithTransitions;
46
+ subscribe: (fn: EngineListener) => (() => void);
47
+ private emit;
48
+ canUndo(): boolean;
49
+ canRedo(): boolean;
50
+ undo(): void;
51
+ redo(): void;
52
+ /**
53
+ * 全部变更的唯一入口。mut 接收「计算基准态」返回新态。
54
+ * 瞬时:基准恒为 transientBase(拖拽前态),replacePresent;
55
+ * 提交:基准为 transientBase ?? present;若刚结束一段瞬时,先把 present 还原回 base 再 push,
56
+ * 使整段拖拽只占一步 undo。
57
+ */
58
+ private applyMut;
59
+ /**
60
+ * 登记一个视频源并入时间轴。首源:用其分辨率初始化 canvas 并重建 history(清空 undo);
61
+ * 后续源:追加整段 clip(pushHistory)。
62
+ */
63
+ registerVideoSource(meta: VideoSourceMeta): number;
64
+ /** 登记一个音频源并入音轨(整段、volume=1、startAt=0,clamp 后 push) */
65
+ registerAudioSource(meta: AudioSourceMeta): number;
66
+ getVideoSource(idx: number): VideoSourceMeta | undefined;
67
+ getAudioSource(idx: number): AudioSourceMeta | undefined;
68
+ /** 把已登记源再追加一段整段 clip(同源可多次引用) */
69
+ addClipFromSource(srcIdx: number): void;
70
+ splitAtPlayhead(outputTime: number): void;
71
+ removeClip(idx: number): void;
72
+ duplicateClip(idx: number): void;
73
+ reorderClips(from: number, to: number): void;
74
+ /** 拖把手改 in/out 到源时刻 srcT;拖拽中传 {transient:true},松手再调一次提交 */
75
+ trimClip(idx: number, edge: 'in' | 'out', srcT: number, opts?: MutOpts): void;
76
+ moveAudioClip(idx: number, startAt: number, opts?: MutOpts): void;
77
+ trimAudioClip(idx: number, edge: 'in' | 'out', t: number, opts?: MutOpts): void;
78
+ setAudioVolume(idx: number, volume: number, opts?: MutOpts): void;
79
+ removeAudioClip(idx: number): void;
80
+ /** 改一条音频片段并 clamp(volume 改动不需 clamp 几何,clampGeom=false 跳过) */
81
+ private patchAudio;
82
+ setCrop(crop: NonNullable<VideoEditStateWithTransitions['crop']>, opts?: MutOpts): void;
83
+ clearCrop(): void;
84
+ setScale(scale: NonNullable<VideoEditStateWithTransitions['scale']>): void;
85
+ clearScale(): void;
86
+ setRotation(deg: number, opts?: MutOpts): void;
87
+ /** 90° 步进(顺时针正);结果钳到 [-180,180] */
88
+ rotateBy(step: number): void;
89
+ flipX(): void;
90
+ flipY(): void;
91
+ setFilter(key: FilterKey, value: number, opts?: MutOpts): void;
92
+ setFilters(partial: Partial<VideoEditStateWithTransitions['filters']>, opts?: MutOpts): void;
93
+ setFilterPreset(id: string | undefined): void;
94
+ addOverlay(o: OverlayT): void;
95
+ updateOverlay(idx: number, patch: Partial<OverlayT>, opts?: MutOpts): void;
96
+ removeOverlay(idx: number): void;
97
+ /**
98
+ * 通用补丁:把 partial 浅合并进状态(UI 一次改多字段,如旋转同时重置 crop)。
99
+ * - `{transient:true}`:拖拽中间帧,基于拖拽前 base 合并、replacePresent,不入栈(= 原 patchLive)。
100
+ * - 默认:一次性提交(= commit(partial))。
101
+ */
102
+ patch(partial: Partial<VideoEditStateWithTransitions>, opts?: MutOpts): void;
103
+ /**
104
+ * 定格当前态为一步 undo(= 原 commit):保留 present(含拖拽末值),可再合并 partial;
105
+ * 若处于瞬时序列,先把 past 接到拖拽前 base 上,使整段拖拽只占一步。
106
+ */
107
+ commit(partial?: Partial<VideoEditStateWithTransitions>): void;
108
+ setKeepAudio(keep: boolean): void;
109
+ setPoster(time: number): void;
110
+ totalDuration(): number;
111
+ contentDuration(): number;
112
+ /** 输出时刻 → 所属片段与源内时刻(播放头定位) */
113
+ locate(outputTime: number): {
114
+ idx: number;
115
+ srcTime: number;
116
+ } | null;
117
+ usedVideoSources(): number[];
118
+ /**
119
+ * 生成导出计划:剔除未引用源、把 clips/audioClips 的 srcIdx 重映射到 [0..n),
120
+ * 返回压缩后的状态与上传槽位顺序(framework 按 order 取 File 上传)。
121
+ */
122
+ getExportPlan(): ExportPlan;
123
+ /** 校验当前(导出)状态是否符合 schema —— 提交前兜底 */
124
+ validate(): zod.SafeParseReturnType<{
125
+ clips: {
126
+ srcIdx: number;
127
+ in: number;
128
+ out: number;
129
+ }[];
130
+ canvas: {
131
+ w: number;
132
+ h: number;
133
+ };
134
+ rotation?: number | undefined;
135
+ audioClips?: {
136
+ srcIdx: number;
137
+ in: number;
138
+ out: number;
139
+ startAt: number;
140
+ volume: number;
141
+ }[] | undefined;
142
+ crop?: {
143
+ width: number;
144
+ x: number;
145
+ y: number;
146
+ height: number;
147
+ } | undefined;
148
+ scale?: {
149
+ width: number;
150
+ height: number;
151
+ fit: "contain" | "cover" | "force";
152
+ } | undefined;
153
+ flipX?: boolean | undefined;
154
+ flipY?: boolean | undefined;
155
+ filters?: {
156
+ brightness: number;
157
+ contrast: number;
158
+ saturation: number;
159
+ temperature?: number | undefined;
160
+ tint?: number | undefined;
161
+ vibrance?: number | undefined;
162
+ gamma?: number | undefined;
163
+ highlights?: number | undefined;
164
+ shadows?: number | undefined;
165
+ whites?: number | undefined;
166
+ blacks?: number | undefined;
167
+ lightSense?: number | undefined;
168
+ sharpen?: number | undefined;
169
+ clarity?: number | undefined;
170
+ grain?: number | undefined;
171
+ fade?: number | undefined;
172
+ vignette?: number | undefined;
173
+ } | undefined;
174
+ filterPreset?: string | undefined;
175
+ overlays?: ({
176
+ type: "pen";
177
+ points: number[];
178
+ color: string;
179
+ width: number;
180
+ rotation?: number | undefined;
181
+ } | {
182
+ type: "line";
183
+ color: string;
184
+ width: number;
185
+ x1: number;
186
+ y1: number;
187
+ x2: number;
188
+ y2: number;
189
+ rotation?: number | undefined;
190
+ } | {
191
+ type: "arrow";
192
+ color: string;
193
+ width: number;
194
+ x1: number;
195
+ y1: number;
196
+ x2: number;
197
+ y2: number;
198
+ rotation?: number | undefined;
199
+ } | {
200
+ type: "rect";
201
+ color: string;
202
+ width: number;
203
+ x: number;
204
+ y: number;
205
+ w: number;
206
+ h: number;
207
+ rotation?: number | undefined;
208
+ } | {
209
+ type: "ellipse";
210
+ color: string;
211
+ width: number;
212
+ x: number;
213
+ y: number;
214
+ w: number;
215
+ h: number;
216
+ rotation?: number | undefined;
217
+ } | {
218
+ type: "text";
219
+ color: string;
220
+ x: number;
221
+ y: number;
222
+ text: string;
223
+ fontSize: number;
224
+ rotation?: number | undefined;
225
+ } | {
226
+ type: "sticker";
227
+ x: number;
228
+ y: number;
229
+ w: number;
230
+ h: number;
231
+ rotation?: number | undefined;
232
+ emoji?: string | undefined;
233
+ src?: string | undefined;
234
+ })[] | undefined;
235
+ keepAudio?: boolean | undefined;
236
+ poster?: {
237
+ time: number;
238
+ } | undefined;
239
+ }, {
240
+ rotation: number;
241
+ clips: {
242
+ srcIdx: number;
243
+ in: number;
244
+ out: number;
245
+ }[];
246
+ audioClips: {
247
+ srcIdx: number;
248
+ in: number;
249
+ out: number;
250
+ startAt: number;
251
+ volume: number;
252
+ }[];
253
+ canvas: {
254
+ w: number;
255
+ h: number;
256
+ };
257
+ flipX: boolean;
258
+ flipY: boolean;
259
+ filters: {
260
+ brightness: number;
261
+ contrast: number;
262
+ saturation: number;
263
+ temperature: number;
264
+ tint: number;
265
+ vibrance: number;
266
+ gamma: number;
267
+ highlights: number;
268
+ shadows: number;
269
+ whites: number;
270
+ blacks: number;
271
+ lightSense: number;
272
+ sharpen: number;
273
+ clarity: number;
274
+ grain: number;
275
+ fade: number;
276
+ vignette: number;
277
+ };
278
+ keepAudio: boolean;
279
+ crop?: {
280
+ width: number;
281
+ x: number;
282
+ y: number;
283
+ height: number;
284
+ } | undefined;
285
+ scale?: {
286
+ width: number;
287
+ height: number;
288
+ fit: "contain" | "cover" | "force";
289
+ } | undefined;
290
+ filterPreset?: string | undefined;
291
+ overlays?: ({
292
+ type: "pen";
293
+ points: number[];
294
+ color: string;
295
+ width: number;
296
+ rotation?: number | undefined;
297
+ } | {
298
+ type: "line";
299
+ color: string;
300
+ width: number;
301
+ x1: number;
302
+ y1: number;
303
+ x2: number;
304
+ y2: number;
305
+ rotation?: number | undefined;
306
+ } | {
307
+ type: "arrow";
308
+ color: string;
309
+ width: number;
310
+ x1: number;
311
+ y1: number;
312
+ x2: number;
313
+ y2: number;
314
+ rotation?: number | undefined;
315
+ } | {
316
+ type: "rect";
317
+ color: string;
318
+ width: number;
319
+ x: number;
320
+ y: number;
321
+ w: number;
322
+ h: number;
323
+ rotation?: number | undefined;
324
+ } | {
325
+ type: "ellipse";
326
+ color: string;
327
+ width: number;
328
+ x: number;
329
+ y: number;
330
+ w: number;
331
+ h: number;
332
+ rotation?: number | undefined;
333
+ } | {
334
+ type: "text";
335
+ color: string;
336
+ x: number;
337
+ y: number;
338
+ text: string;
339
+ fontSize: number;
340
+ rotation?: number | undefined;
341
+ } | {
342
+ type: "sticker";
343
+ x: number;
344
+ y: number;
345
+ w: number;
346
+ h: number;
347
+ rotation?: number | undefined;
348
+ emoji?: string | undefined;
349
+ src?: string | undefined;
350
+ })[] | undefined;
351
+ poster?: {
352
+ time: number;
353
+ } | undefined;
354
+ }>;
355
+ /** 重置为给定状态(清空 history、源登记保留) */
356
+ reset(state?: VideoEditStateWithTransitions): void;
357
+ }
358
+
359
+ export { type AudioSourceMeta, type EngineListener, type ExportPlan, type FilterKey, type MutOpts, TransitionT, VideoEditStateWithTransitions, VideoEditorEngine, type VideoSourceMeta };
@@ -0,0 +1 @@
1
+ import{createHistory as h,defaultVideoEditState as p,canUndo as f,canRedo as v,undo as S,redo as C,replacePresent as c,pushHistory as l,clampAudioClip as d,totalDuration as u,splitAtOutput as A,removeClip as B,duplicateClip as g,reorderClips as x,trimClipEdge as I,contentDuration as P,locateOutput as V,usedVideoSrcIndices as y,remapSrcIndices as k,VideoEditState as w}from"./chunk-MGKYVYOH.js";function M(t){const i=Math.min(Math.max(Math.round(t),2),4096);return i%2===0?i:i-1}var m=t=>Math.min(Math.max(t,-180),180),E=class{constructor(t=p()){this.videoSources=[],this.audioSources=[],this.listeners=new Set,this.transientBase=null,this.getSnapshot=()=>this.history.present,this.subscribe=i=>(this.listeners.add(i),()=>this.listeners.delete(i)),this.history=h(t)}getState(){return this.history.present}emit(){const t=this.history.present;for(const i of this.listeners)i(t)}canUndo(){return f(this.history)}canRedo(){return v(this.history)}undo(){this.transientBase=null,this.history=S(this.history),this.emit()}redo(){this.transientBase=null,this.history=C(this.history),this.emit()}applyMut(t,i=!1){if(i)this.transientBase===null&&(this.transientBase=this.history.present),this.history=c(this.history,t(this.transientBase));else{const s=this.transientBase??this.history.present,r=t(s),e=this.transientBase?{...this.history,present:this.transientBase}:this.history;this.history=l(e,r),this.transientBase=null}this.emit()}registerVideoSource(t){const i=this.videoSources.length;this.videoSources.push(t);const s={srcIdx:i,in:0,out:t.duration};return i===0||this.history.present.clips.length===0?(this.transientBase=null,this.history=h({...p(),clips:[s],canvas:{w:M(t.width),h:M(t.height)},poster:{time:Math.min(1,t.duration/2)}}),this.emit()):this.applyMut(r=>({...r,clips:[...r.clips,s]})),i}registerAudioSource(t){const i=this.audioSources.length;return this.audioSources.push(t),this.applyMut(s=>{const r=new Set((s.audioClips??[]).map((n,a)=>Number.isInteger(n?.track)&&n.track>=0?n.track:a));let e=0;for(;r.has(e);)e+=1;const o=d({srcIdx:i,track:e,startAt:0,in:0,out:t.duration,volume:1},t.duration,u(s.clips));return{...s,audioClips:[...s.audioClips,o]}}),i}getVideoSource(t){return this.videoSources[t]}getAudioSource(t){return this.audioSources[t]}addClipFromSource(t){const i=this.videoSources[t];i&&this.applyMut(s=>({...s,clips:[...s.clips,{srcIdx:t,in:0,out:i.duration}]}))}splitAtPlayhead(t){this.applyMut(i=>({...i,clips:A(i.clips,t)}))}removeClip(t){this.applyMut(i=>({...i,clips:B(i.clips,t)}))}duplicateClip(t){this.applyMut(i=>({...i,clips:g(i.clips,t)}))}reorderClips(t,i){this.applyMut(s=>({...s,clips:x(s.clips,t,i)}))}trimClip(t,i,s,r){this.applyMut(e=>{const o=e.clips[t];if(!o)return e;const n=this.videoSources[o.srcIdx]?.duration??o.out;return{...e,clips:I(e.clips,t,i,s,n)}},r?.transient)}moveAudioClip(t,i,s){this.applyMut(r=>this.patchAudio(r,t,e=>({...e,startAt:i})),s?.transient)}trimAudioClip(t,i,s,r){this.applyMut(e=>this.patchAudio(e,t,o=>{if(i==="in"){const n=s-o.in;return{...o,in:s,startAt:o.startAt+n}}return{...o,out:s}}),r?.transient)}setAudioVolume(t,i,s){this.applyMut(r=>this.patchAudio(r,t,e=>({...e,volume:i}),!1),s?.transient)}removeAudioClip(t){this.applyMut(i=>({...i,audioClips:i.audioClips.filter((s,r)=>r!==t)}))}patchAudio(t,i,s,r=!0){const e=t.audioClips[i];if(!e)return t;let o=s(e);if(r){const n=this.audioSources[e.srcIdx]?.duration??e.out;o=d(o,n,u(t.clips))}return{...t,audioClips:t.audioClips.map((n,a)=>a===i?o:n)}}setCrop(t,i){this.applyMut(s=>({...s,crop:t}),i?.transient)}clearCrop(){this.applyMut(t=>({...t,crop:void 0}))}setScale(t){this.applyMut(i=>({...i,scale:t}))}clearScale(){this.applyMut(t=>({...t,scale:void 0}))}setRotation(t,i){this.applyMut(s=>({...s,rotation:m(t)}),i?.transient)}rotateBy(t){this.applyMut(i=>{let s=i.rotation+t;return s>180&&(s-=360),s<-180&&(s+=360),{...i,rotation:m(s)}})}flipX(){this.applyMut(t=>({...t,flipX:!t.flipX}))}flipY(){this.applyMut(t=>({...t,flipY:!t.flipY}))}setFilter(t,i,s){this.applyMut(r=>({...r,filters:{...r.filters,[t]:i}}),s?.transient)}setFilters(t,i){this.applyMut(s=>({...s,filters:{...s.filters,...t}}),i?.transient)}setFilterPreset(t){this.applyMut(i=>({...i,filterPreset:t}))}addOverlay(t){this.applyMut(i=>({...i,overlays:[...i.overlays??[],t]}))}updateOverlay(t,i,s){this.applyMut(r=>{const e=r.overlays??[];return e[t]?{...r,overlays:e.map((o,n)=>n===t?{...o,...i}:o)}:r},s?.transient)}removeOverlay(t){this.applyMut(i=>({...i,overlays:(i.overlays??[]).filter((s,r)=>r!==t)}))}patch(t,i){i?.transient?(this.transientBase===null&&(this.transientBase=this.history.present),this.history=c(this.history,{...this.transientBase,...t}),this.emit()):this.commit(t)}commit(t){const i=t?{...this.history.present,...t}:this.history.present,s=this.transientBase;this.transientBase=null,this.history=s?l({...this.history,present:s},i):l(this.history,i),this.emit()}setKeepAudio(t){this.applyMut(i=>({...i,keepAudio:t}))}setPoster(t){this.applyMut(i=>({...i,poster:{time:Math.max(0,t)}}))}totalDuration(){return u(this.history.present.clips)}contentDuration(){const t=this.history.present;return P(t.clips,t.audioClips,t.overlays)}locate(t){return V(this.history.present.clips,t)}usedVideoSources(){return y(this.history.present.clips)}getExportPlan(){const t=this.history.present,i=y(t.clips),s=[...new Set(t.audioClips.map(e=>e.srcIdx))].sort((e,o)=>e-o),r=new Map(s.map((e,o)=>[e,o]));return{state:{...t,clips:k(t.clips,i),audioClips:t.audioClips.map(e=>({...e,srcIdx:r.get(e.srcIdx)??0}))},videoSrcOrder:i,audioSrcOrder:s}}validate(){return w.safeParse(this.getExportPlan().state)}reset(t=p()){this.transientBase=null,this.history=h(t),this.emit()}};export{E as VideoEditorEngine};
@@ -0,0 +1 @@
1
+ "use strict";var T={"tool.trim":"\u526A\u8F91","tool.crop":"\u88C1\u526A","tool.tune":"\u8C03\u8272","tool.filter":"\u6EE4\u955C","tool.annotate":"\u6807\u6CE8","tool.sticker":"\u8D34\u7EB8","tool.resize":"\u6BD4\u4F8B","tune.brightness":"\u4EAE\u5EA6","tune.contrast":"\u5BF9\u6BD4","tune.saturation":"\u9971\u548C","tune.gamma":"Gamma","overlay.select":"\u9009\u62E9","overlay.pen":"\u753B\u7B14","overlay.eraser":"\u6A61\u76AE","overlay.line":"\u76F4\u7EBF","overlay.arrow":"\u7BAD\u5934","overlay.rect":"\u77E9\u5F62","overlay.ellipse":"\u692D\u5706","overlay.text":"\u6587\u5B57","overlay.color":"\u7EBF\u8272","overlay.width":"\u7EBF\u5BBD","overlay.copySelected":"\u590D\u5236","overlay.delSelected":"\u5220\u9664\u9009\u4E2D","overlay.editSelected":"\u7F16\u8F91","overlay.pickImage":"\u9009\u62E9\u56FE\u7247","overlay.hint":"\u70B9 emoji/\u56FE\u7247\u6DFB\u52A0 \u2192 \u753B\u5E03\u4E0A\u62D6\u52A8\u6446\u4F4D,\u62D6\u53F3\u4E0B\u89D2\u7D2B\u8272\u628A\u624B\u7F29\u653E","overlay.textPlaceholder":"\u8F93\u5165\u6587\u5B57,\u56DE\u8F66\u786E\u8BA4","filter.none":"\u539F\u56FE","filter.bw":"\u9ED1\u767D","filter.sepia":"\u590D\u53E4","filter.warm":"\u6696\u9633","filter.cool":"\u51B7\u8C03","filter.vivid":"\u9C9C\u8273","ratio.orig":"\u539F\u59CB","ratio.free":"\u81EA\u7531\u6BD4\u4F8B","ratio.9:16":"\u7AD6\u5C4F 9:16","ratio.16:9":"\u6A2A\u5C4F 16:9","ratio.1:1":"\u65B9\u5F62 1:1","ratio.4:5":"\u7AD6\u56FE 4:5","act.fit":"\u9002\u5E94","act.zoomFit":"\u7F29\u653E\u81F3\u9002\u5F53\u5927\u5C0F","act.zoomTo":"\u7F29\u653E\u81F3 {value}%","act.split":"\u5206\u5272","act.copy":"\u590D\u5236","act.delete":"\u5220\u9664","act.restore":"\u8FD8\u539F","act.deleteMusic":"\u5220\u9664\u97F3\u4E50","act.cancel":"\u53D6\u6D88","act.exportPoster":"\u5BFC\u51FA\u5C01\u9762","act.exporting":"\u5BFC\u51FA\u4E2D\u2026","act.poster":"\u{1F5BC} \u5C01\u9762","act.again":"\u518D\u6B21\u4E0B\u8F7D","act.saveDrive":"\u5B58\u7F51\u76D8","act.changeImage":"\u2190 \u6362\u4E00\u5F20","act.changeVideo":"\u2190 \u6362\u4E00\u4E2A","crop.rotateLeft":"\u21BA \u5411\u5DE6\u65CB\u8F6C","crop.flipX":"\u21CB \u6C34\u5E73\u7FFB\u8F6C","crop.flipY":"\u21F5 \u5782\u76F4\u7FFB\u8F6C","crop.rotateLeftShort":"\u5DE6\u8F6C","crop.flipXShort":"\u6A2A\u7FFB","crop.flipYShort":"\u7AD6\u7FFB","tip.close":"\u5173\u95ED(\u6362\u6587\u4EF6)","tip.undo":"\u64A4\u9500","tip.redo":"\u91CD\u505A","tip.resetOpened":"\u91CD\u7F6E\u5230\u6253\u5F00\u6587\u4EF6\u65F6","tip.previewZoom":"\u9884\u89C8\u7F29\u653E\u6BD4\u4F8B","tip.previewZoomOut":"\u7F29\u5C0F\u9884\u89C8","tip.previewZoomIn":"\u653E\u5927\u9884\u89C8","tip.previewZoomFit":"\u9002\u5E94\u9884\u89C8","tip.previewPointer":"\u6307\u9488\u5DE5\u5177","tip.previewPan":"\u624B\u5DE5\u5177\uFF1A\u62D6\u52A8\u753B\u9762","tip.poster":"\u9884\u89C8\u5E76\u9009\u62E9\u5C01\u9762\u5E27","tip.keepAudio":"\u539F\u89C6\u9891\u58F0\u97F3\u5F00\u5173(\u4E0E\u97F3\u4E50\u6DF7\u97F3;\u9884\u89C8\u540C\u6B65)","tip.split":"\u5728\u64AD\u653E\u5934\u5904\u628A\u5F53\u524D\u7247\u6BB5\u4E00\u5206\u4E3A\u4E8C","tip.zoomOut":"\u7F29\u5C0F\u65F6\u95F4\u8F74(Ctrl+\u6EDA\u8F6E)","tip.zoomIn":"\u653E\u5927\u65F6\u95F4\u8F74(Ctrl+\u6EDA\u8F6E)","tip.fit":"\u7F29\u653E\u5230\u9002\u5E94\u5BBD\u5EA6","tip.addVideo":"\u6DFB\u52A0\u89C6\u9891\u7247\u6BB5","tip.addAudio":"\u6DFB\u52A0\u97F3\u4E50(\u97F3\u9891\u6587\u4EF6,\u6216\u9009\u542B\u58F0\u97F3\u7684\u89C6\u9891\u81EA\u52A8\u63D0\u53D6\u97F3\u8F68;\u4E0E\u539F\u58F0\u6DF7\u97F3)","tip.dupClip":"\u590D\u5236\u8BE5\u7247\u6BB5(\u63D2\u5230\u5176\u540E)","tip.delClip":"\u5220\u9664\u8BE5\u7247\u6BB5","tip.lockAspect":"\u9501\u5B9A\u7EB5\u6A2A\u6BD4","tip.dblConfirm":"\u53CC\u51FB\u786E\u8BA4\u88C1\u526A","err.notVideo":"\u8BF7\u9009\u62E9\u89C6\u9891\u6587\u4EF6","err.maxVideo":"\u6700\u591A {max} \u4E2A\u89C6\u9891\u7D20\u6750","err.videoLoad":"\u89C6\u9891\u52A0\u8F7D\u5931\u8D25,\u8BF7\u6362\u4E00\u4E2A\u6587\u4EF6","err.notAudio":"\u8BF7\u9009\u62E9\u97F3\u9891\u6587\u4EF6(mp3/wav/m4a),\u6216\u542B\u58F0\u97F3\u7684\u89C6\u9891(\u81EA\u52A8\u63D0\u53D6\u97F3\u8F68)","err.maxAudio":"\u6700\u591A {max} \u4E2A\u97F3\u9891\u7D20\u6750","err.audioLoad":"\u97F3\u9891\u52A0\u8F7D\u5931\u8D25,\u8BF7\u6362\u4E00\u4E2A\u6587\u4EF6","err.processFailed":"\u5904\u7406\u5931\u8D25","err.posterFailed":"\u5C01\u9762\u6E32\u67D3\u5931\u8D25","err.canvas":"canvas \u4E0D\u53EF\u7528","err.imageRead":"\u56FE\u7247\u8BFB\u53D6\u5931\u8D25,\u8BF7\u6362\u4E00\u5F20","err.notImage":"\u8BF7\u9009\u62E9\u56FE\u7247\u6587\u4EF6","err.fileType":"\u53EA\u652F\u6301\u56FE\u7247\u6216\u89C6\u9891\u6587\u4EF6","err.saveDrive":"\u5B58\u7F51\u76D8\u5931\u8D25","msg.processing":"\u6B63\u5728\u5BFC\u51FA\u4E2D\u2026","msg.exportingHint":"\u8BF7\u7A0D\u5019\uFF0C\u5BFC\u51FA\u5B8C\u6210\u540E\u4F1A\u81EA\u52A8\u8FD4\u56DE\u7ED3\u679C\u3002","msg.done":"\u5B8C\u6210 \u2713","msg.loading":"\u7D20\u6750\u52A0\u8F7D\u4E2D\u2026","msg.exported":"\u5DF2\u5BFC\u51FA\uFF1A","msg.saving":"\u5B58\u7F51\u76D8\u4E2D\u2026","msg.saved":"\u5DF2\u5B58\u5230\u7F51\u76D8 \u2713","lbl.ratioSection":"\u753B\u9762\u6BD4\u4F8B(\u88C1\u526A,\u4E0D\u53D8\u5F62)","lbl.dragToReposition":"\u2194 \u62D6\u52A8\u9884\u89C8\u53EF\u8C03\u6574\u88C1\u526A\u4F4D\u7F6E","lbl.sizeSection":"\u5BFC\u51FA\u5C3A\u5BF8(\u50CF\u7D20;\u6BD4\u4F8B\u4E0D\u7B26\u65F6 cover \u5C45\u4E2D\u88C1\u526A)","lbl.currentOut":"\u5F53\u524D\u8F93\u51FA","lbl.zoomSize":"\u5927\u5C0F","lbl.noScale":"(\u672A\u7F29\u653E)","lbl.coverNote":"\xB7 \u6BD4\u4F8B\u4E0D\u4E00\u81F4\u65F6\u5C45\u4E2D\u88C1\u526A(cover),\u4E0D\u53D8\u5F62","lbl.audioTrackHint":"\u266A \u97F3\u9891\u8F68(\u53F3\u4FA7 \uFF0B \u6DFB\u52A0\u97F3\u4E50,\u4E0E\u539F\u58F0\u6DF7\u97F3)","lbl.volume":"\u97F3\u91CF","lbl.volNote":"(\u9884\u89C8\u6700\u5927 100%,\u5BFC\u51FA\u6309\u8BBE\u5B9A\u503C)","lbl.music":"\u97F3\u4E50","kbd.fit":"\u21E7 F","poster.title":"\u9009\u62E9\u5C01\u9762\u5E27","panel.title":"\u5A92\u4F53\u7F16\u8F91\u5668","panel.subtitle":"\u4E0A\u4F20\u56FE\u7247 / \u89C6\u9891\uFF0C\u88C1\u526A \xB7 \u6EE4\u955C \xB7 \u6587\u5B57 \xB7 \u5BFC\u51FA","panel.pick":"\u70B9\u51FB\u9009\u62E9\u56FE\u7247\u6216\u89C6\u9891","panel.pickHint":"\u56FE\u7247\u7528 Filerobot \xB7 \u89C6\u9891\u53EF\u88C1\u526A/\u9759\u97F3/\u5C01\u9762"},h={\u7B80:"\u7C21",\u4F53:"\u9AD4",\u56FE:"\u5716",\u9891:"\u983B",\u89C6:"\u8996",\u8F91:"\u8F2F",\u8C03:"\u8ABF",\u6EE4:"\u6FFE",\u6807:"\u6A19",\u6CE8:"\u8A3B",\u8D34:"\u8CBC",\u9009:"\u9078",\u62E9:"\u64C7",\u7EBF:"\u7DDA",\u7BAD:"\u7BAD",\u5934:"\u982D",\u590D:"\u8907",\u5220:"\u522A",\u9664:"\u9664",\u7F16:"\u7DE8",\u8FB9:"\u908A",\u8F93:"\u8F38",\u5165:"\u5165",\u786E:"\u78BA",\u8BA4:"\u8A8D",\u9971:"\u98FD",\u5BF9:"\u5C0D",\u6696:"\u6696",\u9633:"\u967D",\u51B7:"\u51B7",\u7EB5:"\u7E31",\u6A2A:"\u6A6B",\u9002:"\u9069",\u5E94:"\u61C9",\u7F29:"\u7E2E",\u5B9E:"\u5BE6",\u9645:"\u969B",\u5BFC:"\u5C0E",\u51FA:"\u51FA",\u5C01:"\u5C01",\u9762:"\u9762",\u6362:"\u63DB",\u5F20:"\u5F35",\u9884:"\u9810",\u89C8:"\u89BD",\u52A8:"\u52D5",\u58F0:"\u8072",\u5F00:"\u958B",\u5173:"\u95DC",\u4E0E:"\u8207",\u4E50:"\u6A02",\u6DF7:"\u6DF7",\u5904:"\u8655",\u8F7D:"\u8F09",\u9519:"\u932F",\u8BEF:"\u8AA4",\u8BFB:"\u8B80",\u4EC5:"\u50C5",\u7EC8:"\u7D42",\u7A0D:"\u7A0D",\u5019:"\u5019",\u8FD4\u56DE:"\u8FD4\u56DE",\u5F53\u524D:"\u76EE\u524D",\u8F93\u51FA:"\u8F38\u51FA",\u753B:"\u756B",\u53D8:"\u8B8A",\u97F3\u9891:"\u97F3\u8A0A",\u97F3\u8F68:"\u97F3\u8ECC",\u6DFB\u52A0:"\u65B0\u589E",\u5220\u9664:"\u522A\u9664",\u4FDD\u5B58:"\u5132\u5B58",\u52A0\u8F7D:"\u8F09\u5165",\u7F51\u76D8:"\u7DB2\u76E4"},m=u=>{let o=u;for(const[a,e]of Object.entries(h).sort((t,i)=>i[0].length-t[0].length))o=o.replaceAll(a,e);return o};Object.fromEntries(Object.entries(T).map(([u,o])=>[u,m(o)]));var c=[{platform:"tiktok",postType:"video",label:"TikTok Video",shortLabel:"TT\xB7Video",ratio:"9:16",imageSize:"1440x2560",videoRatio:"9:16",videoResolution:"720p"},{platform:"instagram",postType:"post",label:"Instagram Post",shortLabel:"IG\xB7Post",ratio:"1:1",imageSize:"2048x2048"},{platform:"instagram",postType:"reels",label:"Instagram Reels",shortLabel:"IG\xB7Reels",ratio:"9:16",imageSize:"1440x2560",videoRatio:"9:16",videoResolution:"720p"},{platform:"instagram",postType:"story",label:"Instagram Story",shortLabel:"IG\xB7Story",ratio:"9:16",imageSize:"1440x2560",videoRatio:"9:16",videoResolution:"720p"},{platform:"facebook",postType:"post",label:"Facebook Post",shortLabel:"FB\xB7Post",ratio:"1:1",imageSize:"2048x2048"},{platform:"facebook",postType:"reels",label:"Facebook Reels",shortLabel:"FB\xB7Reels",ratio:"9:16",imageSize:"1440x2560",videoRatio:"9:16",videoResolution:"720p"},{platform:"youtube",postType:"video",label:"YouTube Video",shortLabel:"YT\xB7Video",ratio:"16:9",imageSize:"2560x1440",videoRatio:"16:9",videoResolution:"1080p"},{platform:"youtube",postType:"shorts",label:"YouTube Shorts",shortLabel:"YT\xB7Shorts",ratio:"9:16",imageSize:"1440x2560",videoRatio:"9:16",videoResolution:"720p"},{platform:"pinterest",postType:"pin",label:"Pinterest Pin",shortLabel:"PIN",ratio:"2:3",imageSize:"1664x2496",videoRatio:"9:16",videoResolution:"720p"},{platform:"x",postType:"post",label:"X Post",shortLabel:"X\xB7Post",ratio:"16:9",imageSize:"2560x1440",videoRatio:"16:9",videoResolution:"720p"},{platform:"linkedin",postType:"post",label:"LinkedIn Post",shortLabel:"LI\xB7Post",ratio:"1:1",imageSize:"2048x2048"},{platform:"linkedin",postType:"video",label:"LinkedIn Video",shortLabel:"LI\xB7Video",ratio:"16:9",imageSize:"2560x1440",videoRatio:"16:9",videoResolution:"1080p"},{platform:"threads",postType:"post",label:"Threads Post",shortLabel:"TH\xB7Post",ratio:"1:1",imageSize:"2048x2048"},{platform:"telegram",postType:"post",label:"Telegram Post",shortLabel:"TG\xB7Post",ratio:"1:1",imageSize:"2048x2048",videoRatio:"9:16",videoResolution:"720p"},{platform:"reddit",postType:"post",label:"Reddit Post",shortLabel:"RD\xB7Post",ratio:"16:9",imageSize:"2560x1440",videoRatio:"16:9",videoResolution:"720p"}],x={"1:1":"\u65B9\u5F62 1:1","4:5":"\u7AD6\u56FE 4:5","3:4":"\u7AD6\u56FE 3:4","9:16":"\u7AD6\u5C4F 9:16","16:9":"\u6A2A\u5C4F 16:9","2:3":"\u7AD6\u56FE 2:3","1.91:1":"\u6A2A\u5E45 1.91:1"};function s(u){const[o,a]=u.split(":").map(Number);return!o||!a?1:o/a}function B(u){const o=new Set,a=[];for(const e of u)!e||o.has(e)||(o.add(e),a.push({ratio:e,value:s(e),label:x[e]??e}));return a}B(["1:1","4:5","3:4","2:3","9:16","16:9","1.91:1"]),B(["9:16","16:9","1:1","4:5"]);function y(u=c){const o=new Set,a=[];for(const e of u){if(!e.videoRatio)continue;const t=`${e.platform}:${e.postType}:${e.videoRatio}`;if(o.has(t))continue;o.add(t);const i=e.label.split(" ").slice(0,-1).join(" ")||e.label;a.push({platform:e.platform,postType:e.postType,label:`${i} ${e.videoRatio}`,ratio:e.videoRatio,value:s(e.videoRatio)})}return a}y();function R(u=c){const o=new Map;for(const a of u){const e=o.get(a.platform);(!e||e.postType!=="post"&&a.postType==="post")&&o.set(a.platform,a)}return Array.from(o.values()).map(a=>{const[e,t]=a.imageSize.split("x").map(Number),i=a.label.split(" ").slice(0,-1).join(" ")||a.label;return{platform:a.platform,label:`${i} ${a.ratio}`,ratio:a.ratio,value:s(a.ratio),w:e,h:t}})}var E=R();function I(u,o){return u>=1?{w:Math.round(o*u/2)*2,h:o}:{w:o,h:Math.round(o/u/2)*2}}function S(u=c){const o=new Set,a=[];for(const e of u){if(!e.videoRatio||!e.videoResolution)continue;const t=e.videoResolution==="1080p"?1080:720,{w:i,h:r}=I(s(e.videoRatio),t),l=`${i}x${r}`;o.has(l)||(o.add(l),a.push({label:`${e.shortLabel} ${i}\xD7${r}`,w:i,h:r}))}return a}S();function z(u,o){if(u.isDuplicated)return{};if((u.rotation??0)!==0)return{};const a=o.adjustments?.rotation??0;return a?{rotation:-a}:{}}var A={"txt-primary":"#f1f1f4","txt-secondary":"#b6bac4","txt-secondary-invert":"#14141a","txt-placeholder":"#7c818c","txt-warning":"#fbbf24","txt-error":"#f87171","txt-info":"#7cc4f5","icon-primary":"#d6d8e0","icons-secondary":"#9aa0ac","icons-muted":"#7c818c","icons-placeholder":"#3a3a44","icons-invert":"#14141a","icons-primary-hover":"#ffffff","icons-secondary-hover":"#d6d8e0","bg-primary":"#14141a","bg-primary-light":"#1a1a22","bg-primary-hover":"#20202a","bg-primary-active":"#2a2a38","bg-primary-stateless":"#20202a","bg-secondary":"#1a1a22","bg-stateless":"#1a1a22","bg-active":"#262633","bg-hover":"#20202a","bg-grey":"#23232e","bg-base-light":"#23232e","bg-base-medium":"#2a2a38","bg-tooltip":"#2a2a33","accent-primary":"#7C7CF0","accent-primary-hover":"#8F8FF5","accent-primary-active":"#6A6AE8","accent-stateless":"#7C7CF0","btn-primary-text":"#ffffff","btn-secondary-text":"#f1f1f4","btn-disabled-text":"#6a6a72","link-primary":"#c4c4cc","link-stateless":"#c4c4cc","link-hover":"#ffffff","link-active":"#ffffff","borders-primary":"#2e2e3a","borders-primary-hover":"#4a4a58","borders-secondary":"#26262f","borders-strong":"#3a3a46","borders-invert":"#d6d8e0","borders-item":"#26262f","borders-button":"#3a3a46","active-secondary":"#1f1f29","active-secondary-hover":"rgba(124,124,240,0.16)",tag:"#9aa0ac","light-shadow":"rgba(0,0,0,0.4)","medium-shadow":"rgba(0,0,0,0.5)"},D={"txt-primary":"#0a0a0a","txt-secondary":"#52525b","txt-secondary-invert":"#ffffff","txt-placeholder":"#a1a1aa","txt-warning":"#b45309","txt-error":"#dc2626","txt-info":"#2563eb","icon-primary":"#3f3f46","icons-secondary":"#71717a","icons-muted":"#a1a1aa","icons-placeholder":"#d4d4d8","icons-invert":"#ffffff","icons-primary-hover":"#0a0a0a","icons-secondary-hover":"#3f3f46","bg-primary":"#ffffff","bg-primary-light":"#fafafa","bg-primary-hover":"#f4f4f5","bg-primary-active":"#e4e4e7","bg-primary-stateless":"#f4f4f5","bg-secondary":"#fafafa","bg-stateless":"#fafafa","bg-active":"#ededfb","bg-hover":"#f4f4f5","bg-grey":"#f1f1f3","bg-base-light":"#f4f4f5","bg-base-medium":"#e4e4e7","bg-tooltip":"#18181b","accent-primary":"#5B5BD6","accent-primary-hover":"#4F4FC9","accent-primary-active":"#4444B8","accent-stateless":"#5B5BD6","btn-primary-text":"#ffffff","btn-secondary-text":"#0a0a0a","btn-disabled-text":"#a1a1aa","link-primary":"#5B5BD6","link-stateless":"#5B5BD6","link-hover":"#4444B8","link-active":"#4444B8","borders-primary":"#e6e6e8","borders-primary-hover":"#d4d4d8","borders-secondary":"#ededf0","borders-strong":"#d4d4d8","borders-invert":"#3f3f46","borders-item":"#ededf0","borders-button":"#d4d4d8","active-secondary":"#ededfb","active-secondary-hover":"rgba(91,91,214,0.10)",tag:"#71717a","light-shadow":"rgba(0,0,0,0.06)","medium-shadow":"rgba(0,0,0,0.12)"},p={name:"\u540D\u79F0",save:"\u4FDD\u5B58",saveAs:"\u53E6\u5B58\u4E3A",back:"\u8FD4\u56DE",loading:"\u52A0\u8F7D\u4E2D\u2026",resetOperations:"\u91CD\u7F6E/\u6E05\u9664\u5168\u90E8\u64CD\u4F5C",changesLoseWarningHint:"\u6309\u4E0B\u300C\u91CD\u7F6E\u300D\u5C06\u4E22\u5931\u6240\u6709\u4FEE\u6539,\u786E\u5B9A\u7EE7\u7EED\u5417?",discardChangesWarningHint:"\u5173\u95ED\u5F39\u7A97\u540E,\u6700\u540E\u7684\u4FEE\u6539\u5C06\u4E0D\u4F1A\u4FDD\u5B58\u3002",cancel:"\u53D6\u6D88",apply:"\u5E94\u7528",warning:"\u8B66\u544A",confirm:"\u786E\u8BA4",discardChanges:"\u653E\u5F03\u4FEE\u6539",undoTitle:"\u64A4\u9500\u4E0A\u4E00\u6B65",redoTitle:"\u91CD\u505A\u4E0A\u4E00\u6B65",showImageTitle:"\u663E\u793A\u539F\u56FE",zoomInTitle:"\u653E\u5927",fitTitle:"\u9002\u5E94",zoomOutTitle:"\u7F29\u5C0F",toggleZoomMenuTitle:"\u7F29\u653E\u83DC\u5355",pointerToolTitle:"\u6307\u9488\u5DE5\u5177",panToolTitle:"\u624B\u5DE5\u5177\uFF1A\u62D6\u52A8\u753B\u9762",adjustTab:"\u8C03\u6574",finetuneTab:"\u5FAE\u8C03",filtersTab:"\u6EE4\u955C",watermarkTab:"\u6C34\u5370",annotateTabLabel:"\u6807\u6CE8",resize:"\u8C03\u6574\u5C3A\u5BF8",resizeTab:"\u5C3A\u5BF8",imageName:"\u56FE\u7247\u540D\u79F0",invalidImageError:"\u63D0\u4F9B\u7684\u56FE\u7247\u65E0\u6548\u3002",uploadImageError:"\u4E0A\u4F20\u56FE\u7247\u51FA\u9519\u3002",areNotImages:"\u4E0D\u662F\u56FE\u7247",isNotImage:"\u4E0D\u662F\u56FE\u7247",toBeUploaded:"\u5F85\u4E0A\u4F20",cropTool:"\u88C1\u526A",original:"\u539F\u59CB",custom:"\u81EA\u5B9A\u4E49",square:"\u65B9\u5F62",landscape:"\u6A2A\u5411",portrait:"\u7EB5\u5411",ellipse:"\u692D\u5706",classicTv:"\u7ECF\u5178\u7535\u89C6",cinemascope:"\u5BBD\u94F6\u5E55",arrowTool:"\u7BAD\u5934",blurTool:"\u6A21\u7CCA",brightnessTool:"\u4EAE\u5EA6",contrastTool:"\u5BF9\u6BD4\u5EA6",ellipseTool:"\u692D\u5706",unFlipX:"\u53D6\u6D88\u6C34\u5E73\u7FFB\u8F6C",flipX:"\u6C34\u5E73\u7FFB\u8F6C",unFlipY:"\u53D6\u6D88\u5782\u76F4\u7FFB\u8F6C",flipY:"\u5782\u76F4\u7FFB\u8F6C",hsvTool:"HSV",hue:"\u8272\u76F8",brightness:"\u4EAE\u5EA6",saturation:"\u9971\u548C\u5EA6",value:"\u660E\u5EA6",imageTool:"\u56FE\u7247",importing:"\u5BFC\u5165\u4E2D\u2026",addImage:"\u6DFB\u52A0\u56FE\u7247",uploadImage:"\u4E0A\u4F20\u56FE\u7247",fromGallery:"\u4ECE\u56FE\u5E93",lineTool:"\u76F4\u7EBF",penTool:"\u753B\u7B14",polygonTool:"\u591A\u8FB9\u5F62",sides:"\u8FB9\u6570",rectangleTool:"\u77E9\u5F62",cornerRadius:"\u5706\u89D2",resizeWidthTitle:"\u5BBD\u5EA6(\u50CF\u7D20)",resizeHeightTitle:"\u9AD8\u5EA6(\u50CF\u7D20)",toggleRatioLockTitle:"\u9501\u5B9A/\u89E3\u9501\u6BD4\u4F8B",resetSize:"\u91CD\u7F6E\u4E3A\u539F\u56FE\u5C3A\u5BF8",rotateTool:"\u65CB\u8F6C",textTool:"\u6587\u5B57",textSpacings:"\u6587\u5B57\u95F4\u8DDD",textAlignment:"\u6587\u5B57\u5BF9\u9F50",fontFamily:"\u5B57\u4F53",size:"\u5927\u5C0F",letterSpacing:"\u5B57\u95F4\u8DDD",lineHeight:"\u884C\u9AD8",warmthTool:"\u8272\u6E29",addWatermark:"\u6DFB\u52A0\u6C34\u5370",addTextWatermark:"\u6DFB\u52A0\u6587\u5B57\u6C34\u5370",addWatermarkTitle:"\u9009\u62E9\u6C34\u5370\u7C7B\u578B",uploadWatermark:"\u4E0A\u4F20\u6C34\u5370",addWatermarkAsText:"\u4EE5\u6587\u5B57\u6DFB\u52A0",padding:"\u5185\u8FB9\u8DDD",paddings:"\u5185\u8FB9\u8DDD",shadow:"\u9634\u5F71",horizontal:"\u6C34\u5E73",vertical:"\u5782\u76F4",blur:"\u6A21\u7CCA",opacity:"\u4E0D\u900F\u660E\u5EA6",transparency:"\u900F\u660E\u5EA6",position:"\u4F4D\u7F6E",stroke:"\u63CF\u8FB9",saveAsModalTitle:"\u53E6\u5B58\u4E3A",extension:"\u6269\u5C55\u540D",format:"\u683C\u5F0F",nameIsRequired:"\u540D\u79F0\u5FC5\u586B\u3002",quality:"\u8D28\u91CF",imageDimensionsHoverTitle:"\u4FDD\u5B58\u56FE\u7247\u5C3A\u5BF8(\u5BBD \xD7 \u9AD8)",cropSizeLowerThanResizedWarning:"\u6CE8\u610F:\u6240\u9009\u88C1\u526A\u533A\u57DF\u5C0F\u4E8E\u5DF2\u5E94\u7528\u7684\u8C03\u6574\u5C3A\u5BF8,\u53EF\u80FD\u5BFC\u81F4\u753B\u8D28\u4E0B\u964D",actualSize:"\u5B9E\u9645\u5927\u5C0F(100%)",fitSize:"\u9002\u5E94\u5927\u5C0F",addImageTitle:"\u9009\u62E9\u8981\u6DFB\u52A0\u7684\u56FE\u7247\u2026",mutualizedFailedToLoadImg:"\u56FE\u7247\u52A0\u8F7D\u5931\u8D25\u3002",tabsMenu:"\u83DC\u5355",download:"\u4E0B\u8F7D",width:"\u5BBD\u5EA6",height:"\u9AD8\u5EA6",cropItemNoEffect:"\u8BE5\u88C1\u526A\u9879\u65E0\u9884\u89C8",px:"px",invalidTextContent:"\u6587\u5B57\u5185\u5BB9\u65E0\u6548",baselineShift:"\u57FA\u7EBF\u504F\u79FB",aiTab:"AI \u5DE5\u5177",objectRemovalTool:"\u5BF9\u8C61\u79FB\u9664",objectRemovalBrushSize:"\u753B\u7B14\u5927\u5C0F(px)",objectRemovalApplyButton:"\u5E94\u7528",objectRemovalBrushMode:"\u753B\u7B14\u6A21\u5F0F",objectRemovalBrushCircleType:"\u5706\u5F62\u753B\u7B14",objectRemovalBrushSquareType:"\u65B9\u5F62\u753B\u7B14",objectRemovalApplyingText:"\u6B63\u5728\u79FB\u9664\u6240\u9009\u533A\u57DF",objectRemovalMarkModeTooltip:"\u6807\u8BB0\u6A21\u5F0F",objectRemovalUnMarkModeTooltip:"\u53D6\u6D88\u6807\u8BB0\u6A21\u5F0F",objectRemovalCancelConfirmationTitle:"\u53D6\u6D88\u5904\u7406",objectRemovalCancelConfirmationHint:"\u786E\u5B9A\u8981\u53D6\u6D88\u79FB\u9664\u4EE5\u4E0B\u7D20\u6750\u4E2D\u7684\u5BF9\u8C61:",objectRemovalCancelConfirmationHintCompletion:"?",theKeyword:"\u8BE5"},f={name:"Nombre",save:"Guardar",saveAs:"Guardar como",back:"Volver",loading:"Cargando\u2026",resetOperations:"Restablecer / borrar cambios",changesLoseWarningHint:"Al pulsar \u201CRestablecer\u201D se perder\xE1n todos los cambios. \xBFContinuar?",discardChangesWarningHint:"Al cerrar el cuadro, los \xFAltimos cambios no se guardar\xE1n.",cancel:"Cancelar",apply:"Aplicar",warning:"Advertencia",confirm:"Confirmar",discardChanges:"Descartar cambios",undoTitle:"Deshacer",redoTitle:"Rehacer",showImageTitle:"Mostrar original",zoomInTitle:"Ampliar",fitTitle:"Ajustar",zoomOutTitle:"Reducir",toggleZoomMenuTitle:"Men\xFA de zoom",pointerToolTitle:"Herramienta de puntero",panToolTitle:"Mano: desplazar lienzo",adjustTab:"Ajustar",finetuneTab:"Ajustes finos",filtersTab:"Filtros",watermarkTab:"Marca de agua",annotateTabLabel:"Anotar",resize:"Redimensionar",resizeTab:"Tama\xF1o",imageName:"Nombre de imagen",invalidImageError:"La imagen proporcionada no es v\xE1lida.",uploadImageError:"Error al subir la imagen.",areNotImages:"No son im\xE1genes",isNotImage:"No es una imagen",toBeUploaded:"Pendiente de subir",cropTool:"Recortar",original:"Original",custom:"Personalizado",square:"Cuadrado",landscape:"Horizontal",portrait:"Vertical",ellipse:"Elipse",classicTv:"TV cl\xE1sica",cinemascope:"Cinemascope",arrowTool:"Flecha",blurTool:"Desenfoque",brightnessTool:"Brillo",contrastTool:"Contraste",ellipseTool:"Elipse",unFlipX:"Quitar volteo horizontal",flipX:"Voltear horizontal",unFlipY:"Quitar volteo vertical",flipY:"Voltear vertical",hsvTool:"HSV",hue:"Matiz",brightness:"Brillo",saturation:"Saturaci\xF3n",value:"Valor",imageTool:"Imagen",importing:"Importando\u2026",addImage:"A\xF1adir imagen",uploadImage:"Subir imagen",fromGallery:"Desde galer\xEDa",lineTool:"L\xEDnea",penTool:"Pincel",polygonTool:"Pol\xEDgono",sides:"Lados",rectangleTool:"Rect\xE1ngulo",cornerRadius:"Radio de esquina",resizeWidthTitle:"Ancho (px)",resizeHeightTitle:"Alto (px)",toggleRatioLockTitle:"Bloquear/desbloquear proporci\xF3n",resetSize:"Restablecer tama\xF1o original",rotateTool:"Rotar",textTool:"Texto",textSpacings:"Espaciado de texto",textAlignment:"Alineaci\xF3n de texto",fontFamily:"Fuente",size:"Tama\xF1o",letterSpacing:"Espaciado",lineHeight:"Altura de l\xEDnea",warmthTool:"Temperatura",addWatermark:"A\xF1adir marca de agua",addTextWatermark:"A\xF1adir marca de texto",addWatermarkTitle:"Elegir tipo de marca",uploadWatermark:"Subir marca de agua",addWatermarkAsText:"A\xF1adir como texto",padding:"Relleno",paddings:"Relleno",shadow:"Sombra",horizontal:"Horizontal",vertical:"Vertical",blur:"Desenfoque",opacity:"Opacidad",transparency:"Transparencia",position:"Posici\xF3n",stroke:"Trazo",saveAsModalTitle:"Guardar como",extension:"Extensi\xF3n",format:"Formato",nameIsRequired:"El nombre es obligatorio.",quality:"Calidad",imageDimensionsHoverTitle:"Tama\xF1o guardado (ancho \xD7 alto)",cropSizeLowerThanResizedWarning:"Nota: el \xE1rea recortada es menor que el tama\xF1o ajustado y puede reducir la calidad",actualSize:"Tama\xF1o real (100%)",fitSize:"Ajustar tama\xF1o",addImageTitle:"Elegir imagen para a\xF1adir\u2026",mutualizedFailedToLoadImg:"No se pudo cargar la imagen.",tabsMenu:"Men\xFA",download:"Descargar",width:"Ancho",height:"Alto",cropItemNoEffect:"Este recorte no tiene vista previa",px:"px",invalidTextContent:"Contenido de texto no v\xE1lido",baselineShift:"Desplazamiento de l\xEDnea base",aiTab:"Herramientas IA",objectRemovalTool:"Eliminar objeto",objectRemovalBrushSize:"Tama\xF1o de pincel (px)",objectRemovalApplyButton:"Aplicar",objectRemovalBrushMode:"Modo pincel",objectRemovalBrushCircleType:"Pincel circular",objectRemovalBrushSquareType:"Pincel cuadrado",objectRemovalApplyingText:"Eliminando el \xE1rea seleccionada",objectRemovalMarkModeTooltip:"Modo marcar",objectRemovalUnMarkModeTooltip:"Modo desmarcar",objectRemovalCancelConfirmationTitle:"Cancelar proceso",objectRemovalCancelConfirmationHint:"\xBFSeguro que quieres cancelar la eliminaci\xF3n del objeto en:",objectRemovalCancelConfirmationHintCompletion:"?",theKeyword:"este"},b=Object.fromEntries(Object.entries(p).map(([u,o])=>[u,m(o)])),k={zh:p,es:f,"zh-Hant":b},g=["Adjust","Annotate","Watermark","Filters","Finetune","Resize"];function C(u=E,o){return u.map((a,e)=>{const t={titleKey:a.label,descriptionKey:a.ratio,ratio:a.value+(e+1)*1e-6};return o&&(t.icon=o(a.value)),t})}function v(u,o=E,a={}){return{...a,...Object.fromEntries(o.flatMap(e=>[[e.label,e.label],[e.ratio,e.ratio]])),...k[u]??{}}}function P(u){const o=u.locale??"zh",a=u.platformPresets??E,e=v(o,a,u.baseTranslations),t=u.themeMode??"dark",i=t==="light"?D:A,r=i["accent-primary"],l=t==="light"?"#18181b":"#ffffff",F={fill:t==="light"?"rgba(91,91,214,0.28)":"rgba(124,124,240,0.35)",stroke:r,strokeWidth:2},d={stroke:r,strokeWidth:4},n={useBackendTranslations:!1,source:u.source,tabsIds:[...g],defaultTabId:"Adjust",defaultToolId:"Crop",Crop:{presetsItems:C(a,u.renderRatioIcon)},savingPixelRatio:u.savingPixelRatio??4,previewPixelRatio:u.previewPixelRatio??2,language:"en",translations:e,defaultSavedImageType:"jpeg",defaultSavedImageQuality:.92,defaultSavedImageName:"image",onBeforeSave:()=>!1,annotationsCommon:{fill:l},Rect:{...F},Ellipse:{...F},Polygon:{...F},Text:{fontSize:30},Line:{...d},Arrow:{...d},Pen:{...d},theme:{palette:{...i,...u.theme?.palette},typography:{fontFamily:'-apple-system, BlinkMacSystemFont, "PingFang SC", "Microsoft YaHei", sans-serif',...u.theme?.typography}},onAnnotationAdd:z};return u.loadableDesignState!==void 0&&(n.loadableDesignState=u.loadableDesignState),u.onSave&&(n.onSave=u.onSave),u.onClose&&(n.onClose=u.onClose),n}exports.FIE_ES=f,exports.FIE_ZH=p,exports.FIE_ZH_HANT=b,exports.IMAGE_EDITOR_DARK_PALETTE=A,exports.IMAGE_EDITOR_LIGHT_PALETTE=D,exports.IMAGE_EDITOR_TABS=g,exports.buildCropPresetItems=C,exports.buildImageEditorTranslations=v,exports.createImageEditorConfig=P;
@@ -0,0 +1,88 @@
1
+ import { E as EditorLocale, P as PlatformPreset } from './platform-presets-B-o4C6uY.js';
2
+
3
+ /**
4
+ * Filerobot 图片编辑器「配置工厂」—— 纯 TS,零 React / 零 DOM。
5
+ *
6
+ * 从 SocialEcho ImageEditor.tsx 抽取「配置」这一层(不抽 React 渲染层):产出一个普通对象,
7
+ * 由框架无关运行时 @media-editor/image 透传给 <FilerobotImageEditor>。
8
+ *
9
+ * 两处「天然属于 React/Filerobot」的东西用依赖注入留给运行时,以保 core 零框架:
10
+ * - 裁剪预设的 icon 是 React 组件 → 运行时传 renderRatioIcon;
11
+ * - 内核英文默认词典 FIE_DEFAULTS → 运行时传 baseTranslations(从 filerobot 包深路径取)。
12
+ */
13
+
14
+ /**
15
+ * 暗色 palette 覆盖。键名取自 @scaleflex/ui 的权威枚举(theme/roots/palette)。
16
+ * 默认是亮色主题:文字/图标都是深色,在深色底上看不清 → 这里把「文字/图标/边框」翻浅、背景翻深。
17
+ * 易踩键:主图标键是 'icon-primary'(单数);'btn-secondary-text' 默认黑、'active-secondary' 默认白,都要改。
18
+ */
19
+ declare const IMAGE_EDITOR_DARK_PALETTE: Record<string, string>;
20
+ /**
21
+ * 亮色 palette —— 同键集的浅色档(Vercel/Linear 亮色:近纯白底、发丝边框、靛蓝强调)。
22
+ * 与暗色档一一对应,createImageEditorConfig 按 themeMode 选用。
23
+ */
24
+ declare const IMAGE_EDITOR_LIGHT_PALETTE: Record<string, string>;
25
+ /**
26
+ * Filerobot 内核文案中文全量覆盖(与包内 defaultTranslations.js 同序,便于升级时 diff;en 模式用其内置英文)。
27
+ * 升级 Filerobot 后用 defaultTranslations.js 复核键集。
28
+ */
29
+ declare const FIE_ZH: Record<string, string>;
30
+ declare const FIE_ES: Record<string, string>;
31
+ declare const FIE_ZH_HANT: Record<string, string>;
32
+ /** 进入编辑器的标签页顺序(Filerobot tabsIds 字面量) */
33
+ declare const IMAGE_EDITOR_TABS: readonly ["Adjust", "Annotate", "Watermark", "Filters", "Finetune", "Resize"];
34
+ /** 单个裁剪预设项(对齐 Filerobot Crop.presetsItems[i]);icon 由运行时按 renderRatioIcon 注入 */
35
+ interface CropPresetItem {
36
+ titleKey: string;
37
+ descriptionKey: string;
38
+ ratio: number;
39
+ icon?: unknown;
40
+ }
41
+ /**
42
+ * 平台比例 → Filerobot 裁剪预设项。
43
+ * Filerobot 用 ratio 数值当流内条目的 React key/选中态 —— 内置项与各平台同比例项会撞 key,
44
+ * 故每项微扰 +(i+1)e-6(裁剪几何影响 <0.001px)。icon 仅在 renderRatioIcon 提供时附加。
45
+ */
46
+ declare function buildCropPresetItems(presets?: PlatformPreset[], renderRatioIcon?: (value: number) => unknown): CropPresetItem[];
47
+ /**
48
+ * 合并出传给 Filerobot 的 translations:
49
+ * 先铺内核英文默认(baseTranslations,运行时注入 FIE_DEFAULTS)——全局字典只增不删,EN 模式必须显式回灌英文;
50
+ * 再加平台标签自映射(titleKey/descriptionKey 缺翻译时兜底显示自身);非 en 模式叠加 FIE_* 覆盖内核可见面。
51
+ */
52
+ declare function buildImageEditorTranslations(locale: EditorLocale, presets?: PlatformPreset[], baseTranslations?: Record<string, string>): Record<string, string>;
53
+ interface ImageEditorConfigOptions {
54
+ /** 图片来源:dataURL 或 objectURL */
55
+ source: string;
56
+ /** 文案语言,默认 'zh' */
57
+ locale?: EditorLocale;
58
+ /** 上次保存的 designState(二次编辑回填) */
59
+ loadableDesignState?: unknown;
60
+ /** 保存回调:(savedImageData, designState) */
61
+ onSave?: (editedImageObject: unknown, designState: unknown) => void;
62
+ /** 关闭回调 */
63
+ onClose?: () => void;
64
+ /** 保存像素密度,默认 4(只提密度不膨胀输出尺寸) */
65
+ savingPixelRatio?: number;
66
+ /** 预览像素密度,默认 1;运行时按 window.devicePixelRatio 填 */
67
+ previewPixelRatio?: number;
68
+ /** 明暗档,默认 'dark';选用对应 palette 与标注/形状默认色('auto' 由运行时解析后传入) */
69
+ themeMode?: 'light' | 'dark';
70
+ /** 平台裁剪预设,默认内置全量 */
71
+ platformPresets?: PlatformPreset[];
72
+ /** 内核英文默认词典(运行时注入 FIE_DEFAULTS) */
73
+ baseTranslations?: Record<string, string>;
74
+ /** 裁剪预设比例图标工厂(运行时注入 React 组件) */
75
+ renderRatioIcon?: (value: number) => unknown;
76
+ /** 主题覆盖(palette/typography 浅合并到暗色默认之上) */
77
+ theme?: {
78
+ palette?: Record<string, string>;
79
+ typography?: Record<string, unknown>;
80
+ };
81
+ }
82
+ /**
83
+ * 产出传给 <FilerobotImageEditor> 的 props 对象(普通 JS,零 React/DOM)。
84
+ * 返回 Record<string, unknown> 而非 Filerobot 类型,避免 core 依赖 react-filerobot-image-editor。
85
+ */
86
+ declare function createImageEditorConfig(opts: ImageEditorConfigOptions): Record<string, unknown>;
87
+
88
+ export { type CropPresetItem, FIE_ES, FIE_ZH, FIE_ZH_HANT, IMAGE_EDITOR_DARK_PALETTE, IMAGE_EDITOR_LIGHT_PALETTE, IMAGE_EDITOR_TABS, type ImageEditorConfigOptions, buildCropPresetItems, buildImageEditorTranslations, createImageEditorConfig };