@bylqwjc/media-editor-react 1.0.12

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 (434) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +51 -0
  3. package/dist/index.cjs +282 -0
  4. package/dist/index.cjs.map +1 -0
  5. package/dist/index.d.cts +54 -0
  6. package/dist/index.d.ts +54 -0
  7. package/dist/index.js +240 -0
  8. package/dist/index.js.map +1 -0
  9. package/filerobot.css +1669 -0
  10. package/node_modules/@media-editor/client/LICENSE +21 -0
  11. package/node_modules/@media-editor/client/README.md +27 -0
  12. package/node_modules/@media-editor/client/dist/index.cjs +60 -0
  13. package/node_modules/@media-editor/client/dist/index.cjs.map +1 -0
  14. package/node_modules/@media-editor/client/dist/index.d.cts +24 -0
  15. package/node_modules/@media-editor/client/dist/index.d.ts +24 -0
  16. package/node_modules/@media-editor/client/dist/index.js +35 -0
  17. package/node_modules/@media-editor/client/dist/index.js.map +1 -0
  18. package/node_modules/@media-editor/client/package.json +23 -0
  19. package/node_modules/@media-editor/core/LICENSE +21 -0
  20. package/node_modules/@media-editor/core/README.md +14 -0
  21. package/node_modules/@media-editor/core/dist/browser.cjs +505 -0
  22. package/node_modules/@media-editor/core/dist/browser.cjs.map +1 -0
  23. package/node_modules/@media-editor/core/dist/browser.d.cts +100 -0
  24. package/node_modules/@media-editor/core/dist/browser.d.ts +100 -0
  25. package/node_modules/@media-editor/core/dist/browser.js +883 -0
  26. package/node_modules/@media-editor/core/dist/browser.js.map +1 -0
  27. package/node_modules/@media-editor/core/dist/chunk-MGKYVYOH.js +371 -0
  28. package/node_modules/@media-editor/core/dist/chunk-MGKYVYOH.js.map +1 -0
  29. package/node_modules/@media-editor/core/dist/chunk-USY6UDGL.js +87 -0
  30. package/node_modules/@media-editor/core/dist/chunk-USY6UDGL.js.map +1 -0
  31. package/node_modules/@media-editor/core/dist/chunk-XCBM7P7N.js +592 -0
  32. package/node_modules/@media-editor/core/dist/chunk-XCBM7P7N.js.map +1 -0
  33. package/node_modules/@media-editor/core/dist/engine.cjs +540 -0
  34. package/node_modules/@media-editor/core/dist/engine.cjs.map +1 -0
  35. package/node_modules/@media-editor/core/dist/engine.d.cts +325 -0
  36. package/node_modules/@media-editor/core/dist/engine.d.ts +359 -0
  37. package/node_modules/@media-editor/core/dist/engine.js +315 -0
  38. package/node_modules/@media-editor/core/dist/engine.js.map +1 -0
  39. package/node_modules/@media-editor/core/dist/filerobot.cjs +818 -0
  40. package/node_modules/@media-editor/core/dist/filerobot.cjs.map +1 -0
  41. package/node_modules/@media-editor/core/dist/filerobot.d.cts +88 -0
  42. package/node_modules/@media-editor/core/dist/filerobot.d.ts +88 -0
  43. package/node_modules/@media-editor/core/dist/filerobot.js +473 -0
  44. package/node_modules/@media-editor/core/dist/filerobot.js.map +1 -0
  45. package/node_modules/@media-editor/core/dist/index.cjs +1276 -0
  46. package/node_modules/@media-editor/core/dist/index.cjs.map +1 -0
  47. package/node_modules/@media-editor/core/dist/index.d.cts +242 -0
  48. package/node_modules/@media-editor/core/dist/index.d.ts +264 -0
  49. package/node_modules/@media-editor/core/dist/index.js +682 -0
  50. package/node_modules/@media-editor/core/dist/index.js.map +1 -0
  51. package/node_modules/@media-editor/core/dist/platform-presets-B-o4C6uY.d.cts +80 -0
  52. package/node_modules/@media-editor/core/dist/platform-presets-B-o4C6uY.d.ts +80 -0
  53. package/node_modules/@media-editor/core/dist/state-B85vkf7_.d.cts +936 -0
  54. package/node_modules/@media-editor/core/dist/state-B85vkf7_.d.ts +1027 -0
  55. package/node_modules/@media-editor/core/node_modules/zod/LICENSE +21 -0
  56. package/node_modules/@media-editor/core/node_modules/zod/README.md +208 -0
  57. package/node_modules/@media-editor/core/node_modules/zod/index.cjs +33 -0
  58. package/node_modules/@media-editor/core/node_modules/zod/index.d.cts +4 -0
  59. package/node_modules/@media-editor/core/node_modules/zod/index.d.ts +4 -0
  60. package/node_modules/@media-editor/core/node_modules/zod/index.js +4 -0
  61. package/node_modules/@media-editor/core/node_modules/zod/package.json +118 -0
  62. package/node_modules/@media-editor/core/node_modules/zod/v3/ZodError.cjs +138 -0
  63. package/node_modules/@media-editor/core/node_modules/zod/v3/ZodError.d.cts +164 -0
  64. package/node_modules/@media-editor/core/node_modules/zod/v3/ZodError.d.ts +164 -0
  65. package/node_modules/@media-editor/core/node_modules/zod/v3/ZodError.js +133 -0
  66. package/node_modules/@media-editor/core/node_modules/zod/v3/errors.cjs +17 -0
  67. package/node_modules/@media-editor/core/node_modules/zod/v3/errors.d.cts +5 -0
  68. package/node_modules/@media-editor/core/node_modules/zod/v3/errors.d.ts +5 -0
  69. package/node_modules/@media-editor/core/node_modules/zod/v3/errors.js +9 -0
  70. package/node_modules/@media-editor/core/node_modules/zod/v3/external.cjs +22 -0
  71. package/node_modules/@media-editor/core/node_modules/zod/v3/external.d.cts +6 -0
  72. package/node_modules/@media-editor/core/node_modules/zod/v3/external.d.ts +6 -0
  73. package/node_modules/@media-editor/core/node_modules/zod/v3/external.js +6 -0
  74. package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/enumUtil.cjs +2 -0
  75. package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/enumUtil.d.cts +8 -0
  76. package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/enumUtil.d.ts +8 -0
  77. package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/enumUtil.js +1 -0
  78. package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/errorUtil.cjs +9 -0
  79. package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/errorUtil.d.cts +9 -0
  80. package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/errorUtil.d.ts +9 -0
  81. package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/errorUtil.js +6 -0
  82. package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/parseUtil.cjs +124 -0
  83. package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/parseUtil.d.cts +78 -0
  84. package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/parseUtil.d.ts +78 -0
  85. package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/parseUtil.js +109 -0
  86. package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/partialUtil.cjs +2 -0
  87. package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/partialUtil.d.cts +8 -0
  88. package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/partialUtil.d.ts +8 -0
  89. package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/partialUtil.js +1 -0
  90. package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/typeAliases.cjs +2 -0
  91. package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/typeAliases.d.cts +2 -0
  92. package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/typeAliases.d.ts +2 -0
  93. package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/typeAliases.js +1 -0
  94. package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/util.cjs +137 -0
  95. package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/util.d.cts +85 -0
  96. package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/util.d.ts +85 -0
  97. package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/util.js +133 -0
  98. package/node_modules/@media-editor/core/node_modules/zod/v3/index.cjs +33 -0
  99. package/node_modules/@media-editor/core/node_modules/zod/v3/index.d.cts +4 -0
  100. package/node_modules/@media-editor/core/node_modules/zod/v3/index.d.ts +4 -0
  101. package/node_modules/@media-editor/core/node_modules/zod/v3/index.js +4 -0
  102. package/node_modules/@media-editor/core/node_modules/zod/v3/locales/en.cjs +111 -0
  103. package/node_modules/@media-editor/core/node_modules/zod/v3/locales/en.d.cts +3 -0
  104. package/node_modules/@media-editor/core/node_modules/zod/v3/locales/en.d.ts +3 -0
  105. package/node_modules/@media-editor/core/node_modules/zod/v3/locales/en.js +109 -0
  106. package/node_modules/@media-editor/core/node_modules/zod/v3/standard-schema.cjs +2 -0
  107. package/node_modules/@media-editor/core/node_modules/zod/v3/standard-schema.d.cts +102 -0
  108. package/node_modules/@media-editor/core/node_modules/zod/v3/standard-schema.d.ts +102 -0
  109. package/node_modules/@media-editor/core/node_modules/zod/v3/standard-schema.js +1 -0
  110. package/node_modules/@media-editor/core/node_modules/zod/v3/types.cjs +3775 -0
  111. package/node_modules/@media-editor/core/node_modules/zod/v3/types.d.cts +1031 -0
  112. package/node_modules/@media-editor/core/node_modules/zod/v3/types.d.ts +1031 -0
  113. package/node_modules/@media-editor/core/node_modules/zod/v3/types.js +3693 -0
  114. package/node_modules/@media-editor/core/node_modules/zod/v4/classic/checks.cjs +32 -0
  115. package/node_modules/@media-editor/core/node_modules/zod/v4/classic/checks.d.cts +1 -0
  116. package/node_modules/@media-editor/core/node_modules/zod/v4/classic/checks.d.ts +1 -0
  117. package/node_modules/@media-editor/core/node_modules/zod/v4/classic/checks.js +1 -0
  118. package/node_modules/@media-editor/core/node_modules/zod/v4/classic/coerce.cjs +47 -0
  119. package/node_modules/@media-editor/core/node_modules/zod/v4/classic/coerce.d.cts +17 -0
  120. package/node_modules/@media-editor/core/node_modules/zod/v4/classic/coerce.d.ts +17 -0
  121. package/node_modules/@media-editor/core/node_modules/zod/v4/classic/coerce.js +17 -0
  122. package/node_modules/@media-editor/core/node_modules/zod/v4/classic/compat.cjs +57 -0
  123. package/node_modules/@media-editor/core/node_modules/zod/v4/classic/compat.d.cts +46 -0
  124. package/node_modules/@media-editor/core/node_modules/zod/v4/classic/compat.d.ts +46 -0
  125. package/node_modules/@media-editor/core/node_modules/zod/v4/classic/compat.js +27 -0
  126. package/node_modules/@media-editor/core/node_modules/zod/v4/classic/errors.cjs +67 -0
  127. package/node_modules/@media-editor/core/node_modules/zod/v4/classic/errors.d.cts +30 -0
  128. package/node_modules/@media-editor/core/node_modules/zod/v4/classic/errors.d.ts +30 -0
  129. package/node_modules/@media-editor/core/node_modules/zod/v4/classic/errors.js +41 -0
  130. package/node_modules/@media-editor/core/node_modules/zod/v4/classic/external.cjs +70 -0
  131. package/node_modules/@media-editor/core/node_modules/zod/v4/classic/external.d.cts +13 -0
  132. package/node_modules/@media-editor/core/node_modules/zod/v4/classic/external.d.ts +13 -0
  133. package/node_modules/@media-editor/core/node_modules/zod/v4/classic/external.js +18 -0
  134. package/node_modules/@media-editor/core/node_modules/zod/v4/classic/index.cjs +33 -0
  135. package/node_modules/@media-editor/core/node_modules/zod/v4/classic/index.d.cts +4 -0
  136. package/node_modules/@media-editor/core/node_modules/zod/v4/classic/index.d.ts +4 -0
  137. package/node_modules/@media-editor/core/node_modules/zod/v4/classic/index.js +4 -0
  138. package/node_modules/@media-editor/core/node_modules/zod/v4/classic/iso.cjs +60 -0
  139. package/node_modules/@media-editor/core/node_modules/zod/v4/classic/iso.d.cts +22 -0
  140. package/node_modules/@media-editor/core/node_modules/zod/v4/classic/iso.d.ts +22 -0
  141. package/node_modules/@media-editor/core/node_modules/zod/v4/classic/iso.js +30 -0
  142. package/node_modules/@media-editor/core/node_modules/zod/v4/classic/parse.cjs +32 -0
  143. package/node_modules/@media-editor/core/node_modules/zod/v4/classic/parse.d.cts +23 -0
  144. package/node_modules/@media-editor/core/node_modules/zod/v4/classic/parse.d.ts +23 -0
  145. package/node_modules/@media-editor/core/node_modules/zod/v4/classic/parse.js +6 -0
  146. package/node_modules/@media-editor/core/node_modules/zod/v4/classic/schemas.cjs +1109 -0
  147. package/node_modules/@media-editor/core/node_modules/zod/v4/classic/schemas.d.cts +630 -0
  148. package/node_modules/@media-editor/core/node_modules/zod/v4/classic/schemas.d.ts +630 -0
  149. package/node_modules/@media-editor/core/node_modules/zod/v4/classic/schemas.js +1006 -0
  150. package/node_modules/@media-editor/core/node_modules/zod/v4/core/api.cjs +1039 -0
  151. package/node_modules/@media-editor/core/node_modules/zod/v4/core/api.d.cts +284 -0
  152. package/node_modules/@media-editor/core/node_modules/zod/v4/core/api.d.ts +284 -0
  153. package/node_modules/@media-editor/core/node_modules/zod/v4/core/api.js +906 -0
  154. package/node_modules/@media-editor/core/node_modules/zod/v4/core/checks.cjs +591 -0
  155. package/node_modules/@media-editor/core/node_modules/zod/v4/core/checks.d.cts +278 -0
  156. package/node_modules/@media-editor/core/node_modules/zod/v4/core/checks.d.ts +278 -0
  157. package/node_modules/@media-editor/core/node_modules/zod/v4/core/checks.js +565 -0
  158. package/node_modules/@media-editor/core/node_modules/zod/v4/core/core.cjs +67 -0
  159. package/node_modules/@media-editor/core/node_modules/zod/v4/core/core.d.cts +49 -0
  160. package/node_modules/@media-editor/core/node_modules/zod/v4/core/core.d.ts +49 -0
  161. package/node_modules/@media-editor/core/node_modules/zod/v4/core/core.js +61 -0
  162. package/node_modules/@media-editor/core/node_modules/zod/v4/core/doc.cjs +39 -0
  163. package/node_modules/@media-editor/core/node_modules/zod/v4/core/doc.d.cts +14 -0
  164. package/node_modules/@media-editor/core/node_modules/zod/v4/core/doc.d.ts +14 -0
  165. package/node_modules/@media-editor/core/node_modules/zod/v4/core/doc.js +35 -0
  166. package/node_modules/@media-editor/core/node_modules/zod/v4/core/errors.cjs +226 -0
  167. package/node_modules/@media-editor/core/node_modules/zod/v4/core/errors.d.cts +208 -0
  168. package/node_modules/@media-editor/core/node_modules/zod/v4/core/errors.d.ts +208 -0
  169. package/node_modules/@media-editor/core/node_modules/zod/v4/core/errors.js +195 -0
  170. package/node_modules/@media-editor/core/node_modules/zod/v4/core/function.cjs +102 -0
  171. package/node_modules/@media-editor/core/node_modules/zod/v4/core/function.d.cts +52 -0
  172. package/node_modules/@media-editor/core/node_modules/zod/v4/core/function.d.ts +52 -0
  173. package/node_modules/@media-editor/core/node_modules/zod/v4/core/function.js +75 -0
  174. package/node_modules/@media-editor/core/node_modules/zod/v4/core/index.cjs +44 -0
  175. package/node_modules/@media-editor/core/node_modules/zod/v4/core/index.d.cts +15 -0
  176. package/node_modules/@media-editor/core/node_modules/zod/v4/core/index.d.ts +15 -0
  177. package/node_modules/@media-editor/core/node_modules/zod/v4/core/index.js +15 -0
  178. package/node_modules/@media-editor/core/node_modules/zod/v4/core/json-schema.cjs +2 -0
  179. package/node_modules/@media-editor/core/node_modules/zod/v4/core/json-schema.d.cts +87 -0
  180. package/node_modules/@media-editor/core/node_modules/zod/v4/core/json-schema.d.ts +87 -0
  181. package/node_modules/@media-editor/core/node_modules/zod/v4/core/json-schema.js +1 -0
  182. package/node_modules/@media-editor/core/node_modules/zod/v4/core/parse.cjs +87 -0
  183. package/node_modules/@media-editor/core/node_modules/zod/v4/core/parse.d.cts +25 -0
  184. package/node_modules/@media-editor/core/node_modules/zod/v4/core/parse.d.ts +25 -0
  185. package/node_modules/@media-editor/core/node_modules/zod/v4/core/parse.js +57 -0
  186. package/node_modules/@media-editor/core/node_modules/zod/v4/core/regexes.cjs +103 -0
  187. package/node_modules/@media-editor/core/node_modules/zod/v4/core/regexes.d.cts +62 -0
  188. package/node_modules/@media-editor/core/node_modules/zod/v4/core/regexes.d.ts +62 -0
  189. package/node_modules/@media-editor/core/node_modules/zod/v4/core/regexes.js +95 -0
  190. package/node_modules/@media-editor/core/node_modules/zod/v4/core/registries.cjs +56 -0
  191. package/node_modules/@media-editor/core/node_modules/zod/v4/core/registries.d.cts +35 -0
  192. package/node_modules/@media-editor/core/node_modules/zod/v4/core/registries.d.ts +35 -0
  193. package/node_modules/@media-editor/core/node_modules/zod/v4/core/registries.js +51 -0
  194. package/node_modules/@media-editor/core/node_modules/zod/v4/core/schemas.cjs +1748 -0
  195. package/node_modules/@media-editor/core/node_modules/zod/v4/core/schemas.d.cts +1041 -0
  196. package/node_modules/@media-editor/core/node_modules/zod/v4/core/schemas.d.ts +1041 -0
  197. package/node_modules/@media-editor/core/node_modules/zod/v4/core/schemas.js +1717 -0
  198. package/node_modules/@media-editor/core/node_modules/zod/v4/core/standard-schema.cjs +2 -0
  199. package/node_modules/@media-editor/core/node_modules/zod/v4/core/standard-schema.d.cts +55 -0
  200. package/node_modules/@media-editor/core/node_modules/zod/v4/core/standard-schema.d.ts +55 -0
  201. package/node_modules/@media-editor/core/node_modules/zod/v4/core/standard-schema.js +1 -0
  202. package/node_modules/@media-editor/core/node_modules/zod/v4/core/to-json-schema.cjs +854 -0
  203. package/node_modules/@media-editor/core/node_modules/zod/v4/core/to-json-schema.d.cts +88 -0
  204. package/node_modules/@media-editor/core/node_modules/zod/v4/core/to-json-schema.d.ts +88 -0
  205. package/node_modules/@media-editor/core/node_modules/zod/v4/core/to-json-schema.js +849 -0
  206. package/node_modules/@media-editor/core/node_modules/zod/v4/core/util.cjs +539 -0
  207. package/node_modules/@media-editor/core/node_modules/zod/v4/core/util.d.cts +183 -0
  208. package/node_modules/@media-editor/core/node_modules/zod/v4/core/util.d.ts +183 -0
  209. package/node_modules/@media-editor/core/node_modules/zod/v4/core/util.js +493 -0
  210. package/node_modules/@media-editor/core/node_modules/zod/v4/core/versions.cjs +8 -0
  211. package/node_modules/@media-editor/core/node_modules/zod/v4/core/versions.d.cts +5 -0
  212. package/node_modules/@media-editor/core/node_modules/zod/v4/core/versions.d.ts +5 -0
  213. package/node_modules/@media-editor/core/node_modules/zod/v4/core/versions.js +5 -0
  214. package/node_modules/@media-editor/core/node_modules/zod/v4/index.cjs +22 -0
  215. package/node_modules/@media-editor/core/node_modules/zod/v4/index.d.cts +3 -0
  216. package/node_modules/@media-editor/core/node_modules/zod/v4/index.d.ts +3 -0
  217. package/node_modules/@media-editor/core/node_modules/zod/v4/index.js +3 -0
  218. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ar.cjs +142 -0
  219. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ar.d.cts +4 -0
  220. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ar.d.ts +4 -0
  221. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ar.js +116 -0
  222. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/az.cjs +141 -0
  223. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/az.d.cts +4 -0
  224. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/az.d.ts +4 -0
  225. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/az.js +115 -0
  226. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/be.cjs +190 -0
  227. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/be.d.cts +4 -0
  228. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/be.d.ts +4 -0
  229. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/be.js +164 -0
  230. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ca.cjs +144 -0
  231. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ca.d.cts +4 -0
  232. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ca.d.ts +4 -0
  233. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ca.js +118 -0
  234. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/cs.cjs +161 -0
  235. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/cs.d.cts +4 -0
  236. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/cs.d.ts +4 -0
  237. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/cs.js +135 -0
  238. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/de.cjs +142 -0
  239. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/de.d.cts +4 -0
  240. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/de.d.ts +4 -0
  241. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/de.js +116 -0
  242. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/en.cjs +145 -0
  243. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/en.d.cts +5 -0
  244. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/en.d.ts +5 -0
  245. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/en.js +117 -0
  246. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/eo.cjs +144 -0
  247. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/eo.d.cts +5 -0
  248. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/eo.d.ts +5 -0
  249. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/eo.js +116 -0
  250. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/es.cjs +143 -0
  251. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/es.d.cts +4 -0
  252. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/es.d.ts +4 -0
  253. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/es.js +117 -0
  254. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/fa.cjs +148 -0
  255. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/fa.d.cts +4 -0
  256. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/fa.d.ts +4 -0
  257. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/fa.js +122 -0
  258. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/fi.cjs +148 -0
  259. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/fi.d.cts +4 -0
  260. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/fi.d.ts +4 -0
  261. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/fi.js +122 -0
  262. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/fr-CA.cjs +143 -0
  263. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/fr-CA.d.cts +4 -0
  264. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/fr-CA.d.ts +4 -0
  265. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/fr-CA.js +117 -0
  266. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/fr.cjs +142 -0
  267. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/fr.d.cts +4 -0
  268. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/fr.d.ts +4 -0
  269. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/fr.js +116 -0
  270. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/he.cjs +143 -0
  271. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/he.d.cts +4 -0
  272. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/he.d.ts +4 -0
  273. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/he.js +117 -0
  274. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/hu.cjs +143 -0
  275. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/hu.d.cts +4 -0
  276. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/hu.d.ts +4 -0
  277. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/hu.js +117 -0
  278. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/id.cjs +142 -0
  279. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/id.d.cts +4 -0
  280. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/id.d.ts +4 -0
  281. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/id.js +116 -0
  282. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/index.cjs +84 -0
  283. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/index.d.cts +39 -0
  284. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/index.d.ts +39 -0
  285. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/index.js +39 -0
  286. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/it.cjs +143 -0
  287. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/it.d.cts +4 -0
  288. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/it.d.ts +4 -0
  289. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/it.js +117 -0
  290. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ja.cjs +141 -0
  291. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ja.d.cts +4 -0
  292. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ja.d.ts +4 -0
  293. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ja.js +115 -0
  294. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/kh.cjs +143 -0
  295. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/kh.d.cts +4 -0
  296. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/kh.d.ts +4 -0
  297. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/kh.js +117 -0
  298. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ko.cjs +147 -0
  299. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ko.d.cts +4 -0
  300. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ko.d.ts +4 -0
  301. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ko.js +121 -0
  302. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/mk.cjs +144 -0
  303. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/mk.d.cts +4 -0
  304. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/mk.d.ts +4 -0
  305. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/mk.js +118 -0
  306. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ms.cjs +142 -0
  307. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ms.d.cts +4 -0
  308. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ms.d.ts +4 -0
  309. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ms.js +116 -0
  310. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/nl.cjs +143 -0
  311. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/nl.d.cts +4 -0
  312. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/nl.d.ts +4 -0
  313. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/nl.js +117 -0
  314. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/no.cjs +142 -0
  315. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/no.d.cts +4 -0
  316. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/no.d.ts +4 -0
  317. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/no.js +116 -0
  318. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ota.cjs +143 -0
  319. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ota.d.cts +4 -0
  320. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ota.d.ts +4 -0
  321. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ota.js +117 -0
  322. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/pl.cjs +143 -0
  323. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/pl.d.cts +4 -0
  324. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/pl.d.ts +4 -0
  325. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/pl.js +117 -0
  326. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ps.cjs +148 -0
  327. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ps.d.cts +4 -0
  328. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ps.d.ts +4 -0
  329. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ps.js +122 -0
  330. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/pt.cjs +142 -0
  331. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/pt.d.cts +4 -0
  332. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/pt.d.ts +4 -0
  333. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/pt.js +116 -0
  334. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ru.cjs +190 -0
  335. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ru.d.cts +4 -0
  336. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ru.d.ts +4 -0
  337. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ru.js +164 -0
  338. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/sl.cjs +143 -0
  339. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/sl.d.cts +4 -0
  340. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/sl.d.ts +4 -0
  341. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/sl.js +117 -0
  342. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/sv.cjs +144 -0
  343. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/sv.d.cts +4 -0
  344. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/sv.d.ts +4 -0
  345. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/sv.js +118 -0
  346. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ta.cjs +143 -0
  347. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ta.d.cts +4 -0
  348. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ta.d.ts +4 -0
  349. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ta.js +117 -0
  350. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/th.cjs +143 -0
  351. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/th.d.cts +4 -0
  352. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/th.d.ts +4 -0
  353. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/th.js +117 -0
  354. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/tr.cjs +143 -0
  355. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/tr.d.cts +5 -0
  356. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/tr.d.ts +5 -0
  357. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/tr.js +115 -0
  358. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ua.cjs +143 -0
  359. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ua.d.cts +4 -0
  360. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ua.d.ts +4 -0
  361. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ua.js +117 -0
  362. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ur.cjs +143 -0
  363. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ur.d.cts +4 -0
  364. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ur.d.ts +4 -0
  365. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ur.js +117 -0
  366. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/vi.cjs +142 -0
  367. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/vi.d.cts +4 -0
  368. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/vi.d.ts +4 -0
  369. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/vi.js +116 -0
  370. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/zh-CN.cjs +142 -0
  371. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/zh-CN.d.cts +4 -0
  372. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/zh-CN.d.ts +4 -0
  373. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/zh-CN.js +116 -0
  374. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/zh-TW.cjs +143 -0
  375. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/zh-TW.d.cts +4 -0
  376. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/zh-TW.d.ts +4 -0
  377. package/node_modules/@media-editor/core/node_modules/zod/v4/locales/zh-TW.js +117 -0
  378. package/node_modules/@media-editor/core/node_modules/zod/v4/mini/checks.cjs +34 -0
  379. package/node_modules/@media-editor/core/node_modules/zod/v4/mini/checks.d.cts +1 -0
  380. package/node_modules/@media-editor/core/node_modules/zod/v4/mini/checks.d.ts +1 -0
  381. package/node_modules/@media-editor/core/node_modules/zod/v4/mini/checks.js +1 -0
  382. package/node_modules/@media-editor/core/node_modules/zod/v4/mini/coerce.cjs +47 -0
  383. package/node_modules/@media-editor/core/node_modules/zod/v4/mini/coerce.d.cts +7 -0
  384. package/node_modules/@media-editor/core/node_modules/zod/v4/mini/coerce.d.ts +7 -0
  385. package/node_modules/@media-editor/core/node_modules/zod/v4/mini/coerce.js +17 -0
  386. package/node_modules/@media-editor/core/node_modules/zod/v4/mini/external.cjs +62 -0
  387. package/node_modules/@media-editor/core/node_modules/zod/v4/mini/external.d.cts +11 -0
  388. package/node_modules/@media-editor/core/node_modules/zod/v4/mini/external.d.ts +11 -0
  389. package/node_modules/@media-editor/core/node_modules/zod/v4/mini/external.js +13 -0
  390. package/node_modules/@media-editor/core/node_modules/zod/v4/mini/index.cjs +32 -0
  391. package/node_modules/@media-editor/core/node_modules/zod/v4/mini/index.d.cts +3 -0
  392. package/node_modules/@media-editor/core/node_modules/zod/v4/mini/index.d.ts +3 -0
  393. package/node_modules/@media-editor/core/node_modules/zod/v4/mini/index.js +3 -0
  394. package/node_modules/@media-editor/core/node_modules/zod/v4/mini/iso.cjs +60 -0
  395. package/node_modules/@media-editor/core/node_modules/zod/v4/mini/iso.d.cts +22 -0
  396. package/node_modules/@media-editor/core/node_modules/zod/v4/mini/iso.d.ts +22 -0
  397. package/node_modules/@media-editor/core/node_modules/zod/v4/mini/iso.js +30 -0
  398. package/node_modules/@media-editor/core/node_modules/zod/v4/mini/parse.cjs +8 -0
  399. package/node_modules/@media-editor/core/node_modules/zod/v4/mini/parse.d.cts +1 -0
  400. package/node_modules/@media-editor/core/node_modules/zod/v4/mini/parse.d.ts +1 -0
  401. package/node_modules/@media-editor/core/node_modules/zod/v4/mini/parse.js +1 -0
  402. package/node_modules/@media-editor/core/node_modules/zod/v4/mini/schemas.cjs +839 -0
  403. package/node_modules/@media-editor/core/node_modules/zod/v4/mini/schemas.d.cts +356 -0
  404. package/node_modules/@media-editor/core/node_modules/zod/v4/mini/schemas.d.ts +356 -0
  405. package/node_modules/@media-editor/core/node_modules/zod/v4/mini/schemas.js +732 -0
  406. package/node_modules/@media-editor/core/node_modules/zod/v4-mini/index.cjs +17 -0
  407. package/node_modules/@media-editor/core/node_modules/zod/v4-mini/index.d.cts +1 -0
  408. package/node_modules/@media-editor/core/node_modules/zod/v4-mini/index.d.ts +1 -0
  409. package/node_modules/@media-editor/core/node_modules/zod/v4-mini/index.js +1 -0
  410. package/node_modules/@media-editor/core/package.json +42 -0
  411. package/node_modules/@media-editor/image/LICENSE +21 -0
  412. package/node_modules/@media-editor/image/README.md +48 -0
  413. package/node_modules/@media-editor/image/dist/chunk-5TBO732O.js +1 -0
  414. package/node_modules/@media-editor/image/dist/index-CU3vkvDR.d.ts +44 -0
  415. package/node_modules/@media-editor/image/dist/index.css +1 -0
  416. package/node_modules/@media-editor/image/dist/index.d.ts +2 -0
  417. package/node_modules/@media-editor/image/dist/index.js +364 -0
  418. package/node_modules/@media-editor/image/dist/lazy.css +1 -0
  419. package/node_modules/@media-editor/image/dist/lazy.d.ts +8 -0
  420. package/node_modules/@media-editor/image/dist/lazy.js +1 -0
  421. package/node_modules/@media-editor/image/package.json +29 -0
  422. package/node_modules/@media-editor/video/LICENSE +21 -0
  423. package/node_modules/@media-editor/video/README.md +55 -0
  424. package/node_modules/@media-editor/video/dist/chunk-EK7ODJWE.js +1 -0
  425. package/node_modules/@media-editor/video/dist/index-CX2iAapm.d.ts +51 -0
  426. package/node_modules/@media-editor/video/dist/index.d.ts +4 -0
  427. package/node_modules/@media-editor/video/dist/index.js +16919 -0
  428. package/node_modules/@media-editor/video/dist/lazy.d.ts +10 -0
  429. package/node_modules/@media-editor/video/dist/lazy.js +1 -0
  430. package/node_modules/@media-editor/video/dist/legacy.js +65 -0
  431. package/node_modules/@media-editor/video/package.json +29 -0
  432. package/package.json +48 -0
  433. package/style.css +1 -0
  434. package/theme.css +1214 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/state.ts","../src/timeline.ts","../src/transform.ts","../src/filters.ts","../src/ffmpeg-args.ts","../src/history.ts","../src/i18n.ts","../src/platform-table.ts","../src/platform-presets.ts","../src/filerobot-annotation.ts"],"names":["z","pre","args"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * editor-core/state —— 视频编辑状态模型 v2(纯 TS,零框架依赖)\n *\n * SDK 分层约定:本目录(editor-core)是未来 Vue/任意框架适配的共享核心,\n * 只允许纯 TS + zod,禁止 import React/Next/DOM 类型。\n *\n * v2 = 多素材输出时间轴(CapCut 简化版):\n * - clips:视频片段列表,**数组顺序 = 输出拼接顺序**(x 轴是输出时间,不是源时间)。\n * 每个片段 = { srcIdx: 第几个上传的视频文件, in/out: 该源内的时间区间 }。\n * EditState 只存索引引用——File/objectURL 是浏览器运行时的事,不进状态。\n * - audioClips:音乐轨。startAt = 在输出时间轴上的落点;volume 0-2(导出真值,预览钳 1)。\n * - canvas:输出画布 = 第一个素材的分辨率(偶数)。所有片段先 cover 居中裁剪铺满画布,\n * 再统一过全局效果链 —— crop/rotation/outputSize 的「源 dims」一律指 canvas。\n * - 全局效果(crop/scale/rotation/flips/filters/overlays)作用于拼接后的整条输出。\n * - poster.time = 输出时间轴时刻。\n * overlays 坐标存「最终输出空间」,导出时客户端渲染成输出分辨率透明 PNG 烧入。\n */\nimport { z } from 'zod';\n\nconst StrokeCommon = {\n color: z.string().max(32),\n width: z.number().positive().max(200),\n};\nconst RotationCommon = {\n rotation: z.number().min(-180).max(180).optional(),\n};\n\nexport const Overlay = z.discriminatedUnion('type', [\n // 自由画笔:扁平点序列 [x0,y0,x1,y1,...]\n z.object({ type: z.literal('pen'), points: z.array(z.number()).min(4), ...StrokeCommon, ...RotationCommon }),\n z.object({ type: z.literal('line'), x1: z.number(), y1: z.number(), x2: z.number(), y2: z.number(), ...StrokeCommon, ...RotationCommon }),\n z.object({ type: z.literal('arrow'), x1: z.number(), y1: z.number(), x2: z.number(), y2: z.number(), ...StrokeCommon, ...RotationCommon }),\n z.object({ type: z.literal('rect'), x: z.number(), y: z.number(), w: z.number(), h: z.number(), ...StrokeCommon, ...RotationCommon }),\n z.object({ type: z.literal('ellipse'), x: z.number(), y: z.number(), w: z.number(), h: z.number(), ...StrokeCommon, ...RotationCommon }),\n z.object({\n type: z.literal('text'),\n x: z.number(),\n y: z.number(),\n text: z.string().max(500),\n color: z.string().max(32),\n fontSize: z.number().positive().max(512),\n ...RotationCommon,\n }),\n // emoji 字符 或 dataURL 图片二选一\n z.object({\n type: z.literal('sticker'),\n x: z.number(),\n y: z.number(),\n w: z.number().positive(),\n h: z.number().positive(),\n emoji: z.string().max(16).optional(),\n src: z.string().optional(),\n ...RotationCommon,\n }),\n]);\nexport type OverlayT = z.infer<typeof Overlay>;\n\n/** 视频片段:srcIdx 指向上传文件序(服务端交叉校验 < 实际文件数) */\nexport const Clip = z.object({\n srcIdx: z.number().int().min(0).max(7),\n in: z.number().min(0),\n out: z.number().min(0),\n});\nexport type ClipT = z.infer<typeof Clip>;\n\n/** 音乐片段:startAt = 输出时间轴落点;in/out = 音频源内区间 */\nexport const AudioClip = z.object({\n srcIdx: z.number().int().min(0).max(2),\n startAt: z.number().min(0),\n in: z.number().min(0),\n out: z.number().min(0),\n volume: z.number().min(0).max(2),\n});\nexport type AudioClipT = z.infer<typeof AudioClip>;\n\nexport const VideoEditState = z\n .object({\n clips: z.array(Clip).min(1).max(50),\n audioClips: z.array(AudioClip).max(8).default([]),\n /** 输出画布(=首素材分辨率,偶数);全局 crop/rotation 的\"源 dims\" */\n canvas: z.object({\n w: z.number().int().min(2).max(4096),\n h: z.number().int().min(2).max(4096),\n }),\n crop: z\n .object({\n x: z.number().min(0),\n y: z.number().min(0),\n width: z.number().positive(),\n height: z.number().positive(),\n })\n .optional(),\n scale: z\n .object({\n width: z.number().positive(),\n height: z.number().positive(),\n fit: z.enum(['contain', 'cover', 'force']),\n })\n .optional(),\n /** 任意角度(度)。UI = 90° 步进按钮 + ±45° 刻度盘叠加 */\n rotation: z.number().min(-180).max(180).default(0),\n flipX: z.boolean().default(false),\n flipY: z.boolean().default(false),\n filters: z\n .object({\n brightness: z.number().min(-1).max(1),\n contrast: z.number().min(-1).max(1),\n saturation: z.number().min(-1).max(1),\n gamma: z.number().min(-1).max(1).default(0),\n })\n .default({ brightness: 0, contrast: 0, saturation: 0, gamma: 0 }),\n /** 预设滤镜 id(见 filters.ts);与 filters 手调叠加 */\n filterPreset: z.string().max(32).optional(),\n overlays: z.array(Overlay).max(200).optional(),\n /** 原视频声音开关(与音乐混音共存) */\n keepAudio: z.boolean().default(true),\n /** 封面时刻 = 输出时间轴 */\n poster: z.object({ time: z.number().min(0) }).optional(),\n })\n .superRefine((s, ctx) => {\n // 同源可多次引用(复制语义),唯一硬约束 out > in;画布偶数(h264)\n s.clips.forEach((c, i) => {\n if (c.out <= c.in) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, message: `clips[${i}].out 必须大于 in`, path: ['clips', i, 'out'] });\n }\n });\n s.audioClips?.forEach((a, i) => {\n if (a.out <= a.in) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, message: `audioClips[${i}].out 必须大于 in`, path: ['audioClips', i, 'out'] });\n }\n });\n if (s.canvas.w % 2 !== 0 || s.canvas.h % 2 !== 0) {\n ctx.addIssue({ code: z.ZodIssueCode.custom, message: 'canvas 宽高必须为偶数', path: ['canvas'] });\n }\n });\n\nexport type VideoEditStateT = z.infer<typeof VideoEditState>;\n\n/**\n * 客户端初始占位:首个素材 metadata 加载前 clips 为空、canvas 为最小值,\n * **不过 schema**(clips min1)——服务端只收显式提交的完整状态,不受影响;\n * 首源加载完成后编辑器会用真实 clips/canvas 重建 history。\n */\nexport function defaultVideoEditState(): VideoEditStateT {\n return {\n clips: [],\n audioClips: [],\n canvas: { w: 2, h: 2 },\n rotation: 0,\n flipX: false,\n flipY: false,\n filters: { brightness: 0, contrast: 0, saturation: 0, gamma: 0 },\n keepAudio: true,\n };\n}\n","/**\n * editor-core/timeline v2 —— 输出时间轴纯函数(多素材 clips/audioClips 操作)。\n * 从 UI 抽出,Vue/React 壳共用;全部不可变(返回新数组)。\n *\n * 模型:clips 数组顺序 = 输出拼接顺序;输出时间轴 x = Σ前序片段时长。\n * 所有 \"t\" 参数除特别说明外都是**输出时间**;trimClipEdge 的 srcT 是源时间。\n */\nimport type { ClipT, AudioClipT } from './state';\n\nexport const MIN_CLIP = 0.1; // 片段最短时长(秒)\n\n/** 片段时长 */\nexport function clipDuration(c: ClipT): number {\n return c.out - c.in;\n}\n\n/** 输出总时长 */\nexport function totalDuration(clips: ClipT[]): number {\n return clips.reduce((s, c) => s + clipDuration(c), 0);\n}\n\n/** 第 idx 个片段在输出时间轴上的起点(前缀和) */\nexport function clipStartsAt(clips: ClipT[], idx: number): number {\n let s = 0;\n for (let i = 0; i < idx && i < clips.length; i++) s += clipDuration(clips[i]);\n return s;\n}\n\n/**\n * 输出时间 t → 所属片段与源内时刻。\n * 交界时刻归后段(前段已播完);t === total 归末段(srcTime = out);\n * t 越界或 clips 为空返回 null。\n */\nexport function locateOutput(clips: ClipT[], t: number): { idx: number; srcTime: number } | null {\n if (!clips.length || t < 0) return null;\n let acc = 0;\n for (let i = 0; i < clips.length; i++) {\n const d = clipDuration(clips[i]);\n if (t < acc + d) return { idx: i, srcTime: clips[i].in + (t - acc) };\n acc += d;\n }\n // 恰好等于总时长 → 末段终点(播放头停在结尾的合法位置)\n if (Math.abs(t - acc) < 1e-9 || t <= acc) {\n const last = clips.length - 1;\n return { idx: last, srcTime: clips[last].out };\n }\n return null;\n}\n\n/** 在输出时刻 t 处把所属片段一分为二;距两端 <MIN_CLIP 返回原数组 */\nexport function splitAtOutput(clips: ClipT[], t: number): ClipT[] {\n const loc = locateOutput(clips, t);\n if (!loc) return clips;\n const c = clips[loc.idx];\n if (loc.srcTime < c.in + MIN_CLIP || loc.srcTime > c.out - MIN_CLIP) return clips;\n return [\n ...clips.slice(0, loc.idx),\n { ...c, out: loc.srcTime },\n { ...c, in: loc.srcTime },\n ...clips.slice(loc.idx + 1),\n ];\n}\n\n/** 删除第 idx 个片段;只剩一段时不可删,返回原数组 */\nexport function removeClip(clips: ClipT[], idx: number): ClipT[] {\n if (clips.length <= 1 || !clips[idx]) return clips;\n return clips.filter((_, i) => i !== idx);\n}\n\n/** 复制第 idx 个片段,插到原段之后 */\nexport function duplicateClip(clips: ClipT[], idx: number): ClipT[] {\n const c = clips[idx];\n if (!c) return clips;\n return [...clips.slice(0, idx + 1), { ...c }, ...clips.slice(idx + 1)];\n}\n\n/** 拖拽重排:把第 from 段移动到第 to 位 */\nexport function reorderClips(clips: ClipT[], from: number, to: number): ClipT[] {\n if (from === to || !clips[from] || to < 0 || to >= clips.length) return clips;\n const next = [...clips];\n const [moved] = next.splice(from, 1);\n next.splice(to, 0, moved);\n return next;\n}\n\n/**\n * 拖片段把手:把第 idx 段的 in/out 改到源时刻 srcT。\n * in 钳 [0, out-MIN_CLIP];out 钳 [in+MIN_CLIP, srcDuration]。\n */\nexport function trimClipEdge(\n clips: ClipT[],\n idx: number,\n edge: 'in' | 'out',\n srcT: number,\n srcDuration: number\n): ClipT[] {\n const c = clips[idx];\n if (!c) return clips;\n const next = clips.map((x) => ({ ...x }));\n if (edge === 'in') {\n next[idx].in = Math.min(Math.max(srcT, 0), next[idx].out - MIN_CLIP);\n } else {\n next[idx].out = Math.max(Math.min(srcT, srcDuration), next[idx].in + MIN_CLIP);\n }\n return next;\n}\n\n/**\n * 音乐片段钳制:in/out 在源时长内且 out-in≥MIN_CLIP;\n * startAt ∈ [0, max(0, total-MIN_CLIP)] —— 允许尾部悬出输出末尾(导出 amix duration=first 截断)。\n */\nexport function clampAudioClip(a: AudioClipT, srcDuration: number, total: number): AudioClipT {\n const out = Math.max(Math.min(a.out, srcDuration), MIN_CLIP);\n const inn = Math.min(Math.max(a.in, 0), out - MIN_CLIP);\n const startAt = Math.min(Math.max(a.startAt, 0), Math.max(0, total - MIN_CLIP));\n return { ...a, in: inn, out, startAt };\n}\n\n/**\n * 时间轴内容时长 = max(视频总长, 音乐悬出末端)。\n * 用于内容宽度/适应缩放/标尺——音乐尾部悬出视频末尾时也要看得见;\n * 播放头/seek 仍以视频总长为界(导出 amix duration=first 同语义)。\n */\nexport function contentDuration(clips: ClipT[], audioClips: AudioClipT[] = []): number {\n const video = totalDuration(clips);\n const audioEnd = audioClips.reduce((m, a) => Math.max(m, a.startAt + (a.out - a.in)), 0);\n return Math.max(video, audioEnd);\n}\n\n/** clips 实际引用到的视频源序号(升序去重)——导出前压缩上传用 */\nexport function usedVideoSrcIndices(clips: ClipT[]): number[] {\n return [...new Set(clips.map((c) => c.srcIdx))].sort((x, y) => x - y);\n}\n\n/** 把 clips 的 srcIdx 重映射为 used 中的序号(与压缩后的上传文件序对齐) */\nexport function remapSrcIndices(clips: ClipT[], used: number[]): ClipT[] {\n const map = new Map(used.map((s, i) => [s, i]));\n return clips.map((c) => ({ ...c, srcIdx: map.get(c.srcIdx) ?? 0 }));\n}\n","/**\n * editor-core/transform —— 旋转/坐标换算纯函数。\n * 与 ffmpeg 的 rotw/roth 同公式,保证预览画布与导出尺寸一致。\n */\n\nexport const DEG2RAD = Math.PI / 180;\n\n/** 旋转 deg 度后的外接框尺寸(= ffmpeg rotate 滤镜 ow=rotw/oh=roth) */\nexport function rotatedSize(w: number, h: number, deg: number): { w: number; h: number } {\n const norm = normalizeDeg(deg);\n // 90 倍数精确交换,避免浮点\n if (norm === 0 || norm === 180) return { w, h };\n if (norm === 90 || norm === 270) return { w: h, h: w };\n const rad = norm * DEG2RAD;\n return {\n w: Math.round(Math.abs(w * Math.cos(rad)) + Math.abs(h * Math.sin(rad))),\n h: Math.round(Math.abs(w * Math.sin(rad)) + Math.abs(h * Math.cos(rad))),\n };\n}\n\n/** 角度归一化到 [0,360) */\nexport function normalizeDeg(deg: number): number {\n return ((deg % 360) + 360) % 360;\n}\n\n/** h264 偶数像素对齐 */\nexport function evenize(n: number): number {\n const v = Math.round(n);\n return v - (v % 2);\n}\n\n/** 把 rect 钳制在 bounds 内(裁剪框拖拽用) */\nexport function clampRect(\n rect: { x: number; y: number; width: number; height: number },\n bounds: { w: number; h: number },\n minSize = 40\n): { x: number; y: number; width: number; height: number } {\n const width = Math.min(Math.max(minSize, rect.width), bounds.w);\n const height = Math.min(Math.max(minSize, rect.height), bounds.h);\n const x = Math.min(Math.max(0, rect.x), bounds.w - width);\n const y = Math.min(Math.max(0, rect.y), bounds.h - height);\n return { x: Math.round(x), y: Math.round(y), width: Math.round(width), height: Math.round(height) };\n}\n\n/** 给定纵横比,在 bounds 内求居中最大 rect(比例预设落框用) */\nexport function centeredMaxRect(\n bounds: { w: number; h: number },\n aspect: number\n): { x: number; y: number; width: number; height: number } {\n let width = bounds.w;\n let height = width / aspect;\n if (height > bounds.h) {\n height = bounds.h;\n width = height * aspect;\n }\n return {\n x: Math.round((bounds.w - width) / 2),\n y: Math.round((bounds.h - height) / 2),\n width: Math.round(width),\n height: Math.round(height),\n };\n}\n\nexport type FitMode = 'cover' | 'contain' | 'force';\n\n/**\n * scale 的 fit 语义 → 源/目标矩形对(预览画布与 ffmpeg 严格同语义):\n * - cover:源侧取目标比例的居中最大区(= ffmpeg scale:force_original_aspect_ratio=increase + 居中 crop),不变形\n * - contain:目标侧居中留黑边(= ffmpeg scale:decrease + pad)\n * - force:双全幅拉伸(= ffmpeg scale=W:H)\n * src 坐标相对 crop 区原点;dst 坐标相对输出原点。\n */\nexport function fitRects(\n crop: { width: number; height: number },\n out: { w: number; h: number },\n fit: FitMode\n): {\n src: { x: number; y: number; width: number; height: number };\n dst: { x: number; y: number; width: number; height: number };\n} {\n const fullSrc = { x: 0, y: 0, width: crop.width, height: crop.height };\n const fullDst = { x: 0, y: 0, width: out.w, height: out.h };\n if (fit === 'cover') {\n return { src: centeredMaxRect({ w: crop.width, h: crop.height }, out.w / out.h), dst: fullDst };\n }\n if (fit === 'contain') {\n return { src: fullSrc, dst: centeredMaxRect({ w: out.w, h: out.h }, crop.width / crop.height) };\n }\n return { src: fullSrc, dst: fullDst };\n}\n\n/** 导出产物的最终输出尺寸(决定 overlay PNG 的分辨率) */\nexport function outputSize(\n source: { w: number; h: number },\n state: {\n rotation: number;\n crop?: { width: number; height: number } | undefined;\n scale?: { width: number; height: number } | undefined;\n }\n): { w: number; h: number } {\n if (state.scale) return { w: evenize(state.scale.width), h: evenize(state.scale.height) };\n if (state.crop) return { w: evenize(state.crop.width), h: evenize(state.crop.height) };\n const r = rotatedSize(source.w, source.h, state.rotation);\n return { w: evenize(r.w), h: evenize(r.h) };\n}\n","/**\n * editor-core/filters —— 预设滤镜表(数据驱动)。\n * vf = ffmpeg 滤镜片段(导出真值);css = 浏览器预览近似。\n * 全部使用 ffmpeg-static 6.x 标配滤镜(hue/eq/colorbalance/colorchannelmixer)。\n */\n\nexport interface FilterPreset {\n id: string;\n label: string;\n vf: string;\n css: string;\n}\n\nexport const FILTER_PRESETS: FilterPreset[] = [\n { id: 'bw', label: '黑白', vf: 'hue=s=0', css: 'grayscale(1)' },\n {\n id: 'sepia',\n label: '复古',\n vf: 'colorchannelmixer=.393:.769:.189:0:.349:.686:.168:0:.272:.534:.131',\n css: 'sepia(0.85)',\n },\n { id: 'warm', label: '暖阳', vf: 'colorbalance=rs=.15:gs=.04:bs=-.15', css: 'sepia(0.25) saturate(1.25) brightness(1.03)' },\n { id: 'cool', label: '冷调', vf: 'colorbalance=rs=-.14:bs=.16', css: 'hue-rotate(12deg) saturate(0.95) brightness(1.02)' },\n { id: 'vivid', label: '鲜艳', vf: 'eq=saturation=1.45:contrast=1.08', css: 'saturate(1.45) contrast(1.08)' },\n];\n\nexport function findFilterPreset(id: string | undefined): FilterPreset | undefined {\n return id ? FILTER_PRESETS.find((p) => p.id === id) : undefined;\n}\n\n/**\n * 拼出 canvas/CSS 用的 filter 字符串(预览与帧合成共用)。\n * brightness/contrast/saturation 来自手调 [-1,1] → 1+v;叠加预设 css。\n * gamma 无 CSS 等价(仅 ffmpeg 导出生效),此处不含。\n */\nexport function buildFilterCss(\n filters: { brightness: number; contrast: number; saturation: number },\n presetId?: string,\n): string {\n const presetCss = findFilterPreset(presetId)?.css ?? '';\n return [\n `brightness(${1 + filters.brightness})`,\n `contrast(${1 + filters.contrast})`,\n `saturate(${1 + filters.saturation})`,\n presetCss,\n ]\n .filter(Boolean)\n .join(' ');\n}\n","/**\n * editor-core/ffmpeg-args v2 —— VideoEditState → FFmpeg 参数(纯函数,服务端执行)。\n * 安全:只接受结构化 state + 服务端落盘的文件路径数组;文件内容不进命令行。\n *\n * 多素材模型:clips 数组序 = 输出拼接序;每片段先归一到画布\n * (cover 居中裁剪 + setsar=1 + fps=30 + format=yuv420p,防 concat 流参数不齐),\n * concat 后过全局画面链(flips → rotate → crop → scale → eq → 预设滤镜),最后 overlay。\n * 音频:原声(keepAudio,无音轨源用 anullsrc 补齐) concat → 与音乐(atrim+volume+adelay)\n * amix=duration=first(锚定视频长):normalize=0(不自动衰减)。\n *\n * 单视频源且无音乐时走 v1 快路径(-ss/-t 或单输入 filter_complex),隔离回归面。\n */\nimport type { VideoEditStateT } from './state';\nimport { normalizeDeg } from './transform';\nimport { findFilterPreset } from './filters';\n\n/** 服务端按 srcIdx 顺序落盘后的路径与探测结果 */\nexport interface FfmpegIo {\n /** index 与 clip.srcIdx 对齐(客户端导出前已压缩重映射) */\n videoPaths: string[];\n /** 与 videoPaths 等长,probeHasAudio 结果 */\n videoHasAudio: boolean[];\n /** index 与 audioClip.srcIdx 对齐 */\n audioPaths: string[];\n overlayPath?: string;\n}\n\n/** 角度 → 旋转滤镜:90 倍数 transpose 快路径,任意角度 rotate(外接框自动扩) */\nfunction rotationFilters(deg: number): string[] {\n const norm = normalizeDeg(deg);\n if (norm === 0) return [];\n if (norm === 90) return ['transpose=1'];\n if (norm === 180) return ['transpose=1', 'transpose=1'];\n if (norm === 270) return ['transpose=2'];\n const rad = `${norm}*PI/180`;\n return [`rotate=${rad}:ow=rotw(${rad}):oh=roth(${rad}):c=black`];\n}\n\n/** 归一化 [-1,1] → ffmpeg eq(brightness/contrast/saturation/gamma) */\nfunction eqFilter(f: VideoEditStateT['filters']): string | null {\n const { brightness, contrast, saturation } = f;\n const gamma = f.gamma ?? 0;\n if (brightness === 0 && contrast === 0 && saturation === 0 && gamma === 0) return null;\n const parts: string[] = [];\n if (brightness !== 0) parts.push(`brightness=${brightness}`);\n if (contrast !== 0) parts.push(`contrast=${1 + contrast}`);\n if (saturation !== 0) parts.push(`saturation=${1 + saturation}`);\n // gamma 中性 1,UI [-1,1] → [0.5,2]\n if (gamma !== 0) parts.push(`gamma=${(1 + gamma * (gamma > 0 ? 1 : 0.5)).toFixed(3)}`);\n return `eq=${parts.join(':')}`;\n}\n\n/** 全局画面滤镜链(作用于拼接后整条输出;不含时长裁剪/overlay) */\nfunction buildVideoFilters(state: VideoEditStateT): string[] {\n const vf: string[] = [];\n\n if (state.flipX) vf.push('hflip');\n if (state.flipY) vf.push('vflip');\n vf.push(...rotationFilters(state.rotation));\n\n // crop 坐标 = 旋转后画布空间(编辑器 Crop 视图即按旋转后画布框选)\n if (state.crop) {\n const { x, y, width, height } = state.crop;\n vf.push(`crop=${width}:${height}:${x}:${y}`);\n }\n\n if (state.scale) {\n const { width, height, fit } = state.scale;\n if (fit === 'force') {\n vf.push(`scale=${width}:${height}`);\n } else if (fit === 'cover') {\n vf.push(`scale=${width}:${height}:force_original_aspect_ratio=increase`, `crop=${width}:${height}`);\n } else {\n vf.push(\n `scale=${width}:${height}:force_original_aspect_ratio=decrease`,\n `pad=${width}:${height}:(ow-iw)/2:(oh-ih)/2`\n );\n }\n }\n\n const eq = eqFilter(state.filters);\n if (eq) vf.push(eq);\n\n const preset = findFilterPreset(state.filterPreset);\n if (preset) vf.push(preset.vf);\n\n // 任意角度旋转的外接框可能是奇数像素,libx264+yuv420p 要求偶数 → 末尾补偶对齐\n const norm = normalizeDeg(state.rotation);\n if (norm % 90 !== 0 && !state.scale) {\n vf.push('scale=trunc(iw/2)*2:trunc(ih/2)*2');\n }\n\n return vf;\n}\n\n/** 输出编码尾参(统一 h264 + aac + faststart) */\nfunction codecArgs(withAudio: boolean): string[] {\n const args = ['-c:v', 'libx264', '-preset', 'veryfast', '-pix_fmt', 'yuv420p', '-movflags', '+faststart'];\n if (withAudio) args.push('-c:a', 'aac');\n return args;\n}\n\n// sample_fmts 显式约束:anullsrc(fltp)与不同源(s16 等)进 concat/amix 前统一,防杂音\nconst AFORMAT = 'aformat=sample_fmts=fltp:sample_rates=44100:channel_layouts=stereo';\nconst ANULL = 'anullsrc=r=44100:cl=stereo';\n\n/**\n * 段边界去咔哒:atrim 硬切在非零交叉点会产生 click/pop,首尾各 10ms 淡入淡出。\n * asetpts 已归零,st 从 0 计;段短于 20ms 不加(守卫),st round 到毫秒防浮点尾巴。\n */\nfunction declick(dur: number): string {\n if (!(dur > 0.02)) return '';\n const st = Math.round((dur - 0.01) * 1000) / 1000;\n return `,afade=t=in:st=0:d=0.01,afade=t=out:st=${st}:d=0.01`;\n}\n\n/** amix 后限幅:normalize=0 时原声+音乐叠加可能超 0dB 硬削波(杂音)。level=disabled 防自动抬升泵浦 */\nconst LIMITER = 'alimiter=limit=0.95:level=disabled:latency=1';\n\n/**\n * 单视频源且无音乐的快路径(v1 逻辑,clips 充当旧 segments):\n * 画布≡源尺寸(cover 归一为 no-op),fps/SAR 不强制——单源 concat 流参数天然一致。\n */\nfunction buildSingleSourceArgs(\n state: VideoEditStateT,\n input: string,\n output: string,\n overlayInput: string | undefined,\n hasAudio: boolean\n): string[] {\n const vf = buildVideoFilters(state);\n const clips = state.clips;\n const keepAudio = state.keepAudio && hasAudio;\n const multi = clips.length >= 2;\n\n // ── 多段 或 带 overlay:走 filter_complex ──────────────────────────\n if (multi || overlayInput) {\n const parts: string[] = [];\n let vLabel: string;\n\n if (multi) {\n clips.forEach((c, i) => {\n parts.push(`[0:v]trim=start=${c.in}:end=${c.out},setpts=PTS-STARTPTS[v${i}]`);\n if (keepAudio) {\n parts.push(`[0:a]atrim=start=${c.in}:end=${c.out},asetpts=PTS-STARTPTS${declick(c.out - c.in)}[a${i}]`);\n }\n });\n const concatInputs = clips.map((_, i) => (keepAudio ? `[v${i}][a${i}]` : `[v${i}]`)).join('');\n const concatOuts = keepAudio ? '[vcat][acat]' : '[vcat]';\n parts.push(`${concatInputs}concat=n=${clips.length}:v=1:a=${keepAudio ? 1 : 0}${concatOuts}`);\n vLabel = '[vcat]';\n } else {\n vLabel = '[0:v]';\n }\n\n if (vf.length) {\n parts.push(`${vLabel}${vf.join(',')}[vflt]`);\n vLabel = '[vflt]';\n }\n\n if (overlayInput) {\n // overlay 输入永远是主输入之后的下一个 -i\n parts.push(`${vLabel}[1:v]overlay=0:0[vout]`);\n vLabel = '[vout]';\n } else if (vLabel === '[0:v]') {\n parts.push(`[0:v]null[vout]`);\n vLabel = '[vout]';\n }\n\n // 单段 + overlay 组合:输入侧快定位\n const pre: string[] = [];\n if (!multi && clips.length === 1) {\n pre.push('-ss', String(clips[0].in), '-t', String(clips[0].out - clips[0].in));\n }\n\n const args: string[] = ['-y', ...pre, '-i', input];\n if (overlayInput) args.push('-i', overlayInput);\n args.push('-filter_complex', parts.join(';'), '-map', vLabel);\n if (keepAudio) args.push('-map', multi ? '[acat]' : '0:a?'); // 单段用 0:a?(无音轨也不报错)\n args.push(...codecArgs(keepAudio));\n args.push(output);\n return args;\n }\n\n // ── 单段且无 overlay:-ss/-t 快路径 + -vf ────────────────────────\n // 注意:输入侧 -to 是\"绝对时间戳\"不是时长,用 -t 时长语义明确\n const pre: string[] = ['-ss', String(clips[0].in), '-t', String(clips[0].out - clips[0].in)];\n\n const args: string[] = ['-y', ...pre, '-i', input];\n if (vf.length) args.push('-vf', vf.join(','));\n if (!keepAudio) args.push('-an');\n args.push(...codecArgs(keepAudio));\n args.push(output);\n return args;\n}\n\n/**\n * v2 主入口:多视频源 concat + 音乐 amix + 全局链 + overlay。\n * 输入序:视频 0..N-1 → 音乐 N..N+M-1 → overlay N+M。\n */\nexport function buildFfmpegArgs(state: VideoEditStateT, io: FfmpegIo, output: string): string[] {\n const { videoPaths, videoHasAudio, audioPaths, overlayPath } = io;\n const music = state.audioClips ?? [];\n\n if (videoPaths.length === 1 && music.length === 0) {\n return buildSingleSourceArgs(state, videoPaths[0], output, overlayPath, videoHasAudio[0] ?? false);\n }\n\n const N = videoPaths.length;\n const M = audioPaths.length;\n const cw = state.canvas.w;\n const ch = state.canvas.h;\n const clips = state.clips;\n const keepAudio = state.keepAudio && clips.some((c) => videoHasAudio[c.srcIdx]);\n const total = clips.reduce((s, c) => s + (c.out - c.in), 0);\n\n const parts: string[] = [];\n\n // 每片段:trim → 归一到画布(cover 居中裁剪) → 流参数三件套(防 concat 不齐)\n clips.forEach((c, i) => {\n parts.push(\n `[${c.srcIdx}:v]trim=start=${c.in}:end=${c.out},setpts=PTS-STARTPTS,` +\n `scale=${cw}:${ch}:force_original_aspect_ratio=increase,crop=${cw}:${ch},` +\n `setsar=1,fps=30,format=yuv420p[v${i}]`\n );\n if (keepAudio) {\n if (videoHasAudio[c.srcIdx]) {\n parts.push(\n `[${c.srcIdx}:a]atrim=start=${c.in}:end=${c.out},asetpts=PTS-STARTPTS${declick(c.out - c.in)},${AFORMAT}[a${i}]`\n );\n } else {\n // 无音轨源:filter_complex 内源滤镜补静音,保 concat 段数对齐(静音不需去咔哒)\n parts.push(`${ANULL},atrim=start=0:end=${c.out - c.in},asetpts=PTS-STARTPTS,${AFORMAT}[a${i}]`);\n }\n }\n });\n\n const concatInputs = clips.map((_, i) => (keepAudio ? `[v${i}][a${i}]` : `[v${i}]`)).join('');\n parts.push(`${concatInputs}concat=n=${clips.length}:v=1:a=${keepAudio ? 1 : 0}${keepAudio ? '[vcat][acat]' : '[vcat]'}`);\n\n // 音频主干:原声 concat;关原声但有音乐时用全长静音锚定 amix 时长\n let aLabel = keepAudio ? '[acat]' : '';\n if (!keepAudio && music.length) {\n parts.push(`${ANULL},atrim=start=0:end=${total},asetpts=PTS-STARTPTS,${AFORMAT}[acat]`);\n aLabel = '[acat]';\n }\n\n // 音乐:源内裁剪 → 音量(导出真值) → 统一采样 → adelay 落到输出时间轴\n if (music.length) {\n music.forEach((a, j) => {\n const ms = Math.max(0, Math.round(a.startAt * 1000));\n parts.push(\n `[${N + j}:a]atrim=start=${a.in}:end=${a.out},asetpts=PTS-STARTPTS,` +\n `volume=${a.volume},${AFORMAT},adelay=${ms}|${ms}[mu${j}]`\n );\n });\n const mixInputs = `${aLabel}${music.map((_, j) => `[mu${j}]`).join('')}`;\n parts.push(\n `${mixInputs}amix=inputs=${1 + music.length}:duration=first:dropout_transition=0:normalize=0,${LIMITER}[aout]`\n );\n aLabel = '[aout]';\n }\n\n // 全局画面链 + overlay\n let vLabel = '[vcat]';\n const vf = buildVideoFilters(state);\n if (vf.length) {\n parts.push(`${vLabel}${vf.join(',')}[vflt]`);\n vLabel = '[vflt]';\n }\n if (overlayPath) {\n parts.push(`${vLabel}[${N + M}:v]overlay=0:0[vout]`);\n vLabel = '[vout]';\n }\n\n const args: string[] = ['-y'];\n for (const p of videoPaths) args.push('-i', p);\n for (const p of audioPaths) args.push('-i', p);\n if (overlayPath) args.push('-i', overlayPath);\n args.push('-filter_complex', parts.join(';'), '-map', vLabel);\n const withAudio = !!aLabel;\n if (withAudio) args.push('-map', aLabel);\n args.push(...codecArgs(withAudio));\n if (withAudio) args.push('-ar', '44100', '-ac', '2');\n args.push(output);\n return args;\n}\n\n/** 封面帧:在 time 处抽 1 帧 jpg */\nexport function buildPosterArgs(input: string, time: number, output: string): string[] {\n return ['-y', '-ss', String(time), '-i', input, '-frames:v', '1', '-q:v', '2', output];\n}\n","/**\n * editor-core/history —— 不可变快照 undo/redo 栈(纯函数)。\n * 泛型,对 EditState 的 JSON 快照工作;壳层(React/Vue)只持有 History<T> 并 set 回去。\n */\n\nexport interface History<T> {\n past: T[];\n present: T;\n future: T[];\n}\n\nconst MAX_DEPTH = 100;\n\nexport function createHistory<T>(initial: T): History<T> {\n return { past: [], present: initial, future: [] };\n}\n\n/** 写入新状态(清空 redo 栈);浅比较相同引用则原样返回 */\nexport function pushHistory<T>(h: History<T>, next: T): History<T> {\n if (next === h.present) return h;\n const past = [...h.past, h.present];\n if (past.length > MAX_DEPTH) past.shift();\n return { past, present: next, future: [] };\n}\n\n/**\n * 替换当前态但不入栈(高频拖拽的中间帧用):\n * 拖动过程 replacePresent 持续刷新,pointerup 时再 pushHistory 定格一步。\n */\nexport function replacePresent<T>(h: History<T>, next: T): History<T> {\n if (next === h.present) return h;\n return { ...h, present: next };\n}\n\nexport function canUndo<T>(h: History<T>): boolean {\n return h.past.length > 0;\n}\n\nexport function canRedo<T>(h: History<T>): boolean {\n return h.future.length > 0;\n}\n\nexport function undo<T>(h: History<T>): History<T> {\n if (!canUndo(h)) return h;\n const past = h.past.slice(0, -1);\n return { past, present: h.past[h.past.length - 1], future: [h.present, ...h.future] };\n}\n\nexport function redo<T>(h: History<T>): History<T> {\n if (!canRedo(h)) return h;\n const [next, ...future] = h.future;\n return { past: [...h.past, h.present], present: next, future };\n}\n","/**\n * editor-core/i18n —— 编辑器文案字典(纯 TS,零框架依赖,Vue/React 壳共用)。\n * key 规约(domain 扁平):tool.* tune.* overlay.* filter.* ratio.* act.* err.* tip.* msg.* lbl.* panel.* poster.* crop.*\n * 插值:{name} 形式,tEditor 第三参传值。\n * 单测保证所有 locale key 集合一致(Filerobot 内核覆盖键不在此,见 ImageEditor 的 FIE_* translations)。\n */\n\nexport type EditorLocale = 'zh' | 'en' | 'es' | 'zh-Hant';\n\nconst zh: Record<string, string> = {\n // 工具卡\n 'tool.trim': '剪辑',\n 'tool.crop': '裁剪',\n 'tool.tune': '调色',\n 'tool.filter': '滤镜',\n 'tool.annotate': '标注',\n 'tool.sticker': '贴纸',\n 'tool.resize': '比例',\n // 调色项\n 'tune.brightness': '亮度',\n 'tune.contrast': '对比',\n 'tune.saturation': '饱和',\n 'tune.gamma': 'Gamma',\n // 标注工具\n 'overlay.select': '选择',\n 'overlay.pen': '画笔',\n 'overlay.eraser': '橡皮',\n 'overlay.line': '直线',\n 'overlay.arrow': '箭头',\n 'overlay.rect': '矩形',\n 'overlay.ellipse': '椭圆',\n 'overlay.text': '文字',\n 'overlay.color': '线色',\n 'overlay.width': '线宽',\n 'overlay.copySelected': '复制',\n 'overlay.delSelected': '删除选中',\n 'overlay.editSelected': '编辑',\n 'overlay.pickImage': '选择图片',\n 'overlay.hint': '点 emoji/图片添加 → 画布上拖动摆位,拖右下角紫色把手缩放',\n 'overlay.textPlaceholder': '输入文字,回车确认',\n // 滤镜预设\n 'filter.none': '原图',\n 'filter.bw': '黑白',\n 'filter.sepia': '复古',\n 'filter.warm': '暖阳',\n 'filter.cool': '冷调',\n 'filter.vivid': '鲜艳',\n // 比例\n 'ratio.orig': '原始',\n 'ratio.free': '自由比例',\n 'ratio.9:16': '竖屏 9:16',\n 'ratio.16:9': '横屏 16:9',\n 'ratio.1:1': '方形 1:1',\n 'ratio.4:5': '竖图 4:5',\n // 动作\n 'act.fit': '适应',\n 'act.zoomFit': '缩放至适当大小',\n 'act.zoomTo': '缩放至 {value}%',\n 'act.split': '分割',\n 'act.copy': '复制',\n 'act.delete': '删除',\n 'act.restore': '还原',\n 'act.deleteMusic': '删除音乐',\n 'act.cancel': '取消',\n 'act.exportPoster': '导出封面',\n 'act.exporting': '导出中…',\n 'act.poster': '🖼 封面',\n 'act.again': '再次下载',\n 'act.saveDrive': '存网盘',\n 'act.changeImage': '← 换一张',\n 'act.changeVideo': '← 换一个',\n 'crop.rotateLeft': '↺ 向左旋转',\n 'crop.flipX': '⇋ 水平翻转',\n 'crop.flipY': '⇵ 垂直翻转',\n 'crop.rotateLeftShort': '左转',\n 'crop.flipXShort': '横翻',\n 'crop.flipYShort': '竖翻',\n // 提示(title)\n 'tip.close': '关闭(换文件)',\n 'tip.undo': '撤销',\n 'tip.redo': '重做',\n 'tip.resetOpened': '重置到打开文件时',\n 'tip.previewZoom': '预览缩放比例',\n 'tip.previewZoomOut': '缩小预览',\n 'tip.previewZoomIn': '放大预览',\n 'tip.previewZoomFit': '适应预览',\n 'tip.previewPointer': '指针工具',\n 'tip.previewPan': '手工具:拖动画面',\n 'tip.poster': '预览并选择封面帧',\n 'tip.keepAudio': '原视频声音开关(与音乐混音;预览同步)',\n 'tip.split': '在播放头处把当前片段一分为二',\n 'tip.zoomOut': '缩小时间轴(Ctrl+滚轮)',\n 'tip.zoomIn': '放大时间轴(Ctrl+滚轮)',\n 'tip.fit': '缩放到适应宽度',\n 'tip.addVideo': '添加视频片段',\n 'tip.addAudio': '添加音乐(音频文件,或选含声音的视频自动提取音轨;与原声混音)',\n 'tip.dupClip': '复制该片段(插到其后)',\n 'tip.delClip': '删除该片段',\n 'tip.lockAspect': '锁定纵横比',\n 'tip.dblConfirm': '双击确认裁剪',\n // 错误\n 'err.notVideo': '请选择视频文件',\n 'err.maxVideo': '最多 {max} 个视频素材',\n 'err.videoLoad': '视频加载失败,请换一个文件',\n 'err.notAudio': '请选择音频文件(mp3/wav/m4a),或含声音的视频(自动提取音轨)',\n 'err.maxAudio': '最多 {max} 个音频素材',\n 'err.audioLoad': '音频加载失败,请换一个文件',\n 'err.processFailed': '处理失败',\n 'err.posterFailed': '封面渲染失败',\n 'err.canvas': 'canvas 不可用',\n 'err.imageRead': '图片读取失败,请换一张',\n 'err.notImage': '请选择图片文件',\n 'err.fileType': '只支持图片或视频文件',\n 'err.saveDrive': '存网盘失败',\n // 状态\n 'msg.processing': '正在导出中…',\n 'msg.exportingHint': '请稍候,导出完成后会自动返回结果。',\n 'msg.done': '完成 ✓',\n 'msg.loading': '素材加载中…',\n 'msg.exported': '已导出:',\n 'msg.saving': '存网盘中…',\n 'msg.saved': '已存到网盘 ✓',\n // 视频视图文案\n 'lbl.ratioSection': '画面比例(裁剪,不变形)',\n 'lbl.dragToReposition': '↔ 拖动预览可调整裁剪位置',\n 'lbl.sizeSection': '导出尺寸(像素;比例不符时 cover 居中裁剪)',\n 'lbl.currentOut': '当前输出',\n 'lbl.zoomSize': '大小',\n 'lbl.noScale': '(未缩放)',\n 'lbl.coverNote': '· 比例不一致时居中裁剪(cover),不变形',\n 'lbl.audioTrackHint': '♪ 音频轨(右侧 + 添加音乐,与原声混音)',\n 'lbl.volume': '音量',\n 'lbl.volNote': '(预览最大 100%,导出按设定值)',\n 'lbl.music': '音乐',\n 'kbd.fit': '⇧ F',\n // 封面弹层\n 'poster.title': '选择封面帧',\n // 面板层\n 'panel.title': '媒体编辑器',\n 'panel.subtitle': '上传图片 / 视频,裁剪 · 滤镜 · 文字 · 导出',\n 'panel.pick': '点击选择图片或视频',\n 'panel.pickHint': '图片用 Filerobot · 视频可裁剪/静音/封面',\n};\n\nconst en: Record<string, string> = {\n 'tool.trim': 'Trim',\n 'tool.crop': 'Crop',\n 'tool.tune': 'Tune',\n 'tool.filter': 'Filters',\n 'tool.annotate': 'Annotate',\n 'tool.sticker': 'Stickers',\n 'tool.resize': 'Ratio',\n 'tune.brightness': 'Brightness',\n 'tune.contrast': 'Contrast',\n 'tune.saturation': 'Saturation',\n 'tune.gamma': 'Gamma',\n 'overlay.select': 'Select',\n 'overlay.pen': 'Pen',\n 'overlay.eraser': 'Eraser',\n 'overlay.line': 'Line',\n 'overlay.arrow': 'Arrow',\n 'overlay.rect': 'Rect',\n 'overlay.ellipse': 'Ellipse',\n 'overlay.text': 'Text',\n 'overlay.color': 'Color',\n 'overlay.width': 'Width',\n 'overlay.copySelected': 'Copy',\n 'overlay.delSelected': 'Delete selected',\n 'overlay.editSelected': 'Edit',\n 'overlay.pickImage': 'Pick image',\n 'overlay.hint': 'Tap emoji/image to add → drag to place, drag the purple corner handle to scale',\n 'overlay.textPlaceholder': 'Type text, Enter to confirm',\n 'filter.none': 'Original',\n 'filter.bw': 'B&W',\n 'filter.sepia': 'Sepia',\n 'filter.warm': 'Warm',\n 'filter.cool': 'Cool',\n 'filter.vivid': 'Vivid',\n 'ratio.orig': 'Original',\n 'ratio.free': 'Free ratio',\n 'ratio.9:16': 'Portrait 9:16',\n 'ratio.16:9': 'Landscape 16:9',\n 'ratio.1:1': 'Square 1:1',\n 'ratio.4:5': 'Vertical 4:5',\n 'act.fit': 'Fit',\n 'act.zoomFit': 'Zoom to fit',\n 'act.zoomTo': 'Zoom to {value}%',\n 'act.split': 'Split',\n 'act.copy': 'Copy',\n 'act.delete': 'Delete',\n 'act.restore': 'Reset',\n 'act.deleteMusic': 'Remove music',\n 'act.cancel': 'Cancel',\n 'act.exportPoster': 'Export cover',\n 'act.exporting': 'Exporting…',\n 'act.poster': '🖼 Cover',\n 'act.again': 'Download again',\n 'act.saveDrive': 'Save to drive',\n 'act.changeImage': '← Change image',\n 'act.changeVideo': '← Change file',\n 'crop.rotateLeft': '↺ Rotate left',\n 'crop.flipX': '⇋ Flip horizontal',\n 'crop.flipY': '⇵ Flip vertical',\n 'crop.rotateLeftShort': 'Rot',\n 'crop.flipXShort': 'Flip',\n 'crop.flipYShort': 'Flip',\n 'tip.close': 'Close (change file)',\n 'tip.undo': 'Undo',\n 'tip.redo': 'Redo',\n 'tip.resetOpened': 'Reset to opened file',\n 'tip.previewZoom': 'Preview zoom',\n 'tip.previewZoomOut': 'Zoom out preview',\n 'tip.previewZoomIn': 'Zoom in preview',\n 'tip.previewZoomFit': 'Fit preview',\n 'tip.previewPointer': 'Pointer tool',\n 'tip.previewPan': 'Hand tool: pan canvas',\n 'tip.poster': 'Preview and pick a cover frame',\n 'tip.keepAudio': 'Original audio on/off (mixed with music; preview follows)',\n 'tip.split': 'Split the current clip at the playhead',\n 'tip.zoomOut': 'Zoom out timeline (Ctrl+wheel)',\n 'tip.zoomIn': 'Zoom in timeline (Ctrl+wheel)',\n 'tip.fit': 'Fit to width',\n 'tip.addVideo': 'Add video clip',\n 'tip.addAudio': 'Add music (audio file, or a video with sound to extract its track; mixed with original)',\n 'tip.dupClip': 'Duplicate clip (insert after)',\n 'tip.delClip': 'Delete clip',\n 'tip.lockAspect': 'Lock aspect ratio',\n 'tip.dblConfirm': 'Double-click to confirm crop',\n 'err.notVideo': 'Please choose a video file',\n 'err.maxVideo': 'Up to {max} video sources',\n 'err.videoLoad': 'Failed to load video, try another file',\n 'err.notAudio': 'Choose an audio file (mp3/wav/m4a), or a video with sound (audio auto-extracted)',\n 'err.maxAudio': 'Up to {max} audio sources',\n 'err.audioLoad': 'Failed to load audio, try another file',\n 'err.processFailed': 'Processing failed',\n 'err.posterFailed': 'Failed to render cover',\n 'err.canvas': 'Canvas unavailable',\n 'err.imageRead': 'Failed to read image, try another',\n 'err.notImage': 'Please choose an image file',\n 'err.fileType': 'Only image or video files are supported',\n 'err.saveDrive': 'Failed to save to drive',\n 'msg.processing': 'Exporting…',\n 'msg.exportingHint': 'Please wait. The result will be returned automatically when export finishes.',\n 'msg.done': 'Done ✓',\n 'msg.loading': 'Loading media…',\n 'msg.exported': 'Exported: ',\n 'msg.saving': 'Saving…',\n 'msg.saved': 'Saved to drive ✓',\n 'lbl.ratioSection': 'Frame ratio (crop, no distortion)',\n 'lbl.dragToReposition': '↔ Drag the preview to reposition the crop',\n 'lbl.sizeSection': 'Export size (px; cover center-crop when ratios differ)',\n 'lbl.currentOut': 'Output',\n 'lbl.zoomSize': 'Size',\n 'lbl.noScale': '(no scaling)',\n 'lbl.coverNote': '· center-cropped (cover) when ratios differ, no distortion',\n 'lbl.audioTrackHint': '♪ Audio track (+ on the right to add music, mixed with original)',\n 'lbl.volume': 'Volume',\n 'lbl.volNote': '(preview caps at 100%, export uses the set value)',\n 'lbl.music': 'Music',\n 'kbd.fit': '⇧ F',\n 'poster.title': 'Pick a cover frame',\n 'panel.title': 'Media Editor',\n 'panel.subtitle': 'Upload an image / video — crop · filters · text · export',\n 'panel.pick': 'Click to choose an image or video',\n 'panel.pickHint': 'Images via Filerobot · videos: trim/mute/cover',\n};\n\nconst es: Record<string, string> = {\n 'tool.trim': 'Editar',\n 'tool.crop': 'Recortar',\n 'tool.tune': 'Ajustar color',\n 'tool.filter': 'Filtros',\n 'tool.annotate': 'Anotar',\n 'tool.sticker': 'Stickers',\n 'tool.resize': 'Proporción',\n 'tune.brightness': 'Brillo',\n 'tune.contrast': 'Contraste',\n 'tune.saturation': 'Saturación',\n 'tune.gamma': 'Gamma',\n 'overlay.select': 'Seleccionar',\n 'overlay.pen': 'Pincel',\n 'overlay.eraser': 'Borrador',\n 'overlay.line': 'Línea',\n 'overlay.arrow': 'Flecha',\n 'overlay.rect': 'Rectángulo',\n 'overlay.ellipse': 'Elipse',\n 'overlay.text': 'Texto',\n 'overlay.color': 'Color',\n 'overlay.width': 'Grosor',\n 'overlay.copySelected': 'Copiar',\n 'overlay.delSelected': 'Eliminar seleccionado',\n 'overlay.editSelected': 'Editar',\n 'overlay.pickImage': 'Elegir imagen',\n 'overlay.hint': 'Toca un emoji/imagen para añadirlo → arrastra para colocarlo, arrastra el tirador morado para escalar',\n 'overlay.textPlaceholder': 'Escribe texto, Enter para confirmar',\n 'filter.none': 'Original',\n 'filter.bw': 'Blanco y negro',\n 'filter.sepia': 'Sepia',\n 'filter.warm': 'Cálido',\n 'filter.cool': 'Frío',\n 'filter.vivid': 'Intenso',\n 'ratio.orig': 'Original',\n 'ratio.free': 'Libre',\n 'ratio.9:16': 'Vertical 9:16',\n 'ratio.16:9': 'Horizontal 16:9',\n 'ratio.1:1': 'Cuadrado 1:1',\n 'ratio.4:5': 'Vertical 4:5',\n 'act.fit': 'Ajustar',\n 'act.zoomFit': 'Ajustar a pantalla',\n 'act.zoomTo': 'Zoom al {value}%',\n 'act.split': 'Dividir',\n 'act.copy': 'Copiar',\n 'act.delete': 'Eliminar',\n 'act.restore': 'Restablecer',\n 'act.deleteMusic': 'Quitar música',\n 'act.cancel': 'Cancelar',\n 'act.exportPoster': 'Exportar portada',\n 'act.exporting': 'Exportando…',\n 'act.poster': '🖼 Portada',\n 'act.again': 'Descargar de nuevo',\n 'act.saveDrive': 'Guardar en disco',\n 'act.changeImage': '← Cambiar imagen',\n 'act.changeVideo': '← Cambiar archivo',\n 'crop.rotateLeft': '↺ Girar a la izquierda',\n 'crop.flipX': '⇋ Voltear horizontal',\n 'crop.flipY': '⇵ Voltear vertical',\n 'crop.rotateLeftShort': 'Giro',\n 'crop.flipXShort': 'Flip',\n 'crop.flipYShort': 'Flip',\n 'tip.close': 'Cerrar (cambiar archivo)',\n 'tip.undo': 'Deshacer',\n 'tip.redo': 'Rehacer',\n 'tip.resetOpened': 'Restablecer al archivo abierto',\n 'tip.previewZoom': 'Zoom de vista previa',\n 'tip.previewZoomOut': 'Reducir vista previa',\n 'tip.previewZoomIn': 'Ampliar vista previa',\n 'tip.previewZoomFit': 'Ajustar vista previa',\n 'tip.previewPointer': 'Herramienta de puntero',\n 'tip.previewPan': 'Mano: desplazar lienzo',\n 'tip.poster': 'Previsualizar y elegir portada',\n 'tip.keepAudio': 'Activar/desactivar audio original (mezclado con música; la vista previa lo refleja)',\n 'tip.split': 'Dividir el clip actual en el cursor',\n 'tip.zoomOut': 'Reducir línea de tiempo (Ctrl+rueda)',\n 'tip.zoomIn': 'Ampliar línea de tiempo (Ctrl+rueda)',\n 'tip.fit': 'Ajustar al ancho',\n 'tip.addVideo': 'Añadir clip de vídeo',\n 'tip.addAudio': 'Añadir música (archivo de audio o vídeo con sonido para extraer la pista; se mezcla con el original)',\n 'tip.dupClip': 'Duplicar clip (insertar después)',\n 'tip.delClip': 'Eliminar clip',\n 'tip.lockAspect': 'Bloquear proporción',\n 'tip.dblConfirm': 'Doble clic para confirmar recorte',\n 'err.notVideo': 'Elige un archivo de vídeo',\n 'err.maxVideo': 'Máximo {max} vídeos',\n 'err.videoLoad': 'No se pudo cargar el vídeo, prueba con otro archivo',\n 'err.notAudio': 'Elige un audio (mp3/wav/m4a) o un vídeo con sonido (se extrae automáticamente)',\n 'err.maxAudio': 'Máximo {max} audios',\n 'err.audioLoad': 'No se pudo cargar el audio, prueba con otro archivo',\n 'err.processFailed': 'Error de procesamiento',\n 'err.posterFailed': 'No se pudo renderizar la portada',\n 'err.canvas': 'Canvas no disponible',\n 'err.imageRead': 'No se pudo leer la imagen, prueba con otra',\n 'err.notImage': 'Elige un archivo de imagen',\n 'err.fileType': 'Solo se admiten archivos de imagen o vídeo',\n 'err.saveDrive': 'No se pudo guardar en disco',\n 'msg.processing': 'Exportando…',\n 'msg.exportingHint': 'Espera un momento. El resultado se devolverá automáticamente al finalizar.',\n 'msg.done': 'Listo ✓',\n 'msg.loading': 'Cargando medios…',\n 'msg.exported': 'Exportado: ',\n 'msg.saving': 'Guardando…',\n 'msg.saved': 'Guardado en disco ✓',\n 'lbl.ratioSection': 'Proporción de imagen (recorte, sin deformar)',\n 'lbl.dragToReposition': '↔ Arrastra la vista previa para reposicionar el recorte',\n 'lbl.sizeSection': 'Tamaño de exportación (px; recorte cover centrado si la proporción difiere)',\n 'lbl.currentOut': 'Salida',\n 'lbl.zoomSize': 'Tamaño',\n 'lbl.noScale': '(sin escala)',\n 'lbl.coverNote': '· recorte centrado (cover) cuando la proporción difiere, sin deformar',\n 'lbl.audioTrackHint': '♪ Pista de audio (+ a la derecha para añadir música, mezclada con el original)',\n 'lbl.volume': 'Volumen',\n 'lbl.volNote': '(la vista previa limita a 100%, la exportación usa el valor definido)',\n 'lbl.music': 'Música',\n 'kbd.fit': '⇧ F',\n 'poster.title': 'Elegir portada',\n 'panel.title': 'Editor multimedia',\n 'panel.subtitle': 'Sube una imagen / vídeo — recorta · filtros · texto · exporta',\n 'panel.pick': 'Haz clic para elegir una imagen o vídeo',\n 'panel.pickHint': 'Imágenes con Filerobot · vídeos: cortar/silenciar/portada',\n};\n\nconst ZH_HANT_MAP: Record<string, string> = {\n 简: '簡', 体: '體', 图: '圖', 频: '頻', 视: '視', 辑: '輯', 调: '調', 滤: '濾',\n 标: '標', 注: '註', 贴: '貼', 选: '選', 择: '擇', 线: '線', 箭: '箭', 头: '頭',\n 复: '複', 删: '刪', 除: '除', 编: '編', 边: '邊', 输: '輸', 入: '入', 确: '確',\n 认: '認', 饱: '飽', 对: '對', 暖: '暖', 阳: '陽', 冷: '冷', 纵: '縱', 横: '橫',\n 适: '適', 应: '應', 缩: '縮', 实: '實', 际: '際', 导: '導', 出: '出', 封: '封',\n 面: '面', 换: '換', 张: '張', 预: '預', 览: '覽', 动: '動', 声: '聲', 开: '開',\n 关: '關', 与: '與', 乐: '樂', 混: '混', 处: '處', 载: '載', 错: '錯', 误: '誤',\n 读: '讀', 仅: '僅', 终: '終', 稍: '稍', 候: '候', 返回: '返回',\n 当前: '目前', 输出: '輸出', 画: '畫', 变: '變', 音频: '音訊', 音轨: '音軌',\n 添加: '新增', 删除: '刪除', 保存: '儲存', 加载: '載入', 网盘: '網盤',\n};\n\nexport const toHant = (value: string) => {\n let next = value;\n for (const [from, to] of Object.entries(ZH_HANT_MAP).sort((a, b) => b[0].length - a[0].length)) {\n next = next.replaceAll(from, to);\n }\n return next;\n};\n\nconst zhHant: Record<string, string> = Object.fromEntries(\n Object.entries(zh).map(([key, value]) => [key, toHant(value)]),\n) as Record<string, string>;\n\nexport const EDITOR_MESSAGES: Record<EditorLocale, Record<string, string>> = { zh, en, es, 'zh-Hant': zhHant };\n\n/** 取文案;缺 key 兜底显示 key 本身;{name} 插值 */\nexport function tEditor(locale: EditorLocale, key: string, vars?: Record<string, string | number>): string {\n let s = EDITOR_MESSAGES[locale]?.[key] ?? EDITOR_MESSAGES.zh[key] ?? key;\n if (vars) {\n for (const [k, v] of Object.entries(vars)) s = s.replaceAll(`{${k}}`, String(v));\n }\n return s;\n}\n","/**\n * 内置平台发布目标表(SDK 自带默认值)。\n * 原 SocialEcho 仓从 lib/ark-config.ts 的 PUBLISH_TARGETS 派生预设;为让 SDK 自包含、\n * 去掉对宿主 ark-config 的硬依赖,这里内置编辑器预设真正用到的字段子集(15 行)。\n * 宿主仍可调 buildPlatformPresets(自己的 targets) 注入,保持单一真值源。\n */\nexport interface PlatformTarget {\n platform: string; // 'tiktok'\n postType: string; // 'video' | 'post' | 'reels' | ...\n label: string; // 'TikTok Video'\n shortLabel: string; // 'TT·Video'\n ratio: string; // '9:16'\n imageSize: string; // '1440x2560'\n videoRatio?: string; // '9:16'\n videoResolution?: '720p' | '1080p';\n}\n\n/** 默认平台表(与原仓 PUBLISH_TARGETS 同步;升级宿主数据时复核) */\nexport const DEFAULT_PLATFORM_TARGETS: PlatformTarget[] = [\n { platform: 'tiktok', postType: 'video', label: 'TikTok Video', shortLabel: 'TT·Video', ratio: '9:16', imageSize: '1440x2560', videoRatio: '9:16', videoResolution: '720p' },\n { platform: 'instagram', postType: 'post', label: 'Instagram Post', shortLabel: 'IG·Post', ratio: '1:1', imageSize: '2048x2048' },\n { platform: 'instagram', postType: 'reels', label: 'Instagram Reels', shortLabel: 'IG·Reels', ratio: '9:16', imageSize: '1440x2560', videoRatio: '9:16', videoResolution: '720p' },\n { platform: 'instagram', postType: 'story', label: 'Instagram Story', shortLabel: 'IG·Story', ratio: '9:16', imageSize: '1440x2560', videoRatio: '9:16', videoResolution: '720p' },\n { platform: 'facebook', postType: 'post', label: 'Facebook Post', shortLabel: 'FB·Post', ratio: '1:1', imageSize: '2048x2048' },\n { platform: 'facebook', postType: 'reels', label: 'Facebook Reels', shortLabel: 'FB·Reels', ratio: '9:16', imageSize: '1440x2560', videoRatio: '9:16', videoResolution: '720p' },\n { platform: 'youtube', postType: 'video', label: 'YouTube Video', shortLabel: 'YT·Video', ratio: '16:9', imageSize: '2560x1440', videoRatio: '16:9', videoResolution: '1080p' },\n { platform: 'youtube', postType: 'shorts', label: 'YouTube Shorts', shortLabel: 'YT·Shorts', ratio: '9:16', imageSize: '1440x2560', videoRatio: '9:16', videoResolution: '720p' },\n { platform: 'pinterest', postType: 'pin', label: 'Pinterest Pin', shortLabel: 'PIN', ratio: '2:3', imageSize: '1664x2496', videoRatio: '9:16', videoResolution: '720p' },\n { platform: 'x', postType: 'post', label: 'X Post', shortLabel: 'X·Post', ratio: '16:9', imageSize: '2560x1440', videoRatio: '16:9', videoResolution: '720p' },\n { platform: 'linkedin', postType: 'post', label: 'LinkedIn Post', shortLabel: 'LI·Post', ratio: '1:1', imageSize: '2048x2048' },\n { platform: 'linkedin', postType: 'video', label: 'LinkedIn Video', shortLabel: 'LI·Video', ratio: '16:9', imageSize: '2560x1440', videoRatio: '16:9', videoResolution: '1080p' },\n { platform: 'threads', postType: 'post', label: 'Threads Post', shortLabel: 'TH·Post', ratio: '1:1', imageSize: '2048x2048' },\n { platform: 'telegram', postType: 'post', label: 'Telegram Post', shortLabel: 'TG·Post', ratio: '1:1', imageSize: '2048x2048', videoRatio: '9:16', videoResolution: '720p' },\n { platform: 'reddit', postType: 'post', label: 'Reddit Post', shortLabel: 'RD·Post', ratio: '16:9', imageSize: '2560x1440', videoRatio: '16:9', videoResolution: '720p' },\n];\n","/**\n * 编辑器「平台 → 可选裁剪比例 / 输出尺寸」预设。\n * 默认从内置 DEFAULT_PLATFORM_TARGETS 派生(SDK 自包含);\n * 宿主可调 buildImagePlatformPresets/buildVideoSizePresets 传入自己的目标表保持单一真值源。\n */\nimport { DEFAULT_PLATFORM_TARGETS, type PlatformTarget } from './platform-table';\n\nexport interface RatioPreset {\n ratio: string; // '9:16'\n value: number; // 9/16\n label: string; // '竖屏 9:16'\n}\n\nconst RATIO_LABEL: Record<string, string> = {\n '1:1': '方形 1:1',\n '4:5': '竖图 4:5',\n '3:4': '竖图 3:4',\n '9:16': '竖屏 9:16',\n '16:9': '横屏 16:9',\n '2:3': '竖图 2:3',\n '1.91:1': '横幅 1.91:1',\n};\n\nexport function parseRatio(r: string): number {\n const [w, h] = r.split(':').map(Number);\n if (!w || !h) return 1;\n return w / h;\n}\n\nfunction dedupePresets(ratios: string[]): RatioPreset[] {\n const seen = new Set<string>();\n const out: RatioPreset[] = [];\n for (const r of ratios) {\n if (!r || seen.has(r)) continue;\n seen.add(r);\n out.push({ ratio: r, value: parseRatio(r), label: RATIO_LABEL[r] ?? r });\n }\n return out;\n}\n\n/** 图片比例预设:精确 7 项(顺序即 UI 顺序) */\nexport const IMAGE_RATIO_PRESETS: RatioPreset[] = dedupePresets([\n '1:1', '4:5', '3:4', '2:3', '9:16', '16:9', '1.91:1',\n]);\n\n/** 视频比例预设:精确 4 项(顺序即 UI 顺序) */\nexport const VIDEO_RATIO_PRESETS: RatioPreset[] = dedupePresets([\n '9:16', '16:9', '1:1', '4:5',\n]);\n\nexport interface VideoPlatformRatioPreset {\n platform: string;\n postType: string;\n label: string;\n ratio: string;\n value: number;\n}\n\n/** 视频平台比例快捷入口:从目标表 videoRatio 派生,保留平台/类型,按 platform+type+ratio 去重 */\nexport function buildVideoPlatformRatioPresets(targets: PlatformTarget[] = DEFAULT_PLATFORM_TARGETS): VideoPlatformRatioPreset[] {\n const seen = new Set<string>();\n const out: VideoPlatformRatioPreset[] = [];\n for (const t of targets) {\n if (!t.videoRatio) continue;\n const key = `${t.platform}:${t.postType}:${t.videoRatio}`;\n if (seen.has(key)) continue;\n seen.add(key);\n const name = t.label.split(' ').slice(0, -1).join(' ') || t.label;\n out.push({ platform: t.platform, postType: t.postType, label: `${name} ${t.videoRatio}`, ratio: t.videoRatio, value: parseRatio(t.videoRatio) });\n }\n return out;\n}\n\nexport const VIDEO_PLATFORM_RATIO_PRESETS: VideoPlatformRatioPreset[] = buildVideoPlatformRatioPresets();\n\n// ─── 图片平台推荐预设 ──────────────────────────────────────────────\n\nexport interface PlatformPreset {\n platform: string; // 'instagram'\n label: string; // 'Instagram 1:1'\n ratio: string; // '1:1'\n value: number; // 1\n w: number; // 2048\n h: number; // 2048\n}\n\n/** 每平台一条(优先 postType='post',否则取该平台首条);w/h 来自 imageSize */\nexport function buildImagePlatformPresets(targets: PlatformTarget[] = DEFAULT_PLATFORM_TARGETS): PlatformPreset[] {\n const byPlatform = new Map<string, PlatformTarget>();\n for (const t of targets) {\n const cur = byPlatform.get(t.platform);\n if (!cur || (cur.postType !== 'post' && t.postType === 'post')) byPlatform.set(t.platform, t);\n }\n return Array.from(byPlatform.values()).map((t) => {\n const [w, h] = t.imageSize.split('x').map(Number);\n const name = t.label.split(' ').slice(0, -1).join(' ') || t.label;\n return { platform: t.platform, label: `${name} ${t.ratio}`, ratio: t.ratio, value: parseRatio(t.ratio), w, h };\n });\n}\n\n/** 默认图片平台预设(内置表派生) */\nexport const IMAGE_PLATFORM_PRESETS: PlatformPreset[] = buildImagePlatformPresets();\n\n// ─── 视频输出尺寸预设 ──────────────────────────────────────────────\n\nexport interface SizePreset {\n label: string; // 'TikTok 1080×1920'\n w: number;\n h: number;\n}\n\nfunction sizeOf(ratioValue: number, shortSide: number): { w: number; h: number } {\n if (ratioValue >= 1) {\n return { w: Math.round((shortSide * ratioValue) / 2) * 2, h: shortSide };\n }\n return { w: shortSide, h: Math.round(shortSide / ratioValue / 2) * 2 };\n}\n\n/** 视频输出尺寸预设:从目标表派生(平台标签 + 实际像素),按 w×h 去重 */\nexport function buildVideoSizePresets(targets: PlatformTarget[] = DEFAULT_PLATFORM_TARGETS): SizePreset[] {\n const seen = new Set<string>();\n const out: SizePreset[] = [];\n for (const t of targets) {\n if (!t.videoRatio || !t.videoResolution) continue;\n const shortSide = t.videoResolution === '1080p' ? 1080 : 720;\n const { w, h } = sizeOf(parseRatio(t.videoRatio), shortSide);\n const key = `${w}x${h}`;\n if (seen.has(key)) continue;\n seen.add(key);\n out.push({ label: `${t.shortLabel} ${w}×${h}`, w, h });\n }\n return out;\n}\n\n/** 默认视频尺寸预设(内置表派生) */\nexport const VIDEO_SIZE_PRESETS: SizePreset[] = buildVideoSizePresets();\n","/**\n * Filerobot 图片编辑器的标注旋转补偿(纯函数,供 ImageEditor 注入 config.onAnnotationAdd)。\n *\n * 背景:Filerobot 把 rotation 加在整个 Konva DesignLayer 上(DesignLayerWrapper),\n * 新标注挂进同一层会继承父层旋转 → 旋转图片后再贴文字,文字方向跟着转。\n * onAnnotationAdd 是 5.0.0-beta.159 真实存在但未写进 index.d.ts 的 config 钩子:\n * 源码 lib/actions/setAnnotation.js 在「新建标注」时调用 (annotation, 全量state),\n * 把返回的 partial 合并进标注 —— 这里给新标注反向初始 rotation,与父层旋转叠加后视觉正向。\n */\nexport function compensateAnnotationRotation(\n ann: { rotation?: number; isDuplicated?: boolean },\n state: { adjustments?: { rotation?: number } }\n): { rotation?: number } {\n if (ann.isDuplicated) return {}; // 复制体已继承原件 rotation,不得重复补偿\n if ((ann.rotation ?? 0) !== 0) return {}; // 已带角度的(回填/再编辑)不动\n const rot = state.adjustments?.rotation ?? 0;\n return rot ? { rotation: -rot } : {};\n}\n"]}
@@ -0,0 +1,242 @@
1
+ import { A as AudioClipT, C as ClipT, V as VideoEditStateT } from './state-B85vkf7_.cjs';
2
+ export { a as AudioClip, b as Clip, c as Overlay, O as OverlayT, d as VideoEditState, e as defaultVideoEditState } from './state-B85vkf7_.cjs';
3
+ export { D as DEFAULT_PLATFORM_TARGETS, a as EDITOR_MESSAGES, E as EditorLocale, I as IMAGE_PLATFORM_PRESETS, b as IMAGE_RATIO_PRESETS, P as PlatformPreset, c as PlatformTarget, R as RatioPreset, S as SizePreset, V as VIDEO_PLATFORM_RATIO_PRESETS, d as VIDEO_RATIO_PRESETS, e as VIDEO_SIZE_PRESETS, f as VideoPlatformRatioPreset, g as buildImagePlatformPresets, h as buildVideoPlatformRatioPresets, i as buildVideoSizePresets, p as parseRatio, t as tEditor, j as toHant } from './platform-presets-B-o4C6uY.cjs';
4
+ import 'zod';
5
+
6
+ /**
7
+ * editor-core/timeline v2 —— 输出时间轴纯函数(多素材 clips/audioClips 操作)。
8
+ * 从 UI 抽出,Vue/React 壳共用;全部不可变(返回新数组)。
9
+ *
10
+ * 模型:clips 数组顺序 = 输出拼接顺序;输出时间轴 x = Σ前序片段时长。
11
+ * 所有 "t" 参数除特别说明外都是**输出时间**;trimClipEdge 的 srcT 是源时间。
12
+ */
13
+
14
+ declare const MIN_CLIP = 0.1;
15
+ /** 片段时长 */
16
+ declare function clipDuration(c: ClipT): number;
17
+ /** 输出总时长 */
18
+ declare function totalDuration(clips: ClipT[]): number;
19
+ /** 第 idx 个片段在输出时间轴上的起点(前缀和) */
20
+ declare function clipStartsAt(clips: ClipT[], idx: number): number;
21
+ /**
22
+ * 输出时间 t → 所属片段与源内时刻。
23
+ * 交界时刻归后段(前段已播完);t === total 归末段(srcTime = out);
24
+ * t 越界或 clips 为空返回 null。
25
+ */
26
+ declare function locateOutput(clips: ClipT[], t: number): {
27
+ idx: number;
28
+ srcTime: number;
29
+ } | null;
30
+ /** 在输出时刻 t 处把所属片段一分为二;距两端 <MIN_CLIP 返回原数组 */
31
+ declare function splitAtOutput(clips: ClipT[], t: number): ClipT[];
32
+ /** 删除第 idx 个片段;只剩一段时不可删,返回原数组 */
33
+ declare function removeClip(clips: ClipT[], idx: number): ClipT[];
34
+ /** 复制第 idx 个片段,插到原段之后 */
35
+ declare function duplicateClip(clips: ClipT[], idx: number): ClipT[];
36
+ /** 拖拽重排:把第 from 段移动到第 to 位 */
37
+ declare function reorderClips(clips: ClipT[], from: number, to: number): ClipT[];
38
+ /**
39
+ * 拖片段把手:把第 idx 段的 in/out 改到源时刻 srcT。
40
+ * in 钳 [0, out-MIN_CLIP];out 钳 [in+MIN_CLIP, srcDuration]。
41
+ */
42
+ declare function trimClipEdge(clips: ClipT[], idx: number, edge: 'in' | 'out', srcT: number, srcDuration: number): ClipT[];
43
+ /**
44
+ * 音乐片段钳制:in/out 在源时长内且 out-in≥MIN_CLIP;
45
+ * startAt ∈ [0, max(0, total-MIN_CLIP)] —— 允许尾部悬出输出末尾(导出 amix duration=first 截断)。
46
+ */
47
+ declare function clampAudioClip(a: AudioClipT, srcDuration: number, total: number): AudioClipT;
48
+ /**
49
+ * 时间轴内容时长 = max(视频总长, 音乐悬出末端)。
50
+ * 用于内容宽度/适应缩放/标尺——音乐尾部悬出视频末尾时也要看得见;
51
+ * 播放头/seek 仍以视频总长为界(导出 amix duration=first 同语义)。
52
+ */
53
+ declare function contentDuration(clips: ClipT[], audioClips?: AudioClipT[]): number;
54
+ /** clips 实际引用到的视频源序号(升序去重)——导出前压缩上传用 */
55
+ declare function usedVideoSrcIndices(clips: ClipT[]): number[];
56
+ /** 把 clips 的 srcIdx 重映射为 used 中的序号(与压缩后的上传文件序对齐) */
57
+ declare function remapSrcIndices(clips: ClipT[], used: number[]): ClipT[];
58
+
59
+ /**
60
+ * editor-core/ffmpeg-args v2 —— VideoEditState → FFmpeg 参数(纯函数,服务端执行)。
61
+ * 安全:只接受结构化 state + 服务端落盘的文件路径数组;文件内容不进命令行。
62
+ *
63
+ * 多素材模型:clips 数组序 = 输出拼接序;每片段先归一到画布
64
+ * (cover 居中裁剪 + setsar=1 + fps=30 + format=yuv420p,防 concat 流参数不齐),
65
+ * concat 后过全局画面链(flips → rotate → crop → scale → eq → 预设滤镜),最后 overlay。
66
+ * 音频:原声(keepAudio,无音轨源用 anullsrc 补齐) concat → 与音乐(atrim+volume+adelay)
67
+ * amix=duration=first(锚定视频长):normalize=0(不自动衰减)。
68
+ *
69
+ * 单视频源且无音乐时走 v1 快路径(-ss/-t 或单输入 filter_complex),隔离回归面。
70
+ */
71
+
72
+ /** 服务端按 srcIdx 顺序落盘后的路径与探测结果 */
73
+ interface FfmpegIo {
74
+ /** index 与 clip.srcIdx 对齐(客户端导出前已压缩重映射) */
75
+ videoPaths: string[];
76
+ /** 与 videoPaths 等长,probeHasAudio 结果 */
77
+ videoHasAudio: boolean[];
78
+ /** index 与 audioClip.srcIdx 对齐 */
79
+ audioPaths: string[];
80
+ overlayPath?: string;
81
+ }
82
+ /**
83
+ * v2 主入口:多视频源 concat + 音乐 amix + 全局链 + overlay。
84
+ * 输入序:视频 0..N-1 → 音乐 N..N+M-1 → overlay N+M。
85
+ */
86
+ declare function buildFfmpegArgs(state: VideoEditStateT, io: FfmpegIo, output: string): string[];
87
+ /** 封面帧:在 time 处抽 1 帧 jpg */
88
+ declare function buildPosterArgs(input: string, time: number, output: string): string[];
89
+
90
+ /**
91
+ * editor-core/transform —— 旋转/坐标换算纯函数。
92
+ * 与 ffmpeg 的 rotw/roth 同公式,保证预览画布与导出尺寸一致。
93
+ */
94
+ declare const DEG2RAD: number;
95
+ /** 旋转 deg 度后的外接框尺寸(= ffmpeg rotate 滤镜 ow=rotw/oh=roth) */
96
+ declare function rotatedSize(w: number, h: number, deg: number): {
97
+ w: number;
98
+ h: number;
99
+ };
100
+ /** 角度归一化到 [0,360) */
101
+ declare function normalizeDeg(deg: number): number;
102
+ /** h264 偶数像素对齐 */
103
+ declare function evenize(n: number): number;
104
+ /** 把 rect 钳制在 bounds 内(裁剪框拖拽用) */
105
+ declare function clampRect(rect: {
106
+ x: number;
107
+ y: number;
108
+ width: number;
109
+ height: number;
110
+ }, bounds: {
111
+ w: number;
112
+ h: number;
113
+ }, minSize?: number): {
114
+ x: number;
115
+ y: number;
116
+ width: number;
117
+ height: number;
118
+ };
119
+ /** 给定纵横比,在 bounds 内求居中最大 rect(比例预设落框用) */
120
+ declare function centeredMaxRect(bounds: {
121
+ w: number;
122
+ h: number;
123
+ }, aspect: number): {
124
+ x: number;
125
+ y: number;
126
+ width: number;
127
+ height: number;
128
+ };
129
+ type FitMode = 'cover' | 'contain' | 'force';
130
+ /**
131
+ * scale 的 fit 语义 → 源/目标矩形对(预览画布与 ffmpeg 严格同语义):
132
+ * - cover:源侧取目标比例的居中最大区(= ffmpeg scale:force_original_aspect_ratio=increase + 居中 crop),不变形
133
+ * - contain:目标侧居中留黑边(= ffmpeg scale:decrease + pad)
134
+ * - force:双全幅拉伸(= ffmpeg scale=W:H)
135
+ * src 坐标相对 crop 区原点;dst 坐标相对输出原点。
136
+ */
137
+ declare function fitRects(crop: {
138
+ width: number;
139
+ height: number;
140
+ }, out: {
141
+ w: number;
142
+ h: number;
143
+ }, fit: FitMode): {
144
+ src: {
145
+ x: number;
146
+ y: number;
147
+ width: number;
148
+ height: number;
149
+ };
150
+ dst: {
151
+ x: number;
152
+ y: number;
153
+ width: number;
154
+ height: number;
155
+ };
156
+ };
157
+ /** 导出产物的最终输出尺寸(决定 overlay PNG 的分辨率) */
158
+ declare function outputSize(source: {
159
+ w: number;
160
+ h: number;
161
+ }, state: {
162
+ rotation: number;
163
+ crop?: {
164
+ width: number;
165
+ height: number;
166
+ } | undefined;
167
+ scale?: {
168
+ width: number;
169
+ height: number;
170
+ } | undefined;
171
+ }): {
172
+ w: number;
173
+ h: number;
174
+ };
175
+
176
+ /**
177
+ * editor-core/filters —— 预设滤镜表(数据驱动)。
178
+ * vf = ffmpeg 滤镜片段(导出真值);css = 浏览器预览近似。
179
+ * 全部使用 ffmpeg-static 6.x 标配滤镜(hue/eq/colorbalance/colorchannelmixer)。
180
+ */
181
+ interface FilterPreset {
182
+ id: string;
183
+ label: string;
184
+ vf: string;
185
+ css: string;
186
+ }
187
+ declare const FILTER_PRESETS: FilterPreset[];
188
+ declare function findFilterPreset(id: string | undefined): FilterPreset | undefined;
189
+ /**
190
+ * 拼出 canvas/CSS 用的 filter 字符串(预览与帧合成共用)。
191
+ * brightness/contrast/saturation 来自手调 [-1,1] → 1+v;叠加预设 css。
192
+ * gamma 无 CSS 等价(仅 ffmpeg 导出生效),此处不含。
193
+ */
194
+ declare function buildFilterCss(filters: {
195
+ brightness: number;
196
+ contrast: number;
197
+ saturation: number;
198
+ }, presetId?: string): string;
199
+
200
+ /**
201
+ * editor-core/history —— 不可变快照 undo/redo 栈(纯函数)。
202
+ * 泛型,对 EditState 的 JSON 快照工作;壳层(React/Vue)只持有 History<T> 并 set 回去。
203
+ */
204
+ interface History<T> {
205
+ past: T[];
206
+ present: T;
207
+ future: T[];
208
+ }
209
+ declare function createHistory<T>(initial: T): History<T>;
210
+ /** 写入新状态(清空 redo 栈);浅比较相同引用则原样返回 */
211
+ declare function pushHistory<T>(h: History<T>, next: T): History<T>;
212
+ /**
213
+ * 替换当前态但不入栈(高频拖拽的中间帧用):
214
+ * 拖动过程 replacePresent 持续刷新,pointerup 时再 pushHistory 定格一步。
215
+ */
216
+ declare function replacePresent<T>(h: History<T>, next: T): History<T>;
217
+ declare function canUndo<T>(h: History<T>): boolean;
218
+ declare function canRedo<T>(h: History<T>): boolean;
219
+ declare function undo<T>(h: History<T>): History<T>;
220
+ declare function redo<T>(h: History<T>): History<T>;
221
+
222
+ /**
223
+ * Filerobot 图片编辑器的标注旋转补偿(纯函数,供 ImageEditor 注入 config.onAnnotationAdd)。
224
+ *
225
+ * 背景:Filerobot 把 rotation 加在整个 Konva DesignLayer 上(DesignLayerWrapper),
226
+ * 新标注挂进同一层会继承父层旋转 → 旋转图片后再贴文字,文字方向跟着转。
227
+ * onAnnotationAdd 是 5.0.0-beta.159 真实存在但未写进 index.d.ts 的 config 钩子:
228
+ * 源码 lib/actions/setAnnotation.js 在「新建标注」时调用 (annotation, 全量state),
229
+ * 把返回的 partial 合并进标注 —— 这里给新标注反向初始 rotation,与父层旋转叠加后视觉正向。
230
+ */
231
+ declare function compensateAnnotationRotation(ann: {
232
+ rotation?: number;
233
+ isDuplicated?: boolean;
234
+ }, state: {
235
+ adjustments?: {
236
+ rotation?: number;
237
+ };
238
+ }): {
239
+ rotation?: number;
240
+ };
241
+
242
+ export { AudioClipT, ClipT, DEG2RAD, FILTER_PRESETS, type FfmpegIo, type FilterPreset, type FitMode, type History, MIN_CLIP, VideoEditStateT, buildFfmpegArgs, buildFilterCss, buildPosterArgs, canRedo, canUndo, centeredMaxRect, clampAudioClip, clampRect, clipDuration, clipStartsAt, compensateAnnotationRotation, contentDuration, createHistory, duplicateClip, evenize, findFilterPreset, fitRects, locateOutput, normalizeDeg, outputSize, pushHistory, redo, remapSrcIndices, removeClip, reorderClips, replacePresent, rotatedSize, splitAtOutput, totalDuration, trimClipEdge, undo, usedVideoSrcIndices };