@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,359 @@
|
|
|
1
|
+
import * as zod from 'zod';
|
|
2
|
+
import { V as VideoEditStateT, O as OverlayT } from './state-B85vkf7_.js';
|
|
3
|
+
|
|
4
|
+
type TransitionT = {
|
|
5
|
+
type: 'none' | 'fade' | 'slide' | 'wipe' | 'flip' | 'clockWipe' | 'star' | 'circle' | 'rectangle';
|
|
6
|
+
duration: number;
|
|
7
|
+
};
|
|
8
|
+
type VideoEditStateWithTransitions = VideoEditStateT & {
|
|
9
|
+
transitions?: TransitionT[];
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
/** 视频源元数据(File/objectURL 是运行时的事,不进引擎;引擎只认 srcIdx + 元数据) */
|
|
13
|
+
interface VideoSourceMeta {
|
|
14
|
+
duration: number;
|
|
15
|
+
width: number;
|
|
16
|
+
height: number;
|
|
17
|
+
}
|
|
18
|
+
/** 音频源元数据 */
|
|
19
|
+
interface AudioSourceMeta {
|
|
20
|
+
duration: number;
|
|
21
|
+
}
|
|
22
|
+
interface MutOpts {
|
|
23
|
+
/** true = 瞬时(拖拽中间帧,不入 undo 栈) */
|
|
24
|
+
transient?: boolean;
|
|
25
|
+
}
|
|
26
|
+
type FilterKey = 'brightness' | 'contrast' | 'saturation' | 'temperature' | 'tint' | 'vibrance' | 'gamma' | 'highlights' | 'shadows' | 'whites' | 'blacks' | 'lightSense' | 'sharpen' | 'clarity' | 'grain' | 'fade' | 'vignette';
|
|
27
|
+
type EngineListener = (state: VideoEditStateWithTransitions) => void;
|
|
28
|
+
/** 导出计划:压缩后的状态 + 上传槽位映射(slot i 对应原 srcIdx = order[i]) */
|
|
29
|
+
interface ExportPlan {
|
|
30
|
+
state: VideoEditStateWithTransitions;
|
|
31
|
+
videoSrcOrder: number[];
|
|
32
|
+
audioSrcOrder: number[];
|
|
33
|
+
}
|
|
34
|
+
declare class VideoEditorEngine {
|
|
35
|
+
private history;
|
|
36
|
+
private videoSources;
|
|
37
|
+
private audioSources;
|
|
38
|
+
private listeners;
|
|
39
|
+
/** 瞬时拖拽序列的起始 base(拖拽前的提交态);null = 不在拖拽中 */
|
|
40
|
+
private transientBase;
|
|
41
|
+
constructor(initial?: VideoEditStateWithTransitions);
|
|
42
|
+
/** 当前编辑状态(引用稳定:仅在变更时换新对象,适配 useSyncExternalStore) */
|
|
43
|
+
getState(): VideoEditStateWithTransitions;
|
|
44
|
+
/** useSyncExternalStore 用别名 */
|
|
45
|
+
getSnapshot: () => VideoEditStateWithTransitions;
|
|
46
|
+
subscribe: (fn: EngineListener) => (() => void);
|
|
47
|
+
private emit;
|
|
48
|
+
canUndo(): boolean;
|
|
49
|
+
canRedo(): boolean;
|
|
50
|
+
undo(): void;
|
|
51
|
+
redo(): void;
|
|
52
|
+
/**
|
|
53
|
+
* 全部变更的唯一入口。mut 接收「计算基准态」返回新态。
|
|
54
|
+
* 瞬时:基准恒为 transientBase(拖拽前态),replacePresent;
|
|
55
|
+
* 提交:基准为 transientBase ?? present;若刚结束一段瞬时,先把 present 还原回 base 再 push,
|
|
56
|
+
* 使整段拖拽只占一步 undo。
|
|
57
|
+
*/
|
|
58
|
+
private applyMut;
|
|
59
|
+
/**
|
|
60
|
+
* 登记一个视频源并入时间轴。首源:用其分辨率初始化 canvas 并重建 history(清空 undo);
|
|
61
|
+
* 后续源:追加整段 clip(pushHistory)。
|
|
62
|
+
*/
|
|
63
|
+
registerVideoSource(meta: VideoSourceMeta): number;
|
|
64
|
+
/** 登记一个音频源并入音轨(整段、volume=1、startAt=0,clamp 后 push) */
|
|
65
|
+
registerAudioSource(meta: AudioSourceMeta): number;
|
|
66
|
+
getVideoSource(idx: number): VideoSourceMeta | undefined;
|
|
67
|
+
getAudioSource(idx: number): AudioSourceMeta | undefined;
|
|
68
|
+
/** 把已登记源再追加一段整段 clip(同源可多次引用) */
|
|
69
|
+
addClipFromSource(srcIdx: number): void;
|
|
70
|
+
splitAtPlayhead(outputTime: number): void;
|
|
71
|
+
removeClip(idx: number): void;
|
|
72
|
+
duplicateClip(idx: number): void;
|
|
73
|
+
reorderClips(from: number, to: number): void;
|
|
74
|
+
/** 拖把手改 in/out 到源时刻 srcT;拖拽中传 {transient:true},松手再调一次提交 */
|
|
75
|
+
trimClip(idx: number, edge: 'in' | 'out', srcT: number, opts?: MutOpts): void;
|
|
76
|
+
moveAudioClip(idx: number, startAt: number, opts?: MutOpts): void;
|
|
77
|
+
trimAudioClip(idx: number, edge: 'in' | 'out', t: number, opts?: MutOpts): void;
|
|
78
|
+
setAudioVolume(idx: number, volume: number, opts?: MutOpts): void;
|
|
79
|
+
removeAudioClip(idx: number): void;
|
|
80
|
+
/** 改一条音频片段并 clamp(volume 改动不需 clamp 几何,clampGeom=false 跳过) */
|
|
81
|
+
private patchAudio;
|
|
82
|
+
setCrop(crop: NonNullable<VideoEditStateWithTransitions['crop']>, opts?: MutOpts): void;
|
|
83
|
+
clearCrop(): void;
|
|
84
|
+
setScale(scale: NonNullable<VideoEditStateWithTransitions['scale']>): void;
|
|
85
|
+
clearScale(): void;
|
|
86
|
+
setRotation(deg: number, opts?: MutOpts): void;
|
|
87
|
+
/** 90° 步进(顺时针正);结果钳到 [-180,180] */
|
|
88
|
+
rotateBy(step: number): void;
|
|
89
|
+
flipX(): void;
|
|
90
|
+
flipY(): void;
|
|
91
|
+
setFilter(key: FilterKey, value: number, opts?: MutOpts): void;
|
|
92
|
+
setFilters(partial: Partial<VideoEditStateWithTransitions['filters']>, opts?: MutOpts): void;
|
|
93
|
+
setFilterPreset(id: string | undefined): void;
|
|
94
|
+
addOverlay(o: OverlayT): void;
|
|
95
|
+
updateOverlay(idx: number, patch: Partial<OverlayT>, opts?: MutOpts): void;
|
|
96
|
+
removeOverlay(idx: number): void;
|
|
97
|
+
/**
|
|
98
|
+
* 通用补丁:把 partial 浅合并进状态(UI 一次改多字段,如旋转同时重置 crop)。
|
|
99
|
+
* - `{transient:true}`:拖拽中间帧,基于拖拽前 base 合并、replacePresent,不入栈(= 原 patchLive)。
|
|
100
|
+
* - 默认:一次性提交(= commit(partial))。
|
|
101
|
+
*/
|
|
102
|
+
patch(partial: Partial<VideoEditStateWithTransitions>, opts?: MutOpts): void;
|
|
103
|
+
/**
|
|
104
|
+
* 定格当前态为一步 undo(= 原 commit):保留 present(含拖拽末值),可再合并 partial;
|
|
105
|
+
* 若处于瞬时序列,先把 past 接到拖拽前 base 上,使整段拖拽只占一步。
|
|
106
|
+
*/
|
|
107
|
+
commit(partial?: Partial<VideoEditStateWithTransitions>): void;
|
|
108
|
+
setKeepAudio(keep: boolean): void;
|
|
109
|
+
setPoster(time: number): void;
|
|
110
|
+
totalDuration(): number;
|
|
111
|
+
contentDuration(): number;
|
|
112
|
+
/** 输出时刻 → 所属片段与源内时刻(播放头定位) */
|
|
113
|
+
locate(outputTime: number): {
|
|
114
|
+
idx: number;
|
|
115
|
+
srcTime: number;
|
|
116
|
+
} | null;
|
|
117
|
+
usedVideoSources(): number[];
|
|
118
|
+
/**
|
|
119
|
+
* 生成导出计划:剔除未引用源、把 clips/audioClips 的 srcIdx 重映射到 [0..n),
|
|
120
|
+
* 返回压缩后的状态与上传槽位顺序(framework 按 order 取 File 上传)。
|
|
121
|
+
*/
|
|
122
|
+
getExportPlan(): ExportPlan;
|
|
123
|
+
/** 校验当前(导出)状态是否符合 schema —— 提交前兜底 */
|
|
124
|
+
validate(): zod.SafeParseReturnType<{
|
|
125
|
+
clips: {
|
|
126
|
+
srcIdx: number;
|
|
127
|
+
in: number;
|
|
128
|
+
out: number;
|
|
129
|
+
}[];
|
|
130
|
+
canvas: {
|
|
131
|
+
w: number;
|
|
132
|
+
h: number;
|
|
133
|
+
};
|
|
134
|
+
rotation?: number | undefined;
|
|
135
|
+
audioClips?: {
|
|
136
|
+
srcIdx: number;
|
|
137
|
+
in: number;
|
|
138
|
+
out: number;
|
|
139
|
+
startAt: number;
|
|
140
|
+
volume: number;
|
|
141
|
+
}[] | undefined;
|
|
142
|
+
crop?: {
|
|
143
|
+
width: number;
|
|
144
|
+
x: number;
|
|
145
|
+
y: number;
|
|
146
|
+
height: number;
|
|
147
|
+
} | undefined;
|
|
148
|
+
scale?: {
|
|
149
|
+
width: number;
|
|
150
|
+
height: number;
|
|
151
|
+
fit: "contain" | "cover" | "force";
|
|
152
|
+
} | undefined;
|
|
153
|
+
flipX?: boolean | undefined;
|
|
154
|
+
flipY?: boolean | undefined;
|
|
155
|
+
filters?: {
|
|
156
|
+
brightness: number;
|
|
157
|
+
contrast: number;
|
|
158
|
+
saturation: number;
|
|
159
|
+
temperature?: number | undefined;
|
|
160
|
+
tint?: number | undefined;
|
|
161
|
+
vibrance?: number | undefined;
|
|
162
|
+
gamma?: number | undefined;
|
|
163
|
+
highlights?: number | undefined;
|
|
164
|
+
shadows?: number | undefined;
|
|
165
|
+
whites?: number | undefined;
|
|
166
|
+
blacks?: number | undefined;
|
|
167
|
+
lightSense?: number | undefined;
|
|
168
|
+
sharpen?: number | undefined;
|
|
169
|
+
clarity?: number | undefined;
|
|
170
|
+
grain?: number | undefined;
|
|
171
|
+
fade?: number | undefined;
|
|
172
|
+
vignette?: number | undefined;
|
|
173
|
+
} | undefined;
|
|
174
|
+
filterPreset?: string | undefined;
|
|
175
|
+
overlays?: ({
|
|
176
|
+
type: "pen";
|
|
177
|
+
points: number[];
|
|
178
|
+
color: string;
|
|
179
|
+
width: number;
|
|
180
|
+
rotation?: number | undefined;
|
|
181
|
+
} | {
|
|
182
|
+
type: "line";
|
|
183
|
+
color: string;
|
|
184
|
+
width: number;
|
|
185
|
+
x1: number;
|
|
186
|
+
y1: number;
|
|
187
|
+
x2: number;
|
|
188
|
+
y2: number;
|
|
189
|
+
rotation?: number | undefined;
|
|
190
|
+
} | {
|
|
191
|
+
type: "arrow";
|
|
192
|
+
color: string;
|
|
193
|
+
width: number;
|
|
194
|
+
x1: number;
|
|
195
|
+
y1: number;
|
|
196
|
+
x2: number;
|
|
197
|
+
y2: number;
|
|
198
|
+
rotation?: number | undefined;
|
|
199
|
+
} | {
|
|
200
|
+
type: "rect";
|
|
201
|
+
color: string;
|
|
202
|
+
width: number;
|
|
203
|
+
x: number;
|
|
204
|
+
y: number;
|
|
205
|
+
w: number;
|
|
206
|
+
h: number;
|
|
207
|
+
rotation?: number | undefined;
|
|
208
|
+
} | {
|
|
209
|
+
type: "ellipse";
|
|
210
|
+
color: string;
|
|
211
|
+
width: number;
|
|
212
|
+
x: number;
|
|
213
|
+
y: number;
|
|
214
|
+
w: number;
|
|
215
|
+
h: number;
|
|
216
|
+
rotation?: number | undefined;
|
|
217
|
+
} | {
|
|
218
|
+
type: "text";
|
|
219
|
+
color: string;
|
|
220
|
+
x: number;
|
|
221
|
+
y: number;
|
|
222
|
+
text: string;
|
|
223
|
+
fontSize: number;
|
|
224
|
+
rotation?: number | undefined;
|
|
225
|
+
} | {
|
|
226
|
+
type: "sticker";
|
|
227
|
+
x: number;
|
|
228
|
+
y: number;
|
|
229
|
+
w: number;
|
|
230
|
+
h: number;
|
|
231
|
+
rotation?: number | undefined;
|
|
232
|
+
emoji?: string | undefined;
|
|
233
|
+
src?: string | undefined;
|
|
234
|
+
})[] | undefined;
|
|
235
|
+
keepAudio?: boolean | undefined;
|
|
236
|
+
poster?: {
|
|
237
|
+
time: number;
|
|
238
|
+
} | undefined;
|
|
239
|
+
}, {
|
|
240
|
+
rotation: number;
|
|
241
|
+
clips: {
|
|
242
|
+
srcIdx: number;
|
|
243
|
+
in: number;
|
|
244
|
+
out: number;
|
|
245
|
+
}[];
|
|
246
|
+
audioClips: {
|
|
247
|
+
srcIdx: number;
|
|
248
|
+
in: number;
|
|
249
|
+
out: number;
|
|
250
|
+
startAt: number;
|
|
251
|
+
volume: number;
|
|
252
|
+
}[];
|
|
253
|
+
canvas: {
|
|
254
|
+
w: number;
|
|
255
|
+
h: number;
|
|
256
|
+
};
|
|
257
|
+
flipX: boolean;
|
|
258
|
+
flipY: boolean;
|
|
259
|
+
filters: {
|
|
260
|
+
brightness: number;
|
|
261
|
+
contrast: number;
|
|
262
|
+
saturation: number;
|
|
263
|
+
temperature: number;
|
|
264
|
+
tint: number;
|
|
265
|
+
vibrance: number;
|
|
266
|
+
gamma: number;
|
|
267
|
+
highlights: number;
|
|
268
|
+
shadows: number;
|
|
269
|
+
whites: number;
|
|
270
|
+
blacks: number;
|
|
271
|
+
lightSense: number;
|
|
272
|
+
sharpen: number;
|
|
273
|
+
clarity: number;
|
|
274
|
+
grain: number;
|
|
275
|
+
fade: number;
|
|
276
|
+
vignette: number;
|
|
277
|
+
};
|
|
278
|
+
keepAudio: boolean;
|
|
279
|
+
crop?: {
|
|
280
|
+
width: number;
|
|
281
|
+
x: number;
|
|
282
|
+
y: number;
|
|
283
|
+
height: number;
|
|
284
|
+
} | undefined;
|
|
285
|
+
scale?: {
|
|
286
|
+
width: number;
|
|
287
|
+
height: number;
|
|
288
|
+
fit: "contain" | "cover" | "force";
|
|
289
|
+
} | undefined;
|
|
290
|
+
filterPreset?: string | undefined;
|
|
291
|
+
overlays?: ({
|
|
292
|
+
type: "pen";
|
|
293
|
+
points: number[];
|
|
294
|
+
color: string;
|
|
295
|
+
width: number;
|
|
296
|
+
rotation?: number | undefined;
|
|
297
|
+
} | {
|
|
298
|
+
type: "line";
|
|
299
|
+
color: string;
|
|
300
|
+
width: number;
|
|
301
|
+
x1: number;
|
|
302
|
+
y1: number;
|
|
303
|
+
x2: number;
|
|
304
|
+
y2: number;
|
|
305
|
+
rotation?: number | undefined;
|
|
306
|
+
} | {
|
|
307
|
+
type: "arrow";
|
|
308
|
+
color: string;
|
|
309
|
+
width: number;
|
|
310
|
+
x1: number;
|
|
311
|
+
y1: number;
|
|
312
|
+
x2: number;
|
|
313
|
+
y2: number;
|
|
314
|
+
rotation?: number | undefined;
|
|
315
|
+
} | {
|
|
316
|
+
type: "rect";
|
|
317
|
+
color: string;
|
|
318
|
+
width: number;
|
|
319
|
+
x: number;
|
|
320
|
+
y: number;
|
|
321
|
+
w: number;
|
|
322
|
+
h: number;
|
|
323
|
+
rotation?: number | undefined;
|
|
324
|
+
} | {
|
|
325
|
+
type: "ellipse";
|
|
326
|
+
color: string;
|
|
327
|
+
width: number;
|
|
328
|
+
x: number;
|
|
329
|
+
y: number;
|
|
330
|
+
w: number;
|
|
331
|
+
h: number;
|
|
332
|
+
rotation?: number | undefined;
|
|
333
|
+
} | {
|
|
334
|
+
type: "text";
|
|
335
|
+
color: string;
|
|
336
|
+
x: number;
|
|
337
|
+
y: number;
|
|
338
|
+
text: string;
|
|
339
|
+
fontSize: number;
|
|
340
|
+
rotation?: number | undefined;
|
|
341
|
+
} | {
|
|
342
|
+
type: "sticker";
|
|
343
|
+
x: number;
|
|
344
|
+
y: number;
|
|
345
|
+
w: number;
|
|
346
|
+
h: number;
|
|
347
|
+
rotation?: number | undefined;
|
|
348
|
+
emoji?: string | undefined;
|
|
349
|
+
src?: string | undefined;
|
|
350
|
+
})[] | undefined;
|
|
351
|
+
poster?: {
|
|
352
|
+
time: number;
|
|
353
|
+
} | undefined;
|
|
354
|
+
}>;
|
|
355
|
+
/** 重置为给定状态(清空 history、源登记保留) */
|
|
356
|
+
reset(state?: VideoEditStateWithTransitions): void;
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
export { type AudioSourceMeta, type EngineListener, type ExportPlan, type FilterKey, type MutOpts, TransitionT, VideoEditStateWithTransitions, VideoEditorEngine, type VideoSourceMeta };
|
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
import { createHistory, defaultVideoEditState, canUndo, canRedo, undo, redo, replacePresent, pushHistory, clampAudioClip, totalDuration, splitAtOutput, removeClip, duplicateClip, reorderClips, trimClipEdge, contentDuration, locateOutput, usedVideoSrcIndices, remapSrcIndices, VideoEditState } from './chunk-MGKYVYOH.js';
|
|
2
|
+
|
|
3
|
+
// src/engine.ts
|
|
4
|
+
function evenize(n) {
|
|
5
|
+
const v = Math.min(Math.max(Math.round(n), 2), 4096);
|
|
6
|
+
return v % 2 === 0 ? v : v - 1;
|
|
7
|
+
}
|
|
8
|
+
var clampRotation = (deg) => Math.min(Math.max(deg, -180), 180);
|
|
9
|
+
var VideoEditorEngine = class {
|
|
10
|
+
constructor(initial = defaultVideoEditState()) {
|
|
11
|
+
this.videoSources = [];
|
|
12
|
+
this.audioSources = [];
|
|
13
|
+
this.listeners = /* @__PURE__ */ new Set();
|
|
14
|
+
/** 瞬时拖拽序列的起始 base(拖拽前的提交态);null = 不在拖拽中 */
|
|
15
|
+
this.transientBase = null;
|
|
16
|
+
/** useSyncExternalStore 用别名 */
|
|
17
|
+
this.getSnapshot = () => this.history.present;
|
|
18
|
+
this.subscribe = (fn) => {
|
|
19
|
+
this.listeners.add(fn);
|
|
20
|
+
return () => this.listeners.delete(fn);
|
|
21
|
+
};
|
|
22
|
+
this.history = createHistory(initial);
|
|
23
|
+
}
|
|
24
|
+
// ─── 读 / 订阅 ───────────────────────────────────────────────
|
|
25
|
+
/** 当前编辑状态(引用稳定:仅在变更时换新对象,适配 useSyncExternalStore) */
|
|
26
|
+
getState() {
|
|
27
|
+
return this.history.present;
|
|
28
|
+
}
|
|
29
|
+
emit() {
|
|
30
|
+
const s = this.history.present;
|
|
31
|
+
for (const fn of this.listeners) fn(s);
|
|
32
|
+
}
|
|
33
|
+
// ─── 历史 ────────────────────────────────────────────────────
|
|
34
|
+
canUndo() {
|
|
35
|
+
return canUndo(this.history);
|
|
36
|
+
}
|
|
37
|
+
canRedo() {
|
|
38
|
+
return canRedo(this.history);
|
|
39
|
+
}
|
|
40
|
+
undo() {
|
|
41
|
+
this.transientBase = null;
|
|
42
|
+
this.history = undo(this.history);
|
|
43
|
+
this.emit();
|
|
44
|
+
}
|
|
45
|
+
redo() {
|
|
46
|
+
this.transientBase = null;
|
|
47
|
+
this.history = redo(this.history);
|
|
48
|
+
this.emit();
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* 全部变更的唯一入口。mut 接收「计算基准态」返回新态。
|
|
52
|
+
* 瞬时:基准恒为 transientBase(拖拽前态),replacePresent;
|
|
53
|
+
* 提交:基准为 transientBase ?? present;若刚结束一段瞬时,先把 present 还原回 base 再 push,
|
|
54
|
+
* 使整段拖拽只占一步 undo。
|
|
55
|
+
*/
|
|
56
|
+
applyMut(mut, transient = false) {
|
|
57
|
+
if (transient) {
|
|
58
|
+
if (this.transientBase === null) this.transientBase = this.history.present;
|
|
59
|
+
this.history = replacePresent(this.history, mut(this.transientBase));
|
|
60
|
+
} else {
|
|
61
|
+
const base = this.transientBase ?? this.history.present;
|
|
62
|
+
const next = mut(base);
|
|
63
|
+
const h = this.transientBase ? { ...this.history, present: this.transientBase } : this.history;
|
|
64
|
+
this.history = pushHistory(h, next);
|
|
65
|
+
this.transientBase = null;
|
|
66
|
+
}
|
|
67
|
+
this.emit();
|
|
68
|
+
}
|
|
69
|
+
// ─── 源登记(返回新 srcIdx)──────────────────────────────────
|
|
70
|
+
/**
|
|
71
|
+
* 登记一个视频源并入时间轴。首源:用其分辨率初始化 canvas 并重建 history(清空 undo);
|
|
72
|
+
* 后续源:追加整段 clip(pushHistory)。
|
|
73
|
+
*/
|
|
74
|
+
registerVideoSource(meta) {
|
|
75
|
+
const srcIdx = this.videoSources.length;
|
|
76
|
+
this.videoSources.push(meta);
|
|
77
|
+
const clip = { srcIdx, in: 0, out: meta.duration };
|
|
78
|
+
if (srcIdx === 0 || this.history.present.clips.length === 0) {
|
|
79
|
+
this.transientBase = null;
|
|
80
|
+
this.history = createHistory({
|
|
81
|
+
...defaultVideoEditState(),
|
|
82
|
+
clips: [clip],
|
|
83
|
+
canvas: { w: evenize(meta.width), h: evenize(meta.height) },
|
|
84
|
+
poster: { time: Math.min(1, meta.duration / 2) }
|
|
85
|
+
});
|
|
86
|
+
this.emit();
|
|
87
|
+
} else {
|
|
88
|
+
this.applyMut((s) => ({ ...s, clips: [...s.clips, clip] }));
|
|
89
|
+
}
|
|
90
|
+
return srcIdx;
|
|
91
|
+
}
|
|
92
|
+
/** 登记一个音频源并入音轨(整段、volume=1、startAt=0,clamp 后 push) */
|
|
93
|
+
registerAudioSource(meta) {
|
|
94
|
+
const srcIdx = this.audioSources.length;
|
|
95
|
+
this.audioSources.push(meta);
|
|
96
|
+
this.applyMut((s) => {
|
|
97
|
+
const usedTracks = new Set(
|
|
98
|
+
(s.audioClips ?? []).map((clip, index) =>
|
|
99
|
+
Number.isInteger(clip?.track) && clip.track >= 0 ? clip.track : index
|
|
100
|
+
)
|
|
101
|
+
);
|
|
102
|
+
let nextTrack = 0;
|
|
103
|
+
while (usedTracks.has(nextTrack)) nextTrack += 1;
|
|
104
|
+
const a = clampAudioClip(
|
|
105
|
+
{ srcIdx, track: nextTrack, startAt: 0, in: 0, out: meta.duration, volume: 1 },
|
|
106
|
+
meta.duration,
|
|
107
|
+
totalDuration(s.clips)
|
|
108
|
+
);
|
|
109
|
+
return { ...s, audioClips: [...s.audioClips, a] };
|
|
110
|
+
});
|
|
111
|
+
return srcIdx;
|
|
112
|
+
}
|
|
113
|
+
getVideoSource(idx) {
|
|
114
|
+
return this.videoSources[idx];
|
|
115
|
+
}
|
|
116
|
+
getAudioSource(idx) {
|
|
117
|
+
return this.audioSources[idx];
|
|
118
|
+
}
|
|
119
|
+
// ─── 视频片段 ─────────────────────────────────────────────────
|
|
120
|
+
/** 把已登记源再追加一段整段 clip(同源可多次引用) */
|
|
121
|
+
addClipFromSource(srcIdx) {
|
|
122
|
+
const meta = this.videoSources[srcIdx];
|
|
123
|
+
if (!meta) return;
|
|
124
|
+
this.applyMut((s) => ({ ...s, clips: [...s.clips, { srcIdx, in: 0, out: meta.duration }] }));
|
|
125
|
+
}
|
|
126
|
+
splitAtPlayhead(outputTime) {
|
|
127
|
+
this.applyMut((s) => ({ ...s, clips: splitAtOutput(s.clips, outputTime) }));
|
|
128
|
+
}
|
|
129
|
+
removeClip(idx) {
|
|
130
|
+
this.applyMut((s) => ({ ...s, clips: removeClip(s.clips, idx) }));
|
|
131
|
+
}
|
|
132
|
+
duplicateClip(idx) {
|
|
133
|
+
this.applyMut((s) => ({ ...s, clips: duplicateClip(s.clips, idx) }));
|
|
134
|
+
}
|
|
135
|
+
reorderClips(from, to) {
|
|
136
|
+
this.applyMut((s) => ({ ...s, clips: reorderClips(s.clips, from, to) }));
|
|
137
|
+
}
|
|
138
|
+
/** 拖把手改 in/out 到源时刻 srcT;拖拽中传 {transient:true},松手再调一次提交 */
|
|
139
|
+
trimClip(idx, edge, srcT, opts) {
|
|
140
|
+
this.applyMut((s) => {
|
|
141
|
+
const c = s.clips[idx];
|
|
142
|
+
if (!c) return s;
|
|
143
|
+
const srcDur = this.videoSources[c.srcIdx]?.duration ?? c.out;
|
|
144
|
+
return { ...s, clips: trimClipEdge(s.clips, idx, edge, srcT, srcDur) };
|
|
145
|
+
}, opts?.transient);
|
|
146
|
+
}
|
|
147
|
+
// ─── 音频片段 ─────────────────────────────────────────────────
|
|
148
|
+
moveAudioClip(idx, startAt, opts) {
|
|
149
|
+
this.applyMut((s) => this.patchAudio(s, idx, (a) => ({ ...a, startAt })), opts?.transient);
|
|
150
|
+
}
|
|
151
|
+
trimAudioClip(idx, edge, t, opts) {
|
|
152
|
+
this.applyMut((s) => {
|
|
153
|
+
return this.patchAudio(s, idx, (a) => {
|
|
154
|
+
if (edge === "in") {
|
|
155
|
+
const delta = t - a.in;
|
|
156
|
+
return { ...a, in: t, startAt: a.startAt + delta };
|
|
157
|
+
}
|
|
158
|
+
return { ...a, out: t };
|
|
159
|
+
});
|
|
160
|
+
}, opts?.transient);
|
|
161
|
+
}
|
|
162
|
+
setAudioVolume(idx, volume, opts) {
|
|
163
|
+
this.applyMut((s) => this.patchAudio(s, idx, (a) => ({ ...a, volume }), false), opts?.transient);
|
|
164
|
+
}
|
|
165
|
+
removeAudioClip(idx) {
|
|
166
|
+
this.applyMut((s) => ({ ...s, audioClips: s.audioClips.filter((_, i) => i !== idx) }));
|
|
167
|
+
}
|
|
168
|
+
/** 改一条音频片段并 clamp(volume 改动不需 clamp 几何,clampGeom=false 跳过) */
|
|
169
|
+
patchAudio(s, idx, fn, clampGeom = true) {
|
|
170
|
+
const a = s.audioClips[idx];
|
|
171
|
+
if (!a) return s;
|
|
172
|
+
let next = fn(a);
|
|
173
|
+
if (clampGeom) {
|
|
174
|
+
const srcDur = this.audioSources[a.srcIdx]?.duration ?? a.out;
|
|
175
|
+
next = clampAudioClip(next, srcDur, totalDuration(s.clips));
|
|
176
|
+
}
|
|
177
|
+
return { ...s, audioClips: s.audioClips.map((x, i) => i === idx ? next : x) };
|
|
178
|
+
}
|
|
179
|
+
// ─── 几何:crop / scale / 旋转 / 翻转 ─────────────────────────
|
|
180
|
+
setCrop(crop, opts) {
|
|
181
|
+
this.applyMut((s) => ({ ...s, crop }), opts?.transient);
|
|
182
|
+
}
|
|
183
|
+
clearCrop() {
|
|
184
|
+
this.applyMut((s) => ({ ...s, crop: void 0 }));
|
|
185
|
+
}
|
|
186
|
+
setScale(scale) {
|
|
187
|
+
this.applyMut((s) => ({ ...s, scale }));
|
|
188
|
+
}
|
|
189
|
+
clearScale() {
|
|
190
|
+
this.applyMut((s) => ({ ...s, scale: void 0 }));
|
|
191
|
+
}
|
|
192
|
+
setRotation(deg, opts) {
|
|
193
|
+
this.applyMut((s) => ({ ...s, rotation: clampRotation(deg) }), opts?.transient);
|
|
194
|
+
}
|
|
195
|
+
/** 90° 步进(顺时针正);结果钳到 [-180,180] */
|
|
196
|
+
rotateBy(step) {
|
|
197
|
+
this.applyMut((s) => {
|
|
198
|
+
let r = s.rotation + step;
|
|
199
|
+
if (r > 180) r -= 360;
|
|
200
|
+
if (r < -180) r += 360;
|
|
201
|
+
return { ...s, rotation: clampRotation(r) };
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
flipX() {
|
|
205
|
+
this.applyMut((s) => ({ ...s, flipX: !s.flipX }));
|
|
206
|
+
}
|
|
207
|
+
flipY() {
|
|
208
|
+
this.applyMut((s) => ({ ...s, flipY: !s.flipY }));
|
|
209
|
+
}
|
|
210
|
+
// ─── 滤镜 ────────────────────────────────────────────────────
|
|
211
|
+
setFilter(key, value, opts) {
|
|
212
|
+
this.applyMut((s) => ({ ...s, filters: { ...s.filters, [key]: value } }), opts?.transient);
|
|
213
|
+
}
|
|
214
|
+
setFilters(partial, opts) {
|
|
215
|
+
this.applyMut((s) => ({ ...s, filters: { ...s.filters, ...partial } }), opts?.transient);
|
|
216
|
+
}
|
|
217
|
+
setFilterPreset(id) {
|
|
218
|
+
this.applyMut((s) => ({ ...s, filterPreset: id }));
|
|
219
|
+
}
|
|
220
|
+
// ─── 标注 overlays ───────────────────────────────────────────
|
|
221
|
+
addOverlay(o) {
|
|
222
|
+
this.applyMut((s) => ({ ...s, overlays: [...s.overlays ?? [], o] }));
|
|
223
|
+
}
|
|
224
|
+
updateOverlay(idx, patch, opts) {
|
|
225
|
+
this.applyMut((s) => {
|
|
226
|
+
const ovs = s.overlays ?? [];
|
|
227
|
+
if (!ovs[idx]) return s;
|
|
228
|
+
return { ...s, overlays: ovs.map((o, i) => i === idx ? { ...o, ...patch } : o) };
|
|
229
|
+
}, opts?.transient);
|
|
230
|
+
}
|
|
231
|
+
removeOverlay(idx) {
|
|
232
|
+
this.applyMut((s) => ({ ...s, overlays: (s.overlays ?? []).filter((_, i) => i !== idx) }));
|
|
233
|
+
}
|
|
234
|
+
// ─── 杂项 ────────────────────────────────────────────────────
|
|
235
|
+
/**
|
|
236
|
+
* 通用补丁:把 partial 浅合并进状态(UI 一次改多字段,如旋转同时重置 crop)。
|
|
237
|
+
* - `{transient:true}`:拖拽中间帧,基于拖拽前 base 合并、replacePresent,不入栈(= 原 patchLive)。
|
|
238
|
+
* - 默认:一次性提交(= commit(partial))。
|
|
239
|
+
*/
|
|
240
|
+
patch(partial, opts) {
|
|
241
|
+
if (opts?.transient) {
|
|
242
|
+
if (this.transientBase === null) this.transientBase = this.history.present;
|
|
243
|
+
this.history = replacePresent(this.history, { ...this.transientBase, ...partial });
|
|
244
|
+
this.emit();
|
|
245
|
+
} else {
|
|
246
|
+
this.commit(partial);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* 定格当前态为一步 undo(= 原 commit):保留 present(含拖拽末值),可再合并 partial;
|
|
251
|
+
* 若处于瞬时序列,先把 past 接到拖拽前 base 上,使整段拖拽只占一步。
|
|
252
|
+
*/
|
|
253
|
+
commit(partial) {
|
|
254
|
+
const next = partial ? { ...this.history.present, ...partial } : this.history.present;
|
|
255
|
+
const base = this.transientBase;
|
|
256
|
+
this.transientBase = null;
|
|
257
|
+
this.history = base ? pushHistory({ ...this.history, present: base }, next) : pushHistory(this.history, next);
|
|
258
|
+
this.emit();
|
|
259
|
+
}
|
|
260
|
+
setKeepAudio(keep) {
|
|
261
|
+
this.applyMut((s) => ({ ...s, keepAudio: keep }));
|
|
262
|
+
}
|
|
263
|
+
setPoster(time) {
|
|
264
|
+
this.applyMut((s) => ({ ...s, poster: { time: Math.max(0, time) } }));
|
|
265
|
+
}
|
|
266
|
+
// ─── 派生只读 ────────────────────────────────────────────────
|
|
267
|
+
totalDuration() {
|
|
268
|
+
return totalDuration(this.history.present.clips);
|
|
269
|
+
}
|
|
270
|
+
contentDuration() {
|
|
271
|
+
const s = this.history.present;
|
|
272
|
+
return contentDuration(s.clips, s.audioClips, s.overlays);
|
|
273
|
+
}
|
|
274
|
+
/** 输出时刻 → 所属片段与源内时刻(播放头定位) */
|
|
275
|
+
locate(outputTime) {
|
|
276
|
+
return locateOutput(this.history.present.clips, outputTime);
|
|
277
|
+
}
|
|
278
|
+
usedVideoSources() {
|
|
279
|
+
return usedVideoSrcIndices(this.history.present.clips);
|
|
280
|
+
}
|
|
281
|
+
// ─── 导出 ────────────────────────────────────────────────────
|
|
282
|
+
/**
|
|
283
|
+
* 生成导出计划:剔除未引用源、把 clips/audioClips 的 srcIdx 重映射到 [0..n),
|
|
284
|
+
* 返回压缩后的状态与上传槽位顺序(framework 按 order 取 File 上传)。
|
|
285
|
+
*/
|
|
286
|
+
getExportPlan() {
|
|
287
|
+
const s = this.history.present;
|
|
288
|
+
const videoSrcOrder = usedVideoSrcIndices(s.clips);
|
|
289
|
+
const audioSrcOrder = [...new Set(s.audioClips.map((a) => a.srcIdx))].sort((x, y) => x - y);
|
|
290
|
+
const audioMap = new Map(audioSrcOrder.map((src, i) => [src, i]));
|
|
291
|
+
return {
|
|
292
|
+
state: {
|
|
293
|
+
...s,
|
|
294
|
+
clips: remapSrcIndices(s.clips, videoSrcOrder),
|
|
295
|
+
audioClips: s.audioClips.map((a) => ({ ...a, srcIdx: audioMap.get(a.srcIdx) ?? 0 }))
|
|
296
|
+
},
|
|
297
|
+
videoSrcOrder,
|
|
298
|
+
audioSrcOrder
|
|
299
|
+
};
|
|
300
|
+
}
|
|
301
|
+
/** 校验当前(导出)状态是否符合 schema —— 提交前兜底 */
|
|
302
|
+
validate() {
|
|
303
|
+
return VideoEditState.safeParse(this.getExportPlan().state);
|
|
304
|
+
}
|
|
305
|
+
/** 重置为给定状态(清空 history、源登记保留) */
|
|
306
|
+
reset(state = defaultVideoEditState()) {
|
|
307
|
+
this.transientBase = null;
|
|
308
|
+
this.history = createHistory(state);
|
|
309
|
+
this.emit();
|
|
310
|
+
}
|
|
311
|
+
};
|
|
312
|
+
|
|
313
|
+
export { VideoEditorEngine };
|
|
314
|
+
//# sourceMappingURL=engine.js.map
|
|
315
|
+
//# sourceMappingURL=engine.js.map
|