@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.
- package/LICENSE +21 -0
- package/README.md +51 -0
- package/dist/index.cjs +282 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +54 -0
- package/dist/index.d.ts +54 -0
- package/dist/index.js +240 -0
- package/dist/index.js.map +1 -0
- package/filerobot.css +1669 -0
- package/node_modules/@media-editor/client/LICENSE +21 -0
- package/node_modules/@media-editor/client/README.md +27 -0
- package/node_modules/@media-editor/client/dist/index.cjs +60 -0
- package/node_modules/@media-editor/client/dist/index.cjs.map +1 -0
- package/node_modules/@media-editor/client/dist/index.d.cts +24 -0
- package/node_modules/@media-editor/client/dist/index.d.ts +24 -0
- package/node_modules/@media-editor/client/dist/index.js +35 -0
- package/node_modules/@media-editor/client/dist/index.js.map +1 -0
- package/node_modules/@media-editor/client/package.json +23 -0
- package/node_modules/@media-editor/core/LICENSE +21 -0
- package/node_modules/@media-editor/core/README.md +14 -0
- package/node_modules/@media-editor/core/dist/browser.cjs +505 -0
- package/node_modules/@media-editor/core/dist/browser.cjs.map +1 -0
- package/node_modules/@media-editor/core/dist/browser.d.cts +100 -0
- package/node_modules/@media-editor/core/dist/browser.d.ts +100 -0
- package/node_modules/@media-editor/core/dist/browser.js +883 -0
- package/node_modules/@media-editor/core/dist/browser.js.map +1 -0
- package/node_modules/@media-editor/core/dist/chunk-MGKYVYOH.js +371 -0
- package/node_modules/@media-editor/core/dist/chunk-MGKYVYOH.js.map +1 -0
- package/node_modules/@media-editor/core/dist/chunk-USY6UDGL.js +87 -0
- package/node_modules/@media-editor/core/dist/chunk-USY6UDGL.js.map +1 -0
- package/node_modules/@media-editor/core/dist/chunk-XCBM7P7N.js +592 -0
- package/node_modules/@media-editor/core/dist/chunk-XCBM7P7N.js.map +1 -0
- package/node_modules/@media-editor/core/dist/engine.cjs +540 -0
- package/node_modules/@media-editor/core/dist/engine.cjs.map +1 -0
- package/node_modules/@media-editor/core/dist/engine.d.cts +325 -0
- package/node_modules/@media-editor/core/dist/engine.d.ts +359 -0
- package/node_modules/@media-editor/core/dist/engine.js +315 -0
- package/node_modules/@media-editor/core/dist/engine.js.map +1 -0
- package/node_modules/@media-editor/core/dist/filerobot.cjs +818 -0
- package/node_modules/@media-editor/core/dist/filerobot.cjs.map +1 -0
- package/node_modules/@media-editor/core/dist/filerobot.d.cts +88 -0
- package/node_modules/@media-editor/core/dist/filerobot.d.ts +88 -0
- package/node_modules/@media-editor/core/dist/filerobot.js +473 -0
- package/node_modules/@media-editor/core/dist/filerobot.js.map +1 -0
- package/node_modules/@media-editor/core/dist/index.cjs +1276 -0
- package/node_modules/@media-editor/core/dist/index.cjs.map +1 -0
- package/node_modules/@media-editor/core/dist/index.d.cts +242 -0
- package/node_modules/@media-editor/core/dist/index.d.ts +264 -0
- package/node_modules/@media-editor/core/dist/index.js +682 -0
- package/node_modules/@media-editor/core/dist/index.js.map +1 -0
- package/node_modules/@media-editor/core/dist/platform-presets-B-o4C6uY.d.cts +80 -0
- package/node_modules/@media-editor/core/dist/platform-presets-B-o4C6uY.d.ts +80 -0
- package/node_modules/@media-editor/core/dist/state-B85vkf7_.d.cts +936 -0
- package/node_modules/@media-editor/core/dist/state-B85vkf7_.d.ts +1027 -0
- package/node_modules/@media-editor/core/node_modules/zod/LICENSE +21 -0
- package/node_modules/@media-editor/core/node_modules/zod/README.md +208 -0
- package/node_modules/@media-editor/core/node_modules/zod/index.cjs +33 -0
- package/node_modules/@media-editor/core/node_modules/zod/index.d.cts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/index.d.ts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/index.js +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/package.json +118 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/ZodError.cjs +138 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/ZodError.d.cts +164 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/ZodError.d.ts +164 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/ZodError.js +133 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/errors.cjs +17 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/errors.d.cts +5 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/errors.d.ts +5 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/errors.js +9 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/external.cjs +22 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/external.d.cts +6 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/external.d.ts +6 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/external.js +6 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/enumUtil.cjs +2 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/enumUtil.d.cts +8 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/enumUtil.d.ts +8 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/enumUtil.js +1 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/errorUtil.cjs +9 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/errorUtil.d.cts +9 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/errorUtil.d.ts +9 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/errorUtil.js +6 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/parseUtil.cjs +124 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/parseUtil.d.cts +78 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/parseUtil.d.ts +78 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/parseUtil.js +109 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/partialUtil.cjs +2 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/partialUtil.d.cts +8 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/partialUtil.d.ts +8 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/partialUtil.js +1 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/typeAliases.cjs +2 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/typeAliases.d.cts +2 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/typeAliases.d.ts +2 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/typeAliases.js +1 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/util.cjs +137 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/util.d.cts +85 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/util.d.ts +85 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/util.js +133 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/index.cjs +33 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/index.d.cts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/index.d.ts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/index.js +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/locales/en.cjs +111 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/locales/en.d.cts +3 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/locales/en.d.ts +3 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/locales/en.js +109 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/standard-schema.cjs +2 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/standard-schema.d.cts +102 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/standard-schema.d.ts +102 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/standard-schema.js +1 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/types.cjs +3775 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/types.d.cts +1031 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/types.d.ts +1031 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/types.js +3693 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/classic/checks.cjs +32 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/classic/checks.d.cts +1 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/classic/checks.d.ts +1 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/classic/checks.js +1 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/classic/coerce.cjs +47 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/classic/coerce.d.cts +17 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/classic/coerce.d.ts +17 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/classic/coerce.js +17 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/classic/compat.cjs +57 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/classic/compat.d.cts +46 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/classic/compat.d.ts +46 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/classic/compat.js +27 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/classic/errors.cjs +67 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/classic/errors.d.cts +30 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/classic/errors.d.ts +30 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/classic/errors.js +41 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/classic/external.cjs +70 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/classic/external.d.cts +13 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/classic/external.d.ts +13 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/classic/external.js +18 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/classic/index.cjs +33 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/classic/index.d.cts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/classic/index.d.ts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/classic/index.js +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/classic/iso.cjs +60 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/classic/iso.d.cts +22 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/classic/iso.d.ts +22 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/classic/iso.js +30 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/classic/parse.cjs +32 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/classic/parse.d.cts +23 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/classic/parse.d.ts +23 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/classic/parse.js +6 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/classic/schemas.cjs +1109 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/classic/schemas.d.cts +630 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/classic/schemas.d.ts +630 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/classic/schemas.js +1006 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/core/api.cjs +1039 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/core/api.d.cts +284 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/core/api.d.ts +284 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/core/api.js +906 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/core/checks.cjs +591 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/core/checks.d.cts +278 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/core/checks.d.ts +278 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/core/checks.js +565 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/core/core.cjs +67 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/core/core.d.cts +49 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/core/core.d.ts +49 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/core/core.js +61 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/core/doc.cjs +39 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/core/doc.d.cts +14 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/core/doc.d.ts +14 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/core/doc.js +35 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/core/errors.cjs +226 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/core/errors.d.cts +208 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/core/errors.d.ts +208 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/core/errors.js +195 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/core/function.cjs +102 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/core/function.d.cts +52 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/core/function.d.ts +52 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/core/function.js +75 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/core/index.cjs +44 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/core/index.d.cts +15 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/core/index.d.ts +15 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/core/index.js +15 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/core/json-schema.cjs +2 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/core/json-schema.d.cts +87 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/core/json-schema.d.ts +87 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/core/json-schema.js +1 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/core/parse.cjs +87 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/core/parse.d.cts +25 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/core/parse.d.ts +25 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/core/parse.js +57 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/core/regexes.cjs +103 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/core/regexes.d.cts +62 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/core/regexes.d.ts +62 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/core/regexes.js +95 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/core/registries.cjs +56 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/core/registries.d.cts +35 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/core/registries.d.ts +35 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/core/registries.js +51 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/core/schemas.cjs +1748 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/core/schemas.d.cts +1041 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/core/schemas.d.ts +1041 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/core/schemas.js +1717 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/core/standard-schema.cjs +2 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/core/standard-schema.d.cts +55 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/core/standard-schema.d.ts +55 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/core/standard-schema.js +1 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/core/to-json-schema.cjs +854 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/core/to-json-schema.d.cts +88 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/core/to-json-schema.d.ts +88 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/core/to-json-schema.js +849 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/core/util.cjs +539 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/core/util.d.cts +183 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/core/util.d.ts +183 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/core/util.js +493 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/core/versions.cjs +8 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/core/versions.d.cts +5 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/core/versions.d.ts +5 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/core/versions.js +5 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/index.cjs +22 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/index.d.cts +3 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/index.d.ts +3 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/index.js +3 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ar.cjs +142 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ar.d.cts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ar.d.ts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ar.js +116 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/az.cjs +141 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/az.d.cts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/az.d.ts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/az.js +115 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/be.cjs +190 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/be.d.cts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/be.d.ts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/be.js +164 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ca.cjs +144 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ca.d.cts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ca.d.ts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ca.js +118 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/cs.cjs +161 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/cs.d.cts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/cs.d.ts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/cs.js +135 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/de.cjs +142 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/de.d.cts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/de.d.ts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/de.js +116 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/en.cjs +145 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/en.d.cts +5 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/en.d.ts +5 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/en.js +117 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/eo.cjs +144 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/eo.d.cts +5 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/eo.d.ts +5 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/eo.js +116 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/es.cjs +143 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/es.d.cts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/es.d.ts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/es.js +117 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/fa.cjs +148 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/fa.d.cts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/fa.d.ts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/fa.js +122 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/fi.cjs +148 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/fi.d.cts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/fi.d.ts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/fi.js +122 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/fr-CA.cjs +143 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/fr-CA.d.cts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/fr-CA.d.ts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/fr-CA.js +117 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/fr.cjs +142 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/fr.d.cts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/fr.d.ts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/fr.js +116 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/he.cjs +143 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/he.d.cts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/he.d.ts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/he.js +117 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/hu.cjs +143 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/hu.d.cts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/hu.d.ts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/hu.js +117 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/id.cjs +142 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/id.d.cts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/id.d.ts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/id.js +116 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/index.cjs +84 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/index.d.cts +39 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/index.d.ts +39 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/index.js +39 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/it.cjs +143 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/it.d.cts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/it.d.ts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/it.js +117 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ja.cjs +141 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ja.d.cts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ja.d.ts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ja.js +115 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/kh.cjs +143 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/kh.d.cts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/kh.d.ts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/kh.js +117 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ko.cjs +147 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ko.d.cts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ko.d.ts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ko.js +121 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/mk.cjs +144 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/mk.d.cts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/mk.d.ts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/mk.js +118 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ms.cjs +142 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ms.d.cts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ms.d.ts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ms.js +116 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/nl.cjs +143 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/nl.d.cts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/nl.d.ts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/nl.js +117 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/no.cjs +142 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/no.d.cts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/no.d.ts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/no.js +116 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ota.cjs +143 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ota.d.cts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ota.d.ts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ota.js +117 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/pl.cjs +143 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/pl.d.cts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/pl.d.ts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/pl.js +117 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ps.cjs +148 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ps.d.cts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ps.d.ts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ps.js +122 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/pt.cjs +142 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/pt.d.cts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/pt.d.ts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/pt.js +116 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ru.cjs +190 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ru.d.cts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ru.d.ts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ru.js +164 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/sl.cjs +143 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/sl.d.cts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/sl.d.ts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/sl.js +117 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/sv.cjs +144 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/sv.d.cts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/sv.d.ts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/sv.js +118 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ta.cjs +143 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ta.d.cts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ta.d.ts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ta.js +117 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/th.cjs +143 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/th.d.cts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/th.d.ts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/th.js +117 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/tr.cjs +143 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/tr.d.cts +5 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/tr.d.ts +5 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/tr.js +115 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ua.cjs +143 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ua.d.cts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ua.d.ts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ua.js +117 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ur.cjs +143 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ur.d.cts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ur.d.ts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/ur.js +117 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/vi.cjs +142 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/vi.d.cts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/vi.d.ts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/vi.js +116 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/zh-CN.cjs +142 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/zh-CN.d.cts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/zh-CN.d.ts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/zh-CN.js +116 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/zh-TW.cjs +143 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/zh-TW.d.cts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/zh-TW.d.ts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/locales/zh-TW.js +117 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/mini/checks.cjs +34 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/mini/checks.d.cts +1 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/mini/checks.d.ts +1 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/mini/checks.js +1 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/mini/coerce.cjs +47 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/mini/coerce.d.cts +7 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/mini/coerce.d.ts +7 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/mini/coerce.js +17 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/mini/external.cjs +62 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/mini/external.d.cts +11 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/mini/external.d.ts +11 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/mini/external.js +13 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/mini/index.cjs +32 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/mini/index.d.cts +3 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/mini/index.d.ts +3 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/mini/index.js +3 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/mini/iso.cjs +60 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/mini/iso.d.cts +22 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/mini/iso.d.ts +22 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/mini/iso.js +30 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/mini/parse.cjs +8 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/mini/parse.d.cts +1 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/mini/parse.d.ts +1 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/mini/parse.js +1 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/mini/schemas.cjs +839 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/mini/schemas.d.cts +356 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/mini/schemas.d.ts +356 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4/mini/schemas.js +732 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4-mini/index.cjs +17 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4-mini/index.d.cts +1 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4-mini/index.d.ts +1 -0
- package/node_modules/@media-editor/core/node_modules/zod/v4-mini/index.js +1 -0
- package/node_modules/@media-editor/core/package.json +42 -0
- package/node_modules/@media-editor/image/LICENSE +21 -0
- package/node_modules/@media-editor/image/README.md +48 -0
- package/node_modules/@media-editor/image/dist/chunk-5TBO732O.js +1 -0
- package/node_modules/@media-editor/image/dist/index-CU3vkvDR.d.ts +44 -0
- package/node_modules/@media-editor/image/dist/index.css +1 -0
- package/node_modules/@media-editor/image/dist/index.d.ts +2 -0
- package/node_modules/@media-editor/image/dist/index.js +364 -0
- package/node_modules/@media-editor/image/dist/lazy.css +1 -0
- package/node_modules/@media-editor/image/dist/lazy.d.ts +8 -0
- package/node_modules/@media-editor/image/dist/lazy.js +1 -0
- package/node_modules/@media-editor/image/package.json +29 -0
- package/node_modules/@media-editor/video/LICENSE +21 -0
- package/node_modules/@media-editor/video/README.md +55 -0
- package/node_modules/@media-editor/video/dist/chunk-EK7ODJWE.js +1 -0
- package/node_modules/@media-editor/video/dist/index-CX2iAapm.d.ts +51 -0
- package/node_modules/@media-editor/video/dist/index.d.ts +4 -0
- package/node_modules/@media-editor/video/dist/index.js +16919 -0
- package/node_modules/@media-editor/video/dist/lazy.d.ts +10 -0
- package/node_modules/@media-editor/video/dist/lazy.js +1 -0
- package/node_modules/@media-editor/video/dist/legacy.js +65 -0
- package/node_modules/@media-editor/video/package.json +29 -0
- package/package.json +48 -0
- package/style.css +1 -0
- package/theme.css +1214 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/i18n.ts","../src/platform-table.ts","../src/platform-presets.ts","../src/filerobot-annotation.ts"],"names":[],"mappings":"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","file":"chunk-XCBM7P7N.js","sourcesContent":["/**\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,540 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var zod = require('zod');
|
|
4
|
+
|
|
5
|
+
// src/state.ts
|
|
6
|
+
var StrokeCommon = {
|
|
7
|
+
color: zod.z.string().max(32),
|
|
8
|
+
width: zod.z.number().positive().max(200)
|
|
9
|
+
};
|
|
10
|
+
var RotationCommon = {
|
|
11
|
+
rotation: zod.z.number().min(-180).max(180).optional()
|
|
12
|
+
};
|
|
13
|
+
var Overlay = zod.z.discriminatedUnion("type", [
|
|
14
|
+
// 自由画笔:扁平点序列 [x0,y0,x1,y1,...]
|
|
15
|
+
zod.z.object({ type: zod.z.literal("pen"), points: zod.z.array(zod.z.number()).min(4), ...StrokeCommon, ...RotationCommon }),
|
|
16
|
+
zod.z.object({ type: zod.z.literal("line"), x1: zod.z.number(), y1: zod.z.number(), x2: zod.z.number(), y2: zod.z.number(), ...StrokeCommon, ...RotationCommon }),
|
|
17
|
+
zod.z.object({ type: zod.z.literal("arrow"), x1: zod.z.number(), y1: zod.z.number(), x2: zod.z.number(), y2: zod.z.number(), ...StrokeCommon, ...RotationCommon }),
|
|
18
|
+
zod.z.object({ type: zod.z.literal("rect"), x: zod.z.number(), y: zod.z.number(), w: zod.z.number(), h: zod.z.number(), ...StrokeCommon, ...RotationCommon }),
|
|
19
|
+
zod.z.object({ type: zod.z.literal("ellipse"), x: zod.z.number(), y: zod.z.number(), w: zod.z.number(), h: zod.z.number(), ...StrokeCommon, ...RotationCommon }),
|
|
20
|
+
zod.z.object({
|
|
21
|
+
type: zod.z.literal("text"),
|
|
22
|
+
x: zod.z.number(),
|
|
23
|
+
y: zod.z.number(),
|
|
24
|
+
text: zod.z.string().max(500),
|
|
25
|
+
color: zod.z.string().max(32),
|
|
26
|
+
fontSize: zod.z.number().positive().max(512),
|
|
27
|
+
...RotationCommon
|
|
28
|
+
}),
|
|
29
|
+
// emoji 字符 或 dataURL 图片二选一
|
|
30
|
+
zod.z.object({
|
|
31
|
+
type: zod.z.literal("sticker"),
|
|
32
|
+
x: zod.z.number(),
|
|
33
|
+
y: zod.z.number(),
|
|
34
|
+
w: zod.z.number().positive(),
|
|
35
|
+
h: zod.z.number().positive(),
|
|
36
|
+
emoji: zod.z.string().max(16).optional(),
|
|
37
|
+
src: zod.z.string().optional(),
|
|
38
|
+
...RotationCommon
|
|
39
|
+
})
|
|
40
|
+
]);
|
|
41
|
+
var Clip = zod.z.object({
|
|
42
|
+
srcIdx: zod.z.number().int().min(0).max(7),
|
|
43
|
+
in: zod.z.number().min(0),
|
|
44
|
+
out: zod.z.number().min(0)
|
|
45
|
+
});
|
|
46
|
+
var AudioClip = zod.z.object({
|
|
47
|
+
srcIdx: zod.z.number().int().min(0).max(2),
|
|
48
|
+
startAt: zod.z.number().min(0),
|
|
49
|
+
in: zod.z.number().min(0),
|
|
50
|
+
out: zod.z.number().min(0),
|
|
51
|
+
volume: zod.z.number().min(0).max(2)
|
|
52
|
+
});
|
|
53
|
+
var Transition = zod.z.object({
|
|
54
|
+
type: zod.z.enum(["none", "fade", "slide", "wipe", "flip", "clockWipe", "star", "circle", "rectangle"]).default("none"),
|
|
55
|
+
duration: zod.z.number().min(0).max(2).default(0.4)
|
|
56
|
+
});
|
|
57
|
+
var VideoEditState = zod.z.object({
|
|
58
|
+
clips: zod.z.array(Clip).min(1).max(50),
|
|
59
|
+
audioClips: zod.z.array(AudioClip).max(8).default([]),
|
|
60
|
+
/** 输出画布(=首素材分辨率,偶数);全局 crop/rotation 的"源 dims" */
|
|
61
|
+
canvas: zod.z.object({
|
|
62
|
+
w: zod.z.number().int().min(2).max(4096),
|
|
63
|
+
h: zod.z.number().int().min(2).max(4096)
|
|
64
|
+
}),
|
|
65
|
+
crop: zod.z.object({
|
|
66
|
+
x: zod.z.number().min(0),
|
|
67
|
+
y: zod.z.number().min(0),
|
|
68
|
+
width: zod.z.number().positive(),
|
|
69
|
+
height: zod.z.number().positive()
|
|
70
|
+
}).optional(),
|
|
71
|
+
scale: zod.z.object({
|
|
72
|
+
width: zod.z.number().positive(),
|
|
73
|
+
height: zod.z.number().positive(),
|
|
74
|
+
fit: zod.z.enum(["contain", "cover", "force"])
|
|
75
|
+
}).optional(),
|
|
76
|
+
/** 任意角度(度)。UI = 90° 步进按钮 + ±45° 刻度盘叠加 */
|
|
77
|
+
rotation: zod.z.number().min(-180).max(180).default(0),
|
|
78
|
+
flipX: zod.z.boolean().default(false),
|
|
79
|
+
flipY: zod.z.boolean().default(false),
|
|
80
|
+
filters: zod.z.object({
|
|
81
|
+
brightness: zod.z.number().min(-1).max(1),
|
|
82
|
+
contrast: zod.z.number().min(-1).max(1),
|
|
83
|
+
saturation: zod.z.number().min(-1).max(1),
|
|
84
|
+
gamma: zod.z.number().min(-1).max(1).default(0)
|
|
85
|
+
}).default({ brightness: 0, contrast: 0, saturation: 0, gamma: 0 }),
|
|
86
|
+
/** 预设滤镜 id(见 filters.ts);与 filters 手调叠加 */
|
|
87
|
+
filterPreset: zod.z.string().max(32).optional(),
|
|
88
|
+
overlays: zod.z.array(Overlay).max(200).optional(),
|
|
89
|
+
transitions: zod.z.array(Transition).max(49).default([]),
|
|
90
|
+
/** 原视频声音开关(与音乐混音共存) */
|
|
91
|
+
keepAudio: zod.z.boolean().default(true),
|
|
92
|
+
/** 封面时刻 = 输出时间轴 */
|
|
93
|
+
poster: zod.z.object({ time: zod.z.number().min(0) }).optional()
|
|
94
|
+
}).superRefine((s, ctx) => {
|
|
95
|
+
s.clips.forEach((c, i) => {
|
|
96
|
+
if (c.out <= c.in) {
|
|
97
|
+
ctx.addIssue({ code: zod.z.ZodIssueCode.custom, message: `clips[${i}].out \u5FC5\u987B\u5927\u4E8E in`, path: ["clips", i, "out"] });
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
s.audioClips?.forEach((a, i) => {
|
|
101
|
+
if (a.out <= a.in) {
|
|
102
|
+
ctx.addIssue({ code: zod.z.ZodIssueCode.custom, message: `audioClips[${i}].out \u5FC5\u987B\u5927\u4E8E in`, path: ["audioClips", i, "out"] });
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
if (s.canvas.w % 2 !== 0 || s.canvas.h % 2 !== 0) {
|
|
106
|
+
ctx.addIssue({ code: zod.z.ZodIssueCode.custom, message: "canvas \u5BBD\u9AD8\u5FC5\u987B\u4E3A\u5076\u6570", path: ["canvas"] });
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
function defaultVideoEditState() {
|
|
110
|
+
return {
|
|
111
|
+
clips: [],
|
|
112
|
+
audioClips: [],
|
|
113
|
+
canvas: { w: 2, h: 2 },
|
|
114
|
+
rotation: 0,
|
|
115
|
+
flipX: false,
|
|
116
|
+
flipY: false,
|
|
117
|
+
filters: { brightness: 0, contrast: 0, saturation: 0, gamma: 0 },
|
|
118
|
+
transitions: [],
|
|
119
|
+
keepAudio: true
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// src/history.ts
|
|
124
|
+
var MAX_DEPTH = 100;
|
|
125
|
+
function createHistory(initial) {
|
|
126
|
+
return { past: [], present: initial, future: [] };
|
|
127
|
+
}
|
|
128
|
+
function pushHistory(h, next) {
|
|
129
|
+
if (next === h.present) return h;
|
|
130
|
+
const past = [...h.past, h.present];
|
|
131
|
+
if (past.length > MAX_DEPTH) past.shift();
|
|
132
|
+
return { past, present: next, future: [] };
|
|
133
|
+
}
|
|
134
|
+
function replacePresent(h, next) {
|
|
135
|
+
if (next === h.present) return h;
|
|
136
|
+
return { ...h, present: next };
|
|
137
|
+
}
|
|
138
|
+
function canUndo(h) {
|
|
139
|
+
return h.past.length > 0;
|
|
140
|
+
}
|
|
141
|
+
function canRedo(h) {
|
|
142
|
+
return h.future.length > 0;
|
|
143
|
+
}
|
|
144
|
+
function undo(h) {
|
|
145
|
+
if (!canUndo(h)) return h;
|
|
146
|
+
const past = h.past.slice(0, -1);
|
|
147
|
+
return { past, present: h.past[h.past.length - 1], future: [h.present, ...h.future] };
|
|
148
|
+
}
|
|
149
|
+
function redo(h) {
|
|
150
|
+
if (!canRedo(h)) return h;
|
|
151
|
+
const [next, ...future] = h.future;
|
|
152
|
+
return { past: [...h.past, h.present], present: next, future };
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
// src/timeline.ts
|
|
156
|
+
var MIN_CLIP = 0.1;
|
|
157
|
+
function clipDuration(c) {
|
|
158
|
+
return c.out - c.in;
|
|
159
|
+
}
|
|
160
|
+
function totalDuration(clips) {
|
|
161
|
+
return clips.reduce((s, c) => s + clipDuration(c), 0);
|
|
162
|
+
}
|
|
163
|
+
function locateOutput(clips, t) {
|
|
164
|
+
if (!clips.length || t < 0) return null;
|
|
165
|
+
let acc = 0;
|
|
166
|
+
for (let i = 0; i < clips.length; i++) {
|
|
167
|
+
const d = clipDuration(clips[i]);
|
|
168
|
+
if (t < acc + d) return { idx: i, srcTime: clips[i].in + (t - acc) };
|
|
169
|
+
acc += d;
|
|
170
|
+
}
|
|
171
|
+
if (Math.abs(t - acc) < 1e-9 || t <= acc) {
|
|
172
|
+
const last = clips.length - 1;
|
|
173
|
+
return { idx: last, srcTime: clips[last].out };
|
|
174
|
+
}
|
|
175
|
+
return null;
|
|
176
|
+
}
|
|
177
|
+
function splitAtOutput(clips, t) {
|
|
178
|
+
const loc = locateOutput(clips, t);
|
|
179
|
+
if (!loc) return clips;
|
|
180
|
+
const c = clips[loc.idx];
|
|
181
|
+
if (loc.srcTime < c.in + MIN_CLIP || loc.srcTime > c.out - MIN_CLIP) return clips;
|
|
182
|
+
return [
|
|
183
|
+
...clips.slice(0, loc.idx),
|
|
184
|
+
{ ...c, out: loc.srcTime },
|
|
185
|
+
{ ...c, in: loc.srcTime },
|
|
186
|
+
...clips.slice(loc.idx + 1)
|
|
187
|
+
];
|
|
188
|
+
}
|
|
189
|
+
function removeClip(clips, idx) {
|
|
190
|
+
if (clips.length <= 1 || !clips[idx]) return clips;
|
|
191
|
+
return clips.filter((_, i) => i !== idx);
|
|
192
|
+
}
|
|
193
|
+
function duplicateClip(clips, idx) {
|
|
194
|
+
const c = clips[idx];
|
|
195
|
+
if (!c) return clips;
|
|
196
|
+
return [...clips.slice(0, idx + 1), { ...c }, ...clips.slice(idx + 1)];
|
|
197
|
+
}
|
|
198
|
+
function reorderClips(clips, from, to) {
|
|
199
|
+
if (from === to || !clips[from] || to < 0 || to >= clips.length) return clips;
|
|
200
|
+
const next = [...clips];
|
|
201
|
+
const [moved] = next.splice(from, 1);
|
|
202
|
+
next.splice(to, 0, moved);
|
|
203
|
+
return next;
|
|
204
|
+
}
|
|
205
|
+
function trimClipEdge(clips, idx, edge, srcT, srcDuration) {
|
|
206
|
+
const c = clips[idx];
|
|
207
|
+
if (!c) return clips;
|
|
208
|
+
const next = clips.map((x) => ({ ...x }));
|
|
209
|
+
if (edge === "in") {
|
|
210
|
+
next[idx].in = Math.min(Math.max(srcT, 0), next[idx].out - MIN_CLIP);
|
|
211
|
+
} else {
|
|
212
|
+
next[idx].out = Math.max(Math.min(srcT, srcDuration), next[idx].in + MIN_CLIP);
|
|
213
|
+
}
|
|
214
|
+
return next;
|
|
215
|
+
}
|
|
216
|
+
function clampAudioClip(a, srcDuration, total) {
|
|
217
|
+
const out = Math.max(Math.min(a.out, srcDuration), MIN_CLIP);
|
|
218
|
+
const inn = Math.min(Math.max(a.in, 0), out - MIN_CLIP);
|
|
219
|
+
const startAt = Math.min(Math.max(a.startAt, 0), Math.max(0, total - MIN_CLIP));
|
|
220
|
+
return { ...a, in: inn, out, startAt };
|
|
221
|
+
}
|
|
222
|
+
function contentDuration(clips, audioClips = []) {
|
|
223
|
+
const video = totalDuration(clips);
|
|
224
|
+
const audioEnd = audioClips.reduce((m, a) => Math.max(m, a.startAt + (a.out - a.in)), 0);
|
|
225
|
+
return Math.max(video, audioEnd);
|
|
226
|
+
}
|
|
227
|
+
function usedVideoSrcIndices(clips) {
|
|
228
|
+
return [...new Set(clips.map((c) => c.srcIdx))].sort((x, y) => x - y);
|
|
229
|
+
}
|
|
230
|
+
function remapSrcIndices(clips, used) {
|
|
231
|
+
const map = new Map(used.map((s, i) => [s, i]));
|
|
232
|
+
return clips.map((c) => ({ ...c, srcIdx: map.get(c.srcIdx) ?? 0 }));
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
// src/engine.ts
|
|
236
|
+
function evenize(n) {
|
|
237
|
+
const v = Math.min(Math.max(Math.round(n), 2), 4096);
|
|
238
|
+
return v % 2 === 0 ? v : v - 1;
|
|
239
|
+
}
|
|
240
|
+
var clampRotation = (deg) => Math.min(Math.max(deg, -180), 180);
|
|
241
|
+
var VideoEditorEngine = class {
|
|
242
|
+
constructor(initial = defaultVideoEditState()) {
|
|
243
|
+
this.videoSources = [];
|
|
244
|
+
this.audioSources = [];
|
|
245
|
+
this.listeners = /* @__PURE__ */ new Set();
|
|
246
|
+
/** 瞬时拖拽序列的起始 base(拖拽前的提交态);null = 不在拖拽中 */
|
|
247
|
+
this.transientBase = null;
|
|
248
|
+
/** useSyncExternalStore 用别名 */
|
|
249
|
+
this.getSnapshot = () => this.history.present;
|
|
250
|
+
this.subscribe = (fn) => {
|
|
251
|
+
this.listeners.add(fn);
|
|
252
|
+
return () => this.listeners.delete(fn);
|
|
253
|
+
};
|
|
254
|
+
this.history = createHistory(initial);
|
|
255
|
+
}
|
|
256
|
+
// ─── 读 / 订阅 ───────────────────────────────────────────────
|
|
257
|
+
/** 当前编辑状态(引用稳定:仅在变更时换新对象,适配 useSyncExternalStore) */
|
|
258
|
+
getState() {
|
|
259
|
+
return this.history.present;
|
|
260
|
+
}
|
|
261
|
+
emit() {
|
|
262
|
+
const s = this.history.present;
|
|
263
|
+
for (const fn of this.listeners) fn(s);
|
|
264
|
+
}
|
|
265
|
+
// ─── 历史 ────────────────────────────────────────────────────
|
|
266
|
+
canUndo() {
|
|
267
|
+
return canUndo(this.history);
|
|
268
|
+
}
|
|
269
|
+
canRedo() {
|
|
270
|
+
return canRedo(this.history);
|
|
271
|
+
}
|
|
272
|
+
undo() {
|
|
273
|
+
this.transientBase = null;
|
|
274
|
+
this.history = undo(this.history);
|
|
275
|
+
this.emit();
|
|
276
|
+
}
|
|
277
|
+
redo() {
|
|
278
|
+
this.transientBase = null;
|
|
279
|
+
this.history = redo(this.history);
|
|
280
|
+
this.emit();
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* 全部变更的唯一入口。mut 接收「计算基准态」返回新态。
|
|
284
|
+
* 瞬时:基准恒为 transientBase(拖拽前态),replacePresent;
|
|
285
|
+
* 提交:基准为 transientBase ?? present;若刚结束一段瞬时,先把 present 还原回 base 再 push,
|
|
286
|
+
* 使整段拖拽只占一步 undo。
|
|
287
|
+
*/
|
|
288
|
+
applyMut(mut, transient = false) {
|
|
289
|
+
if (transient) {
|
|
290
|
+
if (this.transientBase === null) this.transientBase = this.history.present;
|
|
291
|
+
this.history = replacePresent(this.history, mut(this.transientBase));
|
|
292
|
+
} else {
|
|
293
|
+
const base = this.transientBase ?? this.history.present;
|
|
294
|
+
const next = mut(base);
|
|
295
|
+
const h = this.transientBase ? { ...this.history, present: this.transientBase } : this.history;
|
|
296
|
+
this.history = pushHistory(h, next);
|
|
297
|
+
this.transientBase = null;
|
|
298
|
+
}
|
|
299
|
+
this.emit();
|
|
300
|
+
}
|
|
301
|
+
// ─── 源登记(返回新 srcIdx)──────────────────────────────────
|
|
302
|
+
/**
|
|
303
|
+
* 登记一个视频源并入时间轴。首源:用其分辨率初始化 canvas 并重建 history(清空 undo);
|
|
304
|
+
* 后续源:追加整段 clip(pushHistory)。
|
|
305
|
+
*/
|
|
306
|
+
registerVideoSource(meta) {
|
|
307
|
+
const srcIdx = this.videoSources.length;
|
|
308
|
+
this.videoSources.push(meta);
|
|
309
|
+
const clip = { srcIdx, in: 0, out: meta.duration };
|
|
310
|
+
if (srcIdx === 0 || this.history.present.clips.length === 0) {
|
|
311
|
+
this.transientBase = null;
|
|
312
|
+
this.history = createHistory({
|
|
313
|
+
...defaultVideoEditState(),
|
|
314
|
+
clips: [clip],
|
|
315
|
+
canvas: { w: evenize(meta.width), h: evenize(meta.height) },
|
|
316
|
+
poster: { time: Math.min(1, meta.duration / 2) }
|
|
317
|
+
});
|
|
318
|
+
this.emit();
|
|
319
|
+
} else {
|
|
320
|
+
this.applyMut((s) => ({ ...s, clips: [...s.clips, clip] }));
|
|
321
|
+
}
|
|
322
|
+
return srcIdx;
|
|
323
|
+
}
|
|
324
|
+
/** 登记一个音频源并入音轨(整段、volume=1、startAt=0,clamp 后 push) */
|
|
325
|
+
registerAudioSource(meta) {
|
|
326
|
+
const srcIdx = this.audioSources.length;
|
|
327
|
+
this.audioSources.push(meta);
|
|
328
|
+
this.applyMut((s) => {
|
|
329
|
+
const a = clampAudioClip(
|
|
330
|
+
{ srcIdx, startAt: 0, in: 0, out: meta.duration, volume: 1 },
|
|
331
|
+
meta.duration,
|
|
332
|
+
totalDuration(s.clips)
|
|
333
|
+
);
|
|
334
|
+
return { ...s, audioClips: [...s.audioClips, a] };
|
|
335
|
+
});
|
|
336
|
+
return srcIdx;
|
|
337
|
+
}
|
|
338
|
+
getVideoSource(idx) {
|
|
339
|
+
return this.videoSources[idx];
|
|
340
|
+
}
|
|
341
|
+
getAudioSource(idx) {
|
|
342
|
+
return this.audioSources[idx];
|
|
343
|
+
}
|
|
344
|
+
// ─── 视频片段 ─────────────────────────────────────────────────
|
|
345
|
+
/** 把已登记源再追加一段整段 clip(同源可多次引用) */
|
|
346
|
+
addClipFromSource(srcIdx) {
|
|
347
|
+
const meta = this.videoSources[srcIdx];
|
|
348
|
+
if (!meta) return;
|
|
349
|
+
this.applyMut((s) => ({ ...s, clips: [...s.clips, { srcIdx, in: 0, out: meta.duration }] }));
|
|
350
|
+
}
|
|
351
|
+
splitAtPlayhead(outputTime) {
|
|
352
|
+
this.applyMut((s) => ({ ...s, clips: splitAtOutput(s.clips, outputTime) }));
|
|
353
|
+
}
|
|
354
|
+
removeClip(idx) {
|
|
355
|
+
this.applyMut((s) => ({ ...s, clips: removeClip(s.clips, idx) }));
|
|
356
|
+
}
|
|
357
|
+
duplicateClip(idx) {
|
|
358
|
+
this.applyMut((s) => ({ ...s, clips: duplicateClip(s.clips, idx) }));
|
|
359
|
+
}
|
|
360
|
+
reorderClips(from, to) {
|
|
361
|
+
this.applyMut((s) => ({ ...s, clips: reorderClips(s.clips, from, to) }));
|
|
362
|
+
}
|
|
363
|
+
/** 拖把手改 in/out 到源时刻 srcT;拖拽中传 {transient:true},松手再调一次提交 */
|
|
364
|
+
trimClip(idx, edge, srcT, opts) {
|
|
365
|
+
this.applyMut((s) => {
|
|
366
|
+
const c = s.clips[idx];
|
|
367
|
+
if (!c) return s;
|
|
368
|
+
const srcDur = this.videoSources[c.srcIdx]?.duration ?? c.out;
|
|
369
|
+
return { ...s, clips: trimClipEdge(s.clips, idx, edge, srcT, srcDur) };
|
|
370
|
+
}, opts?.transient);
|
|
371
|
+
}
|
|
372
|
+
// ─── 音频片段 ─────────────────────────────────────────────────
|
|
373
|
+
moveAudioClip(idx, startAt, opts) {
|
|
374
|
+
this.applyMut((s) => this.patchAudio(s, idx, (a) => ({ ...a, startAt })), opts?.transient);
|
|
375
|
+
}
|
|
376
|
+
trimAudioClip(idx, edge, t, opts) {
|
|
377
|
+
this.applyMut((s) => {
|
|
378
|
+
return this.patchAudio(s, idx, (a) => {
|
|
379
|
+
if (edge === "in") {
|
|
380
|
+
const delta = t - a.in;
|
|
381
|
+
return { ...a, in: t, startAt: a.startAt + delta };
|
|
382
|
+
}
|
|
383
|
+
return { ...a, out: t };
|
|
384
|
+
});
|
|
385
|
+
}, opts?.transient);
|
|
386
|
+
}
|
|
387
|
+
setAudioVolume(idx, volume, opts) {
|
|
388
|
+
this.applyMut((s) => this.patchAudio(s, idx, (a) => ({ ...a, volume }), false), opts?.transient);
|
|
389
|
+
}
|
|
390
|
+
removeAudioClip(idx) {
|
|
391
|
+
this.applyMut((s) => ({ ...s, audioClips: s.audioClips.filter((_, i) => i !== idx) }));
|
|
392
|
+
}
|
|
393
|
+
/** 改一条音频片段并 clamp(volume 改动不需 clamp 几何,clampGeom=false 跳过) */
|
|
394
|
+
patchAudio(s, idx, fn, clampGeom = true) {
|
|
395
|
+
const a = s.audioClips[idx];
|
|
396
|
+
if (!a) return s;
|
|
397
|
+
let next = fn(a);
|
|
398
|
+
if (clampGeom) {
|
|
399
|
+
const srcDur = this.audioSources[a.srcIdx]?.duration ?? a.out;
|
|
400
|
+
next = clampAudioClip(next, srcDur, totalDuration(s.clips));
|
|
401
|
+
}
|
|
402
|
+
return { ...s, audioClips: s.audioClips.map((x, i) => i === idx ? next : x) };
|
|
403
|
+
}
|
|
404
|
+
// ─── 几何:crop / scale / 旋转 / 翻转 ─────────────────────────
|
|
405
|
+
setCrop(crop, opts) {
|
|
406
|
+
this.applyMut((s) => ({ ...s, crop }), opts?.transient);
|
|
407
|
+
}
|
|
408
|
+
clearCrop() {
|
|
409
|
+
this.applyMut((s) => ({ ...s, crop: void 0 }));
|
|
410
|
+
}
|
|
411
|
+
setScale(scale) {
|
|
412
|
+
this.applyMut((s) => ({ ...s, scale }));
|
|
413
|
+
}
|
|
414
|
+
clearScale() {
|
|
415
|
+
this.applyMut((s) => ({ ...s, scale: void 0 }));
|
|
416
|
+
}
|
|
417
|
+
setRotation(deg, opts) {
|
|
418
|
+
this.applyMut((s) => ({ ...s, rotation: clampRotation(deg) }), opts?.transient);
|
|
419
|
+
}
|
|
420
|
+
/** 90° 步进(顺时针正);结果钳到 [-180,180] */
|
|
421
|
+
rotateBy(step) {
|
|
422
|
+
this.applyMut((s) => {
|
|
423
|
+
let r = s.rotation + step;
|
|
424
|
+
if (r > 180) r -= 360;
|
|
425
|
+
if (r < -180) r += 360;
|
|
426
|
+
return { ...s, rotation: clampRotation(r) };
|
|
427
|
+
});
|
|
428
|
+
}
|
|
429
|
+
flipX() {
|
|
430
|
+
this.applyMut((s) => ({ ...s, flipX: !s.flipX }));
|
|
431
|
+
}
|
|
432
|
+
flipY() {
|
|
433
|
+
this.applyMut((s) => ({ ...s, flipY: !s.flipY }));
|
|
434
|
+
}
|
|
435
|
+
// ─── 滤镜 ────────────────────────────────────────────────────
|
|
436
|
+
setFilter(key, value, opts) {
|
|
437
|
+
this.applyMut((s) => ({ ...s, filters: { ...s.filters, [key]: value } }), opts?.transient);
|
|
438
|
+
}
|
|
439
|
+
setFilters(partial, opts) {
|
|
440
|
+
this.applyMut((s) => ({ ...s, filters: { ...s.filters, ...partial } }), opts?.transient);
|
|
441
|
+
}
|
|
442
|
+
setFilterPreset(id) {
|
|
443
|
+
this.applyMut((s) => ({ ...s, filterPreset: id }));
|
|
444
|
+
}
|
|
445
|
+
// ─── 标注 overlays ───────────────────────────────────────────
|
|
446
|
+
addOverlay(o) {
|
|
447
|
+
this.applyMut((s) => ({ ...s, overlays: [...s.overlays ?? [], o] }));
|
|
448
|
+
}
|
|
449
|
+
updateOverlay(idx, patch, opts) {
|
|
450
|
+
this.applyMut((s) => {
|
|
451
|
+
const ovs = s.overlays ?? [];
|
|
452
|
+
if (!ovs[idx]) return s;
|
|
453
|
+
return { ...s, overlays: ovs.map((o, i) => i === idx ? { ...o, ...patch } : o) };
|
|
454
|
+
}, opts?.transient);
|
|
455
|
+
}
|
|
456
|
+
removeOverlay(idx) {
|
|
457
|
+
this.applyMut((s) => ({ ...s, overlays: (s.overlays ?? []).filter((_, i) => i !== idx) }));
|
|
458
|
+
}
|
|
459
|
+
// ─── 杂项 ────────────────────────────────────────────────────
|
|
460
|
+
/**
|
|
461
|
+
* 通用补丁:把 partial 浅合并进状态(UI 一次改多字段,如旋转同时重置 crop)。
|
|
462
|
+
* - `{transient:true}`:拖拽中间帧,基于拖拽前 base 合并、replacePresent,不入栈(= 原 patchLive)。
|
|
463
|
+
* - 默认:一次性提交(= commit(partial))。
|
|
464
|
+
*/
|
|
465
|
+
patch(partial, opts) {
|
|
466
|
+
if (opts?.transient) {
|
|
467
|
+
if (this.transientBase === null) this.transientBase = this.history.present;
|
|
468
|
+
this.history = replacePresent(this.history, { ...this.transientBase, ...partial });
|
|
469
|
+
this.emit();
|
|
470
|
+
} else {
|
|
471
|
+
this.commit(partial);
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
/**
|
|
475
|
+
* 定格当前态为一步 undo(= 原 commit):保留 present(含拖拽末值),可再合并 partial;
|
|
476
|
+
* 若处于瞬时序列,先把 past 接到拖拽前 base 上,使整段拖拽只占一步。
|
|
477
|
+
*/
|
|
478
|
+
commit(partial) {
|
|
479
|
+
const next = partial ? { ...this.history.present, ...partial } : this.history.present;
|
|
480
|
+
const base = this.transientBase;
|
|
481
|
+
this.transientBase = null;
|
|
482
|
+
this.history = base ? pushHistory({ ...this.history, present: base }, next) : pushHistory(this.history, next);
|
|
483
|
+
this.emit();
|
|
484
|
+
}
|
|
485
|
+
setKeepAudio(keep) {
|
|
486
|
+
this.applyMut((s) => ({ ...s, keepAudio: keep }));
|
|
487
|
+
}
|
|
488
|
+
setPoster(time) {
|
|
489
|
+
this.applyMut((s) => ({ ...s, poster: { time: Math.max(0, time) } }));
|
|
490
|
+
}
|
|
491
|
+
// ─── 派生只读 ────────────────────────────────────────────────
|
|
492
|
+
totalDuration() {
|
|
493
|
+
return totalDuration(this.history.present.clips);
|
|
494
|
+
}
|
|
495
|
+
contentDuration() {
|
|
496
|
+
const s = this.history.present;
|
|
497
|
+
return contentDuration(s.clips, s.audioClips);
|
|
498
|
+
}
|
|
499
|
+
/** 输出时刻 → 所属片段与源内时刻(播放头定位) */
|
|
500
|
+
locate(outputTime) {
|
|
501
|
+
return locateOutput(this.history.present.clips, outputTime);
|
|
502
|
+
}
|
|
503
|
+
usedVideoSources() {
|
|
504
|
+
return usedVideoSrcIndices(this.history.present.clips);
|
|
505
|
+
}
|
|
506
|
+
// ─── 导出 ────────────────────────────────────────────────────
|
|
507
|
+
/**
|
|
508
|
+
* 生成导出计划:剔除未引用源、把 clips/audioClips 的 srcIdx 重映射到 [0..n),
|
|
509
|
+
* 返回压缩后的状态与上传槽位顺序(framework 按 order 取 File 上传)。
|
|
510
|
+
*/
|
|
511
|
+
getExportPlan() {
|
|
512
|
+
const s = this.history.present;
|
|
513
|
+
const videoSrcOrder = usedVideoSrcIndices(s.clips);
|
|
514
|
+
const audioSrcOrder = [...new Set(s.audioClips.map((a) => a.srcIdx))].sort((x, y) => x - y);
|
|
515
|
+
const audioMap = new Map(audioSrcOrder.map((src, i) => [src, i]));
|
|
516
|
+
return {
|
|
517
|
+
state: {
|
|
518
|
+
...s,
|
|
519
|
+
clips: remapSrcIndices(s.clips, videoSrcOrder),
|
|
520
|
+
audioClips: s.audioClips.map((a) => ({ ...a, srcIdx: audioMap.get(a.srcIdx) ?? 0 }))
|
|
521
|
+
},
|
|
522
|
+
videoSrcOrder,
|
|
523
|
+
audioSrcOrder
|
|
524
|
+
};
|
|
525
|
+
}
|
|
526
|
+
/** 校验当前(导出)状态是否符合 schema —— 提交前兜底 */
|
|
527
|
+
validate() {
|
|
528
|
+
return VideoEditState.safeParse(this.getExportPlan().state);
|
|
529
|
+
}
|
|
530
|
+
/** 重置为给定状态(清空 history、源登记保留) */
|
|
531
|
+
reset(state = defaultVideoEditState()) {
|
|
532
|
+
this.transientBase = null;
|
|
533
|
+
this.history = createHistory(state);
|
|
534
|
+
this.emit();
|
|
535
|
+
}
|
|
536
|
+
};
|
|
537
|
+
|
|
538
|
+
exports.VideoEditorEngine = VideoEditorEngine;
|
|
539
|
+
//# sourceMappingURL=engine.cjs.map
|
|
540
|
+
//# sourceMappingURL=engine.cjs.map
|