@vvfx/svg2ir 0.0.0-stage → 0.0.1-beta.0
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 +22 -0
- package/README.md +179 -2
- package/dist/common/errors.d.ts +33 -0
- package/dist/common/types.d.ts +89 -0
- package/dist/convert.d.ts +19 -0
- package/dist/debug.d.ts +8 -0
- package/dist/helper.d.ts +5 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.js +16013 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +16008 -0
- package/dist/index.mjs.map +1 -0
- package/dist/node.d.ts +1 -0
- package/dist/node.js +16030 -0
- package/dist/node.js.map +1 -0
- package/dist/node.mjs +16025 -0
- package/dist/node.mjs.map +1 -0
- package/dist/parse-svg/bridge.d.ts +10 -0
- package/dist/parse-svg/node.d.ts +3 -0
- package/dist/parse-svg/read-presentation-attribute.d.ts +5 -0
- package/dist/parse-svg/svg-parser.d.ts +46 -0
- package/dist/svg-preserved-data.d.ts +78 -0
- package/dist/svg2ge-adapter/assemble.d.ts +5 -0
- package/dist/svg2ge-adapter/convert.d.ts +5 -0
- package/dist/svg2ge-adapter/converter/animation.d.ts +10 -0
- package/dist/svg2ge-adapter/converter/data-path.d.ts +6 -0
- package/dist/svg2ge-adapter/normalize-shape-animation.d.ts +2 -0
- package/dist/svg2ge-adapter/post-process/apply-fonts.d.ts +6 -0
- package/dist/svg2ge-adapter/post-process/apply-shape-geometry-animation.d.ts +4 -0
- package/dist/svg2ge-adapter/post-process/apply-shape-paint-animation.d.ts +4 -0
- package/dist/svg2ge-adapter/post-process/paint-animation-sampling.d.ts +13 -0
- package/dist/svg2ge-adapter/post-process/restore-gradient-uv.d.ts +3 -0
- package/dist/svg2ge-adapter/post-process/rewrite-text-components.d.ts +13 -0
- package/dist/svg2ge-adapter/pre-process.d.ts +7 -0
- package/dist/svg2ge-adapter/types.d.ts +11 -0
- package/dist/svg2ir/assemble.d.ts +9 -0
- package/dist/svg2ir/convert-arc.d.ts +10 -0
- package/dist/svg2ir/convert.d.ts +21 -0
- package/dist/svg2ir/converter/clip/apply-mask.d.ts +4 -0
- package/dist/svg2ir/converter/clip/build-clip-mask.d.ts +35 -0
- package/dist/svg2ir/converter/clip/collect-geometry.d.ts +32 -0
- package/dist/svg2ir/converter/clip/warn-unsupported.d.ts +7 -0
- package/dist/svg2ir/converter/diagnostics/collect-warnings.d.ts +6 -0
- package/dist/svg2ir/converter/diagnostics/inspect-filter.d.ts +4 -0
- package/dist/svg2ir/converter/diagnostics/warn-unsupported.d.ts +8 -0
- package/dist/svg2ir/converter/image/parse-image.d.ts +14 -0
- package/dist/svg2ir/converter/layers/build-layers.d.ts +8 -0
- package/dist/svg2ir/converter/layers/conversion-session.d.ts +161 -0
- package/dist/svg2ir/converter/layers/convert-group-element.d.ts +3 -0
- package/dist/svg2ir/converter/layers/convert-image-element.d.ts +3 -0
- package/dist/svg2ir/converter/layers/convert-shape-element.d.ts +3 -0
- package/dist/svg2ir/converter/layers/convert-text-element.d.ts +3 -0
- package/dist/svg2ir/converter/layers/convert-use-element.d.ts +3 -0
- package/dist/svg2ir/converter/layers/element-categories.d.ts +2 -0
- package/dist/svg2ir/converter/layers/registry.d.ts +4 -0
- package/dist/svg2ir/converter/paint/resolve-gradient.d.ts +29 -0
- package/dist/svg2ir/converter/shape/convert-annulus.d.ts +10 -0
- package/dist/svg2ir/converter/shape/parse-dash.d.ts +23 -0
- package/dist/svg2ir/converter/shape/parse-shape-element.d.ts +4 -0
- package/dist/svg2ir/converter/shape/parse-shape-primitives.d.ts +15 -0
- package/dist/svg2ir/converter/smil/apply-opacity-composition.d.ts +6 -0
- package/dist/svg2ir/converter/smil/apply-transform-animation.d.ts +14 -0
- package/dist/svg2ir/converter/smil/apply-transform-composition.d.ts +4 -0
- package/dist/svg2ir/converter/smil/build-keyframes.d.ts +10 -0
- package/dist/svg2ir/converter/smil/collect-geometry-animation.d.ts +7 -0
- package/dist/svg2ir/converter/smil/inspect-animation.d.ts +6 -0
- package/dist/svg2ir/converter/smil/parse-motion.d.ts +4 -0
- package/dist/svg2ir/converter/smil/parse-paint-animation.d.ts +13 -0
- package/dist/svg2ir/converter/smil/parse-shape-animation.d.ts +4 -0
- package/dist/svg2ir/converter/smil/parse-timeline.d.ts +4 -0
- package/dist/svg2ir/converter/smil/resolve-animation-target.d.ts +4 -0
- package/dist/svg2ir/converter/smil/sample-composition-frames.d.ts +42 -0
- package/dist/svg2ir/converter/smil/scan-duration.d.ts +4 -0
- package/dist/svg2ir/converter/smil/timeline-schedule.d.ts +17 -0
- package/dist/svg2ir/converter/smil/timeline-values.d.ts +20 -0
- package/dist/svg2ir/converter/smil/types.d.ts +129 -0
- package/dist/svg2ir/converter/switch-branch.d.ts +3 -0
- package/dist/svg2ir/converter/text/build-per-line-text-layers.d.ts +11 -0
- package/dist/svg2ir/converter/text/build-single-text-layer.d.ts +11 -0
- package/dist/svg2ir/converter/text/build-split-text-layers.d.ts +11 -0
- package/dist/svg2ir/converter/text/build-vertical-text-layers.d.ts +10 -0
- package/dist/svg2ir/converter/text/font-metrics.d.ts +53 -0
- package/dist/svg2ir/converter/text/inspect-content.d.ts +42 -0
- package/dist/svg2ir/converter/text/parse.d.ts +10 -0
- package/dist/svg2ir/converter/text/text-layout.d.ts +29 -0
- package/dist/svg2ir/converter/transform/build-transform.d.ts +15 -0
- package/dist/svg2ir/converter/use/collect-group-use-instances.d.ts +16 -0
- package/dist/svg2ir/converter/use/expand-use.d.ts +31 -0
- package/dist/svg2ir/css-named-colors.d.ts +1 -0
- package/dist/svg2ir/index.d.ts +2 -0
- package/dist/svg2ir/map-color.d.ts +3 -0
- package/dist/svg2ir/matrix.d.ts +67 -0
- package/dist/svg2ir/normalize-path.d.ts +52 -0
- package/dist/svg2ir/read-attributes.d.ts +12 -0
- package/dist/svg2layers-adapter/assemble.d.ts +8 -0
- package/dist/svg2layers-adapter/convert.d.ts +4 -0
- package/dist/svg2layers-adapter/converter/diagnostics/collect-warnings.d.ts +10 -0
- package/dist/svg2layers-adapter/converter/image/convert-image-layer.d.ts +5 -0
- package/dist/svg2layers-adapter/converter/layers/build-layers.d.ts +3 -0
- package/dist/svg2layers-adapter/converter/layers/conversion-session.d.ts +14 -0
- package/dist/svg2layers-adapter/converter/layers/registry.d.ts +9 -0
- package/dist/svg2layers-adapter/converter/layers/resolve-visual-state.d.ts +4 -0
- package/dist/svg2layers-adapter/converter/text/convert-text-layer.d.ts +5 -0
- package/dist/svg2layers-adapter/converter/text/parse-text-runs.d.ts +11 -0
- package/dist/svg2layers-adapter/converter/text/text-layout.d.ts +9 -0
- package/dist/svg2layers-adapter/converter/transform/build-transform.d.ts +8 -0
- package/dist/svg2layers-adapter/matrix.d.ts +16 -0
- package/dist/svg2layers-adapter/post-process/inline-image-resources.d.ts +3 -0
- package/dist/svg2layers-adapter/types.d.ts +61 -0
- package/package.json +61 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../node_modules/.pnpm/@swc+helpers@0.5.21/node_modules/@swc/helpers/esm/_extends.js","../../../node_modules/.pnpm/@swc+helpers@0.5.21/node_modules/@swc/helpers/esm/_set_prototype_of.js","../../../node_modules/.pnpm/@swc+helpers@0.5.21/node_modules/@swc/helpers/esm/_inherits.js","../../../node_modules/.pnpm/@swc+helpers@0.5.21/node_modules/@swc/helpers/esm/_instanceof.js","../../../node_modules/.pnpm/@swc+helpers@0.5.21/node_modules/@swc/helpers/esm/_type_of.js","../../../node_modules/.pnpm/@swc+helpers@0.5.21/node_modules/@swc/helpers/esm/_is_native_reflect_construct.js","../../../node_modules/.pnpm/@swc+helpers@0.5.21/node_modules/@swc/helpers/esm/_construct.js","../../../node_modules/.pnpm/@swc+helpers@0.5.21/node_modules/@swc/helpers/esm/_get_prototype_of.js","../../../node_modules/.pnpm/@swc+helpers@0.5.21/node_modules/@swc/helpers/esm/_is_native_function.js","../../../node_modules/.pnpm/@swc+helpers@0.5.21/node_modules/@swc/helpers/esm/_wrap_native_super.js","../src/common/errors.ts","../../../node_modules/.pnpm/@swc+helpers@0.5.21/node_modules/@swc/helpers/esm/_array_like_to_array.js","../../../node_modules/.pnpm/@swc+helpers@0.5.21/node_modules/@swc/helpers/esm/_unsupported_iterable_to_array.js","../../../node_modules/.pnpm/@swc+helpers@0.5.21/node_modules/@swc/helpers/esm/_create_for_of_iterator_helper_loose.js","../src/svg2ir/css-named-colors.ts","../src/svg2ir/map-color.ts","../src/svg2ir/converter/smil/types.ts","../src/svg2ir/converter/smil/timeline-schedule.ts","../src/svg2ir/converter/smil/timeline-values.ts","../src/svg2ir/converter/smil/parse-timeline.ts","../src/svg2ir/converter/smil/scan-duration.ts","../src/common/types.ts","../src/svg2ir/converter/diagnostics/collect-warnings.ts","../src/svg2ir/matrix.ts","../src/svg2ir/convert-arc.ts","../src/svg2ir/normalize-path.ts","../src/svg2ir/converter/clip/collect-geometry.ts","../src/svg2ir/converter/clip/build-clip-mask.ts","../src/svg2ir/converter/diagnostics/inspect-filter.ts","../src/svg2ir/converter/smil/build-keyframes.ts","../src/svg2ir/converter/smil/resolve-animation-target.ts","../src/svg2ir/converter/smil/collect-geometry-animation.ts","../src/svg2ir/converter/smil/inspect-animation.ts","../src/parse-svg/read-presentation-attribute.ts","../src/svg2ir/read-attributes.ts","../src/svg2ir/converter/paint/resolve-gradient.ts","../src/svg2ir/converter/use/expand-use.ts","../src/svg2ir/converter/clip/apply-mask.ts","../src/svg2ir/converter/clip/warn-unsupported.ts","../src/svg2ir/converter/shape/convert-annulus.ts","../src/svg2ir/converter/shape/parse-dash.ts","../src/svg2ir/converter/shape/parse-shape-primitives.ts","../src/svg2ir/converter/shape/parse-shape-element.ts","../src/svg2ir/converter/layers/element-categories.ts","../src/svg2ir/converter/layers/conversion-session.ts","../src/svg2ir/converter/diagnostics/warn-unsupported.ts","../src/svg2ir/converter/layers/convert-group-element.ts","../src/svg2ir/converter/image/parse-image.ts","../src/svg2ir/converter/smil/parse-motion.ts","../src/svg2ir/converter/smil/sample-composition-frames.ts","../src/svg2ir/converter/smil/apply-transform-composition.ts","../src/svg2ir/converter/smil/apply-opacity-composition.ts","../src/svg2ir/converter/smil/apply-transform-animation.ts","../src/svg2ir/converter/transform/build-transform.ts","../src/svg2ir/converter/layers/convert-image-element.ts","../src/svg2ir/converter/smil/parse-paint-animation.ts","../src/svg2ir/converter/smil/parse-shape-animation.ts","../src/svg2ir/converter/layers/convert-shape-element.ts","../src/svg2ir/converter/text/inspect-content.ts","../../../node_modules/.pnpm/@swc+helpers@0.5.21/node_modules/@swc/helpers/esm/_object_without_properties_loose.js","../src/svg2ir/converter/text/font-metrics.ts","../src/svg2ir/converter/text/text-layout.ts","../src/svg2ir/converter/text/build-single-text-layer.ts","../src/svg2ir/converter/text/build-split-text-layers.ts","../src/svg2ir/converter/text/build-vertical-text-layers.ts","../src/svg2ir/converter/text/build-per-line-text-layers.ts","../src/svg2ir/converter/text/parse.ts","../src/svg2ir/converter/layers/convert-text-element.ts","../src/svg2ir/converter/switch-branch.ts","../src/svg2ir/converter/use/collect-group-use-instances.ts","../src/svg2ir/converter/layers/convert-use-element.ts","../src/svg2ir/converter/layers/registry.ts","../src/svg2ir/converter/layers/build-layers.ts","../src/parse-svg/svg-parser.ts","../src/parse-svg/bridge.ts","../src/svg2ir/assemble.ts","../src/svg2ir/convert.ts","../../../node_modules/.pnpm/@swc+helpers@0.5.21/node_modules/@swc/helpers/esm/_async_to_generator.js","../../../node_modules/.pnpm/@swc+helpers@0.5.21/node_modules/@swc/helpers/esm/_ts_generator.js","../src/svg2layers-adapter/converter/diagnostics/collect-warnings.ts","../src/svg2layers-adapter/matrix.ts","../src/svg2layers-adapter/converter/transform/build-transform.ts","../src/svg2layers-adapter/converter/layers/conversion-session.ts","../src/svg2layers-adapter/converter/image/convert-image-layer.ts","../src/svg2layers-adapter/converter/text/parse-text-runs.ts","../src/svg2layers-adapter/converter/text/text-layout.ts","../src/svg2layers-adapter/converter/text/convert-text-layer.ts","../src/svg2layers-adapter/converter/layers/registry.ts","../src/svg2layers-adapter/converter/layers/resolve-visual-state.ts","../src/svg2layers-adapter/converter/layers/build-layers.ts","../src/svg2layers-adapter/assemble.ts","../src/svg2layers-adapter/post-process/inline-image-resources.ts","../src/svg2layers-adapter/convert.ts","../../../node_modules/.pnpm/@galacean+effects-specification@2.7.2/node_modules/@galacean/effects-specification/es/scene.js","../../../node_modules/.pnpm/@galacean+effects-specification@2.7.2/node_modules/@galacean/effects-specification/es/type.js","../../../node_modules/.pnpm/@galacean+effects-specification@2.7.2/node_modules/@galacean/effects-specification/es/composition.js","../../../node_modules/.pnpm/@galacean+effects-specification@2.7.2/node_modules/@galacean/effects-specification/es/number-expression.js","../../../node_modules/.pnpm/@galacean+effects-specification@2.7.2/node_modules/@galacean/effects-specification/es/item/base-item.js","../../../node_modules/.pnpm/@galacean+effects-specification@2.7.2/node_modules/@galacean/effects-specification/es/item/particle-item.js","../../../node_modules/.pnpm/@galacean+effects-specification@2.7.2/node_modules/@galacean/effects-specification/es/item/particle-shape.js","../../../node_modules/.pnpm/@galacean+effects-specification@2.7.2/node_modules/@galacean/effects-specification/es/item/model/light.js","../../../node_modules/.pnpm/@galacean+effects-specification@2.7.2/node_modules/@galacean/effects-specification/es/item/model/mesh.js","../../../node_modules/.pnpm/@galacean+effects-specification@2.7.2/node_modules/@galacean/effects-specification/es/item/model/camera.js","../../../node_modules/.pnpm/@galacean+effects-specification@2.7.2/node_modules/@galacean/effects-specification/es/item/model/material.js","../../../node_modules/.pnpm/@galacean+effects-specification@2.7.2/node_modules/@galacean/effects-specification/es/item/model/render.js","../../../node_modules/.pnpm/@galacean+effects-specification@2.7.2/node_modules/@galacean/effects-specification/es/text.js","../../../node_modules/.pnpm/@galacean+effects-specification@2.7.2/node_modules/@galacean/effects-specification/es/shape/shape-component-data.js","../../../node_modules/.pnpm/@galacean+effects-specification@2.7.2/node_modules/@galacean/effects-specification/es/shape/shape-primitive-type.js","../../../node_modules/.pnpm/@galacean+effects-specification@2.7.2/node_modules/@galacean/effects-specification/es/shape/shape-stroke-param.js","../../../node_modules/.pnpm/@galacean+effects-specification@2.7.2/node_modules/@galacean/effects-specification/es/animation-graph/graph-node-datas.js","../../../node_modules/.pnpm/@galacean+effects-specification@2.7.2/node_modules/@galacean/effects-specification/es/assets.js","../../../node_modules/.pnpm/@galacean+effects-specification@2.7.2/node_modules/@galacean/effects-specification/es/data-type.js","../../../node_modules/.pnpm/@galacean+effects-specification@2.7.2/node_modules/@galacean/effects-specification/es/geometry-data.js","../../../node_modules/.pnpm/@galacean+effects-specification@2.7.2/node_modules/@galacean/effects-specification/es/index.js","../src/svg2ge-adapter/post-process/rewrite-text-components.ts","../src/svg2ge-adapter/normalize-shape-animation.ts","../src/svg2ge-adapter/pre-process.ts","../src/svg2ge-adapter/post-process/apply-fonts.ts","../src/svg2ge-adapter/post-process/restore-gradient-uv.ts","../src/svg2ge-adapter/converter/animation.ts","../src/svg2ge-adapter/converter/data-path.ts","../src/svg2ge-adapter/post-process/paint-animation-sampling.ts","../src/svg2ge-adapter/post-process/apply-shape-paint-animation.ts","../src/svg2ge-adapter/post-process/apply-shape-geometry-animation.ts","../src/svg2ge-adapter/assemble.ts","../src/svg2ge-adapter/convert.ts","../src/convert.ts"],"sourcesContent":["function _extends() {\n _extends = Object.assign || function assign(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) if (Object.prototype.hasOwnProperty.call(source, key)) target[key] = source[key];\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\nexport { _extends as _ };\n","function _set_prototype_of(o, p) {\n _set_prototype_of = Object.setPrototypeOf || function setPrototypeOf(o, p) {\n o.__proto__ = p;\n\n return o;\n };\n\n return _set_prototype_of(o, p);\n}\nexport { _set_prototype_of as _ };\n","import { _ as _set_prototype_of } from \"./_set_prototype_of.js\";\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } });\n\n if (superClass) _set_prototype_of(subClass, superClass);\n}\nexport { _inherits as _ };\n","function _instanceof(left, right) {\n \"@swc/helpers - instanceof\";\n\n if (right != null && typeof Symbol !== \"undefined\" && right[Symbol.hasInstance]) {\n return !!right[Symbol.hasInstance](left);\n } else return left instanceof right;\n}\nexport { _instanceof as _ };\n","function _type_of(obj) {\n \"@swc/helpers - typeof\";\n\n return obj && typeof Symbol !== \"undefined\" && obj.constructor === Symbol ? \"symbol\" : typeof obj;\n}\nexport { _type_of as _ };\n","function _is_native_reflect_construct() {\n // Since Reflect.construct can't be properly polyfilled, some\n // implementations (e.g. core-js@2) don't set the correct internal slots.\n // Those polyfills don't allow us to subclass built-ins, so we need to\n // use our fallback implementation.\n try {\n // If the internal slots aren't set, this throws an error similar to\n // TypeError: this is not a Boolean object.\n var result = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {}));\n } catch (_) {}\n return (_is_native_reflect_construct = function() {\n return !!result;\n })();\n}\n\nexport { _is_native_reflect_construct as _ };\n","import { _ as _is_native_reflect_construct } from \"./_is_native_reflect_construct.js\";\nimport { _ as _set_prototype_of } from \"./_set_prototype_of.js\";\nfunction _construct(Parent, args, Class) {\n if (_is_native_reflect_construct()) _construct = Reflect.construct;\n else {\n _construct = function construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n\n if (Class) _set_prototype_of(instance, Class.prototype);\n\n return instance;\n };\n }\n\n return _construct.apply(null, arguments);\n}\nexport { _construct as _ };\n","function _get_prototype_of(o) {\n _get_prototype_of = Object.setPrototypeOf ? Object.getPrototypeOf : function getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n\n return _get_prototype_of(o);\n}\nexport { _get_prototype_of as _ };\n","function _is_native_function(fn) {\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}\nexport { _is_native_function as _ };\n","import { _ as _construct } from \"./_construct.js\";\nimport { _ as _get_prototype_of } from \"./_get_prototype_of.js\";\nimport { _ as _is_native_function } from \"./_is_native_function.js\";\nimport { _ as _set_prototype_of } from \"./_set_prototype_of.js\";\n\nfunction _wrap_native_super(Class) {\n var _cache = typeof Map === \"function\" ? new Map() : undefined;\n _wrap_native_super = function(Class) {\n if (Class === null || !_is_native_function(Class)) return Class;\n if (typeof Class !== \"function\") throw new TypeError(\"Super expression must either be null or a function\");\n if (typeof _cache !== \"undefined\") {\n if (_cache.has(Class)) return _cache.get(Class);\n _cache.set(Class, Wrapper);\n }\n\n function Wrapper() {\n return _construct(Class, arguments, _get_prototype_of(this).constructor);\n }\n Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } });\n\n return _set_prototype_of(Wrapper, Class);\n };\n\n return _wrap_native_super(Class);\n}\nexport { _wrap_native_super as _ };\n","/**\n * svg2ir 内部转换错误码常量。\n *\n * 内部转换阶段使用这些常量区分失败阶段,避免依赖 message 文本。\n *\n * 转换器遇到不可继续的错误(解析失败/IR 校验失败/生成失败)抛内部转换错误;\n * 可丢降级的特性走 warnings,不抛错。\n */\n\n/** svg2ir 内部转换错误码,裸字符串(不带包名前缀)。 */\nexport const SVG_CONVERTER_ERROR_CODES = {\n /** SVG 串/资源无法解析为合法 SVG DOM。 */\n INVALID_SVG: 'INVALID_SVG',\n LAYERS_CONVERSION_FAILED: 'LAYERS_CONVERSION_FAILED',\n /** SVG 解析底座(reader/reader)初始化失败。 */\n PARSE_FAIL: 'PARSE_FAIL',\n /** IR 结构校验失败(animation-ir 内部 IR_xxx 映射到该码)。 */\n IR_VALIDATION_FAILED: 'IR_VALIDATION_FAILED',\n} as const;\n\nexport type SVGConverterErrorCode =\n (typeof SVG_CONVERTER_ERROR_CODES)[keyof typeof SVG_CONVERTER_ERROR_CODES];\n\nconst SVG_CONVERTER_ERROR_BRAND = Symbol.for('@vvfx/svg2ir/SVGConverterError');\n\n/**\n * 判断输入值是否为 {@link SVGConverterErrorCode}。\n */\nexport function isSVGConverterErrorCode (code: unknown): code is SVGConverterErrorCode {\n if (typeof code !== 'string') {\n return false;\n }\n\n return Object.values(SVG_CONVERTER_ERROR_CODES).includes(code as SVGConverterErrorCode);\n}\n\nfunction isSVGConverterErrorLike (value: unknown): boolean {\n if (value == null || typeof value !== 'object') {\n return false;\n }\n\n const candidate = value as Record<symbol, unknown> & { code?: unknown; name?: unknown };\n\n return candidate[SVG_CONVERTER_ERROR_BRAND] === true ||\n (candidate.name === 'SVGConverterError' && isSVGConverterErrorCode(candidate.code));\n}\n\n/** svg2ir 内部统一错误类型。 */\nexport class SVGConverterError extends Error {\n readonly code: SVGConverterErrorCode;\n readonly details?: Record<string, unknown>;\n\n constructor (code: SVGConverterErrorCode, message: string, details?: Record<string, unknown>) {\n super(message);\n this.name = 'SVGConverterError';\n this.code = code;\n this.details = details;\n Object.defineProperty(this, SVG_CONVERTER_ERROR_BRAND, {\n value: true,\n });\n }\n}\n\nObject.defineProperty(SVGConverterError, Symbol.hasInstance, {\n value: isSVGConverterErrorLike,\n});\n\nfunction extractInternalCode (error: unknown): string | undefined {\n if (error == null || typeof error !== 'object') {\n return undefined;\n }\n\n const code = (error as { code?: unknown }).code;\n\n return typeof code === 'string' ? code : undefined;\n}\n\nfunction mapInternalCodeToConverterCode (internalCode: string): SVGConverterErrorCode | undefined {\n if (isSVGConverterErrorCode(internalCode)) {\n return internalCode;\n }\n\n if (internalCode.startsWith('IR_PROJECTION_')) {\n return SVG_CONVERTER_ERROR_CODES.IR_VALIDATION_FAILED;\n }\n\n if (internalCode.startsWith('IR_')) {\n return SVG_CONVERTER_ERROR_CODES.IR_VALIDATION_FAILED;\n }\n\n return undefined;\n}\n\nfunction mapSemanticDetailsFromInternalCode (internalCode: string): Record<string, unknown> {\n if (internalCode.startsWith('IR_PROJECTION_')) {\n return { projectionErrorCode: internalCode };\n }\n\n if (internalCode.startsWith('IR_')) {\n return { validationCode: internalCode };\n }\n\n return {};\n}\n\n/**\n * 将任意异常标准化为 {@link SVGConverterError},并尽量保留内部错误码与上下文。\n */\nexport function normalizeToConverterError (\n error: unknown,\n fallbackCode: SVGConverterErrorCode,\n fallbackMessage: string,\n details?: Record<string, unknown>,\n): SVGConverterError {\n if (error instanceof SVGConverterError) {\n if (details == null || Object.keys(details).length === 0) {\n return error;\n }\n\n return new SVGConverterError(\n error.code,\n error.message,\n {\n ...(error.details ?? {}),\n ...details,\n },\n );\n }\n\n const internalCode = extractInternalCode(error);\n const mappedCode = internalCode != null\n ? mapInternalCodeToConverterCode(internalCode) ?? fallbackCode\n : fallbackCode;\n const message = error instanceof Error && error.message !== ''\n ? error.message\n : fallbackMessage;\n\n const normalizedDetails: Record<string, unknown> = {\n ...(details ?? {}),\n ...(internalCode != null ? { internalErrorCode: internalCode } : {}),\n ...(internalCode != null ? mapSemanticDetailsFromInternalCode(internalCode) : {}),\n ...(error instanceof Error ? { cause: error.message } : { cause: String(error) }),\n };\n\n return new SVGConverterError(mappedCode, message, normalizedDetails);\n}\n","function _array_like_to_array(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\nexport { _array_like_to_array as _ };\n","import { _ as _array_like_to_array } from \"./_array_like_to_array.js\";\n\nfunction _unsupported_iterable_to_array(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _array_like_to_array(o, minLen);\n\n var n = Object.prototype.toString.call(o).slice(8, -1);\n\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(n);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);\n}\nexport { _unsupported_iterable_to_array as _ };\n","import { _ as _unsupported_iterable_to_array } from \"./_unsupported_iterable_to_array.js\";\n\nfunction _create_for_of_iterator_helper_loose(o, allowArrayLike) {\n var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"];\n\n if (it) return (it = it.call(o)).next.bind(it);\n // Fallback for engines without symbol support\n if (Array.isArray(o) || (it = _unsupported_iterable_to_array(o)) || allowArrayLike && o && typeof o.length === \"number\") {\n if (it) o = it;\n\n var i = 0;\n\n return function() {\n if (i >= o.length) return { done: true };\n\n return { done: false, value: o[i++] };\n };\n }\n\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nexport { _create_for_of_iterator_helper_loose as _ };\n","export const CSS_NAMED_COLORS = new Map<string, readonly [number, number, number]>([\n ['aliceblue', [240, 248, 255]],\n ['antiquewhite', [250, 235, 215]],\n ['aqua', [0, 255, 255]],\n ['aquamarine', [127, 255, 212]],\n ['azure', [240, 255, 255]],\n ['beige', [245, 245, 220]],\n ['bisque', [255, 228, 196]],\n ['black', [0, 0, 0]],\n ['blanchedalmond', [255, 235, 205]],\n ['blue', [0, 0, 255]],\n ['blueviolet', [138, 43, 226]],\n ['brown', [165, 42, 42]],\n ['burlywood', [222, 184, 135]],\n ['cadetblue', [95, 158, 160]],\n ['chartreuse', [127, 255, 0]],\n ['chocolate', [210, 105, 30]],\n ['coral', [255, 127, 80]],\n ['cornflowerblue', [100, 149, 237]],\n ['cornsilk', [255, 248, 220]],\n ['crimson', [220, 20, 60]],\n ['cyan', [0, 255, 255]],\n ['darkblue', [0, 0, 139]],\n ['darkcyan', [0, 139, 139]],\n ['darkgoldenrod', [184, 134, 11]],\n ['darkgray', [169, 169, 169]],\n ['darkgreen', [0, 100, 0]],\n ['darkgrey', [169, 169, 169]],\n ['darkkhaki', [189, 183, 107]],\n ['darkmagenta', [139, 0, 139]],\n ['darkolivegreen', [85, 107, 47]],\n ['darkorange', [255, 140, 0]],\n ['darkorchid', [153, 50, 204]],\n ['darkred', [139, 0, 0]],\n ['darksalmon', [233, 150, 122]],\n ['darkseagreen', [143, 188, 143]],\n ['darkslateblue', [72, 61, 139]],\n ['darkslategray', [47, 79, 79]],\n ['darkslategrey', [47, 79, 79]],\n ['darkturquoise', [0, 206, 209]],\n ['darkviolet', [148, 0, 211]],\n ['deeppink', [255, 20, 147]],\n ['deepskyblue', [0, 191, 255]],\n ['dimgray', [105, 105, 105]],\n ['dimgrey', [105, 105, 105]],\n ['dodgerblue', [30, 144, 255]],\n ['firebrick', [178, 34, 34]],\n ['floralwhite', [255, 250, 240]],\n ['forestgreen', [34, 139, 34]],\n ['fuchsia', [255, 0, 255]],\n ['gainsboro', [220, 220, 220]],\n ['ghostwhite', [248, 248, 255]],\n ['gold', [255, 215, 0]],\n ['goldenrod', [218, 165, 32]],\n ['gray', [128, 128, 128]],\n ['green', [0, 128, 0]],\n ['greenyellow', [173, 255, 47]],\n ['grey', [128, 128, 128]],\n ['honeydew', [240, 255, 240]],\n ['hotpink', [255, 105, 180]],\n ['indianred', [205, 92, 92]],\n ['indigo', [75, 0, 130]],\n ['ivory', [255, 255, 240]],\n ['khaki', [240, 230, 140]],\n ['lavender', [230, 230, 250]],\n ['lavenderblush', [255, 240, 245]],\n ['lawngreen', [124, 252, 0]],\n ['lemonchiffon', [255, 250, 205]],\n ['lightblue', [173, 216, 230]],\n ['lightcoral', [240, 128, 128]],\n ['lightcyan', [224, 255, 255]],\n ['lightgoldenrodyellow', [250, 250, 210]],\n ['lightgray', [211, 211, 211]],\n ['lightgreen', [144, 238, 144]],\n ['lightgrey', [211, 211, 211]],\n ['lightpink', [255, 182, 193]],\n ['lightsalmon', [255, 160, 122]],\n ['lightseagreen', [32, 178, 170]],\n ['lightskyblue', [135, 206, 250]],\n ['lightslategray', [119, 136, 153]],\n ['lightslategrey', [119, 136, 153]],\n ['lightsteelblue', [176, 196, 222]],\n ['lightyellow', [255, 255, 224]],\n ['lime', [0, 255, 0]],\n ['limegreen', [50, 205, 50]],\n ['linen', [250, 240, 230]],\n ['magenta', [255, 0, 255]],\n ['maroon', [128, 0, 0]],\n ['mediumaquamarine', [102, 205, 170]],\n ['mediumblue', [0, 0, 205]],\n ['mediumorchid', [186, 85, 211]],\n ['mediumpurple', [147, 112, 219]],\n ['mediumseagreen', [60, 179, 113]],\n ['mediumslateblue', [123, 104, 238]],\n ['mediumspringgreen', [0, 250, 154]],\n ['mediumturquoise', [72, 209, 204]],\n ['mediumvioletred', [199, 21, 133]],\n ['midnightblue', [25, 25, 112]],\n ['mintcream', [245, 255, 250]],\n ['mistyrose', [255, 228, 225]],\n ['moccasin', [255, 228, 181]],\n ['navajowhite', [255, 222, 173]],\n ['navy', [0, 0, 128]],\n ['oldlace', [253, 245, 230]],\n ['olive', [128, 128, 0]],\n ['olivedrab', [107, 142, 35]],\n ['orange', [255, 165, 0]],\n ['orangered', [255, 69, 0]],\n ['orchid', [218, 112, 214]],\n ['palegoldenrod', [238, 232, 170]],\n ['palegreen', [152, 251, 152]],\n ['paleturquoise', [175, 238, 238]],\n ['palevioletred', [219, 112, 147]],\n ['papayawhip', [255, 239, 213]],\n ['peachpuff', [255, 218, 185]],\n ['peru', [205, 133, 63]],\n ['pink', [255, 192, 203]],\n ['plum', [221, 160, 221]],\n ['powderblue', [176, 224, 230]],\n ['purple', [128, 0, 128]],\n ['rebeccapurple', [102, 51, 153]],\n ['red', [255, 0, 0]],\n ['rosybrown', [188, 143, 143]],\n ['royalblue', [65, 105, 225]],\n ['saddlebrown', [139, 69, 19]],\n ['salmon', [250, 128, 114]],\n ['sandybrown', [244, 164, 96]],\n ['seagreen', [46, 139, 87]],\n ['seashell', [255, 245, 238]],\n ['sienna', [160, 82, 45]],\n ['silver', [192, 192, 192]],\n ['skyblue', [135, 206, 235]],\n ['slateblue', [106, 90, 205]],\n ['slategray', [112, 128, 144]],\n ['slategrey', [112, 128, 144]],\n ['snow', [255, 250, 250]],\n ['springgreen', [0, 255, 127]],\n ['steelblue', [70, 130, 180]],\n ['tan', [210, 180, 140]],\n ['teal', [0, 128, 128]],\n ['thistle', [216, 191, 216]],\n ['tomato', [255, 99, 71]],\n ['turquoise', [64, 224, 208]],\n ['violet', [238, 130, 238]],\n ['wheat', [245, 222, 179]],\n ['white', [255, 255, 255]],\n ['whitesmoke', [245, 245, 245]],\n ['yellow', [255, 255, 0]],\n ['yellowgreen', [154, 205, 50]],\n]);\n","/** SVG/CSS 颜色串 → IRColor [r,g,b,a] 0-1。 */\nimport type { IRColor } from '@vvfx/animation-ir';\nimport { CSS_NAMED_COLORS } from './css-named-colors';\n\nexport function mapSVGColorToIRColor(c: string | null | undefined, opacity = 1): IRColor | null {\n if (c == null) { return null; }\n const raw = String(c).trim().toLowerCase();\n\n if (raw === '' || raw === 'none') { return null; }\n if (raw === 'transparent') { return [0, 0, 0, 0]; }\n const hex = parseHexColor(raw);\n\n if (hex != null) { return withOpacity(hex, opacity); }\n const rgb = parseRGBColor(raw);\n\n if (rgb != null) { return withOpacity(rgb, opacity); }\n const hsl = parseHSLColor(raw);\n\n if (hsl != null) { return withOpacity(hsl, opacity); }\n const named = CSS_NAMED_COLORS.get(raw);\n\n if (named != null) {\n return [named[0] / 255, named[1] / 255, named[2] / 255, clamp01(opacity)];\n }\n\n return [0, 0, 0, clamp01(opacity)];\n}\n\nfunction parseHexColor(raw: string): IRColor | null {\n const match = raw.match(/^#([0-9a-f]{3,8})$/);\n\n if (match == null || ![3, 4, 6, 8].includes(match[1].length)) { return null; }\n const hex = match[1];\n const expanded = hex.length <= 4\n ? [...hex].map(char => `${char}${char}`).join('')\n : hex;\n const r = parseInt(expanded.slice(0, 2), 16) / 255;\n const g = parseInt(expanded.slice(2, 4), 16) / 255;\n const b = parseInt(expanded.slice(4, 6), 16) / 255;\n const a = expanded.length === 8 ? parseInt(expanded.slice(6, 8), 16) / 255 : 1;\n\n return [r, g, b, a];\n}\n\nfunction parseRGBColor(raw: string): IRColor | null {\n const match = raw.match(/^rgba?\\((.*)\\)$/);\n\n if (match == null) { return null; }\n const { components, alpha } = splitFunctionalColor(match[1]);\n\n if (components.length !== 3) { return null; }\n const values = components.map(parseRGBComponent);\n\n if (values.some(value => value == null)) { return null; }\n const parsedAlpha = parseAlpha(alpha);\n\n if (parsedAlpha == null) { return null; }\n\n return [values[0]!, values[1]!, values[2]!, parsedAlpha];\n}\n\nfunction parseHSLColor(raw: string): IRColor | null {\n const match = raw.match(/^hsla?\\((.*)\\)$/);\n\n if (match == null) { return null; }\n const { components, alpha } = splitFunctionalColor(match[1]);\n\n if (components.length !== 3) { return null; }\n const hue = parseHue(components[0]);\n const saturation = parsePercentage(components[1]);\n const lightness = parsePercentage(components[2]);\n const parsedAlpha = parseAlpha(alpha);\n\n if (hue == null || saturation == null || lightness == null || parsedAlpha == null) { return null; }\n const chroma = (1 - Math.abs(2 * lightness - 1)) * saturation;\n const hueSector = hue / 60;\n const intermediate = chroma * (1 - Math.abs(hueSector % 2 - 1));\n let r = 0;\n let g = 0;\n let b = 0;\n\n if (hueSector < 1) { r = chroma; g = intermediate; } else if (hueSector < 2) { r = intermediate; g = chroma; } else if (hueSector < 3) { g = chroma; b = intermediate; } else if (hueSector < 4) { g = intermediate; b = chroma; } else if (hueSector < 5) { r = intermediate; b = chroma; } else { r = chroma; b = intermediate; }\n const offset = lightness - chroma / 2;\n\n return [r + offset, g + offset, b + offset, parsedAlpha];\n}\n\nfunction splitFunctionalColor(body: string): { components: string[]; alpha?: string } {\n const slashParts = body.trim().split('/');\n const colorPart = slashParts[0].trim();\n let alpha = slashParts[1]?.trim();\n let components = colorPart.includes(',')\n ? colorPart.split(',').map(part => part.trim())\n : colorPart.split(/\\s+/).filter(Boolean);\n\n if (colorPart.includes(',') && components.length === 4 && alpha == null) {\n alpha = components[3];\n components = components.slice(0, 3);\n }\n\n return { components, alpha };\n}\n\nfunction parseRGBComponent(value: string): number | null {\n if (value.endsWith('%')) {\n const percentage = Number(value.slice(0, -1));\n\n return Number.isFinite(percentage) ? clamp01(percentage / 100) : null;\n }\n const component = Number(value);\n\n return Number.isFinite(component) ? clamp01(component / 255) : null;\n}\n\nfunction parseAlpha(value: string | undefined): number | null {\n if (value == null || value === '') { return 1; }\n if (value.endsWith('%')) {\n const percentage = Number(value.slice(0, -1));\n\n return Number.isFinite(percentage) ? clamp01(percentage / 100) : null;\n }\n const alpha = Number(value);\n\n return Number.isFinite(alpha) ? clamp01(alpha) : null;\n}\n\nfunction parseHue(value: string): number | null {\n const match = value.trim().match(/^([-+]?(?:\\d+(?:\\.\\d*)?|\\.\\d+))(deg|grad|rad|turn)?$/);\n\n if (match == null) { return null; }\n const raw = Number(match[1]);\n\n if (!Number.isFinite(raw)) { return null; }\n const degrees = match[2] === 'turn' ? raw * 360\n : match[2] === 'rad' ? raw * 180 / Math.PI\n : match[2] === 'grad' ? raw * 0.9\n : raw;\n\n return (degrees % 360 + 360) % 360;\n}\n\nfunction parsePercentage(value: string): number | null {\n const match = value.trim().match(/^([-+]?(?:\\d+(?:\\.\\d*)?|\\.\\d+))%$/);\n\n if (match == null) { return null; }\n const percentage = Number(match[1]);\n\n return Number.isFinite(percentage) ? clamp01(percentage / 100) : null;\n}\n\nfunction withOpacity(color: IRColor, opacity: number): IRColor {\n return [color[0], color[1], color[2], clamp01(color[3] * opacity)];\n}\n\nfunction clamp01(value: number): number {\n return Math.max(0, Math.min(1, value));\n}\n","import type { IRAnimatedProperty, IRBezierHandle, IRVec3 } from '@vvfx/animation-ir';\nimport type { SVGMatrix } from '../../matrix';\n\nexport interface SMILSample {\n time: number;\n value: number[];\n cycle: number;\n sourceIndex: number;\n /**\n * fractional active interval 结束位置的合成样本 metadata。\n * 该值已经按 authored simple-time 计算,不能作为普通 keyframe 再次应用 spline 缓动。\n */\n activeEndSegment?: {\n cycleStartTime: number;\n segmentIndex: number;\n startTime: number;\n endTime: number;\n startValue: number[];\n endValue: number[];\n };\n}\n\nexport interface SMILInterval {\n begin: number;\n end: number;\n sampleStart: number;\n sampleEnd: number;\n}\n\n/** 解析后的 active SMIL interval,已展开有限 repeat。 */\nexport interface SMILAnimation {\n attributeName: string;\n type: string;\n begin: number;\n end: number;\n fill: 'remove' | 'freeze';\n additive: 'replace' | 'sum';\n byOnly: boolean;\n indefinite: boolean;\n calcMode: 'linear' | 'discrete' | 'spline' | 'paced';\n keySplines: IRBezierHandle[][];\n samples: SMILSample[];\n intervals: SMILInterval[];\n}\n\nexport interface TransformContext {\n ancestorMatrix: SVGMatrix;\n selfMatrix: SVGMatrix;\n localCenter: [number, number];\n ancestorStopNode?: globalThis.Element | null;\n preserveAncestorTransforms?: boolean;\n geometry?: GeometryContext;\n geometryScaleSink?: { value?: IRAnimatedProperty<IRVec3> };\n comparisonDuration?: number;\n /** 将文本 paint alpha 与图层 opacity 分离,并在图层轨道上合成各级 authored opacity。 */\n composeOpacityAcrossStages?: boolean;\n}\n\nexport interface GeometryContext {\n kind: 'rect' | 'circle' | 'ellipse' | 'line' | 'use';\n base: Record<string, number>;\n referenceWidth: number;\n referenceHeight: number;\n}\n\nexport interface GeometryAnimation {\n animations: SMILAnimation[];\n matrixAtTime: (time: number) => SVGMatrix;\n scaleAtTime: (time: number) => { x: number; y: number };\n}\n\nexport interface GeometrySample {\n centerX: number;\n centerY: number;\n scaleX: number;\n scaleY: number;\n}\n\nexport interface TransformStage {\n node: globalThis.Element;\n staticMatrix: SVGMatrix;\n animations: SMILAnimation[];\n motions: MotionAnimation[];\n geometry?: GeometryAnimation;\n ignoreOpacity?: boolean;\n}\n\nexport interface MotionPathSegment {\n p0: [number, number];\n p1: [number, number];\n p2: [number, number];\n p3: [number, number];\n length: number;\n samples: Array<{ t: number; length: number }>;\n}\n\nexport interface MotionPath {\n segments: MotionPathSegment[];\n totalLength: number;\n vertexProgress: number[];\n}\n\nexport interface MotionAnimation {\n begin: number;\n end: number;\n simpleDuration: number;\n activeDuration: number;\n fill: 'remove' | 'freeze';\n additive: 'replace' | 'sum';\n indefinite: boolean;\n calcMode: SMILAnimation['calcMode'];\n keySplines: IRBezierHandle[][];\n keyTimes: number[];\n keyPoints: number[];\n usesKeyPoints: boolean;\n path: MotionPath;\n pointValues?: Array<[number, number]>;\n rotate: 'auto' | 'auto-reverse' | number;\n}\n\nexport const EPSILON = 1e-9;\nexport const BEGIN_TIME_EPSILON = 1e-7;\nexport const LINEAR_OUT_TANGENT: IRBezierHandle = { x: 1 / 3, y: 1 / 3 };\nexport const LINEAR_IN_TANGENT: IRBezierHandle = { x: 2 / 3, y: 2 / 3 };\nexport const MAX_SYNCBASE_EVENTS = 10000;\n\nexport type BeginTimeCache = Map<globalThis.Element, number[]>;\n\nexport interface SyncbaseDependency {\n source: globalThis.Element;\n target: globalThis.Element;\n event: 'begin' | 'end';\n offset: number;\n}\n\nexport type SMILValueParser = (value: string, type: string) => number[] | null;\n","/**\n * SMIL begin/end、repeat 和 syncbase 时间调度。\n *\n * 本模块不负责动画值插值,只负责确定动画何时开始、结束以及哪些 interval 需要展开。\n */\nimport {\n BEGIN_TIME_EPSILON, EPSILON, MAX_SYNCBASE_EVENTS,\n type BeginTimeCache, type SyncbaseDependency,\n} from './types';\n\nexport function parseClockValue (raw: string): number | null {\n const value = raw.trim();\n\n if (value === '') { return 0; }\n const clock = value.match(/^(?:(\\d+):)?(\\d+):(\\d+(?:\\.\\d+)?)$/);\n\n if (clock != null) {\n return Number(clock[1] ?? 0) * 3600 + Number(clock[2]) * 60 + Number(clock[3]);\n }\n const scalar = value.match(/^([-+]?\\d*\\.?\\d+(?:[eE][-+]?\\d+)?)\\s*(ms|s|min|h)?$/i);\n\n if (scalar == null) { return null; }\n const number = Number(scalar[1]);\n const unit = scalar[2]?.toLowerCase() ?? 's';\n\n if (unit === 'ms') { return number / 1000; }\n if (unit === 'min') { return number * 60; }\n if (unit === 'h') { return number * 3600; }\n\n return number;\n}\n\nexport function activeDuration (tag: globalThis.Element): number {\n const duration = parseClockValue(tag.getAttribute('dur') ?? '') ?? 0;\n\n if (duration <= 0) { return 0; }\n const repeatRaw = (tag.getAttribute('repeatCount') ?? '').trim().toLowerCase();\n const repeatDurationRaw = tag.getAttribute('repeatDur');\n const repeatDuration = repeatDurationRaw == null ? null : parseClockValue(repeatDurationRaw);\n let repeated = duration;\n\n if (repeatRaw === 'indefinite') {\n // 对无界动画取一个完整周期;存在 repeatDur 时使用它作为有限边界。\n repeated = repeatDuration != null && repeatDuration > 0 ? repeatDuration : duration;\n } else if (repeatRaw !== '') {\n const count = Number(repeatRaw);\n\n repeated = Number.isFinite(count) && count >= 0 ? duration * count : duration;\n } else if (repeatDuration != null) {\n // repeatDur 可以单独定义 active duration,不要求同时存在 repeatCount。\n // Chrome 会重复 simple duration,直到达到该边界。\n repeated = repeatDuration;\n }\n if (repeatDuration != null) {\n repeated = Math.min(repeated, repeatDuration);\n }\n\n return repeated;\n}\n\nexport function findAnimationById (root: globalThis.Element, id: string): globalThis.Element | null {\n for (const candidate of Array.from(root.querySelectorAll('[id]'))) {\n if (candidate.getAttribute('id') === id) { return candidate; }\n }\n\n return null;\n}\n\nfunction animationTags (root: globalThis.Element): globalThis.Element[] {\n return Array.from(root.querySelectorAll('animate,animateColor,animateTransform,animateMotion,set'));\n}\n\nconst initialBeginTimeCaches = new WeakMap<object, BeginTimeCache>();\nconst windowedBeginTimeCaches = new WeakMap<object, Map<number, BeginTimeCache>>();\n\nexport function getBeginTimeCache (root: globalThis.Element, comparisonDuration?: number): BeginTimeCache {\n if (comparisonDuration == null || comparisonDuration <= 0) {\n const cached = initialBeginTimeCaches.get(root);\n\n if (cached != null) { return cached; }\n const cache: BeginTimeCache = new Map();\n\n initialBeginTimeCaches.set(root, cache);\n\n return cache;\n }\n let caches = windowedBeginTimeCaches.get(root);\n\n if (caches == null) {\n caches = new Map();\n windowedBeginTimeCaches.set(root, caches);\n }\n const cached = caches.get(comparisonDuration);\n\n if (cached != null) { return cached; }\n const cache: BeginTimeCache = new Map();\n\n caches.set(comparisonDuration, cache);\n\n return cache;\n}\n\nfunction parseBeginSpecifiers (\n tag: globalThis.Element,\n root: globalThis.Element,\n): { absolute: number[]; dependencies: SyncbaseDependency[] } {\n const absolute: number[] = [];\n const dependencies: SyncbaseDependency[] = [];\n\n for (const candidateRaw of (tag.getAttribute('begin') ?? '0').split(';')) {\n const candidate = candidateRaw.trim();\n const absoluteTime = parseClockValue(candidate);\n\n if (absoluteTime != null) {\n absolute.push(absoluteTime);\n continue;\n }\n const syncbase = candidate.match(/^(.+?)\\.(begin|end)\\s*([+-]\\s*.+)?$/i);\n\n if (syncbase == null) { continue; }\n const source = findAnimationById(root, syncbase[1]);\n const offset = syncbase[3] == null ? 0 : parseClockValue(syncbase[3].replace(/\\s+/g, ''));\n\n if (source == null || offset == null) { continue; }\n dependencies.push({\n source,\n target: tag,\n event: syncbase[2].toLowerCase() as 'begin' | 'end',\n offset,\n });\n }\n\n return { absolute, dependencies };\n}\n\nfunction addBeginTime (times: number[], time: number): boolean {\n if (!Number.isFinite(time) || times.some(candidate => Math.abs(candidate - time) < BEGIN_TIME_EPSILON)) {\n return false;\n }\n times.push(time);\n times.sort((a, b) => a - b);\n\n return true;\n}\n\n/**\n * 计算每个动画的初始 interval,用于确定 composition duration。\n */\nfunction buildInitialBeginSchedule (root: globalThis.Element, cache: BeginTimeCache): void {\n const tags = animationTags(root);\n const specs = new Map(tags.map(tag => [tag, parseBeginSpecifiers(tag, root)]));\n\n for (const tag of tags) {\n const absolute = specs.get(tag)?.absolute ?? [];\n\n cache.set(tag, absolute.length > 0 ? [Math.min(...absolute)] : []);\n }\n\n for (let iteration = 0; iteration < Math.max(1, tags.length * 4); iteration++) {\n let changed = false;\n\n for (const tag of tags) {\n for (const dependency of specs.get(tag)?.dependencies ?? []) {\n const sourceBegin = cache.get(dependency.source)?.[0];\n\n if (sourceBegin == null) { continue; }\n const candidate = sourceBegin\n + (dependency.event === 'end' ? activeDuration(dependency.source) : 0)\n + dependency.offset;\n const current = cache.get(tag)?.[0];\n\n if (current == null || candidate < current - BEGIN_TIME_EPSILON) {\n cache.set(tag, [candidate]);\n changed = true;\n }\n }\n }\n if (!changed) { break; }\n }\n}\n\n/**\n * 在有限时间窗口内展开 begin/end syncbase 事件。\n */\nfunction buildWindowedBeginSchedule (\n root: globalThis.Element,\n cache: BeginTimeCache,\n comparisonDuration: number,\n): void {\n const tags = animationTags(root);\n const dependents = new Map<globalThis.Element, SyncbaseDependency[]>();\n const maxActiveDuration = tags.reduce((max, tag) => Math.max(max, activeDuration(tag)), 0);\n const lowerBound = -Math.max(1, comparisonDuration, maxActiveDuration);\n const queue: Array<{ tag: globalThis.Element; time: number }> = [];\n\n for (const tag of tags) {\n cache.set(tag, []);\n const specifiers = parseBeginSpecifiers(tag, root);\n\n for (const dependency of specifiers.dependencies) {\n const list = dependents.get(dependency.source) ?? [];\n\n list.push(dependency);\n dependents.set(dependency.source, list);\n }\n for (const time of specifiers.absolute) {\n if (time < lowerBound - BEGIN_TIME_EPSILON || time > comparisonDuration + BEGIN_TIME_EPSILON) { continue; }\n if (addBeginTime(cache.get(tag)!, time)) { queue.push({ tag, time }); }\n }\n }\n\n let cursor = 0;\n\n while (cursor < queue.length && queue.length < MAX_SYNCBASE_EVENTS) {\n const event = queue[cursor++];\n\n for (const dependency of dependents.get(event.tag) ?? []) {\n const candidate = event.time\n + (dependency.event === 'end' ? activeDuration(event.tag) : 0)\n + dependency.offset;\n\n if (candidate < lowerBound - BEGIN_TIME_EPSILON || candidate > comparisonDuration + BEGIN_TIME_EPSILON) {\n continue;\n }\n const targetTimes = cache.get(dependency.target);\n\n if (targetTimes != null && addBeginTime(targetTimes, candidate)) {\n queue.push({ tag: dependency.target, time: candidate });\n }\n }\n }\n}\n\nexport function resolveBeginTimes (\n tag: globalThis.Element,\n root: globalThis.Element,\n cache: BeginTimeCache,\n comparisonDuration?: number,\n): number[] {\n if (!cache.has(tag)) {\n if (comparisonDuration != null && comparisonDuration > 0) {\n buildWindowedBeginSchedule(root, cache, comparisonDuration);\n } else {\n buildInitialBeginSchedule(root, cache);\n }\n }\n\n return cache.get(tag) ?? [];\n}\n\nexport function resolveBegin (\n tag: globalThis.Element,\n root: globalThis.Element,\n cache: BeginTimeCache,\n): number | null {\n return resolveBeginTimes(tag, root, cache)[0] ?? null;\n}\nexport function comparisonEnd (tag: globalThis.Element, begin: number): number {\n const duration = parseClockValue(tag.getAttribute('dur') ?? '') ?? 0;\n const indefinite = (tag.getAttribute('repeatCount') ?? '').trim().toLowerCase() === 'indefinite';\n const durationMissing = (tag.getAttribute('dur') ?? '').trim() === '';\n const singleValue = (tag.getAttribute('values') ?? '')\n .split(';')\n .filter(value => value.trim() !== '')\n .length === 1;\n\n if (durationMissing && (tag.tagName.toLowerCase() === 'set' || singleValue)) {\n return Math.max(0, begin);\n }\n if (duration <= 0) { return 0; }\n if (indefinite && tag.getAttribute('repeatDur') == null) {\n // 比较一个完整周期。负 begin 表示相位偏移,不应缩短比较窗口。\n return Math.max(duration, begin + duration, 0);\n }\n\n return Math.max(0, begin + activeDuration(tag));\n}\nexport function buildAnimationWindows (\n tag: globalThis.Element,\n beginTimes: number[],\n totalDuration: number,\n comparisonDuration?: number,\n): Array<{ begin: number; end: number }> {\n const restart = (tag.getAttribute('restart') ?? 'always').trim().toLowerCase();\n const indefinite = (tag.getAttribute('repeatCount') ?? '').trim().toLowerCase() === 'indefinite'\n && tag.getAttribute('repeatDur') == null;\n const acceptedBegins: number[] = [];\n let previousEnd = -Infinity;\n\n for (const begin of beginTimes.slice().sort((a, b) => a - b)) {\n if (restart === 'never' && acceptedBegins.length > 0) { break; }\n if (restart === 'whennotactive' && begin < previousEnd - EPSILON) { continue; }\n acceptedBegins.push(begin);\n previousEnd = indefinite && comparisonDuration != null ? comparisonDuration : begin + totalDuration;\n }\n\n const windows: Array<{ begin: number; end: number }> = [];\n const fill = (tag.getAttribute('fill') ?? '').trim().toLowerCase();\n\n for (let index = 0; index < acceptedBegins.length; index++) {\n const begin = acceptedBegins[index];\n const naturalEnd = indefinite && comparisonDuration != null\n ? comparisonDuration\n : begin + totalDuration;\n const restartedAt = restart === 'always' ? acceptedBegins[index + 1] : undefined;\n let end = restartedAt == null ? naturalEnd : Math.min(naturalEnd, restartedAt);\n\n if (comparisonDuration != null) { end = Math.min(end, comparisonDuration); }\n if (end <= 0 && fill !== 'freeze') { continue; }\n if (begin >= end - EPSILON && !(end === 0 && fill === 'freeze')) { continue; }\n\n windows.push({ begin, end });\n }\n\n return windows;\n}\n","/**\n * SMIL 数值、曲线和采样处理。\n *\n * 本模块不解析 begin/end 事件,只负责动画值的解释、插值和时间窗口内采样。\n */\nimport { mapSVGColorToIRColor } from '../../map-color';\nimport type { IRBezierHandle } from '@vvfx/animation-ir';\nimport { EPSILON, type SMILAnimation, type SMILSample, type SMILValueParser } from './types';\n\nexport function parseNumberList (value: string): number[] {\n return (value.match(/[-+]?\\d*\\.?\\d+(?:[eE][-+]?\\d+)?/g) ?? []).map(Number);\n}\n\nfunction parseRotateValue (value: string): number[] {\n const p = parseNumberList(value);\n\n return [p[0] ?? 0, p[1] ?? 0, p[2] ?? 0];\n}\n\nfunction parseTranslateValue (value: string): number[] {\n const p = parseNumberList(value);\n\n return [p[0] ?? 0, p[1] ?? 0];\n}\n\nfunction parseScaleValue (value: string): number[] {\n const p = parseNumberList(value);\n const sx = p[0] ?? 1;\n\n return [sx, p[1] ?? sx];\n}\n\nexport function parseValue (value: string, type: string): number[] {\n if (type === 'rotate') { return parseRotateValue(value); }\n if (type === 'translate') { return parseTranslateValue(value); }\n if (type === 'scale') { return parseScaleValue(value); }\n\n return [Number(value.trim()) || 0];\n}\n\nexport function parseColorValue (value: string): number[] | null {\n const color = mapSVGColorToIRColor(value, 1);\n\n return color == null ? null : color;\n}\n\nexport function parsePointValue (value: string): [number, number] {\n const points = parseNumberList(value);\n\n return [points[0] ?? 0, points[1] ?? 0];\n}\nexport function parseKeySplines (tag: globalThis.Element, segmentCount: number): IRBezierHandle[][] {\n const raw = tag.getAttribute('keySplines') ?? '';\n const splines = raw.split(';').map(segment => parseNumberList(segment)).filter(values => values.length >= 4);\n\n if (splines.length !== segmentCount) { return []; }\n\n return splines.map(values => [\n { x: values[0], y: values[1] },\n { x: values[2], y: values[3] },\n ]);\n}\n\nfunction trimTrailingEmptyValues (values: string[]): string[] {\n let end = values.length;\n\n while (end > 0 && values[end - 1].trim() === '') {\n end--;\n }\n\n return values.slice(0, end);\n}\n\n/** 根据相邻值的数值距离计算 paced 动画的时间节点,忽略 authored keyTimes。 */\nexport function parsePacedKeyTimes (values: number[][]): number[] {\n if (values.length <= 1) { return values.map(() => 0); }\n const distances = values.slice(1).map((value, index) => {\n const previous = values[index] ?? [];\n const length = Math.max(previous.length, value.length);\n let squared = 0;\n\n for (let component = 0; component < length; component++) {\n const delta = (value[component] ?? 0) - (previous[component] ?? 0);\n\n squared += delta * delta;\n }\n\n return Math.sqrt(squared);\n });\n const totalDistance = distances.reduce((sum, distance) => sum + distance, 0);\n\n if (totalDistance <= EPSILON) {\n return values.map((_, index) => index / (values.length - 1));\n }\n const keyTimes = [0];\n let distance = 0;\n\n for (const segmentDistance of distances) {\n distance += segmentDistance;\n keyTimes.push(distance / totalDistance);\n }\n\n return keyTimes;\n}\n\nexport function parseValues (\n tag: globalThis.Element,\n type: string,\n valueParser: SMILValueParser = parseValue,\n underlyingValue?: number[],\n): number[][] {\n const parseAll = (rawValues: string[]): number[][] => {\n const parsed = rawValues.map(value => valueParser(value, type));\n\n return parsed.some(value => value == null) ? [] : parsed as number[][];\n };\n const valuesRaw = tag.getAttribute('values');\n\n if (valuesRaw != null && valuesRaw.trim() !== '') {\n return parseAll(trimTrailingEmptyValues(valuesRaw.split(';')));\n }\n const from = tag.getAttribute('from');\n const to = tag.getAttribute('to');\n\n if (from != null && to != null) {\n return parseAll([from, to]);\n }\n if (from != null && tag.getAttribute('by') != null) {\n const parsedFrom = valueParser(from, type);\n const parsedBy = valueParser(tag.getAttribute('by')!, type);\n\n if (parsedFrom == null || parsedBy == null) { return []; }\n\n return [parsedFrom, parsedFrom.map((value, index) => value + (parsedBy[index] ?? 0))];\n }\n if (to != null && underlyingValue != null) {\n const parsedTo = valueParser(to, type);\n\n return parsedTo == null ? [] : [underlyingValue, parsedTo];\n }\n const by = tag.getAttribute('by');\n\n if (by != null) {\n const delta = valueParser(by, type);\n\n if (delta == null) { return []; }\n const zero = delta.map(() => 0);\n\n return [zero, delta];\n }\n\n return [];\n}\n\nexport function valuesEqual (a: number[], b: number[]): boolean {\n return a.length === b.length && a.every((value, index) => Math.abs(value - b[index]) < EPSILON);\n}\n\nexport function interpolateValues (from: number[], to: number[], ratio: number): number[] {\n return from.map((value, index) => value + ((to[index] ?? value) - value) * ratio);\n}\n\nfunction cubicBezierCoordinate (t: number, p1: number, p2: number): number {\n const inv = 1 - t;\n\n return 3 * inv * inv * t * p1 + 3 * inv * t * t * p2 + t * t * t;\n}\n\nexport function cubicBezierRatio (ratio: number, handles: IRBezierHandle[]): number {\n const [outHandle, inHandle] = handles;\n\n if (outHandle == null || inHandle == null) { return ratio; }\n let low = 0;\n let high = 1;\n\n for (let i = 0; i < 16; i++) {\n const mid = (low + high) / 2;\n const x = cubicBezierCoordinate(mid, outHandle.x, inHandle.x);\n\n if (x < ratio) { low = mid; } else { high = mid; }\n }\n\n return cubicBezierCoordinate((low + high) / 2, outHandle.y, inHandle.y);\n}\nexport function splitCubicAtRatio (\n ratio: number,\n handles: IRBezierHandle[],\n): { out: IRBezierHandle; in: IRBezierHandle } {\n const [outHandle, inHandle] = handles;\n const target = Math.max(0, Math.min(1, ratio));\n\n if (outHandle == null || inHandle == null || target <= EPSILON || target >= 1 - EPSILON) {\n return {\n out: outHandle ?? { x: 0.33, y: 0.33 },\n in: inHandle ?? { x: 0.67, y: 0.67 },\n };\n }\n\n// 查找 x 坐标等于 authored-time ratio 的 Bezier 参数。\n let low = 0;\n let high = 1;\n\n for (let iteration = 0; iteration < 32; iteration++) {\n const parameter = (low + high) / 2;\n\n if (cubicBezierCoordinate(parameter, outHandle.x, inHandle.x) < target) {\n low = parameter;\n } else {\n high = parameter;\n }\n }\n\n const parameter = (low + high) / 2;\n const p0 = { x: 0, y: 0 };\n const p1 = { x: outHandle.x, y: outHandle.y };\n const p2 = { x: inHandle.x, y: inHandle.y };\n const p3 = { x: 1, y: 1 };\n const lerpPoint = (a: { x: number; y: number }, b: { x: number; y: number }) => ({\n x: a.x + (b.x - a.x) * parameter,\n y: a.y + (b.y - a.y) * parameter,\n });\n const q1 = lerpPoint(p0, p1);\n const r1 = lerpPoint(p1, p2);\n const r2 = lerpPoint(p2, p3);\n const q2 = lerpPoint(q1, r1);\n const s1 = lerpPoint(r1, r2);\n const q3 = lerpPoint(q2, s1);\n\n return {\n out: {\n x: q3.x <= EPSILON ? 0 : q1.x / q3.x,\n y: q3.y <= EPSILON ? 0 : q1.y / q3.y,\n },\n in: {\n x: q3.x <= EPSILON ? 1 : q2.x / q3.x,\n y: q3.y <= EPSILON ? 1 : q2.y / q3.y,\n },\n };\n}\n\nexport function sampleExpandedValue (\n samples: SMILSample[],\n time: number,\n calcMode: SMILAnimation['calcMode'],\n keySplines: IRBezierHandle[][],\n): SMILSample | null {\n let previous: SMILSample | null = null;\n let next: SMILSample | null = null;\n\n for (const sample of samples) {\n if (sample.time <= time + EPSILON) {\n previous = sample;\n } else {\n next = sample;\n\n break;\n }\n }\n if (previous == null) { return null; }\n if (next == null || next.time <= previous.time + EPSILON || calcMode === 'discrete') {\n return { ...previous, time };\n }\n let ratio = Math.max(0, Math.min(1, (time - previous.time) / (next.time - previous.time)));\n\n if (calcMode === 'spline' && previous.cycle === next.cycle) {\n const activeEndSegment = next.activeEndSegment;\n\n if (activeEndSegment != null) {\n const authoredTime = Math.max(\n activeEndSegment.startTime,\n Math.min(activeEndSegment.endTime, time - activeEndSegment.cycleStartTime),\n );\n const authoredSpan = activeEndSegment.endTime - activeEndSegment.startTime;\n\n ratio = authoredSpan <= EPSILON\n ? 0\n : (authoredTime - activeEndSegment.startTime) / authoredSpan;\n ratio = Math.max(0, Math.min(1, ratio));\n const handles = keySplines[activeEndSegment.segmentIndex];\n\n if (handles != null) { ratio = cubicBezierRatio(ratio, handles); }\n\n return {\n time,\n value: interpolateValues(activeEndSegment.startValue, activeEndSegment.endValue, ratio),\n cycle: previous.cycle,\n sourceIndex: activeEndSegment.segmentIndex,\n };\n }\n\n const handles = keySplines[previous.sourceIndex];\n\n if (handles != null) { ratio = cubicBezierRatio(ratio, handles); }\n }\n\n return {\n time,\n value: interpolateValues(previous.value, next.value, ratio),\n cycle: previous.cycle,\n sourceIndex: previous.sourceIndex,\n };\n}\n\nexport function clipSamplesToComparisonWindow (\n samples: SMILSample[],\n end: number,\n calcMode: SMILAnimation['calcMode'],\n keySplines: IRBezierHandle[][],\n fill: SMILAnimation['fill'],\n): SMILSample[] {\n const clipped = samples.filter(sample => sample.time > EPSILON && sample.time <= end + EPSILON);\n const atZero = sampleExpandedValue(samples, 0, calcMode, keySplines)\n ?? (fill === 'freeze' && samples.length > 0 && samples[samples.length - 1].time < 0\n ? { ...samples[samples.length - 1], time: 0 }\n : null);\n\n if (atZero != null) { clipped.unshift(atZero); }\n\n return clipped;\n}\nexport function expandSamples (\n values: number[][],\n keyTimes: number[],\n begin: number,\n duration: number,\n totalDuration: number,\n accumulate: boolean,\n calcMode: SMILAnimation['calcMode'] = 'linear',\n keySplines: IRBezierHandle[][] = [],\n): SMILSample[] {\n const samples: SMILSample[] = [];\n const cycleCount = Math.max(1, Math.ceil(totalDuration / duration - EPSILON));\n const accumulatedValue = values[values.length - 1];\n\n for (let cycle = 0; cycle < cycleCount; cycle++) {\n const elapsedBeforeCycle = cycle * duration;\n const remaining = Math.min(duration, totalDuration - elapsedBeforeCycle);\n\n if (remaining < -EPSILON) { break; }\n for (let i = 0; i < values.length; i++) {\n const localTime = keyTimes[i] * duration;\n\n if (localTime > remaining + EPSILON) { break; }\n const value = values[i].map((component, componentIndex) => (\n accumulate ? component + (accumulatedValue[componentIndex] ?? 0) * cycle : component\n ));\n const sample: SMILSample = { time: begin + elapsedBeforeCycle + localTime, value, cycle, sourceIndex: i };\n const previous = samples[samples.length - 1];\n\n if (previous != null && Math.abs(previous.time - sample.time) < EPSILON && valuesEqual(previous.value, sample.value)) {\n // 一个周期的结束也是下一个周期的开始。保留一个 keyframe,并让其 outgoing easing metadata 归属于新周期。\n samples[samples.length - 1] = sample;\n } else {\n samples.push(sample);\n }\n }\n\n // 小数 repeatCount/repeatDur 可能在声明的 keyTimes 之间结束,\n // 应加入精确的 active-end 值,而不是拉伸最后一个完整周期。\n if (remaining < duration - EPSILON) {\n const normalized = remaining / duration;\n let segment = Math.max(0, keyTimes.findIndex(time => time > normalized) - 1);\n\n if (segment < 0) { segment = keyTimes.length - 2; }\n segment = Math.min(segment, keyTimes.length - 2);\n const span = keyTimes[segment + 1] - keyTimes[segment];\n let ratio = span <= EPSILON ? 0 : (normalized - keyTimes[segment]) / span;\n\n ratio = Math.max(0, Math.min(1, ratio));\n if (calcMode === 'spline') {\n const handles = keySplines[segment];\n\n if (handles != null) { ratio = cubicBezierRatio(ratio, handles); }\n } else if (calcMode === 'discrete') {\n ratio = 0;\n }\n const startValue = values[segment].map((component, componentIndex) => (\n accumulate ? component + (accumulatedValue[componentIndex] ?? 0) * cycle : component\n ));\n const endValue = values[segment + 1].map((component, componentIndex) => (\n accumulate ? component + (accumulatedValue[componentIndex] ?? 0) * cycle : component\n ));\n const value = interpolateValues(startValue, endValue, ratio);\n\n samples.push({\n time: begin + totalDuration,\n value,\n cycle,\n sourceIndex: segment + 1,\n activeEndSegment: {\n cycleStartTime: begin + elapsedBeforeCycle,\n segmentIndex: segment,\n startTime: keyTimes[segment] * duration,\n endTime: keyTimes[segment + 1] * duration,\n startValue,\n endValue,\n },\n });\n }\n }\n\n return samples;\n}\n","/** SVG SMIL 动画解析入口。 */\nimport { activeDuration, buildAnimationWindows, parseClockValue, resolveBeginTimes } from './timeline-schedule';\nimport { clipSamplesToComparisonWindow, expandSamples, parseKeySplines, parsePacedKeyTimes, parseValue, parseValues } from './timeline-values';\nimport type { BeginTimeCache, SMILAnimation, SMILInterval, SMILSample, SMILValueParser } from './types';\n\nexport {\n cubicBezierRatio,\n interpolateValues,\n parseColorValue,\n parseNumberList,\n parsePointValue,\n parseKeySplines,\n parseValue,\n sampleExpandedValue,\n splitCubicAtRatio,\n valuesEqual,\n} from './timeline-values';\nexport {\n activeDuration,\n comparisonEnd,\n findAnimationById,\n parseClockValue,\n resolveBegin,\n resolveBeginTimes,\n} from './timeline-schedule';\n\nfunction parseSetValues (\n tag: globalThis.Element,\n type: string,\n valueParser: SMILValueParser,\n): number[][] {\n const to = tag.getAttribute('to');\n\n if (to == null) { return []; }\n const value = valueParser(to, type);\n\n return value == null ? [] : [value, value];\n}\n\nexport function parseSMILTag (\n tag: globalThis.Element,\n root: globalThis.Element,\n beginCache: BeginTimeCache,\n comparisonDuration?: number,\n valueParser: SMILValueParser = parseValue,\n underlyingValue?: number[],\n): SMILAnimation | null {\n const tagName = tag.tagName.toLowerCase();\n const transformType = (tag.getAttribute('type') ?? '').toLowerCase();\n const attributeName = (tag.getAttribute('attributeName') ?? '').toLowerCase();\n const type = tagName === 'animatetransform' ? transformType : attributeName;\n const rawDuration = tag.getAttribute('dur');\n const durationMissing = rawDuration == null || rawDuration.trim() === '';\n const parsedDuration = parseClockValue(rawDuration ?? '') ?? 0;\n\n if (type === '') { return null; }\n const values = tagName === 'set'\n ? parseSetValues(tag, type, valueParser)\n : parseValues(tag, type, valueParser, underlyingValue);\n const singleValue = tagName !== 'set' && values.length === 1;\n const noDurationEvent = (tagName === 'set' || singleValue) && durationMissing;\n const byOnly = tag.getAttribute('by') != null\n && tag.getAttribute('values') == null\n && tag.getAttribute('from') == null\n && tag.getAttribute('to') == null;\n const explicitAdditive = (tag.getAttribute('additive') ?? '').trim().toLowerCase();\n const additive = explicitAdditive === 'sum' || (byOnly && explicitAdditive !== 'replace') ? 'sum' : 'replace';\n const animationValues = singleValue ? [values[0], values[0]] : values;\n const duration = noDurationEvent ? 1 : parsedDuration;\n const totalDuration = noDurationEvent ? 0 : activeDuration(tag);\n\n if ((!noDurationEvent && (duration <= 0 || totalDuration <= 0)) || animationValues.length < 2) { return null; }\n const calcModeRaw = (tag.getAttribute('calcMode') ?? 'linear').toLowerCase();\n const isDiscreteAttribute = type === 'display' || type === 'visibility';\n let calcMode: SMILAnimation['calcMode'];\n\n if (tagName === 'set' || isDiscreteAttribute) {\n calcMode = 'discrete';\n } else if (singleValue) {\n calcMode = 'linear';\n } else {\n calcMode = (['linear', 'discrete', 'spline', 'paced'].includes(calcModeRaw)\n ? calcModeRaw\n : 'linear') as SMILAnimation['calcMode'];\n }\n const keyTimesRaw = tag.getAttribute('keyTimes');\n let keyTimes: number[];\n\n if (tagName === 'set' || singleValue) {\n keyTimes = [0, 1];\n } else if (calcMode === 'paced') {\n keyTimes = parsePacedKeyTimes(animationValues);\n } else if (keyTimesRaw == null) {\n // SMIL discrete 模式未指定 keyTimes 时,将 simple duration 均分为 N 个 value 槽位;\n // 插值模式把首尾 value 放在 0 和 1。\n keyTimes = animationValues.map((_, index) => calcMode === 'discrete'\n ? index / animationValues.length\n : index / (animationValues.length - 1));\n } else {\n keyTimes = keyTimesRaw.split(';').map(Number);\n }\n\n if (keyTimes.length !== animationValues.length || keyTimes.some(time => !Number.isFinite(time))) {\n keyTimes = animationValues.map((_, index) => index / (animationValues.length - 1));\n }\n const beginTimes = resolveBeginTimes(tag, root, beginCache, comparisonDuration);\n\n if (beginTimes.length === 0) { return null; }\n const indefinite = noDurationEvent || (tag.getAttribute('repeatCount') ?? '').trim().toLowerCase() === 'indefinite';\n const fill = noDurationEvent || (tag.getAttribute('fill') ?? '').trim().toLowerCase() === 'freeze'\n ? 'freeze'\n : 'remove';\n const keySplines = parseKeySplines(tag, animationValues.length - 1);\n const samples: SMILSample[] = [];\n const intervals: SMILInterval[] = [];\n let cycleOffset = 0;\n\n if (noDurationEvent) {\n for (const begin of beginTimes) {\n const intervalBegin = Math.max(0, begin);\n const intervalEnd = comparisonDuration == null ? intervalBegin : Math.max(intervalBegin, comparisonDuration);\n const sampleStart = samples.length;\n\n samples.push({ time: intervalBegin, value: animationValues[0], cycle: 0, sourceIndex: 0 });\n intervals.push({\n begin: intervalBegin,\n end: intervalEnd,\n sampleStart,\n sampleEnd: samples.length,\n });\n }\n } else {\n const windows = buildAnimationWindows(tag, beginTimes, totalDuration, comparisonDuration);\n\n for (const window of windows) {\n const expanded = expandSamples(\n animationValues,\n keyTimes,\n window.begin,\n duration,\n Math.max(0, window.end - window.begin),\n (tag.getAttribute('accumulate') ?? '').toLowerCase() === 'sum',\n calcMode,\n keySplines,\n ).map(sample => ({ ...sample, cycle: sample.cycle + cycleOffset }));\n const clipped = clipSamplesToComparisonWindow(expanded, window.end, calcMode, keySplines, fill);\n const sampleStart = samples.length;\n\n samples.push(...clipped);\n intervals.push({\n begin: Math.max(0, window.begin),\n end: Math.max(0, window.end),\n sampleStart,\n sampleEnd: samples.length,\n });\n cycleOffset += Math.max(1, ...expanded.map(sample => sample.cycle - cycleOffset + 1));\n }\n }\n\n if (samples.length === 0 || intervals.length === 0) { return null; }\n const begin = Math.min(...intervals.map(interval => interval.begin));\n const end = Math.max(...intervals.map(interval => interval.end));\n\n return {\n attributeName,\n type,\n begin,\n end,\n fill,\n additive,\n byOnly,\n indefinite,\n calcMode,\n keySplines,\n samples,\n intervals,\n };\n}\n","/** SVG SMIL 动画时长扫描入口(animation 活跃区间 → composition/layer 时长)。 */\nimport { comparisonEnd, resolveBegin } from '../../converter/smil/parse-timeline';\nimport { getBeginTimeCache } from './timeline-schedule';\n\n/** 返回 root 下全部 SMIL 动画的有限比较区间。 */\nexport function getSMILDuration (element: { node?: globalThis.Element | null }): number {\n const node = element.node;\n\n if (node == null) { return 0; }\n const root = ((node as globalThis.SVGElement).ownerSVGElement ?? node) as globalThis.Element;\n const beginCache = getBeginTimeCache(root);\n let maxEnd = 0;\n\n for (const animation of Array.from(node.querySelectorAll('animateTransform,animate,animateColor,animateMotion,set'))) {\n const begin = resolveBegin(animation, root, beginCache);\n\n if (begin != null) { maxEnd = Math.max(maxEnd, comparisonEnd(animation, begin)); }\n }\n\n return maxEnd;\n}\n","import type { IRScene } from '@vvfx/animation-ir';\n\n/** SVG 字符串。convertSVGToIR 的输入。 */\nexport type SVGSource = string;\n\n/** SVG → Animation IR 转换选项。 */\nexport interface ConvertOptions {\n /** 画布帧率,决定 IR 帧时间。默认 30。 */\n frameRate?: number;\n /** 静态 SVG 的展示时长(秒)。动态 SVG 可由 SMIL active interval 覆盖。默认 5。 */\n durationSeconds?: number;\n /** 输出 IR composition 的画布底色;未传时保持透明。支持 SVG 颜色字符串。 */\n backgroundColor?: string | null;\n /** true 时遇到无法表达的元素中断转换;false(默认)记录 warning 并继续。 */\n strict?: boolean;\n /** warning 回调:每条 warning 会先进入 ConvertResult.warnings,再通知调用方。 */\n onWarning?: (warning: SVG2IRWarning) => void;\n /** 可选的文本测量回调,用于改进 SVG 文本几何的 IR bounds。 */\n measureText?: (fontDesc: string, text: string) => {\n width: number;\n fontBoundingBoxAscent?: number;\n fontBoundingBoxDescent?: number;\n actualBoundingBoxAscent?: number;\n hangingBaseline?: number;\n };\n /** SVG 来源的绝对 URL,用于把相对图片 href 解析为规范化 IR Asset URL。 */\n resourceBaseUrl?: string;\n /** 图片 intrinsic(自然)尺寸表,url→{width,height}。用于算 <image> 默认 preserveAspectRatio=\"xMidYMid meet\"\n * 的 fitted 几何框(svg2ir 不下载图、Node/svgdom 无 HTMLImageElement,自己拿不到自然尺寸)。浏览器调用方通常\n * 走 inlineSvgImages 给 <image> 盖 data-natural-w/h(优先于此表);Node 调用方读 PNG/JPEG 文件头建此表\n * 传入。两者都无时,meet 使用 full-fit 拉伸。key 用 <image> href 原值(xlink:href/href/dataURI)。 */\n imageNaturalSizes?: Map<string, { width: number; height: number }>;\n}\n\n/** SVG 转换产出。 */\nexport interface ConvertResult {\n /** SVG 解析后的完整 IRScene。 */\n ir: IRScene;\n /** 转换过程丢弃/降级的特性列表。 */\n warnings: SVG2IRWarning[];\n}\n\n/** 转换过程中产生的 warning(可丢降级特性,非致命)。 */\nexport interface SVG2IRWarning {\n code: SVG2IRWarningCode;\n message: string;\n /** 触发元素在 SVG 里的定位提示(id/tag/索引等)。 */\n elementSelector?: string;\n}\n\n/** SVG 转换诊断码。不支持的特性按降级和 warning 处理。 */\nexport const SVG2IR_WARNING_CODES = {\n LAYERS_UNSUPPORTED_TYPE: 'svg2ge_layers_unsupported_type',\n LAYERS_UNSUPPORTED_FEATURE: 'svg2ge_layers_unsupported_feature',\n LAYERS_INVALID_DATA: 'svg2ge_layers_invalid_data',\n LAYERS_TEXT_STYLE_DROPPED: 'svg2ge_layers_text_style_dropped',\n LAYERS_TEXT_BOUNDS_ESTIMATED: 'svg2ge_layers_text_bounds_estimated',\n /** 元素整体不渲染也不映射(无法展开的 use、foreignObject、switch 等不支持元素)。 */\n ELEMENT_DROPPED: 'svg2ir_element_dropped',\n /** stroke-dasharray/dashoffset 无法完整写入当前 IR,按可表达子集处理。 */\n STROKE_DASH_DROPPED: 'svg2ir_stroke_dash_dropped',\n /** SVG filter(feGaussianBlur 等)没有对应 IR 字段。 */\n FILTER_DROPPED: 'svg2ir_filter_dropped',\n /** pattern 平铺填充没有对应 IR paint。 */\n PATTERN_DROPPED: 'svg2ir_pattern_dropped',\n /** skewX/skewY 没有对应 IR transform 通道。 */\n SKEW_DROPPED: 'svg2ir_skew_dropped',\n /** IRTextContent 只有单色文本填充,渐变文字按中点色处理。 */\n TEXT_GRADIENT_FILL_FLATTENED: 'svg2ir_text_gradient_fill_flattened',\n /** IRTextContent 没有文本描边字段。 */\n TEXT_STROKE_DROPPED: 'svg2ir_text_stroke_dropped',\n /** IRTextContent 没有 text-decoration 字段。 */\n TEXT_DECORATION_DROPPED: 'svg2ir_text_decoration_dropped',\n /** Effects adapter 未获得调用方提供的字体文件,运行时可能使用 fallback。 */\n TEXT_FONT_NOT_SUPPLIED: 'svg2ir_text_font_not_supplied',\n /** ge-ir 导出阶段报告了规范化或保真降级。 */\n GE_EXPORT_DIAGNOSTIC: 'svg2ir_ge_export_diagnostic',\n /** clipPathUnits=objectBoundingBox:裁剪实现只接受 userSpaceOnUse。 */\n CLIP_PATH_UNITS_DROPPED: 'svg2ir_clip_path_units_dropped',\n /** clipPath 内显式 clip-rule/fill-rule 没有对应 IR mask 规则字段。 */\n CLIP_RULE_DROPPED: 'svg2ir_clip_rule_dropped',\n /** <g clip-path> 组级裁剪:当前仅支持元素级 clip-path 与组级 mask。 */\n GROUP_CLIP_PATH_DROPPED: 'svg2ir_group_clip_path_dropped',\n /** maskContentUnits=objectBoundingBox:mask 几何只接受 userSpaceOnUse。 */\n MASK_CONTENT_UNITS_DROPPED: 'svg2ir_mask_content_units_dropped',\n /** maskUnits / x/y/width/height 没有对应 IR mask region 字段。 */\n MASK_REGION_DROPPED: 'svg2ir_mask_region_dropped',\n /** mask-type=luminance/alpha:当前 IR mask 不保留该模式。 */\n MASK_TYPE_DROPPED: 'svg2ir_mask_type_dropped',\n} as const;\n\nexport type SVG2IRWarningCode = (typeof SVG2IR_WARNING_CODES)[keyof typeof SVG2IR_WARNING_CODES];\n","/**\n * 收集转换 warning;严格模式下将 warning 转为转换错误。\n */\nimport { SVGConverterError, SVG_CONVERTER_ERROR_CODES } from '../../../common/errors';\nimport type { SVG2IRWarning, SVG2IRWarningCode } from '../../../common/types';\n\nexport function collectWarning (\n emit: (w: SVG2IRWarning) => void,\n code: SVG2IRWarningCode,\n message: string,\n elementSelector: string | undefined,\n strict: boolean | undefined,\n): void {\n if (strict === true) {\n throw new SVGConverterError(SVG_CONVERTER_ERROR_CODES.PARSE_FAIL, message, {\n warningCode: code,\n elementSelector,\n });\n }\n emit({ code, message, elementSelector });\n}\n\n/** 元素定位提示:tag#id 或 tag:nth。供 warning 的 elementSelector 用。 */\nexport function describeElement (el: { node?: Element | null }): string | undefined {\n const node = (el).node;\n\n if (node == null) { return undefined; }\n const tag = node.tagName?.toLowerCase() ?? 'element';\n const id = node.getAttribute?.('id');\n\n return id != null && id !== '' ? `${tag}#${id}` : tag;\n}\n","/**\n * SVG transform matrix 累乘 + 点变换(嵌套 g 父子 transform 用)。\n *\n * SVG 规范:子元素最终变换 = 父 g transform × 子自身 transform(矩阵左乘)。\n * svg2ir 用 find('*') 平铺遍历,丢失 DOM 嵌套继承。这里算祖先结构容器的累计 matrix,\n * 应用到子元素的 position/scale(rectify 坐标)。比建 null parent 层轻(IR 直接烘焙世界变换,避免额外重建 DOM 父子层级)。\n *\n * matrix(a,b,c,d,e,f): [a c e; b d f; 0 0 1]。点 变换后:(a*x+c*y+e, b*x+d*y+f)。\n */\nexport interface SVGMatrix { a: number; b: number; c: number; d: number; e: number; f: number }\n\ninterface SVGAncestorNode {\n tagName?: string;\n getAttribute?: (name: string) => string | null;\n parentNode?: SVGAncestorNode | null;\n}\n\nfunction getSVGAncestorNode (node: unknown): SVGAncestorNode | undefined {\n return node != null && typeof node === 'object' ? node : undefined;\n}\n\nexport const IDENTITY: SVGMatrix = { a: 1, b: 0, c: 0, d: 1, e: 0, f: 0 };\n\n/** 解析 `matrix(a b c d e f)`、`translate(x y)`、`scale(s)`、`rotate(d)` 为 SVGMatrix。 */\nexport function parseTransform (transform: string): SVGMatrix {\n const s = transform.trim();\n\n if (s === '') { return IDENTITY; }\n // 多个 transform 函数串联:左乘累加(后一个 premultiply)。如 \"translate(10,0) scale(2)\"。\n const fns = s.match(/(matrix|translate|scale|rotate|skewX|skewY)\\s*\\([^)]*\\)/gi) ?? [];\n\n let m = IDENTITY;\n\n // SVG transform 列表按规范组合为 M = T1 × T2 × ... × Tn;从左到右进行 postmultiply。\n for (const fn of fns) {\n const fm = parseSingleTransform(fn);\n\n m = multiply(m, fm);\n }\n\n return m;\n}\n\nfunction parseSingleTransform (fn: string): SVGMatrix {\n const m = fn.match(/^(\\w+)\\s*\\(([^)]*)\\)$/i);\n\n if (m == null) { return IDENTITY; }\n const op = m[1].toLowerCase();\n const nums = (m[2].match(/-?\\d*\\.?\\d+(?:[eE][-+]?\\d+)?/g) ?? []).map(Number);\n\n switch (op) {\n case 'matrix': {\n if (nums.length < 6) { return IDENTITY; }\n\n return { a: nums[0], b: nums[1], c: nums[2], d: nums[3], e: nums[4], f: nums[5] };\n }\n case 'translate': {\n const tx = nums[0] ?? 0;\n const ty = nums[1] ?? 0;\n\n return { a: 1, b: 0, c: 0, d: 1, e: tx, f: ty };\n }\n case 'scale': {\n const sx = nums[0] ?? 1;\n const sy = nums[1] ?? sx;\n\n return { a: sx, b: 0, c: 0, d: sy, e: 0, f: 0 };\n }\n case 'rotate': {\n const deg = nums[0] ?? 0;\n const rad = deg * Math.PI / 180;\n const cos = Math.cos(rad);\n const sin = Math.sin(rad);\n const cx = nums[1];\n const cy = nums[2];\n\n if (cx == null || cy == null) {\n return { a: cos, b: sin, c: -sin, d: cos, e: 0, f: 0 };\n }\n\n // SVG rotate(angle cx cy) = T(cx,cy) × R(angle) × T(-cx,-cy)。\n return {\n a: cos,\n b: sin,\n c: -sin,\n d: cos,\n e: cx - cos * cx + sin * cy,\n f: cy - sin * cx - cos * cy,\n };\n }\n case 'skewx': {\n const rad = (nums[0] ?? 0) * Math.PI / 180;\n\n return { a: 1, b: 0, c: Math.tan(rad), d: 1, e: 0, f: 0 };\n }\n case 'skewy': {\n const rad = (nums[0] ?? 0) * Math.PI / 180;\n\n return { a: 1, b: Math.tan(rad), c: 0, d: 1, e: 0, f: 0 };\n }\n default: return IDENTITY;\n }\n}\n\n/** 矩阵乘法 result = a × b(矩阵乘,用于 transform 累乘)。 */\nexport function multiply (a: SVGMatrix, b: SVGMatrix): SVGMatrix {\n return {\n a: a.a * b.a + a.c * b.b,\n b: a.b * b.a + a.d * b.b,\n c: a.a * b.c + a.c * b.d,\n d: a.b * b.c + a.d * b.d,\n e: a.a * b.e + a.c * b.f + a.e,\n f: a.b * b.e + a.d * b.f + a.f,\n };\n}\n\n/** 用矩阵变换点 → (a*x+c*y+e, b*x+d*y+f)。 */\nexport function transformPoint (m: SVGMatrix, x: number, y: number): { x: number; y: number } {\n return {\n x: m.a * x + m.c * y + m.e,\n y: m.b * x + m.d * y + m.f,\n };\n}\n\n/** 2D affine 矩阵 {a,b,c,d,e,f}([a c e; b d f; 0 0 1])求逆。det=ad-bc,不可逆(退化)返回 IDENTITY。\n * 用于把\"经 transform 的世界坐标点\"映回 transform 前的局部坐标(rotation/scale/translate 都正确处理)。 */\nexport function invertSVGMatrix (m: SVGMatrix): SVGMatrix {\n const det = m.a * m.d - m.b * m.c;\n\n if (Math.abs(det) < 1e-12) { return { ...IDENTITY }; }\n const inv = 1 / det;\n\n return {\n a: m.d * inv,\n b: -m.b * inv,\n c: -m.c * inv,\n d: m.a * inv,\n e: (m.c * m.f - m.d * m.e) * inv,\n f: (m.b * m.e - m.a * m.f) * inv,\n };\n}\n\n/** 把 2×3 矩阵拆成 scale(允许负号表达镜像) + rotation(度)。\n * 假设无 shear(skew 已在转换侧 warn 并丢弃);非均匀缩放由 sx/sy 不同表达。\n * rotation 用度,与 IR transform.rotation.z / IR 坐标约定一致。\n */\nexport function decomposeMatrix (m: { a: number; b: number; c: number; d: number }): { sx: number; sy: number; rotation: number } {\n const sx = Math.hypot(m.a, m.b);\n const rotation = sx === 0 ? 0 : Math.atan2(m.b, m.a) * 180 / Math.PI;\n // signed scaleY = determinant / sx,保留镜像的负号。\n const sy = sx === 0 ? 0 : (m.a * m.d - m.b * m.c) / sx;\n\n return { sx, sy, rotation };\n}\n\n/** 累乘元素及其所有祖先 <g> 的 opacity(遇 svg 停止),模拟 group opacity 对子元素的影响。\n * SVG 中 opacity 在 <g> 上作用于整组合成,但 svg2ir 把组拍平,这里把祖先 opacity\n * 乘到每个子元素,比完全忽略更接近浏览器效果。\n */\nexport function accumulateOpacity (el: { node?: unknown }): number {\n let opacity = 1;\n let node = getSVGAncestorNode(el.node);\n\n // 从父节点开始累乘,不包含元素自身(自身 opacity 由调用方单独读取)。\n node = node?.parentNode ?? undefined;\n\n while (node != null) {\n const op = node.getAttribute?.('opacity');\n\n if (op != null && op !== '') {\n const n = Number(op);\n\n if (Number.isFinite(n)) { opacity *= Math.max(0, Math.min(1, n)); }\n }\n if (node.tagName?.toLowerCase() === 'svg') { break; }\n node = node.parentNode ?? undefined;\n }\n\n return opacity;\n}\n\n/**\n * 累乘元素所有祖先 <g> 的 transform(从自身往上,每层左乘),返回 M_最外×...×M_最内父。\n * 用 DOM getAttribute('transform') 取原始值,绕过 SVG 解析底座的继承(它对自带 transform\n * 的子元素不 inherit g,且多层嵌套只合最内层、外层丢失)。调用方再 × 自身 transform = 完整世界矩阵。\n * 遇 <svg> root 停止。非 g 祖先(如 <svg>/<defs>)跳过(不累乘)。\n */\nexport function accumulateAncestors (el: { node?: unknown }): SVGMatrix {\n let m = IDENTITY;\n let node = getSVGAncestorNode(el.node);\n\n node = node?.parentNode ?? undefined;\n\n while (node != null) {\n const tag = node.tagName?.toLowerCase();\n\n if (tag === 'g' || tag === 'a' || tag === 'switch') {\n const t = node.getAttribute?.('transform');\n\n if (t != null && t !== '') {\n m = multiply(parseTransform(t), m);\n }\n }\n if (tag === 'svg') {\n // SVG 根 viewBox 到 outer viewport 的仿射只在等比缩放且原点为 0 时可直接折叠到 IR transform;\n // 非等比缩放或非零原点保留原坐标语义,避免把 skew 混入 position/scale 分解。\n const vp = buildViewBoxMatrix(node);\n\n if (vp != null) {\n m = multiply(vp, m);\n }\n\n break;\n }\n node = node.parentNode ?? undefined;\n }\n\n return m;\n}\n\n/** 构建 SVG viewBox → 外部 viewport 的仿射矩阵(preserveAspectRatio 支持 meet/slice/none)。 */\nexport function buildViewBoxMatrix(\n node: { getAttribute?: (name: string) => string | null },\n viewport?: { width: number; height: number },\n): SVGMatrix | undefined {\n const rawViewBox = node.getAttribute?.('viewBox') ?? '';\n const viewBox = rawViewBox.trim().split(/[\\s,]+/).map(Number);\n\n if (viewBox.length !== 4 || !viewBox.every(Number.isFinite)) { return undefined; }\n const [minX, minY, viewBoxWidth, viewBoxHeight] = viewBox;\n\n if (viewBoxWidth <= 0 || viewBoxHeight <= 0) { return undefined; }\n const outerWidth = viewport?.width ?? parseViewportLength(node.getAttribute?.('width')) ?? viewBoxWidth;\n const outerHeight = viewport?.height ?? parseViewportLength(node.getAttribute?.('height')) ?? viewBoxHeight;\n\n if (outerWidth <= 0 || outerHeight <= 0) { return undefined; }\n const preserveAspectRatio = (node.getAttribute?.('preserveAspectRatio') ?? '').trim();\n const parts = preserveAspectRatio.split(/\\s+/).filter(part => part !== '' && part.toLowerCase() !== 'defer');\n const alignment = (parts[0] ?? 'xMidYMid').toLowerCase();\n const mode = (parts[1] ?? 'meet').toLowerCase();\n const rawScaleX = outerWidth / viewBoxWidth;\n const rawScaleY = outerHeight / viewBoxHeight;\n\n if (alignment === 'none') {\n return {\n a: rawScaleX, b: 0, c: 0, d: rawScaleY,\n e: -minX * rawScaleX, f: -minY * rawScaleY,\n };\n }\n\n const scale = mode === 'slice'\n ? Math.max(rawScaleX, rawScaleY)\n : Math.min(rawScaleX, rawScaleY);\n const contentWidth = viewBoxWidth * scale;\n const contentHeight = viewBoxHeight * scale;\n const alignX = alignment.includes('xmax') ? 1 : alignment.includes('xmid') ? 0.5 : 0;\n const alignY = alignment.includes('ymax') ? 1 : alignment.includes('ymid') ? 0.5 : 0;\n\n return {\n a: scale, b: 0, c: 0, d: scale,\n e: (outerWidth - contentWidth) * alignX - minX * scale,\n f: (outerHeight - contentHeight) * alignY - minY * scale,\n };\n}\n\nfunction parseViewportLength(value: string | null | undefined): number | undefined {\n const match = value?.trim().match(/^([-+]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[-+]?\\d+)?)(?:px)?$/i);\n const parsed = match == null ? NaN : Number(match[1]);\n\n return Number.isFinite(parsed) ? parsed : undefined;\n}\n","/**\n * SVG 圆弧到三次 Bezier 的转换。\n *\n * path 命令归一化只消费 `arcToCubics`,具体圆弧几何和细分规则集中在这里。\n */\n\nconst TAU = Math.PI * 2;\nconst ARC_EPS = 1e-6;\n\nfunction normalizeAngle (a: number): number {\n a = a % TAU;\n\n if (a < 0) { a += TAU; }\n\n return a;\n}\n\n/** 挑选满足 SVG sweep/largeArc 语义的一段圆弧。\n * sweep 对应“正角方向”(标准 atan2 下角度递增),largeArc 对应弧角≥180°。\n */\nfunction pickCircularArc (\n x0: number, y0: number,\n x1: number, y1: number,\n sweep: boolean, largeArc: boolean,\n c1: { x: number; y: number },\n c2: { x: number; y: number },\n): { cx: number; cy: number; startAngle: number; angleSpan: number } | null {\n for (const c of [c1, c2]) {\n const a0 = Math.atan2(y0 - c.y, x0 - c.x);\n const a1 = Math.atan2(y1 - c.y, x1 - c.x);\n let delta = normalizeAngle(a1 - a0); // [0, 2π)\n const semicircle = Math.abs(delta - Math.PI) < ARC_EPS;\n\n let matches: boolean;\n let span: number;\n\n if (sweep) {\n span = delta;\n matches = semicircle || (delta > Math.PI) === largeArc;\n } else {\n span = delta - TAU; // 负值\n matches = semicircle || ((TAU - delta) > Math.PI) === largeArc;\n }\n\n if (matches) {\n return { cx: c.x, cy: c.y, startAngle: a0, angleSpan: span };\n }\n }\n\n return null;\n}\n\nfunction circularArcSegment (\n cx: number, cy: number, r: number,\n startAngle: number, span: number,\n): number[] {\n const a0 = startAngle;\n const a1 = startAngle + span;\n const cos0 = Math.cos(a0);\n const sin0 = Math.sin(a0);\n const cos1 = Math.cos(a1);\n const sin1 = Math.sin(a1);\n\n const p0x = cx + r * cos0;\n const p0y = cy + r * sin0;\n const p1x = cx + r * cos1;\n const p1y = cy + r * sin1;\n\n // 方向:+1 为正角(CCW 于标准 atan2),-1 为负角(CW)。\n const dir = Math.sign(span) || 1;\n const t0x = -sin0 * dir;\n const t0y = cos0 * dir;\n const t1x = -sin1 * dir;\n const t1y = cos1 * dir;\n\n // 单位圆 90° 弧的控制点系数 k ≈ 0.55228475;任意弧度: (4/3)*tan(|span|/4)。\n const k = (4 / 3) * Math.tan(Math.abs(span) / 4) * r;\n\n return [\n p0x + k * t0x, p0y + k * t0y, // C1\n p1x - k * t1x, p1y - k * t1y, // C2\n p1x, p1y, // 终点\n ];\n}\n\n/** 椭圆弧(轴对齐,xAxisRotation=0)→多段三次贝塞尔。\n * 已正确支持 rx==ry 的圆角矩形/圆形弧(largeArc/sweep 语义完整);\n * 当前无法稳定映射的椭圆弧会退化为直线。\n */\nexport function arcToCubics (\n x0: number,\n y0: number,\n rx: number,\n ry: number,\n x1: number,\n y1: number,\n largeArc: boolean,\n sweep: boolean,\n arcSegmentAngle = Math.PI / 4,\n): number[][] {\n // 仅精确处理圆;退化/椭圆先直线连接(至少不生成错误曲线)。\n if (rx <= ARC_EPS || ry <= ARC_EPS || Math.abs(rx - ry) > ARC_EPS * Math.max(rx, ry, 1)) {\n return [[x0, y0, x1, y1, x1, y1]];\n }\n\n const r = rx;\n const dx = x1 - x0;\n const dy = y1 - y0;\n const d = Math.hypot(dx, dy);\n\n if (d < ARC_EPS || d > 2 * r + ARC_EPS) {\n return [[x0, y0, x1, y1, x1, y1]];\n }\n\n const mx = (x0 + x1) / 2;\n const my = (y0 + y1) / 2;\n const h = Math.sqrt(Math.max(0, r * r - (d / 2) * (d / 2)));\n\n // 弦的单位方向与法向\n const ux = dx / d;\n const uy = dy / d;\n const nx = -uy;\n const ny = ux;\n\n const c1 = { x: mx + h * nx, y: my + h * ny };\n const c2 = { x: mx - h * nx, y: my - h * ny };\n\n const arc = pickCircularArc(x0, y0, x1, y1, sweep, largeArc, c1, c2);\n\n if (arc == null) {\n return [[x0, y0, x1, y1, x1, y1]];\n }\n\n const { cx, cy, startAngle, angleSpan } = arc;\n const absSpan = Math.abs(angleSpan);\n\n if (absSpan < ARC_EPS) {\n return [[x0, y0, x1, y1, x1, y1]];\n }\n\n // 实际渲染在 24×24 小画布上时,90° cubic 的几何误差会被旋转后的像素边界放大。\n // 按 45° 分段,让 SVG 原生 arc 与 Effects custom path 的轮廓更接近。\n const segments: number[][] = [];\n let remaining = absSpan;\n let a = startAngle;\n const sign = Math.sign(angleSpan) || 1;\n\n // mask/path-boundary 只需要 authored arc endpoint 时使用 `Infinity`,不额外引入细分顶点。\n // 普通 shape 转换保留 45° 上限;动态小路径可以请求更细的有限细分角度。\n const segmentAngle = arcSegmentAngle === Infinity\n ? absSpan\n : Number.isFinite(arcSegmentAngle) && arcSegmentAngle > ARC_EPS\n ? Math.min(Math.PI / 4, arcSegmentAngle)\n : Math.PI / 4;\n\n while (remaining > ARC_EPS) {\n const seg = Math.min(remaining, segmentAngle) * sign;\n\n segments.push(circularArcSegment(cx, cy, r, a, seg));\n a += seg;\n remaining -= Math.abs(seg);\n }\n\n return segments;\n}\n","/**\n * SVG path d 命令 → IRBezierPath(顶点切线模型)。\n *\n * 两步处理:(1) tokenize 并升阶到 M/L/C/Z;(2) 按 IR 顶点切线模型填充\n * points/inTangents/outTangents。使用本地 tokenizer,按 SVG 规范命令表解析,不引入额外布局依赖。\n *\n * IR 顶点切线模型:每个顶点 i 携带 inTangents[i]/outTangents[i](相对该顶点的入/出切线偏移)。\n * 段 i→i+1 三次贝塞尔的两个控制点 = points[i]+outTangents[i] 与 points[i+1]+inTangents[i+1]。\n */\nimport type { IRBezierPath } from '@vvfx/animation-ir';\nimport { arcToCubics } from './convert-arc';\n\n/** 规整化后的命令:只剩 M/L/C/Z(绝对坐标)。 */\ntype NormalizedCommand =\n | { cmd: 'M'; x: number; y: number }\n | { cmd: 'L'; x: number; y: number }\n | { cmd: 'C'; x1: number; y1: number; x2: number; y2: number; x: number; y: number }\n | { cmd: 'Z' };\n\nconst COMMAND_LETTERS = 'MLCSQTAHZV';\n\ninterface NormalizePathOptions {\n arcSegmentAngle?: number;\n}\n\n/** tokenize + 相对转绝对 + H/V→L + Q/T/S/A 升阶成 C。M 开头(规整化补 M(0,0) 防 C/L 越界)。 */\nexport function normalizePathCommands (d: string, options: NormalizePathOptions = {}): NormalizedCommand[] {\n const tokens = tokenize(d);\n const out: NormalizedCommand[] = [];\n let curX = 0;\n let curY = 0;\n // SVG 的 `Z` 不会把当前点留在最后一个显式顶点;后续相对命令从子路径起点继续。\n // 单独保存该起点,才能正确处理导出图标中常见的 `M...Z m...Z`。\n let subpathStartX = 0;\n let subpathStartY = 0;\n let lastCtrlQ: { x: number; y: number } | null = null; // 上一 Q/T 的控制点(用于 T 反射)\n let lastCtrlC2: { x: number; y: number } | null = null; // 上一 C/S 的第二控制点(用于 S 反射)\n\n if (tokens.length === 0 || tokens[0].letter !== 'M' && tokens[0].letter !== 'm') {\n // 保证 M 开头,防 C/L 在空点上越界。\n out.push({ cmd: 'M', x: 0, y: 0 });\n }\n\n for (const tok of tokens) {\n const rel = tok.letter === tok.letter.toLowerCase() && tok.letter !== tok.letter.toUpperCase();\n const L = tok.letter.toUpperCase();\n const p = tok.params;\n\n // 一个命令后可以连续跟随多组参数而不重复命令字母(如 `M0 0 10 0 10 10`、`C... ...`)。\n // SVG 将首个 M/m 参数对之后的每组参数视为隐式 L/l。\n if (L === 'Z') {\n out.push({ cmd: 'Z' });\n curX = subpathStartX;\n curY = subpathStartY;\n lastCtrlQ = null;\n lastCtrlC2 = null;\n\n continue;\n }\n\n const arity = PATH_COMMAND_ARITY[L];\n\n if (arity == null) { continue; }\n\n let paramIndex = 0;\n let firstGroup = true;\n\n while (paramIndex + arity <= p.length) {\n const group = p.slice(paramIndex, paramIndex + arity);\n\n paramIndex += arity;\n const command = L === 'M' && !firstGroup ? 'L' : L;\n\n firstGroup = false;\n\n switch (command) {\n case 'M': {\n curX = rel ? curX + group[0] : group[0];\n curY = rel ? curY + group[1] : group[1];\n subpathStartX = curX;\n subpathStartY = curY;\n out.push({ cmd: 'M', x: curX, y: curY });\n lastCtrlQ = null;\n lastCtrlC2 = null;\n\n break;\n }\n case 'L': {\n curX = rel ? curX + group[0] : group[0];\n curY = rel ? curY + group[1] : group[1];\n out.push({ cmd: 'L', x: curX, y: curY });\n lastCtrlQ = null;\n lastCtrlC2 = null;\n\n break;\n }\n case 'H': {\n curX = rel ? curX + group[0] : group[0];\n out.push({ cmd: 'L', x: curX, y: curY });\n lastCtrlQ = null;\n lastCtrlC2 = null;\n\n break;\n }\n case 'V': {\n curY = rel ? curY + group[0] : group[0];\n out.push({ cmd: 'L', x: curX, y: curY });\n lastCtrlQ = null;\n lastCtrlC2 = null;\n\n break;\n }\n case 'C': {\n const x1 = rel ? curX + group[0] : group[0], y1 = rel ? curY + group[1] : group[1];\n const x2 = rel ? curX + group[2] : group[2], y2 = rel ? curY + group[3] : group[3];\n const x = rel ? curX + group[4] : group[4], y = rel ? curY + group[5] : group[5];\n\n out.push({ cmd: 'C', x1, y1, x2, y2, x, y });\n curX = x; curY = y;\n lastCtrlC2 = { x: x2, y: y2 };\n lastCtrlQ = null;\n\n break;\n }\n case 'S': {\n // S: 第一控制点 = 上一 C/S 第二控制点关于当前点反射。\n const reflect: { x: number; y: number } = lastCtrlC2 ?? { x: curX, y: curY };\n const x1 = 2 * curX - reflect.x, y1 = 2 * curY - reflect.y;\n const x2 = rel ? curX + group[0] : group[0], y2 = rel ? curY + group[1] : group[1];\n const x = rel ? curX + group[2] : group[2], y = rel ? curY + group[3] : group[3];\n\n out.push({ cmd: 'C', x1, y1, x2, y2, x, y });\n curX = x; curY = y;\n lastCtrlC2 = { x: x2, y: y2 };\n lastCtrlQ = null;\n\n break;\n }\n case 'Q': {\n const qx1 = rel ? curX + group[0] : group[0], qy1 = rel ? curY + group[1] : group[1];\n const qx2 = rel ? curX + group[2] : group[2], qy2 = rel ? curY + group[3] : group[3];\n // Q → C 升阶:C1 = P0 + 2/3(Q1−P0), C2 = P2 + 2/3(Q1−P2)\n const x1 = curX + (2 / 3) * (qx1 - curX), y1 = curY + (2 / 3) * (qy1 - curY);\n const x2 = qx2 + (2 / 3) * (qx1 - qx2), y2 = qy2 + (2 / 3) * (qy1 - qy2);\n\n out.push({ cmd: 'C', x1, y1, x2, y2, x: qx2, y: qy2 });\n curX = qx2; curY = qy2;\n lastCtrlQ = { x: qx1, y: qy1 };\n lastCtrlC2 = null;\n\n break;\n }\n case 'T': {\n // T: 控制点 = 上一 Q/T 控制点关于当前点反射,升阶成 C。\n const reflect: { x: number; y: number } = lastCtrlQ ?? { x: curX, y: curY };\n const qx1 = 2 * curX - reflect.x, qy1 = 2 * curY - reflect.y;\n const qx2 = rel ? curX + group[0] : group[0], qy2 = rel ? curY + group[1] : group[1];\n const x1 = curX + (2 / 3) * (qx1 - curX), y1 = curY + (2 / 3) * (qy1 - curY);\n const x2 = qx2 + (2 / 3) * (qx1 - qx2), y2 = qy2 + (2 / 3) * (qy1 - qy2);\n\n out.push({ cmd: 'C', x1, y1, x2, y2, x: qx2, y: qy2 });\n curX = qx2; curY = qy2;\n lastCtrlQ = { x: qx1, y: qy1 };\n lastCtrlC2 = null;\n\n break;\n }\n case 'A': {\n // A 椭圆弧 → 多段 C(arc-to-bezier)。本版用最简近似:轴向椭圆、长弧/旋转按角度分段。\n // 旋转角为 0 的圆形或轴对齐椭圆弧可转换;其余复杂 arc 进入降级路径。\n const rx = group[0], ry = group[1];\n const xAxisRotation = group[2], largeArcFlag = group[3], sweepFlag = group[4];\n const x = rel ? curX + group[5] : group[5], y = rel ? curY + group[6] : group[6];\n\n if (xAxisRotation === 0 && rx > 0 && ry > 0) {\n for (const seg of arcToCubics(curX, curY, rx, ry, x, y, !!largeArcFlag, !!sweepFlag, options.arcSegmentAngle)) {\n out.push({ cmd: 'C', x1: seg[0], y1: seg[1], x2: seg[2], y2: seg[3], x: seg[4], y: seg[5] });\n }\n } else {\n // 旋转 arc 或异常半径无法稳定映射时退化为直线。\n out.push({ cmd: 'L', x, y });\n }\n curX = x; curY = y;\n lastCtrlQ = null;\n lastCtrlC2 = null;\n\n break;\n }\n }\n }\n }\n\n return out;\n}\n\nconst PATH_COMMAND_ARITY: Record<string, number> = {\n M: 2,\n L: 2,\n H: 1,\n V: 1,\n C: 6,\n S: 4,\n Q: 4,\n T: 2,\n A: 7,\n};\n\n/** 规整化命令 → IRBezierPath(顶点切线模型,每个 sub-path 一个)。一行 d 多 sub-path 时产多个。 */\nexport function normalizedToCustomShapePaths (cmds: NormalizedCommand[]): IRBezierPath[] {\n const paths: IRBezierPath[] = [];\n let points: Array<{ x: number; y: number }> = [];\n let inTangents: Array<{ x: number; y: number }> = [];\n let outTangents: Array<{ x: number; y: number }> = [];\n let closed = false;\n let hasSubPath = false;\n\n const flush = () => {\n if (hasSubPath && points.length > 0) {\n paths.push({ points, inTangents, outTangents, closed });\n }\n points = []; inTangents = []; outTangents = []; closed = false; hasSubPath = false;\n };\n\n for (const cmd of cmds) {\n switch (cmd.cmd) {\n case 'M':\n flush();\n points.push({ x: cmd.x, y: cmd.y });\n inTangents.push({ x: 0, y: 0 });\n outTangents.push({ x: 0, y: 0 });\n hasSubPath = true;\n\n break;\n case 'L':\n points.push({ x: cmd.x, y: cmd.y });\n inTangents.push({ x: 0, y: 0 });\n outTangents.push({ x: 0, y: 0 });\n if (!hasSubPath) { hasSubPath = true; }\n\n break;\n case 'C': {\n const prevIdx = points.length - 1;\n\n if (prevIdx >= 0) {\n outTangents[prevIdx] = { x: cmd.x1 - points[prevIdx].x, y: cmd.y1 - points[prevIdx].y };\n }\n points.push({ x: cmd.x, y: cmd.y });\n inTangents.push({ x: cmd.x2 - cmd.x, y: cmd.y2 - cmd.y });\n outTangents.push({ x: 0, y: 0 });\n if (!hasSubPath) { hasSubPath = true; }\n\n break;\n }\n case 'Z':\n closed = true;\n flush();\n\n break;\n }\n }\n\n flush();\n\n return paths;\n}\n\n/** tokenize d 串为命令字母 + 参数数组。 */\ninterface Token { letter: string; params: number[] }\n\nfunction tokenize (d: string): Token[] {\n const tokens: Token[] = [];\n const letterRe = new RegExp(`([${COMMAND_LETTERS}${COMMAND_LETTERS.toLowerCase()}])`, 'g');\n const numRe = /-?\\d*\\.?\\d+(?:[eE][-+]?\\d+)?/g;\n let pos = 0;\n let m: RegExpExecArray | null;\n\n while ((m = letterRe.exec(d)) !== null) {\n const letter = m[1];\n const segStart = letterRe.lastIndex;\n const segEnd = d.slice(segStart).search(new RegExp(`[${COMMAND_LETTERS}${COMMAND_LETTERS.toLowerCase()}]`));\n const seg = segEnd === -1 ? d.slice(segStart) : d.slice(segStart, segStart + segEnd);\n const params: number[] = [];\n let nm: RegExpExecArray | null;\n const localRe = new RegExp(numRe);\n\n while ((nm = localRe.exec(seg)) !== null) {\n params.push(parseFloat(nm[0]));\n }\n tokens.push({ letter, params });\n pos = segStart + seg.length;\n }\n\n void pos;\n\n return tokens;\n}\n\nconst ZERO_TANGENT = { x: 0, y: 0 };\n\n/**\n * 将多个闭合 sub-path 缝合成一条 IRBezierPath。\n *\n * Effects 的 ShapeComponent 会把 `shapes` 数组里的每个 shape 独立 triangulate/fill;因此\n * 一个外框 + 一个内框会被渲染成两个实心矩形,中间看不到洞。SVG 的 fill-rule(默认\n * nonzero / evenodd)需要在同一次 triangulation 里把所有 contour 一起处理。Effects 底层的\n * libtess 默认 odd(evenodd),所以 svg2ir 只要在同一个 CustomShape 里把 contour 连\n * 成一个简单多边形,Effects 就会按 odd 规则把内部 contour 当成洞。\n *\n * 这里用“零面积桥接”:把每个 sub-path 的起点复制一次作为闭合边,再用直线桥接到下一个\n * sub-path 的起点;桥接边在 odd 规则下互相抵消,等价于多个独立 contour。只在所有\n * sub-path 都闭合时生效。\n */\nexport function mergeClosedSubpaths (paths: IRBezierPath[]): IRBezierPath[] {\n if (paths.length <= 1 || !paths.every(p => p.closed)) {\n return paths;\n }\n\n // 把面积最大的子路径放到最前面,降低桥接线与图形边界交叉的概率。\n const ordered = [...paths].sort((a, b) => getPathBoundsArea(b) - getPathBoundsArea(a));\n\n const points: Array<{ x: number; y: number }> = [];\n const inTangents: Array<{ x: number; y: number }> = [];\n const outTangents: Array<{ x: number; y: number }> = [];\n\n const addPoint = (\n point: { x: number; y: number },\n inTangent: { x: number; y: number },\n outTangent: { x: number; y: number },\n ) => {\n points.push({ x: point.x, y: point.y });\n inTangents.push({ x: inTangent.x, y: inTangent.y });\n outTangents.push({ x: outTangent.x, y: outTangent.y });\n };\n\n const anchor = ordered[0].points[0];\n\n // 第一个顶点的入切线只用于最终闭合桥接,这里置 0 使桥接边为直线;\n // 外框真正的闭合边由外框起点的副本承载。\n addPoint(anchor, ZERO_TANGENT, ordered[0].outTangents[0]);\n\n for (let i = 0; i < ordered.length; i++) {\n const path = ordered[i];\n\n for (let j = 1; j < path.points.length; j++) {\n addPoint(path.points[j], path.inTangents[j], path.outTangents[j]);\n }\n\n // 复制当前 sub-path 的起点:入切线保留以维持真正的闭合曲线,出切线为 0 用于桥接。\n addPoint(path.points[0], path.inTangents[0], ZERO_TANGENT);\n\n if (i < ordered.length - 1) {\n const next = ordered[i + 1];\n\n // 除第一次外,先回到公共锚点,再桥接到下一个 sub-path 的起点。\n if (i > 0) {\n addPoint(anchor, ZERO_TANGENT, ZERO_TANGENT);\n }\n addPoint(next.points[0], ZERO_TANGENT, next.outTangents[0]);\n }\n }\n\n return [{ points, inTangents, outTangents, closed: true }];\n}\n\nfunction getPathBoundsArea (path: IRBezierPath): number {\n let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;\n\n for (const { x, y } of path.points) {\n minX = Math.min(minX, x);\n minY = Math.min(minY, y);\n maxX = Math.max(maxX, x);\n maxY = Math.max(maxY, y);\n }\n\n return (maxX - minX) * (maxY - minY);\n}\n","import type { IRBezierPath } from '@vvfx/animation-ir';\nimport { parseTransform, transformPoint, type SVGMatrix } from '../../matrix';\nimport { normalizePathCommands, normalizedToCustomShapePaths } from '../../normalize-path';\n\ntype MaskPoint = { x: number; y: number };\n\nexport interface MaskGeometry {\n paths: IRBezierPath[];\n}\n\n/** 把单个 SVG 形状转换为一个或多个独立 mask 轮廓,并保留曲线控制柄。 */\nexport function collectShapeGeometry (\n el: { node: globalThis.Element },\n tag: string,\n geometry: MaskGeometry,\n applyShapeOwnTransform = false,\n): void {\n const paths = buildShapePaths(el, tag);\n\n if (applyShapeOwnTransform) {\n const transform = el.node.getAttribute?.('transform') ?? '';\n\n if (transform !== '') {\n const matrix = parseTransform(transform);\n\n for (const path of paths) {\n transformPathInPlace(matrix, path);\n }\n }\n }\n\n geometry.paths.push(...paths);\n}\n\nfunction buildShapePaths(el: { node: globalThis.Element }, tag: string): IRBezierPath[] {\n switch (tag) {\n case 'rect': {\n const x = attrNum(el, 'x', 0);\n const y = attrNum(el, 'y', 0);\n const width = attrNum(el, 'width', 0);\n const height = attrNum(el, 'height', 0);\n\n return [buildLinearPath([\n { x, y },\n { x: x + width, y },\n { x: x + width, y: y + height },\n { x, y: y + height },\n ])];\n }\n case 'circle':\n case 'ellipse':\n return [buildEllipsePath(el, tag === 'circle')];\n case 'polygon':\n case 'polyline':\n return [buildLinearPath(parseNumPairs(el.node.getAttribute('points') ?? ''))];\n case 'line':\n return [buildLinearPath([\n { x: attrNum(el, 'x1', 0), y: attrNum(el, 'y1', 0) },\n { x: attrNum(el, 'x2', 0), y: attrNum(el, 'y2', 0) },\n ])];\n case 'path':\n return normalizedToCustomShapePaths(normalizePathCommands(el.node.getAttribute('d') ?? '', { arcSegmentAngle: Infinity }))\n .map(path => ({ ...path, closed: true }));\n default:\n return [];\n }\n}\n\nfunction buildLinearPath(points: MaskPoint[]): IRBezierPath {\n return {\n points,\n inTangents: points.map(() => ({ x: 0, y: 0 })),\n outTangents: points.map(() => ({ x: 0, y: 0 })),\n closed: true,\n };\n}\n\nfunction buildEllipsePath(el: { node: globalThis.Element }, isCircle: boolean): IRBezierPath {\n const cx = attrNum(el, 'cx', 0);\n const cy = attrNum(el, 'cy', 0);\n const rx = isCircle ? attrNum(el, 'r', 0) : attrNum(el, 'rx', 0);\n const ry = isCircle ? rx : attrNum(el, 'ry', 0);\n const segments = 8;\n const handleScale = (4 / 3) * Math.tan(Math.PI / (2 * segments));\n const points: MaskPoint[] = [];\n const inTangents: MaskPoint[] = [];\n const outTangents: MaskPoint[] = [];\n\n for (let index = 0; index < segments; index++) {\n const angle = index / segments * Math.PI * 2;\n const tangent = {\n x: -rx * Math.sin(angle) * handleScale,\n y: ry * Math.cos(angle) * handleScale,\n };\n\n points.push({ x: cx + rx * Math.cos(angle), y: cy + ry * Math.sin(angle) });\n inTangents.push({ x: -tangent.x, y: -tangent.y });\n outTangents.push(tangent);\n }\n\n return { points, inTangents, outTangents, closed: true };\n}\n\nfunction transformPathInPlace(matrix: SVGMatrix, path: IRBezierPath): void {\n for (const point of path.points) {\n const transformed = transformPoint(matrix, point.x, point.y);\n\n point.x = transformed.x;\n point.y = transformed.y;\n }\n transformVectorsInPlace(matrix, path.inTangents);\n transformVectorsInPlace(matrix, path.outTangents);\n}\n\nfunction parseNumPairs(s: string): MaskPoint[] {\n const numbers = (s.match(/-?\\d*\\.?\\d+(?:[eE][-+]?\\d+)?/g) ?? []).map(Number);\n const points: MaskPoint[] = [];\n\n for (let index = 0; index + 1 < numbers.length; index += 2) {\n points.push({ x: numbers[index], y: numbers[index + 1] });\n }\n\n return points;\n}\n\nfunction transformVectorsInPlace(matrix: SVGMatrix, vectors: MaskPoint[]): void {\n for (const vector of vectors) {\n const x = matrix.a * vector.x + matrix.c * vector.y;\n const y = matrix.b * vector.x + matrix.d * vector.y;\n\n vector.x = x;\n vector.y = y;\n }\n}\n\nexport function transformVector(matrix: SVGMatrix, vector: MaskPoint): MaskPoint {\n return {\n x: matrix.a * vector.x + matrix.c * vector.y,\n y: matrix.b * vector.x + matrix.d * vector.y,\n };\n}\n\nfunction attrNum(el: { node: globalThis.Element }, attribute: string, fallback: number): number {\n const value = el.node.getAttribute?.(attribute);\n\n if (value == null || value === '') { return fallback; }\n const parsed = Number(value);\n\n return Number.isFinite(parsed) ? parsed : fallback;\n}\n\n// 已建好的 mask 点集合上的覆盖/包含判定:用于决定 mask 是否可跳过(no-op 全覆盖)或落点异常,\n// 与上方\"从形状收集几何\"的构建职责相对。所有函数都是纯几何,不读 DOM、不依赖 IR。\ntype MaskPolygon = Array<{ x: number; y: number }>;\n\n/** 多边形是否为轴对齐矩形(4 个角,边与坐标轴平行)。 */\nexport function isAxisAlignedRect (pts: MaskPolygon, eps = 1e-6): boolean {\n if (pts.length !== 4) { return false; }\n const xs = pts.map(p => p.x);\n const ys = pts.map(p => p.y);\n const uniqueX = new Set(xs.map(x => Math.round(x / eps)));\n const uniqueY = new Set(ys.map(y => Math.round(y / eps)));\n\n return uniqueX.size === 2 && uniqueY.size === 2;\n}\n\nfunction distPointToSegment (\n p: { x: number; y: number },\n a: { x: number; y: number },\n b: { x: number; y: number },\n): number {\n const dx = b.x - a.x;\n const dy = b.y - a.y;\n const len2 = dx * dx + dy * dy;\n\n if (len2 === 0) { return Math.hypot(p.x - a.x, p.y - a.y); }\n let t = ((p.x - a.x) * dx + (p.y - a.y) * dy) / len2;\n\n t = Math.max(0, Math.min(1, t));\n\n return Math.hypot(p.x - (a.x + t * dx), p.y - (a.y + t * dy));\n}\n\n/** 点是否在多边形内(ray casting);边界上的点也算在内。 */\nfunction pointInPolygon (pt: { x: number; y: number }, poly: MaskPolygon, eps = 1e-6): boolean {\n const n = poly.length;\n\n for (let i = 0, j = n - 1; i < n; j = i++) {\n const pi = poly[i];\n const pj = poly[j];\n\n if (distPointToSegment(pt, pi, pj) <= eps) { return true; }\n }\n\n let inside = false;\n\n for (let i = 0, j = n - 1; i < n; j = i++) {\n const pi = poly[i];\n const pj = poly[j];\n const intersect = ((pi.y > pt.y) !== (pj.y > pt.y)) &&\n (pt.x < (pj.x - pi.x) * (pt.y - pi.y) / (pj.y - pi.y) + pi.x);\n\n if (intersect) { inside = !inside; }\n }\n\n return inside;\n}\n\n/** mask pts 的轴对齐 bbox 是否罩住 shapeBbox(每边余 eps)。非轴对齐 mask 不在此判(走 pointInPolygon)。 */\nexport function rangeCovers (pts: MaskPolygon, bbox: { minX: number; minY: number; maxX: number; maxY: number }, eps: number): boolean {\n let pminX = Infinity, pminY = Infinity, pmaxX = -Infinity, pmaxY = -Infinity;\n\n for (const p of pts) {\n pminX = Math.min(pminX, p.x); pminY = Math.min(pminY, p.y);\n pmaxX = Math.max(pmaxX, p.x); pmaxY = Math.max(pmaxY, p.y);\n }\n\n return pminX <= bbox.minX + eps && pminY <= bbox.minY + eps && pmaxX >= bbox.maxX - eps && pmaxY >= bbox.maxY - eps;\n}\n\n/** 判断 rebase 后的 mask 尺寸是否明显偏离被裁区域。 */\nexport function maskSizeAbnormal (pts: MaskPolygon, w: number, h: number): boolean {\n let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;\n\n for (const p of pts) {\n minX = Math.min(minX, p.x); minY = Math.min(minY, p.y);\n maxX = Math.max(maxX, p.x); maxY = Math.max(maxY, p.y);\n }\n const bw = maxX - minX, bh = maxY - minY;\n\n return bw * bh < (w * h) * 0.1 || bw * bh > (w * h) * 9;\n}\n\n/** 判断 mask 是否完全覆盖被裁区域。矩形使用 bbox,其他形状检查区域四角。 */\nexport function maskCoversFull (pts: MaskPolygon, w: number, h: number): boolean {\n if (pts.length < 3) { return false; }\n\n let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;\n\n for (const p of pts) {\n minX = Math.min(minX, p.x); minY = Math.min(minY, p.y);\n maxX = Math.max(maxX, p.x); maxY = Math.max(maxY, p.y);\n }\n\n // 轴对齐矩形允许少量边缘误差,以覆盖常见的 padding。\n if (isAxisAlignedRect(pts) && minX <= 5 && minY <= 5 && maxX >= w - 5 && maxY >= h - 5) {\n return true;\n }\n\n // 非矩形 mask 逐个检查区域四角,边界点也视为覆盖。\n const corners = [\n { x: 0, y: 0 },\n { x: w, y: 0 },\n { x: w, y: h },\n { x: 0, y: h },\n ];\n\n return corners.every(c => pointInPolygon(c, pts));\n}\n","/**\n * SVG <clipPath> → IRMask(挂到被裁图层的 mask 字段)。\n *\n * IR 只负责把 mask 几何挂到被裁图层;IR→Effects 的结构组装由 `@vvfx/ge-ir` 负责。\n *\n * 收集 clipPath 内所有形状几何,合并成一个 IRBezierPath(多 subpath 并集语义)的 points/handles。\n * clipPath 内 path/polygon/polyline/rect 可直接收集,circle/ellipse 使用 cubic 圆弧;\n * clip-rule even-odd/nonzero 不处理;IR mask 使用默认规则。\n *\n * 被裁元素通过 clip-path=\"url(#id)\" 引用,svg2ir 扫描时把对应 IRMask 挂到该元素图层。\n */\nimport type EditableSVG from '../../../parse-svg/svg-parser';\nimport type { Element as SVGElementNode } from '@svgdotjs/svg.js';\nimport type { IRBezierPath, IRMask } from '@vvfx/animation-ir';\nimport { accumulateAncestors, IDENTITY, multiply, parseTransform, transformPoint } from '../../matrix';\nimport { collectShapeGeometry, transformVector, type MaskGeometry } from '../../converter/clip/collect-geometry';\nimport { mergeClosedSubpaths } from '../../normalize-path';\n\n/**\n * 从 clipPath/mask 元素合并所有子形状几何 → IRMask{path}(当前合并为单点集)。\n *\n * 支持子元素为直接形状(rect/circle/path...)或 `<use href=\"#shapeId\">` 引用声明区形状。\n *\n * **坐标基准(mask 真正的坑)**:SVG mask content 在 `maskContentUnits=userSpaceOnUse`(默认)下,\n * \"userSpace\" = **mask 元素所在的 userSpace**——即 mask 元素自身 transform + 祖先 `<g>` transform\n * 累乘后的空间。mask 与被裁 `<image>` 可能位于同一个带 transform 的 `<g>` 里,故 content\n * 形状的 (0,0) 是 g 局部原点,需要累计 g 的 transform 才能得到 SVG 绝对坐标。clipPath 通常位于\n * defs 中并直接使用文档坐标,因此保持局部坐标;mask 则累计其宿主变换后再与被裁图层对齐。\n */\nexport function buildClipMask (\n es: EditableSVG,\n clipPathEl: SVGElementNode,\n rootEl?: SVGElementNode,\n applyAncestorTransform = false,\n applyShapeOwnTransform = false,\n): IRMask | null {\n void es; // DOM 直接读属性,clipPath/mask 子是 DOM node 非 svg.js Element,不经解析底座。\n const shapeEls = collectShapeChildren(clipPathEl, rootEl);\n\n if (shapeEls.length === 0) { return null; }\n\n const geometry: MaskGeometry = { paths: [] };\n\n for (const shapeEl of shapeEls) {\n const tag = shapeEl.node.tagName?.toLowerCase() ?? '';\n\n collectShapeGeometry(shapeEl, tag, geometry, applyShapeOwnTransform);\n }\n\n const [mergedPath] = mergeClosedSubpaths(geometry.paths);\n\n if (mergedPath == null || mergedPath.points.length === 0) { return null; }\n\n // mask:把 content 点累计 mask 元素自身 transform + 祖先 g transform,得到 SVG 绝对 userSpace。\n // 用与 parse-shape/image 一致的 accumulateAncestors(DOM getAttribute 上溯父 g 累乘),保证与\n // 被裁 layer 的 position 和 anchor 位于同一坐标系,可直接计算重定位偏移。\n const containerMatrix = applyAncestorTransform ? accumulateAncestors(clipPathEl) : null;\n const path: IRBezierPath = containerMatrix == null\n ? mergedPath\n : {\n points: mergedPath.points.map(point => transformPoint(containerMatrix, point.x, point.y)),\n inTangents: mergedPath.inTangents.map(tangent => transformVector(containerMatrix, tangent)),\n outTangents: mergedPath.outTangents.map(tangent => transformVector(containerMatrix, tangent)),\n closed: true,\n };\n\n return { path, mode: 'add' as const };\n}\n\n/**\n * 构建 `<g mask=\"url(#X)\">` 的组级 mask。\n * mask 坐标与子代使用同一 comp-absolute 坐标系;定义几何先在局部收集,\n * 再叠加宿主 g 的祖先变换和自身 transform。解析不到 mask 或没有形状时返回 null。\n */\nexport function buildGroupMaskForG (\n es: EditableSVG,\n gEl: SVGElementNode,\n rootEl: SVGElementNode,\n): IRMask | null {\n void es; // DOM 直读(同 buildClipMask)。\n const gNode = (gEl as unknown as { node?: { getAttribute?: (n: string) => string | null } }).node;\n const maskAttr = gNode?.getAttribute?.('mask') ?? '';\n const m = maskAttr.match(/^url\\(\\s*[\"']?#([^)\"'\\s]+)\\s*[\"']?\\)$/i);\n\n if (m == null) { return null; } // <g> 无 mask 或非 url 引用。\n const maskEl = findById(rootEl, m[1]);\n\n if (maskEl == null) { return null; } // mask 定义缺失。\n\n // mask 内容形状的自身 transform 先应用到局部几何,再叠加宿主 g 的变换。\n const rawMask = buildClipMask(es, { node: maskEl } as unknown as SVGElementNode, rootEl, false, true);\n\n if (rawMask == null) { return null; }\n\n // 组的完整世界链 = 祖先变换 × <g> 自身变换。\n const gSelfAttr = gNode?.getAttribute?.('transform') ?? '';\n const gSelf = gSelfAttr !== '' ? parseTransform(gSelfAttr) : IDENTITY;\n const gChain = multiply(accumulateAncestors(gEl), gSelf);\n const pts = rawMask.path.points.map(p => transformPoint(gChain, p.x, p.y));\n const inTangents = rawMask.path.inTangents.map(t => transformVector(gChain, t));\n const outTangents = rawMask.path.outTangents.map(t => transformVector(gChain, t));\n\n return { mode: \"add\" as const,\n path: {\n points: pts,\n inTangents,\n outTangents,\n closed: true,\n },\n // 组级 mask 使用 auto 语义,让更具体的元素级 mask 优先;嵌套组中保留最内层有效裁剪。\n };\n}\n\n/**\n * clipPath/mask 直接形状子元素(DOM node,跳过非形状)。遇 `<use href=\"#id\">` 展开:\n * 从 rootEl(scope)按 id 查被引用形状并收集其几何。\n */\nfunction collectShapeChildren (clipPathEl: SVGElementNode, rootEl?: SVGElementNode): Array<{ node: globalThis.Element }> {\n const children: Array<{ node: globalThis.Element }> = [];\n let node: unknown = (clipPathEl as unknown as { node?: { firstChild?: unknown } }).node?.firstChild;\n\n while (node != null) {\n const tag = (node as { tagName?: string }).tagName?.toLowerCase();\n\n if (tag != null && ['rect', 'circle', 'ellipse', 'path', 'polygon', 'polyline', 'line'].includes(tag)) {\n children.push({ node: node as Element });\n } else if (tag === 'use') {\n // use 引用的形状几何(id 查全文档)。href 取 href/xlink:href 任一。\n const href = (node as globalThis.Element).getAttribute?.('href')\n ?? (node as globalThis.Element).getAttributeNS?.('http://www.w3.org/1999/xlink', 'href')\n ?? '';\n const id = href.startsWith('#') ? href.slice(1) : '';\n const refEl = id !== '' && rootEl != null ? findById(rootEl, id) : null;\n\n if (refEl != null) { children.push({ node: refEl }); }\n }\n node = (node as { nextSibling?: unknown }).nextSibling;\n }\n\n return children;\n}\n\n/** 按 id 查 DOM element。优先全文档 ownerDocument.getElementById(被引用形状常在别处 <defs>,\n * 不在 mask/clipPath 子树内,querySelector 限子树会漏);fallback querySelector 子树 + rootEl 查。 */\nexport function findById (el: SVGElementNode, id: string): globalThis.Element | null {\n const node = (el as unknown as { node?: globalThis.Element }).node;\n // ownerDocument.getElementById 全文档 O(1) 查,最可靠。\n const byDoc = node?.ownerDocument?.getElementById?.(id);\n\n if (byDoc) { return byDoc; }\n // fallback:rootEl(文档根)子树 querySelector;最后 el 自身子树。\n const root = (el as unknown as { root?: () => SVGElementNode }).root?.();\n const rootBySel = root != null\n ? (root as unknown as { node?: globalThis.Element }).node?.querySelector?.(`#${cssEscape(id)}`)\n : undefined;\n\n return rootBySel ?? node?.querySelector?.(`#${cssEscape(id)}`) ?? null;\n}\n\n/** 为没有全局 CSS.escape 的运行环境提供简单的 id 转义。 */\nfunction cssEscape (s: string): string {\n if (typeof CSS !== 'undefined' && typeof CSS.escape === 'function') { return CSS.escape(s); }\n\n return s.replace(/[^a-zA-Z0-9_-]/g, c => `\\\\${c}`);\n}\n","import type EditableSVG from '../../../parse-svg/svg-parser';\nimport type { Element } from '@svgdotjs/svg.js';\nimport { findById } from '../clip/build-clip-mask';\n\n/** 判断 filter 是否替换原始图形。 */\nexport function filterReplacesSource (es: EditableSVG, el: Element, rootEl: Element): boolean {\n void es;\n const filterAttr = (el as unknown as { node?: { getAttribute?: (n: string) => string | null } }).node?.getAttribute?.('filter') ?? '';\n\n if (filterAttr === '') { return false; }\n const m = filterAttr.match(/^url\\(\\s*[\"']?#([^)\"'\\s]+)\\s*[\"']?\\)$/i);\n\n if (m == null) { return false; }\n const filterEl = findById(rootEl, m[1]);\n\n if (filterEl == null) { return false; }\n // 扫 filter 下所有 fe* 后代(含 feMergeNode 等)的 in/in2;任一显式含 SourceGraphic 即\"增强型\",返回 false(不跳过)。\n const feDescendants = filterEl.querySelectorAll('*');\n let firstFeIn: string | null = null; // 滤镜链首个原语的 in 值(SVG 首原语默认 in=SourceGraphic)\n\n for (const fe of feDescendants) {\n const ct = fe.tagName?.toLowerCase() ?? '';\n\n if (ct.startsWith('fe')) {\n const in1 = fe.getAttribute?.('in') ?? '';\n const in2 = fe.getAttribute?.('in2') ?? '';\n\n if (firstFeIn === null) { firstFeIn = in1; }\n if (in1 === 'SourceGraphic' || in2 === 'SourceGraphic') { return false; }\n }\n }\n\n // 首个原语没有显式 in 时,SVG 默认使用 SourceGraphic;这种 filter 增强源图形,\n // 因此保留源元素并单独报告 filter 能力缺失。显式使用 SourceAlpha 等输入时,\n // 源元素按替换型 filter 处理。\n if (firstFeIn === '') { return false; }\n\n return true; // 无任何 SourceGraphic(显式或首原语默认)= 替换源型\n}\n","import type { IRAnimatedProperty, IRKeyframe, IRPropertyValue, IRVec3 } from '@vvfx/animation-ir';\nimport { decomposeMatrix, IDENTITY, multiply, type SVGMatrix } from '../../matrix';\nimport {\n interpolateValues, sampleExpandedValue, splitCubicAtRatio,\n} from './parse-timeline';\nimport { EPSILON, type SMILAnimation, type SMILSample } from './types';\n\nfunction decorateKeyframes<T extends IRPropertyValue> (\n animation: SMILAnimation,\n keyframes: IRKeyframe<T>[],\n): void {\n for (let i = 0; i < keyframes.length - 1; i++) {\n const sample = animation.samples[i];\n const nextSample = animation.samples[i + 1];\n\n if (sample == null || nextSample == null || nextSample.time <= sample.time + EPSILON) { continue; }\n if (animation.calcMode === 'discrete') {\n keyframes[i].hold = true;\n continue;\n }\n if (animation.calcMode !== 'spline' || sample.cycle !== nextSample.cycle) { continue; }\n const partialSegment = nextSample.activeEndSegment;\n const spline = animation.keySplines[sample.sourceIndex];\n\n if (spline != null) {\n if (partialSegment != null) {\n const authoredSpan = partialSegment.endTime - partialSegment.startTime;\n const simpleTime = nextSample.time - partialSegment.cycleStartTime;\n const authoredRatio = authoredSpan <= EPSILON\n ? 1\n : (simpleTime - partialSegment.startTime) / authoredSpan;\n const split = splitCubicAtRatio(\n Math.max(0, Math.min(1, authoredRatio)),\n spline,\n );\n\n keyframes[i].outTangent = split.out;\n keyframes[i + 1].inTangent = split.in;\n } else {\n keyframes[i].outTangent = spline[0];\n keyframes[i + 1].inTangent = spline[1];\n }\n }\n }\n}\n\nexport function makeKeyframes<T extends IRPropertyValue> (\n animation: SMILAnimation,\n frameRate: number,\n mapValue: (value: number[], index: number) => T,\n baseValue?: T,\n): IRKeyframe<T>[] {\n let keyframes: IRKeyframe<T>[] = animation.samples.map((sample, index) => ({\n frame: sample.time * frameRate,\n value: mapValue(sample.value, index),\n }));\n\n decorateKeyframes(animation, keyframes);\n if (baseValue != null && animation.begin > 0) {\n keyframes.unshift({ frame: 0, value: baseValue, hold: true });\n }\n if (baseValue != null) {\n for (let index = 0; index < animation.intervals.length; index++) {\n const interval = animation.intervals[index];\n const next = animation.intervals[index + 1];\n const last = keyframes[interval.sampleEnd - 1 + (animation.begin > 0 ? 1 : 0)];\n const hasGap = next == null || next.begin > interval.end + EPSILON;\n\n if (last == null || !hasGap) { continue; }\n if (animation.fill === 'remove' && !animation.indefinite) {\n const endFrame = interval.end * frameRate;\n\n if (last.frame < endFrame - EPSILON) {\n keyframes.push({ frame: endFrame, value: last.value });\n }\n if (!keyframeValuesEqual(last.value, baseValue)) {\n keyframes.push({ frame: endFrame, value: baseValue, hold: true });\n } else if (next != null) {\n last.hold = true;\n }\n } else if (next != null) {\n last.hold = true;\n }\n }\n }\n keyframes.sort((a, b) => a.frame - b.frame);\n keyframes = ensureStrictlyIncreasingFrames(keyframes);\n\n if (animation.calcMode === 'discrete') {\n // 标量 Bezier 编码会把 hold 段的结束值合并到下一个曲线点。\n // 直接使用 [old(hold), new] 会丢失跳变,因此保留 hold 语义,并在每次跳变前插入\n // sub-frame bridge。bridge 宽度为 0.001 帧,满足 IR 帧号严格递增约束。\n const expanded: IRKeyframe<T>[] = [];\n\n for (let i = 0; i < keyframes.length; i++) {\n const current = keyframes[i];\n const next = keyframes[i + 1];\n\n expanded.push(current);\n if (next == null || current.hold !== true) { continue; }\n const gap = next.frame - current.frame;\n\n if (gap <= EPSILON) { continue; }\n const bridgeWidth = Math.min(0.001, gap / 2);\n\n expanded.push({ frame: next.frame - bridgeWidth, value: current.value });\n }\n keyframes = expanded;\n }\n\n return keyframes;\n}\n\nfunction keyframeValuesEqual<T extends IRPropertyValue> (a: T, b: T): boolean {\n if (typeof a === 'number' && typeof b === 'number') { return Math.abs(a - b) < EPSILON; }\n if (!Array.isArray(a) || !Array.isArray(b) || a.length !== b.length) { return false; }\n\n return a.every((value, index) => Math.abs(value - b[index]) < EPSILON);\n}\n\n/**\n * 帧取整可能使 repeat 的最终值与下一周期初始值落在同一帧。\n * 将 outgoing value 移到边界前的 sub-frame bridge;相同值冲突时合并,保持 IR 帧号严格递增。\n */\nfunction ensureStrictlyIncreasingFrames<T extends IRPropertyValue> (keyframes: IRKeyframe<T>[]): IRKeyframe<T>[] {\n const ordered: IRKeyframe<T>[] = [];\n\n for (const keyframe of keyframes) {\n const previous = ordered[ordered.length - 1];\n\n if (previous == null || keyframe.frame > previous.frame + EPSILON) {\n ordered.push(keyframe);\n continue;\n }\n if (keyframeValuesEqual(previous.value, keyframe.value)) {\n ordered[ordered.length - 1] = { ...previous, ...keyframe, frame: previous.frame };\n continue;\n }\n\n const beforePrevious = ordered[ordered.length - 2];\n const boundaryFrame = Math.max(previous.frame, keyframe.frame);\n const available = boundaryFrame - (beforePrevious?.frame ?? -Infinity);\n\n if (boundaryFrame > 0 && available > EPSILON) {\n previous.frame = boundaryFrame - Math.min(0.001, available / 2);\n keyframe.frame = boundaryFrame;\n } else {\n // 帧 0 的退化冲突没有可表示的前置时刻,因此按 authored 顺序保留两个值,并使用极小偏移。\n keyframe.frame = previous.frame + 0.001;\n }\n ordered.push(keyframe);\n }\n\n return ordered;\n}\n\nexport function matrixForTransformValue (type: string, value: number[]): SVGMatrix {\n if (type === 'translate') {\n return { a: 1, b: 0, c: 0, d: 1, e: value[0] ?? 0, f: value[1] ?? 0 };\n }\n if (type === 'scale') {\n const sx = value[0] ?? 1;\n const sy = value[1] ?? sx;\n\n return { a: sx, b: 0, c: 0, d: sy, e: 0, f: 0 };\n }\n if (type === 'rotate') {\n const angle = (value[0] ?? 0) * Math.PI / 180;\n const cx = value[1] ?? 0;\n const cy = value[2] ?? 0;\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n const rotation: SVGMatrix = { a: cos, b: sin, c: -sin, d: cos, e: 0, f: 0 };\n const toPivot: SVGMatrix = { a: 1, b: 0, c: 0, d: 1, e: cx, f: cy };\n const fromPivot: SVGMatrix = { a: 1, b: 0, c: 0, d: 1, e: -cx, f: -cy };\n\n return multiply(multiply(toPivot, rotation), fromPivot);\n }\n\n return IDENTITY;\n}\n\nexport function applyRotateSpatialTangents (\n animation: SMILAnimation,\n keyframes: IRKeyframe<IRVec3>[],\n baseMatrix: SVGMatrix,\n localCenter: [number, number],\n): void {\n const keyframeOffset = animation.begin > 0 ? 1 : 0;\n\n for (let i = 0; i < animation.samples.length - 1; i++) {\n const start = animation.samples[i];\n const end = animation.samples[i + 1];\n\n if (start.cycle !== end.cycle || start.value[1] !== end.value[1] || start.value[2] !== end.value[2]) { continue; }\n const delta = ((end.value[0] ?? 0) - (start.value[0] ?? 0)) * Math.PI / 180;\n\n if (Math.abs(delta) < EPSILON || Math.abs(delta) >= Math.PI * 2 - EPSILON) { continue; }\n const pivotX = start.value[1] ?? 0;\n const pivotY = start.value[2] ?? 0;\n const radiusX = localCenter[0] - pivotX;\n const radiusY = localCenter[1] - pivotY;\n const startAngle = (start.value[0] ?? 0) * Math.PI / 180;\n const endAngle = (end.value[0] ?? 0) * Math.PI / 180;\n const rotateRadius = (angle: number): [number, number] => [\n Math.cos(angle) * radiusX - Math.sin(angle) * radiusY,\n Math.sin(angle) * radiusX + Math.cos(angle) * radiusY,\n ];\n const mapVector = (vector: [number, number]): [number, number] => [\n baseMatrix.a * vector[0] + baseMatrix.c * vector[1],\n baseMatrix.b * vector[0] + baseMatrix.d * vector[1],\n ];\n const startRadius = rotateRadius(startAngle);\n const endRadius = rotateRadius(endAngle);\n const startTangent = mapVector([-startRadius[1], startRadius[0]]);\n const endTangent = mapVector([-endRadius[1], endRadius[0]]);\n const handleScale = 4 / 3 * Math.tan(delta / 4);\n const startKeyframe = keyframes[i + keyframeOffset];\n const endKeyframe = keyframes[i + 1 + keyframeOffset];\n\n startKeyframe.spatialOut = [startTangent[0] * handleScale, startTangent[1] * handleScale];\n endKeyframe.spatialIn = [-endTangent[0] * handleScale, -endTangent[1] * handleScale];\n }\n}\n\nexport function staticValue<T extends number | IRVec3> (property: IRAnimatedProperty<T> | undefined, fallback: T): T {\n if (property == null) { return fallback; }\n if (property.type === 'keyframed') { return property.keyframes[0]?.value ?? fallback; }\n\n return property.value;\n}\n\nexport function subdivideFullTurn (animation: SMILAnimation): SMILAnimation {\n if (animation.type !== 'rotate' || !['linear', 'paced'].includes(animation.calcMode)) { return animation; }\n const samples: SMILSample[] = [];\n\n for (let i = 0; i < animation.samples.length - 1; i++) {\n const start = animation.samples[i];\n const end = animation.samples[i + 1];\n\n if (i === 0) { samples.push(start); }\n const delta = (end.value[0] ?? 0) - (start.value[0] ?? 0);\n const steps = start.cycle === end.cycle && end.time > start.time + EPSILON\n ? Math.max(1, Math.ceil(Math.abs(delta) / 90))\n : 1;\n\n for (let step = 1; step < steps; step++) {\n const ratio = step / steps;\n\n samples.push({\n time: start.time + (end.time - start.time) * ratio,\n value: interpolateValues(start.value, end.value, ratio),\n cycle: start.cycle,\n sourceIndex: start.sourceIndex,\n });\n }\n samples.push(end);\n }\n\n return samples.length > 0 ? { ...animation, samples } : animation;\n}\n\nexport function unwrapRotationValues (animation: SMILAnimation, matrices: SVGMatrix[]): number[] {\n if (animation.type !== 'rotate') {\n return matrices.map(matrix => decomposeMatrix(matrix).rotation);\n }\n const values: number[] = [];\n\n for (let i = 0; i < matrices.length; i++) {\n const raw = decomposeMatrix(matrices[i]).rotation;\n\n if (i === 0) {\n values.push(raw);\n continue;\n }\n const authoredDelta = (animation.samples[i].value[0] ?? 0) - (animation.samples[i - 1].value[0] ?? 0);\n const expected = values[i - 1] + authoredDelta;\n\n values.push(raw + Math.round((expected - raw) / 360) * 360);\n }\n\n return values;\n}\n\nexport function sampleAnimationValue (animation: SMILAnimation, time: number): number[] | null {\n if (time < animation.begin - EPSILON) { return null; }\n let frozen: number[] | null = null;\n\n for (const interval of animation.intervals) {\n if (time < interval.begin - EPSILON) { break; }\n const intervalSamples = animation.samples.slice(interval.sampleStart, interval.sampleEnd);\n\n if (time < interval.end - EPSILON) {\n return sampleExpandedValue(intervalSamples, time, animation.calcMode, animation.keySplines)?.value ?? null;\n }\n if (animation.fill === 'freeze') {\n frozen = intervalSamples[intervalSamples.length - 1]?.value ?? frozen;\n } else {\n frozen = null;\n }\n }\n\n return frozen;\n}\n","const SMIL_ANIMATION_TAGS = new Set(['animate', 'animatecolor', 'animatetransform', 'animatemotion', 'set']);\nconst animationTargetCache = new WeakMap<object, globalThis.Element | null>();\nconst animationElementsCache = new WeakMap<object, globalThis.Element[]>();\n\nfunction findSMILRoot (node: globalThis.Element): globalThis.Element {\n let current = node;\n\n while (current.parentNode != null && current.tagName.toLowerCase() !== 'svg') {\n current = current.parentNode as globalThis.Element;\n }\n\n return current;\n}\n\nfunction findElementById (root: globalThis.Element, id: string): globalThis.Element | null {\n if (root.getAttribute('id') === id) { return root; }\n\n return Array.from(root.querySelectorAll('[id]')).find(element => element.getAttribute('id') === id) ?? null;\n}\n\nfunction readAnimationParent (animation: globalThis.Element): globalThis.Element | null {\n const parent = animation.parentNode;\n\n return parent != null && typeof (parent as { tagName?: unknown }).tagName === 'string'\n ? parent as globalThis.Element\n : animation.parentElement;\n}\n\nfunction matchesAnimationTarget (\n animation: globalThis.Element,\n target: globalThis.Element,\n root: globalThis.Element,\n tags: ReadonlySet<string>,\n): boolean {\n return tags.has(animation.tagName.toLowerCase())\n && resolveSMILAnimationTarget(animation, root) === target;\n}\n\n/** Resolve the element animated by a direct or href-targeted SMIL element. */\nexport function resolveSMILAnimationTarget (\n animation: globalThis.Element,\n root: globalThis.Element,\n): globalThis.Element | null {\n const cached = animationTargetCache.get(animation);\n\n if (cached != null) { return cached; }\n if (animationTargetCache.has(animation)) { return null; }\n const svgRoot = findSMILRoot(root);\n const href = animation.getAttribute('href') ?? animation.getAttribute('xlink:href');\n let target: globalThis.Element | null;\n\n if (href != null && href.trim().startsWith('#')) {\n target = findElementById(svgRoot, href.trim().slice(1));\n } else {\n target = readAnimationParent(animation);\n }\n animationTargetCache.set(animation, target);\n\n return target;\n}\n\n/** Collect direct and href-targeted SMIL elements for one SVG element in document order. */\nexport function collectSMILAnimationElements (\n target: globalThis.Element,\n root: globalThis.Element,\n tags: ReadonlySet<string> = SMIL_ANIMATION_TAGS,\n): globalThis.Element[] {\n const svgRoot = findSMILRoot(root);\n let animations = animationElementsCache.get(svgRoot);\n\n if (animations == null) {\n animations = Array.from(svgRoot.querySelectorAll('*')).filter(element => (\n SMIL_ANIMATION_TAGS.has(element.tagName.toLowerCase())\n ));\n animationElementsCache.set(svgRoot, animations);\n }\n\n return animations.filter(element => matchesAnimationTarget(element, target, svgRoot, tags));\n}\n","import { sampleAnimationValue } from './build-keyframes';\nimport { parseSMILTag } from './parse-timeline';\nimport { collectSMILAnimationElements } from './resolve-animation-target';\nimport { getBeginTimeCache } from './timeline-schedule';\nimport {\n EPSILON,\n type BeginTimeCache, type GeometryAnimation, type GeometryContext, type GeometrySample,\n type SMILAnimation, type TransformContext, type TransformStage,\n} from './types';\n\nfunction activeIntervalBegin (animation: SMILAnimation, time: number): number | null {\n let frozenBegin: number | null = null;\n\n for (const interval of animation.intervals) {\n if (time < interval.begin - EPSILON) { break; }\n if (time < interval.end - EPSILON) { return interval.begin; }\n frozenBegin = animation.fill === 'freeze' ? interval.begin : null;\n }\n\n return frozenBegin;\n}\n\nfunction sampleNumericAttribute (\n attributeName: string,\n baseValue: number,\n animations: SMILAnimation[],\n time: number,\n): number {\n const sampledAnimations: Array<{ animation: SMILAnimation; value: number[]; begin: number; order: number }> = [];\n\n animations.forEach((animation, order) => {\n if (animation.attributeName !== attributeName) { return; }\n const value = sampleAnimationValue(animation, time);\n const begin = activeIntervalBegin(animation, time);\n\n if (value != null && begin != null) {\n sampledAnimations.push({ animation, value, begin, order });\n }\n });\n sampledAnimations.sort((left, right) => left.begin - right.begin || left.order - right.order);\n\n let value = baseValue;\n\n for (const sampled of sampledAnimations) {\n value = sampled.animation.additive === 'sum' || sampled.animation.byOnly\n ? value + (sampled.value[0] ?? 0)\n : (sampled.value[0] ?? 0);\n }\n\n return value;\n}\n\nfunction readViewportDimension (root: globalThis.Element, axis: 'x' | 'y'): number | undefined {\n const viewBox = (root.getAttribute('viewBox') ?? '').trim().split(/[\\s,]+/).map(Number);\n const viewBoxValue = axis === 'x' ? viewBox[2] : viewBox[3];\n\n if (Number.isFinite(viewBoxValue) && viewBoxValue > 0) { return viewBoxValue; }\n const raw = root.getAttribute(axis === 'x' ? 'width' : 'height') ?? '';\n const match = raw.trim().match(/^([-+]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[-+]?\\d+)?)(?:px)?$/i);\n const value = match == null ? NaN : Number(match[1]);\n\n return Number.isFinite(value) && value > 0 ? value : undefined;\n}\n\nfunction parseGeometryLength (\n raw: string,\n attributeName: string,\n root: globalThis.Element,\n): number[] | null {\n const value = raw.trim();\n const axis = ['x', 'x1', 'x2', 'cx', 'width', 'rx'].includes(attributeName)\n ? 'x'\n : ['y', 'y1', 'y2', 'cy', 'height', 'ry'].includes(attributeName)\n ? 'y'\n : undefined;\n const reference = axis == null ? undefined : readViewportDimension(root, axis);\n const parseTerm = (term: string): number | null => {\n const match = term.trim().replace(/^([+-])\\s+/, '$1').match(/^([-+]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[-+]?\\d+)?)(%|px)?$/i);\n\n if (match == null) { return null; }\n const number = Number(match[1]);\n\n if (!Number.isFinite(number)) { return null; }\n if (match[2] === '%') { return reference == null ? null : number * reference / 100; }\n\n return number;\n };\n\n if (/^calc\\(/i.test(value) && value.endsWith(')')) {\n const expression = value.slice(value.indexOf('(') + 1, -1);\n const terms = expression.match(/[+-]?\\s*(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?(?:%|px)?/gi) ?? [];\n\n if (terms.length === 0 || terms.join('').replace(/\\s+/g, '') !== expression.replace(/\\s+/g, '')) { return null; }\n let total = 0;\n\n for (const term of terms) {\n const parsed = parseTerm(term);\n\n if (parsed == null) { return null; }\n total += parsed;\n }\n\n return [total];\n }\n\n const parsed = parseTerm(value);\n\n return parsed == null ? null : [parsed];\n}\n\nfunction supportedGeometryAttributes (kind: GeometryContext['kind']): ReadonlySet<string> {\n if (kind === 'use') { return new Set(['x', 'y']); }\n if (kind === 'rect') { return new Set(['x', 'y', 'width', 'height']); }\n if (kind === 'circle') { return new Set(['cx', 'cy', 'r']); }\n if (kind === 'line') { return new Set(['x1', 'y1', 'x2', 'y2']); }\n\n return new Set(['cx', 'cy', 'rx', 'ry']);\n}\n\nconst LINE_ATTRIBUTES = ['x1', 'y1', 'x2', 'y2'] as const;\n\ntype LineAttribute = typeof LINE_ATTRIBUTES[number];\n\nexport function isLineGeometryAttribute (attributeName: string): attributeName is LineAttribute {\n return LINE_ATTRIBUTES.includes(attributeName as LineAttribute);\n}\n\n// 只有端点整体平移时才能复用静态 IR 路径;改变长度或方向需要重新生成路径。\nfunction collectLineTranslationAnimation (\n geometry: GeometryContext,\n animations: SMILAnimation[],\n): SMILAnimation | null {\n if (geometry.kind !== 'line') { return null; }\n\n const baseValues = LINE_ATTRIBUTES.map(attribute => geometry.base[attribute] ?? 0);\n const animationsByAttribute = new Map<LineAttribute, SMILAnimation>();\n\n for (const attribute of LINE_ATTRIBUTES) {\n const matches = animations.filter(animation => animation.attributeName === attribute);\n\n if (matches.length > 1) { return null; }\n if (matches[0] != null) { animationsByAttribute.set(attribute, matches[0]); }\n }\n\n const master = LINE_ATTRIBUTES.map(attribute => animationsByAttribute.get(attribute)).find(animation => animation != null);\n\n if (master == null) { return null; }\n\n const samples = master.samples.map(sample => {\n const values = LINE_ATTRIBUTES.map((attribute, index) => {\n const animation = animationsByAttribute.get(attribute);\n const baseValue = baseValues[index] ?? 0;\n\n if (animation == null) { return baseValue; }\n const matchingSample = animation.samples.find(candidate => (\n candidate.sourceIndex === sample.sourceIndex && Math.abs(candidate.time - sample.time) < 1e-6\n )) ?? animation.samples.find(candidate => Math.abs(candidate.time - sample.time) < 1e-6);\n\n if (matchingSample == null) { return NaN; }\n const value = matchingSample.value[0];\n\n return animation.additive === 'sum' || animation.byOnly ? baseValue + (value ?? 0) : value ?? NaN;\n });\n const offsetX = values[0] - (baseValues[0] ?? 0);\n const offsetY = values[1] - (baseValues[1] ?? 0);\n const isTranslation = Number.isFinite(offsetX) && Number.isFinite(offsetY)\n && Math.abs(values[2] - (baseValues[2] ?? 0) - offsetX) < 1e-6\n && Math.abs(values[3] - (baseValues[3] ?? 0) - offsetY) < 1e-6;\n\n return isTranslation ? { ...sample, value: [offsetX, offsetY] } : null;\n });\n\n if (samples.some(sample => sample == null)) { return null; }\n\n return {\n ...master,\n attributeName: 'transform',\n type: 'translate',\n additive: 'sum',\n byOnly: false,\n samples: samples as SMILAnimation['samples'],\n };\n}\n\nfunction parseGeometryAnimations (\n target: globalThis.Element,\n root: globalThis.Element,\n beginCache: BeginTimeCache,\n geometry: GeometryContext,\n comparisonDuration?: number,\n): SMILAnimation[] {\n const supported = supportedGeometryAttributes(geometry.kind);\n\n return collectSMILAnimationElements(target, root, new Set(['animate', 'set']))\n .map(tag => {\n const attributeName = tag.getAttribute('attributeName')?.trim().toLowerCase() ?? '';\n const underlyingValue = Object.prototype.hasOwnProperty.call(geometry.base, attributeName)\n ? [geometry.base[attributeName]]\n : undefined;\n const valueParser = supported.has(attributeName)\n ? (value: string): number[] | null => parseGeometryLength(value, attributeName, root)\n : undefined;\n\n return parseSMILTag(tag, root, beginCache, comparisonDuration, valueParser, underlyingValue);\n })\n .filter((animation): animation is SMILAnimation => animation != null && supported.has(animation.attributeName));\n}\n\nfunction readLineBaseValue (target: globalThis.Element, attributeName: LineAttribute): number {\n const value = Number.parseFloat(target.getAttribute(attributeName) ?? '');\n\n return Number.isFinite(value) ? value : 0;\n}\n\nexport function canConvertLineGeometryAnimations (\n target: globalThis.Element,\n root: globalThis.Element,\n): boolean {\n if (target.tagName.toLowerCase() !== 'line') { return false; }\n const geometry: GeometryContext = {\n kind: 'line',\n base: Object.fromEntries(LINE_ATTRIBUTES.map(attribute => [attribute, readLineBaseValue(target, attribute)])),\n referenceWidth: 1,\n referenceHeight: 1,\n };\n const animations = parseGeometryAnimations(target, root, getBeginTimeCache(root), geometry);\n\n return collectLineTranslationAnimation(geometry, animations) != null;\n}\n\nfunction sampleGeometry (\n geometry: GeometryContext,\n animations: SMILAnimation[],\n time: number,\n): GeometrySample {\n let centerX: number;\n let centerY: number;\n let width: number;\n let height: number;\n\n if (geometry.kind === 'use') {\n centerX = sampleNumericAttribute('x', geometry.base['x'], animations, time);\n centerY = sampleNumericAttribute('y', geometry.base['y'], animations, time);\n width = 1;\n height = 1;\n } else if (geometry.kind === 'rect') {\n const x = sampleNumericAttribute('x', geometry.base['x'], animations, time);\n const y = sampleNumericAttribute('y', geometry.base['y'], animations, time);\n\n width = Math.max(0, sampleNumericAttribute('width', geometry.base['width'], animations, time));\n height = Math.max(0, sampleNumericAttribute('height', geometry.base['height'], animations, time));\n centerX = x + width / 2;\n centerY = y + height / 2;\n } else if (geometry.kind === 'circle') {\n const radius = Math.max(0, sampleNumericAttribute('r', geometry.base['r'], animations, time));\n\n width = radius * 2;\n height = radius * 2;\n centerX = sampleNumericAttribute('cx', geometry.base['cx'], animations, time);\n centerY = sampleNumericAttribute('cy', geometry.base['cy'], animations, time);\n } else {\n const rx = Math.max(0, sampleNumericAttribute('rx', geometry.base['rx'], animations, time));\n const ry = Math.max(0, sampleNumericAttribute('ry', geometry.base['ry'], animations, time));\n\n width = rx * 2;\n height = ry * 2;\n centerX = sampleNumericAttribute('cx', geometry.base['cx'], animations, time);\n centerY = sampleNumericAttribute('cy', geometry.base['cy'], animations, time);\n }\n\n return {\n centerX,\n centerY,\n scaleX: geometry.referenceWidth > EPSILON ? width / geometry.referenceWidth : 1,\n scaleY: geometry.referenceHeight > EPSILON ? height / geometry.referenceHeight : 1,\n };\n}\n\nexport function collectGeometryAnimation (\n stage: TransformStage,\n root: globalThis.Element,\n beginCache: BeginTimeCache,\n context: TransformContext,\n): GeometryAnimation | null {\n const geometry = context.geometry;\n\n if (geometry == null) { return null; }\n const animations = parseGeometryAnimations(stage.node, root, beginCache, geometry, context.comparisonDuration);\n\n if (animations.length === 0 && (geometry.kind !== 'use' || (geometry.base['x'] === 0 && geometry.base['y'] === 0))) {\n return null;\n }\n\n if (geometry.kind === 'line') {\n const translation = collectLineTranslationAnimation(geometry, animations);\n\n if (translation == null) { return null; }\n\n return {\n animations: [translation],\n matrixAtTime: time => {\n const value = sampleAnimationValue(translation, time);\n\n return { a: 1, b: 0, c: 0, d: 1, e: value?.[0] ?? 0, f: value?.[1] ?? 0 };\n },\n scaleAtTime: () => ({ x: 1, y: 1 }),\n };\n }\n\n return {\n animations,\n matrixAtTime: time => {\n const sample = sampleGeometry(geometry, animations, time);\n\n if (geometry.kind === 'use') {\n return { a: 1, b: 0, c: 0, d: 1, e: sample.centerX, f: sample.centerY };\n }\n\n return {\n a: sample.scaleX,\n b: 0,\n c: 0,\n d: sample.scaleY,\n e: sample.centerX - sample.scaleX * context.localCenter[0],\n f: sample.centerY - sample.scaleY * context.localCenter[1],\n };\n },\n scaleAtTime: time => {\n const sample = sampleGeometry(geometry, animations, time);\n\n return { x: sample.scaleX, y: sample.scaleY };\n },\n };\n}\n","import type { Element } from '@svgdotjs/svg.js';\nimport { canConvertLineGeometryAnimations, isLineGeometryAttribute } from './collect-geometry-animation';\nimport { collectSMILAnimationElements, resolveSMILAnimationTarget } from './resolve-animation-target';\n\nconst SMIL_TRANSFORM_OWNER_TAGS = new Set([\n 'g', 'a', 'switch', 'use', 'rect', 'circle', 'ellipse', 'path', 'polygon', 'polyline', 'line', 'text', 'image',\n]);\n\nconst SMIL_SHAPE_OWNER_TAGS = new Set([\n 'use', 'rect', 'circle', 'ellipse', 'path', 'polygon', 'polyline', 'line', 'image',\n]);\n\nconst SMIL_GEOMETRY_ATTRIBUTES_BY_TAG: Readonly<Record<string, ReadonlySet<string>>> = {\n rect: new Set(['x', 'y', 'width', 'height']),\n circle: new Set(['cx', 'cy', 'r']),\n ellipse: new Set(['cx', 'cy', 'rx', 'ry']),\n path: new Set(['d']),\n polygon: new Set(['points']),\n polyline: new Set(['points']),\n use: new Set(['x', 'y']),\n image: new Set(['x', 'y', 'width', 'height']),\n};\n\nconst lineGeometryAnimationSupportCache = new WeakMap<object, boolean>();\n\nfunction supportsLineGeometryAnimations (\n target: globalThis.Element,\n root: globalThis.Element,\n): boolean {\n const cached = lineGeometryAnimationSupportCache.get(target);\n\n if (cached != null) { return cached; }\n const supported = canConvertLineGeometryAnimations(target, root);\n\n lineGeometryAnimationSupportCache.set(target, supported);\n\n return supported;\n}\n\n/** 判断 SMIL 动画是否由 SVG→IR 支持。 */\nfunction isSolidPaintAnimation (node: globalThis.Element, target: globalThis.Element | null, attributeName: 'fill' | 'stroke'): boolean {\n const basePaint = target?.getAttribute(attributeName)?.trim().toLowerCase() ?? '';\n\n if (basePaint === '' || basePaint === 'none' || /^url\\(/i.test(basePaint)) { return false; }\n const authoredValues = [\n node.getAttribute('from'),\n node.getAttribute('to'),\n node.getAttribute('by'),\n node.getAttribute('values'),\n ].filter((value): value is string => value != null);\n\n return authoredValues.length > 0 && authoredValues.every(value => (\n !/(?:^|;)\\s*(?:none|url\\()/i.test(value)\n ));\n}\n\nexport function isMappedSMILAnimationElement (el: Element, tag: string): boolean {\n const node = (el as unknown as { node?: globalThis.Element }).node;\n const root = node == null ? null : ((node as globalThis.SVGElement).ownerSVGElement ?? node) as globalThis.Element;\n const target = node == null || root == null ? node?.parentElement ?? null : resolveSMILAnimationTarget(node, root);\n const parentTag = target?.tagName?.toLowerCase();\n\n if (parentTag == null || !SMIL_TRANSFORM_OWNER_TAGS.has(parentTag)) { return false; }\n\n if (tag === 'animatetransform') {\n const attributeName = node?.getAttribute('attributeName')?.trim().toLowerCase();\n const transformType = node?.getAttribute('type')?.trim().toLowerCase();\n\n return attributeName === 'transform' && ['translate', 'scale', 'rotate'].includes(transformType ?? '');\n }\n\n if (tag === 'animate' || tag === 'set') {\n if (tag === 'set' && (node?.getAttribute('to')?.trim() === '' || node?.getAttribute('dur')?.trim() === '')) {\n return false;\n }\n const attributeName = node?.getAttribute('attributeName')?.trim().toLowerCase();\n\n if (attributeName === 'opacity' || attributeName === 'display' || attributeName === 'visibility') { return true; }\n if (attributeName == null || !SMIL_SHAPE_OWNER_TAGS.has(parentTag)) { return false; }\n if (parentTag === 'line' && isLineGeometryAttribute(attributeName)) {\n return target != null && root != null && supportsLineGeometryAnimations(target, root);\n }\n if (SMIL_GEOMETRY_ATTRIBUTES_BY_TAG[parentTag]?.has(attributeName) === true) { return true; }\n if (['fill-opacity', 'stroke-opacity', 'stroke-width'].includes(attributeName)) { return true; }\n if (attributeName === 'fill' || attributeName === 'stroke') {\n if (node == null) { return false; }\n\n return target != null && isSolidPaintAnimation(node, target, attributeName);\n }\n\n return false;\n }\n\n // 已支持的 SMIL 动画属性不产生 warning。\n return tag === 'animatemotion';\n}\n\n/** 判断元素或祖先是否存在 opacity 动画。 */\nexport function hasDirectOpacityAnimation (node: globalThis.Element | null | undefined): boolean {\n if (node == null) { return false; }\n const root = ((node as globalThis.SVGElement).ownerSVGElement ?? node) as globalThis.Element;\n\n return collectSMILAnimationElements(node, root, new Set(['animate', 'set'])).some(animation => (\n ['opacity', 'display', 'visibility'].includes(animation.getAttribute('attributeName')?.toLowerCase() ?? '')\n ));\n}\n\nexport function hasAnimatedVisibility (el: Element): boolean {\n const node = (el as unknown as { node?: globalThis.Element | null }).node;\n\n if (node == null) { return false; }\n const root = ((node as globalThis.SVGElement).ownerSVGElement ?? node) as globalThis.Element;\n let current: globalThis.Element | null = node;\n\n while (current != null) {\n if (collectSMILAnimationElements(current, root, new Set(['animate', 'set'])).some(animation => (\n ['display', 'visibility'].includes(animation.getAttribute('attributeName')?.toLowerCase() ?? '')\n ))) {\n return true;\n }\n if (current.tagName.toLowerCase() === 'svg') { break; }\n current = current.parentElement;\n }\n\n return false;\n}\n\nexport function hasAnimatedAncestorOpacity (el: Element): boolean {\n let parent = (el as unknown as { node?: globalThis.Element | null }).node?.parentElement;\n\n while (parent != null && parent.tagName.toLowerCase() !== 'svg') {\n if (hasDirectOpacityAnimation(parent)) { return true; }\n parent = parent.parentElement;\n }\n\n return false;\n}\n","/** 读取 SVG presentation attribute,inline style 的同名属性优先。 */\nexport function readPresentationAttribute(\n node: { getAttribute?: (name: string) => string | null } | null | undefined,\n attributeName: string,\n): string | null {\n if (node == null) { return null; }\n const inlineValue = readInlineStyleProperty(node.getAttribute?.('style') ?? null, attributeName);\n\n return inlineValue ?? node.getAttribute?.(attributeName) ?? null;\n}\n\nexport function readInlineStyleProperty(style: string | null, propertyName: string): string | null {\n if (style == null || style.trim() === '') { return null; }\n const expectedName = propertyName.toLowerCase();\n let resolvedValue: string | null = null;\n\n for (const declaration of style.split(';')) {\n const separator = declaration.indexOf(':');\n\n if (separator < 0) { continue; }\n const name = declaration.slice(0, separator).trim().toLowerCase();\n\n if (name !== expectedName) { continue; }\n const value = declaration.slice(separator + 1).trim().replace(/\\s*!important\\s*$/i, '');\n\n resolvedValue = value === '' ? null : value;\n }\n\n return resolvedValue;\n}\n","import type EditableSVG from '../parse-svg/svg-parser';\nimport { readPresentationAttribute } from '../parse-svg/read-presentation-attribute';\nimport type { Element } from '@svgdotjs/svg.js';\n\nconst HORIZONTAL_LENGTH_ATTRIBUTES = new Set(['x', 'x1', 'x2', 'cx', 'width', 'rx']);\nconst VERTICAL_LENGTH_ATTRIBUTES = new Set(['y', 'y1', 'y2', 'cy', 'height', 'ry']);\nconst DIAGONAL_LENGTH_ATTRIBUTES = new Set(['r', 'stroke-width', 'stroke-dashoffset']);\n\n/** 从 SVG 元素读取数值属性;支持 px、无单位数值和常见 viewport 百分比。 */\nexport function readSVGNumberAttribute (es: EditableSVG, el: Element, attribute: string, fallback?: number): number | undefined {\n const value = es.getAttr(el, attribute);\n\n if (value == null || value === '') { return fallback; }\n if (typeof value === 'number') { return Number.isFinite(value) ? value : fallback; }\n const raw = value.trim();\n const percentage = raw.match(/^([-+]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[-+]?\\d+)?)%$/i);\n\n if (percentage != null) {\n const reference = getPercentageReference(el, attribute);\n\n return reference == null ? fallback : Number(percentage[1]) * reference / 100;\n }\n const concrete = raw.match(/^([-+]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[-+]?\\d+)?)(?:px)?$/i);\n\n if (concrete == null) { return fallback; }\n const parsed = Number(concrete[1]);\n\n return Number.isFinite(parsed) ? parsed : fallback;\n}\n\n/** 从 SVG 元素读取字符串属性。 */\nexport function readSVGStringAttribute (es: EditableSVG, el: Element, attribute: string): string {\n const value = es.getAttr(el, attribute);\n\n return typeof value === 'string' ? value : value == null ? '' : String(value);\n}\n\n/** display:none 或 visibility:hidden 的 SVG 元素不参与渲染。 */\nexport function isSVGElementVisible (es: EditableSVG, el: Element): boolean {\n if (readSVGStringAttribute(es, el, 'display').toLowerCase() === 'none') { return false; }\n\n return readSVGStringAttribute(es, el, 'visibility').toLowerCase() !== 'hidden';\n}\n\n/** 读取元素自身 opacity,不包含祖先组。 */\nexport function readSVGOwnOpacity(el: Element): number {\n const node = (el as unknown as { node?: globalThis.Element | null }).node;\n const raw = readPresentationAttribute(node, 'opacity');\n const value = raw == null || raw.trim() === '' ? 1 : Number(raw);\n\n return Number.isFinite(value) ? Math.max(0, Math.min(1, value)) : 1;\n}\n\n/** 读取元素自身 opacity,并乘入所有祖先组 opacity。 */\nexport function readSVGElementOpacity(el: Element): number {\n let opacity = 1;\n let node = (el as unknown as { node?: globalThis.Element | null }).node;\n\n while (node != null) {\n const raw = readPresentationAttribute(node, 'opacity');\n\n if (raw != null && raw.trim() !== '') {\n const value = Number(raw);\n\n if (Number.isFinite(value)) {\n opacity *= Math.max(0, Math.min(1, value));\n }\n }\n if (node.tagName.toLowerCase() === 'svg') { break; }\n node = node.parentNode as globalThis.Element | null;\n }\n\n return Math.max(0, Math.min(1, opacity));\n}\n\nfunction getPercentageReference(el: Element, attribute: string): number | undefined {\n const viewport = readSVGViewport(el);\n\n if (viewport == null) { return undefined; }\n if (HORIZONTAL_LENGTH_ATTRIBUTES.has(attribute)) { return viewport.width; }\n if (VERTICAL_LENGTH_ATTRIBUTES.has(attribute)) { return viewport.height; }\n if (DIAGONAL_LENGTH_ATTRIBUTES.has(attribute)) {\n return Math.hypot(viewport.width, viewport.height) / Math.SQRT2;\n }\n\n return undefined;\n}\n\nfunction readSVGViewport(el: Element): { width: number; height: number } | undefined {\n const node = (el as unknown as { node?: globalThis.Element | null }).node;\n const root = node?.tagName.toLowerCase() === 'svg'\n ? node\n : (node as globalThis.SVGElement | null | undefined)?.ownerSVGElement;\n\n if (root == null) { return undefined; }\n const viewBox = (root.getAttribute('viewBox') ?? '').trim().split(/[\\s,]+/).map(Number);\n const viewBoxWidth = viewBox.length === 4 && Number.isFinite(viewBox[2]) && viewBox[2] > 0 ? viewBox[2] : undefined;\n const viewBoxHeight = viewBox.length === 4 && Number.isFinite(viewBox[3]) && viewBox[3] > 0 ? viewBox[3] : undefined;\n const width = viewBoxWidth ?? parseConcreteLength(root.getAttribute('width'));\n const height = viewBoxHeight ?? parseConcreteLength(root.getAttribute('height'));\n\n return width != null && height != null ? { width, height } : undefined;\n}\n\nfunction parseConcreteLength(value: string | null): number | undefined {\n const match = value?.trim().match(/^([-+]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[-+]?\\d+)?)(?:px)?$/i);\n const parsed = match == null ? NaN : Number(match[1]);\n\n return Number.isFinite(parsed) && parsed > 0 ? parsed : undefined;\n}\n","/** 读 svg.js 元素属性,归一类型(svg.js attr 返 any)。 */\nfunction attrVal (el: Element, name: string): string | number | null | undefined {\n const v = el.attr(name) as unknown;\n\n if (v == null) { return undefined; }\n\n return v as string | number;\n}\n\n/**\n * SVG 渐变 paint 解析 → IRGradientPaint。\n *\n * 支持 linearGradient 的 userSpaceOnUse/objectBoundingBox。radialGradient 因 IR 仅有\n * gradientStart/End,使用水平直径近似;gradientTransform 只处理可稳定映射的子集。\n *\n * 坐标(IR gradient 使用归一化 UV 空间):效果运行时 shape 片元着色器用 uv0(顶点位置按 shape bbox\n * 归一化到 0-1)比对 _StartPoint/_EndPoint。故渐变起止点必须是相对 shape bbox 的 0-1 UV,\n * 不是 world-local 单位。这里把 userSpaceOnUse / objectBoundingBox 坐标统一转成 UV 存进 IR;\n * GE 适配阶段再将这些 UV 坐标映射到运行时渐变参数。\n */\nimport type EditableSVG from '../../../parse-svg/svg-parser';\nimport type { Element } from '@svgdotjs/svg.js';\nimport type { IRColor, IRGradientPaint } from '@vvfx/animation-ir';\nimport { IRPaintType } from '@vvfx/animation-ir';\nimport { mapSVGColorToIRColor } from '../../map-color';\nimport { parseTransform, transformPoint } from '../../matrix';\n\ntype GradientStops = IRGradientPaint['gradientStops'];\n\nexport interface ShapeBBox {\n minX: number;\n minY: number;\n width: number;\n height: number;\n}\n\nconst gradientElementCache = new WeakMap<object, Map<string, Element | null>>();\nconst gradientNodeCache = new WeakMap<object, Map<string, globalThis.Element | null>>();\n\nfunction findGradientElement (es: EditableSVG, id: string): Element | null {\n const root = (es.svg as unknown as { node?: unknown }).node;\n\n if (root == null || typeof root !== 'object') {\n return es.svg.findOne(`#${id}`) as unknown as Element | null;\n }\n let cache = gradientElementCache.get(root);\n\n if (cache == null) {\n cache = new Map();\n gradientElementCache.set(root, cache);\n }\n if (cache.has(id)) { return cache.get(id) ?? null; }\n const gradient = es.svg.findOne(`#${id}`) as unknown as Element | null;\n\n cache.set(id, gradient);\n\n return gradient;\n}\n\nfunction findGradientNode (root: globalThis.Element, id: string): globalThis.Element | null {\n let cache = gradientNodeCache.get(root);\n\n if (cache == null) {\n cache = new Map();\n gradientNodeCache.set(root, cache);\n }\n if (cache.has(id)) { return cache.get(id) ?? null; }\n const gradient = Array.from(root.querySelectorAll('[id]')).find(candidate => candidate.getAttribute('id') === id) ?? null;\n\n cache.set(id, gradient);\n\n return gradient;\n}\n\n/** 从渐变取 t=0.5 的颜色,作为文本 fill=url(#渐变) 的降级纯色。\n * 返回归一化 [r,g,b,a] 或 null(目标不是渐变/未找到)。\n */\nexport function getGradientMidpointColor (\n es: EditableSVG,\n raw: string | number | null | undefined,\n opacity = 1,\n): IRColor | null {\n if (typeof raw !== 'string') { return null; }\n\n const m = raw.match(/^url\\(\\s*[\"']?#([^)\"'\\s]+)\\s*[\"']?\\)$/i);\n\n if (!m) { return null; }\n const grad = findGradientElement(es, m[1]);\n\n if (grad == null || grad.node == null) { return null; }\n const tag = (grad.node.tagName || '').toLowerCase();\n\n if (tag !== 'lineargradient' && tag !== 'radialgradient') { return null; }\n const stops = parseStops(grad, opacity);\n\n return sampleStopsAt(stops, 0.5);\n}\n\nfunction sampleStopsAt (stops: NonNullable<GradientStops>, t: number): IRColor | null {\n if (stops.length === 0) { return null; }\n if (stops.length === 1) { return stops[0].slice(1) as IRColor; }\n\n let lo = stops[0];\n let hi = stops[stops.length - 1];\n\n for (let i = 0; i < stops.length - 1; i++) {\n if (stops[i][0] <= t && stops[i + 1][0] >= t) {\n lo = stops[i];\n hi = stops[i + 1];\n\n break;\n }\n }\n\n const range = hi[0] - lo[0];\n const ratio = range === 0 ? 0 : (t - lo[0]) / range;\n const mix = (a: number, b: number) => a + (b - a) * ratio;\n\n return [\n mix(lo[1], hi[1]),\n mix(lo[2], hi[2]),\n mix(lo[3], hi[3]),\n mix(lo[4], hi[4]),\n ] as IRColor;\n}\n\n/** 尝试把 fill/stroke 属性值解析为渐变 paint;非 url(#id) 返回 null。 */\nexport function resolveGradientPaint (\n es: EditableSVG,\n raw: string | number | null | undefined,\n opacity: number,\n bbox: ShapeBBox,\n): IRGradientPaint | null {\n if (typeof raw !== 'string') { return null; }\n\n const m = raw.match(/^url\\(\\s*[\"']?#([^)\"'\\s]+)\\s*[\"']?\\)$/i);\n\n if (!m) { return null; }\n\n const id = m[1];\n const grad = findGradientElement(es, id);\n\n if (grad == null || grad.node == null) { return null; }\n\n const tag = (grad.node.tagName || '').toLowerCase();\n\n if (tag === 'lineargradient') {\n return parseLinear(grad, opacity, bbox);\n }\n\n if (tag === 'radialgradient') {\n return parseRadial(grad, opacity, bbox);\n }\n\n return null;\n}\n\nfunction parseLinear (\n grad: Element,\n opacity: number,\n bbox: ShapeBBox,\n): IRGradientPaint | null {\n const units = String(grad.attr('gradientUnits') ?? 'objectBoundingBox').toLowerCase();\n // objectBoundingBox 默认值:x1=0 y1=0 x2=1 y2=0(水平从左到右)。\n let x1 = readCoord(attrVal(grad, 'x1'), units, 'x', 0, bbox);\n let y1 = readCoord(attrVal(grad, 'y1'), units, 'y', 0, bbox);\n let x2 = readCoord(attrVal(grad, 'x2'), units, 'x', 1, bbox);\n let y2 = readCoord(attrVal(grad, 'y2'), units, 'y', 0, bbox);\n const stops = parseStops(grad, opacity);\n\n if (stops.length === 0) { return null; }\n\n // gradientTransform 需要烘焙到起止点,因为 IR 没有独立的 transform 字段。\n // Effects 线性渐变使用沿起止点的投影并采用 pad 语义;当前精确处理对角缩放、平移和轴对齐渐变。\n // 旋转与非均匀缩放、shear 等组合无法用两个端点表达,保留原始渐变并由调用方报告能力边界。\n const gt = String(grad.attr('gradientTransform') ?? '').trim();\n let baked = false;\n\n if (gt !== '') {\n const M = parseTransform(gt);\n // dx/dy 在 gradientUnits 空间里的\"渐变方向\":OBB 下 x1.. 是 abs 坐标(已 readCoord 转 abs),用户空间同理。\n const dx = x2 - x1, dy = y2 - y1;\n // 仅对无旋转、无错切的轴对齐或等比缩放进行变换烘焙。\n const noShearNoRot = Math.abs(M.b) < 1e-9 && Math.abs(M.c) < 1e-9;\n const diagUniformScale = noShearNoRot && Math.abs(Math.abs(M.a) - Math.abs(M.d)) < 1e-6;\n const axisAlignedGrad = noShearNoRot && (Math.abs(dy) < 1e-9 || Math.abs(dx) < 1e-9);\n const canBake = diagUniformScale || axisAlignedGrad;\n\n if (canBake) {\n // objectBoundingBox:M 作用在 0-1 frac 坐标。先把 abs 端点映回 frac(M 在 frac 空间定义),变换后再 abs + toUV。\n // userSpaceOnUse:M 作用在 SVG 绝对坐标,直接 transformPoint。\n if (units === 'userspaceonuse') {\n const A = transformPoint(M, x1, y1), B = transformPoint(M, x2, y2);\n\n x1 = A.x; y1 = A.y; x2 = B.x; y2 = B.y;\n } else {\n const fx1 = bbox.width !== 0 ? (x1 - bbox.minX) / bbox.width : 0;\n const fy1 = bbox.height !== 0 ? (y1 - bbox.minY) / bbox.height : 0;\n const fx2 = bbox.width !== 0 ? (x2 - bbox.minX) / bbox.width : 0;\n const fy2 = bbox.height !== 0 ? (y2 - bbox.minY) / bbox.height : 0;\n const A = transformPoint(M, fx1, fy1), B = transformPoint(M, fx2, fy2);\n\n x1 = bbox.minX + A.x * bbox.width; y1 = bbox.minY + A.y * bbox.height;\n x2 = bbox.minX + B.x * bbox.width; y2 = bbox.minY + B.y * bbox.height;\n }\n baked = true;\n }\n }\n void baked;\n\n return {\n type: IRPaintType.LinearGradient,\n gradientStops: stops,\n gradientStart: toUV(x1, y1, bbox),\n gradientEnd: toUV(x2, y2, bbox),\n };\n}\n\nfunction parseRadial (\n grad: Element,\n opacity: number,\n bbox: ShapeBBox,\n): IRGradientPaint | null {\n // IR radial gradient 以 startPoint 为圆心,以 start/end 距离作为半径。\n // fx/fy 焦点偏移没有对应的 IR 字段,按中心焦点处理并由调用方报告能力边界。\n const units = String(grad.attr('gradientUnits') ?? 'objectBoundingBox').toLowerCase();\n let ccx = readCoord(attrVal(grad, 'cx'), units, 'x', 0.5, bbox);\n let ccy = readCoord(attrVal(grad, 'cy'), units, 'y', 0.5, bbox);\n let rAbs = absRadius(attrVal(grad, 'r'), units, bbox);\n const stops = parseStops(grad, opacity);\n\n if (stops.length === 0) { return null; }\n\n // IR 当前只表达圆形渐变。uniform scale 可以同时变换圆心和半径;非均匀 scale、旋转与 shear\n // 会改变圆形状或焦点,无法仅靠两个端点精确表达,因此不烘焙这些变换。\n const gt = String(grad.attr('gradientTransform') ?? '').trim();\n\n if (gt !== '') {\n const M = parseTransform(gt);\n const noShearNoRot = Math.abs(M.b) < 1e-9 && Math.abs(M.c) < 1e-9;\n const diagUniformScale = noShearNoRot && Math.abs(Math.abs(M.a) - Math.abs(M.d)) < 1e-6;\n\n if (diagUniformScale) {\n if (units === 'userspaceonuse') {\n const C = transformPoint(M, ccx, ccy);\n\n ccx = C.x; ccy = C.y;\n rAbs = Math.abs(M.a) * rAbs;\n } else {\n const fx = bbox.width !== 0 ? (ccx - bbox.minX) / bbox.width : 0;\n const fy = bbox.height !== 0 ? (ccy - bbox.minY) / bbox.height : 0;\n const C = transformPoint(M, fx, fy);\n\n ccx = bbox.minX + C.x * bbox.width; ccy = bbox.minY + C.y * bbox.height;\n rAbs = Math.abs(M.a) * rAbs;\n }\n }\n }\n\n return {\n type: IRPaintType.RadialGradient,\n gradientStops: stops,\n gradientStart: toUV(ccx, ccy, bbox),\n gradientEnd: toUV(ccx + rAbs, ccy, bbox),\n };\n}\n\n/** 解析 radial 半径。objectBoundingBox 使用 bbox 宽度作为 x 轴参考,保证转换到 UV 后半径保持一致。 */\nfunction absRadius (v: string | number | null | undefined, units: string, bbox: ShapeBBox): number {\n if (v == null || v === '') { v = 0.5; }\n const { n, isPercent } = parseCoordNum(v);\n const frac = isPercent ? n / 100 : n;\n\n if (units === 'userspaceonuse') {\n return Math.abs(frac);\n }\n\n // objectBoundingBox:半径按 x 分数映射(r_abs=frac·width),radial 端点 toUV 后 r_uv=frac,与 uv0 同系。\n return Math.abs(frac) * bbox.width;\n}\n\n/** 解析渐变坐标并保留百分号信息。 */\nfunction parseCoordNum (v: string | number | null | undefined): { n: number; isPercent: boolean } {\n if (typeof v === 'number') { return { n: v, isPercent: false }; }\n const s = String(v ?? '').trim();\n\n return { n: parseFloat(s), isPercent: s.endsWith('%') };\n}\n\n/** 把 gradient 坐标(userSpaceOnUse 绝对 / objectBoundingBox 0-1)统一转成绝对 SVG 坐标。 */\nfunction readCoord (\n v: string | number | null | undefined,\n units: string,\n axis: 'x' | 'y',\n fallback: number,\n bbox: ShapeBBox,\n): number {\n if (v == null || v === '') { v = fallback; }\n const { n, isPercent } = parseCoordNum(v);\n // 百分比转换为 0-1 分数。\n const frac = isPercent ? n / 100 : n;\n\n if (units === 'userspaceonuse') {\n return frac;\n }\n\n // objectBoundingBox:0-1 映射到 bbox。\n return axis === 'x'\n ? bbox.minX + frac * bbox.width\n : bbox.minY + frac * bbox.height;\n}\n\n/**\n * 绝对 SVG 坐标 → 相对 shape bbox 的 0-1 UV,且 Y 翻成 IR 的归一化坐标方向。\n *\n * 下游路径几何构建 的形状 aUV.y=(posY-minY)/sizeY,而 ge-ir 把形状顶点 Y 取反\n * (-point.y*ratio)成 GL 朝上 → 片元 uv0.y=1 在形状顶部(SVG y=0)。SVG 渐变坐标是 y 朝下(0=顶),\n * 故这里对 uy 做 1-uy 翻转,使 IR gradientStart/End 落到与 shader uv0 同向的 y 朝上空间。\n * 否则渐变线被竖直镜像(如斜向渐变方向上下颠倒、垂直渐变起止色互换)。\n * X 不翻(shape 顶点 X 未取反,uv0.x 与 SVG 同向)。ge-ir vec2ToGE 与 convert.restoreUV 是纯往返\n * (×ratio/÷ratio、-Y/反-Y),方向语义只在这里引入,不在那两处改。\n */\nfunction toUV (absX: number, absY: number, bbox: ShapeBBox): [number, number] {\n const ux = bbox.width !== 0 ? (absX - bbox.minX) / bbox.width : 0;\n const uy = bbox.height !== 0 ? 1 - (absY - bbox.minY) / bbox.height : 0;\n\n return [ux, uy];\n}\n\nfunction parseStops (grad: Element, opacity: number): GradientStops {\n const stopEls = grad.find('stop');\n const out: NonNullable<GradientStops> = [];\n\n for (const s of stopEls) {\n const offsetStr = String(s.attr('offset') ?? '0').trim();\n let pos = parseFloat(offsetStr);\n\n if (offsetStr.endsWith('%')) {\n pos = pos / 100;\n } else if (pos > 1) {\n // 纯数字且 >1 视作百分比形式兜底。\n pos = pos / 100;\n }\n\n const stopOpacityStr = String(s.attr('stop-opacity') ?? '');\n const stopOpacity = stopOpacityStr === '' ? 1 : Number(stopOpacityStr);\n const color = mapSVGColorToIRColor(String(s.attr('stop-color') ?? 'black'), stopOpacity * opacity);\n\n if (color != null) {\n out.push([clamp01(pos), color[0], color[1], color[2], color[3]]);\n }\n }\n\n return out;\n}\n\nfunction clamp01 (n: number): number {\n if (Number.isNaN(n)) { return 0; }\n\n return Math.max(0, Math.min(1, n));\n}\n\n/** IR 当前仅表达 pad 渐变语义;repeat 和 reflect 没有对应的 shader 参数,因此保持未映射并报告 warning。 */\n\n/** 读取渐变 stop 的 alpha 值。 */\nexport function gradientStopColorAlpha (el: Element, rawPaint: string): number[] {\n const match = rawPaint.match(/^url\\(\\s*[\"']?#([^)\"'\\s]+)\\s*[\"']?\\)$/i);\n const node = (el as unknown as { node?: globalThis.Element | null }).node;\n const root = node == null ? null : ((node as globalThis.SVGElement).ownerSVGElement ?? node);\n\n if (match == null || root == null) { return []; }\n const gradient = findGradientNode(root, match[1]);\n\n if (gradient == null) { return []; }\n\n return Array.from(gradient.children)\n .filter(child => child.tagName.toLowerCase() === 'stop')\n .map(stop => {\n const stopOpacityRaw = stop.getAttribute('stop-opacity');\n const stopOpacityValue = stopOpacityRaw == null || stopOpacityRaw.trim() === '' ? 1 : Number(stopOpacityRaw);\n const stopOpacity = Number.isFinite(stopOpacityValue) ? Math.max(0, Math.min(1, stopOpacityValue)) : 1;\n const stopColor = mapSVGColorToIRColor(stop.getAttribute('stop-color') ?? 'black', 1) ?? [0, 0, 0, 1];\n\n return stopColor[3] * stopOpacity;\n });\n}\n","/**\n * SVG `<use href=\"#id\">` 展开成实例图层。\n *\n * Effects shape 使用按值数据,没有 SVG symbol/use 的共享引用语义,因此 SVG → IR 阶段复制\n * 目标形状或文本并应用 use 的 x/y、transform 与继承样式。多次 use 会生成独立实例。\n */\nimport type EditableSVG from '../../../parse-svg/svg-parser';\nimport type { Element } from '@svgdotjs/svg.js';\nimport { IRLineCap, IRLineJoin, IRPaintType, IRShapePrimitiveType, type IRBezierPath, type IRShape, type IRShapePaint, type IRTransform, type IRVec3 } from '@vvfx/animation-ir';\nimport { readSVGElementOpacity, readSVGNumberAttribute } from '../../read-attributes';\nimport { accumulateAncestors, decomposeMatrix, IDENTITY, multiply, parseTransform, transformPoint, type SVGMatrix } from '../../matrix';\nimport { mapSVGColorToIRColor } from '../../map-color';\nimport { resolveGradientPaint, type ShapeBBox } from '../paint/resolve-gradient';\nimport { readPresentationAttribute } from '../../../parse-svg/read-presentation-attribute';\n\n/** 读取 <use> 引用的目标 id,支持 href 和 xlink:href。 */\nexport function readUseTarget (es: EditableSVG, el: Element): string | undefined {\n const href = readHref(es, el);\n\n if (href == null) { return undefined; }\n const m = href.match(/^#(.+)$/);\n\n return m ? m[1] : undefined;\n}\n\nfunction readHref (es: EditableSVG, el: Element): string | undefined {\n const href = es.getAttr(el, 'href');\n\n if (typeof href === 'string' && href !== '') { return href; }\n const xhref = es.getAttr(el, 'xlink:href');\n\n return typeof xhref === 'string' && xhref !== '' ? xhref : undefined;\n}\n\n/** 读取 <use> 的 x/y 平移属性。 */\nexport function readUseTranslate (es: EditableSVG, el: Element): { x: number; y: number } {\n const x = readSVGNumberAttribute(es, el, 'x', 0) ?? 0;\n const y = readSVGNumberAttribute(es, el, 'y', 0) ?? 0;\n\n return { x, y };\n}\n\nexport function buildUseMatrix (useEl: Element, useX: number, useY: number): SVGMatrix {\n const mAnc = accumulateAncestors(useEl);\n const selfAttr = (useEl as unknown as { node?: { getAttribute?: (n: string) => string | null } }).node?.getAttribute?.('transform') ?? '';\n const mSelf = selfAttr !== '' ? parseTransform(selfAttr) : IDENTITY;\n const mXY: SVGMatrix = { a: 1, b: 0, c: 0, d: 1, e: useX, f: useY };\n\n return multiply(multiply(mAnc, mSelf), mXY);\n}\n\n/**\n * 构建 use 实例的完整 transform。\n *\n * 矩阵顺序为 `祖先变换 × use 自身 transform × translate(x, y)`;shape.position\n * 作为实例的局部 anchor,避免在 Effects lowering 阶段重复计算形状中心。\n */\nexport function buildUseTransform (\n useEl: Element,\n shape: IRShape,\n useX: number,\n useY: number,\n targetMatrix: SVGMatrix = IDENTITY,\n targetOpacity = 1,\n): IRTransform {\n const m = multiply(buildUseMatrix(useEl, useX, useY), targetMatrix);\n const localCenter = shape.position;\n const worldCenter = transformPoint(m, localCenter[0], localCenter[1]);\n const opacity = Math.max(0, Math.min(1, readSVGElementOpacity(useEl) * targetOpacity));\n const { sx, sy, rotation } = decomposeMatrix(m);\n\n return {\n position: { type: 'static', value: [worldCenter.x, worldCenter.y, 0] as IRVec3 },\n scale: { type: 'static', value: [sx, sy, 1] },\n rotation: { z: { type: 'static', value: rotation } },\n // 使用目标形状的局部几何中心作为 anchor。\n anchor: { type: 'static', value: [localCenter[0], localCenter[1], 0] as IRVec3 },\n opacity: { type: 'static', value: opacity },\n };\n}\n\nfunction cloneShapePaint (paint: IRShapePaint): IRShapePaint {\n if (paint.type === IRPaintType.Solid) {\n return { ...paint, color: [...paint.color] as typeof paint.color };\n }\n if (paint.type === IRPaintType.Texture) { return { ...paint }; }\n\n return {\n ...paint,\n gradientStops: paint.gradientStops.map(stop => [...stop] as typeof stop),\n gradientStart: [...paint.gradientStart] as typeof paint.gradientStart,\n gradientEnd: [...paint.gradientEnd] as typeof paint.gradientEnd,\n };\n}\n\nfunction cloneBezierPath (path: IRBezierPath): IRBezierPath {\n return {\n ...path,\n points: path.points.map(point => ({ ...point })),\n inTangents: path.inTangents.map(point => ({ ...point })),\n outTangents: path.outTangents.map(point => ({ ...point })),\n };\n}\n\nfunction cloneShapeForUse (shape: IRShape): IRShape {\n const style = {\n position: [...shape.position] as typeof shape.position,\n fills: shape.fills.map(cloneShapePaint),\n strokes: shape.strokes.map(stroke => ({ ...stroke, paint: cloneShapePaint(stroke.paint) })),\n };\n\n if (shape.primitiveType === IRShapePrimitiveType.Custom) {\n return { ...shape, ...style, customPaths: shape.customPaths.map(cloneBezierPath) };\n }\n\n return { ...shape, ...style };\n}\n\n/**\n * 用 use 自身的 presentation 属性覆盖目标 shape 的 paint 与线条属性。\n * use 的显式属性优先于目标属性;未显式设置时,沿 use 所在 DOM 树读取继承值。\n * 带 filter 的 use 保留目标 paint,因为 Effects 不支持 filter,直接应用覆盖色会产生错误的硬边阴影。\n */\nexport function applyUseStyleOverrides (\n es: EditableSVG,\n useEl: Element,\n targetEl: Element | undefined,\n shape: IRShape,\n): IRShape {\n // 每个 use 都要拿到独立的值对象,不能直接复用 defs/symbol 中缓存的 shape。\n const merged = cloneShapeForUse(shape);\n\n // Effects 不支持 use 的 filter,保留目标 paint 以避免把阴影降级为硬色块。\n if (getRawAttr(useEl, 'filter') !== '') { return merged; }\n\n const bbox = computeShapeBBox(merged);\n const fills = parseUsePaint(es, useEl, targetEl, 'fill', bbox);\n const strokePaints = parseUsePaint(es, useEl, targetEl, 'stroke', bbox);\n\n if (fills !== undefined) { merged.fills = fills; }\n if (strokePaints !== undefined) {\n const fallbackStroke = merged.strokes[0];\n\n merged.strokes = strokePaints.map((paint, index) => {\n const sourceStroke = merged.strokes[index] ?? fallbackStroke;\n\n return {\n paint,\n width: sourceStroke?.width ?? 1,\n cap: sourceStroke?.cap ?? IRLineCap.Round,\n join: sourceStroke?.join ?? IRLineJoin.Miter,\n };\n });\n }\n\n const strokeWidthRaw = getRawAttr(useEl, 'stroke-width');\n const strokeWidth = strokeWidthRaw !== '' ? Number(strokeWidthRaw) : undefined;\n const cap = getRawAttr(useEl, 'stroke-linecap').toLowerCase();\n const join = getRawAttr(useEl, 'stroke-linejoin').toLowerCase();\n\n // stroke 宽/端点样式在 strokes[].width/cap/join 上覆盖(不在 shape 顶层)。\n if (merged.strokes.length > 0) {\n const firstStroke = merged.strokes[0];\n const width = strokeWidth !== undefined && Number.isFinite(strokeWidth) ? strokeWidth\n : (firstStroke.width ?? 1);\n const strokeCap = (cap === 'butt' || cap === 'round' || cap === 'square') ? cap : firstStroke.cap;\n const strokeJoin = (join === 'miter' || join === 'round' || join === 'bevel') ? join : firstStroke.join;\n\n merged.strokes = [{ ...firstStroke, width, cap: strokeCap, join: strokeJoin }, ...merged.strokes.slice(1)];\n }\n\n return merged;\n}\n\n/** 解析 use 上的 fill/stroke 覆盖;undefined=未指定保留目标原值,[]=none,其余=新 paint。 */\nfunction parsePaintOverride (\n es: EditableSVG,\n el: Element,\n attr: 'fill' | 'stroke',\n bbox: ShapeBBox,\n rawOverride?: string,\n opacityRawOverride?: string,\n): IRShapePaint[] | undefined {\n const raw = rawOverride ?? getRawAttr(el, attr);\n\n if (raw === '' || raw.toLowerCase() === 'inherit') { return undefined; }\n if (raw.toLowerCase() === 'none') { return []; } // 显式覆盖为无填充\n\n const opacityAttr = attr === 'fill' ? 'fill-opacity' : 'stroke-opacity';\n const opacityRaw = opacityRawOverride ?? getRawAttr(el, opacityAttr);\n const paintOpacity = opacityRaw === '' ? 1 : Number(opacityRaw);\n const opacity = Number.isFinite(paintOpacity) ? Math.max(0, Math.min(1, paintOpacity)) : 1;\n\n // 优先解析 paint server,无法解析时再按纯色处理。\n const gradient = resolveGradientPaint(es, raw, opacity, bbox);\n\n if (gradient != null) { return [gradient]; }\n\n const color = mapSVGColorToIRColor(raw, opacity);\n\n if (color != null) { return [{ type: IRPaintType.Solid, color }]; }\n\n return [];\n}\n\n/**\n * 按引用上下文解析 use 实例的 paint。\n *\n * 属性优先级:use 自身显式属性 > 目标元素自身显式属性 > use 祖先继承属性 > 原型默认值。\n * 实例继承属性沿 use 的 DOM 父链读取,目标元素的显式属性由目标 shape 提供。\n */\nfunction parseUsePaint (\n es: EditableSVG,\n useEl: Element,\n targetEl: Element | undefined,\n attr: 'fill' | 'stroke',\n bbox: ShapeBBox,\n): IRShapePaint[] | undefined {\n const ownRaw = getRawAttr(useEl, attr);\n\n // use 自身显式 paint 覆盖目标 paint,包括显式 none。\n if (ownRaw !== '' && ownRaw.toLowerCase() !== 'inherit') {\n return parsePaintOverride(es, useEl, attr, bbox, ownRaw);\n }\n\n // 目标元素有显式 paint 时保留目标值,不应用 use 祖先的继承值。\n const targetRaw = getRawAttr(targetEl, attr);\n\n if (targetRaw !== '' && targetRaw.toLowerCase() !== 'inherit') {\n return undefined;\n }\n\n const inheritedRaw = readUseContextAttr(useEl, attr);\n\n if (inheritedRaw == null || inheritedRaw === '' || inheritedRaw.toLowerCase() === 'inherit') {\n return undefined;\n }\n\n const opacityAttr = attr === 'fill' ? 'fill-opacity' : 'stroke-opacity';\n const inheritedOpacityRaw = readUseContextAttr(useEl, opacityAttr);\n\n return parsePaintOverride(es, useEl, attr, bbox, inheritedRaw, inheritedOpacityRaw ?? undefined);\n}\n\n/** 读取 use 所在树上最近的原始 presentation 属性,不包含 use 自身。 */\nfunction readUseContextAttr (useEl: Element, attr: string): string | undefined {\n let node: unknown = (useEl as unknown as { node?: { parentNode?: unknown } }).node?.parentNode;\n\n while (node != null) {\n const raw = readPresentationAttribute(node, attr) ?? '';\n\n if (raw !== '') { return raw; }\n node = (node as { parentNode?: unknown }).parentNode;\n }\n\n return undefined;\n}\n\n/** 读取元素自身的 presentation 属性,不包含祖先继承值。 */\nfunction getRawAttr (el: Element | undefined, attr: string): string {\n if (el == null) { return ''; }\n\n const node = (el as unknown as { node?: { getAttribute?: (n: string) => string | null } }).node;\n\n return readPresentationAttribute(node, attr) ?? '';\n}\n\n/** 根据目标 shape 的几何计算 bbox,用于渐变坐标转换。 */\nfunction computeShapeBBox (shape: IRShape): ShapeBBox {\n switch (shape.primitiveType) {\n case IRShapePrimitiveType.Rectangle:\n return {\n minX: shape.position[0] - shape.width / 2,\n minY: shape.position[1] - shape.height / 2,\n width: shape.width,\n height: shape.height,\n };\n case IRShapePrimitiveType.Ellipse:\n return {\n minX: shape.position[0] - shape.xRadius,\n minY: shape.position[1] - shape.yRadius,\n width: shape.xRadius * 2,\n height: shape.yRadius * 2,\n };\n case IRShapePrimitiveType.Polygon:\n return {\n minX: shape.position[0] - shape.radius,\n minY: shape.position[1] - shape.radius,\n width: shape.radius * 2,\n height: shape.radius * 2,\n };\n case IRShapePrimitiveType.Star:\n return {\n minX: shape.position[0] - shape.outerRadius,\n minY: shape.position[1] - shape.outerRadius,\n width: shape.outerRadius * 2,\n height: shape.outerRadius * 2,\n };\n case IRShapePrimitiveType.Custom:\n default:\n return computeCustomBBox(shape.position, shape.customPaths);\n }\n}\n\nfunction computeCustomBBox (position: [number, number], paths?: IRBezierPath[]): ShapeBBox {\n if (paths == null || paths.length === 0) {\n return { minX: position[0], minY: position[1], width: 0, height: 0 };\n }\n\n let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;\n\n for (const path of paths) {\n for (const pt of path.points) {\n const x = position[0] + pt.x;\n const y = position[1] + pt.y;\n\n minX = Math.min(minX, x);\n minY = Math.min(minY, y);\n maxX = Math.max(maxX, x);\n maxY = Math.max(maxY, y);\n }\n }\n\n return {\n minX: Number.isFinite(minX) ? minX : position[0],\n minY: Number.isFinite(minY) ? minY : position[1],\n width: Number.isFinite(maxX - minX) ? maxX - minX : 0,\n height: Number.isFinite(maxY - minY) ? maxY - minY : 0,\n };\n}\n","import type EditableSVG from '../../../parse-svg/svg-parser';\nimport type { Element } from '@svgdotjs/svg.js';\nimport type { IRLayer, IRMask, IRShape, IRTransform } from '@vvfx/animation-ir';\nimport { IRShapePrimitiveType } from '@vvfx/animation-ir';\nimport { isAxisAlignedRect, maskCoversFull, maskSizeAbnormal, rangeCovers } from '../../converter/clip/collect-geometry';\n\nexport function applyClipMask<T extends IRLayer> (es: EditableSVG, el: Element, layer: T, clipMasks: Map<string, IRMask>): T {\n const cp = String(es.getAttr(el, 'clip-path') ?? '');\n // mask 用 DOM getAttribute 读取元素自身属性,不使用 es.getAttr;后者会合并祖先属性。\n // 组级 mask 由 parse-layers 创建 null 父层,这里只处理元素自身的 mask 属性。\n const mc = (el as unknown as { node?: { getAttribute?: (n: string) => string | null } }).node?.getAttribute?.('mask') ?? '';\n const cpRef = cp.match(/^url\\(\\s*[\"']?#([^)\"'\\s]+)\\s*[\"']?\\)$/i);\n const isClip = cpRef != null;\n const ref = cpRef ?? mc.match(/^url\\(\\s*[\"']?#([^)\"'\\s]+)\\s*[\"']?\\)$/i);\n\n if (!ref) { return layer; }\n const baseMask = clipMasks.get(ref[1]);\n\n if (baseMask == null) { return layer; }\n if (isClip) { return { ...layer, mask: baseMask }; }\n\n const rebased = rebaseMaskToLocal(baseMask, layer);\n\n return rebased ? { ...layer, mask: rebased } : layer;\n}\n\n/** 将 SVG 绝对 mask 点转换为 image 的 asset-local 坐标。 */\nfunction rebaseMaskToLocal (mask: IRMask, layer: IRLayer): IRMask | null {\n const pos = readVec2(layer.transform?.position);\n const sc = readVec3(layer.transform?.scale);\n const l = layer as unknown as { asset?: { width?: number; height?: number } };\n const aw = Number(l.asset?.width) || 0;\n const ah = Number(l.asset?.height) || 0;\n\n // 退化 scale 无法建立局部坐标。\n if (sc.x === 0 || sc.y === 0) { return null; }\n\n // image mask 以 asset 左上角为原点,转换为 Effects mask 时使用 asset 中心坐标。\n if (aw > 0 && ah > 0) {\n const dispW = aw * sc.x, dispH = ah * sc.y;\n const originX = pos.x - dispW / 2; // image 显示框左上角(轴对齐)\n const originY = pos.y - dispH / 2;\n const pts = mask.path.points.map(p => ({ x: (p.x - originX) / sc.x, y: (p.y - originY) / sc.y }));\n\n if (maskCoversFull(pts, aw, ah)) { return null; }\n if (maskSizeAbnormal(pts, aw, ah)) { return null; }\n\n return { path: { points: pts, inTangents: mask.path.inTangents, outTangents: mask.path.outTangents, closed: mask.path.closed }, mode: \"add\" as const };\n }\n\n // shape 没有 asset 尺寸,mask 需要转换到以 layer anchor 为基准的 element-local 空间。\n // 逆变换同时处理位置、缩放和旋转;skew 已在 transform 分解阶段降级。\n const anchor = readVec2(layer.transform?.anchor);\n const rotRaw = (layer.transform?.rotation as { z?: { type?: string; value?: unknown; keyframes?: Array<{ value: unknown }> } } | undefined)?.z;\n const rotVal = rotRaw == null ? undefined : (rotRaw.type === 'keyframed' ? rotRaw.keyframes?.[0]?.value : rotRaw.value);\n const rot = (Array.isArray(rotVal) ? Number(rotVal[2]) : Number(rotVal)) || 0;\n const rad = -rot * Math.PI / 180;\n const c = Math.cos(rad), s = Math.sin(rad);\n const pts = mask.path.points.map(p => {\n const dx = p.x - pos.x, dy = p.y - pos.y;\n\n return {\n x: anchor.x + (c * dx - s * dy) / sc.x,\n y: anchor.y + (s * dx + c * dy) / sc.y,\n };\n });\n\n // 仅在轴对齐 mask 完全覆盖形状 bbox 时跳过 no-op mask;其他形状保留路径。\n const shapeBbox = shapeElementLocalBbox(layer);\n\n if (shapeBbox != null && isAxisAlignedRect(pts) && rangeCovers(pts, shapeBbox, 5)) {\n return null;\n }\n\n return { path: { points: pts, inTangents: mask.path.inTangents, outTangents: mask.path.outTangents, closed: mask.path.closed }, mode: \"add\" as const };\n}\n\n/** shape layer 的 element-local bbox(以 layer.transform.anchor=localCenter 为原点)。\n * rect/ellipse 用 w/h 居中;custom 用 customPaths 顶点(extents,顶点本就相对 anchor per parse-shape)。 */\nfunction shapeElementLocalBbox (layer: IRLayer): { minX: number; minY: number; maxX: number; maxY: number } | null {\n const shapes = (layer as unknown as { shapes?: IRShape[] }).shapes;\n\n if (shapes == null || shapes.length === 0) { return null; }\n const shape = shapes[0];\n\n switch (shape.primitiveType) {\n case IRShapePrimitiveType.Rectangle: {\n const r = shape;\n const w = r.width, h = r.height;\n\n return { minX: -w / 2, minY: -h / 2, maxX: w / 2, maxY: h / 2 };\n }\n case IRShapePrimitiveType.Ellipse: {\n const e = shape;\n\n return { minX: -e.xRadius, minY: -e.yRadius, maxX: e.xRadius, maxY: e.yRadius };\n }\n case IRShapePrimitiveType.Custom: {\n const cu = shape;\n let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;\n\n for (const p of cu.customPaths) {\n for (const pt of p.points) {\n minX = Math.min(minX, pt.x); minY = Math.min(minY, pt.y);\n maxX = Math.max(maxX, pt.x); maxY = Math.max(maxY, pt.y);\n }\n }\n if (!isFinite(minX)) { return null; }\n\n return { minX, minY, maxX, maxY };\n }\n default:\n return null;\n }\n}\n\nfunction readVec2 (channel: IRTransform[keyof IRTransform] | undefined): { x: number; y: number } {\n const v = readVec3(channel);\n\n return { x: v.x, y: v.y };\n}\n\nfunction readVec3 (channel: IRTransform[keyof IRTransform] | undefined): { x: number; y: number; z: number } {\n if (channel == null) { return { x: 1, y: 1, z: 1 }; }\n const c = channel as { type?: string; value?: unknown; keyframes?: Array<{ value: unknown }> };\n const value = c.type === 'keyframed' ? c.keyframes?.[0]?.value : c.value;\n\n if (Array.isArray(value) && value.length >= 3) {\n return { x: Number(value[0]) || 1, y: Number(value[1]) || 1, z: Number(value[2]) || 1 };\n }\n\n return { x: 1, y: 1, z: 1 };\n}\n","import type { Element as SVGElementNode } from '@svgdotjs/svg.js';\nimport { SVG2IR_WARNING_CODES, type SVG2IRWarning } from '../../../common/types';\nimport { collectWarning, describeElement } from '../diagnostics/collect-warnings';\n\n/**\n * 报告 IR mask 无法保留的 SVG clip/mask 语义。\n * 几何路径本身仍然支持;warning 用于显式说明坐标或 alpha 语义的降级。\n */\nexport function warnUnsupportedClipMaskFeatures (\n el: SVGElementNode,\n tag: 'clippath' | 'mask',\n emit: (warning: SVG2IRWarning) => void,\n strict: boolean,\n): void {\n const node = (el as unknown as { node?: globalThis.Element | null }).node;\n const selector = describeElement(el);\n const read = (name: string): string => node?.getAttribute?.(name)?.trim() ?? '';\n const warn = (code: SVG2IRWarning['code'], message: string): void => {\n collectWarning(emit, code, message, selector, strict);\n };\n\n if (tag === 'clippath') {\n const units = read('clipPathUnits').toLowerCase();\n\n if (units !== '' && units !== 'userspaceonuse') {\n warn(\n SVG2IR_WARNING_CODES.CLIP_PATH_UNITS_DROPPED,\n 'clipPathUnits 仅支持 userSpaceOnUse,objectBoundingBox 坐标未映射。',\n );\n }\n } else {\n const contentUnits = read('maskContentUnits').toLowerCase();\n\n if (contentUnits !== '' && contentUnits !== 'userspaceonuse') {\n warn(\n SVG2IR_WARNING_CODES.MASK_CONTENT_UNITS_DROPPED,\n 'maskContentUnits 仅支持 userSpaceOnUse,objectBoundingBox 坐标未映射。',\n );\n }\n\n if (['maskUnits', 'x', 'y', 'width', 'height'].some(attribute => read(attribute) !== '')) {\n warn(\n SVG2IR_WARNING_CODES.MASK_REGION_DROPPED,\n 'maskUnits 及 mask 的 x/y/width/height region 未映射,IR mask 只使用内容几何。',\n );\n }\n\n if (read('mask-type') !== '') {\n warn(\n SVG2IR_WARNING_CODES.MASK_TYPE_DROPPED,\n 'mask-type 的 alpha/luminance 语义未映射,IR 只保留路径 mask 几何。',\n );\n }\n }\n\n const ruleNodes = node == null ? [] : [node, ...Array.from(node.querySelectorAll('*'))];\n const hasUnsupportedRule = ruleNodes.some(candidate => (\n candidate.getAttribute('clip-rule')?.trim() !== ''\n || candidate.getAttribute('fill-rule')?.trim() !== ''\n ));\n\n if (hasUnsupportedRule) {\n warn(\n SVG2IR_WARNING_CODES.CLIP_RULE_DROPPED,\n `${tag} 内显式 clip-rule/fill-rule 未映射,IR 只保留 mask 几何,不保留该规则。`,\n );\n }\n}\n","import type EditableSVG from '../../../parse-svg/svg-parser';\nimport type { Element } from '@svgdotjs/svg.js';\nimport type {\n IRBezierPath, IRShape,\n IREllipseShape,\n} from '@vvfx/animation-ir';\nimport { IRPaintType, IRLineCap, IRLineJoin, IRShapePrimitiveType } from '@vvfx/animation-ir';\nimport { normalizePathCommands, normalizedToCustomShapePaths } from '../../normalize-path';\n\n/**\n * 将精确的 SVG 环形结构 `outer-circle + inner-circle` 转换为椭圆中心线和描边。\n *\n * 该判断比通用嵌套轮廓转换更严格:渐变填充、paint 动画、非圆形路径和任意圆角图形\n * 继续使用 custom path,避免改变这些 SVG 的填充语义。\n */\nexport function convertCircularAnnulusToEllipseStroke (\n es: EditableSVG,\n el: Element,\n shape: IRShape,\n): IREllipseShape | null {\n const { fills, strokes, position } = shape;\n const d = String(es.getAttr(el, 'd') ?? '');\n const customPaths = normalizedToCustomShapePaths(normalizePathCommands(d));\n\n if (\n fills.length !== 1\n || fills[0].type !== IRPaintType.Solid\n || strokes.length !== 0\n || customPaths.length !== 2\n || !customPaths.every(path => path.closed)\n || hasAnimatedPaintAttribute(el)\n // 存在直接 paint 动画时保留复合圆环的 custom path,图元转换无法保留该结构。\n || shouldKeepAnimatedAnnulusAsCustom(el)\n ) {\n return null;\n }\n\n const contours = customPaths\n .map(getCircularContour)\n .filter((contour): contour is CircularContour => contour != null);\n\n if (contours.length !== 2) {\n return null;\n }\n\n const outer = contours[0].radius >= contours[1].radius ? contours[0] : contours[1];\n const inner = contours[0].radius >= contours[1].radius ? contours[1] : contours[0];\n const radiusTolerance = Math.max(1e-4, outer.radius * 1e-4);\n const centersMatch = Math.hypot(outer.centerX - inner.centerX, outer.centerY - inner.centerY) <= radiusTolerance;\n const fillRule = String(es.getAttr(el, 'fill-rule') ?? 'nonzero').trim().toLowerCase();\n const oppositeWinding = Math.sign(outer.area) !== 0\n && Math.sign(inner.area) !== 0\n && Math.sign(outer.area) !== Math.sign(inner.area);\n\n // nonzero 规则下,同向嵌套轮廓是实心并集;evenodd 始终把内轮廓视为洞,\n // nonzero 下反向绕序也会形成洞。\n if (\n !centersMatch\n || inner.radius <= radiusTolerance\n || outer.radius - inner.radius <= radiusTolerance\n || (fillRule !== 'evenodd' && !oppositeWinding)\n ) {\n return null;\n }\n\n return {\n fills: [],\n strokes: fills.map(p => ({ paint: p, width: outer.radius - inner.radius, cap: IRLineCap.Round, join: IRLineJoin.Round })),\n position,\n primitiveType: IRShapePrimitiveType.Ellipse,\n xRadius: (outer.radius + inner.radius) / 2,\n yRadius: (outer.radius + inner.radius) / 2,\n };\n}\n\ninterface CircularContour {\n centerX: number;\n centerY: number;\n radius: number;\n area: number;\n}\n\nfunction getCircularContour (path: IRBezierPath): CircularContour | null {\n if (path.points.length < 4) {\n return null;\n }\n\n const points = path.points.slice();\n const inTangents = path.inTangents.slice();\n const outTangents = path.outTangents.slice();\n const first = points[0];\n const lastIndex = points.length - 1;\n\n if (Math.hypot(first.x - points[lastIndex].x, first.y - points[lastIndex].y) <= 1e-7) {\n points.pop();\n inTangents[0] = path.inTangents[lastIndex];\n inTangents.pop();\n outTangents.pop();\n }\n\n // 完整圆可以表示为四段四分之一圆弧或八段 45° 圆弧。\n // 限制可接受的结构,避免圆角矩形或任意 Bezier 环路被静默改变表示方式。\n if (\n (points.length !== 4 && points.length !== 8)\n || inTangents.length !== points.length\n || outTangents.length !== points.length\n ) {\n return null;\n }\n\n let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;\n\n for (const point of points) {\n minX = Math.min(minX, point.x);\n minY = Math.min(minY, point.y);\n maxX = Math.max(maxX, point.x);\n maxY = Math.max(maxY, point.y);\n }\n\n const centerX = (minX + maxX) / 2;\n const centerY = (minY + maxY) / 2;\n const radius = Math.max(maxX - minX, maxY - minY) / 2;\n const tolerance = Math.max(1e-4, radius * 1e-4);\n\n if (\n !Number.isFinite(radius)\n || radius <= 0\n || Math.abs((maxX - minX) - (maxY - minY)) > tolerance\n || points.some(point => Math.abs(Math.hypot(point.x - centerX, point.y - centerY) - radius) > tolerance)\n ) {\n return null;\n }\n\n const hasLeft = points.some(point => point.x <= centerX - radius * 0.9);\n const hasRight = points.some(point => point.x >= centerX + radius * 0.9);\n const hasTop = points.some(point => point.y <= centerY - radius * 0.9);\n const hasBottom = points.some(point => point.y >= centerY + radius * 0.9);\n\n if (!hasLeft || !hasRight || !hasTop || !hasBottom) {\n return null;\n }\n\n const segmentAngle = (Math.PI * 2) / points.length;\n const expectedHandleLength = radius * (4 / 3) * Math.tan(segmentAngle / 4);\n\n for (let index = 0; index < points.length; index++) {\n if (\n Math.abs(Math.hypot(inTangents[index].x, inTangents[index].y) - expectedHandleLength) > tolerance\n || Math.abs(Math.hypot(outTangents[index].x, outTangents[index].y) - expectedHandleLength) > tolerance\n ) {\n return null;\n }\n }\n\n let area = 0;\n\n for (let index = 0; index < points.length; index++) {\n const previous = points[(index + points.length - 1) % points.length];\n const current = points[index];\n\n area += previous.x * current.y - current.x * previous.y;\n }\n\n return { centerX, centerY, radius, area: area / 2 };\n}\n\nfunction hasAnimatedPaintAttribute (el: Element): boolean {\n const node = (el as unknown as { node?: globalThis.Element }).node;\n\n return Array.from(node?.children ?? []).some(child => {\n const tag = child.tagName.toLowerCase();\n\n if (tag !== 'animate' && tag !== 'set') {\n return false;\n }\n\n const attributeName = child.getAttribute('attributeName')?.toLowerCase();\n\n return attributeName === 'fill' || attributeName === 'fill-opacity' || attributeName === 'color';\n });\n}\n\nfunction hasAnimatedTransformAttribute (el: Element): boolean {\n const node = (el as unknown as { node?: globalThis.Element }).node;\n\n return Array.from(node?.children ?? []).some(child => (\n child.tagName.toLowerCase() === 'animatetransform'\n && (child.getAttribute('attributeName') ?? '').trim().toLowerCase() === 'transform'\n ));\n}\n\n/**\n * Effects 椭圆描边图元通常最适合表示动画圆环;当动画变换会改变填充洞的几何时,\n * 在满足结构条件的情况下保留复合 custom path,而不是替换为描边。\n */\nfunction shouldKeepAnimatedAnnulusAsCustom (el: Element): boolean {\n if (!hasAnimatedTransformAttribute(el)) { return false; }\n\n const node = (el as unknown as { node?: globalThis.Element }).node;\n const parent = node?.parentElement;\n\n if (parent == null) { return false; }\n\n const siblings = Array.from(parent.children)\n .filter(child => child.tagName.toLowerCase() === 'path');\n\n if (siblings.length !== 2) { return false; }\n\n const d = node?.getAttribute('d')?.replace(/\\s+/g, ' ').trim();\n\n if (d == null || siblings.some(sibling => sibling.getAttribute('d')?.replace(/\\s+/g, ' ').trim() !== d)) {\n return false;\n }\n\n return siblings.every(sibling => {\n const transforms = Array.from(sibling.children)\n .filter(child => child.tagName.toLowerCase() === 'animatetransform')\n .filter(child => (child.getAttribute('attributeName') ?? '').trim().toLowerCase() === 'transform');\n const transformTypes = new Set(transforms.map(child => (child.getAttribute('type') ?? '').trim().toLowerCase()));\n const opacityAnimation = Array.from(sibling.children).some(child => (\n (child.tagName.toLowerCase() === 'animate' || child.tagName.toLowerCase() === 'set')\n && (child.getAttribute('attributeName') ?? '').trim().toLowerCase() === 'opacity'\n ));\n\n return transformTypes.has('translate') && transformTypes.has('scale') && opacityAnimation;\n });\n}\n","/**\n * SVG stroke-dasharray 到 IR open subpath 的转换。\n *\n * 该模块只处理虚线判断和几何切分,不负责普通 shape 的解析或样式组装。\n */\nimport type EditableSVG from '../../../parse-svg/svg-parser';\nimport type { Element } from '@svgdotjs/svg.js';\nimport type { IRBezierPath, IRShapeStroke, IRShapeStyle } from '@vvfx/animation-ir';\nimport { readSVGNumberAttribute } from '../../read-attributes';\n\ntype IRShapePaint = NonNullable<IRShapeStyle['fills']>[number];\n\n/** 解析 stroke-dasharray / stroke-dashoffset → { dash(偶数长), offset∈[0,patternLen), patternLen }。null=无有效虚线。\n * SVG spec:dash 奇数个时复制一遍(e.g. \"7\" → \"7 7\");偶索引是 on(实)、奇索引是 off(虚)。 */\nexport function parseDashArray (es: EditableSVG, el: Element): { dash: number[]; offset: number; patternLen: number } | null {\n const raw = String(es.getAttr(el, 'stroke-dasharray') ?? '').trim();\n\n if (raw === '' || raw.toLowerCase() === 'none') { return null; }\n let dash = raw.split(/[\\s,]+/).map(Number).filter(n => Number.isFinite(n) && n >= 0);\n\n if (dash.length === 0) { return null; }\n if (dash.length % 2 === 1) { dash = dash.concat(dash); } // SVG: 奇数个复制一遍\n const patternLen = dash.reduce((s, n) => s + n, 0);\n\n if (patternLen <= 0) { return null; }\n const offRaw = readSVGNumberAttribute(es, el, 'stroke-dashoffset', 0) ?? 0;\n const offset = ((offRaw % patternLen) + patternLen) % patternLen; // 归一到 [0,patternLen)\n\n return { dash, offset, patternLen };\n}\n\n/** 共享虚线合成判断,并决定是否生成对应 warning。\n * 合成 ROI:有虚线描边、无 fill、无 0 长度 on-dash、所有 subpath 全直线(切线恒 {0,0})且 open。任一不满足返 false。 */\nexport function canSynthesizeDash (\n es: EditableSVG,\n el: Element,\n fills: IRShapePaint[],\n strokes: IRShapeStroke[],\n strokeWidth: number | undefined,\n customPaths: IRBezierPath[] | undefined,\n): boolean {\n if (strokes.length === 0 || strokeWidth == null || strokeWidth <= 0) { return false; }\n if (fills.length > 0) { return false; } // fill+dash 需两个 IR shape,超界\n const d = parseDashArray(es, el);\n\n if (d == null) { return false; }\n if (d.dash.some((n, i) => i % 2 === 0 && n === 0)) { return false; } // 0 长度 on-dash = 点,本不实现\n if (customPaths == null || customPaths.length === 0) { return false; }\n for (const p of customPaths) {\n if (p.closed) { return false; } // closed(polygon/path-with-Z)超界\n for (let i = 0; i < p.points.length; i++) {\n const it = p.inTangents[i], ot = p.outTangents[i];\n\n if ((it != null && (it.x !== 0 || it.y !== 0)) || (ot != null && (ot.x !== 0 || ot.y !== 0))) {\n return false; // 非零切线 = 曲线 C 段,弧长 ≠ 弦长,线性走切会错\n }\n }\n }\n\n return true;\n}\n\n/** 把直线 open subpath 按虚线 on-区间切成多条 open 子路径(绝对 SVG 坐标,之后照常 -cx/-cy 转相对)。\n * SVG dash 跨顶点连续:一个跨顶点的 on-dash 是一条横跨该顶点的段(join 在此渲,只在 dash 自身端点渲 cap)。 */\nexport function synthesizeDashSubpaths (paths: IRBezierPath[], dash: number[], offset: number, patternLen: number): IRBezierPath[] {\n // 一个 period [0,patternLen) 内的 on-区间 [a,b]。\n const onIntervals: Array<[number, number]> = [];\n let acc = 0;\n\n for (let i = 0; i < dash.length; i++) {\n if (i % 2 === 0) { onIntervals.push([acc, acc + dash[i]]); }\n acc += dash[i];\n }\n\n const out: IRBezierPath[] = [];\n\n for (const path of paths) {\n const pts = path.points;\n\n if (pts.length < 2) { continue; }\n // 累积段长 cum[i]=顶点 i 的距离(0-based),seg[i]=段 i 长度(i→i+1)。\n const cum: number[] = [0];\n const seg: number[] = [];\n\n for (let i = 0; i < pts.length - 1; i++) {\n const dx = pts[i + 1].x - pts[i].x, dy = pts[i + 1].y - pts[i].y;\n\n seg[i] = Math.hypot(dx, dy);\n cum[i + 1] = cum[i] + seg[i];\n }\n const totalLen = cum[pts.length - 1];\n\n if (totalLen <= 0) { continue; }\n\n // pattern 从 -offset 起(period k 起点 = k·patternLen - offset),正 offset 把虚线前移。\n for (let k = 0; ; k++) {\n const periodStart = k * patternLen - offset;\n\n if (periodStart > totalLen) { break; } // 本 period 最早点(periodStart)已过路径尾\n for (const [a, b] of onIntervals) {\n const s = periodStart + a, e = periodStart + b;\n const ns = Math.max(s, 0), ne = Math.min(e, totalLen);\n\n if (ne > ns) { // 裁到 [0,totalLen] 后仍有正长度才出段\n const sub = buildOpenSubpath(pts, cum, seg, ns, ne);\n\n if (sub != null) { out.push(sub); }\n }\n }\n }\n }\n\n return out;\n}\n\n/** 在直线 subpath 上按距离 [s,e] 切出一条 open 子路径:[s 处插值点, …严格位于(s,e)内的原顶点…, e 处插值点]。切线恒 {0,0}(直线段无控制柄)。 */\nfunction buildOpenSubpath (\n pts: Array<{ x: number; y: number }>,\n cum: number[],\n seg: number[],\n s: number,\n e: number,\n): IRBezierPath | null {\n // 起点所在段 i:cum[i] ≤ s ≤ cum[i+1](取最大 i 使 cum[i] ≤ s)。\n let i = 0;\n\n while (i < cum.length - 1 && cum[i + 1] < s) { i++; }\n const lastIdx = pts.length - 1;\n\n if (i >= lastIdx) { return null; } // s 落在/过尾点,无段可切\n const tS = seg[i] > 0 ? (s - cum[i]) / seg[i] : 0;\n const pStart = { x: pts[i].x + (pts[i + 1].x - pts[i].x) * tS, y: pts[i].y + (pts[i + 1].y - pts[i].y) * tS };\n const out: Array<{ x: number; y: number }> = [pStart];\n\n // 严格位于 (s, e) 内的原顶点(cum[k] > s 且 < e),作为内部顶点保留 → 跨这些顶点的 dash 在此渲 join。\n for (let k = i + 1; k < lastIdx; k++) {\n if (cum[k] > s && cum[k] < e) { out.push({ x: pts[k].x, y: pts[k].y }); }\n }\n\n // 终点所在段 m:cum[m] ≤ e ≤ cum[m+1]。\n let m = i;\n\n while (m < lastIdx && cum[m + 1] < e) { m++; }\n if (m >= lastIdx) {\n out.push({ x: pts[lastIdx].x, y: pts[lastIdx].y }); // e 落在/过尾点,直接用尾点\n } else {\n const tE = seg[m] > 0 ? (e - cum[m]) / seg[m] : 0;\n\n out.push({ x: pts[m].x + (pts[m + 1].x - pts[m].x) * tE, y: pts[m].y + (pts[m + 1].y - pts[m].y) * tE });\n }\n\n return {\n points: out,\n inTangents: out.map(() => ({ x: 0, y: 0 })),\n outTangents: out.map(() => ({ x: 0, y: 0 })),\n closed: false,\n };\n}\n","/**\n * 将 SVG 基本形状元素解析为 IRShape。\n *\n * 支持 rect、circle、ellipse、line、polygon、polyline 和 path;坐标使用 SVG 设计像素。\n */\nimport type EditableSVG from '../../../parse-svg/svg-parser';\nimport type { Element } from '@svgdotjs/svg.js';\nimport type {\n IRBezierPath,\n IRCustomShape,\n IREllipseShape,\n IRLineCap,\n IRLineJoin,\n IRRectangleShape,\n IRShapeStyle,\n} from '@vvfx/animation-ir';\nimport { IRPaintType, IRShapePrimitiveType } from '@vvfx/animation-ir';\nimport { readSVGNumberAttribute } from '../../read-attributes';\nimport { mapSVGColorToIRColor } from '../../map-color';\nimport { accumulateAncestors, decomposeMatrix } from '../../matrix';\nimport { mergeClosedSubpaths, normalizePathCommands, normalizedToCustomShapePaths } from '../../normalize-path';\nimport { resolveGradientPaint, type ShapeBBox } from '../paint/resolve-gradient';\nimport { canSynthesizeDash, parseDashArray, synthesizeDashSubpaths } from '../../converter/shape/parse-dash';\n\ntype IRShapePaint = NonNullable<IRShapeStyle['fills']>[number];\n\n/** 从元素读 fill/stroke + opacity → IRShapePaint[](纯色或渐变,可能空)。\n * 元素级 opacity 会乘到 fill/stroke alpha 上(与 SVG 渲染一致)。\n */\nfunction buildPaints (\n es: EditableSVG,\n el: Element,\n colorAttr: 'fill' | 'stroke',\n bbox: ShapeBBox,\n): IRShapePaint[] {\n const raw = es.getAttr(el, colorAttr);\n const opacityAttr = es.getAttr(el, colorAttr === 'fill' ? 'fill-opacity' : 'stroke-opacity');\n const paintOpacity = opacityAttr == null || opacityAttr === '' ? 1 : Number(opacityAttr);\n const opacity = Number.isFinite(paintOpacity) ? Math.max(0, Math.min(1, paintOpacity)) : 1;\n\n const rawStr = typeof raw === 'string' ? raw : raw == null ? '' : String(raw);\n\n // url(#id) 解析失败时按 SVG 规范视为 none。\n if (/^url\\(\\s*[\"']?#/.test(rawStr)) {\n const gradient = resolveGradientPaint(es, raw, opacity, bbox);\n\n return gradient != null ? [gradient] : [];\n }\n\n // SVG presentation attribute 的初始值不同:fill 默认为不透明黑色,stroke 默认为 none。\n // 当元素及其祖先都没有设置 paint 时,EditableSVG 返回空值,因此这里补回 SVG 默认 fill。\n const initialPaint = colorAttr === 'fill' ? 'black' : null;\n const color = mapSVGColorToIRColor(rawStr === '' ? initialPaint : rawStr, opacity);\n const paints: IRShapePaint[] = [];\n\n if (color != null) {\n paints.push({ type: IRPaintType.Solid, color });\n }\n\n return paints;\n}\n\n/** 读 borderRadius 风格字段:返 number 或 undefined(解析底座数值属性返 number)。 */\n/** SVG <rect x y width height rx ry> → IRRectangleShape。 */\nexport function parseRect (es: EditableSVG, el: Element): IRRectangleShape {\n const x = readSVGNumberAttribute(es, el, 'x', 0) ?? 0;\n const y = readSVGNumberAttribute(es, el, 'y', 0) ?? 0;\n const width = readSVGNumberAttribute(es, el, 'width', 0) ?? 0;\n const height = readSVGNumberAttribute(es, el, 'height', 0) ?? 0;\n // rx 优先,缺则用 ry(svg 规范 rx/ry 任一缺失时另一值兜底)。\n const rxRaw = readSVGNumberAttribute(es, el, 'rx');\n const rx = rxRaw ?? readSVGNumberAttribute(es, el, 'ry') ?? 0;\n const cx = x + width / 2;\n const cy = y + height / 2;\n const style = buildStyle(es, el, cx, cy, { minX: x, minY: y, width, height });\n\n // Animation IR cornerRadius 使用局部像素,且不能超过短边的一半。\n const halfMin = Math.min(width, height) / 2;\n const cornerRadius = rx > 0 && halfMin > 0 ? Math.min(rx, halfMin) : 0;\n\n return { ...style, primitiveType: IRShapePrimitiveType.Rectangle, width, height, ...(cornerRadius ? { cornerRadius } : {}) };\n}\n\n/** SVG <circle cx cy r> / <ellipse cx cy rx ry> → IREllipseShape。 */\nexport function parseEllipse (es: EditableSVG, el: Element, isCircle: boolean): IREllipseShape {\n const cx = readSVGNumberAttribute(es, el, 'cx', 0) ?? 0;\n const cy = readSVGNumberAttribute(es, el, 'cy', 0) ?? 0;\n const rx = isCircle ? readSVGNumberAttribute(es, el, 'r', 0) ?? 0 : readSVGNumberAttribute(es, el, 'rx', 0) ?? 0;\n const ry = isCircle ? rx : readSVGNumberAttribute(es, el, 'ry', 0) ?? 0;\n const style = buildStyle(es, el, cx, cy, { minX: cx - rx, minY: cy - ry, width: rx * 2, height: ry * 2 });\n\n return { ...style, primitiveType: IRShapePrimitiveType.Ellipse, xRadius: rx, yRadius: ry };\n}\n\n/** SVG <path d> / <polygon points> / <polyline points> / <line x1 y1 x2 y2> → IRCustomShape。 */\nexport function parseCustomPath (es: EditableSVG, el: Element, kind: 'path' | 'polygon' | 'polyline' | 'line'): IRCustomShape | null {\n let d = '';\n\n if (kind === 'path') {\n d = String(es.getAttr(el, 'd') ?? '');\n } else if (kind === 'polygon' || kind === 'polyline') {\n const pointsStr = String(es.getAttr(el, 'points') ?? '');\n const nums = (pointsStr.match(/-?\\d*\\.?\\d+(?:[eE][-+]?\\d+)?/g) ?? []).map(Number);\n const moveto = nums.length >= 2 ? `M${nums[0]} ${nums[1]}` : '';\n const lines = [];\n\n for (let i = 2; i + 1 < nums.length; i += 2) {\n lines.push(`L${nums[i]} ${nums[i + 1]}`);\n }\n d = [moveto, ...lines, kind === 'polygon' ? 'Z' : ''].join(' ');\n } else if (kind === 'line') {\n const x1 = readSVGNumberAttribute(es, el, 'x1', 0) ?? 0;\n const y1 = readSVGNumberAttribute(es, el, 'y1', 0) ?? 0;\n const x2 = readSVGNumberAttribute(es, el, 'x2', 0) ?? 0;\n const y2 = readSVGNumberAttribute(es, el, 'y2', 0) ?? 0;\n\n d = `M${x1} ${y1} L${x2} ${y2}`;\n }\n\n const cmds = normalizePathCommands(d, {\n // 直接旋转动画使用更细的圆弧细分;静态路径和 mask 几何保留默认细分与边界计算。\n arcSegmentAngle: hasDirectAnimatedRotate(el) ? fineArcSegmentAngle(d) : undefined,\n });\n\n if (cmds.length === 0) {\n return null;\n }\n\n let customPaths = normalizedToCustomShapePaths(cmds);\n\n if (customPaths.length === 0) {\n return null;\n }\n\n // 几何中心作为 shape.position。\n let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;\n\n for (const p of customPaths) {\n for (const pt of p.points) {\n minX = Math.min(minX, pt.x); minY = Math.min(minY, pt.y);\n maxX = Math.max(maxX, pt.x); maxY = Math.max(maxY, pt.y);\n }\n }\n\n const cx = (minX + maxX) / 2;\n const cy = (minY + maxY) / 2;\n const style = buildStyle(es, el, cx, cy, { minX, minY, width: maxX - minX, height: maxY - minY });\n\n // SVG 的 fill 初始值是 black,但 <line> 没有封闭面积,fill 对它不产生任何视觉结果。\n // IR 若保留该默认 fill,会把虚线直线误判成 fill+dash,进而跳过精确的 dash 子路径合成。\n if (kind === 'line') {\n style.fills = [];\n }\n\n // 闭合填充路径且没有描边时,把多个 sub-path 缝成一条路径让 Effects 的 odd 填充规则\n // 正确处理洞;否则每个 sub-path 会被独立 triangulate/fill,导致“洞”也被填充。\n // 有描边时保留原结构,避免桥接线产生额外描边。\n const hasFillOnly = style.fills.length > 0 && style.strokes.length === 0;\n\n if (hasFillOnly && customPaths.length > 1 && customPaths.every(p => p.closed) && shouldMergeClosedFillPaths(es, el, customPaths)) {\n customPaths = mergeClosedSubpaths(customPaths);\n }\n\n // Effects 没有 native dash;对无填充、开放且由直线组成的路径,将 on 区间切成多个\n // open subpath,由独立描边复现 SVG 的虚线与端点语义。其他形态保留 warning。\n if (canSynthesizeDash(es, el, style.fills, style.strokes, style.strokes[0]?.width, customPaths)) {\n const d = parseDashArray(es, el);\n\n if (d != null) {\n customPaths = synthesizeDashSubpaths(customPaths, d.dash, d.offset, d.patternLen);\n }\n }\n\n // IR customPath 顶点相对于 shape.position 保存;切线已经是相对控制柄。\n const relativePaths = customPaths.map(p => ({\n closed: p.closed,\n points: p.points.map(pt => ({ x: pt.x - cx, y: pt.y - cy })),\n inTangents: p.inTangents,\n outTangents: p.outTangents,\n }));\n\n return { ...style, primitiveType: IRShapePrimitiveType.Custom, customPaths: relativePaths };\n}\n\nfunction hasDirectAnimatedRotate (el: Element): boolean {\n const node = (el as unknown as { node?: globalThis.Element }).node;\n\n return Array.from(node?.children ?? []).some(child => (\n child.tagName.toLowerCase() === 'animatetransform'\n && (child.getAttribute('attributeName') ?? '').trim().toLowerCase() === 'transform'\n && (child.getAttribute('type') ?? '').trim().toLowerCase() === 'rotate'\n ));\n}\n\nfunction fineArcSegmentAngle (d: string): number | undefined {\n const arcCount = (d.match(/[Aa]/g) ?? []).length;\n\n return arcCount >= 7 ? Math.PI / 32 : undefined;\n}\n\n/**\n * Effects custom shape 三角化使用 odd/even 轮廓奇偶规则。对于 SVG nonzero 规则,\n * 同向嵌套轮廓没有零绕数区域,因此将每个轮廓作为独立填充图形可以避免内轮廓\n * 被 odd 规则误判为洞;反向绕序仍需要 bridge path 来正确表示外轮廓与内洞。\n */\nfunction shouldMergeClosedFillPaths (es: EditableSVG, el: Element, paths: IRBezierPath[]): boolean {\n const fillRule = String(es.getAttr(el, 'fill-rule') ?? 'nonzero').trim().toLowerCase();\n\n if (fillRule !== 'nonzero') { return true; }\n\n // 端点多边形面积不足以判断带曲线轮廓的绕数;保守地沿用桥接路径,避免把\n // 曲线/弧线的 nonzero 语义误判成独立填充。\n if (paths.some(path => path.inTangents.some(nonZeroVector) || path.outTangents.some(nonZeroVector))) {\n return true;\n }\n\n const signs = paths\n .map(path => signedPathArea(path))\n .filter(area => Math.abs(area) > 1e-9)\n .map(area => Math.sign(area));\n\n return signs.length === 0 || !signs.every(sign => sign === signs[0]);\n}\n\nfunction nonZeroVector (vector: { x: number; y: number }): boolean {\n return Math.abs(vector.x) > 1e-9 || Math.abs(vector.y) > 1e-9;\n}\n\nfunction signedPathArea (path: IRBezierPath): number {\n let area = 0;\n\n for (let i = 0; i < path.points.length; i++) {\n const prev = path.points[(i + path.points.length - 1) % path.points.length];\n const current = path.points[i];\n\n area += prev.x * current.y - current.x * prev.y;\n }\n\n return area / 2;\n}\n\n/** 返回祖先变换对几何的等效均匀缩放,用于 non-scaling-stroke 的宽度补偿。 */\nfunction accumulatedStrokeScale (el: Element): number {\n const m = accumulateAncestors(el);\n const { sx, sy } = decomposeMatrix(m);\n\n return Math.sqrt(Math.abs(sx * sy));\n}\n\n/** 读 fill/stroke/strokeWidth/cap/join + position 共用样式。 */\nfunction buildStyle (es: EditableSVG, el: Element, posX: number, posY: number, bbox: ShapeBBox): IRShapeStyle {\n const fills = buildPaints(es, el, 'fill', bbox);\n const strokePaints = buildPaints(es, el, 'stroke', bbox);\n const strokeWidthRaw = readSVGNumberAttribute(es, el, 'stroke-width');\n const cap = String(es.getAttr(el, 'stroke-linecap') ?? '').toLowerCase();\n const join = String(es.getAttr(el, 'stroke-linejoin') ?? '').toLowerCase();\n\n // SVG non-scaling-stroke 要求描边宽度不随祖先和 viewport 缩放;Effects 没有对应字段,\n // 因此在 IR 阶段按累计几何缩放预先调整 strokeWidth。\n const ve = String(es.getAttr(el, 'vector-effect') ?? '').toLowerCase();\n const nonScaling = ve === 'non-scaling-stroke';\n const scale = nonScaling ? accumulatedStrokeScale(el) : 0;\n const applyNonScaling = nonScaling && scale > 0 && isFinite(scale);\n\n // stroke 宽/端点样式挂在 strokes[]上(不在 shape 顶层)。SVG stub strokeWidth=1,端点/连接默认 round/miter。\n const defaultWidth = strokeWidthRaw != null ? strokeWidthRaw : (strokePaints.length > 0 ? 1 : 1);\n const resolvedWidth = applyNonScaling ? defaultWidth / scale : defaultWidth;\n const resolvedCap: IRLineCap = cap === 'butt' ? 'butt' : cap === 'square' ? 'square' : 'round';\n const resolvedJoin: IRLineJoin = join === 'round' ? 'round' : join === 'bevel' ? 'bevel' : 'miter';\n const strokes = strokePaints.map(p => ({\n paint: p,\n width: resolvedWidth,\n cap: resolvedCap,\n join: resolvedJoin,\n }));\n\n return { fills, strokes, position: [posX, posY] };\n}\n","import type EditableSVG from '../../../parse-svg/svg-parser';\nimport type { Element } from '@svgdotjs/svg.js';\nimport type { IRShape } from '@vvfx/animation-ir';\nimport { convertCircularAnnulusToEllipseStroke } from './convert-annulus';\nimport { parseCustomPath, parseEllipse, parseRect } from './parse-shape-primitives';\n\nexport function parseShapeElement (es: EditableSVG, el: Element, tag: string): IRShape | null {\n switch (tag) {\n case 'rect':\n return parseRect(es, el);\n case 'circle':\n return parseEllipse(es, el, true);\n case 'ellipse':\n return parseEllipse(es, el, false);\n case 'path': {\n const shape = parseCustomPath(es, el, 'path');\n\n return shape == null ? null : convertCircularAnnulusToEllipseStroke(es, el, shape) ?? shape;\n }\n case 'polygon':\n return parseCustomPath(es, el, 'polygon');\n case 'polyline':\n return parseCustomPath(es, el, 'polyline');\n case 'line':\n return parseCustomPath(es, el, 'line');\n default:\n return null;\n }\n}\n","export const SVG_DECLARATION_CONTEXT_TAGS = new Set(['defs', 'clippath', 'mask', 'symbol', 'pattern']);\n\nexport const SVG_UNSUPPORTED_ELEMENT_TAGS = new Set([\n 'clippath', 'mask', 'pattern', 'filter', 'foreignobject',\n 'animate', 'animatetransform', 'animatemotion', 'set', 'marker', 'title', 'desc', 'metadata', 'style',\n]);\n","import type EditableSVG from '../../../parse-svg/svg-parser';\nimport type { Element } from '@svgdotjs/svg.js';\nimport type { IRAsset, IRFontAsset, IRLayer, IRMask, IRShape, IRTextContent } from '@vvfx/animation-ir';\nimport type { SVG2IRWarning } from '../../../common/types';\nimport type { SVGPreservedPaintAnimation, SVGPreservedShapeAnimation, SVGPreservedTextData } from '../../../svg-preserved-data';\nimport { buildClipMask } from '../clip/build-clip-mask';\nimport { applyClipMask } from '../clip/apply-mask';\nimport { warnUnsupportedClipMaskFeatures } from '../clip/warn-unsupported';\nimport { readUseTarget } from '../use/expand-use';\nimport { parseShapeElement } from '../shape/parse-shape-element';\nimport { SVG_DECLARATION_CONTEXT_TAGS } from './element-categories';\n\n/** 构造 layer 转换会话所需的输入。 */\nexport interface SVGLayerBuildOptions {\n frameRate: number;\n durationSeconds: number;\n emit: (warning: SVG2IRWarning) => void;\n strict: boolean;\n width: number;\n height: number;\n textDataByLayerId?: Map<string, SVGPreservedTextData>;\n measureText?: (fontDesc: string, text: string) => { width: number };\n imageNaturalSizes?: Map<string, { width: number; height: number }>;\n resourceBaseUrl?: string;\n smilDurationSink?: { value: number };\n paintAnimationsByLayerId?: Map<string, SVGPreservedPaintAnimation[]>;\n shapeAnimationsByLayerId?: Map<string, SVGPreservedShapeAnimation>;\n}\n\n/** 各元素转换器共享的只读环境。 */\nexport interface SVGConversionEnvironment {\n readonly es: EditableSVG;\n readonly rootEl: Element;\n readonly frameRate: number;\n readonly durationSeconds: number;\n readonly outFrame: number;\n readonly emit: (warning: SVG2IRWarning) => void;\n readonly strict: boolean;\n readonly width: number;\n readonly height: number;\n readonly compCenterX: number;\n readonly compCenterY: number;\n readonly smilDurationSink?: { value: number };\n}\n\n/** SVG 文档索引。 */\nexport interface SVGElementLookup {\n readonly idEls: ReadonlyMap<string, Element>;\n readonly idShapes: ReadonlyMap<string, IRShape>;\n readonly idGroups: ReadonlyMap<string, Element>;\n readonly idSymbols: ReadonlyMap<string, Element>;\n readonly idImages: ReadonlyMap<string, Element>;\n readonly symbolShapesById: ReadonlyMap<string, Array<{ element: Element; shape: IRShape }>>;\n readonly idTextEls: ReadonlyMap<string, Element>;\n readonly idTextPureUse: ReadonlySet<string>;\n}\n\n/** 图层转换器可写入的输出接口。 */\nexport interface LayerOutput {\n allocateLayerIndex: () => number;\n peekLayerIndex: () => number;\n appendLayer: (layer: IRLayer, element: Element, applyElementClip?: boolean) => void;\n appendAsset: (asset: IRAsset) => void;\n registerTextFontAsset: (content: IRTextContent, info: SVGPreservedTextData) => void;\n}\n\n/** 单次 SVG 转换的完整状态。 */\nexport interface SVGConversionSession extends SVGConversionEnvironment, SVGElementLookup, LayerOutput {\n readonly all: Element[];\n readonly clipMasks: ReadonlyMap<string, IRMask>;\n readonly groupMaskGNodeToIndex: Map<globalThis.Element, number>;\n readonly layers: IRLayer[];\n readonly assets: IRAsset[];\n readonly textDataByLayerId?: Map<string, SVGPreservedTextData>;\n readonly measureText?: (fontDesc: string, text: string) => { width: number };\n readonly imageNaturalSizes?: Map<string, { width: number; height: number }>;\n readonly resourceBaseUrl?: string;\n readonly paintAnimationsByLayerId?: Map<string, SVGPreservedPaintAnimation[]>;\n readonly shapeAnimationsByLayerId?: Map<string, SVGPreservedShapeAnimation>;\n readonly isDeclarationContext: (element: Element) => boolean;\n readonly nearestMaskedGroupAncestor: (element: Element) => number | undefined;\n readonly withGroupParent: <T extends IRLayer>(layer: T, element: Element) => T;\n readonly warnReferencedClipMaskFeatures: (element: Element) => void;\n}\n\n/** Shape 元素转换所需的上下文。 */\nexport interface ShapeConversionContext extends SVGConversionEnvironment {\n readonly idEls: ReadonlyMap<string, Element>;\n readonly allocateLayerIndex: () => number;\n readonly appendLayer: (layer: IRLayer, element: Element, applyElementClip?: boolean) => void;\n readonly paintAnimationsByLayerId?: Map<string, SVGPreservedPaintAnimation[]>;\n readonly shapeAnimationsByLayerId?: Map<string, SVGPreservedShapeAnimation>;\n}\n\n/** Text 元素转换所需的上下文。 */\nexport interface TextConversionContext extends SVGConversionEnvironment {\n readonly idEls: ReadonlyMap<string, Element>;\n readonly measureText?: (fontDesc: string, text: string) => { width: number };\n readonly textDataByLayerId?: Map<string, SVGPreservedTextData>;\n readonly allocateLayerIndex: () => number;\n readonly peekLayerIndex: () => number;\n readonly appendLayer: (layer: IRLayer, element: Element, applyElementClip?: boolean) => void;\n readonly registerTextFontAsset: (content: IRTextContent, info: SVGPreservedTextData) => void;\n}\n\n/** Image 元素转换所需的上下文。 */\nexport interface ImageConversionContext extends SVGConversionEnvironment {\n readonly idEls: ReadonlyMap<string, Element>;\n readonly imageNaturalSizes?: ReadonlyMap<string, { width: number; height: number }>;\n readonly resourceBaseUrl?: string;\n readonly allocateLayerIndex: () => number;\n readonly appendLayer: (layer: IRLayer, element: Element, applyElementClip?: boolean) => void;\n readonly appendAsset: (asset: IRAsset) => void;\n}\n\n/** Use / symbol 元素转换所需的上下文。 */\nexport interface UseConversionContext extends SVGConversionEnvironment {\n readonly idEls: ReadonlyMap<string, Element>;\n readonly idShapes: ReadonlyMap<string, IRShape>;\n readonly idGroups: ReadonlyMap<string, Element>;\n readonly idSymbols: ReadonlyMap<string, Element>;\n readonly idImages: ReadonlyMap<string, Element>;\n readonly symbolShapesById: ReadonlyMap<string, Array<{ element: Element; shape: IRShape }>>;\n readonly idTextEls: ReadonlyMap<string, Element>;\n readonly idTextPureUse: ReadonlySet<string>;\n readonly allocateLayerIndex: () => number;\n readonly peekLayerIndex: () => number;\n readonly appendLayer: (layer: IRLayer, element: Element, applyElementClip?: boolean) => void;\n readonly registerTextFontAsset: (content: IRTextContent, info: SVGPreservedTextData) => void;\n readonly textDataByLayerId?: Map<string, SVGPreservedTextData>;\n readonly measureText?: (fontDesc: string, text: string) => { width: number };\n readonly imageNaturalSizes?: ReadonlyMap<string, { width: number; height: number }>;\n readonly resourceBaseUrl?: string;\n readonly appendAsset: (asset: IRAsset) => void;\n}\n\n/** Group 元素转换所需的上下文。 */\nexport interface GroupConversionContext extends SVGConversionEnvironment {\n readonly idEls: ReadonlyMap<string, Element>;\n readonly groupMaskGNodeToIndex: Map<globalThis.Element, number>;\n readonly allocateLayerIndex: () => number;\n readonly appendLayer: (layer: IRLayer, element: Element, applyElementClip?: boolean) => void;\n}\n\nfunction ancestorTagNames (el: Element): string[] {\n const names: string[] = [];\n let node: unknown = (el as unknown as { node?: { parentNode?: unknown } }).node?.parentNode;\n\n while (node != null) {\n const tag = (node as { tagName?: string }).tagName?.toLowerCase();\n\n if (tag == null || tag === 'svg') { break; }\n names.push(tag);\n node = (node as { parentNode?: unknown }).parentNode;\n }\n\n return names;\n}\n\nfunction collectSymbolShapes (\n es: EditableSVG,\n symbolEl: Element,\n): Array<{ element: Element; shape: IRShape }> {\n const result: Array<{ element: Element; shape: IRShape }> = [];\n\n for (const element of symbolEl.find('*')) {\n if (!isRenderableSymbolDescendant(element, symbolEl)) { continue; }\n const tag = element.node?.tagName?.toLowerCase() ?? '';\n const shape = parseShapeElement(es, element, tag);\n\n if (shape != null) {\n result.push({ element, shape });\n }\n }\n\n return result;\n}\n\nfunction isRenderableSymbolDescendant (element: Element, symbolEl: Element): boolean {\n let node = element.node.parentNode as globalThis.Element | null;\n\n while (node != null && node !== symbolEl.node) {\n if (SVG_DECLARATION_CONTEXT_TAGS.has(node.tagName.toLowerCase())) { return false; }\n node = node.parentNode as globalThis.Element | null;\n }\n\n return node === symbolEl.node;\n}\n\nexport function createSVGConversionSession (\n es: EditableSVG,\n options: SVGLayerBuildOptions,\n): SVGConversionSession {\n const all = es.svg.find('*');\n const rootEl = es.svg;\n const clipMasks = new Map<string, IRMask>();\n const groupMaskGNodeToIndex = new Map<globalThis.Element, number>();\n const idShapes = new Map<string, IRShape>();\n const idGroups = new Map<string, Element>();\n const idSymbols = new Map<string, Element>();\n const idImages = new Map<string, Element>();\n const symbolShapesById = new Map<string, Array<{ element: Element; shape: IRShape }>>();\n const idTextEls = new Map<string, Element>();\n const idTextPureUse = new Set<string>();\n const idEls = new Map<string, Element>();\n const warnedClipMaskDefinitions = new Set<string>();\n const layers: IRLayer[] = [];\n const assets: IRAsset[] = [];\n const registeredAssetIds = new Set<string>();\n const fontAssetIdByDescriptor = new Map<string, string>();\n let nextLayerIndex = 0;\n\n for (const element of all) {\n const tag = element.node?.tagName?.toLowerCase() ?? '';\n\n if (tag !== 'clippath' && tag !== 'mask') { continue; }\n const id = String(es.getAttr(element, 'id') ?? '');\n\n if (id === '') { continue; }\n const mask = buildClipMask(es, element, rootEl, tag === 'mask');\n\n if (mask != null) { clipMasks.set(id, mask); }\n }\n\n for (const element of all) {\n const tag = element.node?.tagName?.toLowerCase() ?? '';\n const id = String(es.getAttr(element, 'id') ?? '');\n\n if (tag === 'use') {\n const href = readUseTarget(es, element);\n const useFilter = element.node?.getAttribute('filter') ?? '';\n\n if (href != null && (useFilter === '' || useFilter === 'none')) { idTextPureUse.add(href); }\n }\n\n if (id === '') { continue; }\n idEls.set(id, element);\n const shape = parseShapeElement(es, element, tag);\n\n if (shape != null) { idShapes.set(id, shape); }\n if (tag === 'g') { idGroups.set(id, element); }\n if (tag === 'symbol') { idSymbols.set(id, element); }\n if (tag === 'image') { idImages.set(id, element); }\n if (tag === 'text') { idTextEls.set(id, element); }\n }\n\n for (const [id, symbol] of idSymbols) {\n symbolShapesById.set(id, collectSymbolShapes(es, symbol));\n }\n\n const nearestMaskedGroupAncestor = (element: Element): number | undefined => {\n let node: unknown = element.node?.parentNode;\n\n while (node != null) {\n const index = groupMaskGNodeToIndex.get(node as globalThis.Element);\n\n if (index != null) { return index; }\n const tag = (node as { tagName?: string }).tagName?.toLowerCase();\n\n if (tag == null || tag === 'svg') { break; }\n node = (node as { parentNode?: unknown }).parentNode;\n }\n\n return undefined;\n };\n const withGroupParent = <T extends IRLayer>(layer: T, element: Element): T => {\n const parentIndex = nearestMaskedGroupAncestor(element);\n\n if (parentIndex == null || layer.mask != null) { return layer; }\n\n return { ...layer, parentId: `${parentIndex}` };\n };\n const appendLayer = (layer: IRLayer, element: Element, applyElementClip = true): void => {\n const clippedLayer = applyElementClip ? applyClipMask(es, element, layer, clipMasks) : layer;\n\n layers.push(withGroupParent(clippedLayer, element));\n };\n const appendAsset = (asset: IRAsset): void => {\n if (registeredAssetIds.has(asset.id)) { return; }\n\n assets.push(asset);\n registeredAssetIds.add(asset.id);\n };\n const registerTextFontAsset = (content: IRTextContent, info: SVGPreservedTextData): void => {\n const descriptor = `${info.fontFamily}\\u0000${info.fontWeight}\\u0000${info.fontStyle}`;\n let assetId = fontAssetIdByDescriptor.get(descriptor);\n\n if (assetId == null) {\n assetId = `font:${fontAssetIdByDescriptor.size}`;\n fontAssetIdByDescriptor.set(descriptor, assetId);\n const asset: IRFontAsset = {\n id: assetId,\n type: 'font',\n family: info.fontFamily,\n style: info.fontStyle,\n weight: info.fontWeight,\n source: { kind: 'system' },\n };\n\n appendAsset(asset);\n }\n content.fontAssetId = assetId;\n };\n const warnReferencedClipMaskFeatures = (element: Element): void => {\n const node = element.node;\n\n for (const attribute of ['clip-path', 'mask'] as const) {\n const value = node?.getAttribute(attribute)?.trim() ?? '';\n const match = value.match(/^url\\(\\s*[\"']?#([^)'\"\\s]+)\\s*[\"']?\\)$/i);\n\n if (match == null) { continue; }\n const definition = idEls.get(match[1]);\n const definitionTag = definition?.node?.tagName?.toLowerCase();\n\n if (definition == null || (definitionTag !== 'clippath' && definitionTag !== 'mask')) { continue; }\n\n const key = `${definitionTag}:${match[1]}`;\n\n if (warnedClipMaskDefinitions.has(key)) { continue; }\n warnedClipMaskDefinitions.add(key);\n warnUnsupportedClipMaskFeatures(definition, definitionTag, options.emit, options.strict);\n }\n };\n\n return {\n es,\n all,\n rootEl,\n frameRate: options.frameRate,\n durationSeconds: options.durationSeconds,\n outFrame: options.durationSeconds * options.frameRate,\n emit: options.emit,\n strict: options.strict,\n width: options.width,\n height: options.height,\n compCenterX: options.width / 2,\n compCenterY: options.height / 2,\n textDataByLayerId: options.textDataByLayerId,\n measureText: options.measureText,\n imageNaturalSizes: options.imageNaturalSizes,\n resourceBaseUrl: options.resourceBaseUrl,\n smilDurationSink: options.smilDurationSink,\n paintAnimationsByLayerId: options.paintAnimationsByLayerId,\n shapeAnimationsByLayerId: options.shapeAnimationsByLayerId,\n clipMasks,\n groupMaskGNodeToIndex,\n idShapes,\n idGroups,\n idSymbols,\n idImages,\n symbolShapesById,\n idTextEls,\n idTextPureUse,\n idEls,\n layers,\n assets,\n allocateLayerIndex: () => nextLayerIndex++,\n peekLayerIndex: () => nextLayerIndex,\n appendLayer,\n appendAsset,\n registerTextFontAsset,\n isDeclarationContext: element => ancestorTagNames(element).some(tag => SVG_DECLARATION_CONTEXT_TAGS.has(tag)),\n nearestMaskedGroupAncestor,\n withGroupParent,\n warnReferencedClipMaskFeatures,\n };\n}\n\nexport function createSVGConversionEnvironment (session: SVGConversionSession): SVGConversionEnvironment {\n return {\n es: session.es,\n rootEl: session.rootEl,\n frameRate: session.frameRate,\n durationSeconds: session.durationSeconds,\n outFrame: session.outFrame,\n emit: session.emit,\n strict: session.strict,\n width: session.width,\n height: session.height,\n compCenterX: session.compCenterX,\n compCenterY: session.compCenterY,\n smilDurationSink: session.smilDurationSink,\n };\n}\n\nexport function createSVGElementLookup (session: SVGConversionSession): SVGElementLookup {\n return {\n idEls: session.idEls,\n idShapes: session.idShapes,\n idGroups: session.idGroups,\n idSymbols: session.idSymbols,\n idImages: session.idImages,\n symbolShapesById: session.symbolShapesById,\n idTextEls: session.idTextEls,\n idTextPureUse: session.idTextPureUse,\n };\n}\n\nexport function createLayerOutput (session: SVGConversionSession): LayerOutput {\n return {\n allocateLayerIndex: session.allocateLayerIndex,\n peekLayerIndex: session.peekLayerIndex,\n appendLayer: session.appendLayer,\n appendAsset: session.appendAsset,\n registerTextFontAsset: session.registerTextFontAsset,\n };\n}\n","import type EditableSVG from '../../../parse-svg/svg-parser';\nimport type { Element } from '@svgdotjs/svg.js';\nimport type { SVG2IRWarning, SVG2IRWarningCode } from '../../../common/types';\nimport { SVG2IR_WARNING_CODES } from '../../../common/types';\nimport { collectWarning, describeElement } from './collect-warnings';\n\n/** 检查图层属性并报告无法写入 IR 的 SVG 特性。 */\nexport function warnUnsupportedAttributes (es: EditableSVG, el: Element, tag: string, emit: (w: SVG2IRWarning) => void, strict: boolean, idEls: ReadonlyMap<string, Element>, flattenGradientToSolid = false, dashSynthesized = false): void {\n const selector = describeElement(el);\n\n // 直线开放路径的 dash 已展开;其他情况报告降级。\n if (!dashSynthesized) {\n warnAttr(es, el, tag, 'stroke-dasharray', 'none', SVG2IR_WARNING_CODES.STROKE_DASH_DROPPED, 'stroke-dasharray 虚线描边降级为实线(IR 没有 dash 字段)。', emit, strict, selector);\n }\n\n // filter 属性:Effects 无逐元素 filter pipeline(仅文本 shadow),丢。\n warnAttr(es, el, tag, 'filter', 'none', SVG2IR_WARNING_CODES.FILTER_DROPPED, 'filter 属性已丢弃:IR 没有元素级 filter 字段(投影/模糊/内阴影,仅文本 shadow),该效果缺失产生预期视觉差异,属 IR 表达边界(标 ir-capability)。', emit, strict, selector);\n\n // fill/stroke 引用 url(#id):查引用目标是 pattern(平铺,Effects 无→warn丢)还是 gradient(查 fx/fy/spreadMethod/gradientTransform 不支持属性)。\n for (const paintAttr of ['fill', 'stroke']) {\n const url = String(es.getAttr(el, paintAttr) ?? '');\n const um = url.match(/^url\\(\\s*[\"']?#([^)\"'\\s]+)\\s*[\"']?\\)$/i);\n\n if (um == null) { continue; }\n const target = idEls.get(um[1]);\n\n if (target == null) { continue; }\n const ttag = (target.node != null && target.node.tagName) ? target.node.tagName.toLowerCase() : '';\n\n if (ttag === 'pattern') {\n collectWarning(emit, SVG2IR_WARNING_CODES.PATTERN_DROPPED, `元素 <${tag}> 的 pattern 平铺填充已丢弃(IR shape 没有 pattern 字段)。`, selector, strict);\n } else if (ttag === 'radialgradient' || ttag === 'lineargradient') {\n // 文本渐变按中点色处理;形状渐变只报告 IR 无法表达的属性。\n if (!flattenGradientToSolid) {\n warnGradAttr(es, target, ttag, 'spreadMethod', tag, emit, strict, selector);\n warnGradAttr(es, target, ttag, 'gradientTransform', tag, emit, strict, selector);\n // radial 焦点 fx/fy:Effects shader 恒以 startPoint 为焦点,无 focal → 非默认焦点钳中心降级。\n if (ttag === 'radialgradient') {\n warnGradAttr(es, target, ttag, 'fx', tag, emit, strict, selector);\n warnGradAttr(es, target, ttag, 'fy', tag, emit, strict, selector);\n }\n }\n }\n }\n\n // skewX/skewY transform:IR transform 没有 skew 通道,丢 skew 分量。\n const transform = String(es.getAttr(el, 'transform') ?? '');\n\n if (/skew[xy]\\s*\\(/i.test(transform)) {\n collectWarning(emit, SVG2IR_WARNING_CODES.SKEW_DROPPED, `元素 <${tag}> 的 skewX/skewY 变换已丢弃(IR transform 没有 skew 通道)。`, selector, strict);\n }\n\n // shape 在解析阶段补偿 non-scaling-stroke;其他元素没有对应的 IR 语义。\n if (!['rect', 'circle', 'ellipse', 'path', 'polygon', 'polyline', 'line'].includes(tag)) {\n warnAttr(es, el, tag, 'vector-effect', '', SVG2IR_WARNING_CODES.ELEMENT_DROPPED, 'vector-effect 已丢弃(IR 没有 non-scaling-stroke 字段)。', emit, strict, selector);\n }\n\n // marker-start/mid/end(箭头):IR 没有 marker 语义字段,丢。\n for (const m of ['marker-start', 'marker-mid', 'marker-end', 'marker']) {\n warnAttr(es, el, tag, m, 'none', SVG2IR_WARNING_CODES.ELEMENT_DROPPED, `${m} 标记已丢弃(IR 没有 marker 语义字段)。`, emit, strict, selector);\n }\n}\n\nexport function warnGradAttr (es: EditableSVG, gradEl: Element, gradTag: string, attr: string, refTag: string, emit: (w: SVG2IRWarning) => void, strict: boolean, selector: string | undefined): void {\n const v = String(es.getAttr(gradEl, attr) ?? '');\n\n if (v === '') { return; }\n // fx/fy 默认 = cx/cy,若与默认一致不算不支持(查 cx/cy 比较)。\n if (attr === 'fx' || attr === 'fy') {\n const base = attr === 'fx' ? 'cx' : 'cy';\n const baseV = String(es.getAttr(gradEl, base) ?? '0.5');\n\n if (v === baseV) { return; } // 焦点=默认中心,不 warn\n }\n collectWarning(emit, SVG2IR_WARNING_CODES.ELEMENT_DROPPED, `元素 <${refTag}> 引用的 <${gradTag}> 的 ${attr} 已丢弃(IR 没有对应字段)。`, selector, strict);\n}\n\nexport function warnAttr (es: EditableSVG, el: Element, tag: string, attr: string, noneDefault: string, code: SVG2IRWarningCode, msg: string, emit: (w: SVG2IRWarning) => void, strict: boolean, selector: string | undefined): void {\n const v = String(es.getAttr(el, attr) ?? '');\n\n if (v !== '' && v !== noneDefault && v !== 'none') {\n collectWarning(emit, code, `元素 <${tag}> 的 ${msg}`, selector, strict);\n }\n}\n\nexport function warnTextPaintDropped (\n es: EditableSVG,\n el: Element,\n selector: string | undefined,\n emit: (w: SVG2IRWarning) => void,\n strict: boolean,\n): void {\n const textNode = (el as unknown as { node?: globalThis.Element | null }).node;\n // 文本渐变按中点色处理,并报告能力降级。\n const hasGradientFill = /^url\\(/i.test(String(es.getAttr(el, 'fill') ?? ''))\n || (textNode != null && Array.from(textNode.childNodes).some(c => {\n const tt = (c as globalThis.Element).tagName?.toLowerCase?.();\n\n return tt === 'tspan' && /^url\\(/i.test((c as globalThis.Element).getAttribute?.('fill') ?? '');\n }));\n\n if (hasGradientFill) {\n collectWarning(emit, SVG2IR_WARNING_CODES.TEXT_GRADIENT_FILL_FLATTENED, `元素 <text> 的渐变填充(含 per-tspan)已降级成单色(GE 不支持渐变文字填充,取中点色)。`, selector, strict);\n }\n\n // RichText 不支持 text stroke 和 text-decoration。\n const hasTextPaintAttr = (attr: string): boolean => {\n const v = String(es.getAttr(el, attr) ?? '');\n\n if (v !== '' && v !== 'none') { return true; }\n if (textNode == null) { return false; }\n\n return Array.from(textNode.childNodes).some(c => {\n const tt = (c as globalThis.Element).tagName?.toLowerCase?.();\n\n if (tt !== 'tspan') { return false; }\n const cv = (c as globalThis.Element).getAttribute?.(attr) ?? '';\n\n return cv !== '' && cv !== 'none';\n });\n };\n\n if (hasTextPaintAttr('stroke')) {\n collectWarning(emit, SVG2IR_WARNING_CODES.TEXT_STROKE_DROPPED, `元素 <text> 的 stroke 描边(含 per-tspan)已丢弃(GE 策略富文本 RichTextComponent 无 text stroke/outline 入口,setOutlineWidth unsupported;若带 paint-order 描边/填充顺序亦无法复现)。该效果缺失产生预期视觉差异,属 GE 能力缺失(标 ge-capability)。`, selector, strict);\n }\n if (hasTextPaintAttr('text-decoration')) {\n collectWarning(emit, SVG2IR_WARNING_CODES.TEXT_DECORATION_DROPPED, `元素 <text> 的 text-decoration(underline/line-through/overline,含 per-tspan)已丢弃(GE isUnderline 字段\"暂时无效\" + 策略富文本 markup 仅 b/i/size/color 无装饰标签)。该效果缺失产生预期视觉差异,属 GE 能力缺失(标 ge-capability)。`, selector, strict);\n }\n}\n","import type { Element } from '@svgdotjs/svg.js';\nimport { IRLayerType, type IRLayer, type IRVec3 } from '@vvfx/animation-ir';\nimport { SVG2IR_WARNING_CODES } from '../../../common/types';\nimport { buildGroupMaskForG } from '../clip/build-clip-mask';\nimport { collectWarning, describeElement } from '../diagnostics/collect-warnings';\nimport { warnUnsupportedAttributes } from '../diagnostics/warn-unsupported';\nimport { maskCoversFull } from '../clip/collect-geometry';\nimport type { GroupConversionContext } from './conversion-session';\n\nexport function convertGroupElement (element: Element, context: GroupConversionContext): void {\n warnUnsupportedAttributes(context.es, element, 'g', context.emit, context.strict, context.idEls);\n const groupClipPath = element.node?.getAttribute('clip-path')?.trim() ?? '';\n\n if (groupClipPath !== '' && groupClipPath !== 'none') {\n collectWarning(\n context.emit,\n SVG2IR_WARNING_CODES.GROUP_CLIP_PATH_DROPPED,\n '<g> 的组级 clip-path 未映射,当前只支持元素级 clip-path 与组级 mask。',\n describeElement(element),\n context.strict,\n );\n }\n const groupMask = buildGroupMaskForG(context.es, element, context.rootEl);\n\n if (groupMask != null && maskCoversFull(groupMask.path.points, context.width, context.height)) { return; }\n if (groupMask == null) { return; }\n\n const layerIndex = context.allocateLayerIndex();\n const nullLayer: IRLayer = {\n type: IRLayerType.Null,\n id: `${layerIndex}`,\n name: String(context.es.getAttr(element, 'id') ?? 'g_mask'),\n time: { inFrame: 0, outFrame: context.outFrame },\n visible: true,\n transform: {\n position: { type: 'static', value: [context.compCenterX, context.compCenterY, 0] as IRVec3 },\n scale: { type: 'static', value: [1, 1, 1] },\n rotation: { z: { type: 'static', value: 0 } },\n anchor: { type: 'static', value: [context.compCenterX, context.compCenterY, 0] as IRVec3 },\n opacity: { type: 'static', value: 1 },\n },\n mask: groupMask,\n };\n\n context.appendLayer(nullLayer, element, false);\n context.groupMaskGNodeToIndex.set(element.node, layerIndex);\n}\n","/**\n * 将 SVG image 元素解析为 IR image layer 和 image asset。\n */\nimport type EditableSVG from '../../../parse-svg/svg-parser';\nimport type { Element } from '@svgdotjs/svg.js';\nimport { type IRImageAsset, type IRImageLayer, type IRLocalBounds, type IRVec3 } from '@vvfx/animation-ir';\nimport { isSVGElementVisible, readSVGElementOpacity, readSVGNumberAttribute } from '../../read-attributes';\nimport { createIRResourceSource, resolveIRResourceUrl } from '@vvfx/animation-ir/adapter';\nimport { accumulateAncestors, decomposeMatrix, IDENTITY, multiply, parseTransform } from '../../matrix';\n\n/** 读 <image> href:优先 href(SVG2),次 xlink:href。 */\nfunction readImageHref (es: EditableSVG, el: Element): string | undefined {\n const sourceUrl = es.getAttr(el, 'data-svg2ir-source-url');\n\n if (typeof sourceUrl === 'string' && sourceUrl !== '') { return sourceUrl; }\n const href = es.getAttr(el, 'href');\n\n if (typeof href === 'string' && href !== '') { return href; }\n const xhref = es.getAttr(el, 'xlink:href');\n\n return typeof xhref === 'string' && xhref !== '' ? xhref : undefined;\n}\n\n/** 解析 image 图层和对应资源;图层标识由图层转换器补齐。 */\nexport function parseImageLayer (es: EditableSVG, el: Element, imageNaturalSizes?: ReadonlyMap<string, { width: number; height: number }>, resourceBaseUrl?: string): { layer: Omit<IRImageLayer, 'id' | 'name' | 'time'>; asset: IRImageAsset } | null {\n const url = readImageHref(es, el);\n\n if (url == null) {\n // 缺少 href 时返回 null。\n return null;\n }\n const x = readSVGNumberAttribute(es, el, 'x', 0) ?? 0;\n const y = readSVGNumberAttribute(es, el, 'y', 0) ?? 0;\n const width = readSVGNumberAttribute(es, el, 'width', 0) ?? 0;\n const height = readSVGNumberAttribute(es, el, 'height', 0) ?? 0;\n\n if (width <= 0 || height <= 0) {\n return null;\n }\n\n const source = createIRResourceSource(resolveIRResourceUrl(url, resourceBaseUrl));\n const assetId = url;\n const asset: IRImageAsset = { id: assetId, type: 'image', source };\n // localBounds 使用 SVG <image> 的显示框尺寸,而不是 asset 的自然尺寸。\n const domNode = (el as unknown as { node?: { getAttribute?: (n: string) => string | null } }).node;\n const svgW = domNode?.getAttribute?.('width');\n const svgH = domNode?.getAttribute?.('height');\n const lbW = svgW != null && svgW !== '' ? Number(svgW) || width : width;\n const lbH = svgH != null && svgH !== '' ? Number(svgH) || height : height;\n // preserveAspectRatio 使用 meet 或 slice 时,根据自然尺寸计算等比显示区域。\n let lbWidth = lbW;\n let lbHeight = lbH;\n let anchorX = width / 2;\n let anchorY = height / 2;\n\n const meet = computeMeetFit(domNode, lbW, lbH, url, imageNaturalSizes);\n\n if (meet != null) {\n lbWidth = meet.width;\n lbHeight = meet.height;\n anchorX = meet.width / 2;\n anchorY = meet.height / 2;\n } else {\n const cover = computeSliceCoverFit(domNode, lbW, lbH, url, imageNaturalSizes);\n\n if (cover != null) {\n lbWidth = cover.width;\n lbHeight = cover.height;\n anchorX = cover.width / 2;\n anchorY = cover.height / 2;\n }\n }\n const localBounds: IRLocalBounds = { x: 0, y: 0, width: lbWidth, height: lbHeight };\n // anchor=图片中心(对齐 lottie AE 图片层 ks.a 习惯),position=中心坐标(SVG x/y 左上→中心)。\n const cx = x + width / 2;\n const cy = y + height / 2;\n // 合并元素及祖先变换,得到图层中心、缩放和旋转。\n const mAnc = accumulateAncestors(el);\n const selfAttr = (el as { node?: { getAttribute?: (n: string) => string | null } }).node?.getAttribute?.('transform') ?? '';\n const mSelf = selfAttr !== '' ? parseTransform(selfAttr) : IDENTITY;\n const m = multiply(mAnc, mSelf);\n const wx = m.a * cx + m.c * cy + m.e;\n const wy = m.b * cx + m.d * cy + m.f;\n const opacity = readSVGElementOpacity(el);\n const { sx, sy, rotation } = decomposeMatrix(m);\n\n const layer: Omit<IRImageLayer, 'id' | 'name' | 'time'> = {\n type: 'image',\n content: { assetId },\n localBounds,\n visible: isSVGElementVisible(es, el),\n transform: {\n position: { type: 'static', value: [wx, wy, 0] as IRVec3 },\n anchor: { type: 'static', value: [anchorX, anchorY, 0] as IRVec3 },\n scale: { type: 'static', value: [sx, sy, 1] },\n rotation: { z: { type: 'static', value: rotation } },\n opacity: { type: 'static', value: opacity },\n },\n };\n\n return { layer, asset };\n}\n\nfunction readEmbeddedImageSize (url: string): { width: number; height: number } | undefined {\n const match = url.match(/^data:image\\/(png|gif|jpe?g);base64,([^,]+)$/i);\n\n if (match == null || typeof globalThis.atob !== 'function') { return undefined; }\n let binary: string;\n\n try {\n binary = globalThis.atob(match[2]);\n } catch {\n return undefined;\n }\n\n const byte = (index: number): number => binary.charCodeAt(index) & 0xff;\n const format = match[1].toLowerCase();\n\n if (format === 'png' && binary.length >= 24\n && byte(0) === 0x89 && byte(1) === 0x50 && byte(2) === 0x4e && byte(3) === 0x47) {\n const width = byte(16) * 0x1000000 + byte(17) * 0x10000 + byte(18) * 0x100 + byte(19);\n const height = byte(20) * 0x1000000 + byte(21) * 0x10000 + byte(22) * 0x100 + byte(23);\n\n return width > 0 && height > 0 ? { width, height } : undefined;\n }\n if (format === 'gif' && binary.length >= 10) {\n const width = byte(6) | byte(7) << 8;\n const height = byte(8) | byte(9) << 8;\n\n return width > 0 && height > 0 ? { width, height } : undefined;\n }\n if ((format !== 'jpg' && format !== 'jpeg') || binary.length < 4 || byte(0) !== 0xff || byte(1) !== 0xd8) {\n return undefined;\n }\n\n let offset = 2;\n\n while (offset + 3 < binary.length) {\n if (byte(offset) !== 0xff) {\n offset++;\n continue;\n }\n while (offset < binary.length && byte(offset) === 0xff) { offset++; }\n const marker = byte(offset++);\n\n if (marker === 0xd8 || marker === 0xd9 || (marker >= 0xd0 && marker <= 0xd7)) { continue; }\n if (offset + 1 >= binary.length) { break; }\n const segmentLength = byte(offset) * 0x100 + byte(offset + 1);\n\n if (segmentLength < 2 || offset + segmentLength > binary.length) { break; }\n const isStartOfFrame = (marker >= 0xc0 && marker <= 0xc3)\n || (marker >= 0xc5 && marker <= 0xc7)\n || (marker >= 0xc9 && marker <= 0xcb)\n || (marker >= 0xcd && marker <= 0xcf);\n\n if (isStartOfFrame && segmentLength >= 7) {\n const height = byte(offset + 3) * 0x100 + byte(offset + 4);\n const width = byte(offset + 5) * 0x100 + byte(offset + 6);\n\n return width > 0 && height > 0 ? { width, height } : undefined;\n }\n offset += segmentLength;\n }\n\n return undefined;\n}\n\nfunction readNaturalImageSize (\n domNode: { getAttribute?: (name: string) => string | null } | undefined,\n url: string | undefined,\n imageNaturalSizes: ReadonlyMap<string, { width: number; height: number }> | undefined,\n): { width: number; height: number } | undefined {\n if (domNode == null) { return undefined; }\n let width = parseFloat(domNode.getAttribute?.('data-natural-width') ?? '');\n let height = parseFloat(domNode.getAttribute?.('data-natural-height') ?? '');\n\n if ((!Number.isFinite(width) || !Number.isFinite(height) || width <= 0 || height <= 0) && url != null) {\n const embeddedSize = readEmbeddedImageSize(url);\n\n if (embeddedSize != null) {\n width = embeddedSize.width;\n height = embeddedSize.height;\n }\n }\n if ((!Number.isFinite(width) || !Number.isFinite(height) || width <= 0 || height <= 0)\n && url != null && imageNaturalSizes != null) {\n const fromMap = imageNaturalSizes.get(url);\n\n if (fromMap != null) {\n width = fromMap.width;\n height = fromMap.height;\n }\n }\n\n return Number.isFinite(width) && Number.isFinite(height) && width > 0 && height > 0\n ? { width, height }\n : undefined;\n}\n\n/** 计算 preserveAspectRatio=meet 时的等比显示尺寸。缺少自然尺寸或无需调整时返回 undefined。 */\nfunction computeMeetFit (\n domNode: { getAttribute?: (n: string) => string | null } | undefined,\n dispW: number,\n dispH: number,\n url?: string,\n imageNaturalSizes?: ReadonlyMap<string, { width: number; height: number }>,\n): { width: number; height: number } | undefined {\n if (domNode == null) { return undefined; }\n const par = domNode.getAttribute?.('preserveAspectRatio') ?? '';\n\n if (/\\bslice\\b/i.test(par) || /\\bnone\\b/i.test(par)) { return undefined; } // slice 走裁 UV;none 作者要拉伸\n const naturalSize = readNaturalImageSize(domNode, url, imageNaturalSizes);\n\n if (naturalSize == null) { return undefined; }\n const { width: iw, height: ih } = naturalSize;\n\n if (dispW <= 0 || dispH <= 0) { return undefined; }\n if (Math.abs(dispW / dispH - iw / ih) < 1e-4) { return undefined; } // 比一致→无需 fit\n\n const boxAspect = dispW / dispH;\n const imgAspect = iw / ih;\n\n if (imgAspect > boxAspect) { // 按宽铺满,垂直方向留白\n return { width: dispW, height: dispW / imgAspect };\n }\n\n // 按高铺满,水平方向留白\n return { width: dispH * imgAspect, height: dispH };\n}\n\n/** 计算 preserveAspectRatio=slice 时的覆盖尺寸。缺少自然尺寸或无需调整时返回 undefined。 */\nfunction computeSliceCoverFit (\n domNode: { getAttribute?: (n: string) => string | null } | undefined,\n dispW: number,\n dispH: number,\n url?: string,\n imageNaturalSizes?: ReadonlyMap<string, { width: number; height: number }>,\n): { width: number; height: number } | undefined {\n if (domNode == null) { return undefined; }\n const par = domNode.getAttribute?.('preserveAspectRatio') ?? '';\n\n if (!/\\bslice\\b/i.test(par)) { return undefined; }\n const naturalSize = readNaturalImageSize(domNode, url, imageNaturalSizes);\n\n if (naturalSize == null) { return undefined; }\n const { width: iw, height: ih } = naturalSize;\n\n if (dispW <= 0 || dispH <= 0) { return undefined; }\n if (Math.abs(dispW / dispH - iw / ih) < 1e-4) { return undefined; } // 比一致→无需 cover\n\n const scale = Math.max(dispW / iw, dispH / ih);\n\n return { width: iw * scale, height: ih * scale };\n}\n","import { normalizePathCommands, normalizedToCustomShapePaths } from '../../normalize-path';\nimport type { SVGMatrix } from '../../matrix';\nimport {\n activeDuration, comparisonEnd, cubicBezierRatio, findAnimationById,\n parseClockValue, parseKeySplines, parseNumberList, parsePointValue, resolveBeginTimes,\n} from './parse-timeline';\nimport {\n EPSILON, type BeginTimeCache, type MotionAnimation, type MotionPath,\n type MotionPathSegment, type SMILAnimation,\n} from './types';\n\nfunction cubicPoint (\n segment: Pick<MotionPathSegment, 'p0' | 'p1' | 'p2' | 'p3'>,\n t: number,\n): [number, number] {\n const inv = 1 - t;\n const a = inv * inv * inv;\n const b = 3 * inv * inv * t;\n const c = 3 * inv * t * t;\n const d = t * t * t;\n\n return [\n a * segment.p0[0] + b * segment.p1[0] + c * segment.p2[0] + d * segment.p3[0],\n a * segment.p0[1] + b * segment.p1[1] + c * segment.p2[1] + d * segment.p3[1],\n ];\n}\n\nfunction cubicDerivative (\n segment: Pick<MotionPathSegment, 'p0' | 'p1' | 'p2' | 'p3'>,\n t: number,\n): [number, number] {\n const inv = 1 - t;\n\n return [\n 3 * inv * inv * (segment.p1[0] - segment.p0[0])\n + 6 * inv * t * (segment.p2[0] - segment.p1[0])\n + 3 * t * t * (segment.p3[0] - segment.p2[0]),\n 3 * inv * inv * (segment.p1[1] - segment.p0[1])\n + 6 * inv * t * (segment.p2[1] - segment.p1[1])\n + 3 * t * t * (segment.p3[1] - segment.p2[1]),\n ];\n}\n\nfunction buildMotionSegment (\n p0: [number, number],\n p1: [number, number],\n p2: [number, number],\n p3: [number, number],\n): MotionPathSegment {\n const segment: MotionPathSegment = { p0, p1, p2, p3, length: 0, samples: [{ t: 0, length: 0 }] };\n let previous = p0;\n // 通过小型弧长查找表保持 paced motion 的确定性,并保留源 cubic 几何。\n const subdivisions = 24;\n\n for (let index = 1; index <= subdivisions; index++) {\n const t = index / subdivisions;\n const point = cubicPoint(segment, t);\n\n segment.length += Math.hypot(point[0] - previous[0], point[1] - previous[1]);\n segment.samples.push({ t, length: segment.length });\n previous = point;\n }\n\n return segment;\n}\n\nfunction buildMotionPathFromPoints (points: Array<[number, number]>): MotionPath | null {\n if (points.length < 2) { return null; }\n const segments: MotionPathSegment[] = [];\n\n for (let index = 0; index < points.length - 1; index++) {\n const p0 = points[index];\n const p3 = points[index + 1];\n const p1: [number, number] = [p0[0] + (p3[0] - p0[0]) / 3, p0[1] + (p3[1] - p0[1]) / 3];\n const p2: [number, number] = [p0[0] + (p3[0] - p0[0]) * 2 / 3, p0[1] + (p3[1] - p0[1]) * 2 / 3];\n\n segments.push(buildMotionSegment(p0, p1, p2, p3));\n }\n\n return finalizeMotionPath(segments);\n}\n\nfunction finalizeMotionPath (segments: MotionPathSegment[]): MotionPath | null {\n if (segments.length === 0) { return null; }\n const totalLength = segments.reduce((sum, segment) => sum + segment.length, 0);\n\n if (totalLength <= EPSILON) { return null; }\n const vertexProgress = [0];\n let cumulative = 0;\n\n for (const segment of segments) {\n cumulative += segment.length;\n vertexProgress.push(cumulative / totalLength);\n }\n\n return { segments, totalLength, vertexProgress };\n}\n\nfunction buildMotionPathFromData (data: string): MotionPath | null {\n const paths = normalizedToCustomShapePaths(normalizePathCommands(data));\n const path = paths[0];\n\n if (path == null || path.points.length < 2) { return null; }\n const segments: MotionPathSegment[] = [];\n const segmentCount = path.closed ? path.points.length : path.points.length - 1;\n\n for (let index = 0; index < segmentCount; index++) {\n const nextIndex = (index + 1) % path.points.length;\n const start = path.points[index];\n const end = path.points[nextIndex];\n const out = path.outTangents[index] ?? { x: 0, y: 0 };\n const incoming = path.inTangents[nextIndex] ?? { x: 0, y: 0 };\n\n segments.push(buildMotionSegment(\n [start.x, start.y],\n [start.x + out.x, start.y + out.y],\n [end.x + incoming.x, end.y + incoming.y],\n [end.x, end.y],\n ));\n }\n\n return finalizeMotionPath(segments);\n}\n\nfunction readMotionPathData (tag: globalThis.Element, root: globalThis.Element): string {\n const inlinePath = tag.getAttribute('path') ?? '';\n\n if (inlinePath.trim() !== '') { return inlinePath; }\n const mpath = Array.from(tag.children).find(child => child.tagName.toLowerCase() === 'mpath');\n const href = mpath?.getAttribute('href') ?? mpath?.getAttribute('xlink:href') ?? '';\n\n if (!href.startsWith('#')) { return ''; }\n\n const referenced = findAnimationById(root, href.slice(1));\n\n if (referenced == null) { return ''; }\n const path = readPathData(referenced);\n\n return path !== '' ? path : buildReferencedMotionPath(referenced);\n}\n\nfunction readPathData (element: globalThis.Element): string {\n const attribute = element.getAttribute('d')?.trim() ?? '';\n\n if (attribute !== '') { return attribute; }\n const style = element.getAttribute('style') ?? '';\n const match = style.match(/(?:^|;)\\s*d\\s*:\\s*path\\(\\s*(?:\"([^\"]*)\"|'([^']*)'|([^)]*))\\s*\\)\\s*(?:;|$)/i);\n\n return (match?.[1] ?? match?.[2] ?? match?.[3] ?? '').trim();\n}\n\nfunction readMotionNumber (element: globalThis.Element, attribute: string, fallback = 0): number {\n const value = Number(element.getAttribute(attribute));\n\n return Number.isFinite(value) ? value : fallback;\n}\n\nfunction buildReferencedMotionPath (element: globalThis.Element): string {\n const tag = element.tagName.toLowerCase();\n\n if (tag === 'line') {\n return `M ${readMotionNumber(element, 'x1')} ${readMotionNumber(element, 'y1')} L ${readMotionNumber(element, 'x2')} ${readMotionNumber(element, 'y2')}`;\n }\n if (tag === 'rect') {\n const x = readMotionNumber(element, 'x');\n const y = readMotionNumber(element, 'y');\n const width = readMotionNumber(element, 'width');\n const height = readMotionNumber(element, 'height');\n\n if (width <= 0 || height <= 0) { return ''; }\n const rx = Math.min(Math.max(readMotionNumber(element, 'rx'), 0), width / 2);\n const ry = Math.min(Math.max(readMotionNumber(element, 'ry', rx), 0), height / 2);\n\n if (rx === 0 || ry === 0) {\n return `M ${x} ${y} H ${x + width} V ${y + height} H ${x} Z`;\n }\n\n return [\n `M ${x + rx} ${y}`,\n `H ${x + width - rx}`,\n `A ${rx} ${ry} 0 0 1 ${x + width} ${y + ry}`,\n `V ${y + height - ry}`,\n `A ${rx} ${ry} 0 0 1 ${x + width - rx} ${y + height}`,\n `H ${x + rx}`,\n `A ${rx} ${ry} 0 0 1 ${x} ${y + height - ry}`,\n `V ${y + ry}`,\n `A ${rx} ${ry} 0 0 1 ${x + rx} ${y}`,\n 'Z',\n ].join(' ');\n }\n if (tag === 'circle' || tag === 'ellipse') {\n const cx = readMotionNumber(element, 'cx');\n const cy = readMotionNumber(element, 'cy');\n const rx = tag === 'circle' ? readMotionNumber(element, 'r') : readMotionNumber(element, 'rx');\n const ry = tag === 'circle' ? rx : readMotionNumber(element, 'ry');\n\n if (rx <= 0 || ry <= 0) { return ''; }\n\n return `M ${cx - rx} ${cy} A ${rx} ${ry} 0 1 0 ${cx + rx} ${cy} A ${rx} ${ry} 0 1 0 ${cx - rx} ${cy} Z`;\n }\n\n return '';\n}\n\nfunction readMotionPointValues (tag: globalThis.Element): Array<[number, number]> {\n const values = tag.getAttribute('values');\n\n if (values != null && values.trim() !== '') {\n return values.split(';').map(parsePointValue);\n }\n const from = tag.getAttribute('from');\n const to = tag.getAttribute('to');\n\n if (from != null && to != null) { return [parsePointValue(from), parsePointValue(to)]; }\n if (to != null) { return [[0, 0], parsePointValue(to)]; }\n const by = tag.getAttribute('by');\n\n if (by != null) { return [[0, 0], parsePointValue(by)]; }\n\n return [];\n}\n\nfunction hasValidMotionValues (tag: globalThis.Element): boolean {\n const raw = tag.getAttribute('values');\n\n if (raw == null) { return true; }\n const entries = raw.split(';');\n\n // animateMotion 的 values 必须是坐标对。Chromium 在任一项为标量时会禁用整个动画,\n // 即使同时存在有效 path 属性;不能把这些标量误当作 path 进度。\n return entries.length > 0 && entries.every(entry => parseNumberList(entry).length === 2);\n}\n\nexport function parseMotionAnimation (\n tag: globalThis.Element,\n root: globalThis.Element,\n beginCache: BeginTimeCache,\n comparisonDuration?: number,\n): MotionAnimation | null {\n const simpleDuration = parseClockValue(tag.getAttribute('dur') ?? '') ?? 0;\n const totalDuration = activeDuration(tag);\n\n if (simpleDuration <= 0 || totalDuration <= 0) { return null; }\n if (!hasValidMotionValues(tag)) { return null; }\n const pathData = readMotionPathData(tag, root);\n const pointValues = pathData.trim() === '' ? readMotionPointValues(tag) : undefined;\n const path = pathData.trim() !== ''\n ? buildMotionPathFromData(pathData)\n : buildMotionPathFromPoints(pointValues ?? []);\n\n if (path == null) { return null; }\n const calcModeRaw = (tag.getAttribute('calcMode') ?? 'paced').toLowerCase();\n const calcMode = (['linear', 'discrete', 'spline', 'paced'].includes(calcModeRaw) ? calcModeRaw : 'paced') as SMILAnimation['calcMode'];\n const rawKeyPoints = (tag.getAttribute('keyPoints') ?? '').split(';').map(Number).filter(Number.isFinite);\n const rawKeyTimes = (tag.getAttribute('keyTimes') ?? '').split(';').map(Number).filter(Number.isFinite);\n const usesKeyPoints = rawKeyPoints.length >= 2 || (pointValues == null && rawKeyTimes.length === path.vertexProgress.length);\n let keyPoints = rawKeyPoints.length >= 2 ? rawKeyPoints : [0, 1];\n\n if (rawKeyPoints.length === 0 && pointValues == null && rawKeyTimes.length === path.vertexProgress.length) {\n keyPoints = path.vertexProgress;\n }\n const pointKeyTimes = pointValues != null && !usesKeyPoints\n ? pointValues.map((_, index) => calcMode === 'discrete' ? index / pointValues.length : index / (pointValues.length - 1))\n : keyPoints.map((_, index) => index / (keyPoints.length - 1));\n let keyTimes = rawKeyTimes.length === pointKeyTimes.length\n ? rawKeyTimes\n : pointKeyTimes;\n\n if (keyTimes.some((value, index) => index > 0 && value < keyTimes[index - 1])) {\n keyTimes = pointKeyTimes;\n }\n const rotateRaw = (tag.getAttribute('rotate') ?? '0').trim().toLowerCase();\n const rotate = rotateRaw === 'auto' || rotateRaw === 'auto-reverse'\n ? rotateRaw\n : (Number(rotateRaw) || 0);\n const begin = resolveBeginTimes(tag, root, beginCache, comparisonDuration)[0];\n\n if (begin == null) { return null; }\n\n const indefinite = (tag.getAttribute('repeatCount') ?? '').trim().toLowerCase() === 'indefinite';\n\n return {\n begin,\n end: indefinite && comparisonDuration != null\n ? Math.max(comparisonEnd(tag, begin), comparisonDuration)\n : comparisonEnd(tag, begin),\n simpleDuration,\n activeDuration: totalDuration,\n fill: (tag.getAttribute('fill') ?? '').trim().toLowerCase() === 'freeze' ? 'freeze' : 'remove',\n additive: (tag.getAttribute('additive') ?? '').trim().toLowerCase() === 'sum' ? 'sum' : 'replace',\n indefinite,\n calcMode,\n keySplines: parseKeySplines(tag, keyTimes.length - 1),\n keyTimes,\n keyPoints,\n usesKeyPoints,\n path,\n pointValues,\n rotate,\n };\n}\n\nfunction sampleMotionPath (path: MotionPath, progress: number): { x: number; y: number; angle: number } {\n const targetLength = Math.max(0, Math.min(1, progress)) * path.totalLength;\n let beforeSegment = 0;\n let segment = path.segments[path.segments.length - 1];\n\n for (const candidate of path.segments) {\n if (targetLength <= beforeSegment + candidate.length + EPSILON) {\n segment = candidate;\n\n break;\n }\n beforeSegment += candidate.length;\n }\n const localLength = Math.max(0, Math.min(segment.length, targetLength - beforeSegment));\n let lower = segment.samples[0];\n let upper = segment.samples[segment.samples.length - 1];\n\n for (let index = 1; index < segment.samples.length; index++) {\n if (segment.samples[index].length >= localLength) {\n lower = segment.samples[index - 1];\n upper = segment.samples[index];\n\n break;\n }\n }\n const span = upper.length - lower.length;\n const ratio = span <= EPSILON ? 0 : (localLength - lower.length) / span;\n const t = lower.t + (upper.t - lower.t) * ratio;\n const point = cubicPoint(segment, t);\n let derivative = cubicDerivative(segment, t);\n\n if (Math.hypot(derivative[0], derivative[1]) <= EPSILON) {\n derivative = [segment.p3[0] - segment.p0[0], segment.p3[1] - segment.p0[1]];\n }\n\n return { x: point[0], y: point[1], angle: Math.atan2(derivative[1], derivative[0]) * 180 / Math.PI };\n}\n\nfunction sampleMotionPointValues (animation: MotionAnimation, ratio: number): { x: number; y: number; angle: number } {\n const points = animation.pointValues ?? [];\n const clamped = Math.max(0, Math.min(1, ratio));\n const lastPoint = points.at(-1);\n\n if (lastPoint != null && clamped >= (animation.keyTimes.at(-1) ?? 1) - EPSILON) {\n const previousPoint = points.at(-2) ?? lastPoint;\n\n return {\n x: lastPoint[0],\n y: lastPoint[1],\n angle: Math.atan2(lastPoint[1] - previousPoint[1], lastPoint[0] - previousPoint[0]) * 180 / Math.PI,\n };\n }\n let segment = points.length - 2;\n\n for (let index = 0; index < animation.keyTimes.length - 1; index++) {\n if (clamped < animation.keyTimes[index + 1] - EPSILON || index === animation.keyTimes.length - 2) {\n segment = index;\n\n break;\n }\n }\n const startTime = animation.keyTimes[segment] ?? 0;\n const endTime = animation.keyTimes[segment + 1] ?? 1;\n let localRatio = endTime <= startTime + EPSILON ? 0 : (clamped - startTime) / (endTime - startTime);\n\n if (animation.calcMode === 'discrete') {\n localRatio = 0;\n } else if (animation.calcMode === 'spline') {\n const spline = animation.keySplines[segment];\n\n if (spline != null) { localRatio = cubicBezierRatio(localRatio, spline); }\n }\n localRatio = Math.max(0, Math.min(1, localRatio));\n const start = points[segment] ?? points[0] ?? [0, 0];\n const end = points[segment + 1] ?? start;\n const x = start[0] + (end[0] - start[0]) * localRatio;\n const y = start[1] + (end[1] - start[1]) * localRatio;\n const angle = Math.atan2(end[1] - start[1], end[0] - start[0]) * 180 / Math.PI;\n\n return { x, y, angle };\n}\n\nfunction motionProgressAtRatio (animation: MotionAnimation, ratio: number): number {\n const clamped = Math.max(0, Math.min(1, ratio));\n\n if (animation.calcMode === 'paced' && !animation.usesKeyPoints) { return clamped; }\n let segment = animation.keyTimes.length - 2;\n\n for (let index = 0; index < animation.keyTimes.length - 1; index++) {\n if (clamped <= animation.keyTimes[index + 1] + EPSILON) {\n segment = index;\n\n break;\n }\n }\n if (animation.calcMode === 'discrete') { return animation.keyPoints[segment] ?? 0; }\n const startTime = animation.keyTimes[segment] ?? 0;\n const endTime = animation.keyTimes[segment + 1] ?? 1;\n let localRatio = endTime <= startTime + EPSILON ? 0 : (clamped - startTime) / (endTime - startTime);\n\n if (animation.calcMode === 'spline') {\n const spline = animation.keySplines[segment];\n\n if (spline != null) { localRatio = cubicBezierRatio(localRatio, spline); }\n }\n const startPoint = animation.keyPoints[segment] ?? 0;\n const endPoint = animation.keyPoints[segment + 1] ?? 1;\n\n return startPoint + (endPoint - startPoint) * Math.max(0, Math.min(1, localRatio));\n}\n\nexport function motionMatrixAtTime (animation: MotionAnimation, time: number): SVGMatrix | null {\n if (time < animation.begin - EPSILON) { return null; }\n const activeEnd = animation.begin + animation.activeDuration;\n let simpleRatio: number;\n\n if (!animation.indefinite && time >= activeEnd - EPSILON) {\n if (animation.fill !== 'freeze') { return null; }\n const remainder = animation.activeDuration % animation.simpleDuration;\n\n simpleRatio = remainder <= EPSILON ? 1 : remainder / animation.simpleDuration;\n } else {\n const elapsed = Math.max(0, time - animation.begin);\n const simpleElapsed = elapsed % animation.simpleDuration;\n\n simpleRatio = simpleElapsed / animation.simpleDuration;\n if (animation.indefinite && Math.abs(time - animation.end) <= EPSILON) { simpleRatio = 1; }\n }\n const point = animation.pointValues != null && !animation.usesKeyPoints\n ? sampleMotionPointValues(animation, simpleRatio)\n : sampleMotionPath(animation.path, motionProgressAtRatio(animation, simpleRatio));\n const angle = animation.rotate === 'auto'\n ? point.angle\n : animation.rotate === 'auto-reverse'\n ? point.angle + 180\n : animation.rotate;\n const radians = angle * Math.PI / 180;\n const cos = Math.cos(radians);\n const sin = Math.sin(radians);\n\n return { a: cos, b: sin, c: -sin, d: cos, e: point.x, f: point.y };\n}\n","import { EPSILON } from './types';\n\n/**\n * 单个图层烘焙组合变换时的采样点上限。\n *\n * 组合变换只能栅格化,采样密度直接决定 IR 与 GE 的体积:长时间线会转出上百 MB\n * 场景数据,Effects 解析时锁死主线程。与 COMPOSITION_SAMPLE_STEP 共同决定切换点,\n * 1024 点约合 256 帧(30fps 下 8.5 秒)之后转入误差驱动细分。\n */\nexport const MAX_COMPOSITION_SAMPLES = 1024;\n\n/** 烘焙组合变换的基准采样间隔(帧)。 */\nexport const COMPOSITION_SAMPLE_STEP = 0.25;\n\n/** 误差检查位置。曲线可能与端点连线在多个位置相交,只查中点会漏判。 */\nconst ERROR_PROBES = [0.25, 0.5, 0.75];\n\nexport interface CompositionFrameSample<T> {\n frame: number;\n value: T;\n}\n\nexport interface CompositionFrameSamplingOptions<T> {\n /** 时间线末帧。 */\n endFrame: number;\n /** 承载语义、必须保留的时刻:源关键帧、区间边界、动画起止。 */\n anchorFrames: number[];\n /** 瞬时跳变时刻。跨越它的区间不参与细分,否则误差必然超限并耗尽预算。 */\n jumpFrames?: number[];\n /** 求指定帧的组合值。 */\n evaluate: (frame: number) => T;\n /** 把值对齐到左邻所在分支,例如角度跨过 ±180° 时补整圈。 */\n unwrapForMeasure?: (value: T, left: T) => T;\n /** 相对线性插值的误差,1 表示刚好达到容忍度;t 为区间内的归一化位置。 */\n normalizeError: (value: T, left: T, right: T, t: number) => number;\n}\n\n/**\n * 组合变换的采样入口。\n *\n * 均匀网格装得进预算时照常铺网;超出预算时按误差细分,保留全部锚点,只加密\n * 线性插值误差超限的区间。\n */\nexport function sampleCompositionFrames<T> (\n options: CompositionFrameSamplingOptions<T>,\n): CompositionFrameSample<T>[] {\n if (!fitsUniformGrid(options.endFrame)) {\n return refineCompositionFrames(options);\n }\n const frames = new Set<number>(uniformFrames(options.endFrame));\n\n for (const frame of options.anchorFrames) {\n if (Number.isFinite(frame) && frame >= 0 && frame <= options.endFrame + EPSILON) {\n frames.add(frame);\n }\n }\n\n return [...frames]\n .sort((left, right) => left - right)\n .map(frame => ({ frame, value: options.evaluate(frame) }));\n}\n\n/**\n * 在锚点之间按误差细分。\n *\n * 锚点全部保留;只有相对两端线性插值的误差超限时才继续二分,因此线性区间不会\n * 增加采样点,而曲线路径(如绕远端支点旋转的圆心轨迹)会被检测到。\n */\nexport function refineCompositionFrames<T> (\n options: CompositionFrameSamplingOptions<T>,\n): CompositionFrameSample<T>[] {\n const jumpFrames = options.jumpFrames ?? [];\n const anchors = [...new Set(options.anchorFrames)]\n .filter(frame => Number.isFinite(frame))\n .sort((left, right) => left - right);\n\n if (anchors.length === 0) { return []; }\n const samples: CompositionFrameSample<T>[] = anchors.map(frame => ({\n frame,\n value: options.evaluate(frame),\n }));\n\n if (samples.length < 2 || samples.length >= MAX_COMPOSITION_SAMPLES) { return samples; }\n const errors = samples.slice(0, -1).map((sample, index) => (\n intervalError(options, sample, samples[index + 1], jumpFrames)\n ));\n\n while (samples.length < MAX_COMPOSITION_SAMPLES) {\n let worstIndex = -1;\n let worstError = 1;\n\n for (let index = 0; index < errors.length; index++) {\n if (errors[index] > worstError) {\n worstError = errors[index];\n worstIndex = index;\n }\n }\n if (worstIndex < 0) { break; }\n const left = samples[worstIndex];\n const right = samples[worstIndex + 1];\n\n if (!canSplitInterval(right.frame - left.frame)) {\n errors[worstIndex] = 0;\n continue;\n }\n const frame = (left.frame + right.frame) / 2;\n const inserted: CompositionFrameSample<T> = { frame, value: options.evaluate(frame) };\n\n samples.splice(worstIndex + 1, 0, inserted);\n errors.splice(\n worstIndex,\n 1,\n intervalError(options, left, inserted, jumpFrames),\n intervalError(options, inserted, right, jumpFrames),\n );\n }\n\n return samples;\n}\n\n/** 按基准间隔铺满整条时间线,末帧单独收尾。 */\nfunction uniformFrames (endFrame: number): number[] {\n if (!Number.isFinite(endFrame) || endFrame <= 0) { return [0]; }\n const frames: number[] = [];\n\n for (let frame = 0; frame < endFrame - EPSILON; frame += COMPOSITION_SAMPLE_STEP) {\n frames.push(frame);\n }\n frames.push(endFrame);\n\n return frames;\n}\n\n/** 均匀网格是否装得进预算。与 uniformFrames 用同一推进方式计数,保证边界一致。 */\nfunction fitsUniformGrid (endFrame: number): boolean {\n if (!Number.isFinite(endFrame) || endFrame <= 0) { return true; }\n let interior = 0;\n\n for (let frame = 0; frame < endFrame - EPSILON; frame += COMPOSITION_SAMPLE_STEP) {\n interior++;\n if (interior + 1 > MAX_COMPOSITION_SAMPLES) { return false; }\n }\n\n return true;\n}\n\nfunction intervalError<T> (\n options: CompositionFrameSamplingOptions<T>,\n left: CompositionFrameSample<T>,\n right: CompositionFrameSample<T>,\n jumpFrames: number[],\n): number {\n const span = right.frame - left.frame;\n\n if (!canSplitInterval(span) || containsJump(left.frame, right.frame, jumpFrames)) { return 0; }\n const alignedRight = align(options, right.value, left.value);\n let worst = 0;\n\n for (const t of ERROR_PROBES) {\n const value = align(options, options.evaluate(left.frame + span * t), left.value);\n const error = options.normalizeError(value, left.value, alignedRight, t);\n\n if (Number.isFinite(error) && error > worst) { worst = error; }\n }\n\n return worst;\n}\n\nfunction align<T> (options: CompositionFrameSamplingOptions<T>, value: T, left: T): T {\n return options.unwrapForMeasure == null ? value : options.unwrapForMeasure(value, left);\n}\n\n/** 区间内(不含左端)存在跳变时不可细分。 */\nfunction containsJump (leftFrame: number, rightFrame: number, jumpFrames: number[]): boolean {\n return jumpFrames.some(frame => frame > leftFrame + EPSILON && frame <= rightFrame + EPSILON);\n}\n\n/** 二分后的半区间是否仍不小于基准间隔,决定该区间能否继续加密。 */\nfunction canSplitInterval (span: number): boolean {\n return span >= 2 * COMPOSITION_SAMPLE_STEP - EPSILON;\n}\n","import type { IRKeyframe, IRTransform, IRVec3 } from '@vvfx/animation-ir';\nimport {\n decomposeMatrix, IDENTITY, multiply, transformPoint, type SVGMatrix,\n} from '../../matrix';\nimport {\n matrixForTransformValue, sampleAnimationValue,\n} from './build-keyframes';\nimport { motionMatrixAtTime } from './parse-motion';\nimport { valuesEqual } from './parse-timeline';\nimport { sampleCompositionFrames } from './sample-composition-frames';\nimport {\n EPSILON, LINEAR_IN_TANGENT, LINEAR_OUT_TANGENT,\n type MotionAnimation, type SMILAnimation, type TransformContext, type TransformStage,\n} from './types';\n\n/** 位置误差容忍度(用户坐标单位)。 */\nconst POSITION_TOLERANCE = 0.5;\n/** 缩放误差容忍度(相对值)。 */\nconst SCALE_TOLERANCE = 0.005;\n/** 旋转误差容忍度(度)。 */\nconst ROTATION_TOLERANCE = 0.5;\n\n/** 细分时衡量误差的观测量。 */\ninterface TransformProbe {\n position: [number, number];\n scale: [number, number];\n rotation: number;\n}\n\nfunction composeLocalTransform (\n animations: SMILAnimation[],\n motions: MotionAnimation[],\n selfMatrix: SVGMatrix,\n time: number,\n): SVGMatrix {\n let current = selfMatrix;\n\n for (const animation of animations) {\n const value = sampleAnimationValue(animation, time);\n\n if (value == null) { continue; }\n const animated = matrixForTransformValue(animation.type, value);\n\n current = animation.additive === 'sum' ? multiply(current, animated) : animated;\n }\n\n let motionMatrix = IDENTITY;\n\n for (const motion of motions) {\n const animated = motionMatrixAtTime(motion, time);\n\n if (animated == null) { continue; }\n motionMatrix = motion.additive === 'sum' ? multiply(motionMatrix, animated) : animated;\n }\n\n // SVG motion transform is applied after the element's authored and animated\n // transform, so its translation is not scaled or rotated by that transform.\n return multiply(motionMatrix, current);\n}\n\nfunction probeTransform (matrix: SVGMatrix, localCenter: [number, number]): TransformProbe {\n const center = transformPoint(matrix, localCenter[0], localCenter[1]);\n const decomposed = decomposeMatrix(matrix);\n\n return {\n position: [center.x, center.y],\n scale: [decomposed.sx, decomposed.sy],\n rotation: decomposed.rotation,\n };\n}\n\n/** 把 rotation 对齐到左邻分支,消除 atan2 的 ±180° 环绕。 */\nfunction alignProbe (value: TransformProbe, left: TransformProbe): TransformProbe {\n if (!Number.isFinite(value.rotation) || !Number.isFinite(left.rotation)) { return value; }\n\n return {\n ...value,\n rotation: value.rotation + Math.round((left.rotation - value.rotation) / 360) * 360,\n };\n}\n\n/** 归一化偏差:观测值相对线性插值的偏离量,1 表示刚好达到容忍度。 */\nfunction relativeDeviation (value: number, left: number, right: number, t: number, tolerance: number): number {\n const expected = left + (right - left) * t;\n\n return Math.abs(value - expected) / tolerance;\n}\n\nfunction probeError (\n value: TransformProbe,\n left: TransformProbe,\n right: TransformProbe,\n t: number,\n): number {\n const position = Math.max(\n relativeDeviation(value.position[0], left.position[0], right.position[0], t, POSITION_TOLERANCE),\n relativeDeviation(value.position[1], left.position[1], right.position[1], t, POSITION_TOLERANCE),\n );\n const scale = Math.max(\n relativeDeviation(value.scale[0], left.scale[0], right.scale[0], t, SCALE_TOLERANCE),\n relativeDeviation(value.scale[1], left.scale[1], right.scale[1], t, SCALE_TOLERANCE),\n );\n const rotation = relativeDeviation(value.rotation, left.rotation, right.rotation, t, ROTATION_TOLERANCE);\n\n return Math.max(position, scale, rotation);\n}\n\nexport function applySampledTransformComposition (\n stages: TransformStage[],\n baseMatrix: SVGMatrix,\n transform: IRTransform,\n frameRate: number,\n context: TransformContext,\n): void {\n const geometries = stages.flatMap(stage => stage.geometry == null ? [] : [stage.geometry]);\n const animations = stages.flatMap(stage => stage.animations).concat(geometries.flatMap(geometry => geometry.animations));\n const motions = stages.flatMap(stage => stage.motions);\n const end = Math.max(\n ...animations.map(animation => animation.end),\n ...motions.map(animation => animation.end),\n );\n const endFrame = end * frameRate;\n const anchorFrames = new Set<number>([0, endFrame]);\n const jumpFrames: number[] = [];\n\n for (const animation of animations) {\n for (let i = 0; i < animation.samples.length; i++) {\n const sampleFrame = animation.samples[i].time * frameRate;\n\n if (animation.calcMode === 'discrete' && i > 0 && sampleFrame > EPSILON) {\n // 采样矩阵组合(祖先 group / geometry / motion)不能携带每个源通道的 IR hold metadata。\n // 插入与 makeKeyframes 相同的 sub-frame bridge,使 Effects 保持旧矩阵直到离散边界再立即跳变。\n anchorFrames.add(Math.max(0, sampleFrame - 0.001));\n }\n anchorFrames.add(sampleFrame);\n const previous = animation.samples[i - 1];\n\n if (previous != null && Math.abs(previous.time - animation.samples[i].time) < EPSILON && !valuesEqual(previous.value, animation.samples[i].value)) {\n anchorFrames.add(Math.max(0, sampleFrame - 0.001));\n jumpFrames.push(sampleFrame);\n }\n }\n if (animation.fill === 'remove' && !animation.indefinite && animation.end > 0) {\n anchorFrames.add(Math.max(0, animation.end * frameRate - 0.001));\n anchorFrames.add(animation.end * frameRate);\n }\n }\n for (const motion of motions) {\n anchorFrames.add(Math.max(0, motion.begin * frameRate));\n anchorFrames.add(motion.end * frameRate);\n const cycleCount = Math.max(1, Math.ceil(motion.activeDuration / motion.simpleDuration - EPSILON));\n\n for (let cycle = 0; cycle < cycleCount; cycle++) {\n const cycleStart = motion.begin + cycle * motion.simpleDuration;\n\n for (const keyTime of motion.keyTimes) {\n const boundary = (cycleStart + keyTime * motion.simpleDuration) * frameRate;\n\n if (boundary < 0 || boundary > endFrame + EPSILON) { continue; }\n if (motion.calcMode === 'discrete' && boundary > EPSILON) {\n anchorFrames.add(Math.max(0, boundary - 0.001));\n }\n anchorFrames.add(boundary);\n }\n }\n }\n\n const matrixCache = new Map<number, SVGMatrix>();\n const matrixAtFrame = (frame: number): SVGMatrix => {\n let matrix = matrixCache.get(frame);\n\n if (matrix == null) {\n matrix = baseMatrix;\n for (const stage of stages) {\n matrix = multiply(matrix, composeLocalTransform(\n stage.animations,\n stage.motions,\n stage.staticMatrix,\n frame / frameRate,\n ));\n if (stage.geometry != null) {\n matrix = multiply(matrix, stage.geometry.matrixAtTime(frame / frameRate));\n }\n }\n matrixCache.set(frame, matrix);\n }\n\n return matrix;\n };\n\n const sampled = sampleCompositionFrames<TransformProbe>({\n endFrame,\n anchorFrames: [...anchorFrames].filter(frame => frame >= 0 && frame <= endFrame + EPSILON),\n jumpFrames,\n evaluate: frame => probeTransform(matrixAtFrame(frame), context.localCenter),\n unwrapForMeasure: alignProbe,\n normalizeError: probeError,\n });\n const orderedFrames = sampled.map(sample => sample.frame);\n const positionKeyframes: IRKeyframe<IRVec3>[] = [];\n const scaleKeyframes: IRKeyframe<IRVec3>[] = [];\n const rotationKeyframes: IRKeyframe<number>[] = [];\n\n for (let i = 0; i < sampled.length; i++) {\n const probe = sampled[i].value;\n const position: IRVec3 = [probe.position[0], probe.position[1], 0];\n const scale: IRVec3 = [probe.scale[0], probe.scale[1], 1];\n // decomposeMatrix 经 atan2 得到 (-180,180] 的等价角,逐点解缠才能保留多圈旋转。\n const previousRotation = rotationKeyframes.at(-1)?.value;\n const rotation = previousRotation == null\n ? probe.rotation\n : probe.rotation + Math.round((previousRotation - probe.rotation) / 360) * 360;\n\n positionKeyframes.push({\n frame: orderedFrames[i],\n value: position,\n ...(i > 0 && { inTangent: LINEAR_IN_TANGENT }),\n ...(i < sampled.length - 1 && { outTangent: LINEAR_OUT_TANGENT }),\n });\n scaleKeyframes.push({\n frame: orderedFrames[i],\n value: scale,\n ...(i > 0 && { inTangent: LINEAR_IN_TANGENT }),\n ...(i < sampled.length - 1 && { outTangent: LINEAR_OUT_TANGENT }),\n });\n rotationKeyframes.push({\n frame: orderedFrames[i],\n value: rotation,\n ...(i > 0 && { inTangent: LINEAR_IN_TANGENT }),\n ...(i < sampled.length - 1 && { outTangent: LINEAR_OUT_TANGENT }),\n });\n }\n\n transform.position = { type: 'keyframed', keyframes: positionKeyframes };\n transform.scale = { type: 'keyframed', keyframes: scaleKeyframes };\n const geometry = geometries.at(-1);\n\n if (geometry != null && context.geometryScaleSink != null) {\n context.geometryScaleSink.value = {\n type: 'keyframed',\n keyframes: orderedFrames.map(frame => {\n const scale = geometry.scaleAtTime(frame / frameRate);\n\n return { frame, value: [scale.x, scale.y, 1] as IRVec3 };\n }),\n };\n }\n if (transform.rotation == null) { transform.rotation = {}; }\n transform.rotation.z = { type: 'keyframed', keyframes: rotationKeyframes };\n}\n","import type { IRKeyframe, IRTransform } from '@vvfx/animation-ir';\nimport { readPresentationAttribute } from '../../../parse-svg/read-presentation-attribute';\nimport { sampleAnimationValue } from './build-keyframes';\nimport { parseSMILTag, valuesEqual } from './parse-timeline';\nimport { collectSMILAnimationElements } from './resolve-animation-target';\nimport { sampleCompositionFrames } from './sample-composition-frames';\nimport {\n EPSILON, LINEAR_IN_TANGENT, LINEAR_OUT_TANGENT,\n type BeginTimeCache, type SMILAnimation, type TransformStage,\n} from './types';\n\n/** 透明度误差容忍度(0-1 相对值)。 */\nconst OPACITY_TOLERANCE = 0.004;\n\nexport function readStaticOpacity (node: globalThis.Element): number {\n const raw = readPresentationAttribute(node, 'opacity');\n const value = raw == null || raw.trim() === '' ? 1 : Number(raw);\n\n return Number.isFinite(value) ? Math.max(0, Math.min(1, value)) : 1;\n}\n\nexport function readStaticVisibility (node: globalThis.Element): number {\n const display = readPresentationAttribute(node, 'display')?.trim().toLowerCase();\n\n if (display === 'none') { return 0; }\n const visibility = readPresentationAttribute(node, 'visibility')?.trim().toLowerCase();\n\n return visibility === 'hidden' || visibility === 'collapse' ? 0 : 1;\n}\n\nfunction parseVisibilityValue (value: string, type: string): number[] {\n const normalized = value.trim().toLowerCase();\n const hidden = type === 'display'\n ? normalized === 'none'\n : normalized === 'hidden' || normalized === 'collapse';\n\n return [hidden ? 0 : 1];\n}\n\nfunction parseOpacityAnimation (\n tag: globalThis.Element,\n stage: TransformStage,\n root: globalThis.Element,\n beginCache: BeginTimeCache,\n comparisonDuration?: number,\n): SMILAnimation | null {\n const attributeName = tag.getAttribute('attributeName')?.trim().toLowerCase();\n const valueParser = attributeName === 'display' || attributeName === 'visibility'\n ? parseVisibilityValue\n : undefined;\n const underlyingValue = attributeName === 'opacity'\n ? [readStaticOpacity(stage.node)]\n : attributeName === 'display' || attributeName === 'visibility'\n ? [readStaticVisibility(stage.node)]\n : undefined;\n\n return parseSMILTag(tag, root, beginCache, comparisonDuration, valueParser, underlyingValue);\n}\n\nfunction isOpacityAnimation (animation: SMILAnimation | null): animation is SMILAnimation {\n return animation != null && ['opacity', 'display', 'visibility'].includes(animation.attributeName);\n}\n\nexport function collectOpacityAnimations (\n stage: TransformStage,\n root: globalThis.Element,\n beginCache: BeginTimeCache,\n comparisonDuration?: number,\n): SMILAnimation[] {\n const animationTags = collectSMILAnimationElements(stage.node, root, new Set(['animate', 'set']));\n const animations = animationTags.map(tag => parseOpacityAnimation(tag, stage, root, beginCache, comparisonDuration));\n\n return animations.filter(isOpacityAnimation);\n}\nfunction opacityAtTime (staticOpacity: number, staticVisibility: number, animations: SMILAnimation[], time: number): number {\n let opacity = staticOpacity;\n let visible = staticVisibility > 0.5;\n\n for (const animation of animations) {\n const sampled = sampleAnimationValue(animation, time);\n\n if (sampled == null) { continue; }\n const value = sampled[0] ?? 0;\n\n if (animation.attributeName === 'display' || animation.attributeName === 'visibility') {\n visible = value > 0.5;\n } else {\n opacity = animation.additive === 'sum' ? opacity + value : value;\n }\n }\n\n return visible ? Math.max(0, Math.min(1, opacity)) : 0;\n}\n\nexport function applySampledOpacityComposition (\n stages: TransformStage[],\n animationsByStage: SMILAnimation[][],\n transform: IRTransform,\n frameRate: number,\n): void {\n const animations = animationsByStage.flat();\n const end = Math.max(...animations.map(animation => animation.end));\n const endFrame = end * frameRate;\n const anchorFrames = new Set<number>([0, endFrame]);\n const jumpFrames: number[] = [];\n\n for (const animation of animations) {\n for (const interval of animation.intervals) {\n const beginFrame = interval.begin * frameRate;\n\n if (beginFrame > EPSILON) {\n anchorFrames.add(beginFrame - 0.001);\n }\n }\n for (let index = 0; index < animation.samples.length; index++) {\n const sample = animation.samples[index];\n const sampleFrame = sample.time * frameRate;\n\n anchorFrames.add(sampleFrame);\n const previous = animation.samples[index - 1];\n\n if (previous != null && Math.abs(previous.time - sample.time) < EPSILON && !valuesEqual(previous.value, sample.value)) {\n anchorFrames.add(Math.max(0, sampleFrame - 0.001));\n jumpFrames.push(sampleFrame);\n }\n if (animation.calcMode === 'discrete' && index > 0 && sampleFrame > EPSILON) {\n anchorFrames.add(Math.max(0, sampleFrame - 0.001));\n }\n }\n if (animation.fill === 'remove' && !animation.indefinite && animation.end > 0) {\n anchorFrames.add(Math.max(0, animation.end * frameRate - 0.001));\n anchorFrames.add(animation.end * frameRate);\n }\n }\n\n const opacityAtFrame = (frame: number): number => {\n let opacity = 1;\n\n for (let index = 0; index < stages.length; index++) {\n opacity *= opacityAtTime(\n readStaticOpacity(stages[index].node),\n readStaticVisibility(stages[index].node),\n animationsByStage[index],\n frame / frameRate,\n );\n }\n\n return Math.max(0, Math.min(1, opacity));\n };\n\n const sampled = sampleCompositionFrames<number>({\n endFrame,\n anchorFrames: [...anchorFrames].filter(frame => frame >= 0 && frame <= endFrame + EPSILON),\n jumpFrames,\n evaluate: opacityAtFrame,\n normalizeError: (value, left, right, t) => (\n Math.abs(value - (left + (right - left) * t)) / OPACITY_TOLERANCE\n ),\n });\n const keyframes: IRKeyframe<number>[] = sampled.map((sample, index) => ({\n frame: sample.frame,\n value: sample.value,\n ...(index > 0 && { inTangent: LINEAR_IN_TANGENT }),\n ...(index < sampled.length - 1 && { outTangent: LINEAR_OUT_TANGENT }),\n }));\n\n transform.opacity = { type: 'keyframed', keyframes };\n}\n","import type { IRTransform, IRVec3 } from '@vvfx/animation-ir';\nimport {\n decomposeMatrix, IDENTITY, invertSVGMatrix, multiply, parseTransform, transformPoint, type SVGMatrix,\n} from '../../matrix';\nimport {\n applyRotateSpatialTangents, makeKeyframes, matrixForTransformValue,\n staticValue, subdivideFullTurn, unwrapRotationValues,\n} from './build-keyframes';\nimport { parseMotionAnimation } from './parse-motion';\nimport { applySampledTransformComposition } from './apply-transform-composition';\nimport {\n applySampledOpacityComposition, collectOpacityAnimations, readStaticOpacity, readStaticVisibility,\n} from './apply-opacity-composition';\nimport { collectGeometryAnimation } from './collect-geometry-animation';\nimport { parseSMILTag } from './parse-timeline';\nimport { getBeginTimeCache } from './timeline-schedule';\nimport { collectSMILAnimationElements } from './resolve-animation-target';\nimport {\n EPSILON,\n type BeginTimeCache, type MotionAnimation, type SMILAnimation, type TransformContext, type TransformStage,\n} from './types';\n\nfunction readDirectTransformStage (\n node: globalThis.Element,\n root: globalThis.Element,\n beginCache: BeginTimeCache,\n staticMatrix: SVGMatrix,\n comparisonDuration?: number,\n): TransformStage {\n const animations = collectSMILAnimationElements(node, root, new Set(['animatetransform']))\n .map(tag => parseSMILTag(tag, root, beginCache, comparisonDuration))\n .filter((animation): animation is SMILAnimation => animation != null && ['translate', 'scale', 'rotate'].includes(animation.type));\n const motions = collectSMILAnimationElements(node, root, new Set(['animatemotion']))\n .map(tag => parseMotionAnimation(tag, root, beginCache, comparisonDuration))\n .filter((animation): animation is MotionAnimation => animation != null);\n\n return { node, staticMatrix, animations, motions };\n}\n\nfunction collectTransformStages (\n node: globalThis.Element,\n root: globalThis.Element,\n beginCache: BeginTimeCache,\n context: TransformContext,\n): { baseMatrix: SVGMatrix; stages: TransformStage[] } {\n const ancestorGroups: globalThis.Element[] = [];\n let parent = node.parentNode as globalThis.Element | null;\n\n while (parent != null && parent !== context.ancestorStopNode) {\n const tagName = parent.tagName?.toLowerCase();\n\n if (tagName === 'g' || tagName === 'a' || tagName === 'switch' || tagName === 'symbol') {\n ancestorGroups.push(parent);\n }\n if (tagName === 'svg') { break; }\n parent = parent.parentNode as globalThis.Element | null;\n }\n ancestorGroups.reverse();\n\n let groupStaticProduct = IDENTITY;\n const stages = ancestorGroups.map(group => {\n const staticMatrix = parseTransform(group.getAttribute('transform') ?? '');\n\n groupStaticProduct = multiply(groupStaticProduct, staticMatrix);\n\n return readDirectTransformStage(group, root, beginCache, staticMatrix, context.comparisonDuration);\n });\n\n stages.push(readDirectTransformStage(node, root, beginCache, context.selfMatrix, context.comparisonDuration));\n\n const baseMatrix = context.preserveAncestorTransforms === true\n ? context.ancestorMatrix\n : multiply(context.ancestorMatrix, invertSVGMatrix(groupStaticProduct));\n\n return { baseMatrix, stages };\n}\n\nfunction applyCollectedSMILTransform (\n stages: TransformStage[],\n root: globalThis.Element,\n beginCache: BeginTimeCache,\n baseMatrix: SVGMatrix,\n transform: IRTransform,\n outDuration: { value: number },\n frameRate: number,\n context: TransformContext,\n forceSampledComposition = false,\n): void {\n const ancestorStages = stages.slice(0, -1);\n const ownStage = stages.at(-1);\n\n if (ownStage == null) { return; }\n const transformAnimations = ownStage.animations;\n const motionAnimations = ownStage.motions;\n const geometries = stages.flatMap(stage => stage.geometry == null ? [] : [stage.geometry]);\n const ancestorHasTransformAnimation = ancestorStages.some(stage => stage.animations.length > 0 || stage.motions.length > 0);\n const allTransformAnimations = stages.flatMap(stage => stage.animations);\n const allMotionAnimations = stages.flatMap(stage => stage.motions);\n const opacityAnimationsByStage = stages.map(stage => stage.ignoreOpacity === true\n ? []\n : collectOpacityAnimations(stage, root, beginCache, context.comparisonDuration));\n const allOpacityAnimations = opacityAnimationsByStage.flat();\n const ownOpacityAnimations = opacityAnimationsByStage.at(-1) ?? [];\n const ancestorHasOpacityAnimation = opacityAnimationsByStage.slice(0, -1).some(animations => animations.length > 0);\n const hasTransformWork = allTransformAnimations.length > 0\n || allMotionAnimations.length > 0\n || geometries.some(geometry => geometry.animations.length > 0);\n const hasAnimatedGeometry = geometries.some(geometry => geometry.animations.length > 0);\n\n if (hasTransformWork && (forceSampledComposition || ancestorHasTransformAnimation || motionAnimations.length > 0 || hasAnimatedGeometry)) {\n applySampledTransformComposition(stages, baseMatrix, transform, frameRate, context);\n outDuration.value = Math.max(\n outDuration.value,\n ...allTransformAnimations.map(animation => animation.end),\n ...allMotionAnimations.map(animation => animation.end),\n ...geometries.flatMap(geometry => geometry.animations.map(animation => animation.end)),\n );\n } else if (transformAnimations.length > 1) {\n applySampledTransformComposition([ownStage], context.ancestorMatrix, transform, frameRate, context);\n outDuration.value = Math.max(outDuration.value, ...transformAnimations.map(animation => animation.end));\n } else if (transformAnimations.length === 1) {\n const animation = subdivideFullTurn(transformAnimations[0]);\n const animatedLocalBase = animation.additive === 'sum' ? context.selfMatrix : IDENTITY;\n const animatedBaseMatrix = multiply(context.ancestorMatrix, animatedLocalBase);\n const staticBaseMatrix = multiply(context.ancestorMatrix, context.selfMatrix);\n const matrices = animation.samples.map(sample => multiply(animatedBaseMatrix, matrixForTransformValue(animation.type, sample.value)));\n const staticCenter = transformPoint(staticBaseMatrix, context.localCenter[0], context.localCenter[1]);\n const staticDecomposed = decomposeMatrix(staticBaseMatrix);\n const positionKeyframes = makeKeyframes(animation, frameRate, (_, index) => {\n const matrix = matrices[index];\n const center = transformPoint(matrix, context.localCenter[0], context.localCenter[1]);\n\n return [center.x, center.y, 0] as IRVec3;\n }, [staticCenter.x, staticCenter.y, 0]);\n const scaleKeyframes = makeKeyframes(animation, frameRate, (_, index) => {\n const decomposed = decomposeMatrix(matrices[index]);\n\n return [decomposed.sx, decomposed.sy, 1] as IRVec3;\n }, [staticDecomposed.sx, staticDecomposed.sy, 1]);\n const rotationValues = unwrapRotationValues(animation, matrices);\n const rotationKeyframes = makeKeyframes(animation, frameRate, (_, index) => rotationValues[index], staticDecomposed.rotation);\n\n if (animation.type === 'rotate' && !animation.samples.some((sample, index) => index > 0 && Math.abs(sample.time - animation.samples[index - 1].time) < EPSILON)) {\n applyRotateSpatialTangents(animation, positionKeyframes, animatedBaseMatrix, context.localCenter);\n }\n\n transform.position = { type: 'keyframed', keyframes: positionKeyframes };\n transform.scale = { type: 'keyframed', keyframes: scaleKeyframes };\n if (transform.rotation == null) { transform.rotation = {}; }\n transform.rotation.z = { type: 'keyframed', keyframes: rotationKeyframes };\n outDuration.value = Math.max(outDuration.value, animation.end);\n }\n\n if ((ancestorHasOpacityAnimation || ownOpacityAnimations.length > 1) && allOpacityAnimations.length > 0) {\n applySampledOpacityComposition(stages, opacityAnimationsByStage, transform, frameRate);\n outDuration.value = Math.max(outDuration.value, ...allOpacityAnimations.map(animation => animation.end));\n } else {\n const ancestorOpacity = ancestorStages.reduce(\n (opacity, stage) => opacity * readStaticOpacity(stage.node),\n 1,\n );\n const ownStaticOpacity = readStaticOpacity(ownStage.node);\n\n for (const animation of ownOpacityAnimations) {\n const baseOpacity = ['display', 'visibility'].includes(animation.attributeName)\n ? staticValue(transform.opacity, 1) * readStaticVisibility(ownStage.node)\n : staticValue(transform.opacity, 1);\n\n transform.opacity = {\n type: 'keyframed',\n keyframes: makeKeyframes(animation, frameRate, value => {\n const animatedOpacity = animation.additive === 'sum'\n ? ownStaticOpacity + (value[0] ?? 0)\n : value[0] ?? 0;\n\n return Math.max(0, Math.min(1, animatedOpacity * ancestorOpacity));\n }, baseOpacity),\n };\n outDuration.value = Math.max(outDuration.value, animation.end);\n }\n }\n}\n\nexport function applySMILToTransform (\n el: { node?: globalThis.Element | null },\n transform: IRTransform,\n outDuration: { value: number },\n frameRate: number,\n context: TransformContext,\n): void {\n const node = el.node;\n\n if (node == null) { return; }\n const root = ((node as globalThis.SVGElement).ownerSVGElement ?? node) as globalThis.Element;\n const beginCache = getBeginTimeCache(root, context.comparisonDuration);\n const collected = collectTransformStages(node, root, beginCache, context);\n const geometry = collectGeometryAnimation(collected.stages.at(-1)!, root, beginCache, context);\n\n if (geometry != null) {\n collected.stages.at(-1)!.geometry = geometry;\n }\n applyCollectedSMILTransform(collected.stages, root, beginCache, collected.baseMatrix, transform, outDuration, frameRate, context);\n}\n\nexport function applySMILToTransformWithOuter (\n innerEl: { node?: globalThis.Element | null },\n outerEl: { node?: globalThis.Element | null },\n transform: IRTransform,\n outDuration: { value: number },\n frameRate: number,\n innerContext: TransformContext,\n outerContext: TransformContext,\n): void {\n const innerNode = innerEl.node;\n const outerNode = outerEl.node;\n\n if (innerNode == null || outerNode == null) { return; }\n const root = ((outerNode as globalThis.SVGElement).ownerSVGElement ?? outerNode) as globalThis.Element;\n const comparisonDuration = innerContext.comparisonDuration ?? outerContext.comparisonDuration;\n const beginCache = getBeginTimeCache(root, comparisonDuration);\n const outerCollected = collectTransformStages(outerNode, root, beginCache, outerContext);\n const innerCollected = collectTransformStages(innerNode, root, beginCache, innerContext);\n const outerGeometry = collectGeometryAnimation(outerCollected.stages.at(-1)!, root, beginCache, outerContext);\n const innerGeometry = collectGeometryAnimation(innerCollected.stages.at(-1)!, root, beginCache, innerContext);\n\n if (outerGeometry != null) {\n outerCollected.stages.at(-1)!.geometry = outerGeometry;\n }\n if (innerGeometry != null) {\n innerCollected.stages.at(-1)!.geometry = innerGeometry;\n }\n const bridgeStage: TransformStage = {\n node: innerNode,\n staticMatrix: innerCollected.baseMatrix,\n animations: [],\n motions: [],\n ignoreOpacity: true,\n };\n const stages = [...outerCollected.stages, bridgeStage, ...innerCollected.stages];\n\n applyCollectedSMILTransform(stages, root, beginCache, outerCollected.baseMatrix, transform, outDuration, frameRate, innerContext, true);\n}\n","import type EditableSVG from '../../../parse-svg/svg-parser';\nimport type { Element } from '@svgdotjs/svg.js';\nimport type { IRAnimatedProperty, IRShape, IRTransform, IRVec3 } from '@vvfx/animation-ir';\nimport { IRShapePrimitiveType } from '@vvfx/animation-ir';\nimport {\n accumulateAncestors, decomposeMatrix, IDENTITY, invertSVGMatrix, multiply,\n parseTransform, transformPoint,\n} from '../../matrix';\nimport { applySMILToTransform } from '../smil/apply-transform-animation';\nimport { collectSMILAnimationElements } from '../smil/resolve-animation-target';\nimport { readSVGElementOpacity } from '../../read-attributes';\nimport type { GeometryContext } from '../smil/types';\n\nexport function readRawNumberAttribute (el: Element, name: string, fallback = 0): number {\n const raw = (el as unknown as { node?: { getAttribute?: (attr: string) => string | null } }).node?.getAttribute?.(name);\n const value = raw == null || raw === '' ? fallback : Number.parseFloat(raw);\n\n return Number.isFinite(value) ? value : fallback;\n}\n\nfunction animatedLengthReference (el: Element, attributeName: string, baseValue: number): number {\n const node = (el as unknown as { node?: globalThis.Element | null }).node;\n\n if (node == null) { return baseValue; }\n // 非零原始尺寸作为几何基准;原始尺寸为零时取动画值的最大值。\n if (baseValue > 1e-9) { return baseValue; }\n const candidates = [baseValue];\n\n const root = ((node as globalThis.SVGElement).ownerSVGElement ?? node) as globalThis.Element;\n\n for (const child of collectSMILAnimationElements(node, root, new Set(['animate', 'set']))) {\n if (child.getAttribute('attributeName')?.toLowerCase() !== attributeName) { continue; }\n const values = child.getAttribute('values');\n\n if (values != null) {\n for (const value of values.split(';')) {\n const parsed = Number.parseFloat(value);\n\n if (Number.isFinite(parsed)) { candidates.push(parsed); }\n }\n }\n for (const attr of ['from', 'to']) {\n const parsed = Number.parseFloat(child.getAttribute(attr) ?? '');\n\n if (Number.isFinite(parsed)) { candidates.push(parsed); }\n }\n const by = Number.parseFloat(child.getAttribute('by') ?? '');\n\n if (Number.isFinite(by)) { candidates.push(baseValue + by); }\n }\n\n return Math.max(0, ...candidates.filter(Number.isFinite));\n}\n\nexport function prepareSMILShapeGeometry (el: Element, shape: IRShape): void {\n const tag = (el as unknown as { node?: { tagName?: string } }).node?.tagName?.toLowerCase();\n\n if (shape.primitiveType === IRShapePrimitiveType.Rectangle && (tag === 'rect' || tag === 'image')) {\n shape.width = animatedLengthReference(el, 'width', shape.width);\n shape.height = animatedLengthReference(el, 'height', shape.height);\n } else if (shape.primitiveType === IRShapePrimitiveType.Ellipse && tag === 'circle') {\n const radius = animatedLengthReference(el, 'r', shape.xRadius);\n\n shape.xRadius = radius;\n shape.yRadius = radius;\n } else if (shape.primitiveType === IRShapePrimitiveType.Ellipse && tag === 'ellipse') {\n shape.xRadius = animatedLengthReference(el, 'rx', shape.xRadius);\n shape.yRadius = animatedLengthReference(el, 'ry', shape.yRadius);\n }\n}\n\nexport function buildTransformGeometry (el: Element, shape: IRShape): GeometryContext | undefined {\n const tag = (el as unknown as { node?: { tagName?: string } }).node?.tagName?.toLowerCase();\n\n if (tag === 'use') {\n return {\n kind: 'use',\n base: {\n x: readRawNumberAttribute(el, 'x'),\n y: readRawNumberAttribute(el, 'y'),\n },\n referenceWidth: 1,\n referenceHeight: 1,\n };\n }\n if (tag === 'line' && shape.primitiveType === IRShapePrimitiveType.Custom) {\n return {\n kind: 'line',\n base: {\n x1: readRawNumberAttribute(el, 'x1'),\n y1: readRawNumberAttribute(el, 'y1'),\n x2: readRawNumberAttribute(el, 'x2'),\n y2: readRawNumberAttribute(el, 'y2'),\n },\n referenceWidth: 1,\n referenceHeight: 1,\n };\n }\n if (shape.primitiveType === IRShapePrimitiveType.Rectangle && (tag === 'rect' || tag === 'image')) {\n return {\n kind: 'rect',\n base: {\n x: readRawNumberAttribute(el, 'x'),\n y: readRawNumberAttribute(el, 'y'),\n width: readRawNumberAttribute(el, 'width'),\n height: readRawNumberAttribute(el, 'height'),\n },\n referenceWidth: shape.width,\n referenceHeight: shape.height,\n };\n }\n if (shape.primitiveType === IRShapePrimitiveType.Ellipse && tag === 'circle') {\n return {\n kind: 'circle',\n base: {\n cx: readRawNumberAttribute(el, 'cx'),\n cy: readRawNumberAttribute(el, 'cy'),\n r: readRawNumberAttribute(el, 'r'),\n },\n referenceWidth: shape.xRadius * 2,\n referenceHeight: shape.yRadius * 2,\n };\n }\n if (shape.primitiveType === IRShapePrimitiveType.Ellipse && tag === 'ellipse') {\n return {\n kind: 'ellipse',\n base: {\n cx: readRawNumberAttribute(el, 'cx'),\n cy: readRawNumberAttribute(el, 'cy'),\n rx: readRawNumberAttribute(el, 'rx'),\n ry: readRawNumberAttribute(el, 'ry'),\n },\n referenceWidth: shape.xRadius * 2,\n referenceHeight: shape.yRadius * 2,\n };\n }\n\n return undefined;\n}\n\nexport function buildTransform (\n es: EditableSVG,\n el: Element,\n shape: IRShape,\n smilDurationSink: { value: number },\n frameRate: number,\n geometryScaleSink?: { value?: IRAnimatedProperty<IRVec3> },\n): IRTransform {\n const localCenter = shape.position;\n // 使用祖先和元素自身的矩阵计算世界空间变换。\n const mAnc = accumulateAncestors(el);\n const selfAttr = (el as unknown as { node?: { getAttribute?: (n: string) => string | null } }).node?.getAttribute?.('transform') ?? '';\n const mSelf = selfAttr !== '' ? parseTransform(selfAttr) : IDENTITY;\n const m = multiply(mAnc, mSelf);\n const worldCenter = transformPoint(m, localCenter[0], localCenter[1]);\n const opacity = readSVGElementOpacity(el);\n const { sx, sy, rotation } = decomposeMatrix(m);\n\n const transform: IRTransform = {\n position: { type: 'static', value: [worldCenter.x, worldCenter.y, 0] as IRVec3 },\n scale: { type: 'static', value: [sx, sy, 1] },\n rotation: { z: { type: 'static', value: rotation } },\n // 以局部几何中心为 anchor,避免变换后重复偏移。\n anchor: { type: 'static', value: [localCenter[0], localCenter[1], 0] as IRVec3 },\n opacity: { type: 'static', value: opacity },\n };\n const geometry = buildTransformGeometry(el, shape);\n\n // 收集 transform、opacity、geometry 和 motion 动画。\n applySMILToTransform(el, transform, smilDurationSink, frameRate, {\n ancestorMatrix: mAnc,\n selfMatrix: mSelf,\n localCenter,\n geometry,\n geometryScaleSink,\n comparisonDuration: smilDurationSink.value,\n });\n\n return transform;\n}\n\nexport function applySMILToParsedTransform (\n el: Element,\n transform: IRTransform | undefined,\n smilDurationSink: { value: number },\n frameRate: number,\n composeOpacityAcrossStages = false,\n): void {\n if (transform == null) { return; }\n const position = transform.position;\n\n if (position == null || position.type === 'keyframed') { return; }\n const mAnc = accumulateAncestors(el);\n const selfAttr = (el as unknown as { node?: { getAttribute?: (name: string) => string | null } }).node?.getAttribute?.('transform') ?? '';\n const mSelf = selfAttr !== '' ? parseTransform(selfAttr) : IDENTITY;\n const fullMatrix = multiply(mAnc, mSelf);\n const localCenter = transformPoint(invertSVGMatrix(fullMatrix), position.value[0], position.value[1]);\n\n applySMILToTransform(el, transform, smilDurationSink, frameRate, {\n ancestorMatrix: mAnc,\n selfMatrix: mSelf,\n localCenter: [localCenter.x, localCenter.y],\n comparisonDuration: smilDurationSink.value,\n composeOpacityAcrossStages,\n });\n}\n","import type { Element } from '@svgdotjs/svg.js';\nimport type { IRLayer } from '@vvfx/animation-ir';\nimport { SVG2IR_WARNING_CODES } from '../../../common/types';\nimport { collectWarning, describeElement } from '../diagnostics/collect-warnings';\nimport { parseImageLayer } from '../image/parse-image';\nimport { buildTransform, prepareSMILShapeGeometry } from '../transform/build-transform';\nimport { warnUnsupportedAttributes } from '../diagnostics/warn-unsupported';\nimport { hasAnimatedVisibility } from '../smil/inspect-animation';\nimport { parseRect } from '../shape/parse-shape-primitives';\nimport type { ImageConversionContext } from './conversion-session';\n\nexport function convertImageElement (element: Element, context: ImageConversionContext): void {\n const parsed = parseImageLayer(context.es, element, context.imageNaturalSizes, context.resourceBaseUrl);\n\n if (parsed == null) {\n collectWarning(\n context.emit,\n SVG2IR_WARNING_CODES.ELEMENT_DROPPED,\n '元素 <image> 缺失 href 或有效尺寸,已跳过。',\n describeElement(element),\n context.strict,\n );\n\n return;\n }\n const { layer: imageLayer, asset: imageAsset } = parsed;\n\n imageLayer.visible = imageLayer.visible || hasAnimatedVisibility(element);\n context.appendAsset(imageAsset);\n const imageShape = parseRect(context.es, element);\n\n prepareSMILShapeGeometry(element, imageShape);\n const transform = buildTransform(\n context.es,\n element,\n imageShape,\n context.smilDurationSink ?? { value: 0 },\n context.frameRate,\n );\n\n transform.anchor = imageLayer.transform?.anchor;\n\n const layerIndex = context.allocateLayerIndex();\n const layer: IRLayer = {\n ...imageLayer,\n id: `${layerIndex}`,\n name: String(context.es.getAttr(element, 'id') ?? 'image'),\n time: { inFrame: 0, outFrame: context.outFrame },\n transform,\n };\n\n context.appendLayer(layer, element);\n warnUnsupportedAttributes(\n context.es,\n element,\n 'image',\n context.emit,\n context.strict,\n context.idEls,\n );\n}\n","import type { IRColor } from '@vvfx/animation-ir';\nimport { mapSVGColorToIRColor } from '../../map-color';\nimport type { SVGPreservedPaintAnimation } from '../../../svg-preserved-data';\nimport { makeKeyframes } from './build-keyframes';\nimport { findAnimationById, parseColorValue, parseSMILTag } from './parse-timeline';\nimport { getBeginTimeCache } from './timeline-schedule';\nimport { collectSMILAnimationElements } from './resolve-animation-target';\n\nfunction paintServerId (raw: string | undefined): string | null {\n const match = raw?.match(/^url\\(\\s*[\"']?#([^)\"'\\s]+)\\s*[\"']?\\)$/i);\n\n return match?.[1] ?? null;\n}\n\nfunction clampOpacity (raw: string | null, fallback = 1): number {\n const value = raw == null || raw.trim() === '' ? fallback : Number(raw);\n\n return Number.isFinite(value) ? Math.max(0, Math.min(1, value)) : fallback;\n}\n\nexport function parseSMILPaintAnimations (\n el: { node?: globalThis.Element | null },\n frameRate: number,\n comparisonDuration: number,\n baseOpacity: { fill: number; stroke: number },\n alphaBase: { fill: number; stroke: number },\n paintSources: { fill?: string; stroke?: string },\n baseStrokeWidth = 1,\n): SVGPreservedPaintAnimation[] {\n const node = el.node;\n\n if (node == null) { return []; }\n const root = ((node as globalThis.SVGElement).ownerSVGElement ?? node) as globalThis.Element;\n const beginCache = getBeginTimeCache(root, comparisonDuration);\n const result: SVGPreservedPaintAnimation[] = [];\n\n for (const child of collectSMILAnimationElements(node, root, new Set(['animate', 'set']))) {\n const attributeName = child.getAttribute('attributeName')?.toLowerCase();\n\n if (attributeName !== 'fill' && attributeName !== 'stroke') { continue; }\n const paintSource = paintSources[attributeName];\n\n// solid material 只有一个 _Color 槽位;渐变动画由 stop-color 路径处理。\n if (paintSource == null || paintSource.trim().toLowerCase() === 'none' || paintServerId(paintSource) != null) { continue; }\n const baseColor = mapSVGColorToIRColor(paintSource, 1);\n const animation = baseColor == null\n ? null\n : parseSMILTag(child, root, beginCache, comparisonDuration, parseColorValue, baseColor);\n\n if (animation == null || baseColor == null) { continue; }\n result.push({\n kind: 'solid-color',\n target: attributeName,\n color: {\n type: 'keyframed',\n keyframes: makeKeyframes(animation, frameRate, value => [\n value[0] ?? 0,\n value[1] ?? 0,\n value[2] ?? 0,\n value[3] ?? 1,\n ] as IRColor, baseColor),\n },\n });\n }\n\n for (const child of collectSMILAnimationElements(node, root, new Set(['animate', 'set']))) {\n const rawAttributeName = child.getAttribute('attributeName')?.toLowerCase();\n const target = rawAttributeName === 'fill-opacity'\n ? 'fill'\n : rawAttributeName === 'stroke-opacity'\n ? 'stroke'\n : null;\n const underlyingValue = rawAttributeName === 'stroke-width'\n ? [baseStrokeWidth]\n : target == null\n ? undefined\n : [baseOpacity[target]];\n const animation = parseSMILTag(child, root, beginCache, comparisonDuration, undefined, underlyingValue);\n const attributeName = animation?.attributeName;\n\n if (animation != null && attributeName === 'stroke-width') {\n result.push({\n kind: 'stroke-width',\n width: {\n type: 'keyframed',\n keyframes: makeKeyframes(animation, frameRate, value => value[0] ?? baseStrokeWidth, baseStrokeWidth),\n },\n });\n continue;\n }\n if (animation == null || target == null) { continue; }\n result.push({\n kind: 'opacity',\n target,\n opacity: {\n type: 'keyframed',\n keyframes: makeKeyframes(animation, frameRate, value => value[0] ?? 0, baseOpacity[target]),\n },\n alphaBase: alphaBase[target],\n });\n }\n\n for (const target of ['fill', 'stroke'] as const) {\n const gradientId = paintServerId(paintSources[target]);\n\n if (gradientId == null) { continue; }\n const gradient = findAnimationById(root, gradientId);\n const gradientTag = gradient?.tagName.toLowerCase();\n\n if (gradient == null || (gradientTag !== 'lineargradient' && gradientTag !== 'radialgradient')) { continue; }\n const stops = Array.from(gradient.children).filter(child => child.tagName.toLowerCase() === 'stop');\n\n for (let stopIndex = 0; stopIndex < stops.length; stopIndex++) {\n const stop = stops[stopIndex];\n const stopOpacity = clampOpacity(stop.getAttribute('stop-opacity'));\n const alphaMultiplier = stopOpacity * baseOpacity[target] * alphaBase[target];\n const staticColor = mapSVGColorToIRColor(stop.getAttribute('stop-color') ?? 'black', 1) ?? [0, 0, 0, 1];\n\n for (const child of collectSMILAnimationElements(stop, root, new Set(['animate', 'set']))) {\n if (child.getAttribute('attributeName')?.toLowerCase() !== 'stop-color') {\n continue;\n }\n const baseColor: IRColor = [\n staticColor[0],\n staticColor[1],\n staticColor[2],\n staticColor[3] * alphaMultiplier,\n ];\n const animation = parseSMILTag(child, root, beginCache, comparisonDuration, parseColorValue, baseColor);\n\n if (animation == null) { continue; }\n result.push({\n kind: 'gradient-stop-color',\n target,\n paintIndex: 0,\n stopIndex,\n color: {\n type: 'keyframed',\n keyframes: makeKeyframes(animation, frameRate, value => [\n value[0] ?? 0,\n value[1] ?? 0,\n value[2] ?? 0,\n (value[3] ?? 1) * alphaMultiplier,\n ] as IRColor, baseColor),\n },\n });\n }\n }\n }\n\n return result;\n}\n","import type { IRBezierPath, IRShape } from '@vvfx/animation-ir';\nimport type { Element } from '@svgdotjs/svg.js';\nimport type { SVGPreservedShapeAnimation } from '../../../svg-preserved-data';\nimport { normalizePathCommands, normalizedToCustomShapePaths } from '../../normalize-path';\nimport { collectSMILAnimationElements } from './resolve-animation-target';\nimport { parseSMILTag } from './parse-timeline';\nimport { parseNumberList } from './timeline-values';\nimport type { SMILAnimation } from './types';\n\ninterface ShapeAnimationSpec {\n pathSets: IRBezierPath[][];\n valueIndexes: Map<string, number>;\n additiveNeedsBase: boolean;\n accumulationPaths?: IRBezierPath[];\n discrete: boolean;\n}\n\nexport function parseShapeGeometryAnimation (\n el: Element,\n shape: IRShape,\n comparisonDuration: number,\n): SVGPreservedShapeAnimation | undefined {\n if (shape.primitiveType !== 'custom') { return undefined; }\n const node = (el as unknown as { node?: globalThis.Element | null }).node;\n const root = ((node as globalThis.SVGElement | null)?.ownerSVGElement ?? node) as globalThis.Element | null;\n const shapeAttribute = readAnimatedShapeAttribute(node);\n\n if (node == null || root == null || shapeAttribute == null) { return undefined; }\n const { attributeName, closed } = shapeAttribute;\n const baseRaw = node.getAttribute(attributeName) ?? '';\n const basePaths = readBasePaths(shape, baseRaw);\n const animations = collectSMILAnimationElements(node, root, new Set(['animate', 'set']))\n .filter(animation => (animation.getAttribute('attributeName') ?? '').trim().toLowerCase() === attributeName);\n\n if (animations.length === 0) { return undefined; }\n const frames: Array<{ time: number; paths: IRBezierPath[]; order: number }> = [];\n const beginCache = new Map<globalThis.Element, number[]>();\n\n animations.forEach((animationElement, order) => {\n const spec = buildShapeAnimationSpec(\n animationElement,\n attributeName,\n closed,\n shape.position[0],\n shape.position[1],\n basePaths,\n );\n\n if (spec == null) { return; }\n const valueParser = (value: string): number[] | null => {\n const index = spec.valueIndexes.get(value.trim());\n\n return index == null ? null : [index];\n };\n const animation = parseSMILTag(\n animationElement,\n root,\n beginCache,\n comparisonDuration,\n valueParser,\n [0],\n );\n\n if (animation == null) { return; }\n appendAnimationFrames(frames, animation, spec, basePaths, order);\n });\n\n if (frames.length === 0) { return undefined; }\n frames.sort((left, right) => left.time - right.time || left.order - right.order);\n const keyframes: Array<{ time: number; paths: IRBezierPath[] }> = [];\n\n for (const frame of frames) {\n const previous = keyframes.at(-1);\n\n if (previous != null && previous.time === frame.time) {\n previous.paths = frame.paths;\n } else if (previous == null || !pathsEqual(previous.paths, frame.paths)) {\n keyframes.push({ time: frame.time, paths: frame.paths });\n }\n }\n\n return keyframes.length > 1 ? { keyframes } : undefined;\n}\n\nfunction readAnimatedShapeAttribute (node: globalThis.Element | null | undefined): { attributeName: 'd' | 'points'; closed: boolean } | null {\n const tagName = node?.tagName?.toLowerCase();\n\n if (tagName === 'path') { return { attributeName: 'd', closed: false }; }\n if (tagName === 'polygon' || tagName === 'polyline') {\n return { attributeName: 'points', closed: tagName === 'polygon' };\n }\n\n return null;\n}\n\nfunction buildShapeAnimationSpec (\n element: globalThis.Element,\n attributeName: 'd' | 'points',\n closed: boolean,\n centerX: number,\n centerY: number,\n basePaths: IRBezierPath[] | undefined,\n): ShapeAnimationSpec | null {\n const explicitAdditive = (element.getAttribute('additive') ?? '').trim().toLowerCase() === 'sum';\n const accumulates = (element.getAttribute('accumulate') ?? '').trim().toLowerCase() === 'sum';\n const valueCenterX = explicitAdditive ? 0 : centerX;\n const valueCenterY = explicitAdditive ? 0 : centerY;\n const values = readAnimationValues(element);\n\n if (values != null) {\n const pathSets = values.map(value => resolveShapeValue(value, attributeName, closed, valueCenterX, valueCenterY, basePaths));\n\n if (pathSets.some(paths => paths == null)) { return null; }\n const resolved = materializeEmptyPathSets(pathSets.filter(isPaths));\n const discrete = !hasCompatibleTopology(values, resolved, attributeName, closed);\n\n return {\n pathSets: resolved,\n valueIndexes: indexValues(values),\n additiveNeedsBase: explicitAdditive,\n discrete,\n ...(accumulates && { accumulationPaths: resolved.at(-1) }),\n };\n }\n\n const from = element.getAttribute('from');\n const to = element.getAttribute('to');\n const by = element.getAttribute('by');\n\n if (from != null && to != null) {\n const end = resolveShapeValue(to, attributeName, closed, valueCenterX, valueCenterY, basePaths);\n\n if (end == null) { return null; }\n const start = resolveShapeValue(from, attributeName, closed, valueCenterX, valueCenterY, basePaths)\n ?? zeroShapeLike(end, centerX, centerY);\n\n return buildPairSpec(start, end, from, to, explicitAdditive, accumulates ? end : undefined, from, to, attributeName, closed);\n }\n\n if (from != null && by != null) {\n const delta = resolveShapeValue(by, attributeName, closed, 0, 0, undefined);\n\n if (delta == null) { return null; }\n const start = resolveShapeValue(from, attributeName, closed, valueCenterX, valueCenterY, basePaths)\n ?? basePaths\n ?? zeroShapeLike(delta, centerX, centerY);\n const end = addPathSets(start, delta);\n\n if (end != null) {\n return buildPairSpec(start, end, from, by, explicitAdditive, accumulates ? end : undefined, from, by, attributeName, closed);\n }\n\n return buildPairSpec(start, delta, from, by, false, accumulates ? delta : undefined, from, by, attributeName, closed);\n }\n\n if (to != null) {\n const end = resolveShapeValue(to, attributeName, closed, valueCenterX, valueCenterY, basePaths);\n\n if (end == null) { return null; }\n const start = basePaths ?? zeroShapeLike(end, centerX, centerY);\n\n return buildPairSpec(start, end, undefined, to, explicitAdditive, accumulates ? end : undefined, undefined, to, attributeName, closed);\n }\n\n if (by != null) {\n const delta = resolveShapeValue(by, attributeName, closed, 0, 0, undefined);\n\n if (delta == null) { return null; }\n const start = basePaths ?? zeroShapeLike(delta, centerX, centerY);\n const end = basePaths == null ? delta : addPathSets(start, delta);\n\n if (end == null) {\n return buildPairSpec(start, delta, undefined, by, false, undefined, undefined, by, attributeName, closed);\n }\n\n return buildPairSpec(start, end, undefined, by, false, undefined, undefined, by, attributeName, closed);\n }\n\n return null;\n}\n\nfunction readAnimationValues (element: globalThis.Element): string[] | null {\n const values = element.getAttribute('values');\n\n if (values == null || values.trim() === '') { return null; }\n const rawValues = values.split(';').map(value => value.trim());\n let end = rawValues.length;\n\n while (end > 0 && rawValues[end - 1] === '') { end--; }\n\n return rawValues.slice(0, end);\n}\n\nfunction buildPairSpec (\n start: IRBezierPath[],\n end: IRBezierPath[],\n startRaw: string | undefined,\n endRaw: string,\n additiveNeedsBase: boolean,\n accumulationPaths: IRBezierPath[] | undefined,\n startSignature: string | undefined,\n endSignature: string | undefined,\n attributeName: 'd' | 'points',\n closed: boolean,\n): ShapeAnimationSpec | null {\n const valueIndexes = new Map<string, number>();\n\n if (startRaw != null) { valueIndexes.set(startRaw.trim(), 0); }\n valueIndexes.set(endRaw.trim(), 1);\n\n const pathSets = materializeEmptyPathSets([start, end]);\n\n return {\n pathSets,\n valueIndexes,\n additiveNeedsBase,\n discrete: !hasCompatibleTopology(\n [startSignature ?? '', endSignature ?? ''],\n pathSets,\n attributeName,\n closed,\n ),\n accumulationPaths,\n };\n}\n\nfunction indexValues(values: string[]): Map<string, number> {\n return new Map(values.map((value, index) => [value.trim(), index]));\n}\n\nfunction resolveShapeValue (\n raw: string,\n attributeName: 'd' | 'points',\n closed: boolean,\n centerX: number,\n centerY: number,\n basePaths: IRBezierPath[] | undefined,\n): IRBezierPath[] | null {\n const normalized = raw.trim().toLowerCase();\n\n if (normalized === '') { return basePaths ?? []; }\n if (normalized === 'inherit') { return basePaths ?? null; }\n\n return parseShapePaths(raw, attributeName, closed, centerX, centerY);\n}\n\nfunction readBasePaths (shape: Extract<IRShape, { primitiveType: 'custom' }>, baseRaw: string): IRBezierPath[] | undefined {\n const hasAuthoredGeometry = baseRaw.trim() !== '';\n const hasParsedGeometry = shape.customPaths.some(path => path.closed || path.points.length > 1);\n\n return hasAuthoredGeometry || hasParsedGeometry ? shape.customPaths : undefined;\n}\n\nfunction parseShapePaths (\n raw: string,\n attributeName: 'd' | 'points',\n closed: boolean,\n centerX: number,\n centerY: number,\n): IRBezierPath[] | null {\n const d = attributeName === 'd' ? raw : pointsToPath(raw, closed);\n\n if (d.trim() === '') { return null; }\n const paths = normalizedToCustomShapePaths(normalizePathCommands(d));\n\n return paths.length === 0 ? null : translatePaths(paths, centerX, centerY);\n}\n\nfunction pointsToPath (raw: string, closed: boolean): string {\n const points = parseNumberList(raw);\n\n if (points.length < 4 || points.length % 2 !== 0) { return ''; }\n const commands = [`M${points[0]} ${points[1]}`];\n\n for (let index = 2; index < points.length; index += 2) {\n commands.push(`L${points[index]} ${points[index + 1]}`);\n }\n\n return `${commands.join(' ')}${closed ? ' Z' : ''}`;\n}\n\nfunction translatePaths (paths: IRBezierPath[], centerX: number, centerY: number): IRBezierPath[] {\n return paths.map(path => ({\n ...path,\n points: path.points.map(point => ({ x: point.x - centerX, y: point.y - centerY })),\n }));\n}\n\nfunction appendAnimationFrames (\n frames: Array<{ time: number; paths: IRBezierPath[]; order: number }>,\n animation: SMILAnimation,\n spec: ShapeAnimationSpec,\n basePaths: IRBezierPath[] | undefined,\n order: number,\n): void {\n for (const sample of animation.samples) {\n const cycle = spec.accumulationPaths == null ? 0 : sample.cycle;\n const paths = resolveSamplePaths(animation, spec, basePaths, sample.value[0] ?? 0, cycle);\n\n if (paths == null) { continue; }\n if (spec.accumulationPaths != null && sample.cycle > 0 && sample.sourceIndex === 0) {\n const previousCycleEnd = resolveSamplePaths(animation, spec, basePaths, spec.pathSets.length - 1, sample.cycle - 1);\n\n if (previousCycleEnd != null) {\n frames.push({\n time: Math.max(0, sample.time - 1e-4),\n paths: previousCycleEnd,\n order: order - 1,\n });\n }\n }\n frames.push({ time: sample.time, paths, order });\n }\n}\n\nfunction resolveSamplePaths (\n animation: SMILAnimation,\n spec: ShapeAnimationSpec,\n basePaths: IRBezierPath[] | undefined,\n value: number,\n cycle: number,\n): IRBezierPath[] | null {\n const progress = value - cycle;\n const paths = spec.discrete\n ? spec.pathSets[Math.max(0, Math.min(spec.pathSets.length - 1, Math.round(progress)))] ?? null\n : interpolatePathSets(spec.pathSets, progress);\n\n if (paths == null) { return null; }\n let resolved = paths;\n\n if (spec.accumulationPaths != null && cycle > 0) {\n const accumulatedPaths = addPathSets(resolved, scalePathSet(spec.accumulationPaths, cycle));\n\n if (accumulatedPaths == null) { return null; }\n resolved = accumulatedPaths;\n }\n if (animation.additive === 'sum' && spec.additiveNeedsBase && basePaths != null) {\n const additivePaths = addPathSets(basePaths, resolved);\n\n if (additivePaths == null) { return null; }\n resolved = additivePaths;\n }\n\n return resolved;\n}\n\nfunction interpolatePathSets (pathSets: IRBezierPath[][], progress: number): IRBezierPath[] | null {\n if (pathSets.length === 0 || !Number.isFinite(progress)) { return null; }\n const lastIndex = pathSets.length - 1;\n const lowerIndex = progress <= 0 ? 0 : Math.min(lastIndex - 1, Math.floor(progress));\n const upperIndex = Math.min(lastIndex, lowerIndex + 1);\n const ratio = progress <= 0 ? progress : progress - lowerIndex;\n const lower = pathSets[lowerIndex];\n const upper = pathSets[upperIndex];\n\n if (lower == null || upper == null || !hasSameTopology([lower, upper])) { return null; }\n\n return lower.map((path, pathIndex) => interpolatePath(path, upper[pathIndex], ratio));\n}\n\nfunction interpolatePath (from: IRBezierPath, to: IRBezierPath, ratio: number): IRBezierPath {\n const interpolatePoint = (left: { x: number; y: number }, right: { x: number; y: number }) => ({\n x: left.x + (right.x - left.x) * ratio,\n y: left.y + (right.y - left.y) * ratio,\n });\n\n return {\n closed: from.closed,\n points: from.points.map((point, index) => interpolatePoint(point, to.points[index])),\n inTangents: from.inTangents.map((point, index) => interpolatePoint(point, to.inTangents[index])),\n outTangents: from.outTangents.map((point, index) => interpolatePoint(point, to.outTangents[index])),\n };\n}\n\nfunction scalePathSet (paths: IRBezierPath[], factor: number): IRBezierPath[] {\n return paths.map(path => ({\n closed: path.closed,\n points: path.points.map(point => scalePoint(point, factor)),\n inTangents: path.inTangents.map(point => scalePoint(point, factor)),\n outTangents: path.outTangents.map(point => scalePoint(point, factor)),\n }));\n}\n\nfunction scalePoint (point: { x: number; y: number }, factor: number): { x: number; y: number } {\n return { x: point.x * factor, y: point.y * factor };\n}\n\nfunction addPathSets (left: IRBezierPath[], right: IRBezierPath[]): IRBezierPath[] | null {\n if (!hasSameTopology([left, right])) { return null; }\n\n return left.map((path, pathIndex) => {\n const other = right[pathIndex];\n\n return {\n closed: path.closed,\n points: path.points.map((point, index) => addPoint(point, other.points[index])),\n inTangents: path.inTangents.map((point, index) => addPoint(point, other.inTangents[index])),\n outTangents: path.outTangents.map((point, index) => addPoint(point, other.outTangents[index])),\n };\n });\n}\n\nfunction addPoint (left: { x: number; y: number }, right: { x: number; y: number }): { x: number; y: number } {\n return { x: left.x + right.x, y: left.y + right.y };\n}\n\nfunction zeroShapeLike (paths: IRBezierPath[], centerX: number, centerY: number): IRBezierPath[] {\n return paths.map(path => ({\n closed: path.closed,\n points: path.points.map(() => ({ x: -centerX, y: -centerY })),\n inTangents: path.points.map(() => ({ x: 0, y: 0 })),\n outTangents: path.points.map(() => ({ x: 0, y: 0 })),\n }));\n}\n\nfunction hasCompatibleTopology (\n rawValues: string[],\n paths: IRBezierPath[][],\n attributeName: 'd' | 'points',\n closed: boolean,\n): boolean {\n if (!hasSameTopology(paths)) { return false; }\n const signatures = rawValues\n .map(value => shapeCommandSignature(value, attributeName, closed))\n .filter(signature => signature !== '');\n\n return signatures.length < 2 || signatures.every(signature => signature === signatures[0]);\n}\n\nfunction materializeEmptyPathSets (pathSets: IRBezierPath[][]): IRBezierPath[][] {\n const templatePath = pathSets.find(paths => paths.length > 0)?.[0];\n\n if (templatePath == null) { return pathSets; }\n\n return pathSets.map(paths => paths.length === 0\n ? [zeroShapeLike([templatePath], 0, 0)[0]]\n : paths);\n}\n\nfunction shapeCommandSignature (raw: string, attributeName: 'd' | 'points', closed: boolean): string {\n if (raw.trim() === '') { return ''; }\n if (attributeName === 'points') {\n const points = parseNumberList(raw);\n\n return points.length >= 4 && points.length % 2 === 0\n ? `M${points.length / 2 - 1}${closed ? 'Z' : ''}`\n : '';\n }\n\n return normalizePathCommands(raw).map(command => command.cmd).join('');\n}\n\nfunction hasSameTopology (paths: IRBezierPath[][]): boolean {\n const first = paths[0];\n\n return first != null && paths.every(candidate => candidate.length === first.length\n && candidate.every((path, index) => path.closed === first[index]?.closed && path.points.length === first[index]?.points.length));\n}\n\nfunction pathsEqual (left: IRBezierPath[], right: IRBezierPath[]): boolean {\n if (!hasSameTopology([left, right])) { return false; }\n\n return left.every((path, pathIndex) => {\n const other = right[pathIndex];\n\n return path.points.every((point, index) => point.x === other.points[index].x && point.y === other.points[index].y)\n && path.inTangents.every((point, index) => point.x === other.inTangents[index].x && point.y === other.inTangents[index].y)\n && path.outTangents.every((point, index) => point.x === other.outTangents[index].x && point.y === other.outTangents[index].y);\n });\n}\n\nfunction isPaths (value: IRBezierPath[] | null): value is IRBezierPath[] {\n return value != null;\n}\n","import type { Element } from '@svgdotjs/svg.js';\nimport type { IRAnimatedProperty, IRLayer, IRVec3 } from '@vvfx/animation-ir';\nimport { IRLayerType, IRShapePrimitiveType } from '@vvfx/animation-ir';\nimport { mapSVGColorToIRColor } from '../../map-color';\nimport { accumulateOpacity } from '../../matrix';\nimport { isSVGElementVisible } from '../../read-attributes';\nimport { canSynthesizeDash } from '../shape/parse-dash';\nimport { parseSMILPaintAnimations } from '../smil/parse-paint-animation';\nimport { parseShapeGeometryAnimation } from '../smil/parse-shape-animation';\nimport { buildTransform, prepareSMILShapeGeometry, readRawNumberAttribute } from '../transform/build-transform';\nimport {\n warnUnsupportedAttributes,\n} from '../diagnostics/warn-unsupported';\nimport { gradientStopColorAlpha } from '../paint/resolve-gradient';\nimport { hasAnimatedAncestorOpacity, hasAnimatedVisibility, hasDirectOpacityAnimation } from '../smil/inspect-animation';\nimport { parseShapeElement } from '../shape/parse-shape-element';\nimport type { ShapeConversionContext } from './conversion-session';\n\nexport function convertShapeElement (element: Element, context: ShapeConversionContext): void {\n const tag = element.node?.tagName?.toLowerCase() ?? '';\n const shape = parseShapeElement(context.es, element, tag);\n\n if (shape == null) { return; }\n\n const dashSynthesized = shape.primitiveType === IRShapePrimitiveType.Custom\n && canSynthesizeDash(\n context.es,\n element,\n shape.fills ?? [],\n shape.strokes ?? [],\n shape.strokes[0]?.width,\n shape.customPaths,\n );\n\n warnUnsupportedAttributes(context.es, element, tag, context.emit, context.strict, context.idEls, false, dashSynthesized);\n\n prepareSMILShapeGeometry(element, shape);\n const geometryScaleSink: { value?: IRAnimatedProperty<IRVec3> } = {};\n const transform = buildTransform(\n context.es,\n element,\n shape,\n context.smilDurationSink ?? { value: 0 },\n context.frameRate,\n geometryScaleSink,\n );\n const layerIndex = context.allocateLayerIndex();\n\n if (context.shapeAnimationsByLayerId != null) {\n const shapeAnimation = parseShapeGeometryAnimation(\n element,\n shape,\n context.smilDurationSink?.value ?? context.durationSeconds,\n );\n\n if (shapeAnimation != null) {\n context.shapeAnimationsByLayerId.set(`${layerIndex}`, shapeAnimation);\n }\n }\n\n if (context.paintAnimationsByLayerId != null) {\n const node = element.node;\n const ownOpacity = readRawNumberAttribute(element, 'opacity', 1);\n const elementOpacity = Math.max(0, Math.min(1, ownOpacity * accumulateOpacity(element)));\n const fillOpacity = Number(context.es.getAttr(element, 'fill-opacity') ?? 1);\n const strokeOpacity = Number(context.es.getAttr(element, 'stroke-opacity') ?? 1);\n const normalizedPaintOpacity = {\n fill: Number.isFinite(fillOpacity) ? Math.max(0, Math.min(1, fillOpacity)) : 1,\n stroke: Number.isFinite(strokeOpacity) ? Math.max(0, Math.min(1, strokeOpacity)) : 1,\n };\n const fillRaw = String(context.es.getAttr(element, 'fill') ?? '');\n const strokeRaw = String(context.es.getAttr(element, 'stroke') ?? '');\n const fillColor = /^url\\(/i.test(fillRaw)\n ? null\n : mapSVGColorToIRColor(fillRaw === '' ? 'black' : fillRaw, 1);\n const strokeColor = /^url\\(/i.test(strokeRaw) ? null : mapSVGColorToIRColor(strokeRaw, 1);\n const paintAnimations = parseSMILPaintAnimations(\n element,\n context.frameRate,\n context.smilDurationSink?.value ?? context.durationSeconds,\n normalizedPaintOpacity,\n {\n fill: elementOpacity * (fillColor?.[3] ?? 1),\n stroke: elementOpacity * (strokeColor?.[3] ?? 1),\n },\n {\n fill: fillRaw,\n stroke: strokeRaw,\n },\n shape.strokes[0]?.width ?? 1,\n );\n const ancestorOpacityAnimated = hasAnimatedAncestorOpacity(element);\n const opacityAnimated = ancestorOpacityAnimated || hasDirectOpacityAnimation(node);\n\n if (paintAnimations.length > 0 || opacityAnimated || geometryScaleSink.value != null) {\n context.paintAnimationsByLayerId.set(`${layerIndex}`, [{\n kind: 'context',\n staticElementOpacity: elementOpacity,\n layerOpacityMultiplier: ancestorOpacityAnimated ? 1 : accumulateOpacity(element),\n paintOpacity: normalizedPaintOpacity,\n solidColorAlpha: {\n fill: fillColor?.[3] ?? 1,\n stroke: strokeColor?.[3] ?? 1,\n },\n gradientStopColorAlpha: {\n fill: gradientStopColorAlpha(element, fillRaw),\n stroke: gradientStopColorAlpha(element, strokeRaw),\n },\n geometryScale: geometryScaleSink.value,\n }, ...paintAnimations]);\n }\n }\n\n const layer: IRLayer = {\n type: IRLayerType.Shape,\n id: `${layerIndex}`,\n name: String(context.es.getAttr(element, 'id') ?? tag ?? 'shape'),\n time: { inFrame: 0, outFrame: context.outFrame },\n visible: isSVGElementVisible(context.es, element) || hasAnimatedVisibility(element),\n content: { shapes: [shape] },\n transform,\n };\n\n context.appendLayer(layer, element);\n}\n","/**\n * SVG text/tspan 内容读取与偏移、拆段结构判定。\n *\n * 该模块只解释 SVG 文本 DOM,不负责创建 IR layer 或计算 Effects 文本布局。\n * 拆段结构判定结果供文本布局模块使用。\n */\nimport type EditableSVG from '../../../parse-svg/svg-parser';\nimport type { Element } from '@svgdotjs/svg.js';\nimport type { SVGPreservedTextSpan } from '../../../svg-preserved-data';\n\n/** tspan font-weight 属性 → 是否粗体(≥600 或 bold/bolder)。全 svg2ir 唯一 tspan-bold 判定(parse 填 spans.bold 用)。\n * 与 mapFontWeight(<text> 级产 IRFontWeight,含 family 后缀推断)语义不同:这里只判 tspan 显式属性,不 fallback。 */\nfunction isBoldSpanAttr (raw: string): boolean {\n if (raw === '') { return false; }\n const n = Number(raw);\n\n return Number.isFinite(n) ? n >= 600 : raw === 'bold' || raw === 'bolder';\n}\n\n/** SVG tspan dx 属性原串是否为 svg2ir 可处理形态。\n * - 'unsupported':列表(含空格多值,逐字偏移)/百分比(含 %)/非 px 单位(em/ex/pt 等)。parseFloat 会静默\n * 只取首数或剥离单位当成 px(如 '50%'→50),与 SVG 语义不符 → 走 ge-capability 旁路,不拆不烘焙。\n * - 'ok':单数值 px(含负值,拆段 leftEdge 累加负值表达段叠,多 comp z-order=文档序与 SVG 一致)。\n * 空串(无 dx)不算 unsupported,调用方先判空。 */\nexport function isUnsupportedTextOffset (dxRaw: string): boolean {\n const trimmed = dxRaw.trim();\n\n if (trimmed === '') { return false; }\n // 列表:含空格(多值逐字偏移)。\n if (/\\s/.test(trimmed)) { return true; }\n // 百分比 / 非 px 单位(em/ex/pt/pc/in/cm/mm)。SVG dx 对 % 语义不明,parseFloat 会误读。\n if (/%|em|ex|pt|pc|in|cm|mm/i.test(trimmed)) { return true; }\n\n return false;\n}\n\n/** 是否存在非首段 tspan 显式 x(绝对锚点重置,与 leftEdge 累加矛盾→不拆)。首段 x 已由 blockLeft 处理。 */\nexport function hasNonFirstTspanExplicitX (el: Element): boolean {\n const node = (el as unknown as { node?: globalThis.Element }).node;\n\n if (node == null) { return false; }\n let i = 0;\n\n for (const child of Array.from(node.children)) {\n if (child.tagName?.toLowerCase() === 'tspan') {\n i++;\n if (i > 1 && (child.getAttribute('x') ?? '') !== '') { return true; }\n }\n }\n\n return false;\n}\n\n/** 是否竖排(writing-mode=vertical-rl/lr/tb-rl/tb-lr 等)。Effects 富文本无竖排原生布局,需逐字拆层;拆段路径不重复处理。\n * 用 es.getAttr 读取以保留解析底座的继承语义,不切换到 raw getAttribute(会丢继承值)。 */\nexport function hasWritingMode (es: EditableSVG, el: Element): boolean {\n const wm = String(es.getAttr(el, 'writing-mode') ?? '').toLowerCase();\n\n return wm.startsWith('vertical') || wm === 'tb-rl' || wm === 'tb-lr';\n}\n\n/** 是否有直接子 tspan 带 transform 或 rotate 属性(markup 无旋转/矩阵,拆段各 comp 用 <text> 矩阵会丢→不拆)。 */\nexport function hasTspanTransformOrRotate (el: Element): boolean {\n const node = (el as unknown as { node?: globalThis.Element }).node;\n\n if (node == null) { return false; }\n\n for (const child of Array.from(node.children)) {\n if (child.tagName?.toLowerCase() !== 'tspan') { continue; }\n if ((child.getAttribute('transform') ?? '') !== '') { return true; }\n if ((child.getAttribute('rotate') ?? '') !== '') { return true; }\n }\n\n return false;\n}\n\n/** 是否存在嵌套 tspan(tspan 含元素子节点)。readTextContent 不递归,嵌套文字会错并进父段→不拆。 */\nexport function hasNestedTspan (el: Element): boolean {\n const node = (el as unknown as { node?: globalThis.Element }).node;\n\n if (node == null) { return false; }\n\n for (const child of Array.from(node.children)) {\n if (child.tagName?.toLowerCase() !== 'tspan') { continue; }\n for (const gc of Array.from(child.children)) {\n if (gc.tagName?.toLowerCase() === 'tspan') { return true; }\n }\n }\n\n return false;\n}\n\n/** 读 <text> 直接子文本 + 子 <tspan>。单 <text> 多 <tspan y=不同> 是 SVG 多行:\n * 按 tspan 的 y(绝对,相对 <text>)分行,\\n 连接给 Effects TextComponent 多行渲染(lineCount/lineHeight)。\n * 无 y 的 tspan 连排(同行)。返回 {content(\\n 连接),lineHeight(首两行 y 差,0=单行),lineCount,lineTexts}。\n * per-span 样式需要富文本表达;无法表达的样式差异由 warning 报告。\n */\nexport interface TextContentResult { content: string; lineHeight: number; lineCount: number; lineTexts: string[]; firstTspanX: number | null; firstTspanY: number | null; spans: SVGPreservedTextSpan[]; isPathText: boolean; lineXs: Array<number | null>; lineYs: number[] }\n\nexport function readTextContent (el: Element): TextContentResult {\n const node = (el as unknown as { node?: globalThis.Element }).node;\n\n if (node == null) { return { content: '', lineHeight: 0, lineCount: 0, lineTexts: [], firstTspanX: null, firstTspanY: null, spans: [], isPathText: false, lineXs: [], lineYs: [] }; }\n let firstTspanX: number | null = null;\n let firstTspanY: number | null = null;\n // lines 带 x:每行首个 tspan.x(该行水平锚点,text-anchor=middle 时各行 x 不同→需按行拆多 comp)。\n // null=该行无显式 x(继承 <text>.x 或 firstTspanX 兜底)。Effects RichText 单 comp multiline 共用 quad,\n // 各行 x 不同时无法单 comp 表达,buildSingleTextLayer 据行 x 差异拆行。\n const parentYRaw = node.getAttribute?.('y') ?? '';\n const parsedParentY = parentYRaw !== '' ? parseFloat(parentYRaw) : 0;\n const parentY = Number.isFinite(parsedParentY) ? parsedParentY : 0;\n let currentY = parentY;\n const lines: Array<{ y: number | null; positionY: number; text: string; x: number | null }> = [];\n const spans: SVGPreservedTextSpan[] = [];\n let isPathText = false;\n\n for (const child of Array.from(node.childNodes)) {\n const tag = (child as globalThis.Element).tagName?.toLowerCase?.();\n // tspan 文本:折叠空白,但保留尾空格(同行多段时空格是段间间隔的一部分);仅去前导。\n // 直接文本节点(textContent)仍两端 trim(标签间空白无意义)。缩进式 tspan(含换行)按两端 trim。\n const rawText = (child.textContent ?? '').replace(/\\s+/g, ' ');\n const isTspanInline = tag === 'tspan' && !(child.textContent ?? '').includes('\\n');\n const text = isTspanInline ? rawText.replace(/^\\s+/, '') : rawText.trim();\n\n if (tag === 'textpath') {\n isPathText = true;\n } else if (tag === 'tspan') {\n const domEl = child as globalThis.Element;\n const yRaw = domEl.getAttribute?.('y') ?? '';\n const parsedY = yRaw !== '' ? parseFloat(yRaw) : NaN;\n const y = Number.isFinite(parsedY) ? parsedY : null; // y 绝对(相对 <text>);无 y=连排当前行\n // 首个有 x/y 的 tspan.x/y(tspan x 是该行绝对锚点;text-anchor=middle 时 <text> 常无 x,字形中心靠 tspan.x 补)。\n const xRaw = domEl.getAttribute?.('x') ?? '';\n const parsedX = xRaw !== '' ? parseFloat(xRaw) : NaN;\n // 同行相邻 tspan 的横向额外偏移(dx):Effects RichText markup 无 per-span 位置,拆段路径(dx!=0)\n // 直进 leftEdge 累加(像素级),单 comp 路径烘焙成前导空格。保留 dx 原串检测不支持形态。\n const dxRaw = domEl.getAttribute?.('dx') ?? '';\n const parsedDx = dxRaw !== '' ? parseFloat(dxRaw) : 0;\n const dx = Number.isFinite(parsedDx) ? parsedDx : 0;\n const supportedDx = dxRaw === '' || !isUnsupportedTextOffset(dxRaw);\n const lineX = Number.isFinite(parsedX) ? parsedX + (supportedDx ? dx : 0) : null;\n\n if (firstTspanX === null && lineX != null) { firstTspanX = lineX; }\n if (firstTspanY === null && y != null) { firstTspanY = y; }\n // 纵向偏移(dy):SVG 累加语义(每段 dy 相对前段基线再下移)。Effects markup 无 per-span 纵向位置,\n // 拆段路径(dy!=0 触发)把累加 dy 进各段 cy。dyRaw 原串同 dx 检测不支持形态(列表/百分比/非px)。\n const dyRaw = domEl.getAttribute?.('dy') ?? '';\n const parsedDy = dyRaw !== '' ? parseFloat(dyRaw) : 0;\n const dy = Number.isFinite(parsedDy) ? parsedDy : 0;\n const supportedDy = dyRaw === '' || !isUnsupportedTextOffset(dyRaw);\n\n if (y != null) { currentY = y; }\n if (supportedDy) { currentY += dy; }\n const last = lines.length > 0 ? lines[lines.length - 1] : null;\n let newLine = false;\n\n // 相同 y 的连续 tspan 属于同一行;仅 y 发生变化时创建新行。\n if (y != null && (last == null || last.y !== y)) {\n lines.push({ y, positionY: currentY, text, x: lineX });\n newLine = last != null; // 非首行标记。\n } else if (last != null) {\n last.text += text;\n // 同行追加段:若该行尚无 x 而本 tspan 有 x,补记(同行首段无 x 次段有 x 的边角)。\n if (last.x == null && lineX != null) { last.x = lineX; }\n } else {\n lines.push({ y: 0, positionY: currentY, text, x: lineX });\n }\n\n // 合并文本行时保留 per-tspan 样式 metadata。\n if (text !== '') {\n const fontSizeRaw = domEl.getAttribute?.('font-size') ?? '';\n const fillRaw = domEl.getAttribute?.('fill');\n const fontWeightRaw = domEl.getAttribute?.('font-weight') ?? '';\n const fontStyleRaw = (domEl.getAttribute?.('font-style') ?? '').toLowerCase();\n\n spans.push({\n text,\n newLine,\n // dx!=0(含负)保留供拆段;leftEdge 累加用。dxRaw 原串供 classifyDx 检测不支持形态。\n ...(dx !== 0 ? { dx, dxRaw } : {}),\n // dy!=0(含负)保留供拆段;cy 累加用。dyRaw 原串同 dx 检测不支持形态。\n ...(dy !== 0 ? { dy, dyRaw } : {}),\n ...(fontSizeRaw !== '' ? { fontSize: fontSizeRaw } : {}),\n ...(fillRaw != null && fillRaw !== '' ? { color: fillRaw } : {}),\n ...(isBoldSpanAttr(fontWeightRaw) ? { bold: true } : {}),\n ...(fontStyleRaw === 'italic' || fontStyleRaw === 'oblique' ? { italic: true } : {}),\n });\n }\n } else if (child.nodeType === 3 && text !== '') {\n // text 直接子节点(tspan 前/间):无 y,连排到当前行\n if (lines.length > 0) { lines[lines.length - 1].text += text; } else { lines.push({ y: 0, positionY: currentY, text, x: null }); }\n spans.push({ text, newLine: false });\n }\n }\n\n if (lines.length === 0) {\n const text = (node.textContent ?? '').replace(/\\s+/g, ' ').trim();\n\n if (text) { lines.push({ y: 0, positionY: currentY, text, x: null }); }\n }\n\n const lineTexts = lines.map(l => l.text).filter(t => t !== '');\n // lineXs 对齐 lineTexts:只留非空行的 x(与 lineTexts 同序),供 buildSingleTextLayer 判 per-line x 差异。\n const lineXs = lines.filter(l => l.text !== '').map(l => l.x);\n const lineYs = lines.filter(l => l.text !== '').map(l => l.positionY);\n const content = lineTexts.join('\\n');\n const lineCount = lineTexts.length;\n // lineHeight:首两行 y 差(绝对行距)。y 为 null 的连排行已并到首行,不影响。\n let lineH = 0;\n\n if (lineYs.length >= 2) {\n lineH = lineYs[1] - lineYs[0];\n }\n\n return { content, lineHeight: lineH, lineCount, lineTexts, firstTspanX, firstTspanY, spans, isPathText, lineXs, lineYs };\n}\n","function _object_without_properties_loose(source, excluded) {\n if (source == null) return {};\n\n var target = {}, sourceKeys = Object.getOwnPropertyNames(source), key, i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n\n return target;\n}\nexport { _object_without_properties_loose as _ };\n","/**\n * SVG 文本到 Effects 文本组件共用的字体、度量和宽度估算逻辑。\n *\n * 这些函数不读取 SVG DOM,只根据字体属性和可选的 measureText 回调计算文本布局数据。\n */\ntype IRFontWeight = 'normal' | 'bold' | 'lighter';\n\ninterface TextMeasureResult {\n width: number;\n fontBoundingBoxAscent?: number;\n fontBoundingBoxDescent?: number;\n actualBoundingBoxAscent?: number;\n hangingBaseline?: number;\n}\n\nexport type TextMeasure = (fontDesc: string, text: string) => TextMeasureResult;\n\n/** Effects TextWeight 枚举值。生产 Effects 的 fontWeight 只接受 'normal' | 'bold' | 'lighter'。 */\ntype GETextWeight = 'normal' | 'bold' | 'lighter';\n\nexport function mapFontWeight (raw: string, fontFamily?: string): IRFontWeight {\n if (raw !== '') {\n const lowered = raw.toLowerCase();\n\n // 显式关键字统一收敛到 Effects 枚举(Effects 没有 'bolder',按规范视为 bold)。\n if (lowered === 'bold' || lowered === 'bolder') { return 'bold'; }\n if (lowered === 'normal') { return 'normal'; }\n if (lowered === 'lighter') { return 'lighter'; }\n\n const n = Number(raw);\n\n if (Number.isFinite(n)) { return numericToGEWeight(n); }\n }\n // font-weight 属性缺失时,从 font-family 名后缀推断字重;部分字体将字重编码在族名中。\n if (typeof fontFamily === 'string' && fontFamily !== '') {\n const inferred = inferNumericWeightFromFamily(fontFamily);\n\n if (inferred !== null) { return numericToGEWeight(inferred); }\n }\n\n return 'normal';\n}\n\n/** 数值字重 → Effects TextWeight 枚举归并:100-300 lighter,400 normal,500-950 bold。 */\nfunction numericToGEWeight (n: number): GETextWeight {\n if (n < 400) { return 'lighter'; }\n if (n < 500) { return 'normal'; }\n\n return 'bold';\n}\n\n/** 从字体族名中推断数值字重(100-950)。\n * 优先级:关键词 > Linotype 数字代码 > 裸 100-900 数字 > AlibabaPuHuiTi 单字母后缀。 */\nexport function inferNumericWeightFromFamily (family: string): number | null {\n const f = normalizeFontFamily(family);\n\n if (f === '') { return null; }\n\n // 1. 关键词(更具体的字重名称优先匹配)。\n if (/(?:extra\\s?black|ultra\\s?black)/.test(f)) { return 950; }\n if (/(?:heavy|black)/.test(f)) { return 900; }\n if (/(?:extra\\s?bold|ultra\\s?bold|extrabold|ultrabold)/.test(f)) { return 800; }\n if (/(?:semi\\s?bold|demi\\s?bold|semibold|demibold)/.test(f)) { return 600; }\n if (f.includes('bold')) { return 700; }\n if (f.includes('medium')) { return 500; }\n if (/(?:extra\\s?light|ultra\\s?light|extralight|ultralight)/.test(f)) { return 200; }\n if (f.includes('light')) { return 300; }\n if (f.includes('thin')) { return 100; }\n if (/(?:regular|normal|book)/.test(f)) { return 400; }\n\n // 2. Linotype 风格数字代码(55/65/75/85/95/115)。\n const linotype = f.match(/\\b(55|65|75|85|95|115)\\b/);\n\n if (linotype != null) {\n const code = Number(linotype[1]);\n\n if (code === 55) { return 400; }\n if (code === 65) { return 500; }\n if (code === 75) { return 700; }\n if (code === 85) { return 800; }\n if (code === 95) { return 900; }\n if (code === 115) { return 950; }\n }\n\n // 3. 裸 100-900 数字。\n const bare = f.match(/\\b([1-9]00)\\b/);\n\n if (bare != null) { return Number(bare[1]); }\n\n // 4. AlibabaPuHuiTi 单字母后缀:H=Heavy(800) M=Medium(500) L=Light(300)。\n const suffix = f.match(/puhuiti([hml])$/);\n\n if (suffix != null) { return suffix[1] === 'h' ? 800 : suffix[1] === 'm' ? 500 : 300; }\n\n return null;\n}\n\n/** 规范化 font-family 字符串:去引号、取首项、转小写、去首尾空白。 */\nfunction normalizeFontFamily (family: string): string {\n return family.replace(/['\"]/g, '').toLowerCase().split(',')[0].trim();\n}\n\n/** 估算字体 asc/desc 比例。CJK 字体通常 asc 更高、desc 更低,latin 默认 0.8/0.2。 */\nfunction estimateFontMetrics (fontFamily: string): { ascRatio: number; descRatio: number } {\n const f = fontFamily.toLowerCase();\n const isCJK = /puhuiti|alimama|hei|song|kai|ming|gothic|yu|alibaba|cjk|sc|tc\\b|jp\\b|kr\\b/.test(f);\n\n return isCJK ? { ascRatio: 0.88, descRatio: 0.12 } : { ascRatio: 0.8, descRatio: 0.2 };\n}\n\n/** 解析 Effects RichText strategies 所需的字体 asc/desc 与 x-height。\n * 有 measureText 回调时使用当前字体指标;没有回调时使用字族比例估算。\n * SVG 的 precise baseline 指标按实际字号读取,Effects layout metric 按字号比例缩放。 */\nexport function resolveFontMetrics (\n measureText: TextMeasure | undefined,\n fontFamily: string,\n fontWeight: IRFontWeight,\n fontStyle: string,\n fontSize: number,\n): { asc: number; desc: number; xHeight: number; hanging?: number; svgAsc?: number; svgDesc?: number } {\n if (measureText != null && fontFamily !== '') {\n const fd = buildCanvasFontDesc(10, fontFamily, fontWeight, fontStyle);\n const m = measureText(fd, 'x');\n const scale = fontSize / 10;\n const asc = (m.fontBoundingBoxAscent ?? 0) * scale;\n const desc = (m.fontBoundingBoxDescent ?? 0) * scale;\n const xHeight = (m.actualBoundingBoxAscent ?? 0) * scale;\n\n if (asc > 0 || desc > 0) {\n // Effects RichText layout 固定以 10px 的 fontBoundingBoxAscent/Descent 做字号缩放。\n // SVG 的 dominant-baseline 则由实际字号的字体 metric 决定;Chrome 的小字号 metric\n // 存在像素量化,例如 sans-serif hangingBaseline:10px=8.8、200px=169.6,\n // 不能用 8.8*20=176 代替 SVG 的 200px 基线。\n const actual = fontSize === 10\n ? m\n : measureText(buildCanvasFontDesc(fontSize, fontFamily, fontWeight, fontStyle), 'x');\n\n return {\n asc, desc, xHeight,\n svgAsc: actual.fontBoundingBoxAscent ?? asc,\n svgDesc: actual.fontBoundingBoxDescent ?? desc,\n hanging: actual.hangingBaseline ?? (m.hangingBaseline != null ? m.hangingBaseline * scale : undefined),\n };\n }\n }\n const { ascRatio, descRatio } = estimateFontMetrics(fontFamily);\n\n return { asc: ascRatio * fontSize, desc: descRatio * fontSize, xHeight: 0.5 * fontSize };\n}\n\n/** 将 SVG dominant-baseline 转换为 Effects alphabetic baseline 的 y 偏移。\n * Effects 没有独立的 dominant-baseline 字段,因此复用字体 asc/desc、x-height 和可用的 hangingBaseline。 */\nexport function dominantBaselineDelta (\n baseline: string | undefined,\n asc: number, desc: number, xHeight: number,\n precise?: { hanging?: number; svgAsc?: number; svgDesc?: number },\n): number {\n const b = (baseline ?? '').toLowerCase();\n\n // 未读/缺省/alphabetic = 无偏移\n if (b === '' || b === 'alphabetic' || b === 'auto') { return 0; }\n const svgAsc = precise?.svgAsc ?? asc;\n const svgDesc = precise?.svgDesc ?? desc;\n\n if (b === 'central') { return (svgAsc - svgDesc) / 2; }\n if (b === 'middle') { return (xHeight > 0 ? xHeight : (asc - desc) / 2) / 2; } // x-height 中点(无 xHeight 退 central 近似)\n // hanging 优先使用字体提供的 hangingBaseline,其余值使用对应的 asc/desc 指标。\n if (b === 'hanging') { return precise?.hanging ?? asc; }\n if (b === 'text-before-edge') { return svgAsc; }\n if (b === 'text-after-edge') { return -svgDesc; }\n if (b === 'ideographic') { return -svgDesc; }\n\n return 0; // 未知值(spec 还有 mathematical/cjk 等)→ 不偏,降级 alphabetic\n}\n\n/** 多档空格字符(advance 不同),用于近似表达无法直接映射的 dx。不同字体的 advance\n * U+0020 最稳,Unicode 空格在某些字体可能 fallback 成同 advance 或缺失 → 只取 advance>0 且与其它档不同的。 */\nconst SPACE_CHAR_CANDIDATES = [\n ' ', // regular space\n ' ', // thin space\n ' ', // hair space\n ' ', // punctuation space\n ' ', // narrow no-break space\n ' ', // figure space\n];\n\n/** 读取各空格字符在目标字体下的 advance,返回去重后的候选表。 */\nexport function buildSpaceCharTable (\n measureText: TextMeasure,\n fd: string,\n): Array<{ ch: string; w: number }> {\n const seen = new Map<number, string>();\n\n for (const ch of SPACE_CHAR_CANDIDATES) {\n const w = measureText(fd, ch).width;\n\n if (w > 0 && !seen.has(Math.round(w * 100))) { seen.set(Math.round(w * 100), ch); }\n }\n\n return [...seen.entries()].map(([k, ch]) => ({ ch, w: k / 100 })).sort((a, b) => b.w - a.w);\n}\n\n/** 选择 advance 最接近目标值的单个空格字符。 */\nexport function greedySpaceForDx (target: number, table: Array<{ ch: string; w: number }>): string {\n if (table.length === 0) { return ' '; }\n let best = table[0];\n let bestErr = Math.abs(best.w - target);\n\n for (const { ch, w } of table) {\n const err = Math.abs(w - target);\n\n if (err < bestErr) { best = { ch, w }; bestErr = err; }\n }\n\n return best.ch;\n}\n\n/** 判断字符是否 CJK(中日韩统一表意文字/假名/谚文),按 Unicode 区段近似的快速判断。 */\nfunction isCJKChar (ch: string): boolean {\n const cp = ch.codePointAt(0) ?? 0;\n\n return (\n (cp >= 0x4e00 && cp <= 0x9fff) || // CJK Unified Ideographs\n (cp >= 0x3040 && cp <= 0x309f) || // Hiragana\n (cp >= 0x30a0 && cp <= 0x30ff) || // Katakana\n (cp >= 0xac00 && cp <= 0xd7af) || // Hangul Syllables\n (cp >= 0x3100 && cp <= 0x312f) || // Bopomofo\n (cp >= 0xff00 && cp <= 0xffef) // Halfwidth/Fullwidth Forms\n );\n}\n\n/** 估算单字符在 sans-serif 下占的 em 系数。 */\nfunction charWidthCoef (ch: string): number {\n if (ch === ' ') { return 0.333; }\n if (isCJKChar(ch)) { return 1.0; }\n\n // latin / digit / 标点:典型比例字体 sans-serif 大写字母约 0.65em,数字稍窄。\n return /[0-9]/.test(ch) ? 0.55 : 0.62;\n}\n\n/** 构造与 Effects Runtime getFontDesc 一致的 CSS font 简写字符串,用于 Canvas measureText。 */\nexport function buildCanvasFontDesc (fontSize: number, fontFamily: string, fontWeight: IRFontWeight, fontStyle: string): string {\n const weightStr = String(fontWeight);\n const genericFamilies = ['serif', 'sans-serif', 'monospace', 'courier'];\n const familyName = genericFamilies.includes(fontFamily) ? fontFamily : `\"${fontFamily}\"`;\n let desc = `${fontSize}px ${familyName}`;\n\n if (weightStr !== 'normal' && weightStr !== '') {\n desc = `${weightStr} ${desc}`;\n }\n if (fontStyle !== 'normal' && fontStyle !== '') {\n desc = `${fontStyle} ${desc}`;\n }\n\n return desc;\n}\n\n/** 文本宽度估算。优先使用调用方提供的 Canvas measureText,否则使用字符级启发式系数。 */\nexport function estimateTextWidth (\n content: string,\n fontSize: number,\n letterSpacing: number,\n measureText: ((fontDesc: string, text: string) => { width: number }) | undefined,\n fontFamily: string,\n fontWeight: IRFontWeight,\n fontStyle: string,\n): number {\n const len = [...content].length;\n\n if (measureText != null && fontFamily !== '') {\n const fontDesc = buildCanvasFontDesc(fontSize, fontFamily, fontWeight, fontStyle);\n const { width } = measureText(fontDesc, content);\n\n return width + letterSpacing * Math.max(len - 1, 0);\n }\n\n const chars = [...content];\n const width = chars.reduce((s, ch) => s + charWidthCoef(ch) * fontSize, 0);\n\n return width + letterSpacing * Math.max(len - 1, 0);\n}\n","import type EditableSVG from '../../../parse-svg/svg-parser';\nimport type { Element } from '@svgdotjs/svg.js';\nimport type { IRColor } from '@vvfx/animation-ir';\nimport { readSVGElementOpacity, readSVGNumberAttribute, readSVGStringAttribute } from '../../read-attributes';\nimport { mapSVGColorToIRColor } from '../../map-color';\nimport { accumulateAncestors, decomposeMatrix, IDENTITY, multiply, parseTransform } from '../../matrix';\nimport { getGradientMidpointColor } from '../paint/resolve-gradient';\nimport type { SVGPreservedTextData, SVGPreservedTextSpan } from '../../../svg-preserved-data';\n\nexport const TEXT_ANCHOR_MAP: Record<string, 'left' | 'center' | 'right'> = {\n start: 'left',\n middle: 'center',\n end: 'right',\n};\n\nexport const FONT_STYLE_MAP: Record<string, 'normal' | 'italic' | 'oblique'> = {\n normal: 'normal', italic: 'italic', oblique: 'oblique',\n};\n\nexport type TextFontWeight = 'normal' | 'bold' | 'lighter';\n\n/** 构造 SVG 文本的保留数据。 */\nexport function buildSVGPreservedTextData(\n spans: SVGPreservedTextSpan[],\n isPathText: boolean,\n fontFamily: string,\n fontWeight: TextFontWeight,\n fontStyle: SVGPreservedTextData['fontStyle'],\n): SVGPreservedTextData {\n const numericWeight = fontWeight === 'bold' ? 700 : fontWeight === 'lighter' ? 300 : 400;\n\n return {\n spans,\n isPathText,\n fontFamily: fontFamily !== '' ? fontFamily : 'sans-serif',\n fontWeight: numericWeight,\n fontStyle,\n };\n}\n\n/** 根据 direction=rtl 调整 text-anchor 的水平对齐。 */\nexport function resolveEffectiveTextAlign (es: EditableSVG, el: Element, textAlign: 'left' | 'center' | 'right'): 'left' | 'center' | 'right' {\n const isRtl = (readSVGStringAttribute(es, el, 'direction') || '').toLowerCase() === 'rtl';\n\n if (!isRtl || textAlign === 'center') { return textAlign; }\n\n return textAlign === 'left' ? 'right' : 'left';\n}\n\n/** 合并文本元素及祖先变换,并分解出 IR 支持的缩放和旋转。 */\nexport function buildTextWorldMatrix (el: Element) {\n const mAnc = accumulateAncestors(el);\n const selfAttr = (el as { node?: { getAttribute?: (n: string) => string | null } }).node?.getAttribute?.('transform') ?? '';\n const mSelf = selfAttr !== '' ? parseTransform(selfAttr) : IDENTITY;\n const m = multiply(mAnc, mSelf);\n\n return { m, ...decomposeMatrix(m) };\n}\n\n/** 解析 text 级 fill 颜色;渐变使用中点色,缺省或 none 使用黑色。 */\nexport function resolveTextFillColor (es: EditableSVG, fillRaw: string | number | null | undefined, fillOpacity: number): IRColor {\n if (typeof fillRaw === 'string' && /^url\\(/i.test(fillRaw)) { return getGradientMidpointColor(es, fillRaw, fillOpacity) ?? ([0, 0, 0, 1] as IRColor); }\n\n return mapSVGColorToIRColor(typeof fillRaw === 'string' ? fillRaw : fillRaw == null ? null : String(fillRaw), fillOpacity)\n ?? ([0, 0, 0, 1] as IRColor);\n}\n\n/** 读取 text 自身和祖先组的 opacity,以及 fill-opacity。 */\nexport function readTextOpacity (es: EditableSVG, el: Element) {\n const totalOpacity = readSVGElementOpacity(el);\n const fillOpacity = readSVGNumberAttribute(es, el, 'fill-opacity', 1) ?? 1;\n\n return { totalOpacity, fillOpacity };\n}\n\n/** 将 IR 颜色编码为十六进制字符串。 */\nexport function irColorToHex (c: IRColor): string {\n const h = (n: number) => Math.max(0, Math.min(255, Math.round(n * 255))).toString(16).padStart(2, '0');\n\n return `#${h(c[0])}${h(c[1])}${h(c[2])}${h(c[3])}`;\n}\n\n/** 读取 letter-spacing,并转换为像素值。 */\nexport function readLetterSpacing (es: EditableSVG, el: Element, fontSize: number): number {\n const raw = readSVGStringAttribute(es, el, 'letter-spacing').trim().toLowerCase();\n\n if (raw === '' || raw === 'normal') { return 0; }\n const value = Number.parseFloat(raw);\n\n if (!Number.isFinite(value)) { return 0; }\n if (raw.endsWith('em')) { return value * fontSize; }\n if (raw.endsWith('%')) { return value * fontSize / 100; }\n\n return value;\n}\n","/** 构造普通文本图层。 */\nimport type EditableSVG from '../../../parse-svg/svg-parser';\nimport type { Element } from '@svgdotjs/svg.js';\nimport type { IRColor, IRLocalBounds, IRTextContent, IRTextLayer, IRVec3 } from '@vvfx/animation-ir';\nimport { isSVGElementVisible, readSVGNumberAttribute, readSVGStringAttribute } from '../../read-attributes';\nimport { buildCanvasFontDesc, buildSpaceCharTable, dominantBaselineDelta, estimateTextWidth, greedySpaceForDx, mapFontWeight, resolveFontMetrics, type TextMeasure } from './font-metrics';\nimport type { TextContentResult } from './inspect-content';\nimport { getGradientMidpointColor } from '../paint/resolve-gradient';\nimport type { SVGPreservedTextData, SVGPreservedTextSpan } from '../../../svg-preserved-data';\nimport { buildSVGPreservedTextData, buildTextWorldMatrix, FONT_STYLE_MAP, irColorToHex, readLetterSpacing, readTextOpacity, resolveEffectiveTextAlign, resolveTextFillColor, TEXT_ANCHOR_MAP } from './text-layout';\n\nexport function buildSingleTextLayer (es: EditableSVG, el: Element, textContent: TextContentResult, measureText?: TextMeasure): {\n layer: Omit<IRTextLayer, 'id' | 'name' | 'time'> | null;\n info: SVGPreservedTextData | null;\n} {\n // content:<text> 直接子文本 + <tspan> 文本,按 tspan y 分行(\\n 连接)。spans 平行收集 per-tspan 样式(markup 用)。\n const { content, lineHeight: tspanLineHeight, lineCount, lineTexts, firstTspanX, firstTspanY, spans, isPathText } = textContent;\n\n if (content === '') { return { layer: null, info: null }; }\n\n // x 优先级:<text> 的 x → 首个 tspan 的 x → 0。<text> 无 x 时(text-anchor=middle 常见)tspan.x\n // 是该行字形锚点,用它补 cx,否则居中文本靠左(见 readTextContent firstTspanX 注释)。\n const x = readSVGNumberAttribute(es, el, 'x') ?? firstTspanX ?? 0;\n // y 优先级为 <text> 的 y、首个 tspan 的 y、最后回退到 0。\n const y = readSVGNumberAttribute(es, el, 'y') ?? firstTspanY ?? 0;\n const fontSize = readSVGNumberAttribute(es, el, 'font-size', 16) ?? 16;\n const fontFamily = readSVGStringAttribute(es, el, 'font-family');\n const fontWeightRaw = readSVGStringAttribute(es, el, 'font-weight');\n const fontStyleRaw = readSVGStringAttribute(es, el, 'font-style');\n const textAnchor = readSVGStringAttribute(es, el, 'text-anchor');\n const dominantBaselineRaw = readSVGStringAttribute(es, el, 'dominant-baseline');\n const letterSpacing = readLetterSpacing(es, el, fontSize);\n const lineHeight = readSVGNumberAttribute(es, el, 'line-height');\n const fillRaw = es.getAttr(el, 'fill');\n const { totalOpacity, fillOpacity } = readTextOpacity(es, el);\n const visible = isSVGElementVisible(es, el);\n\n const color = resolveTextFillColor(es, fillRaw, fillOpacity); // fill=none/缺省→黑兜底(文本 color 必填)。\n\n // per-tspan 渐变 fill 塌中点色 → #hex(与 <text> 级一致;Effects markup <color> 只吃 #hex/命名色,渐变必塌色)。\n for (const span of spans) {\n if (typeof span.color === 'string' && /^url\\(/i.test(span.color)) {\n span.color = irColorToHex(getGradientMidpointColor(es, span.color, fillOpacity) ?? ([0, 0, 0, 1] as IRColor));\n }\n }\n\n // 统一字体样式,保证测量结果与 IR 使用相同的字重和字形。\n const resolvedFontWeight = mapFontWeight(fontWeightRaw, fontFamily);\n const resolvedFontStyle = FONT_STYLE_MAP[fontStyleRaw] ?? 'normal';\n\n // 富文本无法表达段内 dx;使用字体空格近似段间距离。\n if (measureText != null && fontFamily !== '') {\n const fd = buildCanvasFontDesc(fontSize, fontFamily, resolvedFontWeight, resolvedFontStyle);\n const spaceChars = buildSpaceCharTable(measureText, fd);\n\n if (spaceChars.length > 0) {\n for (let i = spans.length - 1; i >= 0; i--) {\n const span = spans[i];\n\n if (span.dx != null && span.dx > 0) {\n // Effects 空格段目标 advance = dx + letterSpacing。\n // SVG tspan boundary 计入一个 letterSpace,而 Effects 段间不计入;因此将该间距并入空格段。\n const target = span.dx + letterSpacing;\n const spaceText = greedySpaceForDx(target, spaceChars);\n const spaceSpan: SVGPreservedTextSpan = { text: spaceText, newLine: false };\n\n // 复用被偏移段颜色:让空格段与邻段样式有 diff(hasStyleDiff=true),encodeMarkupFromSpans\n // 才会包独立 <color> 段 → Effects 段间 boundary 不加 letterSpace。\n if (typeof span.color === 'string') { spaceSpan.color = span.color; }\n spans.splice(i, 0, spaceSpan);\n delete span.dx;\n }\n }\n }\n }\n\n // textWidth:多行取最宽行(各 <tspan y> 行),单行即 content 宽。ge-ir 兜底也会估。\n // 调用方注入 measureText 时使用 Canvas 指标;否则使用稳定的启发式估算。\n // dx 产生的空格已经写入 span.text,测量宽度时需要基于更新后的 span 内容重建行文本。\n // 按 newLine 重建文本行,并保留烘焙后的空格。\n let bakedLineTexts: string[];\n\n {\n const rebuilt: string[] = [];\n let cur = '';\n\n for (const span of spans) {\n if (span.newLine && cur !== '') { rebuilt.push(cur); cur = ''; }\n cur += span.text;\n }\n rebuilt.push(cur);\n bakedLineTexts = rebuilt.filter(t => t !== '');\n if (bakedLineTexts.length === 0) { bakedLineTexts = lineTexts; }\n }\n const lineWidths = bakedLineTexts.map(t => estimateTextWidth(t, fontSize, letterSpacing, measureText, fontFamily, resolvedFontWeight, resolvedFontStyle));\n const estWidth = lineWidths.length > 0 ? Math.max(...lineWidths) : 0;\n // lineHeight:对齐 Effects RichTextLayout(void 0 ? fontSize : lineHeight)。多行优先从 tspan y 差推(行距),\n // 次 SVG line-height 属性;单行无属性 → Effects 默认 fontSize(svg2ir 不传 lineHeight,Effects 自用 fontSize)。\n // 故内部 lh 用同一值,estHeight=lh×lineCount=Effects strategies autoWidth 的 canvasHeight(总高)。\n const lh = tspanLineHeight > 0\n ? tspanLineHeight\n : (lineHeight != null && lineHeight > 0 ? lineHeight : fontSize);\n // estHeight:多行高 = lh × 行数=Effects canvasHeight(top 对齐下 contentBottom=totalHeight,无垂直溢出扩展)。\n const estHeight = lh * Math.max(lineCount, 1);\n const localBounds: IRLocalBounds = { x: 0, y: 0, width: estWidth, height: estHeight };\n\n const textData: IRTextContent = {\n color,\n text: content,\n fontAssetId: fontFamily,\n fontSize,\n letterSpacing,\n lineHeight: (lineCount > 1 || lineHeight != null) ? lh : fontSize,\n textAlign: TEXT_ANCHOR_MAP[textAnchor] ?? 'left',\n };\n\n // position 使用 <text x y> 的基线锚点;text-anchor 决定横向基准。\n const textAlign = TEXT_ANCHOR_MAP[textAnchor] ?? 'left';\n // SVG 的 advance 包含末字 letter-spacing,而 Effects 的视觉字形不包含该 trailing spacing。\n // center/end 因此需要相应的 cx 补偿;字体 fallback 造成的度量差异不在几何补偿范围内。\n // LTR 使用 SVG text-anchor 的直接几何映射。\n // direction=rtl:SVG 浏览器把 start/end 视觉锚关于 x 镜像(start ltr 字铺 x 右→rtl 字铺 x 左;end 同理镜像),\n // middle 不翻(rtl middle SVG centroid=ltr middle)。Effects Runtime canvas BiDi 对 latin 不翻、内部 offset 由\n // textAlign 决定(不随 dir),故只需 svg2ir 把 rtl start/end 的 cx 关于 x 镜像。\n // rtl 时 start/end 视觉锚镜像:rtl start 的字铺 x 左(=ltr end 视觉),rtl end 铺 x 右(=ltr start)。\n // 故 rtl start 用 ltr-end cx 公式(x - estW/2 - ls)、rtl end 用 ltr-start 公式(x + estW/2),middle 不变。\n // RTL 需要交换 start/end 的几何含义,不能复用 LTR 的 anchor 方向。\n const effectiveTextAlign = resolveEffectiveTextAlign(es, el, textAlign);\n const cx = effectiveTextAlign === 'center'\n ? x - letterSpacing / 2\n : effectiveTextAlign === 'right'\n ? x - estWidth / 2 - letterSpacing\n : x + estWidth / 2;\n // y 基线 → IR position.cy:全富文本统一按 Effects RichText strategies top 对齐公式反解。\n // Effects getVerticalOffsets(top):首行基线(canvas)= asc + margin, margin=(lh-asc-desc)/2。\n // quad(renderer.anchor 中心锚定 cy)屏高=canvasHeight=estHeight,quadTop=cy-estHeight/2。\n // 首行基线屏幕 y = cy - estHeight/2 + asc + margin。令其=SVG 首行基线 y(局部),反解:\n // cy = y + estHeight/2 - (asc + (lh-asc-desc)/2)\n // asc/desc 来自富文本 measureText('x')@10px × fontSize/10(对齐 Effects RichWrapDisabledStrategy),\n // 没有测量回调时使用字体指标估算。\n const { asc, desc, xHeight, ...precise } = resolveFontMetrics(measureText, fontFamily, resolvedFontWeight, resolvedFontStyle, fontSize);\n const baselineYGe = asc + (lh - asc - desc) / 2;\n // dominant-baseline 非 alphabetic:把 SVG y 加 delta 让 Effects alphabetic 基线落在所选基线(纯 svg2ir 算式,\n // 复用 asc/desc/xHeight,见 dominantBaselineDelta)。alphabetic/未读 delta=0 不变(0 回退保证)。\n const cy = (y + dominantBaselineDelta(dominantBaselineRaw, asc, desc, xHeight, precise)) + estHeight / 2 - baselineYGe;\n // 叠加 transform:文字自带 transform + 所有祖先 <g> transform 累乘(用 DOM getAttribute 上溯,\n // 绕过解析底座 inherit 的不一致——它对自带 transform 的子元素不 inherit g,且多层 g 只合最内层)。\n // 不读则文字 position 停在 (x,y) 局部 → 全堆左上角。M_祖 × M_自身 应用到中心点。\n const { m, sx, sy, rotation } = buildTextWorldMatrix(el);\n const wx = m.a * cx + m.c * cy + m.e;\n const wy = m.b * cx + m.d * cy + m.f;\n\n const layer: Omit<IRTextLayer, 'id' | 'name' | 'time'> = {\n type: 'text',\n content: textData,\n localBounds,\n visible,\n transform: {\n position: { type: 'static', value: [wx, wy, 0] as IRVec3 },\n anchor: { type: 'static', value: [estWidth / 2, estHeight / 2, 0] as IRVec3 },\n scale: { type: 'static', value: [sx, sy, 1] },\n rotation: { z: { type: 'static', value: rotation } },\n opacity: { type: 'static', value: Math.max(0, Math.min(1, totalOpacity)) },\n },\n };\n\n return { layer, info: buildSVGPreservedTextData(spans, isPathText, fontFamily, resolvedFontWeight, resolvedFontStyle) };\n}\n","/** 构造需要独立定位的单行文本图层。 */\nimport type EditableSVG from '../../../parse-svg/svg-parser';\nimport type { Element } from '@svgdotjs/svg.js';\nimport type { IRColor, IRTextContent, IRTextLayer, IRVec3 } from '@vvfx/animation-ir';\nimport { isSVGElementVisible, readSVGNumberAttribute, readSVGStringAttribute } from '../../read-attributes';\nimport { dominantBaselineDelta, estimateTextWidth, mapFontWeight, resolveFontMetrics, type TextMeasure } from './font-metrics';\nimport type { TextContentResult } from './inspect-content';\nimport { getGradientMidpointColor } from '../paint/resolve-gradient';\nimport { mapSVGColorToIRColor } from '../../map-color';\nimport type { SVGPreservedTextData, SVGPreservedTextSpan } from '../../../svg-preserved-data';\nimport { buildSVGPreservedTextData, buildTextWorldMatrix, FONT_STYLE_MAP, irColorToHex, readLetterSpacing, readTextOpacity, resolveEffectiveTextAlign, resolveTextFillColor, TEXT_ANCHOR_MAP } from './text-layout';\n\nexport function buildSplitTextLayers (es: EditableSVG, el: Element, textContent: TextContentResult, measureText: TextMeasure): {\n layers: Array<Omit<IRTextLayer, 'id' | 'name' | 'time'>>;\n infos: SVGPreservedTextData[];\n} | null {\n const { spans, firstTspanX, firstTspanY, isPathText } = textContent;\n\n if (spans.length === 0) { return null; }\n\n // 复用 <text> 级属性(同行段共享 fontSize/fontFamily/transform 等)。\n const x = readSVGNumberAttribute(es, el, 'x') ?? firstTspanX ?? 0;\n const y = readSVGNumberAttribute(es, el, 'y') ?? firstTspanY ?? 0;\n const textFontSize = readSVGNumberAttribute(es, el, 'font-size', 16) ?? 16;\n const fontFamily = readSVGStringAttribute(es, el, 'font-family');\n const fontWeightRaw = readSVGStringAttribute(es, el, 'font-weight');\n const fontStyleRaw = readSVGStringAttribute(es, el, 'font-style');\n const textAnchor = readSVGStringAttribute(es, el, 'text-anchor');\n const dominantBaselineRaw = readSVGStringAttribute(es, el, 'dominant-baseline');\n // 处理 RTL 对齐。\n const letterSpacing = readLetterSpacing(es, el, textFontSize);\n const fillRaw = es.getAttr(el, 'fill');\n const { totalOpacity, fillOpacity } = readTextOpacity(es, el);\n const visible = isSVGElementVisible(es, el);\n const resolvedFontStyle = FONT_STYLE_MAP[fontStyleRaw] ?? 'normal';\n const textAlign = TEXT_ANCHOR_MAP[textAnchor] ?? 'left';\n // <text> 级默认色(段未显式 fill 时用)。\n const defaultColor: IRColor = resolveTextFillColor(es, fillRaw, fillOpacity);\n\n // 逐段:解析该段 fontSize(异字号)、color、宽 w_i(需 measureText)。\n const segs = spans.map(span => {\n const segFontSize = span.fontSize != null ? parseFloat(span.fontSize) : textFontSize;\n const segWeight = mapFontWeight(span.bold === true ? 'bold' : fontWeightRaw, fontFamily);\n const segStyle = span.italic === true ? 'italic' : resolvedFontStyle;\n const segColor: IRColor = (typeof span.color === 'string' && /^url\\(/i.test(span.color))\n ? (getGradientMidpointColor(es, span.color, fillOpacity) ?? defaultColor)\n : (typeof span.color === 'string'\n ? (mapSVGColorToIRColor(span.color, fillOpacity) ?? defaultColor)\n : defaultColor);\n const w = estimateTextWidth(span.text, segFontSize, letterSpacing, measureText, fontFamily, segWeight, segStyle);\n\n return { span, segFontSize, segWeight, segStyle, segColor, w };\n });\n\n // 按段宽、段间 letter-spacing 和 dx 计算整段文本的布局宽度。\n const totalW = segs.reduce((s, g) => s + g.w, 0);\n const sumDx = segs.reduce((s, g) => s + (g.span.dx ?? 0), 0);\n const segCount = segs.length;\n // effectiveBlockWidth = 段宽和 + 全段 ls(N·ls = 段间 N-1 + 末段 trailing 1)+ 段间 dx 和。\n // N=1、Σdx=0 时 = w+ls,blockLeft=x-(w+ls)/2,段心=x-ls/2,与 buildSingleTextLayer middle cx 一致(推广到 N 段+dx)。\n const effectiveBlockWidth = totalW + segCount * letterSpacing + sumDx;\n // blockLeft 按 text-anchor:center→x-W/2,right→x-W(右缘=末段 trailing ls 末端=x),left→x(左缘=首字=x)。rtl 同主路径翻 start/end。\n const effAlignB = resolveEffectiveTextAlign(es, el, textAlign);\n const blockLeft = effAlignB === 'center' ? x - effectiveBlockWidth / 2 : effAlignB === 'right' ? x - effectiveBlockWidth : x;\n let leftEdge = blockLeft;\n // 各段 cx_i = leftEdge_i + w_i/2;leftEdge 累加时先加本段 dx(首段 dx 相对 blockLeft)。\n const cxs: number[] = [];\n\n for (let i = 0; i < segs.length; i++) {\n const dx = segs[i].span.dx ?? 0;\n\n leftEdge += dx;\n cxs.push(leftEdge + segs[i].w / 2); // 段中心\n // 非末段补一个 letterSpacing,匹配 SVG 的段间推进。\n leftEdge += segs[i].w + (i < segs.length - 1 ? letterSpacing : 0);\n }\n\n // 矩阵仿射全段共享(<text> transform),各段独立套 cx_i。\n const { m, sx, sy, rotation } = buildTextWorldMatrix(el);\n\n // 基线对齐:首段算基准基线 world y,其余段(异字号)反解 cy_i 使首行基线 world y 对齐首段。\n // 同字号:cy 全段共享 y+lh/2-baselineYGe。异字号:cy_i = y + (首段estHeight/2-首段baselineYGe) - (本段estHeight/2-本段baselineYGe)\n // 化简:同字号时两项相等→cy=y+lh/2-baselineYGe(全段同),异字号时各段用自己 asc/desc 补偿。\n const firstSeg = segs[0];\n const firstMetrics = resolveFontMetrics(measureText, fontFamily, firstSeg.segWeight, firstSeg.segStyle, firstSeg.segFontSize);\n const firstLh = firstSeg.segFontSize; // 单行无 line-height → lh=fontSize\n const firstBaselineYGe = firstMetrics.asc + (firstLh - firstMetrics.asc - firstMetrics.desc) / 2;\n // 将首段的 dominant-baseline 偏移应用到整块文本。\n const baselineDelta = dominantBaselineDelta(dominantBaselineRaw, firstMetrics.asc, firstMetrics.desc, firstMetrics.xHeight, firstMetrics);\n const firstCyLocal = (y + baselineDelta) + firstLh / 2 - firstBaselineYGe; // 首段局部 cy(基线 world y 基准)\n\n const layers: Array<Omit<IRTextLayer, 'id' | 'name' | 'time'>> = [];\n const infos: SVGPreservedTextData[] = [];\n\n // accDy:SVG tspan dy 累加(每段 dy 相对前段基线再下移 dy),逐段累加进各段 cyLocal。首段 dy 也累加\n // (整块相对 <text>.y 下移 dy0,与 text-anchor 水平居中无关,纯纵向平移)。\n let accDy = 0;\n\n for (let i = 0; i < segs.length; i++) {\n const g = segs[i];\n const lh = g.segFontSize; // 单行 lh=fontSize(Effects RichTextLayout 默认)\n const estHeight = lh;\n // cy_i:异字号时按本段 asc/desc 补偿使首行基线 world y 对齐首段;同字号时=firstCyLocal。\n let cyLocal: number;\n\n if (i === 0) {\n cyLocal = firstCyLocal;\n } else {\n const mt = resolveFontMetrics(measureText, fontFamily, g.segWeight, g.segStyle, g.segFontSize);\n const baselineYGeI = mt.asc + (lh - mt.asc - mt.desc) / 2;\n\n // 令本段首行基线 world y = 首段:cy_i - estHeight_i/2 + baselineYGe_i = firstCyLocal - firstLh/2 + firstBaselineYGe\n // → cy_i = firstCyLocal - firstLh/2 + firstBaselineYGe + estHeight_i/2 - baselineYGe_i\n cyLocal = firstCyLocal - firstLh / 2 + firstBaselineYGe + estHeight / 2 - baselineYGeI;\n }\n accDy += g.span.dy ?? 0;\n cyLocal += accDy; // SVG tspan dy 累加进本段基线(像素级,font 无关)\n const cx = cxs[i];\n const wx = m.a * cx + m.c * cyLocal + m.e;\n const wy = m.b * cx + m.d * cyLocal + m.f;\n\n // 该段 color 塌 #hex(markup 用)。\n const segColorHex = irColorToHex(g.segColor);\n // 为该段保存对应的文本样式信息。\n const segSpan: SVGPreservedTextSpan = { text: g.span.text, newLine: false };\n\n if (g.span.fontSize != null) { segSpan.fontSize = g.span.fontSize; }\n segSpan.color = segColorHex;\n if (g.span.bold === true) { segSpan.bold = true; }\n if (g.span.italic === true) { segSpan.italic = true; }\n\n const textData: IRTextContent = {\n color: g.segColor,\n text: g.span.text,\n fontAssetId: fontFamily,\n fontSize: g.segFontSize,\n letterSpacing,\n textAlign: 'left', // 段在 quad 内左对齐,位置由 position 表示\n lineHeight: g.segFontSize,\n };\n\n layers.push({\n type: 'text',\n content: textData,\n localBounds: { x: 0, y: 0, width: g.w, height: estHeight },\n visible,\n transform: {\n position: { type: 'static', value: [wx, wy, 0] as IRVec3 },\n anchor: { type: 'static', value: [g.w / 2, estHeight / 2, 0] as IRVec3 },\n scale: { type: 'static', value: [sx, sy, 1] },\n rotation: { z: { type: 'static', value: rotation } },\n opacity: { type: 'static', value: Math.max(0, Math.min(1, totalOpacity)) },\n },\n });\n infos.push(buildSVGPreservedTextData([segSpan], isPathText, fontFamily, g.segWeight, g.segStyle));\n }\n\n return { layers, infos };\n}\n","/** 将竖排文本按字符拆分为独立 IR 文本图层。 */\nimport type EditableSVG from '../../../parse-svg/svg-parser';\nimport type { Element } from '@svgdotjs/svg.js';\nimport type { IRColor, IRTextContent, IRTextLayer, IRVec3 } from '@vvfx/animation-ir';\nimport { isSVGElementVisible, readSVGNumberAttribute, readSVGStringAttribute } from '../../read-attributes';\nimport { estimateTextWidth, mapFontWeight, type TextMeasure } from './font-metrics';\nimport type { SVGPreservedTextData, SVGPreservedTextSpan } from '../../../svg-preserved-data';\nimport { buildSVGPreservedTextData, buildTextWorldMatrix, FONT_STYLE_MAP, irColorToHex, readLetterSpacing, readTextOpacity, resolveTextFillColor, TEXT_ANCHOR_MAP } from './text-layout';\n\nexport function buildVerticalTextLayers (es: EditableSVG, el: Element, measureText?: TextMeasure): {\n layers: Array<Omit<IRTextLayer, 'id' | 'name' | 'time'>>;\n infos: SVGPreservedTextData[];\n} | null {\n // 仅处理 text 的直接文本内容。\n const content = String((el as unknown as { node?: { textContent?: string } }).node?.textContent ?? '').replace(/\\s+/g, '');\n\n if (content === '') { return null; }\n\n // 按 Unicode 码点拆分,保留 surrogate pair。\n const chars = Array.from(content);\n const n = chars.length;\n\n if (n === 0) { return null; }\n\n const x = readSVGNumberAttribute(es, el, 'x') ?? 0; // 列水平位置(horizontal)\n const y = readSVGNumberAttribute(es, el, 'y') ?? 0; // inline 起点(text-anchor 决定其是顶/中/底)\n const fontSize = readSVGNumberAttribute(es, el, 'font-size', 16) ?? 16;\n const fontFamily = readSVGStringAttribute(es, el, 'font-family');\n const fontWeightRaw = readSVGStringAttribute(es, el, 'font-weight');\n const fontStyleRaw = readSVGStringAttribute(es, el, 'font-style');\n const textAnchor = readSVGStringAttribute(es, el, 'text-anchor');\n const letterSpacing = readLetterSpacing(es, el, fontSize);\n const fillRaw = es.getAttr(el, 'fill');\n const { totalOpacity, fillOpacity } = readTextOpacity(es, el);\n const visible = isSVGElementVisible(es, el);\n const resolvedFontWeight = mapFontWeight(fontWeightRaw, fontFamily);\n const resolvedFontStyle = FONT_STYLE_MAP[fontStyleRaw] ?? 'normal';\n const textAlign = TEXT_ANCHOR_MAP[textAnchor] ?? 'left';\n // 默认 dominant-baseline 为 central。\n const dominantBaselineRaw = readSVGStringAttribute(es, el, 'dominant-baseline') || 'central';\n\n void dominantBaselineRaw;\n\n const defaultColor: IRColor = resolveTextFillColor(es, fillRaw, fillOpacity);\n\n // 计算每个字符的显示宽度。\n const charWidths = chars.map(ch => estimateTextWidth(ch, fontSize, 0, measureText, fontFamily, resolvedFontWeight, resolvedFontStyle));\n // 计算整列高度。\n const blockHeight = n * fontSize + n * letterSpacing;\n // 根据 text-anchor 计算字符中心位置。\n const charCentersY: number[] = [];\n\n for (let i = 0; i < n; i++) {\n if (textAlign === 'center') {\n const blockTop = y - blockHeight / 2;\n\n charCentersY.push(blockTop + i * (fontSize + letterSpacing) + fontSize / 2);\n } else if (textAlign === 'right') {\n charCentersY.push(y - (n - 1 - i) * (fontSize + letterSpacing) - fontSize / 2);\n } else {\n charCentersY.push(y + i * (fontSize + letterSpacing) + fontSize / 2);\n }\n }\n\n // 对每个字符应用文本元素的世界变换。\n const { m, sx, sy, rotation } = buildTextWorldMatrix(el);\n\n // 保持 CJK 字形直立。\n const layers: Array<Omit<IRTextLayer, 'id' | 'name' | 'time'>> = [];\n const infos: SVGPreservedTextData[] = [];\n\n for (let i = 0; i < n; i++) {\n const ch = chars[i];\n const w = charWidths[i];\n const estHeight = fontSize;\n const cxLocal = x;\n const cyLocal = charCentersY[i];\n const wx = m.a * cxLocal + m.c * cyLocal + m.e;\n const wy = m.b * cxLocal + m.d * cyLocal + m.f;\n const segColorHex = irColorToHex(defaultColor);\n // 使用字符中心作为 IR 文本图层的位置。\n const segSpan: SVGPreservedTextSpan = { text: ch, newLine: false };\n\n segSpan.color = segColorHex;\n\n const textData: IRTextContent = {\n color: defaultColor,\n text: ch,\n fontAssetId: fontFamily,\n fontSize,\n letterSpacing: 0, // 单字无 ls(段间 ls 已进 charCentersY 位置)\n textAlign: 'left',\n lineHeight: fontSize,\n };\n\n layers.push({\n type: 'text',\n content: textData,\n localBounds: { x: 0, y: 0, width: w, height: estHeight },\n visible,\n transform: {\n position: { type: 'static', value: [wx, wy, 0] as IRVec3 },\n anchor: { type: 'static', value: [w / 2, estHeight / 2, 0] as IRVec3 },\n scale: { type: 'static', value: [sx, sy, 1] },\n rotation: { z: { type: 'static', value: rotation } },\n opacity: { type: 'static', value: Math.max(0, Math.min(1, totalOpacity)) },\n },\n });\n infos.push(buildSVGPreservedTextData([segSpan], false, fontFamily, resolvedFontWeight, resolvedFontStyle));\n }\n\n return { layers, infos };\n}\n","/** 将各行具有独立水平锚点的多行文本拆分为多个 IR 文本图层。 */\nimport type EditableSVG from '../../../parse-svg/svg-parser';\nimport type { Element } from '@svgdotjs/svg.js';\nimport type { IRColor, IRTextContent, IRTextLayer, IRVec3 } from '@vvfx/animation-ir';\nimport { isSVGElementVisible, readSVGNumberAttribute, readSVGStringAttribute } from '../../read-attributes';\nimport { dominantBaselineDelta, estimateTextWidth, mapFontWeight, resolveFontMetrics, type TextMeasure } from './font-metrics';\nimport type { TextContentResult } from './inspect-content';\nimport { getGradientMidpointColor } from '../paint/resolve-gradient';\nimport { mapSVGColorToIRColor } from '../../map-color';\nimport type { SVGPreservedTextData, SVGPreservedTextSpan } from '../../../svg-preserved-data';\nimport { buildSVGPreservedTextData, buildTextWorldMatrix, FONT_STYLE_MAP, irColorToHex, readLetterSpacing, readTextOpacity, resolveEffectiveTextAlign, resolveTextFillColor, TEXT_ANCHOR_MAP } from './text-layout';\n\nexport function buildPerLineTextLayers (es: EditableSVG, el: Element, textContent: TextContentResult, measureText?: TextMeasure): {\n layers: Array<Omit<IRTextLayer, 'id' | 'name' | 'time'>>;\n infos: SVGPreservedTextData[];\n} | null {\n const { lineTexts, lineXs, lineYs, firstTspanY, firstTspanX, lineHeight: tspanLineH, spans: allSpans, isPathText } = textContent;\n\n if (lineTexts.length < 2) { return null; }\n\n const xText = readSVGNumberAttribute(es, el, 'x') ?? null;\n const yText = readSVGNumberAttribute(es, el, 'y') ?? firstTspanY ?? 0;\n const fontSize = readSVGNumberAttribute(es, el, 'font-size', 16) ?? 16;\n const fontFamily = readSVGStringAttribute(es, el, 'font-family');\n const fontWeightRaw = readSVGStringAttribute(es, el, 'font-weight');\n const fontStyleRaw = readSVGStringAttribute(es, el, 'font-style');\n const textAnchor = readSVGStringAttribute(es, el, 'text-anchor');\n const dominantBaselineRaw = readSVGStringAttribute(es, el, 'dominant-baseline');\n // RTL 文本反转 start/end 锚点,middle 保持不变。\n const letterSpacing = readLetterSpacing(es, el, fontSize);\n const fillRaw = es.getAttr(el, 'fill');\n const { totalOpacity, fillOpacity } = readTextOpacity(es, el);\n const visible = isSVGElementVisible(es, el);\n const resolvedFontWeight = mapFontWeight(fontWeightRaw, fontFamily);\n const resolvedFontStyle = FONT_STYLE_MAP[fontStyleRaw] ?? 'normal';\n const textAlign = TEXT_ANCHOR_MAP[textAnchor] ?? 'left';\n const defaultColor: IRColor = resolveTextFillColor(es, fillRaw, fillOpacity);\n\n const { m, sx, sy, rotation } = buildTextWorldMatrix(el);\n // 行高优先使用相邻 tspan 的 y 差,缺失时回退到字号。\n const lineH = tspanLineH > 0 ? tspanLineH : fontSize;\n\n // 按换行标记将 span 分组。\n const spansByLine: SVGPreservedTextSpan[][] = [];\n\n {\n let cur: SVGPreservedTextSpan[] = [];\n\n for (const sp of allSpans) {\n if (sp.newLine && cur.length > 0) { spansByLine.push(cur); cur = []; }\n cur.push(sp);\n }\n if (cur.length > 0) { spansByLine.push(cur); }\n }\n\n const layers: Array<Omit<IRTextLayer, 'id' | 'name' | 'time'>> = [];\n const infos: SVGPreservedTextData[] = [];\n\n for (let i = 0; i < lineTexts.length; i++) {\n const text = lineTexts[i];\n\n if (text === '') { continue; }\n // 优先使用行内 tspan.x,否则使用 text.x。\n const lineX = lineXs[i] ?? xText ?? firstTspanX ?? 0;\n // 使用每行的基线,保留 SVG 原始行距。\n const lineY = lineYs[i] ?? (yText + i * lineH);\n // 优先使用当前行 tspan 的字号,否则回退到 text 级字号。\n const lineFsRaw = (spansByLine[i] ?? []).find(s => s.fontSize != null)?.fontSize;\n const lineFs = lineFsRaw != null ? (parseFloat(lineFsRaw) || fontSize) : fontSize;\n const w = estimateTextWidth(text, lineFs, letterSpacing, measureText, fontFamily, resolvedFontWeight, resolvedFontStyle);\n const estHeight = lineFs;\n const { asc, desc, xHeight, ...linePrecise } = resolveFontMetrics(measureText, fontFamily, resolvedFontWeight, resolvedFontStyle, lineFs);\n const baselineYGe = asc + (lineFs - asc - desc) / 2;\n // 计算行锚点并补偿末尾 letter-spacing。\n const effAlign = resolveEffectiveTextAlign(es, el, textAlign);\n const cxCenter = effAlign === 'center'\n ? lineX - letterSpacing / 2\n : effAlign === 'right'\n ? lineX - w / 2 - letterSpacing\n : lineX + w / 2;\n const cy = (lineY + dominantBaselineDelta(dominantBaselineRaw, asc, desc, xHeight, linePrecise)) + estHeight / 2 - baselineYGe;\n const wx = m.a * cxCenter + m.c * cy + m.e;\n const wy = m.b * cxCenter + m.d * cy + m.f;\n\n const lineSpans = spansByLine[i] ?? [];\n const firstSpanColor = lineSpans.find(s => s.color != null)?.color;\n const lineColor: IRColor = (typeof firstSpanColor === 'string' && /^url\\(/i.test(firstSpanColor))\n ? (getGradientMidpointColor(es, firstSpanColor, fillOpacity) ?? defaultColor)\n : (typeof firstSpanColor === 'string'\n ? (mapSVGColorToIRColor(firstSpanColor, fillOpacity) ?? defaultColor)\n : defaultColor);\n\n const segSpan: SVGPreservedTextSpan = { text, newLine: false };\n\n segSpan.color = irColorToHex(lineColor);\n const lineFontSizeRaw = lineSpans.find(s => s.fontSize != null)?.fontSize;\n\n if (lineFontSizeRaw != null) { segSpan.fontSize = lineFontSizeRaw; }\n if (lineSpans.some(s => s.bold === true)) { segSpan.bold = true; }\n if (lineSpans.some(s => s.italic === true)) { segSpan.italic = true; }\n\n const textData: IRTextContent = {\n color: lineColor,\n text: text,\n fontAssetId: fontFamily,\n fontSize: lineFs,\n letterSpacing,\n textAlign: 'left',\n lineHeight: fontSize,\n };\n\n layers.push({\n type: 'text',\n content: textData,\n localBounds: { x: 0, y: 0, width: w, height: estHeight },\n visible,\n transform: {\n position: { type: 'static', value: [wx, wy, 0] as IRVec3 },\n anchor: { type: 'static', value: [w / 2, estHeight / 2, 0] as IRVec3 },\n scale: { type: 'static', value: [sx, sy, 1] },\n rotation: { z: { type: 'static', value: rotation } },\n opacity: { type: 'static', value: Math.max(0, Math.min(1, totalOpacity)) },\n },\n });\n infos.push(buildSVGPreservedTextData([segSpan], isPathText, fontFamily, resolvedFontWeight, resolvedFontStyle));\n }\n\n return { layers, infos };\n}\n","/** 选择文本布局并构造 IR 文本图层。 */\nimport type EditableSVG from '../../../parse-svg/svg-parser';\nimport type { Element } from '@svgdotjs/svg.js';\nimport type { IRTextLayer } from '@vvfx/animation-ir';\nimport type { SVGPreservedTextData } from '../../../svg-preserved-data';\nimport { readSVGNumberAttribute } from '../../read-attributes';\nimport { hasNestedTspan, hasNonFirstTspanExplicitX, hasTspanTransformOrRotate, hasWritingMode, isUnsupportedTextOffset, readTextContent } from './inspect-content';\nimport type { TextMeasure } from './font-metrics';\nimport { buildSingleTextLayer } from './build-single-text-layer';\nimport { buildSplitTextLayers } from './build-split-text-layers';\nimport { buildVerticalTextLayers } from './build-vertical-text-layers';\nimport { buildPerLineTextLayers } from './build-per-line-text-layers';\n\nexport function parseTextLayers (es: EditableSVG, el: Element, measureText?: TextMeasure): {\n layers: Array<Omit<IRTextLayer, 'id' | 'name' | 'time'>>;\n infos: SVGPreservedTextData[];\n} | null {\n const textContent = readTextContent(el);\n const { spans, lineCount, isPathText, lineXs } = textContent;\n\n if (spans.length === 0 && lineCount === 0) { return null; }\n // 单行文本存在可表达的偏移或字号差异时拆分图层。\n const textFs = readSVGNumberAttribute(es, el, 'font-size', 16) ?? 16;\n const hasSplittableDx = spans.some(s => s.dx != null && s.dx !== 0 && !isUnsupportedTextOffset(s.dxRaw ?? ''));\n const hasSplittableDy = spans.some(s => s.dy != null && s.dy !== 0 && !isUnsupportedTextOffset(s.dyRaw ?? ''));\n const hasFontSizeDiff = new Set(spans.map(s => s.fontSize != null ? parseFloat(s.fontSize) : textFs)).size > 1;\n const canSplit = (hasSplittableDx || hasSplittableDy || hasFontSizeDiff) && lineCount <= 1 && measureText != null\n && !isPathText\n && !hasNonFirstTspanExplicitX(el)\n && !hasWritingMode(es, el)\n && !hasTspanTransformOrRotate(el)\n && !hasNestedTspan(el);\n\n // 多行文本的行首 x 不同时按行拆分。\n const hasPerLineXDiff = lineCount > 1 && lineXs.length >= 2\n && lineXs.slice(1).some(x => x != null && x !== lineXs[0]);\n const canSplitPerLine = hasPerLineXDiff && !isPathText && !hasWritingMode(es, el) && !hasTspanTransformOrRotate(el) && !hasNestedTspan(el);\n\n // 核心文本组件不支持竖排布局,按字符生成图层。\n if (hasWritingMode(es, el) && !hasTspanTransformOrRotate(el)) {\n const vertical = buildVerticalTextLayers(es, el, measureText);\n\n if (vertical != null) { return vertical; }\n }\n\n return canSplit\n ? buildSplitTextLayers(es, el, textContent, measureText)\n : canSplitPerLine\n ? buildPerLineTextLayers(es, el, textContent, measureText)\n : wrapSingle(buildSingleTextLayer(es, el, textContent, measureText));\n}\n\nfunction wrapSingle (r: { layer: Omit<IRTextLayer, 'id' | 'name' | 'time'> | null; info: SVGPreservedTextData | null }): { layers: Array<Omit<IRTextLayer, 'id' | 'name' | 'time'>>; infos: SVGPreservedTextData[] } | null {\n if (r.layer == null || r.info == null) { return null; }\n\n return { layers: [r.layer], infos: [r.info] };\n}\n","import type { Element } from '@svgdotjs/svg.js';\nimport type { IRLayer, IRTextLayer } from '@vvfx/animation-ir';\nimport { IRLayerType } from '@vvfx/animation-ir';\nimport { describeElement } from '../diagnostics/collect-warnings';\nimport { applySMILToParsedTransform } from '../transform/build-transform';\nimport {\n warnTextPaintDropped, warnUnsupportedAttributes,\n} from '../diagnostics/warn-unsupported';\nimport { hasAnimatedVisibility } from '../smil/inspect-animation';\nimport { parseTextLayers } from '../text/parse';\nimport type { TextConversionContext } from './conversion-session';\n\nexport function convertTextElement (element: Element, context: TextConversionContext): void {\n const parsed = parseTextLayers(context.es, element, context.measureText);\n\n if (parsed == null) { return; }\n const { layers: textLayers, infos } = parsed;\n const animatedVisibility = hasAnimatedVisibility(element);\n\n for (const textLayer of textLayers) {\n textLayer.visible = textLayer.visible || animatedVisibility;\n applySMILToParsedTransform(\n element,\n textLayer.transform,\n context.smilDurationSink ?? { value: 0 },\n context.frameRate,\n true,\n );\n }\n\n warnUnsupportedAttributes(\n context.es,\n element,\n 'text',\n context.emit,\n context.strict,\n context.idEls,\n true,\n );\n warnTextPaintDropped(context.es, element, describeElement(element), context.emit, context.strict);\n\n const baseName = String(context.es.getAttr(element, 'id') ?? `text_${context.peekLayerIndex()}`);\n\n for (let index = 0; index < textLayers.length; index++) {\n const textLayer = textLayers[index];\n const info = infos[index];\n const textName = textLayers.length > 1 ? `${baseName}__seg${index}` : baseName;\n const layerIndex = context.allocateLayerIndex();\n\n if (info != null) {\n context.registerTextFontAsset(textLayer.content, info);\n }\n\n const textLayerId = `${layerIndex}`;\n const layer: IRLayer = {\n ...(textLayer as object),\n type: IRLayerType.Text,\n id: textLayerId,\n name: textName,\n time: { inFrame: 0, outFrame: context.outFrame },\n content: textLayer.content,\n transform: textLayer.transform,\n } as IRTextLayer;\n\n if (context.textDataByLayerId != null && info != null) {\n context.textDataByLayerId.set(textLayerId, info);\n }\n context.appendLayer(layer, element);\n }\n}\n","import type { Element } from '@svgdotjs/svg.js';\n\nfunction isConditionallySupported (element: globalThis.Element): boolean {\n if ((element.getAttribute('requiredFeatures') ?? '').trim() !== '') { return false; }\n if ((element.getAttribute('requiredExtensions') ?? '').trim() !== '') { return false; }\n\n const rawLanguages = element.getAttribute('systemLanguage')?.trim();\n\n if (rawLanguages == null || rawLanguages === '') { return true; }\n const languages = [\n globalThis.navigator?.language,\n ...(globalThis.navigator?.languages ?? []),\n ]\n .filter((language): language is string => language != null && language !== '')\n .map(language => language.toLowerCase());\n\n return rawLanguages.split(',').some(rawLanguage => {\n const language = rawLanguage.trim().toLowerCase();\n\n return language !== '' && languages.some(current => current === language || current.startsWith(`${language}-`));\n });\n}\n\nexport function getActiveSwitchChild (switchNode: globalThis.Element): globalThis.Element | null {\n return Array.from(switchNode.children).find(isConditionallySupported) ?? null;\n}\n\nexport function isInInactiveSwitchBranch (element: Element): boolean {\n let current = element.node as globalThis.Element | null;\n\n while (current?.parentNode != null) {\n const parent = current.parentNode as globalThis.Element;\n\n if (parent.tagName?.toLowerCase() === 'switch') {\n let branch = current;\n\n while (branch.parentNode != null && branch.parentNode !== parent) {\n branch = branch.parentNode as globalThis.Element;\n }\n if (getActiveSwitchChild(parent) !== branch) { return true; }\n }\n if (parent.tagName?.toLowerCase() === 'svg') { break; }\n current = parent;\n }\n\n return false;\n}\n","import type EditableSVG from '../../../parse-svg/svg-parser';\nimport type { Element } from '@svgdotjs/svg.js';\nimport type { IRShape } from '@vvfx/animation-ir';\nimport { readPresentationAttribute } from '../../../parse-svg/read-presentation-attribute';\nimport { readSVGOwnOpacity } from '../../read-attributes';\nimport { IDENTITY, multiply, parseTransform, type SVGMatrix } from '../../matrix';\nimport { parseShapeElement } from '../shape/parse-shape-element';\nimport { getActiveSwitchChild } from '../switch-branch';\nimport { readUseTarget, readUseTranslate } from './expand-use';\n\nexport interface GroupUseInstance {\n kind: 'shape' | 'text' | 'image';\n source: Element;\n target: Element;\n shape?: IRShape;\n matrix: SVGMatrix;\n name: string;\n ancestorStopNode: globalThis.Element | null;\n opacity: number;\n visible: boolean;\n}\n\nfunction readOwnOpacity (node: globalThis.Element): number {\n const raw = readPresentationAttribute(node, 'opacity');\n const value = raw == null || raw.trim() === '' ? 1 : Number(raw);\n\n return Number.isFinite(value) ? Math.max(0, Math.min(1, value)) : 1;\n}\n\nfunction isOwnVisible (node: globalThis.Element): boolean {\n const display = readPresentationAttribute(node, 'display')?.trim().toLowerCase();\n const visibility = readPresentationAttribute(node, 'visibility')?.trim().toLowerCase();\n\n return display !== 'none' && visibility !== 'hidden' && visibility !== 'collapse';\n}\n\nfunction collectGroupElement (\n es: EditableSVG,\n element: Element,\n idShapes: ReadonlyMap<string, IRShape>,\n idEls: ReadonlyMap<string, Element>,\n rootStopNode: globalThis.Element | null,\n parentMatrix: SVGMatrix,\n parentOpacity: number,\n parentVisible: boolean,\n): GroupUseInstance[] {\n const node = element.node;\n\n if (node == null) { return []; }\n const tag = node.tagName.toLowerCase();\n const ownMatrix = multiply(parentMatrix, parseTransform(node.getAttribute('transform') ?? ''));\n const ownOpacity = parentOpacity * readOwnOpacity(node);\n const ownVisible = parentVisible && isOwnVisible(node);\n\n if (tag === 'g' || tag === 'a') {\n return collectGroupChildren(\n es,\n element,\n idShapes,\n idEls,\n rootStopNode,\n parentMatrix,\n parentOpacity,\n parentVisible,\n );\n }\n if (tag === 'switch') {\n const activeChild = getActiveSwitchChild(node);\n const activeElement = activeChild == null\n ? undefined\n : element.find('*').find(candidate => candidate.node === activeChild);\n\n return activeElement == null\n ? []\n : collectGroupElement(es, activeElement, idShapes, idEls, rootStopNode, ownMatrix, ownOpacity, ownVisible);\n }\n const shape = parseShapeElement(es, element, tag);\n\n if (shape != null) {\n return [{\n kind: 'shape',\n source: element,\n target: element,\n shape,\n matrix: ownMatrix,\n name: String(node.getAttribute('id') ?? tag),\n ancestorStopNode: rootStopNode,\n opacity: ownOpacity,\n visible: ownVisible,\n }];\n }\n if (tag === 'text' || tag === 'image') {\n return [{\n kind: tag,\n source: element,\n target: element,\n matrix: ownMatrix,\n name: String(node.getAttribute('id') ?? tag),\n ancestorStopNode: rootStopNode,\n opacity: ownOpacity,\n visible: ownVisible,\n }];\n }\n if (tag !== 'use') { return []; }\n const targetId = readUseTarget(es, element);\n const target = targetId == null ? undefined : idEls.get(targetId);\n const targetShape = targetId == null ? undefined : idShapes.get(targetId);\n\n if (target == null || targetShape == null) { return []; }\n const { x, y } = readUseTranslate(es, element);\n const useMatrix = multiply(ownMatrix, { a: 1, b: 0, c: 0, d: 1, e: x, f: y });\n const targetMatrix = parseTransform(target.node?.getAttribute('transform') ?? '');\n\n return [{\n kind: 'shape',\n source: element,\n target,\n shape: targetShape,\n matrix: multiply(useMatrix, targetMatrix),\n name: String(node.getAttribute('id') ?? targetId),\n ancestorStopNode: null,\n opacity: ownOpacity * readSVGOwnOpacity(target),\n visible: ownVisible && isOwnVisible(target.node),\n }];\n}\n\nfunction collectGroupChildren (\n es: EditableSVG,\n container: Element,\n idShapes: ReadonlyMap<string, IRShape>,\n idEls: ReadonlyMap<string, Element>,\n rootStopNode: globalThis.Element | null,\n parentMatrix: SVGMatrix,\n parentOpacity: number,\n parentVisible: boolean,\n): GroupUseInstance[] {\n const node = container.node;\n\n if (node == null) { return []; }\n const ownMatrix = multiply(parentMatrix, parseTransform(node.getAttribute('transform') ?? ''));\n const ownOpacity = parentOpacity * readOwnOpacity(node);\n const ownVisible = parentVisible && isOwnVisible(node);\n const instances: GroupUseInstance[] = [];\n\n for (const child of container.find('*')) {\n if (child.node?.parentNode !== node) { continue; }\n instances.push(...collectGroupElement(\n es,\n child,\n idShapes,\n idEls,\n rootStopNode,\n ownMatrix,\n ownOpacity,\n ownVisible,\n ));\n }\n\n return instances;\n}\n\nexport function collectGroupUseInstances (\n es: EditableSVG,\n groupEl: Element,\n idShapes: ReadonlyMap<string, IRShape>,\n idEls: ReadonlyMap<string, Element>,\n): GroupUseInstance[] {\n const rootStopNode = groupEl.node?.parentNode as globalThis.Element | null;\n\n return collectGroupChildren(es, groupEl, idShapes, idEls, rootStopNode, IDENTITY, 1, true);\n}\n","import type { Element } from '@svgdotjs/svg.js';\nimport { IRLayerType, type IRImageLayer, type IRShape, type IRShapeLayer, type IRTextLayer, type IRTransform, type IRVec3 } from '@vvfx/animation-ir';\nimport { SVG2IR_WARNING_CODES } from '../../../common/types';\nimport { readPresentationAttribute } from '../../../parse-svg/read-presentation-attribute';\nimport { accumulateAncestors, buildViewBoxMatrix, IDENTITY, multiply, parseTransform, type SVGMatrix } from '../../matrix';\nimport { isSVGElementVisible, readSVGElementOpacity, readSVGNumberAttribute, readSVGOwnOpacity } from '../../read-attributes';\nimport { applySMILToTransformWithOuter } from '../smil/apply-transform-animation';\nimport { applySMILToParsedTransform, buildTransformGeometry, prepareSMILShapeGeometry } from '../transform/build-transform';\nimport { collectWarning, describeElement } from '../diagnostics/collect-warnings';\nimport { applyUseStyleOverrides, buildUseMatrix, buildUseTransform, readUseTarget, readUseTranslate } from '../use/expand-use';\nimport { collectGroupUseInstances, type GroupUseInstance } from '../use/collect-group-use-instances';\nimport { warnUnsupportedAttributes } from '../diagnostics/warn-unsupported';\nimport { hasAnimatedVisibility } from '../smil/inspect-animation';\nimport { parseTextLayers } from '../text/parse';\nimport { parseImageLayer } from '../image/parse-image';\nimport { parseRect } from '../shape/parse-shape-primitives';\nimport type { TransformContext } from '../smil/types';\nimport type { UseConversionContext } from './conversion-session';\n\nconst SMIL_ANIMATION_TAGS = new Set(['animate', 'animatetransform', 'animatemotion', 'set']);\n\nfunction readElementTransform (element: Element): SVGMatrix {\n const raw = element.node?.getAttribute('transform') ?? '';\n\n return raw === '' ? IDENTITY : parseTransform(raw);\n}\n\nfunction hasDirectSMILAnimation (element: Element): boolean {\n return Array.from(element.node?.children ?? []).some(child => SMIL_ANIMATION_TAGS.has(child.tagName.toLowerCase()));\n}\n\nfunction hasSMILAnimationInChain (element: Element, stopNode: globalThis.Element | null): boolean {\n let current: globalThis.Element | null = element.node;\n\n while (current != null && current !== stopNode) {\n if (Array.from(current.children).some(child => SMIL_ANIMATION_TAGS.has(child.tagName.toLowerCase()))) { return true; }\n current = current.parentNode as globalThis.Element | null;\n }\n\n return false;\n}\n\nfunction isVisibleOrAnimated (element: Element, es: UseConversionContext['es']): boolean {\n return isSVGElementVisible(es, element) || hasAnimatedVisibility(element);\n}\n\nfunction buildUseLayerVisibility (\n context: UseConversionContext,\n useElement: Element,\n targetElement: Element | undefined,\n): boolean {\n return isVisibleOrAnimated(useElement, context.es)\n && (targetElement == null || isVisibleOrAnimated(targetElement, context.es));\n}\n\nfunction applyReferencedAnimationToTransform (\n targetElement: Element,\n useElement: Element,\n shape: IRShape,\n context: UseConversionContext,\n transform: IRTransform,\n targetStopNode: globalThis.Element | null,\n preserveTargetAncestors: boolean,\n targetAncestorMatrix = IDENTITY,\n): void {\n const durationSink = context.smilDurationSink ?? { value: 0 };\n const comparisonDuration = durationSink.value > 0 ? durationSink.value : context.durationSeconds;\n const outerContext: TransformContext = {\n ancestorMatrix: accumulateAncestors(useElement),\n selfMatrix: readElementTransform(useElement),\n localCenter: shape.position,\n geometry: buildTransformGeometry(useElement, shape),\n comparisonDuration,\n };\n const targetContext: TransformContext = {\n ancestorMatrix: targetAncestorMatrix,\n selfMatrix: readElementTransform(targetElement),\n localCenter: shape.position,\n ancestorStopNode: targetStopNode,\n preserveAncestorTransforms: preserveTargetAncestors,\n geometry: buildTransformGeometry(targetElement, shape),\n comparisonDuration,\n };\n\n applySMILToTransformWithOuter(\n targetElement,\n useElement,\n transform,\n durationSink,\n context.frameRate,\n targetContext,\n outerContext,\n );\n}\n\ntype UseLayerBody =\n | Omit<IRShapeLayer, 'id' | 'name' | 'time' | 'visible'>\n | Omit<IRTextLayer, 'id' | 'name' | 'time' | 'visible'>\n | Omit<IRImageLayer, 'id' | 'name' | 'time' | 'visible'>;\n\ntype ParsedTextLayers = NonNullable<ReturnType<typeof parseTextLayers>>;\ntype ParsedImageLayer = NonNullable<ReturnType<typeof parseImageLayer>>;\n\ninterface UseTransformOptions {\n targetElement?: Element;\n useX: number;\n useY: number;\n targetMatrix: SVGMatrix;\n targetOpacity: number;\n shouldApplyAnimation: boolean;\n targetStopNode: globalThis.Element | null;\n preserveTargetAncestors: boolean;\n targetAncestorMatrix?: SVGMatrix;\n}\n\ninterface UseLayerMetadata {\n name: string;\n visible: boolean;\n}\n\ninterface UseShapeLayerOptions extends UseTransformOptions, UseLayerMetadata {\n sourceElement?: Element;\n shape: IRShape;\n}\n\ninterface UseImageLayerOptions extends UseTransformOptions, UseLayerMetadata {\n targetElement: Element;\n}\n\ninterface BuildUseInstanceTransformOptions extends UseTransformOptions {\n useElement: Element;\n context: UseConversionContext;\n shape: IRShape;\n}\n\nfunction applyUseInstanceStyles (\n context: UseConversionContext,\n useElement: Element,\n targetElement: Element | undefined,\n shape: IRShape,\n sourceElement?: Element,\n): IRShape {\n const sourceShape = sourceElement == null\n ? shape\n : applyUseStyleOverrides(context.es, sourceElement, targetElement, shape);\n\n return applyUseStyleOverrides(context.es, useElement, targetElement, sourceShape);\n}\n\nfunction buildUseInstanceTransform (options: BuildUseInstanceTransformOptions): IRTransform {\n if (options.shouldApplyAnimation && options.targetElement != null) {\n prepareSMILShapeGeometry(options.targetElement, options.shape);\n }\n const transform = buildUseTransform(\n options.useElement,\n options.shape,\n options.useX,\n options.useY,\n options.targetMatrix,\n options.targetOpacity,\n );\n\n if (!options.shouldApplyAnimation || options.targetElement == null) { return transform; }\n applyReferencedAnimationToTransform(\n options.targetElement,\n options.useElement,\n options.shape,\n options.context,\n transform,\n options.targetStopNode,\n options.preserveTargetAncestors,\n options.targetAncestorMatrix,\n );\n\n return transform;\n}\n\nfunction appendUseLayer (\n context: UseConversionContext,\n element: Element,\n layer: UseLayerBody,\n name: string,\n visible: boolean,\n): string {\n const layerId = `${context.allocateLayerIndex()}`;\n\n context.appendLayer({\n ...layer,\n id: layerId,\n name,\n time: { inFrame: 0, outFrame: context.outFrame },\n visible,\n }, element);\n\n return layerId;\n}\n\nfunction appendUseShapeLayer (element: Element, context: UseConversionContext, options: UseShapeLayerOptions): void {\n const instanceShape = applyUseInstanceStyles(\n context,\n element,\n options.targetElement,\n options.shape,\n options.sourceElement,\n );\n const transform = buildUseInstanceTransform({\n ...options,\n useElement: element,\n context,\n shape: instanceShape,\n });\n\n appendUseLayer(context, element, {\n type: IRLayerType.Shape,\n content: { shapes: [instanceShape] },\n transform,\n }, options.name, options.visible);\n}\n\nfunction appendUseTextLayers (\n element: Element,\n context: UseConversionContext,\n targetElement: Element,\n parsed: ParsedTextLayers,\n useMatrix: SVGMatrix,\n useOpacity: number,\n visible: boolean,\n getName: (index: number, split: boolean) => string,\n): void {\n const pureTranslation = isPureTranslation(useMatrix);\n\n for (let index = 0; index < parsed.layers.length; index++) {\n const textLayer = parsed.layers[index];\n const info = parsed.infos[index];\n\n if (textLayer == null) { continue; }\n applySMILToParsedTransform(\n targetElement,\n textLayer.transform,\n context.smilDurationSink ?? { value: 0 },\n context.frameRate,\n true,\n );\n if (pureTranslation) {\n applyUseTranslationToText(textLayer.transform, useMatrix, useOpacity);\n }\n if (info != null) { context.registerTextFontAsset(textLayer.content, info); }\n const layerId = appendUseLayer(context, element, {\n type: IRLayerType.Text,\n content: textLayer.content,\n transform: textLayer.transform,\n }, getName(index, parsed.layers.length > 1), visible);\n\n if (context.textDataByLayerId != null && info != null) {\n context.textDataByLayerId.set(layerId, info);\n }\n }\n}\n\nfunction appendUseImageLayer (\n element: Element,\n context: UseConversionContext,\n parsed: ParsedImageLayer,\n options: UseImageLayerOptions,\n): void {\n const imageShape = parseRect(context.es, options.targetElement);\n const transform = buildUseInstanceTransform({\n ...options,\n useElement: element,\n context,\n shape: imageShape,\n });\n\n transform.anchor = parsed.layer.transform?.anchor;\n context.appendAsset(parsed.asset);\n appendUseLayer(context, element, { ...parsed.layer, transform }, options.name, options.visible);\n}\n\nexport function convertUseElement (element: Element, context: UseConversionContext): void {\n const targetId = readUseTarget(context.es, element);\n const selector = describeElement(element);\n\n if (targetId == null) {\n collectWarning(\n context.emit,\n SVG2IR_WARNING_CODES.ELEMENT_DROPPED,\n '元素 <use> 无有效 href 引用,已跳过。',\n selector,\n context.strict,\n );\n\n return;\n }\n const groupDef = context.idGroups.get(targetId);\n\n if (groupDef != null) {\n const instances = collectGroupUseInstances(context.es, groupDef, context.idShapes, context.idEls);\n\n if (instances.length > 0) {\n convertGroupUse(element, context, instances, targetId);\n\n return;\n }\n }\n const shape = context.idShapes.get(targetId);\n\n if (shape == null) {\n if (tryConvertSymbolUse(element, context, targetId)) { return; }\n if (tryConvertTextUse(element, context, targetId)) { return; }\n if (tryConvertImageUse(element, context, targetId)) { return; }\n\n collectWarning(\n context.emit,\n SVG2IR_WARNING_CODES.ELEMENT_DROPPED,\n `<use href=\"#${targetId}\"> 目标非可展开形状,已跳过。`,\n selector,\n context.strict,\n );\n\n return;\n }\n\n convertShapeUse(element, context, targetId, shape);\n}\n\nfunction convertShapeUse (\n element: Element,\n context: UseConversionContext,\n targetId: string,\n shape: IRShape,\n): void {\n const { x: useX, y: useY } = readUseTranslate(context.es, element);\n const targetElement = context.idEls.get(targetId);\n const shouldApplyAnimation = hasDirectSMILAnimation(element)\n || (targetElement != null && hasDirectSMILAnimation(targetElement));\n\n warnUnsupportedAttributes(context.es, element, 'use', context.emit, context.strict, context.idEls);\n appendUseShapeLayer(element, context, {\n targetElement,\n shape,\n useX,\n useY,\n targetMatrix: targetElement == null ? IDENTITY : readElementTransform(targetElement),\n targetOpacity: targetElement == null ? 1 : readSVGOwnOpacity(targetElement),\n shouldApplyAnimation,\n targetStopNode: targetElement == null ? null : targetElement.node?.parentNode as globalThis.Element | null,\n preserveTargetAncestors: false,\n name: String(context.es.getAttr(element, 'id') ?? `use_${targetId}`),\n visible: buildUseLayerVisibility(context, element, targetElement),\n });\n}\n\nfunction convertGroupUse (\n element: Element,\n context: UseConversionContext,\n instances: GroupUseInstance[],\n targetId: string,\n): void {\n const { x: useX, y: useY } = readUseTranslate(context.es, element);\n const instanceName = String(context.es.getAttr(element, 'id') ?? `use_${targetId}`);\n const useHasAnimation = hasDirectSMILAnimation(element);\n\n warnUnsupportedAttributes(context.es, element, 'use', context.emit, context.strict, context.idEls);\n for (const instance of instances) {\n if (instance.kind === 'shape') {\n convertGroupShapeInstance(element, context, instance, instanceName, useX, useY, useHasAnimation);\n } else if (instance.kind === 'text') {\n convertGroupTextInstance(element, context, instance, instanceName, targetId, useX, useY);\n } else {\n convertGroupImageInstance(element, context, instance, instanceName, useX, useY, useHasAnimation);\n }\n }\n}\n\nfunction convertGroupShapeInstance (\n element: Element,\n context: UseConversionContext,\n instance: GroupUseInstance,\n instanceName: string,\n useX: number,\n useY: number,\n useHasAnimation: boolean,\n): void {\n if (instance.shape == null) { return; }\n const targetIsDirectShape = instance.source.node === instance.target.node;\n const targetHasAnimation = targetIsDirectShape\n && hasSMILAnimationInChain(instance.target, instance.ancestorStopNode);\n\n appendUseShapeLayer(element, context, {\n sourceElement: instance.source,\n targetElement: instance.target,\n shape: instance.shape,\n useX,\n useY,\n targetMatrix: instance.matrix,\n targetOpacity: instance.opacity,\n shouldApplyAnimation: targetIsDirectShape && (useHasAnimation || targetHasAnimation),\n targetStopNode: instance.ancestorStopNode,\n preserveTargetAncestors: true,\n name: `${instanceName}_${instance.name}`,\n visible: isVisibleOrAnimated(element, context.es)\n && (instance.visible || hasAnimatedVisibility(instance.target)),\n });\n}\n\nfunction isPureTranslation (matrix: SVGMatrix): boolean {\n return Math.abs(matrix.a - 1) < 1e-9\n && Math.abs(matrix.d - 1) < 1e-9\n && Math.abs(matrix.b) < 1e-9\n && Math.abs(matrix.c) < 1e-9;\n}\n\nfunction applyUseTranslationToText (\n transform: IRTransform | undefined,\n useMatrix: SVGMatrix,\n useOpacity: number,\n): void {\n if (transform == null || transform.position == null) { return; }\n if (transform.position.type === 'keyframed') {\n transform.position = {\n type: 'keyframed',\n keyframes: transform.position.keyframes.map(keyframe => ({\n ...keyframe,\n value: [keyframe.value[0] + useMatrix.e, keyframe.value[1] + useMatrix.f, keyframe.value[2]] as IRVec3,\n })),\n };\n } else {\n const position = transform.position.value;\n\n transform.position = { type: 'static', value: [position[0] + useMatrix.e, position[1] + useMatrix.f, 0] as IRVec3 };\n }\n if (useOpacity !== 1 && transform.opacity != null) {\n if (transform.opacity.type === 'keyframed') {\n transform.opacity = {\n type: 'keyframed',\n keyframes: transform.opacity.keyframes.map(keyframe => ({\n ...keyframe,\n value: keyframe.value * useOpacity,\n })),\n };\n } else {\n transform.opacity = { type: 'static', value: transform.opacity.value * useOpacity };\n }\n }\n}\n\nfunction convertGroupTextInstance (\n element: Element,\n context: UseConversionContext,\n instance: GroupUseInstance,\n instanceName: string,\n targetId: string,\n useX: number,\n useY: number,\n): void {\n const parsed = parseTextLayers(context.es, instance.target, context.measureText);\n\n if (parsed == null) { return; }\n const useMatrix = buildUseMatrix(element, useX, useY);\n\n if (!isPureTranslation(useMatrix)) {\n collectWarning(\n context.emit,\n SVG2IR_WARNING_CODES.ELEMENT_DROPPED,\n `<use href=\"#${targetId}\"> 引用 text 带非平移变换,仅展开文字,位置可能偏差。`,\n describeElement(element),\n context.strict,\n );\n }\n appendUseTextLayers(\n element,\n context,\n instance.target,\n parsed,\n useMatrix,\n readSVGElementOpacity(element),\n isVisibleOrAnimated(element, context.es)\n && (instance.visible || hasAnimatedVisibility(instance.target)),\n (index, split) => split\n ? `${instanceName}_${instance.name}__seg${index}`\n : `${instanceName}_${instance.name}`,\n );\n}\n\nfunction convertGroupImageInstance (\n element: Element,\n context: UseConversionContext,\n instance: GroupUseInstance,\n instanceName: string,\n useX: number,\n useY: number,\n useHasAnimation: boolean,\n): void {\n const parsed = parseImageLayer(context.es, instance.target, context.imageNaturalSizes, context.resourceBaseUrl);\n\n if (parsed == null) { return; }\n const targetHasAnimation = hasSMILAnimationInChain(instance.target, instance.ancestorStopNode);\n\n appendUseImageLayer(element, context, parsed, {\n targetElement: instance.target,\n useX,\n useY,\n targetMatrix: instance.matrix,\n targetOpacity: instance.opacity,\n shouldApplyAnimation: useHasAnimation || targetHasAnimation,\n targetStopNode: instance.ancestorStopNode,\n preserveTargetAncestors: true,\n name: `${instanceName}_${instance.name}`,\n visible: isVisibleOrAnimated(element, context.es)\n && (instance.visible || hasAnimatedVisibility(instance.target)),\n });\n}\n\nfunction tryConvertSymbolUse (element: Element, context: UseConversionContext, targetId: string): boolean {\n const symbolDef = context.idSymbols.get(targetId);\n const symbolShapes = symbolDef == null ? [] : context.symbolShapesById.get(targetId) ?? [];\n\n if (symbolDef == null || symbolShapes.length === 0) { return false; }\n const { x: useX, y: useY } = readUseTranslate(context.es, element);\n const symbolMatrix = buildSymbolViewportMatrix(context.es, element, symbolDef);\n const instanceName = String(context.es.getAttr(element, 'id') ?? `use_${targetId}`);\n const symbolStopNode = symbolDef.node.parentNode as globalThis.Element | null;\n const useHasAnimation = hasDirectSMILAnimation(element);\n\n warnUnsupportedAttributes(context.es, element, 'use', context.emit, context.strict, context.idEls);\n for (let symbolIndex = 0; symbolIndex < symbolShapes.length; symbolIndex++) {\n const { element: symbolShapeEl, shape: symbolShape } = symbolShapes[symbolIndex];\n const targetHasAnimation = hasSMILAnimationInChain(symbolShapeEl, symbolStopNode);\n const childName = String(context.es.getAttr(symbolShapeEl, 'id') ?? symbolShapeEl.node.tagName.toLowerCase());\n\n appendUseShapeLayer(element, context, {\n targetElement: symbolShapeEl,\n shape: symbolShape,\n useX,\n useY,\n targetMatrix: multiply(symbolMatrix, accumulateSymbolChildTransform(symbolShapeEl, symbolDef)),\n targetOpacity: readSymbolChildOpacity(symbolShapeEl, symbolDef),\n shouldApplyAnimation: useHasAnimation || targetHasAnimation,\n targetStopNode: symbolStopNode,\n preserveTargetAncestors: true,\n targetAncestorMatrix: symbolMatrix,\n name: `${instanceName}_${childName}_${symbolIndex}`,\n visible: isVisibleOrAnimated(element, context.es) && isVisibleOrAnimated(symbolShapeEl, context.es),\n });\n }\n\n return true;\n}\n\nfunction tryConvertTextUse (element: Element, context: UseConversionContext, targetId: string): boolean {\n const textDef = context.idTextEls.get(targetId);\n\n if (textDef == null) { return false; }\n const useFilterAttr = element.node?.getAttribute('filter') ?? '';\n const hasFilter = useFilterAttr !== '' && useFilterAttr !== 'none';\n\n if (hasFilter) {\n collectWarning(\n context.emit,\n SVG2IR_WARNING_CODES.FILTER_DROPPED,\n `元素 <use href=\"#${targetId}\"> 带 filter,GE 无元素级 filter,已丢弃 filter。`,\n describeElement(element),\n context.strict,\n );\n if (context.idTextPureUse.has(targetId)) { return true; }\n }\n const parsed = parseTextLayers(context.es, textDef, context.measureText);\n\n if (parsed == null) { return true; }\n const { x: useX, y: useY } = readUseTranslate(context.es, element);\n const useMatrix = buildUseMatrix(element, useX, useY);\n\n if (!isPureTranslation(useMatrix)) {\n collectWarning(\n context.emit,\n SVG2IR_WARNING_CODES.ELEMENT_DROPPED,\n `<use href=\"#${targetId}\"> 引用 text 带非平移变换,仅展开文字,位置可能偏差。`,\n describeElement(element),\n context.strict,\n );\n }\n const baseName = String(context.es.getAttr(element, 'id') ?? `use_${targetId}_text_${context.peekLayerIndex()}`);\n\n appendUseTextLayers(\n element,\n context,\n textDef,\n parsed,\n useMatrix,\n readSVGElementOpacity(element),\n isVisibleOrAnimated(element, context.es) && isVisibleOrAnimated(textDef, context.es),\n (index, split) => split ? `${baseName}__seg${index}` : baseName,\n );\n\n return true;\n}\n\nfunction tryConvertImageUse (element: Element, context: UseConversionContext, targetId: string): boolean {\n const imageDef = context.idImages.get(targetId);\n\n if (imageDef == null) { return false; }\n const parsed = parseImageLayer(context.es, imageDef, context.imageNaturalSizes, context.resourceBaseUrl);\n\n if (parsed == null) { return true; }\n const { x: useX, y: useY } = readUseTranslate(context.es, element);\n const shouldApplyAnimation = hasDirectSMILAnimation(element) || hasDirectSMILAnimation(imageDef);\n\n appendUseImageLayer(element, context, parsed, {\n targetElement: imageDef,\n useX,\n useY,\n targetMatrix: readElementTransform(imageDef),\n targetOpacity: readSVGOwnOpacity(imageDef),\n shouldApplyAnimation,\n targetStopNode: imageDef.node?.parentNode as globalThis.Element | null,\n preserveTargetAncestors: false,\n name: String(context.es.getAttr(element, 'id') ?? `use_${targetId}`),\n visible: buildUseLayerVisibility(context, element, imageDef),\n });\n\n return true;\n}\n\nfunction buildSymbolViewportMatrix (es: UseConversionContext['es'], useEl: Element, symbolEl: Element): SVGMatrix {\n const viewBox = (symbolEl.node.getAttribute('viewBox') ?? '').trim().split(/[\\s,]+/).map(Number);\n\n if (viewBox.length !== 4 || !viewBox.every(Number.isFinite) || viewBox[2] <= 0 || viewBox[3] <= 0) {\n return IDENTITY;\n }\n const width = readSVGNumberAttribute(es, useEl, 'width') ?? viewBox[2];\n const height = readSVGNumberAttribute(es, useEl, 'height') ?? viewBox[3];\n\n return buildViewBoxMatrix(symbolEl.node, { width, height }) ?? IDENTITY;\n}\n\nfunction accumulateSymbolChildTransform (childEl: Element, symbolEl: Element): SVGMatrix {\n let matrix = IDENTITY;\n let node: globalThis.Element | null = childEl.node;\n const symbolNode = symbolEl.node;\n\n while (node != null && node !== symbolNode) {\n const transform = readPresentationAttribute(node, 'transform');\n\n if (transform != null && transform !== '') { matrix = multiply(parseTransform(transform), matrix); }\n node = node.parentNode as globalThis.Element | null;\n }\n\n return matrix;\n}\n\nfunction readSymbolChildOpacity (childEl: Element, symbolEl: Element): number {\n let opacity = 1;\n let node: globalThis.Element | null = childEl.node;\n const symbolNode = symbolEl.node;\n\n while (node != null) {\n const raw = readPresentationAttribute(node, 'opacity');\n\n if (raw != null && raw !== '') {\n const value = Number(raw);\n\n if (Number.isFinite(value)) { opacity *= Math.max(0, Math.min(1, value)); }\n }\n if (node === symbolNode) { break; }\n node = node.parentNode as globalThis.Element | null;\n }\n\n return Math.max(0, Math.min(1, opacity));\n}\n","import type { Element } from '@svgdotjs/svg.js';\nimport { convertGroupElement } from './convert-group-element';\nimport { convertImageElement } from './convert-image-element';\nimport { convertShapeElement } from './convert-shape-element';\nimport { convertTextElement } from './convert-text-element';\nimport { convertUseElement } from './convert-use-element';\nimport {\n createLayerOutput,\n createSVGConversionEnvironment,\n createSVGElementLookup,\n type GroupConversionContext,\n type ImageConversionContext,\n type ShapeConversionContext,\n type SVGConversionSession,\n type TextConversionContext,\n type UseConversionContext,\n} from './conversion-session';\n\nexport type SVGElementConverter = (element: Element) => void;\n\nexport function createSVGElementConverterRegistry (session: SVGConversionSession): ReadonlyMap<string, SVGElementConverter> {\n const environment = createSVGConversionEnvironment(session);\n const lookup = createSVGElementLookup(session);\n const output = createLayerOutput(session);\n const shapeContext: ShapeConversionContext = {\n ...environment,\n idEls: lookup.idEls,\n allocateLayerIndex: output.allocateLayerIndex,\n appendLayer: output.appendLayer,\n paintAnimationsByLayerId: session.paintAnimationsByLayerId,\n shapeAnimationsByLayerId: session.shapeAnimationsByLayerId,\n };\n const textContext: TextConversionContext = {\n ...environment,\n idEls: lookup.idEls,\n measureText: session.measureText,\n textDataByLayerId: session.textDataByLayerId,\n allocateLayerIndex: output.allocateLayerIndex,\n peekLayerIndex: output.peekLayerIndex,\n appendLayer: output.appendLayer,\n registerTextFontAsset: output.registerTextFontAsset,\n };\n const imageContext: ImageConversionContext = {\n ...environment,\n idEls: lookup.idEls,\n imageNaturalSizes: session.imageNaturalSizes,\n resourceBaseUrl: session.resourceBaseUrl,\n allocateLayerIndex: output.allocateLayerIndex,\n appendLayer: output.appendLayer,\n appendAsset: output.appendAsset,\n };\n const useContext: UseConversionContext = {\n ...environment,\n ...lookup,\n measureText: session.measureText,\n allocateLayerIndex: output.allocateLayerIndex,\n peekLayerIndex: output.peekLayerIndex,\n appendLayer: output.appendLayer,\n registerTextFontAsset: output.registerTextFontAsset,\n imageNaturalSizes: session.imageNaturalSizes,\n resourceBaseUrl: session.resourceBaseUrl,\n appendAsset: output.appendAsset,\n textDataByLayerId: session.textDataByLayerId,\n };\n const groupContext: GroupConversionContext = {\n ...environment,\n idEls: lookup.idEls,\n groupMaskGNodeToIndex: session.groupMaskGNodeToIndex,\n allocateLayerIndex: output.allocateLayerIndex,\n appendLayer: output.appendLayer,\n };\n const registry = new Map<string, SVGElementConverter>();\n\n for (const tag of ['rect', 'circle', 'ellipse', 'path', 'polygon', 'polyline', 'line']) {\n registry.set(tag, element => convertShapeElement(element, shapeContext));\n }\n registry.set('image', element => convertImageElement(element, imageContext));\n registry.set('text', element => convertTextElement(element, textContext));\n registry.set('use', element => convertUseElement(element, useContext));\n registry.set('g', element => convertGroupElement(element, groupContext));\n registry.set('symbol', () => undefined);\n\n return registry;\n}\n","import type { IRAsset, IRLayer } from '@vvfx/animation-ir';\nimport type EditableSVG from '../../../parse-svg/svg-parser';\nimport { SVG2IR_WARNING_CODES } from '../../../common/types';\nimport { collectWarning, describeElement } from '../diagnostics/collect-warnings';\nimport { filterReplacesSource } from '../diagnostics/inspect-filter';\nimport { isMappedSMILAnimationElement } from '../smil/inspect-animation';\nimport { readUseTarget } from '../use/expand-use';\nimport {\n createSVGConversionSession,\n type SVGLayerBuildOptions,\n type SVGConversionSession,\n} from './conversion-session';\nimport { SVG_UNSUPPORTED_ELEMENT_TAGS } from './element-categories';\nimport { createSVGElementConverterRegistry } from './registry';\nimport { isInInactiveSwitchBranch } from '../switch-branch';\n\nexport type { SVGLayerBuildOptions } from './conversion-session';\n\nexport function buildSVGLayers (\n es: EditableSVG,\n options: SVGLayerBuildOptions,\n): { layers: IRLayer[]; assets: IRAsset[] } {\n const session: SVGConversionSession = createSVGConversionSession(es, options);\n const converters = createSVGElementConverterRegistry(session);\n\n for (const element of session.all) {\n const tag = element.node?.tagName?.toLowerCase() ?? '';\n const selector = describeElement(element);\n\n if (isInInactiveSwitchBranch(element)) { continue; }\n if (session.isDeclarationContext(element)) { continue; }\n if (tag === 'switch') { continue; }\n\n const useTargetIsText = tag === 'use' && session.idTextEls.has(readUseTarget(es, element) ?? '');\n const skipByFilterReplace = tag !== 'image'\n && !useTargetIsText\n && filterReplacesSource(es, element, session.rootEl);\n\n if (skipByFilterReplace) {\n collectWarning(\n session.emit,\n SVG2IR_WARNING_CODES.FILTER_DROPPED,\n `元素 <${tag}> 带 filter(投影/模糊/内阴影等),GE 无元素级 filter(仅文本 shadow),已跳过元素——该效果缺失产生预期视觉差异,属 GE 能力缺失(标 ge-capability;保留则会渲成 raw fill 盖背景)。`,\n selector,\n session.strict,\n );\n continue;\n }\n\n session.warnReferencedClipMaskFeatures(element);\n const converter = converters.get(tag);\n\n if (converter != null) {\n converter(element);\n continue;\n }\n if (SVG_UNSUPPORTED_ELEMENT_TAGS.has(tag) && !isMappedSMILAnimationElement(element, tag)) {\n collectWarning(\n session.emit,\n SVG2IR_WARNING_CODES.ELEMENT_DROPPED,\n `元素 <${tag}> 当前未映射到 GE,已跳过(use/filter/pattern 等待接入)。`,\n selector,\n session.strict,\n );\n }\n }\n\n return { layers: session.layers, assets: session.assets };\n}\n","/**\n * 只读 SVG 解析器。svg2ir 用它把 SVG 字符串解析成可查询/可读属性的 svg.js 文档树,\n * 再在其上做 SVG→IR 转换;不涉及任何 SVG 编辑/约束/布局能力。\n *\n * 提供的能力(对齐 svg2ir 实际消费的读切片):\n * - 构造:SVG 字符串 → svg.js 文档树;对每个 <text> 规整 dx/dy→x/y、补 fill 兜底\n * - getAttr:带 SVG 继承的属性读取(沿父 <g> 上溯,id/svg 根终止,font-size 数值化)\n * - stringify:序列化回 SVG 字符串(清临时属性 + 去 svg.js 内部标记)\n * - find/findOne/attr/node:透出 svg.js 原生查询与根节点\n *\n * 底层复用 @svgdotjs/svg.js。本模块只封装 svg2ir 依赖的读语义,不含处理容错的全部角落。\n */\nimport { SVG, type Svg as SVGDocument, type Element as SVGElementNode } from '@svgdotjs/svg.js';\nimport { readInlineStyleProperty } from './read-presentation-attribute';\n\nexport type { Svg as SVGDocument, Element as SVGElementNode } from '@svgdotjs/svg.js';\n\ninterface ParseableSVGOptions {\n /** SVG 解析器构造选项。 */\n [key: string]: unknown;\n}\n\n/**\n * 只读 SVG 解析器。读切片语义:\n * - 构造时对每个 <text> 规整:text 级 dx/dy 烘焙进 x/y(清掉 dx/dy);无 fill 时沿父继承/从首个 tspan 提/兜底 #000。\n * - getAttr 沿父链继承上溯(SVG CSS 式),id 与已到 svg 根终止,font-size 含 px 时数值化。\n * - stringify 用 svg.js 序列化,清临时属性 + 去 svgjs:data。\n */\nexport default class ParseableSVG {\n readonly svg: SVGDocument;\n\n constructor (svgStr: string, _options: ParseableSVGOptions = {}) {\n // 从字符串里抠出首个 <svg>...</svg> 再交给 svg.js(兼容前导注释/doctype)。\n // svg.js SVG(string) 的 d.ts 标为 Element,但对完整 <svg> 文档运行时返回根 SVG 文档实例。\n const content = typeof svgStr === 'string' ? svgStr.match(/<svg\\s+.*?>.*?<\\/svg>/s)?.[0] ?? svgStr : svgStr;\n\n // svg.js 对非 SVG 字符串(如 'not svg')解析返 null。兜底空 svg:让 svg2ir 上层\n // hasSVGRootElement 检查(非 svg 抛 INVALID_SVG)生效,而非在构造期抛错。\n this.svg = (SVG(content) ?? SVG('<svg xmlns=\"http://www.w3.org/2000/svg\"/>')) as unknown as SVGDocument;\n this.initTexts();\n }\n\n /**\n * 读属性,带 SVG 继承。元素自身无值时沿 parent() 上溯;id 与已到 svg 根终止返回 null;\n * font-size 含 px 时数值化为 number。propagation=false 时不上溯。\n */\n getAttr (element: SVGElementNode, attributeName: string, propagation = true): string | number | null {\n const node = (element as unknown as { node?: globalThis.Element | null }).node;\n const inlineAttr = readInlineStyleProperty(node?.getAttribute('style') ?? null, attributeName);\n const attr = inlineAttr ?? (element.attr() as Record<string, unknown>)[attributeName];\n\n if (typeof attr === 'string' && attr !== '') {\n const resolvedAttr = resolveCurrentColor(this, element, attributeName, attr);\n\n if (attributeName === 'font-size') {\n const num = parseFloat(resolvedAttr.replace('px', ''));\n\n if (!Number.isNaN(num)) {\n return num;\n }\n }\n\n return resolvedAttr;\n }\n\n if (typeof attr === 'number') {\n return attr;\n }\n if (attributeName === 'id') {\n return null;\n }\n if (element.type === 'svg') {\n return null;\n }\n\n if (!propagation) {\n return null;\n }\n const parent = element.parent();\n\n if (parent != null) {\n return this.getAttr(parent as SVGElementNode, attributeName);\n }\n\n return null;\n }\n\n /**\n * 构造时对每个 <text> 规整属性。\n * - text 级 dx/dy 烘焙进 x/y,并移除 dx/dy\n * - text 自身无 fill 时沿父继承/从首个 tspan 提/兜底 #000\n * svg2ir 解析依赖这段规整,故无条件执行。\n */\n private initTexts (): void {\n const normalizeTextAttrs = (text: SVGElementNode): void => {\n const x = this.getNumAttr(text, 'x') ?? 0;\n const dx = this.getNumAttr(text, 'dx') ?? 0;\n const y = this.getNumAttr(text, 'y') ?? 0;\n const dy = this.getNumAttr(text, 'dy') ?? 0;\n\n if (x !== 0 || dx !== 0) {\n text.attr({ x: x + dx, dx: null });\n }\n if (y !== 0 || dy !== 0) {\n text.attr({ y: y + dy, dy: null });\n }\n const fill = this.getAttr(text, 'fill');\n\n if (!(text.node as Element).hasAttribute('fill')) {\n if (fill != null && fill !== '' && fill !== 'none') {\n text.attr('fill', fill);\n } else {\n const tspanList = text.find('tspan') ?? [];\n\n if (tspanList.every(tspan => (tspan.node as Element).hasAttribute('fill'))) {\n const firstTspan = tspanList[0];\n\n if (firstTspan != null) {\n text.attr('fill', this.getAttr(firstTspan, 'fill'));\n }\n } else {\n text.attr('fill', '#000');\n }\n }\n }\n };\n\n try {\n const textList = this.svg.find('text') ?? [];\n\n for (const text of textList) {\n normalizeTextAttrs(text);\n }\n } catch {\n // 文本属性规整失败时保留原文档。\n }\n }\n\n /** 读数值属性(string 去 px 转 number,非数/空返 0)。 */\n private getNumAttr (element: SVGElementNode, attrName: string): number {\n const value = element.attr(attrName) as unknown;\n\n if (typeof value === 'string') {\n const num = Number(value.replace('px', ''));\n\n if (Number.isNaN(num)) {\n return 0;\n }\n\n return num;\n }\n\n return (value as number) || 0;\n }\n\n /** 序列化回 SVG 字符串:清 data-tmp- 临时属性 + 去 svg.js 内部 svgjs:data 标记。 */\n stringify (): string {\n this.svg.attr('xml:space', 'default');\n const svgStr = this.svg.svg((el: SVGElementNode) => {\n const attrs = el.attr() as Record<string, unknown>;\n\n for (const key in attrs) {\n if (key.startsWith('data-tmp-')) {\n el.attr(key, null);\n }\n }\n });\n\n return svgStr.replace(/svgjs:data=\".*?\"/g, '');\n }\n}\n\n/** SVG parser 的包内类型别名,运行时与类型均指向 ParseableSVG。 */\nexport { ParseableSVG as EditableSVG };\n\nfunction resolveCurrentColor (\n parser: ParseableSVG,\n element: SVGElementNode,\n attributeName: string,\n value: string,\n): string {\n if (value.trim().toLowerCase() !== 'currentcolor') { return value; }\n if (attributeName === 'color') { return 'black'; }\n const color = parser.getAttr(element, 'color');\n\n return typeof color === 'string' && color.trim() !== '' ? color : 'black';\n}\n","import * as editableSVGModule from './svg-parser';\nimport type EditableSVG from './svg-parser';\n\nexport type EditableSVGConstructor = typeof EditableSVG;\n\ntype UnknownRecord = Record<string, unknown>;\n\nfunction isRecord (value: unknown): value is UnknownRecord {\n return value != null && typeof value === 'object';\n}\n\n/**\n * 将浏览器 ESM/CJS 互操作和 Node CJS 入口统一为同一个构造器。\n * parser 只依赖这个边界,不依赖具体模块系统的默认导出形式。\n */\nexport function resolveEditableSVGConstructor (moduleValue: unknown): EditableSVGConstructor {\n let candidate: unknown = moduleValue;\n\n for (let depth = 0; depth < 3; depth++) {\n if (typeof candidate === 'function') {\n return candidate as EditableSVGConstructor;\n }\n\n if (!isRecord(candidate) || !('default' in candidate)) {\n break;\n }\n\n candidate = candidate.default;\n }\n\n throw new TypeError('EditableSVG module does not expose a constructor.');\n}\n\nlet editableSVGConstructor = resolveEditableSVGConstructor(editableSVGModule);\n\n/** 配置 Node 发行入口使用的构造器。 */\nexport function setEditableSVGConstructor (constructor: EditableSVGConstructor): void {\n editableSVGConstructor = constructor;\n}\n\nexport function createEditableSVG (...args: ConstructorParameters<EditableSVGConstructor>): EditableSVG {\n return new editableSVGConstructor(...args);\n}\n","import type EditableSVG from '../parse-svg/svg-parser';\nimport {\n ANIMATION_IR_SCHEMA_VERSION, type IRAsset, type IRComposition, type IRLayer, type IRScene,\n} from '@vvfx/animation-ir';\nimport { SVGConverterError, SVG_CONVERTER_ERROR_CODES, normalizeToConverterError } from '../common/errors';\nimport type { ConvertOptions, SVG2IRWarning } from '../common/types';\nimport type { SVGPreservedPaintAnimation, SVGPreservedShapeAnimation, SVGPreservedTextData } from '../svg-preserved-data';\nimport { mapSVGColorToIRColor } from './map-color';\nimport { getSMILDuration } from './converter/smil/scan-duration';\nimport { buildSVGLayers, type SVGLayerBuildOptions } from './converter/layers/build-layers';\nimport { createEditableSVG } from '../parse-svg/bridge';\n\nexport interface ParseSVGToIROptions extends ConvertOptions {\n textDataCollector?: Map<string, SVGPreservedTextData>;\n paintAnimationsCollector?: Map<string, SVGPreservedPaintAnimation[]>;\n shapeAnimationCollector?: Map<string, SVGPreservedShapeAnimation>;\n}\n\nexport function parseSVGToIRScene (svgString: string, options?: ParseSVGToIROptions): IRScene {\n const frameRate = options?.frameRate ?? 30;\n const staticDurationSeconds = options?.durationSeconds ?? 5;\n const strict = options?.strict ?? false;\n // 未提供 onWarning 时,warning 不向外转发。\n const emit: (w: SVG2IRWarning) => void = options?.onWarning ?? (() => {});\n\n if (svgString.trim() === '') {\n throw new SVGConverterError(SVG_CONVERTER_ERROR_CODES.INVALID_SVG, '输入是空 SVG 字符串。');\n }\n\n let es: EditableSVG;\n\n try {\n const { svg: maskedInput, animations: maskedTextAnimations } = maskTextSMILChildrenForEditableSVG(svgString);\n\n es = createEditableSVG(maskedInput, {});\n restoreTextSMILChildren(es, maskedTextAnimations);\n\n if (!hasSVGRootElement(svgString) || es.svg.node?.tagName?.toLowerCase() !== 'svg') {\n throw new SVGConverterError(SVG_CONVERTER_ERROR_CODES.INVALID_SVG, '输入不是 SVG 文档。');\n }\n } catch (error) {\n throw normalizeToConverterError(\n error,\n SVG_CONVERTER_ERROR_CODES.PARSE_FAIL,\n 'SVG 解析底座初始化失败。',\n { stage: 'parse' },\n );\n }\n\n const viewport = readViewport(es);\n const textDataByLayerId = options?.textDataCollector;\n const paintAnimationsByLayerId = options?.paintAnimationsCollector;\n // 动态 SVG 的有效时长取 SMIL active interval 和显式时长中的较大值;无动画时使用静态时长。\n const scannedSmilDuration = getSMILDuration(es.svg);\n const effectiveDuration = scannedSmilDuration > 0\n ? Math.max(scannedSmilDuration, options?.durationSeconds ?? 0)\n : staticDurationSeconds;\n const smilDurationSink = { value: scannedSmilDuration };\n const layerBuildOptions: SVGLayerBuildOptions = {\n frameRate,\n durationSeconds: effectiveDuration,\n emit,\n strict,\n width: viewport.width,\n height: viewport.height,\n textDataByLayerId,\n measureText: options?.measureText,\n imageNaturalSizes: options?.imageNaturalSizes,\n resourceBaseUrl: options?.resourceBaseUrl,\n smilDurationSink,\n paintAnimationsByLayerId,\n shapeAnimationsByLayerId: options?.shapeAnimationCollector,\n };\n const { layers, assets } = buildSVGLayers(es, layerBuildOptions);\n const backgroundColor = options?.backgroundColor == null\n ? undefined\n : mapSVGColorToIRColor(options.backgroundColor);\n\n return buildIRScene({\n name: typeof es.svg.attr('id') === 'string' ? String(es.svg.attr('id')) : 'svg2ir',\n width: viewport.width,\n height: viewport.height,\n frameRate,\n durationSeconds: effectiveDuration,\n backgroundColor,\n layers,\n assets,\n });\n}\n\n/** 包装单 composition 为 IRScene(source-neutral 顶层格式)。 */\nfunction buildIRScene (input: {\n name: string;\n width: number;\n height: number;\n frameRate: number;\n durationSeconds: number;\n backgroundColor?: ReturnType<typeof mapSVGColorToIRColor>;\n layers: IRLayer[];\n assets: IRAsset[];\n}): IRScene {\n const composition = buildIRComposition(input);\n\n return {\n format: 'animation-ir',\n schemaVersion: ANIMATION_IR_SCHEMA_VERSION,\n entryCompositionId: composition.id,\n compositions: [composition],\n assets: input.assets,\n };\n}\n\nfunction hasSVGRootElement (svgString: string): boolean {\n const withoutProlog = svgString\n .replace(/^\\uFEFF/, '')\n .replace(/^\\s*<\\?xml\\b[\\s\\S]*?\\?>\\s*/i, '')\n .replace(/^\\s*<!DOCTYPE\\b[\\s\\S]*?>\\s*/i, '')\n .replace(/^\\s*<!--(?:[\\s\\S]*?)-->\\s*/i, '');\n\n return /^\\s*<svg(?:\\s|\\/?>)/i.test(withoutProlog);\n}\n\nconst TEXT_SMIL_PLACEHOLDER_TAG = 'metadata';\nconst TEXT_SMIL_PLACEHOLDER_ATTRIBUTE = 'data-svg2ir-text-smil-index';\n\n/**\n * svg.js 文本节点不接受原生 SMIL 子节点。解析前用 metadata 占位符替换文本动画,\n * 构造 EditableSVG 后再恢复动画节点。\n */\nfunction maskTextSMILChildrenForEditableSVG (svgString: string): { svg: string; animations: string[] } {\n const animations: string[] = [];\n const svg = svgString.replace(/<text\\b[\\s\\S]*?<\\/text\\s*>/gi, textBlock => (\n textBlock.replace(\n /<(animateTransform|animateMotion|animate|set)\\b[^>]*(?:\\/>|>[\\s\\S]*?<\\/\\1\\s*>)/gi,\n animationXml => {\n const index = animations.push(animationXml) - 1;\n\n return `<${TEXT_SMIL_PLACEHOLDER_TAG} ${TEXT_SMIL_PLACEHOLDER_ATTRIBUTE}=\"${index}\"/>`;\n },\n )\n ));\n\n return { svg, animations };\n}\n\nfunction restoreTextSMILChildren (es: EditableSVG, animations: string[]): void {\n const root = (es.svg as unknown as { node?: globalThis.Element }).node;\n\n if (root == null) { return; }\n const placeholders = Array.from(root.querySelectorAll(`[${TEXT_SMIL_PLACEHOLDER_ATTRIBUTE}]`));\n\n for (const placeholder of placeholders) {\n const index = Number(placeholder.getAttribute(TEXT_SMIL_PLACEHOLDER_ATTRIBUTE));\n const animationXml = animations[index];\n\n if (!Number.isInteger(index) || animationXml == null) { continue; }\n const restored = parseSVGAnimationFragment(placeholder.ownerDocument, animationXml);\n\n if (restored != null) { placeholder.parentNode?.replaceChild(restored, placeholder); }\n }\n}\n\nfunction parseSVGAnimationFragment (document: globalThis.Document, animationXml: string): globalThis.Element | null {\n if (typeof globalThis.DOMParser === 'function') {\n const parsed = new globalThis.DOMParser().parseFromString(\n `<svg xmlns=\"http://www.w3.org/2000/svg\">${animationXml}</svg>`,\n 'image/svg+xml',\n );\n const parsedAnimation = parsed.documentElement.firstElementChild;\n\n if (parsedAnimation == null || parsedAnimation.tagName.toLowerCase() === 'parsererror') { return null; }\n\n return document.importNode(parsedAnimation, true);\n }\n\n // 没有 DOMParser 时,使用当前 document 创建 SVG 元素并保留 SMIL 属性名。\n const opening = animationXml.match(/^<([\\w:.-]+)\\b([^>]*)\\/?\\s*>/s);\n\n if (opening == null) { return null; }\n const restored = document.createElementNS('http://www.w3.org/2000/svg', opening[1]);\n const attributes = opening[2];\n const attributePattern = /([\\w:.-]+)\\s*=\\s*(?:\"([^\"]*)\"|'([^']*)')/g;\n let match: RegExpExecArray | null;\n\n while ((match = attributePattern.exec(attributes)) != null) {\n const name = match[1];\n const value = match[2] ?? match[3] ?? '';\n const namespace = name.startsWith('xlink:')\n ? 'http://www.w3.org/1999/xlink'\n : name.startsWith('xml:')\n ? 'http://www.w3.org/XML/1998/namespace'\n : null;\n\n restored.setAttributeNS(namespace, name, value);\n }\n\n return restored;\n}\n\n/** 读取 SVG 固有 viewport,百分比尺寸优先回退到 viewBox。 */\nfunction readViewport (es: EditableSVG): { width: number; height: number } {\n // 百分比尺寸取决于宿主 viewport,并不是具体像素。独立转换时若有 viewBox,\n // 以它的宽高作为 SVG 固有比较/输出尺寸;否则使用默认画布。\n const parseConcreteLength = (value: unknown): number | undefined => {\n const match = String(value ?? '').trim().match(/^([-+]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[-+]?\\d+)?)(?:px)?$/i);\n const parsed = match == null ? NaN : Number(match[1]);\n\n return Number.isFinite(parsed) && parsed > 0 ? parsed : undefined;\n };\n const node = (es.svg as unknown as { node?: globalThis.Element }).node;\n const viewBox = String(node?.getAttribute('viewBox') ?? es.svg.attr('viewBox') ?? '')\n .trim()\n .split(/[\\s,]+/)\n .map(Number);\n const viewBoxWidth = Number.isFinite(viewBox[2]) && viewBox[2] > 0 ? viewBox[2] : undefined;\n const viewBoxHeight = Number.isFinite(viewBox[3]) && viewBox[3] > 0 ? viewBox[3] : undefined;\n const w = parseConcreteLength(es.svg.attr('width')) ?? viewBoxWidth ?? 1080;\n const h = parseConcreteLength(es.svg.attr('height')) ?? viewBoxHeight ?? 1920;\n\n return { width: w, height: h };\n}\n\n/** 构造单个 IR composition。 */\nfunction buildIRComposition (input: {\n name: string;\n width: number;\n height: number;\n frameRate: number;\n durationSeconds: number;\n backgroundColor?: ReturnType<typeof mapSVGColorToIRColor>;\n layers: IRLayer[];\n}): IRComposition {\n return {\n id: input.name,\n name: input.name,\n width: input.width,\n height: input.height,\n frameRate: input.frameRate,\n inPoint: 0,\n outPoint: input.durationSeconds * input.frameRate,\n endBehavior: 'freeze',\n ...(input.backgroundColor != null && { backgroundColor: input.backgroundColor }),\n layers: input.layers,\n };\n}\n","import { validateIRScene } from '@vvfx/animation-ir';\nimport { SVGConverterError, SVG_CONVERTER_ERROR_CODES, normalizeToConverterError } from '../common/errors';\nimport type { ConvertOptions, ConvertResult, SVG2IRWarning, SVGSource } from '../common/types';\nimport { parseSVGToIRScene } from './';\nimport type { SVGPreservedData, SVGPreservedPaintAnimation, SVGPreservedShapeAnimation, SVGPreservedTextData } from '../svg-preserved-data';\n\ninterface SVGPreservedDataCollectors {\n textDataByLayerId: Map<string, SVGPreservedTextData>;\n paintAnimationsByLayerId: Map<string, SVGPreservedPaintAnimation[]>;\n shapeAnimationsByLayerId: Map<string, SVGPreservedShapeAnimation>;\n}\n\n/**\n * 把 SVG 转为 Animation IR。Effects lowering 由 `convertSVGToGE` 负责。\n *\n * 该函数是 SVG→IR 的底层入口,供 Effects 转换器和 IR 测试复用。\n */\nexport function convertSVGToIR (source: SVGSource, options?: ConvertOptions): ConvertResult {\n return parseSVGToIRWithPreservedData(source, options);\n}\n\nexport type SplitSVGOptions = ConvertOptions;\n\nexport interface SplitSVGResult extends ConvertResult {\n preservedData: SVGPreservedData;\n}\n\n/** Convert SVG to IR and retain the GE-side data needed for source-specific lowering. */\nexport function splitSVG (source: SVGSource, options?: SplitSVGOptions): SplitSVGResult {\n const textDataByLayerId = new Map<string, SVGPreservedTextData>();\n const paintAnimationsByLayerId = new Map<string, SVGPreservedPaintAnimation[]>();\n const shapeAnimationsByLayerId = new Map<string, SVGPreservedShapeAnimation>();\n const result = parseSVGToIRWithPreservedData(source, options, {\n textDataByLayerId,\n paintAnimationsByLayerId,\n shapeAnimationsByLayerId,\n });\n\n return {\n ...result,\n preservedData: {\n textDataByLayerId,\n paintAnimationsByLayerId,\n shapeAnimationsByLayerId,\n },\n };\n}\n\nexport function parseSVGToIRWithPreservedData (\n source: SVGSource,\n options?: ConvertOptions,\n collectors?: SVGPreservedDataCollectors,\n): ConvertResult {\n const warnings: SVG2IRWarning[] = [];\n const emitWarning = (warning: SVG2IRWarning): void => {\n warnings.push(warning);\n options?.onWarning?.(warning);\n };\n const svgString = readSVGString(source);\n\n const irScene = parseSVGToIRScene(svgString, {\n ...options,\n onWarning: emitWarning,\n textDataCollector: collectors?.textDataByLayerId,\n paintAnimationsCollector: collectors?.paintAnimationsByLayerId,\n shapeAnimationCollector: collectors?.shapeAnimationsByLayerId,\n });\n\n try {\n validateIRScene(irScene);\n } catch (error) {\n throw normalizeToConverterError(\n error,\n SVG_CONVERTER_ERROR_CODES.IR_VALIDATION_FAILED,\n 'Animation IR 校验失败。',\n { stage: 'ir' },\n );\n }\n\n return { ir: irScene, warnings };\n}\n\n/** 校验并返回 SVG 字符串。当前公共 API 只接受字符串输入。 */\nfunction readSVGString (source: SVGSource): string {\n if (typeof source !== 'string') {\n throw new SVGConverterError(SVG_CONVERTER_ERROR_CODES.INVALID_SVG, '输入必须是 SVG 字符串。');\n }\n\n return source;\n}\n","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n if (info.done) resolve(value);\n else Promise.resolve(value).then(_next, _throw);\n}\nfunction _async_to_generator(fn) {\n return function() {\n var self = this, args = arguments;\n\n return new Promise(function(resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}\nexport { _async_to_generator as _ };\n","function _ts_generator(thisArg, body) {\n var f, y, t, _ = { label: 0, sent: function () { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype), d = Object.defineProperty;\n return d(g, \"next\", { value: verb(0) }), d(g, \"throw\", { value: verb(1) }), d(g, \"return\", { value: verb(2) }), typeof Symbol === \"function\" && d(g, Symbol.iterator, { value: function () { return this; } }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport { _ts_generator as _ };\n","import type { IRLayer } from '@vvfx/animation-ir';\nimport { SVGConverterError, SVG_CONVERTER_ERROR_CODES } from '../../../common/errors';\nimport {\n SVG2IR_WARNING_CODES, type ConvertOptions, type SVG2IRWarning, type SVG2IRWarningCode,\n} from '../../../common/types';\n\nexport class LayerConversionError extends Error {\n constructor(public readonly code: SVG2IRWarningCode, message: string) {\n super(message);\n this.name = 'LayerConversionError';\n }\n}\n\nexport function throwUnsupportedLayerFeature(message: string): never {\n throw new LayerConversionError(SVG2IR_WARNING_CODES.LAYERS_UNSUPPORTED_FEATURE, message);\n}\n\nexport function throwInvalidLayerData(message: string): never {\n throw new LayerConversionError(SVG2IR_WARNING_CODES.LAYERS_INVALID_DATA, message);\n}\n\nexport function collectLayerWarning(\n warnings: SVG2IRWarning[],\n options: ConvertOptions,\n code: SVG2IRWarningCode,\n message: string,\n selector?: string,\n): void {\n const warning: SVG2IRWarning = {\n code, message: `[svg2ge:layers] ${message}`,\n ...(selector != null && { elementSelector: selector }),\n };\n\n warnings.push(warning);\n options.onWarning?.(warning);\n if (options.strict === true && code !== SVG2IR_WARNING_CODES.LAYERS_TEXT_BOUNDS_ESTIMATED) {\n throw new SVGConverterError(SVG_CONVERTER_ERROR_CODES.LAYERS_CONVERSION_FAILED, warning.message, {\n stage: 'layers', sourceId: selector, warningCode: code,\n });\n }\n}\n\nexport function collectUnsupportedIRLayer(\n layer: IRLayer,\n selector: string,\n warnings: SVG2IRWarning[],\n options: ConvertOptions,\n): void {\n collectLayerWarning(warnings, options, SVG2IR_WARNING_CODES.LAYERS_UNSUPPORTED_TYPE,\n `Unsupported content type: ${layer.type}.`, selector);\n}\n","import type { SVGLayerBBox } from './types';\nimport { throwInvalidLayerData } from './converter/diagnostics/collect-warnings';\n\nexport interface LayerMatrix {\n a: number; b: number; c: number;\n d: number; e: number; f: number;\n}\nexport type LayerPoint = [number, number];\n\nexport const IDENTITY_MATRIX: LayerMatrix = { a: 1, b: 0, c: 0, d: 1, e: 0, f: 0 };\n\nexport function multiplyMatrices(parent: LayerMatrix, local: LayerMatrix): LayerMatrix {\n return {\n a: parent.a * local.a + parent.c * local.b,\n b: parent.b * local.a + parent.d * local.b,\n c: parent.a * local.c + parent.c * local.d,\n d: parent.b * local.c + parent.d * local.d,\n e: parent.a * local.e + parent.c * local.f + parent.e,\n f: parent.b * local.e + parent.d * local.f + parent.f,\n };\n}\n\nexport function transformPoint(matrix: LayerMatrix, x: number, y: number): LayerPoint {\n return [matrix.a * x + matrix.c * y + matrix.e, matrix.b * x + matrix.d * y + matrix.f];\n}\n\nexport function transformBoxCorners(matrix: LayerMatrix, box: SVGLayerBBox): LayerPoint[] {\n return [\n transformPoint(matrix, box[0], box[1]), transformPoint(matrix, box[2], box[1]),\n transformPoint(matrix, box[2], box[3]), transformPoint(matrix, box[0], box[3]),\n ];\n}\n\nexport function mapPointsToBBox(points: readonly LayerPoint[]): SVGLayerBBox {\n return [\n roundPixel(Math.min(...points.map(point => point[0]))), roundPixel(Math.min(...points.map(point => point[1]))),\n roundPixel(Math.max(...points.map(point => point[0]))), roundPixel(Math.max(...points.map(point => point[1]))),\n ];\n}\n\nexport function roundPixel(value: number): number {\n if (!Number.isFinite(value)) { throwInvalidLayerData('Non-finite pixel geometry.'); }\n const result = Math.round(value * 100) / 100;\n\n return Object.is(result, -0) ? 0 : result;\n}\n","import type { IRAnimatedProperty, IRLayer, IRPropertyValue, IRVec3 } from '@vvfx/animation-ir';\nimport { throwInvalidLayerData, throwUnsupportedLayerFeature } from '../diagnostics/collect-warnings';\nimport { IDENTITY_MATRIX, multiplyMatrices, type LayerMatrix } from '../../matrix';\n\nexport interface StaticLayerState { matrix: LayerMatrix; opacity: number; visible: boolean }\n\nfunction readStaticValue<T extends IRPropertyValue>(property: IRAnimatedProperty<T> | undefined, fallback: T): T {\n if (property == null) { return fallback; }\n if (property.type === 'static') { return property.value; }\n if (property.keyframes.length === 1) { return property.keyframes[0].value; }\n\n return throwUnsupportedLayerFeature('Animated properties are not sampled by static layers output.');\n}\n\nexport function buildIRStaticStateResolver(\n layers: ReadonlyMap<string, IRLayer>,\n inPoint: number,\n): (layer: IRLayer) => StaticLayerState {\n const resolving = new Set<string>();\n const matrices = new Map<string, LayerMatrix>();\n const resolveMatrix = (layer: IRLayer): LayerMatrix => {\n const cached = matrices.get(layer.id);\n\n if (cached != null) { return cached; }\n if (resolving.has(layer.id)) { throwInvalidLayerData('Cyclic IR parent reference.'); }\n resolving.add(layer.id);\n try {\n const transform = layer.transform;\n const position = readStaticValue<IRVec3>(transform?.position, [0, 0, 0]);\n const anchor = transform?.anchor?.value ?? [0, 0, 0];\n const scale = readStaticValue<IRVec3>(transform?.scale, [1, 1, 1]);\n const x = readStaticValue(transform?.rotation?.x, 0);\n const y = readStaticValue(transform?.rotation?.y, 0);\n const z = readStaticValue(transform?.rotation?.z, 0);\n\n if (position[2] !== 0 || anchor[2] !== 0 || x !== 0 || y !== 0) {\n throwUnsupportedLayerFeature('3D transforms cannot be expressed by flat pixel layers.');\n }\n const angle = z * Math.PI / 180;\n const local: LayerMatrix = {\n a: Math.cos(angle) * scale[0], b: Math.sin(angle) * scale[0],\n c: -Math.sin(angle) * scale[1], d: Math.cos(angle) * scale[1],\n e: position[0], f: position[1],\n };\n\n local.e -= local.a * anchor[0] + local.c * anchor[1];\n local.f -= local.b * anchor[0] + local.d * anchor[1];\n const parent = layer.parentId == null ? undefined : layers.get(layer.parentId);\n\n if (layer.parentId != null && parent == null) { throwInvalidLayerData('Missing IR parent layer.'); }\n const matrix = multiplyMatrices(parent == null ? IDENTITY_MATRIX : resolveMatrix(parent), local);\n\n matrices.set(layer.id, matrix);\n\n return matrix;\n } finally {\n resolving.delete(layer.id);\n }\n };\n\n return layer => {\n if (layer.time.inFrame !== inPoint) {\n throwUnsupportedLayerFeature('Delayed activation is not sampled by static layers output.');\n }\n\n // IR parentId 仅继承变换,显隐和透明度由图层自身定义。\n return {\n matrix: resolveMatrix(layer), opacity: readStaticValue(layer.transform?.opacity, 1), visible: layer.visible,\n };\n };\n}\n","import type { IRAsset, IRComposition, IRLayer, IRScene } from '@vvfx/animation-ir';\nimport { getIRSceneEntryComposition } from '@vvfx/animation-ir/adapter';\nimport type { ConvertOptions, SVG2IRWarning } from '../../../common/types';\nimport type { SVGPreservedData } from '../../../svg-preserved-data';\nimport { buildIRStaticStateResolver, type StaticLayerState } from '../transform/build-transform';\n\nexport interface LayerConversionSession {\n readonly composition: IRComposition;\n readonly assets: ReadonlyMap<string, IRAsset>;\n readonly maskSourceIds: ReadonlySet<string>;\n readonly preservedData: SVGPreservedData | undefined;\n readonly resolveLayerState: (layer: IRLayer) => StaticLayerState;\n readonly options: ConvertOptions;\n readonly warnings: SVG2IRWarning[];\n}\n\nexport function buildLayerConversionSession(\n scene: IRScene,\n options: ConvertOptions,\n warnings: SVG2IRWarning[],\n preservedData?: SVGPreservedData,\n): LayerConversionSession {\n const composition = getIRSceneEntryComposition(scene);\n const layers = new Map(composition.layers.map(layer => [layer.id, layer]));\n const maskSourceIds = new Set(composition.layers.flatMap(layer =>\n layer.matte == null ? [] : [layer.matte.sourceLayerId],\n ));\n\n return {\n composition, assets: new Map(scene.assets.map(asset => [asset.id, asset])), maskSourceIds,\n preservedData, resolveLayerState: buildIRStaticStateResolver(layers, composition.inPoint), options, warnings,\n };\n}\n","import type { IRImageLayer } from '@vvfx/animation-ir';\nimport { throwInvalidLayerData, throwUnsupportedLayerFeature } from '../diagnostics/collect-warnings';\nimport { mapPointsToBBox, roundPixel, transformBoxCorners } from '../../matrix';\nimport type { StaticLayerState } from '../transform/build-transform';\nimport type { SVGImageLayer } from '../../types';\nimport type { LayerConversionSession } from '../layers/conversion-session';\n\nexport function convertIRImageLayer(\n layer: IRImageLayer,\n state: StaticLayerState,\n session: LayerConversionSession,\n id: string,\n): SVGImageLayer {\n const matrix = state.matrix;\n const scaleX = Math.hypot(matrix.a, matrix.b);\n const scaleY = Math.hypot(matrix.c, matrix.d);\n\n if (scaleX === 0 || scaleY === 0) { throwInvalidLayerData('Degenerate image transform.'); }\n const a = matrix.a / scaleX;\n const b = matrix.b / scaleX;\n const c = matrix.c / scaleY;\n const d = matrix.d / scaleY;\n\n if (a * d - b * c <= 0 || Math.abs(a * c + b * d) > 1e-6) {\n throwUnsupportedLayerFeature('Image skew or reflection cannot be expressed by size + rotation.');\n }\n const asset = session.assets.get(layer.content.assetId);\n\n if (asset?.type !== 'image') { throwInvalidLayerData('Missing image resource.'); }\n const source = asset.source;\n const url = source.kind === 'url' ? source.url : `data:${source.mimeType};base64,${source.data}`;\n const { x, y, width, height } = layer.localBounds;\n\n if (width <= 0 || height <= 0) { throwInvalidLayerData('Invalid image display size.'); }\n const bbox = mapPointsToBBox(transformBoxCorners(matrix, [x, y, x + width, y + height]));\n\n return {\n id, type: 'image', role: 'content', bbox, url,\n size: [roundPixel(width * scaleX), roundPixel(height * scaleY)],\n rotation: [0, 0, roundPixel(Math.atan2(b, a) * 180 / Math.PI)],\n width: roundPixel(bbox[2] - bbox[0]), height: roundPixel(bbox[3] - bbox[1]),\n };\n}\n","import type { IRColor, IRFontAsset, IRTextLayer } from '@vvfx/animation-ir';\nimport type { SVGPreservedTextData, SVGPreservedTextSpan } from '../../../svg-preserved-data';\nimport { mapSVGColorToIRColor } from '../../../svg2ir/map-color';\nimport { throwInvalidLayerData } from '../diagnostics/collect-warnings';\n\nexport interface TextRun {\n text: string; fontSize: number; color: string; alpha: number;\n bold: boolean; italic: boolean;\n}\n\nexport function parseTextRuns(layer: IRTextLayer, font: IRFontAsset, preserved?: SVGPreservedTextData): TextRun[] {\n const mapped = mapTextColor(layer.content.color);\n const base: TextRun = {\n text: layer.content.text, fontSize: layer.content.fontSize, color: mapped.hex, alpha: mapped.alpha,\n bold: font.weight === 700, italic: font.style === 'italic' || font.style === 'oblique',\n };\n\n if (preserved == null || preserved.spans.length === 0) { return [base]; }\n const defaultColor = `${mapped.hex.toLowerCase()}${Math.round(Math.max(0, Math.min(1, mapped.alpha)) * 255)\n .toString(16).padStart(2, '0')}`;\n const spans: SVGPreservedTextSpan[] = [];\n const styleKey = (span: SVGPreservedTextSpan): string =>\n `${span.fontSize ?? ''}|${span.color ?? defaultColor}|${span.bold === true}|${span.italic === true}`;\n\n for (const span of preserved.spans) {\n const previous = spans[spans.length - 1];\n\n if (previous != null && !span.newLine && styleKey(previous) === styleKey(span)) {\n previous.text += span.text;\n } else {\n spans.push({ ...span });\n }\n }\n\n return spans.filter(span => span.text !== '' || span.newLine).map(span => {\n const fontSize = span.fontSize == null || span.fontSize === '' ? base.fontSize : Number.parseInt(span.fontSize, 10);\n\n if (!Number.isFinite(fontSize) || fontSize <= 0) { throwInvalidLayerData('Invalid text fragment font size.'); }\n const color = span.color == null || span.color === '' ? layer.content.color : mapSVGColorToIRColor(span.color);\n\n if (color == null) { throwInvalidLayerData('Invalid text fragment color.'); }\n const resolved = mapTextColor(color);\n\n return {\n text: (span.newLine ? '\\n' : '') + span.text, fontSize, color: resolved.hex, alpha: resolved.alpha,\n bold: span.bold === true || base.bold, italic: span.italic === true || base.italic,\n };\n });\n}\n\nfunction mapTextColor(color: IRColor): { hex: string; alpha: number } {\n const channels = color.slice(0, 3).map(channel =>\n Math.round(Math.max(0, Math.min(1, channel)) * 255).toString(16).padStart(2, '0'),\n );\n\n return { hex: `#${channels.join('').toUpperCase()}`, alpha: color[3] };\n}\n","import type { IRTextContent } from '@vvfx/animation-ir';\nimport { SVG2IR_WARNING_CODES, type ConvertOptions, type SVG2IRWarning } from '../../../common/types';\nimport { collectLayerWarning, throwInvalidLayerData } from '../diagnostics/collect-warnings';\nimport type { SVGLayerBBox } from '../../types';\nimport type { TextRun } from './parse-text-runs';\n\nexport interface PositionedTextRun { run: TextRun; box: SVGLayerBBox }\n\nexport function buildTextRunLayout(\n runs: TextRun[],\n family: string,\n spacing: number,\n content: IRTextContent,\n size: [number, number],\n conversionOptions: ConvertOptions,\n warnings: SVG2IRWarning[],\n id: string,\n segmented = false,\n): PositionedTextRun[] {\n const rows: TextRun[][] = [[]];\n\n for (const run of runs) {\n run.text.split('\\n').forEach((text, index) => {\n if (index > 0) { rows.push([]); }\n if (text !== '') { rows[rows.length - 1].push({ ...run, text }); }\n });\n }\n let estimated = false;\n const configuredLineHeight = content.lineHeight;\n const measuredRows = rows.filter(row => !segmented || row.length > 0).map(row => {\n const parts = row.map(run => {\n // 分段文字使用统一参考字号度量字宽和字体边界,再按片段字号缩放。\n const measurementSize = segmented ? 10 : run.fontSize;\n const scale = run.fontSize / measurementSize;\n const font = `${run.italic ? 'italic' : 'normal'} ${run.bold ? 'bold' : 'normal'} ${measurementSize}px`\n + ` \"${family}\"`;\n const metrics = conversionOptions.measureText?.(font, segmented ? 'x' : run.text);\n const chunks = segmented ? run.text.split('') : [run.text];\n let advance = 0;\n\n for (const chunk of chunks) {\n const width = segmented ? conversionOptions.measureText?.(font, chunk).width : metrics?.width;\n const valid = width != null && Number.isFinite(width) && width >= 0;\n\n estimated ||= !valid;\n advance += valid ? width : Array.from(chunk).length * measurementSize * 0.6;\n }\n const characterCount = segmented ? run.text.length : Array.from(run.text).length;\n const width = advance * scale + Math.max(0, characterCount - 1) * spacing;\n const ascent = metrics?.fontBoundingBoxAscent == null\n ? run.fontSize * 0.8 : metrics.fontBoundingBoxAscent * scale;\n const descent = metrics?.fontBoundingBoxDescent == null\n ? run.fontSize * 0.2 : metrics.fontBoundingBoxDescent * scale;\n\n estimated ||= metrics?.fontBoundingBoxAscent == null || metrics.fontBoundingBoxDescent == null;\n if (!Number.isFinite(width) || width < 0 || !Number.isFinite(ascent) || !Number.isFinite(descent)) {\n throwInvalidLayerData('Text measurement returned invalid metrics.');\n }\n\n return { run, width, ascent, descent };\n });\n const width = parts.reduce((sum, part) => sum + part.width, 0);\n const ascent = Math.max(0, ...parts.map(part => part.ascent));\n const descent = Math.max(0, ...parts.map(part => part.descent));\n const height = segmented && configuredLineHeight > 0\n ? configuredLineHeight : Math.max(configuredLineHeight, ascent + descent);\n\n return { parts, width, ascent, descent, height };\n });\n const baselines: number[] = [];\n let offset = 0;\n\n for (const row of measuredRows) {\n baselines.push(offset);\n offset += row.height;\n }\n const contentTop = Math.min(0, ...measuredRows.map((row, index) =>\n baselines[index] - row.ascent - (row.height - row.ascent - row.descent) / 2,\n ));\n const firstBaseline = -size[1] / 2 - contentTop;\n const result: PositionedTextRun[] = [];\n const alignment = content.textAlign;\n\n measuredRows.forEach((row, index) => {\n let left = -size[0] / 2\n + (alignment === 'center' ? (size[0] - row.width) / 2 : alignment === 'right' ? size[0] - row.width : 0);\n const baseline = segmented ? firstBaseline + baselines[index]\n : -size[1] / 2 + baselines[index] + (row.height - row.ascent - row.descent) / 2 + row.ascent;\n\n for (const part of row.parts) {\n result.push({\n run: part.run,\n box: [left, baseline - part.ascent, left + part.width, baseline + part.descent],\n });\n left += part.width;\n }\n });\n if (estimated) {\n collectLayerWarning(warnings, conversionOptions, SVG2IR_WARNING_CODES.LAYERS_TEXT_BOUNDS_ESTIMATED,\n 'Text fragment bounds use estimated metrics; supply measureText for precise layout.', id);\n }\n\n return result;\n}\n","import type { IRLocalBounds, IRTextLayer } from '@vvfx/animation-ir';\nimport { SVG2IR_WARNING_CODES } from '../../../common/types';\nimport {\n collectLayerWarning, throwInvalidLayerData, throwUnsupportedLayerFeature,\n} from '../diagnostics/collect-warnings';\nimport { mapPointsToBBox, roundPixel, transformBoxCorners, type LayerPoint } from '../../matrix';\nimport { parseTextRuns } from './parse-text-runs';\nimport { buildTextRunLayout } from './text-layout';\nimport type { LayerConversionSession } from '../layers/conversion-session';\nimport type { StaticLayerState } from '../transform/build-transform';\nimport type { SVGTextFragment, SVGTextLayer } from '../../types';\n\nfunction resolveTextBounds(layer: IRTextLayer): IRLocalBounds {\n if (layer.localBounds != null) { return layer.localBounds; }\n const content = layer.content;\n\n return {\n x: 0, y: 0,\n width: Math.max(content.text.length * content.fontSize * 0.6\n + Math.max(0, content.text.length - 1) * content.letterSpacing, 1),\n height: Math.max(content.lineHeight, content.fontSize * 1.2),\n };\n}\n\nexport function convertIRTextLayer(\n layer: IRTextLayer,\n state: StaticLayerState,\n session: LayerConversionSession,\n id: string,\n): SVGTextLayer | undefined {\n const { options, warnings } = session;\n const preserved = session.preservedData?.textDataByLayerId.get(layer.id);\n\n if (preserved?.isPathText === true) {\n throwUnsupportedLayerFeature('Text on a path cannot be expressed by flat text fragments.');\n }\n const matrix = state.matrix;\n const scaleX = Math.hypot(matrix.a, matrix.b);\n const scaleY = Math.hypot(matrix.c, matrix.d);\n\n if (matrix.a * matrix.d - matrix.b * matrix.c <= 0\n || Math.abs(scaleX - scaleY) > 1e-4\n || Math.abs(matrix.a * matrix.c + matrix.b * matrix.d) > 1e-4) {\n throwUnsupportedLayerFeature('Nonuniform text scaling, skew or reflection is not supported.');\n }\n const font = session.assets.get(layer.content.fontAssetId);\n\n if (font?.type !== 'font') { throwInvalidLayerData('Missing text font resource.'); }\n const runs = parseTextRuns(layer, font, preserved);\n\n if (runs.some(run => run.alpha < 1 - 1e-6)) {\n throwUnsupportedLayerFeature('Translucent text color cannot be expressed by RGB fragments.');\n }\n if (runs.some(run => run.bold || run.italic) || font.weight !== 400 || font.style !== 'normal') {\n collectLayerWarning(warnings, options, SVG2IR_WARNING_CODES.LAYERS_TEXT_STYLE_DROPPED,\n 'Text weight/style is not consumed by the target fragment protocol.', id);\n }\n const bounds = resolveTextBounds(layer);\n const height = Math.max(bounds.height, layer.content.lineHeight);\n\n if (bounds.width <= 0 || height <= 0) { throwInvalidLayerData('Invalid text display size.'); }\n const positioned = buildTextRunLayout(runs, font.family, layer.content.letterSpacing, layer.content,\n [bounds.width, height], options, warnings, id, preserved != null);\n\n if (positioned.length === 0) { return undefined; }\n const centerX = bounds.x + bounds.width / 2;\n const centerY = bounds.y + bounds.height / 2;\n const polygons = positioned.map(part => transformBoxCorners(matrix, [\n part.box[0] + centerX, part.box[1] + centerY, part.box[2] + centerX, part.box[3] + centerY,\n ]));\n const bbox = mapPointsToBBox(polygons.flat());\n const rotation = roundPixel(Math.atan2(matrix.b, matrix.a) * 180 / Math.PI);\n const fragments: SVGTextFragment[] = positioned.map((part, index) => {\n const polygon: LayerPoint[] = polygons[index].map(point => [\n roundPixel(point[0] - bbox[0]), roundPixel(point[1] - bbox[1]),\n ]);\n\n return {\n content: part.run.text, bbox: mapPointsToBBox(polygon), polygon,\n font_family: font.family, font_size: roundPixel(part.run.fontSize * scaleY), color: part.run.color,\n letter_spacing: roundPixel(layer.content.letterSpacing * scaleX), direction: 'horizontal', rotation,\n };\n });\n\n return {\n id, type: 'text', state: 'active', bbox,\n content: runs.map(run => run.text).join(''), fragments, erase_operations: [],\n };\n}\n","import type { IRLayer } from '@vvfx/animation-ir';\nimport { convertIRImageLayer } from '../image/convert-image-layer';\nimport { convertIRTextLayer } from '../text/convert-text-layer';\nimport type { StaticLayerState } from '../transform/build-transform';\nimport type { SVGStaticLayer } from '../../types';\nimport type { LayerConversionSession } from './conversion-session';\n\nexport interface LayerConverter {\n readonly layerType: SVGStaticLayer['type'];\n readonly convert: (layer: IRLayer, state: StaticLayerState, id: string) => SVGStaticLayer | undefined;\n}\n\nexport function createLayerConverterRegistry(\n session: LayerConversionSession,\n): ReadonlyMap<IRLayer['type'], LayerConverter> {\n return new Map<IRLayer['type'], LayerConverter>([\n ['image', { layerType: 'image', convert: (layer, state, id) =>\n layer.type === 'image' ? convertIRImageLayer(layer, state, session, id) : undefined }],\n ['text', { layerType: 'text', convert: (layer, state, id) =>\n layer.type === 'text' ? convertIRTextLayer(layer, state, session, id) : undefined }],\n ]);\n}\n","import { IRBlendMode, type IRLayer } from '@vvfx/animation-ir';\nimport { throwUnsupportedLayerFeature } from '../diagnostics/collect-warnings';\nimport type { StaticLayerState } from '../transform/build-transform';\nimport type { LayerConversionSession } from './conversion-session';\n\nexport function resolveIRVisualState(layer: IRLayer, session: LayerConversionSession): StaticLayerState | undefined {\n if (!layer.visible) { return undefined; }\n const state = session.resolveLayerState(layer);\n\n if (!state.visible || state.opacity <= 0) { return undefined; }\n if (layer.mask != null || layer.matte != null) {\n throwUnsupportedLayerFeature('Mask or clipping is not supported by the flat layer protocol.');\n }\n if (Math.abs(state.opacity - 1) > 1e-6) {\n throwUnsupportedLayerFeature('Layer opacity cannot be expressed by the target protocol.');\n }\n if (layer.blendMode != null && layer.blendMode !== IRBlendMode.Normal) {\n throwUnsupportedLayerFeature('Non-default blending cannot be expressed by the target protocol.');\n }\n\n return state;\n}\n","import { LayerConversionError, collectLayerWarning, collectUnsupportedIRLayer } from '../diagnostics/collect-warnings';\nimport type { SVGStaticLayer } from '../../types';\nimport type { LayerConversionSession } from './conversion-session';\nimport { createLayerConverterRegistry } from './registry';\nimport { resolveIRVisualState } from './resolve-visual-state';\n\nexport function buildIRStaticLayers(session: LayerConversionSession): SVGStaticLayer[] {\n const { composition, maskSourceIds, options, warnings } = session;\n const registry = createLayerConverterRegistry(session);\n const result: SVGStaticLayer[] = [];\n const layerCounts = new Map<SVGStaticLayer['type'], number>();\n\n for (const layer of composition.layers) {\n if (layer.type === 'null' || maskSourceIds.has(layer.id)) { continue; }\n try {\n const state = resolveIRVisualState(layer, session);\n\n if (state == null) { continue; }\n const converter = registry.get(layer.type);\n\n if (converter == null) {\n collectUnsupportedIRLayer(layer, layer.id, warnings, options);\n continue;\n }\n const index = (layerCounts.get(converter.layerType) ?? 0) + 1;\n const converted = converter.convert(layer, state, `${converter.layerType}_${String(index).padStart(4, '0')}`);\n\n if (converted != null) {\n result.push(converted);\n layerCounts.set(converter.layerType, index);\n }\n } catch (error) {\n if (!(error instanceof LayerConversionError)) { throw error; }\n collectLayerWarning(warnings, options, error.code, error.message, layer.id);\n }\n }\n\n return result;\n}\n","import type { IRScene } from '@vvfx/animation-ir';\nimport { SVG2IR_WARNING_CODES, type ConvertOptions, type SVG2IRWarning } from '../common/types';\nimport type { SVGPreservedData } from '../svg-preserved-data';\nimport { collectLayerWarning } from './converter/diagnostics/collect-warnings';\nimport { buildLayerConversionSession } from './converter/layers/conversion-session';\nimport { buildIRStaticLayers } from './converter/layers/build-layers';\nimport type { SVGStaticLayer } from './types';\n\nexport function assembleSVGStaticLayers(\n scene: IRScene,\n options: ConvertOptions,\n warnings: SVG2IRWarning[],\n preservedData?: SVGPreservedData,\n): { size: [number, number]; data: SVGStaticLayer[] } {\n const session = buildLayerConversionSession(scene, options, warnings, preservedData);\n const data = buildIRStaticLayers(session);\n const composition = session.composition;\n\n if (composition.backgroundColor != null) {\n collectLayerWarning(warnings, options, SVG2IR_WARNING_CODES.LAYERS_UNSUPPORTED_TYPE,\n 'Composition background color is not an image or text layer.');\n }\n\n return { size: [composition.width, composition.height], data };\n}\n","import { SVGConverterError, SVG_CONVERTER_ERROR_CODES } from '../../common/errors';\nimport type { SVGImageResource, SVGImageResourceLoader, SVGStaticLayer } from '../types';\n\nfunction encodeBase64(data: Uint8Array): string {\n const chunks: string[] = [];\n\n for (let offset = 0; offset < data.length; offset += 8192) {\n chunks.push(String.fromCharCode(...Array.from(data.subarray(offset, offset + 8192))));\n }\n\n return btoa(chunks.join(''));\n}\n\nfunction readImageDataUrl(url: string): SVGImageResource {\n const comma = url.indexOf(',');\n\n if (comma < 0) { throw new Error('Invalid image data URL.'); }\n const [mimeType, ...parameters] = url.slice(5, comma).split(';');\n const payload = url.slice(comma + 1);\n\n if (parameters.some(parameter => parameter.toLowerCase() === 'base64')) {\n const decoded = atob(payload);\n\n return { mimeType, data: Uint8Array.from(decoded, character => character.charCodeAt(0)) };\n }\n const data: number[] = [];\n const encoder = new TextEncoder();\n const tokens = payload.match(/%[\\da-f]{2}|[^%]+|%/gi) ?? [];\n\n for (const token of tokens) {\n if (token === '%') { throw new Error('Invalid percent-encoded image data.'); }\n if (token.startsWith('%')) {\n data.push(parseInt(token.slice(1), 16));\n } else {\n for (const byte of encoder.encode(token)) { data.push(byte); }\n }\n }\n\n return { mimeType, data: new Uint8Array(data) };\n}\n\nasync function fetchImageResource(url: string): Promise<SVGImageResource> {\n const parsed = new URL(url);\n\n if (!['http:', 'https:', 'blob:'].includes(parsed.protocol)) {\n throw new Error('Use loadImage to read local or non-HTTP image resources.');\n }\n const response = await fetch(url);\n\n if (!response.ok) { throw new Error(`Image request failed: HTTP ${response.status}.`); }\n\n return {\n data: new Uint8Array(await response.arrayBuffer()),\n mimeType: response.headers.get('content-type')?.split(';')[0].trim() ?? '',\n };\n}\n\n/** 将图片资源写入 JSON,避免输出依赖外链、本地目录或临时 blob 地址。 */\nexport async function inlineImageResources(\n layers: SVGStaticLayer[],\n loadImage: SVGImageResourceLoader = fetchImageResource,\n): Promise<SVGStaticLayer[]> {\n const resources = new Map<string, string>();\n const result: SVGStaticLayer[] = [];\n\n for (const layer of layers) {\n if (layer.type !== 'image') {\n result.push(layer);\n continue;\n }\n let url = resources.get(layer.url);\n\n if (url == null) {\n try {\n const resource = /^data:/i.test(layer.url) ? readImageDataUrl(layer.url) : await loadImage(layer.url);\n const mimeType = resource.mimeType.trim().toLowerCase();\n\n if (!/^image\\/[a-z\\d.+-]+$/.test(mimeType)) { throw new Error('Missing or invalid image MIME type.'); }\n if (resource.data.length === 0) { throw new Error('Empty image resource.'); }\n url = `data:${mimeType};base64,${encodeBase64(resource.data)}`;\n resources.set(layer.url, url);\n } catch (error) {\n const reason = error instanceof Error ? error.message : String(error);\n\n throw new SVGConverterError(SVG_CONVERTER_ERROR_CODES.LAYERS_CONVERSION_FAILED,\n `[svg2ge:layers] Failed to inline image ${layer.id}: ${reason}`, {\n stage: 'layers-resources', sourceId: layer.id, reason,\n });\n }\n }\n result.push({ ...layer, url });\n }\n\n return result;\n}\n","import type { ConvertOptions, SVGSource } from '../common/types';\nimport type { SVGPreservedData } from '../svg-preserved-data';\nimport { parseSVGToIRWithPreservedData, splitSVG } from '../svg2ir/convert';\nimport { assembleSVGStaticLayers } from './assemble';\nimport { inlineImageResources } from './post-process/inline-image-resources';\nimport type { SVGImageResourceLoader, SVGToLayersResult } from './types';\n\nexport async function convertSVGToLayers(\n source: SVGSource,\n options: ConvertOptions,\n loadImage?: SVGImageResourceLoader,\n preservedData?: SVGPreservedData,\n): Promise<SVGToLayersResult> {\n const splitResult = preservedData == null ? splitSVG(source, options) : undefined;\n const parsed = splitResult ?? parseSVGToIRWithPreservedData(source, options);\n const { size, data } = assembleSVGStaticLayers(parsed.ir, options, parsed.warnings,\n preservedData ?? splitResult?.preservedData);\n\n return { size, data: await inlineImageResources(data, loadImage), warnings: parsed.warnings };\n}\n","/**\n * JSON 版本\n */\nexport var JSONSceneVersion;\n(function (JSONSceneVersion) {\n JSONSceneVersion[\"1_0\"] = \"1.0\";\n JSONSceneVersion[\"1_1\"] = \"1.1\";\n JSONSceneVersion[\"1_2\"] = \"1.2\";\n JSONSceneVersion[\"1_3\"] = \"1.3\";\n JSONSceneVersion[\"1_5\"] = \"1.5\";\n JSONSceneVersion[\"1_8\"] = \"1.8\";\n JSONSceneVersion[\"2_0\"] = \"2.0\";\n JSONSceneVersion[\"2_1\"] = \"2.1\";\n JSONSceneVersion[\"2_2\"] = \"2.2\";\n JSONSceneVersion[\"2_3\"] = \"2.3\";\n JSONSceneVersion[\"2_4\"] = \"2.4\";\n JSONSceneVersion[\"3_0\"] = \"3.0\";\n JSONSceneVersion[\"3_1\"] = \"3.1\";\n JSONSceneVersion[\"3_2\"] = \"3.2\";\n JSONSceneVersion[\"3_3\"] = \"3.3\";\n JSONSceneVersion[\"3_4\"] = \"3.4\";\n JSONSceneVersion[\"3_5\"] = \"3.5\";\n JSONSceneVersion[\"3_6\"] = \"3.6\";\n JSONSceneVersion[\"LATEST\"] = \"3.6\";\n})(JSONSceneVersion || (JSONSceneVersion = {}));\n","/*********************************************/\n/* 元素属性参数类型 */\n/*********************************************/\n/**\n * 渲染等级\n */\nexport var RenderLevel;\n(function (RenderLevel) {\n RenderLevel[\"S\"] = \"S\";\n RenderLevel[\"APlus\"] = \"A+\";\n RenderLevel[\"A\"] = \"A\";\n RenderLevel[\"BPlus\"] = \"B+\";\n RenderLevel[\"B\"] = \"B\";\n})(RenderLevel || (RenderLevel = {}));\n/**\n * 混合模式\n */\nexport var BlendingMode;\n(function (BlendingMode) {\n /**\n * 普通混合模式\n */\n BlendingMode[BlendingMode[\"ALPHA\"] = 0] = \"ALPHA\";\n /**\n * 叠加混合模式\n */\n BlendingMode[BlendingMode[\"ADD\"] = 1] = \"ADD\";\n /**\n * 相乘混合模式\n */\n BlendingMode[BlendingMode[\"MULTIPLY\"] = 2] = \"MULTIPLY\";\n /**\n * 亮度混合模式\n */\n BlendingMode[BlendingMode[\"BRIGHTNESS\"] = 3] = \"BRIGHTNESS\";\n /**\n * 减色混合模式\n */\n BlendingMode[BlendingMode[\"SUBTRACTION\"] = 4] = \"SUBTRACTION\";\n /**\n * 强光混合模式\n */\n BlendingMode[BlendingMode[\"STRONG_LIGHT\"] = 5] = \"STRONG_LIGHT\";\n /**\n * 弱光混合模式\n */\n BlendingMode[BlendingMode[\"WEAK_LIGHT\"] = 6] = \"WEAK_LIGHT\";\n /**\n * 亮度叠加混合模式\n */\n BlendingMode[BlendingMode[\"SUPERPOSITION\"] = 7] = \"SUPERPOSITION\";\n})(BlendingMode || (BlendingMode = {}));\n/**\n * 单双面模式\n */\nexport var SideMode;\n(function (SideMode) {\n /**\n * 双面模式\n */\n SideMode[SideMode[\"DOUBLE\"] = 1032] = \"DOUBLE\";\n /**\n * 正面模式\n */\n SideMode[SideMode[\"FRONT\"] = 1028] = \"FRONT\";\n /**\n * 背面模式\n */\n SideMode[SideMode[\"BACK\"] = 1029] = \"BACK\";\n})(SideMode || (SideMode = {}));\n/**\n * 元素是否被蒙版遮挡/反向遮挡\n */\nexport var ObscuredMode;\n(function (ObscuredMode) {\n /**\n * 无\n */\n // NONE = 0,\n // /**\n // * 蒙版\n // */\n // MASK = 1,\n /**\n * 被遮挡\n */\n ObscuredMode[ObscuredMode[\"OBSCURED\"] = 2] = \"OBSCURED\";\n /**\n * 被反向遮挡\n */\n ObscuredMode[ObscuredMode[\"REVERSE_OBSCURED\"] = 3] = \"REVERSE_OBSCURED\";\n})(ObscuredMode || (ObscuredMode = {}));\n/**\n * 发射器形状\n */\nexport var ParticleEmitterShapeType;\n(function (ParticleEmitterShapeType) {\n /**\n * 没有类型\n */\n ParticleEmitterShapeType[ParticleEmitterShapeType[\"NONE\"] = 0] = \"NONE\";\n /**\n * 圆球\n */\n ParticleEmitterShapeType[ParticleEmitterShapeType[\"SPHERE\"] = 1] = \"SPHERE\";\n /**\n * 圆锥\n */\n ParticleEmitterShapeType[ParticleEmitterShapeType[\"CONE\"] = 2] = \"CONE\";\n /**\n * 半球\n */\n ParticleEmitterShapeType[ParticleEmitterShapeType[\"HEMISPHERE\"] = 3] = \"HEMISPHERE\";\n /**\n * 圆\n */\n ParticleEmitterShapeType[ParticleEmitterShapeType[\"CIRCLE\"] = 4] = \"CIRCLE\";\n /**\n * 圆环\n */\n ParticleEmitterShapeType[ParticleEmitterShapeType[\"DONUT\"] = 5] = \"DONUT\";\n /**\n * 矩形\n */\n ParticleEmitterShapeType[ParticleEmitterShapeType[\"RECTANGLE\"] = 6] = \"RECTANGLE\";\n /**\n * 矩形框\n */\n ParticleEmitterShapeType[ParticleEmitterShapeType[\"RECTANGLE_EDGE\"] = 7] = \"RECTANGLE_EDGE\";\n /**\n * 直线\n */\n ParticleEmitterShapeType[ParticleEmitterShapeType[\"EDGE\"] = 8] = \"EDGE\";\n /**\n * 贴图\n */\n ParticleEmitterShapeType[ParticleEmitterShapeType[\"TEXTURE\"] = 9] = \"TEXTURE\";\n})(ParticleEmitterShapeType || (ParticleEmitterShapeType = {}));\n/**\n * 插件类型\n */\nexport var PluginType;\n(function (PluginType) {\n /**\n * 陀螺仪\n */\n PluginType[PluginType[\"GYROSCOPE\"] = 0] = \"GYROSCOPE\";\n /**\n * Spine\n */\n PluginType[PluginType[\"SPINE\"] = 1] = \"SPINE\";\n})(PluginType || (PluginType = {}));\n/**\n * 交互类型\n */\nexport var InteractType;\n(function (InteractType) {\n /**\n * 点击\n */\n InteractType[InteractType[\"CLICK\"] = 0] = \"CLICK\";\n /**\n * 消息\n * 前端收到 onMessageItem 回调\n */\n InteractType[InteractType[\"MESSAGE\"] = 1] = \"MESSAGE\";\n /**\n * 拖拽\n */\n InteractType[InteractType[\"DRAG\"] = 2] = \"DRAG\";\n})(InteractType || (InteractType = {}));\n/**\n * 交互行为\n */\nexport var InteractBehavior;\n(function (InteractBehavior) {\n /**\n * 无\n */\n InteractBehavior[InteractBehavior[\"NONE\"] = 0] = \"NONE\";\n /**\n * 通知\n */\n InteractBehavior[InteractBehavior[\"NOTIFY\"] = 1] = \"NOTIFY\";\n /**\n * 重置播放器\n */\n InteractBehavior[InteractBehavior[\"RESUME_PLAYER\"] = 2] = \"RESUME_PLAYER\";\n /**\n * 清除元素\n */\n InteractBehavior[InteractBehavior[\"REMOVE\"] = 3] = \"REMOVE\";\n /**\n * 暂停播放器\n */\n InteractBehavior[InteractBehavior[\"PAUSE\"] = 4] = \"PAUSE\";\n})(InteractBehavior || (InteractBehavior = {}));\n/**\n * 元素类型\n */\nexport var ItemType;\n(function (ItemType) {\n /**\n * 错误元素\n */\n ItemType[\"base\"] = \"0\";\n /**\n * 图层元素\n */\n ItemType[\"sprite\"] = \"1\";\n /**\n * 粒子元素\n */\n ItemType[\"particle\"] = \"2\";\n /**\n * 空节点元素\n */\n ItemType[\"null\"] = \"3\";\n /**\n * 交互元素\n */\n ItemType[\"interact\"] = \"4\";\n /**\n * 插件元素\n */\n ItemType[\"plugin\"] = \"5\";\n /**\n * 相机元素\n */\n ItemType[\"camera\"] = \"6\";\n /**\n * 预合成元素\n */\n ItemType[\"composition\"] = \"7\";\n /**\n * Spine 元素\n */\n ItemType[\"spine\"] = \"spine\";\n /**\n * Mesh 元素\n */\n ItemType[\"mesh\"] = \"mesh\";\n /**\n * 节点树元素\n */\n ItemType[\"tree\"] = \"tree\";\n /**\n * 文本元素\n */\n ItemType[\"text\"] = \"text\";\n /**\n * 灯光元素\n */\n ItemType[\"light\"] = \"light\";\n /**\n * 天空盒元素\n */\n ItemType[\"skybox\"] = \"skybox\";\n /**\n * 特效元素\n */\n ItemType[\"effect\"] = \"effect\";\n /**\n * 形状元素\n */\n ItemType[\"shape\"] = \"shape\";\n /**\n * 后处理元素\n */\n ItemType[\"postProcessVolume\"] = \"postProcessVolume\";\n /**\n * 节点元素\n */\n ItemType[\"node\"] = \"node\";\n /**\n * 视频元素\n */\n ItemType[\"video\"] = \"video\";\n /**\n * 音频元素\n */\n ItemType[\"audio\"] = \"audio\";\n /**\n * 富文本元素\n */\n ItemType[\"richtext\"] = \"richtext\";\n})(ItemType || (ItemType = {}));\n/**\n * 渲染模式\n */\nexport var RenderMode;\n(function (RenderMode) {\n /**\n * 广告牌模式\n */\n RenderMode[RenderMode[\"BILLBOARD\"] = 0] = \"BILLBOARD\";\n /**\n * 网格模式\n */\n RenderMode[RenderMode[\"MESH\"] = 1] = \"MESH\";\n /**\n * 垂直广告牌模式\n */\n RenderMode[RenderMode[\"VERTICAL_BILLBOARD\"] = 2] = \"VERTICAL_BILLBOARD\";\n /**\n * 水平广告牌模式\n */\n RenderMode[RenderMode[\"HORIZONTAL_BILLBOARD\"] = 3] = \"HORIZONTAL_BILLBOARD\";\n})(RenderMode || (RenderMode = {}));\n/**\n * 变换中心\n */\nexport var ParticleOrigin;\n(function (ParticleOrigin) {\n /**\n * 水平和垂直中点\n */\n ParticleOrigin[ParticleOrigin[\"PARTICLE_ORIGIN_CENTER\"] = 0] = \"PARTICLE_ORIGIN_CENTER\";\n /**\n * 水平左侧 垂直顶部\n */\n ParticleOrigin[ParticleOrigin[\"PARTICLE_ORIGIN_LEFT_TOP\"] = 1] = \"PARTICLE_ORIGIN_LEFT_TOP\";\n /**\n * 水平左侧 垂直中间\n */\n ParticleOrigin[ParticleOrigin[\"PARTICLE_ORIGIN_LEFT_CENTER\"] = 2] = \"PARTICLE_ORIGIN_LEFT_CENTER\";\n /**\n * 水平左侧 垂直底部\n */\n ParticleOrigin[ParticleOrigin[\"PARTICLE_ORIGIN_LEFT_BOTTOM\"] = 3] = \"PARTICLE_ORIGIN_LEFT_BOTTOM\";\n /**\n * 水平中间 垂直顶部\n */\n ParticleOrigin[ParticleOrigin[\"PARTICLE_ORIGIN_CENTER_TOP\"] = 4] = \"PARTICLE_ORIGIN_CENTER_TOP\";\n /**\n * 水平中间 垂直底部\n */\n ParticleOrigin[ParticleOrigin[\"PARTICLE_ORIGIN_CENTER_BOTTOM\"] = 5] = \"PARTICLE_ORIGIN_CENTER_BOTTOM\";\n /**\n * 水平右侧 垂直顶部\n */\n ParticleOrigin[ParticleOrigin[\"PARTICLE_ORIGIN_RIGHT_TOP\"] = 6] = \"PARTICLE_ORIGIN_RIGHT_TOP\";\n /**\n * 水平右侧 垂直中间\n */\n ParticleOrigin[ParticleOrigin[\"PARTICLE_ORIGIN_RIGHT_CENTER\"] = 7] = \"PARTICLE_ORIGIN_RIGHT_CENTER\";\n /**\n * 水平右侧 垂直底部\n */\n ParticleOrigin[ParticleOrigin[\"PARTICLE_ORIGIN_RIGHT_BOTTOM\"] = 8] = \"PARTICLE_ORIGIN_RIGHT_BOTTOM\";\n})(ParticleOrigin || (ParticleOrigin = {}));\nexport var RenderType;\n(function (RenderType) {\n RenderType[\"Opaque\"] = \"Opaque\";\n RenderType[\"Transparent\"] = \"Transparent\";\n})(RenderType || (RenderType = {}));\nexport var RenderFace;\n(function (RenderFace) {\n RenderFace[\"Both\"] = \"Both\";\n RenderFace[\"Back\"] = \"Back\";\n RenderFace[\"Front\"] = \"Front\";\n})(RenderFace || (RenderFace = {}));\n","import { CAMERA_CLIP_MODE_NORMAL, CAMERA_CLIP_MODE_VERTICAL } from './constants';\nexport var CameraClipMode;\n(function (CameraClipMode) {\n /**\n * 剪裁上下\n */\n CameraClipMode[CameraClipMode[\"portrait\"] = 1] = \"portrait\";\n /**\n * 剪裁左右\n */\n CameraClipMode[CameraClipMode[\"landscape\"] = 0] = \"landscape\";\n})(CameraClipMode || (CameraClipMode = {}));\n","/*********************************************/\n/* 基本数值属性参数 */\n/*********************************************/\nexport var ValueType;\n(function (ValueType) {\n /**\n * 常数\n */\n ValueType[ValueType[\"CONSTANT\"] = 0] = \"CONSTANT\";\n /**\n * 二维常数向量\n */\n ValueType[ValueType[\"CONSTANT_VEC2\"] = 1] = \"CONSTANT_VEC2\";\n /**\n * 三维常数向量\n */\n ValueType[ValueType[\"CONSTANT_VEC3\"] = 2] = \"CONSTANT_VEC3\";\n /**\n * 四维常数向量\n */\n ValueType[ValueType[\"CONSTANT_VEC4\"] = 3] = \"CONSTANT_VEC4\";\n /**\n * 随机数\n */\n ValueType[ValueType[\"RANDOM\"] = 4] = \"RANDOM\";\n /**\n * 直线\n */\n ValueType[ValueType[\"LINE\"] = 5] = \"LINE\";\n /**\n * 曲线\n */\n ValueType[ValueType[\"CURVE\"] = 6] = \"CURVE\";\n /**\n * 贝塞尔路径\n */\n ValueType[ValueType[\"BEZIER_PATH\"] = 7] = \"BEZIER_PATH\";\n /**\n * 颜色\n */\n ValueType[ValueType[\"RGBA_COLOR\"] = 8] = \"RGBA_COLOR\";\n /**\n * 渐变色\n */\n ValueType[ValueType[\"GRADIENT_COLOR\"] = 9] = \"GRADIENT_COLOR\";\n /**\n * 蒙版形状点集\n */\n ValueType[ValueType[\"SHAPE_POINTS\"] = 10] = \"SHAPE_POINTS\";\n /**\n * 蒙版形状切分\n */\n ValueType[ValueType[\"SHAPE_SPLITS\"] = 11] = \"SHAPE_SPLITS\";\n /**\n * 直线路径\n */\n ValueType[ValueType[\"LINEAR_PATH\"] = 12] = \"LINEAR_PATH\";\n /**\n * 多色\n */\n ValueType[ValueType[\"COLORS\"] = 13] = \"COLORS\";\n /**\n * 二进制指针\n */\n ValueType[ValueType[\"BINARY\"] = 20] = \"BINARY\";\n /**\n * 贝塞尔曲线\n */\n ValueType[ValueType[\"BEZIER_CURVE\"] = 21] = \"BEZIER_CURVE\";\n /**\n * 贝塞尔曲线路径\n */\n ValueType[ValueType[\"BEZIER_CURVE_PATH\"] = 22] = \"BEZIER_CURVE_PATH\";\n /**\n * 贝塞尔曲线四元数\n */\n ValueType[ValueType[\"BEZIER_CURVE_QUAT\"] = 23] = \"BEZIER_CURVE_QUAT\";\n /**\n * 颜色曲线\n */\n ValueType[ValueType[\"COLOR_CURVE\"] = 24] = \"COLOR_CURVE\";\n /**\n * Vector4 曲线\n */\n ValueType[ValueType[\"VECTOR4_CURVE\"] = 25] = \"VECTOR4_CURVE\";\n /**\n * Vector2 曲线\n */\n ValueType[ValueType[\"VECTOR2_CURVE\"] = 26] = \"VECTOR2_CURVE\";\n /**\n * Vector3 曲线\n */\n ValueType[ValueType[\"VECTOR3_CURVE\"] = 27] = \"VECTOR3_CURVE\";\n})(ValueType || (ValueType = {}));\n/**\n * 关键帧类型\n */\nexport var BezierKeyframeType;\n(function (BezierKeyframeType) {\n BezierKeyframeType[BezierKeyframeType[\"AUTO\"] = 0] = \"AUTO\";\n BezierKeyframeType[BezierKeyframeType[\"EASE\"] = 1] = \"EASE\";\n BezierKeyframeType[BezierKeyframeType[\"EASE_IN\"] = 2] = \"EASE_IN\";\n BezierKeyframeType[BezierKeyframeType[\"EASE_OUT\"] = 3] = \"EASE_OUT\";\n BezierKeyframeType[BezierKeyframeType[\"LINE\"] = 4] = \"LINE\";\n BezierKeyframeType[BezierKeyframeType[\"HOLD\"] = 5] = \"HOLD\";\n BezierKeyframeType[BezierKeyframeType[\"LINE_OUT\"] = 6] = \"LINE_OUT\";\n})(BezierKeyframeType || (BezierKeyframeType = {}));\n","import { END_BEHAVIOR_DESTROY, END_BEHAVIOR_FORWARD, END_BEHAVIOR_FREEZE, END_BEHAVIOR_RESTART, } from '../constants';\n/**\n * 结束行为\n */\nexport var EndBehavior;\n(function (EndBehavior) {\n /**\n * 销毁\n */\n EndBehavior[EndBehavior[\"destroy\"] = 0] = \"destroy\";\n /**\n * 重播\n */\n EndBehavior[EndBehavior[\"restart\"] = 5] = \"restart\";\n /**\n * 无限播放\n */\n EndBehavior[EndBehavior[\"forward\"] = 2] = \"forward\";\n /**\n * 冻结\n */\n EndBehavior[EndBehavior[\"freeze\"] = 4] = \"freeze\";\n})(EndBehavior || (EndBehavior = {}));\n","/**\n * 粒子交互行为\n */\nexport var ParticleInteractionBehavior;\n(function (ParticleInteractionBehavior) {\n /**\n * 无\n */\n ParticleInteractionBehavior[ParticleInteractionBehavior[\"none\"] = 0] = \"none\";\n /**\n * 移出粒子\n */\n ParticleInteractionBehavior[ParticleInteractionBehavior[\"removeParticle\"] = 1] = \"removeParticle\";\n})(ParticleInteractionBehavior || (ParticleInteractionBehavior = {}));\n","export var ShapeArcMode;\n(function (ShapeArcMode) {\n /**\n * 随机\n */\n ShapeArcMode[ShapeArcMode[\"RANDOM\"] = 0] = \"RANDOM\";\n /**\n * 单向循环\n */\n ShapeArcMode[ShapeArcMode[\"UNIDIRECTIONAL_CYCLE\"] = 1] = \"UNIDIRECTIONAL_CYCLE\";\n /**\n * 双向循环\n */\n ShapeArcMode[ShapeArcMode[\"BIDIRECTIONAL_CYCLE\"] = 2] = \"BIDIRECTIONAL_CYCLE\";\n /**\n * 均匀爆发\n */\n ShapeArcMode[ShapeArcMode[\"UNIFORM_BURST\"] = 3] = \"UNIFORM_BURST\";\n})(ShapeArcMode || (ShapeArcMode = {}));\n","export var LightType;\n(function (LightType) {\n /**\n * 点光源\n */\n LightType[\"point\"] = \"point\";\n /**\n * 聚光灯\n */\n LightType[\"spot\"] = \"spot\";\n /**\n * 方向光\n */\n LightType[\"directional\"] = \"directional\";\n /**\n * 环境光\n */\n LightType[\"ambient\"] = \"ambient\";\n})(LightType || (LightType = {}));\n","export var ModelBoundingType;\n(function (ModelBoundingType) {\n ModelBoundingType[ModelBoundingType[\"box\"] = 2] = \"box\";\n ModelBoundingType[ModelBoundingType[\"sphere\"] = 3] = \"sphere\";\n})(ModelBoundingType || (ModelBoundingType = {}));\n","export var CameraType;\n(function (CameraType) {\n CameraType[\"orthographic\"] = \"orthographic\";\n CameraType[\"perspective\"] = \"perspective\";\n})(CameraType || (CameraType = {}));\n","// 材质类型\nexport var MaterialType;\n(function (MaterialType) {\n MaterialType[\"unlit\"] = \"unlit\";\n MaterialType[\"pbr\"] = \"pbr\";\n // 头发材质,在 pbr 材质基础上扩展\n MaterialType[\"hair\"] = \"hair\";\n})(MaterialType || (MaterialType = {}));\n// 混合模式\nexport var MaterialBlending;\n(function (MaterialBlending) {\n MaterialBlending[MaterialBlending[\"opaque\"] = 100] = \"opaque\";\n MaterialBlending[MaterialBlending[\"masked\"] = 101] = \"masked\";\n MaterialBlending[MaterialBlending[\"translucent\"] = 102] = \"translucent\";\n MaterialBlending[MaterialBlending[\"additive\"] = 103] = \"additive\";\n})(MaterialBlending || (MaterialBlending = {}));\n","/**\n * 3D渲染模式:将渲染过程中的中间结果输出,主要用于排查渲染效果问题,支持 pbr 和 unlit 材质\n */\nexport var RenderMode3D;\n(function (RenderMode3D) {\n /**\n * 正常渲染\n */\n RenderMode3D[\"none\"] = \"none\";\n /**\n * 纹理坐标\n */\n RenderMode3D[\"uv\"] = \"uv\";\n /**\n * 世界坐标法线\n */\n RenderMode3D[\"normal\"] = \"normal\";\n /**\n * 基础颜色\n */\n RenderMode3D[\"basecolor\"] = \"basecolor\";\n /**\n * 基础颜色 Alpha\n */\n RenderMode3D[\"alpha\"] = \"alpha\";\n /**\n * 金属度\n */\n RenderMode3D[\"metallic\"] = \"metallic\";\n /**\n * 粗超度\n */\n RenderMode3D[\"roughness\"] = \"roughness\";\n /**\n * 环境遮蔽\n */\n RenderMode3D[\"ao\"] = \"ao\";\n /**\n * 自发光\n */\n RenderMode3D[\"emissive\"] = \"emissive\";\n /**\n * 漫反射\n */\n RenderMode3D[\"diffuse\"] = \"diffuse\";\n})(RenderMode3D || (RenderMode3D = {}));\n","export var TextOverflow;\n(function (TextOverflow) {\n /**\n * visible 模式下,文本内容超出边界框时,会继续显示内容,不进行裁剪或缩放。\n */\n TextOverflow[TextOverflow[\"visible\"] = 0] = \"visible\";\n /**\n * display 模式下,会显示所有文本,文本字号大小会根据边界框调整。\n */\n TextOverflow[TextOverflow[\"display\"] = 1] = \"display\";\n /**\n * clip 模式下,当文本内容超出边界框时,多余的会被截断。\n */\n TextOverflow[TextOverflow[\"clip\"] = 2] = \"clip\";\n /**\n * ellipsis 模式下,会使用(...)来代替超出边界框的内容。\n */\n TextOverflow[TextOverflow[\"ellipsis\"] = 3] = \"ellipsis\";\n})(TextOverflow || (TextOverflow = {}));\nexport var TextSizeMode;\n(function (TextSizeMode) {\n /**\n * 自适应宽度\n */\n TextSizeMode[TextSizeMode[\"autoWidth\"] = 0] = \"autoWidth\";\n /**\n * 自适应高度\n */\n TextSizeMode[TextSizeMode[\"autoHeight\"] = 1] = \"autoHeight\";\n /**\n * 固定宽高\n */\n TextSizeMode[TextSizeMode[\"fixed\"] = 2] = \"fixed\";\n})(TextSizeMode || (TextSizeMode = {}));\nexport var TextBaseline;\n(function (TextBaseline) {\n /**\n * 文本顶对齐。\n */\n TextBaseline[TextBaseline[\"top\"] = 0] = \"top\";\n /**\n * 文本垂直居中对齐。\n */\n TextBaseline[TextBaseline[\"middle\"] = 1] = \"middle\";\n /**\n * 文本底对齐。\n */\n TextBaseline[TextBaseline[\"bottom\"] = 2] = \"bottom\";\n})(TextBaseline || (TextBaseline = {}));\nexport var TextAlignment;\n(function (TextAlignment) {\n /**\n * text alignment starts from(x,y) to right direction\n * 从 (x,y) 开始第一个字符,向右边延伸\n */\n TextAlignment[TextAlignment[\"left\"] = 0] = \"left\";\n /**\n * (x,y) is middle position of text, where (left + right)/2 =(x,y)\n * (x,y) 为文字中间位置,(最左位置 + 最右位置)/2 = (x,y)\n */\n TextAlignment[TextAlignment[\"middle\"] = 1] = \"middle\";\n /**\n * text alignment ends with(x,y) from left direction\n * 从 (x,y) 结束最后一个字符,向左边延伸\n */\n TextAlignment[TextAlignment[\"right\"] = 2] = \"right\";\n})(TextAlignment || (TextAlignment = {}));\nexport var TextVerticalAlign;\n(function (TextVerticalAlign) {\n /**\n * 文本顶对齐。\n */\n TextVerticalAlign[TextVerticalAlign[\"top\"] = 0] = \"top\";\n /**\n * 文本垂直居中对齐。\n */\n TextVerticalAlign[TextVerticalAlign[\"middle\"] = 1] = \"middle\";\n /**\n * 文本底对齐。\n */\n TextVerticalAlign[TextVerticalAlign[\"bottom\"] = 2] = \"bottom\";\n})(TextVerticalAlign || (TextVerticalAlign = {}));\n/**\n * 文本字重\n */\nexport var TextWeight;\n(function (TextWeight) {\n /**\n * 正常\n */\n TextWeight[\"normal\"] = \"normal\";\n /**\n * 粗体\n */\n TextWeight[\"bold\"] = \"bold\";\n /**\n * 瘦体\n */\n TextWeight[\"lighter\"] = \"lighter\";\n})(TextWeight || (TextWeight = {}));\n/**\n * 文本样式\n */\nexport var FontStyle;\n(function (FontStyle) {\n /**\n * 正常\n */\n FontStyle[\"normal\"] = \"normal\";\n /**\n * 斜体\n */\n FontStyle[\"italic\"] = \"italic\";\n /**\n * 倾斜体\n */\n FontStyle[\"oblique\"] = \"oblique\";\n})(FontStyle || (FontStyle = {}));\n","export var FillType;\n(function (FillType) {\n FillType[FillType[\"Solid\"] = 0] = \"Solid\";\n FillType[FillType[\"GradientLinear\"] = 1] = \"GradientLinear\";\n FillType[FillType[\"GradientRadial\"] = 2] = \"GradientRadial\";\n FillType[FillType[\"GradientAngular\"] = 3] = \"GradientAngular\";\n FillType[FillType[\"Texture\"] = 4] = \"Texture\";\n})(FillType || (FillType = {}));\nexport var TexturePaintScaleMode;\n(function (TexturePaintScaleMode) {\n TexturePaintScaleMode[TexturePaintScaleMode[\"Fill\"] = 0] = \"Fill\";\n TexturePaintScaleMode[TexturePaintScaleMode[\"Fit\"] = 1] = \"Fit\";\n TexturePaintScaleMode[TexturePaintScaleMode[\"Crop\"] = 2] = \"Crop\";\n TexturePaintScaleMode[TexturePaintScaleMode[\"Tile\"] = 3] = \"Tile\";\n})(TexturePaintScaleMode || (TexturePaintScaleMode = {}));\n","/**\n * 矢量图形类型\n */\nexport var ShapePrimitiveType;\n(function (ShapePrimitiveType) {\n /**\n * 自定义图形\n */\n ShapePrimitiveType[ShapePrimitiveType[\"Custom\"] = 0] = \"Custom\";\n /**\n * 矩形\n */\n ShapePrimitiveType[ShapePrimitiveType[\"Rectangle\"] = 1] = \"Rectangle\";\n /**\n * 椭圆\n */\n ShapePrimitiveType[ShapePrimitiveType[\"Ellipse\"] = 2] = \"Ellipse\";\n /**\n * 多边形\n */\n ShapePrimitiveType[ShapePrimitiveType[\"Polygon\"] = 3] = \"Polygon\";\n /**\n * 星形\n */\n ShapePrimitiveType[ShapePrimitiveType[\"Star\"] = 4] = \"Star\";\n})(ShapePrimitiveType || (ShapePrimitiveType = {}));\n","export var LineCap;\n(function (LineCap) {\n /** 默认值。向线条的每个末端添加平直的边缘 */\n LineCap[LineCap[\"Butt\"] = 0] = \"Butt\";\n /** 向线条的每个末端添加圆形线帽 */\n LineCap[LineCap[\"Round\"] = 1] = \"Round\";\n /** 向线条的每个末端添加正方形线帽 */\n LineCap[LineCap[\"Square\"] = 2] = \"Square\";\n})(LineCap || (LineCap = {}));\nexport var LineJoin;\n(function (LineJoin) {\n /** 创建圆角 */\n LineJoin[LineJoin[\"Round\"] = 0] = \"Round\";\n /** 创建斜角 */\n LineJoin[LineJoin[\"Bevel\"] = 1] = \"Bevel\";\n /** 创建尖角 */\n LineJoin[LineJoin[\"Miter\"] = 2] = \"Miter\";\n})(LineJoin || (LineJoin = {}));\n","export var NodeDataType;\n(function (NodeDataType) {\n NodeDataType[\"AnimationClipNodeData\"] = \"AnimationClipNodeData\";\n NodeDataType[\"BlendNodeData\"] = \"BlendNodeData\";\n NodeDataType[\"ApplyAdditiveNodeData\"] = \"ApplyAdditiveNodeData\";\n NodeDataType[\"LayerBlendNodeData\"] = \"LayerBlendNodeData\";\n NodeDataType[\"StateMachineNodeData\"] = \"StateMachineNodeData\";\n NodeDataType[\"TransitionNodeData\"] = \"TransitionNodeData\";\n NodeDataType[\"StateNodeData\"] = \"StateNodeData\";\n NodeDataType[\"ConstFloatNodeData\"] = \"ConstFloatNodeData\";\n NodeDataType[\"ConstBoolNodeData\"] = \"ConstBoolNodeData\";\n NodeDataType[\"ControlParameterBoolNodeData\"] = \"ControlParameterBoolNodeData\";\n NodeDataType[\"ControlParameterFloatNodeData\"] = \"ControlParameterFloatNodeData\";\n NodeDataType[\"ControlParameterTriggerNodeData\"] = \"ControlParameterTriggerNodeData\";\n NodeDataType[\"NotNodeData\"] = \"NotNodeData\";\n NodeDataType[\"AndNodeData\"] = \"AndNodeData\";\n NodeDataType[\"OrNodeData\"] = \"OrNodeData\";\n NodeDataType[\"EqualNodeData\"] = \"EqualNodeData\";\n NodeDataType[\"GreaterNodeData\"] = \"GreaterNodeData\";\n NodeDataType[\"LessNodeData\"] = \"LessNodeData\";\n})(NodeDataType || (NodeDataType = {}));\n","/**\n * 动态换图类型\n * @since 1.1.0\n */\nexport var BackgroundType;\n(function (BackgroundType) {\n BackgroundType[\"video\"] = \"video\";\n BackgroundType[\"image\"] = \"image\";\n})(BackgroundType || (BackgroundType = {}));\n/**\n * 多媒体资源类型\n * @since 2.1.0\n */\nexport var MultimediaType;\n(function (MultimediaType) {\n MultimediaType[\"video\"] = \"video\";\n MultimediaType[\"audio\"] = \"audio\";\n})(MultimediaType || (MultimediaType = {}));\nexport var HevcVideoCodec;\n(function (HevcVideoCodec) {\n HevcVideoCodec[\"L30\"] = \"hev1.1.0.L30.B0\";\n HevcVideoCodec[\"L60\"] = \"hev1.1.0.L60.B0\";\n HevcVideoCodec[\"L63\"] = \"hev1.1.0.L63.B0\";\n HevcVideoCodec[\"L90\"] = \"hev1.1.0.L90.B0\";\n HevcVideoCodec[\"L93\"] = \"hev1.1.0.L93.B0\";\n HevcVideoCodec[\"L120\"] = \"hev1.1.0.L120.B0\";\n HevcVideoCodec[\"L150\"] = \"hev1.1.0.L150.B0\";\n HevcVideoCodec[\"L180\"] = \"hev1.1.0.L180.B0\";\n})(HevcVideoCodec || (HevcVideoCodec = {}));\n","export var DataType;\n(function (DataType) {\n DataType[\"VFXItemData\"] = \"VFXItemData\";\n // Assets\n DataType[\"Material\"] = \"Material\";\n DataType[\"Shader\"] = \"Shader\";\n DataType[\"Geometry\"] = \"Geometry\";\n DataType[\"Texture\"] = \"Texture\";\n DataType[\"Image\"] = \"Image\";\n DataType[\"AnimationClip\"] = \"AnimationClip\";\n DataType[\"BinaryAsset\"] = \"BinaryAsset\";\n // Timeline\n DataType[\"TrackAsset\"] = \"TrackAsset\";\n DataType[\"TimelineAsset\"] = \"TimelineAsset\";\n DataType[\"ObjectBindingTrack\"] = \"ObjectBindingTrack\";\n DataType[\"TransformTrack\"] = \"TransformTrack\";\n DataType[\"SpriteColorTrack\"] = \"SpriteColorTrack\";\n DataType[\"ActivationTrack\"] = \"ActivationTrack\";\n DataType[\"SubCompositionTrack\"] = \"SubCompositionTrack\";\n DataType[\"FloatPropertyTrack\"] = \"FloatPropertyTrack\";\n DataType[\"ColorPropertyTrack\"] = \"ColorPropertyTrack\";\n DataType[\"Vector2PropertyTrack\"] = \"Vector2PropertyTrack\";\n DataType[\"Vector3PropertyTrack\"] = \"Vector3PropertyTrack\";\n DataType[\"Vector4PropertyTrack\"] = \"Vector4PropertyTrack\";\n DataType[\"TransformPlayableAsset\"] = \"TransformPlayableAsset\";\n DataType[\"SpriteColorPlayableAsset\"] = \"SpriteColorPlayableAsset\";\n DataType[\"ActivationPlayableAsset\"] = \"ActivationPlayableAsset\";\n DataType[\"SubCompositionPlayableAsset\"] = \"SubCompositionPlayableAsset\";\n DataType[\"FloatPropertyPlayableAsset\"] = \"FloatPropertyPlayableAsset\";\n DataType[\"ColorPropertyPlayableAsset\"] = \"ColorPropertyPlayableAsset\";\n DataType[\"Vector2PropertyPlayableAsset\"] = \"Vector2PropertyPlayableAsset\";\n DataType[\"Vector3PropertyPlayableAsset\"] = \"Vector3PropertyPlayableAsset\";\n DataType[\"Vector4PropertyPlayableAsset\"] = \"Vector4PropertyPlayableAsset\";\n // Components\n DataType[\"MeshComponent\"] = \"MeshComponent\";\n DataType[\"SkyboxComponent\"] = \"SkyboxComponent\";\n DataType[\"LightComponent\"] = \"LightComponent\";\n DataType[\"CameraComponent\"] = \"CameraComponent\";\n DataType[\"ModelPluginComponent\"] = \"ModelPluginComponent\";\n DataType[\"TreeComponent\"] = \"TreeComponent\";\n DataType[\"AnimationComponent\"] = \"AnimationComponent\";\n DataType[\"SpineComponent\"] = \"SpineComponent\";\n DataType[\"VideoComponent\"] = \"VideoComponent\";\n DataType[\"AudioComponent\"] = \"AudioComponent\";\n DataType[\"RichTextComponent\"] = \"RichTextComponent\";\n DataType[\"OrientationComponent\"] = \"OrientationComponent\";\n DataType[\"ShapeComponent\"] = \"ShapeComponent\";\n DataType[\"SpriteComponent\"] = \"SpriteComponent\";\n DataType[\"ParticleSystem\"] = \"ParticleSystem\";\n DataType[\"InteractComponent\"] = \"InteractComponent\";\n DataType[\"CameraController\"] = \"CameraController\";\n DataType[\"PostProcessVolume\"] = \"PostProcessVolume\";\n DataType[\"EffectComponent\"] = \"EffectComponent\";\n DataType[\"TextComponent\"] = \"TextComponent\";\n DataType[\"AnimationGraphAsset\"] = \"AnimationGraphAsset\";\n DataType[\"CompositionComponent\"] = \"CompositionComponent\";\n DataType[\"FFDComponent\"] = \"FFDComponent\";\n DataType[\"Animator\"] = \"Animator\";\n // Non-EffectObject\n DataType[\"TimelineClip\"] = \"TimelineClip\";\n})(DataType || (DataType = {}));\n","export var GeometryType;\n(function (GeometryType) {\n /**\n * Draw single points.\n */\n GeometryType[GeometryType[\"POINTS\"] = 0] = \"POINTS\";\n /**\n * Draw lines. Each vertex connects to the one after it.\n */\n GeometryType[GeometryType[\"LINES\"] = 1] = \"LINES\";\n /**\n * Draw lines. Each set of two vertices is treated as a separate line segment.\n */\n GeometryType[GeometryType[\"LINE_LOOP\"] = 2] = \"LINE_LOOP\";\n /**\n * Draw a connected group of line segments from the first vertex to the last.\n */\n GeometryType[GeometryType[\"LINE_STRIP\"] = 3] = \"LINE_STRIP\";\n /**\n * Draw triangles. Each set of three vertices creates a separate triangle.\n */\n GeometryType[GeometryType[\"TRIANGLES\"] = 4] = \"TRIANGLES\";\n /**\n * Draw a connected strip of triangles.\n */\n GeometryType[GeometryType[\"TRIANGLE_STRIP\"] = 5] = \"TRIANGLE_STRIP\";\n /**\n * Draw a connected group of triangles. Each vertex connects to the previous and the first vertex in the fan.\n */\n GeometryType[GeometryType[\"TRIANGLE_FAN\"] = 6] = \"TRIANGLE_FAN\";\n})(GeometryType || (GeometryType = {}));\nexport var VertexFormatType;\n(function (VertexFormatType) {\n VertexFormatType[VertexFormatType[\"Float16\"] = 0] = \"Float16\";\n VertexFormatType[VertexFormatType[\"Float32\"] = 1] = \"Float32\";\n VertexFormatType[VertexFormatType[\"Int8\"] = 2] = \"Int8\";\n VertexFormatType[VertexFormatType[\"Int16\"] = 3] = \"Int16\";\n VertexFormatType[VertexFormatType[\"Int32\"] = 4] = \"Int32\";\n VertexFormatType[VertexFormatType[\"UInt8\"] = 5] = \"UInt8\";\n VertexFormatType[VertexFormatType[\"UInt16\"] = 6] = \"UInt16\";\n VertexFormatType[VertexFormatType[\"UInt32\"] = 7] = \"UInt32\";\n})(VertexFormatType || (VertexFormatType = {}));\nexport var IndexFormatType;\n(function (IndexFormatType) {\n IndexFormatType[IndexFormatType[\"None\"] = -1] = \"None\";\n IndexFormatType[IndexFormatType[\"UInt8\"] = 0] = \"UInt8\";\n IndexFormatType[IndexFormatType[\"UInt16\"] = 1] = \"UInt16\";\n IndexFormatType[IndexFormatType[\"UInt32\"] = 2] = \"UInt32\";\n})(IndexFormatType || (IndexFormatType = {}));\n// BINORMAL[n]\tBinormal\tfloat4\n// BLENDINDICES[n]\t混合索引\tuint\n// BLENDWEIGHT[n]\t混合权重\tFLOAT\n// COLOR[n]\t漫射和反射颜色\tfloat4\n// NORMAL[n]\t法向矢量\tfloat4\n// POSITION[n]\t对象空间中的顶点位置。\tfloat4\n// POSITIONT\t变换的顶点位置。\tfloat4\n// PSIZE[n]\t点大小\tFLOAT\n// TANGENT[n]\t正切\tfloat4\n// TEXCOORD[n]\t纹理坐标\tfloat4\n// POSITION_BS[n]\tBlend Shape 空间中的顶点位置\tfloat4\n// NORMAL_BS[n]\tBlend Shape 空间中的法向矢量\tfloat4\n// TANGENT_BS[n]\tBlend Shape 空间中的正切矢量\tfloat4\nexport var VertexBufferSemantic;\n(function (VertexBufferSemantic) {\n VertexBufferSemantic[\"Position\"] = \"POSITION\";\n VertexBufferSemantic[\"Uv\"] = \"TEXCOORD0\";\n VertexBufferSemantic[\"Uv2\"] = \"TEXCOORD1\";\n VertexBufferSemantic[\"Normal\"] = \"NORMAL\";\n VertexBufferSemantic[\"Tangent\"] = \"TANGENT\";\n VertexBufferSemantic[\"Color\"] = \"COLOR\";\n VertexBufferSemantic[\"Joints\"] = \"JOINTS\";\n VertexBufferSemantic[\"Weights\"] = \"WEIGHTS\";\n //\n VertexBufferSemantic[\"PositionBS0\"] = \"POSITION_BS0\";\n VertexBufferSemantic[\"PositionBS1\"] = \"POSITION_BS1\";\n VertexBufferSemantic[\"PositionBS2\"] = \"POSITION_BS2\";\n VertexBufferSemantic[\"PositionBS3\"] = \"POSITION_BS3\";\n VertexBufferSemantic[\"PositionBS4\"] = \"POSITION_BS4\";\n VertexBufferSemantic[\"PositionBS5\"] = \"POSITION_BS5\";\n VertexBufferSemantic[\"PositionBS6\"] = \"POSITION_BS6\";\n VertexBufferSemantic[\"PositionBS7\"] = \"POSITION_BS7\";\n VertexBufferSemantic[\"NormalBS0\"] = \"NORMAL_BS0\";\n VertexBufferSemantic[\"NormalBS1\"] = \"NORMAL_BS1\";\n VertexBufferSemantic[\"NormalBS2\"] = \"NORMAL_BS2\";\n VertexBufferSemantic[\"NormalBS3\"] = \"NORMAL_BS3\";\n VertexBufferSemantic[\"TangentBS0\"] = \"TANGENT_BS0\";\n VertexBufferSemantic[\"TangentBS1\"] = \"TANGENT_BS1\";\n VertexBufferSemantic[\"TangentBS2\"] = \"TANGENT_BS2\";\n VertexBufferSemantic[\"TangentBS3\"] = \"TANGENT_BS3\";\n})(VertexBufferSemantic || (VertexBufferSemantic = {}));\n","import { JSONSceneVersion } from './scene';\nexport * from './type';\nexport * from './composition';\nexport * from './texture';\nexport * from './constants';\nexport * from './number-expression';\nexport * from './scene';\nexport * from './math';\nexport * from './item';\nexport * from './item/base-item';\nexport * from './item/camera-item';\nexport * from './item/composition-item';\nexport * from './item/interact-item';\nexport * from './item/null-item';\nexport * from './item/particle-item';\nexport * from './item/particle-shape';\nexport * from './item/plugin-item';\nexport * from './item/sprite-item';\nexport * from './item/spine-item';\nexport * from './item/effect-item';\nexport * from './item/text-item';\nexport * from './item/rich-text-item';\nexport * from './item/video-item';\nexport * from './item/audio-item';\nexport * from './item/model';\nexport * from './vfx-item-data';\nexport * from './animation-clip-data';\nexport * from './binary';\nexport * from './text';\nexport * from './components';\nexport * from './buitin-object-guid';\nexport * from './shape';\nexport * from './animation-graph';\nexport * from './timeline';\nexport * from './assets';\nexport * from './render-settings';\nexport * from './curve-data';\nexport * from './data-type';\nexport * from './effects-object-data';\nexport * from './material-data';\nexport * from './geometry-data';\nexport * from './shader-data';\nexport * from './effects-package-data';\nexport const LATEST_VERSION = JSONSceneVersion.LATEST;\n","/**\n * 将 Effects TextComponent 转换为 RichTextComponent,并将逐段样式编码为 markup。\n * 文本尺寸字段和 textPath 标记保留在 Effects 场景中。\n */\nimport { DataType, type JSONScene } from '@galacean/effects-specification';\nimport type { IRColor } from '@vvfx/animation-ir';\nimport type { SVGPreservedTextData, SVGPreservedTextSpan } from '../../svg-preserved-data';\n\ninterface RewriteTextComponentsToRichTextInput {\n textDataByLayerId: ReadonlyMap<string, SVGPreservedTextData>;\n itemLayerIds: Readonly<Record<string, string>>;\n}\n\n/** IRColor[0-1] → #RRGGBBAA(markup <color> 参数,Effects toRGBA 吃 #hex)。 */\nfunction irColorToHex (c: IRColor): string {\n const h = (n: number) => Math.max(0, Math.min(255, Math.round(n * 255))).toString(16).padStart(2, '0');\n\n return `#${h(c[0])}${h(c[1])}${h(c[2])}${h(c[3])}`;\n}\n\n/** 按 IR Layer ID 应用 SVG 富文本保留数据。 */\nexport function rewriteTextComponentsToRichText (scene: JSONScene, input: RewriteTextComponentsToRichTextInput): void {\n for (const component of scene.components) {\n const c = isRecord(component) ? component : undefined;\n\n if (c?.['dataType'] !== DataType.TextComponent) { continue; }\n\n const itemRef = isRecord(c['item']) ? c['item'] : undefined;\n const itemId = typeof itemRef?.['id'] === 'string' ? itemRef['id'] : undefined;\n const layerId = itemId != null ? input.itemLayerIds[itemId] : undefined;\n const info = layerId != null ? input.textDataByLayerId.get(layerId) : undefined;\n\n if (info == null) { continue; }\n rewriteTextComponentToRichText(c, info);\n }\n}\n\nfunction isRecord (value: unknown): value is Record<string, unknown> {\n return value != null && typeof value === 'object' && !Array.isArray(value);\n}\n\n/** 将普通 TextComponent 转为 RichTextComponent。 */\nfunction rewriteTextComponentToRichText (comp: Record<string, unknown>, info: SVGPreservedTextData): void {\n comp['dataType'] = 'RichTextComponent';\n const old = isRecord(comp['options']) ? comp['options'] : undefined;\n\n if (old == null) { return; }\n\n // 保留 IR 计算得到的文本样式和尺寸。\n const irColor = readIRColor(old['textColor']);\n const irWidth = typeof old['textWidth'] === 'number' ? old['textWidth'] : undefined;\n const irHeight = typeof old['textHeight'] === 'number' ? old['textHeight'] : undefined;\n\n const newOptions: Record<string, unknown> = {\n text: encodeMarkupFromSpans(info.spans, String(old['text'] ?? ''), irColor),\n fontSize: old['fontSize'],\n fontFamily: old['fontFamily'] ?? 'sans-serif',\n textColor: irColor ?? [0, 0, 0, 1],\n fontWeight: old['fontWeight'],\n fontStyle: old['fontStyle'],\n textAlign: old['textAlign'] ?? 0,\n lineHeight: old['lineHeight'] ?? old['fontSize'],\n letterSpace: old['letterSpace'] ?? 0, // spec 字段名 letterSpace\n autoResize: 0,\n useLegacyRichText: false,\n wrapEnabled: false,\n textOverflow: 0,\n textVerticalAlign: 0,\n // 这些字段用于恢复文本尺寸。\n size: old['size'] ?? [1,1],\n textWidth: irWidth ?? old['textWidth'] ?? 1,\n textHeight: irHeight ?? old['textHeight'] ?? 1,\n };\n\n if (info.isPathText) {\n newOptions['isPathText'] = true;\n }\n\n comp['options'] = newOptions;\n // RichText 使用 autoResize。\n}\n\nfunction readIRColor (value: unknown): IRColor | undefined {\n if (!Array.isArray(value) || value.length < 4 || !value.slice(0, 4).every(isFiniteNumber)) {\n return undefined;\n }\n\n return [value[0], value[1], value[2], value[3]];\n}\n\nfunction isFiniteNumber (value: unknown): value is number {\n return typeof value === 'number' && Number.isFinite(value);\n}\n\n/** 将逐段文本样式编码为 RichText markup。\n * 样式差异使用 size、color、b、i 标签,换行使用 `\\n`;必要时显式写入文本颜色。\n */\nfunction encodeMarkupFromSpans (spans: readonly SVGPreservedTextSpan[], fallbackText: string, defaultColor?: IRColor): string {\n if (spans.length === 0) { return fallbackText; }\n const defaultColorHex = defaultColor ? irColorToHex(defaultColor) : undefined;\n const hasStyleDiff = spans.some(s => s.fontSize !== undefined || s.color !== undefined || s.bold === true || s.italic === true) || defaultColorHex !== undefined;\n const esc = (s: string) => s\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/=/g, '\\\\=')\n .replace(/</g, '\\\\<')\n .replace(/>/g, '\\\\>')\n .replace(/\\//g, '\\\\/');\n\n // 相邻且样式相同的 span 合并为一个 markup 段,使 letterSpace 覆盖整个字形 run。\n // 样式不同或换行时保留段边界;dy、旋转等不属于 markup 能表达的属性。\n const effColor = (s: SVGPreservedTextSpan): string | undefined => s.color ?? defaultColorHex;\n const effStyleKey = (s: SVGPreservedTextSpan): string => `${s.fontSize ?? ''}|${effColor(s) ?? ''}|${s.bold === true ? 1 : 0}|${s.italic === true ? 1 : 0}`;\n const mergedSpans: SVGPreservedTextSpan[] = [];\n\n for (const s of spans) {\n const last = mergedSpans.length > 0 ? mergedSpans[mergedSpans.length - 1] : null;\n\n if (last != null && !s.newLine && effStyleKey(last) === effStyleKey(s)) {\n last.text += s.text; // 同效样式合并文本 → Effects 单段 ls 贯穿\n } else {\n mergedSpans.push({ ...s });\n }\n }\n\n const parts: string[] = [];\n\n for (const s of mergedSpans) {\n if (!hasStyleDiff) {\n // 无样式差异时直接拼接文本,并保留换行。\n if (s.newLine) { parts.push('\\n'); }\n parts.push(s.text);\n continue;\n }\n // 将换行写入当前 markup 段。\n const text = (s.newLine ? '\\n' : '') + s.text;\n let out = esc(text);\n\n if (s.fontSize != null && s.fontSize !== '') { out = `<size=${parseInt(s.fontSize, 10)}>${out}</size>`; }\n // 优先使用逐段颜色,缺省时使用 text 级颜色。\n const colorHex = s.color ?? defaultColorHex;\n\n if (colorHex != null && colorHex !== '') { out = `<color=${colorHex}>${out}</color>`; }\n if (s.bold === true) { out = `<b>${out}</b>`; } // per-span 粗体(整段字重由 options.fontWeight 承载,这里只标与 normal 不同的粗体段)\n if (s.italic === true) { out = `<i>${out}</i>`; } // per-span 斜体\n parts.push(out);\n }\n\n return parts.join('');\n}\n","import type { IRBezierPath } from '@vvfx/animation-ir';\nimport type { SVGPreservedShapeAnimation } from '../svg-preserved-data';\n\nexport function normalizeShapeAnimationForGE (animation: SVGPreservedShapeAnimation): SVGPreservedShapeAnimation | undefined {\n const keyframes = animation.keyframes;\n const maxPathCount = Math.max(0, ...keyframes.map(keyframe => keyframe.paths.length));\n\n if (maxPathCount === 0 || (maxPathCount > 1 && keyframes.some(keyframe => keyframe.paths.length !== maxPathCount))) {\n return undefined;\n }\n const maxPointCounts = Array.from({ length: maxPathCount }, (_, pathIndex) => Math.max(\n 0,\n ...keyframes.map(keyframe => keyframe.paths[pathIndex]?.points.length ?? 0),\n ));\n\n if (maxPointCounts.some(count => count === 0)) { return undefined; }\n const needsPadding = keyframes.some(keyframe => keyframe.paths.length !== maxPathCount\n || keyframe.paths.some((path, pathIndex) => path.points.length !== maxPointCounts[pathIndex]));\n\n if (!needsPadding) { return animation; }\n const templatePath = keyframes.flatMap(keyframe => keyframe.paths)[0];\n const fallbackPoint = templatePath?.points[0] ?? { x: 0, y: 0 };\n const fallbackClosed = templatePath?.closed ?? false;\n\n return {\n ...animation,\n keyframes: keyframes.map(keyframe => ({\n ...keyframe,\n paths: Array.from({ length: maxPathCount }, (_, pathIndex) => {\n const path = keyframe.paths[pathIndex];\n\n return path == null\n ? createDegeneratePath(maxPointCounts[pathIndex], fallbackPoint, fallbackClosed)\n : padPath(path, maxPointCounts[pathIndex]);\n }),\n })),\n };\n}\n\nfunction createDegeneratePath (\n pointCount: number,\n point: { x: number; y: number },\n closed: boolean,\n): IRBezierPath {\n return {\n closed,\n points: Array.from({ length: pointCount }, () => ({ ...point })),\n inTangents: Array.from({ length: pointCount }, () => ({ x: 0, y: 0 })),\n outTangents: Array.from({ length: pointCount }, () => ({ x: 0, y: 0 })),\n };\n}\n\nfunction padPath (path: SVGPreservedShapeAnimation['keyframes'][number]['paths'][number], pointCount: number): IRBezierPath {\n const lastPoint = path.points.at(-1) ?? { x: 0, y: 0 };\n const missingCount = pointCount - path.points.length;\n\n if (missingCount <= 0) {\n return {\n ...path,\n points: [...path.points],\n inTangents: [...path.inTangents],\n outTangents: [...path.outTangents],\n };\n }\n\n return {\n ...path,\n points: [\n ...path.points,\n ...Array.from({ length: missingCount }, () => ({ ...lastPoint })),\n ],\n inTangents: [\n ...path.inTangents,\n ...Array.from({ length: missingCount }, () => ({ x: 0, y: 0 })),\n ],\n outTangents: [\n ...path.outTangents,\n ...Array.from({ length: missingCount }, () => ({ x: 0, y: 0 })),\n ],\n };\n}\n","import type {\n IRAnimatedProperty, IRScene, IRKeyframe, IRPropertyValue, IRTransform,\n} from '@vvfx/animation-ir';\nimport type { SVGPreservedPaintAnimation, SVGPreservedShapeAnimation } from '../svg-preserved-data';\nimport { normalizeShapeAnimationForGE } from './normalize-shape-animation';\n\nfunction keyframeValuesDiffer (a: unknown, b: unknown): boolean {\n if (Array.isArray(a) && Array.isArray(b)) {\n return a.length !== b.length || a.some((value, index) => Math.abs(Number(value) - Number(b[index])) > 1e-9);\n }\n\n return Math.abs(Number(a) - Number(b)) > 1e-9;\n}\n\n/** 在 IR 副本/内部 paint 动画上展开 hold→跳变过渡点,避免依赖共享 ge-ir 曲线编码。 */\nfunction expandAnimatedHold<T extends IRPropertyValue> (property: IRAnimatedProperty<T> | undefined): void {\n if (property == null || property.type !== 'keyframed' || property.keyframes == null || property.keyframes.length < 2) { return; }\n const expanded: IRKeyframe<T>[] = [];\n\n for (let index = 0; index < property.keyframes.length; index++) {\n const current = property.keyframes[index];\n const next = property.keyframes[index + 1];\n\n expanded.push(current);\n if (current.hold !== true || next == null) { continue; }\n const gap = next.frame - current.frame;\n\n if (gap <= 1e-9 || !keyframeValuesDiffer(current.value, next.value)) { continue; }\n expanded.push({\n frame: next.frame - Math.min(0.001, gap / 2),\n value: current.value,\n });\n }\n\n property.keyframes = expanded;\n}\n\nfunction expandTransformHoldTransitions (transform: IRTransform): void {\n expandAnimatedHold(transform.position);\n expandAnimatedHold(transform.scale);\n expandAnimatedHold(transform.opacity);\n\n if (transform.rotation == null) { return; }\n expandAnimatedHold(transform.rotation.x);\n expandAnimatedHold(transform.rotation.y);\n expandAnimatedHold(transform.rotation.z);\n}\n\nexport function applyShapeAnimationBasePaths (\n ir: IRScene,\n animationsByLayerId: ReadonlyMap<string, SVGPreservedShapeAnimation> | undefined,\n): void {\n const composition = ir.compositions[0];\n\n if (composition == null || animationsByLayerId == null) { return; }\n\n for (const layer of composition.layers) {\n if (layer.type !== 'shape') { continue; }\n const animation = animationsByLayerId.get(layer.id);\n const normalizedAnimation = animation == null ? undefined : normalizeShapeAnimationForGE(animation);\n\n if (normalizedAnimation == null) { continue; }\n const firstPaths = normalizedAnimation.keyframes[0]?.paths;\n\n if (firstPaths == null || firstPaths.length === 0) { continue; }\n const shape = layer.content.shapes[0];\n\n if (shape == null || shape.primitiveType !== 'custom') { continue; }\n shape.customPaths = firstPaths;\n }\n}\n\n/** convertIRToGE 用 IR 副本展开 hold 过渡点,result.ir 仍保留解析原始关键帧。 */\nexport function expandIRHoldTransitions (ir: IRScene): IRScene {\n const expanded = structuredClone(ir);\n\n for (const layer of expanded.compositions[0].layers ?? []) {\n if (layer.transform != null) {\n expandTransformHoldTransitions(layer.transform);\n }\n }\n\n return expanded;\n}\n\n/** applyShapePaintAnimation 消费的 paint 动画属性同样展开 hold 过渡点(内部 sink,不外露)。 */\nexport function expandPaintAnimationHoldKeyframes (map: Map<string, SVGPreservedPaintAnimation[]>): void {\n for (const entries of map.values()) {\n for (const entry of entries) {\n switch (entry.kind) {\n case 'opacity':\n expandAnimatedHold(entry.opacity);\n\n break;\n case 'solid-color':\n case 'gradient-stop-color':\n expandAnimatedHold(entry.color);\n\n break;\n case 'stroke-width':\n expandAnimatedHold(entry.width);\n\n break;\n case 'context':\n expandAnimatedHold(entry.geometryScale);\n\n break;\n }\n }\n }\n}\n","import type { FontDefine, JSONScene } from '@galacean/effects-specification';\n\n/** 将调用方提供的字体定义写入 Effects Runtime 场景。 */\nexport function applyFonts (scene: JSONScene, fonts?: readonly { fontFamily: string; fontURL: string }[]): void {\n if (fonts == null || fonts.length === 0) { return; }\n const definitions: FontDefine[] = fonts.map(f => ({\n fontFamily: f.fontFamily,\n fontURL: f.fontURL,\n }));\n\n scene.fonts = definitions;\n}\n","import type { JSONScene } from '@galacean/effects-specification';\nimport { get2dTo3dRatio } from '@vvfx/ge-ir';\n\nfunction isRecord (value: unknown): value is Record<string, unknown> {\n return value != null && typeof value === 'object' && !Array.isArray(value);\n}\n\n/** 修正 ge-ir 2D→3D 坐标映射后的 SVG 归一化渐变坐标。 */\nexport function restoreGradientUV (scene: JSONScene, compositionWidth: number, compositionHeight: number): void {\n const ratio = get2dTo3dRatio(compositionWidth, compositionHeight);\n\n if (ratio === 0) { return; }\n for (const component of scene.components) {\n if (!isRecord(component)) { continue; }\n const shapeFills = Array.isArray(component['fills'])\n ? component['fills'].filter(isRecord)\n : undefined;\n const shapeStrokes = Array.isArray(component['strokes'])\n ? component['strokes'].filter(isRecord)\n : undefined;\n\n for (const paints of [shapeFills, shapeStrokes]) {\n if (!Array.isArray(paints)) { continue; }\n\n for (const paint of paints) {\n if (paint == null || paint['startPoint'] == null) { continue; }\n\n if (isRecord(paint['startPoint']) && isRecord(paint['endPoint'])) {\n restoreUV(paint['startPoint'], ratio);\n restoreUV(paint['endPoint'], ratio);\n }\n }\n }\n }\n}\n\nfunction restoreUV (point: Record<string, unknown>, ratio: number): void {\n if (typeof point.x !== 'number' || typeof point.y !== 'number') { return; }\n point.x /= ratio;\n point.y = -point.y / ratio;\n}\n","/** 将 IR 动画关键帧编码为 Effects Bezier 曲线。 */\nimport type { IRAnimatedProperty, IRBezierHandle, IRKeyframe, IRPropertyValue } from '@vvfx/animation-ir';\nimport {\n type BezierKeyframeValue,\n BezierKeyframeType,\n} from '@galacean/effects-specification';\n\n/** 与 ge-ir IRToGETimeContext 同构的图层可见帧区间。 */\nexport interface IRToGETimeContext {\n startFrame: number;\n endFrame: number;\n}\n\nconst DEFAULT_OUT_TANGENT: IRBezierHandle = { x: 0.33, y: 0.33 };\nconst DEFAULT_IN_TANGENT: IRBezierHandle = { x: 0.67, y: 0.67 };\n\nfunction roundNumber (value: number, digits: number): number {\n const factor = 10 ** digits;\n\n return Math.round(value * factor) / factor;\n}\n\nfunction lerp (from: number, to: number, ratio: number): number {\n return from + (to - from) * ratio;\n}\n\nfunction normalizeTime (frameTime: number, startFrame: number, endFrame: number): number {\n const frames = Math.max(1, endFrame - startFrame);\n\n return (frameTime - startFrame) / frames;\n}\n\nfunction getScalarValue (keyframe: IRKeyframe, dimensionIndex?: number): number {\n const value = keyframe.value;\n\n if (typeof value === 'number') {\n return value;\n }\n\n if (Array.isArray(value) && dimensionIndex != null) {\n return value[dimensionIndex] ?? 0;\n }\n\n return 0;\n}\n\nfunction valuesDiffer (a: unknown, b: unknown): boolean {\n if (Array.isArray(a) && Array.isArray(b)) {\n return a.length !== b.length || a.some((value, index) => Math.abs(Number(value) - Number(b[index])) > 1e-9);\n }\n\n return Math.abs(Number(a) - Number(b)) > 1e-9;\n}\n\n/**\n * Effects 曲线编码将每个曲线点作为相邻两段的端点。IR hold 后跟不同值时,只有两个原始点\n * 无法同时表达“保持到边界”和“边界处跳变”:在边界前插入一个非 hold 过渡点保持旧值,\n * 下一小段完成跳变。SVG 离散模式已插入的过渡点天然幂等(非 hold)。\n */\nfunction expandHoldTransitions<T extends IRPropertyValue> (keyframes: IRKeyframe<T>[]): IRKeyframe<T>[] {\n const expanded: IRKeyframe<T>[] = [];\n\n for (let index = 0; index < keyframes.length; index++) {\n const current = keyframes[index];\n const next = keyframes[index + 1];\n\n expanded.push(current);\n\n if (current.hold !== true || next == null) { continue; }\n const gap = next.frame - current.frame;\n\n if (gap <= 1e-9 || !valuesDiffer(current.value, next.value)) { continue; }\n expanded.push({\n frame: next.frame - Math.min(0.001, gap / 2),\n value: current.value,\n });\n }\n\n return expanded;\n}\n\nfunction makeEaseOut (segment: number[]): BezierKeyframeValue {\n return [BezierKeyframeType.EASE_OUT, [\n roundNumber(segment[0], 6), roundNumber(segment[1], 6),\n roundNumber(segment[2], 6), roundNumber(segment[3], 6),\n ], BezierKeyframeType.EASE_OUT] as BezierKeyframeValue;\n}\n\nfunction makeEaseIn (previousSegment: number[]): BezierKeyframeValue {\n return [BezierKeyframeType.EASE_IN, [\n roundNumber(previousSegment[4], 6), roundNumber(previousSegment[5], 6),\n roundNumber(previousSegment[6], 6), roundNumber(previousSegment[7], 6),\n ], BezierKeyframeType.EASE_IN] as BezierKeyframeValue;\n}\n\nfunction makeEase (previousSegment: number[], currentSegment: number[]): BezierKeyframeValue {\n return [BezierKeyframeType.EASE, [\n roundNumber(previousSegment[4], 6), roundNumber(previousSegment[5], 6),\n roundNumber(previousSegment[6], 6), roundNumber(previousSegment[7], 6),\n roundNumber(currentSegment[2], 6), roundNumber(currentSegment[3], 6),\n ], BezierKeyframeType.EASE] as BezierKeyframeValue;\n}\n\nfunction serializeBezierSegments (segments: number[][]): BezierKeyframeValue[] | undefined {\n if (segments.length === 0) {\n return undefined;\n }\n\n const result: BezierKeyframeValue[] = [];\n const totalPoints = segments.length + 1;\n\n for (let i = 0; i < totalPoints; i++) {\n if (i === 0) {\n result.push(makeEaseOut(segments[0]));\n } else if (i === totalPoints - 1) {\n result.push(makeEaseIn(segments[i - 1]));\n } else {\n result.push(makeEase(segments[i - 1], segments[i]));\n }\n }\n\n return result;\n}\n\nfunction buildCurveForDimension (\n keyframes: IRKeyframe[],\n timeContext: IRToGETimeContext,\n dimensionIndex: number | undefined,\n): BezierKeyframeValue[] | undefined {\n if (keyframes.length < 2) {\n return undefined;\n }\n\n const expandedKeyframes = expandHoldTransitions(keyframes);\n const bezierCurves: number[][] = [];\n\n for (let i = 0; i < expandedKeyframes.length - 1; i++) {\n const keyframe = expandedKeyframes[i];\n const nextKeyframe = expandedKeyframes[i + 1];\n const t0 = normalizeTime(keyframe.frame, timeContext.startFrame, timeContext.endFrame);\n const t1 = normalizeTime(nextKeyframe.frame, timeContext.startFrame, timeContext.endFrame);\n const v0 = getScalarValue(keyframe, dimensionIndex);\n const endKeyframe = keyframe.endValue != null ? { ...keyframe, value: keyframe.endValue } : nextKeyframe;\n const v1 = keyframe.hold === true ? v0 : getScalarValue(endKeyframe, dimensionIndex);\n const outHandle = keyframe.hold === true\n ? { x: 0, y: 0 }\n : (keyframe.outTangent ?? DEFAULT_OUT_TANGENT);\n const inHandle = keyframe.hold === true\n ? { x: 1, y: 1 }\n : (nextKeyframe.inTangent ?? DEFAULT_IN_TANGENT);\n\n bezierCurves.push([\n t0, v0,\n lerp(t0, t1, outHandle.x), lerp(v0, v1, outHandle.y),\n lerp(t0, t1, inHandle.x), lerp(v0, v1, inHandle.y),\n t1, v1,\n ]);\n }\n\n if (bezierCurves.length === 0) {\n return undefined;\n }\n\n const firstTime = bezierCurves[0][0];\n\n if (firstTime > 0) {\n const firstValue = bezierCurves[0][1];\n\n bezierCurves.unshift([\n 0, firstValue, 0, firstValue, firstTime, firstValue, firstTime, firstValue,\n ]);\n }\n\n return serializeBezierSegments(bezierCurves);\n}\n\n/** 把 1D 动画属性编码为 Effects BezierKeyframeValue 曲线(单维外层数组)。 */\nexport function convertIRScalarKeyframesToGE (\n property: IRAnimatedProperty<number>,\n timeContext: IRToGETimeContext,\n): BezierKeyframeValue[][] | undefined {\n if (property.type !== 'keyframed' || property.keyframes == null || property.keyframes.length < 2) {\n return undefined;\n }\n\n const curve = buildCurveForDimension(property.keyframes, timeContext, undefined);\n\n return curve != null ? [curve] : undefined;\n}\n","/** SVG 专属 Effects 转换使用的 DataPath 和实体 ID 辅助。 */\nimport type { DataPath } from '@galacean/effects-specification';\n\n/** 生成 32 位十六进制 Effects 实体 ID(与 ge-ir createId 同构)。 */\nexport function createId (): string {\n const bytes = new Uint8Array(16);\n\n globalThis.crypto.getRandomValues(bytes);\n\n return Array.from(bytes, byte => byte.toString(16).padStart(2, '0')).join('');\n}\n\n/** 把 ID 包装成 Effects DataPath 引用。 */\nexport function toDataPath (id: string): DataPath {\n return { id };\n}\n","/**\n * SVG paint animation 的时间采样逻辑。\n *\n * 该模块只根据 IR animated property 计算指定帧的值,不直接修改 Effects scene。\n */\nimport type { IRAnimatedProperty, IRBezierHandle, IRColor, IRVec3 } from '@vvfx/animation-ir';\n\nfunction cubicBezierCoordinate (t: number, p1: number, p2: number): number {\n const mt = 1 - t;\n\n return 3 * mt * mt * t * p1 + 3 * mt * t * t * p2 + t * t * t;\n}\n\nfunction cubicBezierDerivative (t: number, p1: number, p2: number): number {\n const mt = 1 - t;\n\n return 3 * mt * mt * p1 + 6 * mt * t * (p2 - p1) + 3 * t * t * (1 - p2);\n}\n\n/** 按指定线性进度计算 CSS/SMIL cubic-bezier 缓动值。 */\nfunction bezierProgress (\n progress: number,\n outTangent: IRBezierHandle | undefined,\n inTangent: IRBezierHandle | undefined,\n): number {\n if (outTangent == null || inTangent == null) { return progress; }\n const x = Math.max(0, Math.min(1, progress));\n let parameter = x;\n\n for (let iteration = 0; iteration < 6; iteration++) {\n const error = cubicBezierCoordinate(parameter, outTangent.x, inTangent.x) - x;\n const derivative = cubicBezierDerivative(parameter, outTangent.x, inTangent.x);\n\n if (Math.abs(error) < 1e-7 || Math.abs(derivative) < 1e-7) { break; }\n parameter = Math.max(0, Math.min(1, parameter - error / derivative));\n }\n\n return cubicBezierCoordinate(parameter, outTangent.y, inTangent.y);\n}\n\nexport function sampleScalarProperty (\n property: IRAnimatedProperty<number>,\n frame: number,\n): number {\n if (property.type !== 'keyframed') { return property.value; }\n const keyframes = property.keyframes;\n const first = keyframes[0];\n\n if (first == null) { return 1; }\n if (frame <= first.frame) { return first.value; }\n for (let index = 0; index < keyframes.length - 1; index++) {\n const start = keyframes[index];\n const end = keyframes[index + 1];\n\n if (frame > end.frame) { continue; }\n if (start.hold === true || end.frame <= start.frame) { return start.value; }\n const linear = (frame - start.frame) / (end.frame - start.frame);\n const progress = bezierProgress(linear, start.outTangent, end.inTangent);\n const endValue = start.endValue ?? end.value;\n\n return start.value + (endValue - start.value) * progress;\n }\n\n return keyframes[keyframes.length - 1]?.value ?? 1;\n}\n\nexport function sampleVectorProperty (\n property: Extract<IRAnimatedProperty<IRVec3>, { type: 'keyframed' }>,\n frame: number,\n): IRVec3 {\n const keyframes = property.keyframes;\n const first = keyframes[0];\n\n if (first == null || frame <= first.frame) { return first?.value ?? [1, 1, 1]; }\n for (let index = 0; index < keyframes.length - 1; index++) {\n const start = keyframes[index];\n const end = keyframes[index + 1];\n\n if (frame > end.frame) { continue; }\n if (start.hold === true || end.frame <= start.frame) { return start.value; }\n const linear = (frame - start.frame) / (end.frame - start.frame);\n const progress = bezierProgress(linear, start.outTangent, end.inTangent);\n const endValue = start.endValue ?? end.value;\n\n const result: IRVec3 = [0, 0, 0];\n\n for (let channel = 0; channel < result.length; channel++) {\n result[channel] = start.value[channel] + (endValue[channel] - start.value[channel]) * progress;\n }\n\n return result;\n }\n\n return keyframes[keyframes.length - 1]?.value ?? [1, 1, 1];\n}\n\nexport function sampleColorProperty (\n property: Extract<IRAnimatedProperty<IRColor>, { type: 'keyframed' }>,\n frame: number,\n): IRColor {\n const keyframes = property.keyframes;\n const first = keyframes[0];\n\n if (first == null || frame <= first.frame) { return first?.value ?? [1, 1, 1, 1]; }\n for (let index = 0; index < keyframes.length - 1; index++) {\n const start = keyframes[index];\n const end = keyframes[index + 1];\n\n if (frame > end.frame) { continue; }\n if (start.hold === true || end.frame <= start.frame) { return start.value; }\n const linear = (frame - start.frame) / (end.frame - start.frame);\n const progress = bezierProgress(linear, start.outTangent, end.inTangent);\n const endValue = start.endValue ?? end.value;\n\n const result: IRColor = [0, 0, 0, 0];\n\n for (let channel = 0; channel < result.length; channel++) {\n result[channel] = start.value[channel] + (endValue[channel] - start.value[channel]) * progress;\n }\n\n return result;\n }\n\n return keyframes[keyframes.length - 1]?.value ?? [1, 1, 1, 1];\n}\n","import type {\n IRAnimatedProperty, IRPropertyValue, IRScene,\n} from '@vvfx/animation-ir';\nimport { IRLayerType } from '@vvfx/animation-ir';\nimport { DataType, ValueType, type EffectsObjectData, type JSONScene } from '@galacean/effects-specification';\nimport type { SVGPreservedPaintAnimation } from '../../svg-preserved-data';\nimport { convertIRScalarKeyframesToGE, type IRToGETimeContext } from '../converter/animation';\nimport { createId, toDataPath } from '../converter/data-path';\nimport { get2dTo3dRatio } from '@vvfx/ge-ir';\nimport { sampleColorProperty, sampleScalarProperty, sampleVectorProperty } from './paint-animation-sampling';\n\ntype SceneRecord = Record<string, unknown>;\n\n/** 记录 paint 动画轨道的场景资源和绑定关系。 */\ninterface PaintTrackSink {\n appendMisc (...entries: Array<SceneRecord & { id: string; dataType: string }>): void;\n pushTrack (bindingTrackId: string, componentId: string): void;\n readonly frameRate: number;\n}\n\nfunction isRecord (value: unknown): value is SceneRecord {\n return value != null && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction asRecordArray (value: unknown): SceneRecord[] {\n return Array.isArray(value) ? value.filter(isRecord) : [];\n}\n\nfunction asUnknownArray (value: unknown): unknown[] {\n return Array.isArray(value) ? value : [];\n}\n\n/** 创建写入 scene.miscs 和 timeline 绑定的 paint 轨道写入器。 */\nfunction createPaintTrackSink (\n scene: JSONScene,\n timelineTracks: unknown[],\n sceneBindings: unknown[],\n frameRate: number,\n): PaintTrackSink {\n return {\n frameRate,\n appendMisc (...entries) {\n for (const entry of entries) {\n const misc: EffectsObjectData & SceneRecord = { id: entry.id, dataType: DataType.TrackAsset };\n\n Object.assign(misc, entry);\n scene.miscs.push(misc);\n }\n },\n pushTrack (bindingTrackId, componentId) {\n timelineTracks.push(toDataPath(bindingTrackId));\n sceneBindings.push({ key: toDataPath(bindingTrackId), value: toDataPath(componentId) });\n },\n };\n}\n\n/** 将颜色动画拆分为四个通道。 */\nfunction colorChannelCurves (property: Extract<IRAnimatedProperty<[number, number, number, number]>, { type: 'keyframed' }>, timeContext: IRToGETimeContext) {\n const colorKeyframes = property.keyframes;\n const makeColorCurve = (channel: number) => convertIRScalarKeyframesToGE({\n type: 'keyframed',\n keyframes: colorKeyframes.map(({ value, endValue, ...keyframe }) => ({\n ...keyframe,\n value: value[channel] ?? 0,\n ...(endValue != null && { endValue: endValue[channel] ?? 0 }),\n })),\n }, timeContext)?.[0];\n\n return [0, 1, 2, 3].map(makeColorCurve);\n}\n\ntype KeyframedProperty<T extends IRPropertyValue> = Extract<IRAnimatedProperty<T>, { type: 'keyframed' }>;\n\nfunction mapKeyframedProperty<T extends IRPropertyValue, U extends IRPropertyValue> (\n property: KeyframedProperty<T>,\n mapValue: (value: T) => U,\n): KeyframedProperty<U> {\n return {\n type: 'keyframed',\n keyframes: property.keyframes.map(({ value, endValue, ...keyframe }) => ({\n ...keyframe,\n value: mapValue(value),\n ...(endValue != null && { endValue: mapValue(endValue) }),\n })),\n };\n}\n\n/** 逐帧时间区间(秒):delay=图层起点/帧率,duration=可见时长/帧率。 */\nfunction clipTimeRange (timeContext: IRToGETimeContext, frameRate: number) {\n return {\n delay: timeContext.startFrame / frameRate,\n duration: (timeContext.endFrame - timeContext.startFrame) / frameRate,\n };\n}\n\n/** 把图层可见帧区间内的整数帧加入采样集合(paint 动画按 composition 帧逐帧采样,保留 SMIL 缓动中间值)。 */\nfunction addFramesInRange (frames: Set<number>, timeContext: IRToGETimeContext): void {\n for (let frame = Math.ceil(timeContext.startFrame); frame <= Math.floor(timeContext.endFrame); frame++) {\n frames.add(frame);\n }\n}\n\n/** 把采样集合压缩成图层可见区间内升序去重的帧序列,供逐帧采样逐帧建 keyframes。 */\nfunction sortFramesInRange (frames: Set<number>, timeContext: IRToGETimeContext): number[] {\n return Array.from(frames)\n .filter(frame => frame >= timeContext.startFrame && frame <= timeContext.endFrame)\n .sort((a, b) => a - b);\n}\n\n/** 写一条直接挂在组件上的颜色轨道(沿 path 寻址,如渐变 stop color),不含 MaterialTrack。 */\nfunction appendDirectColorTrack (\n sink: PaintTrackSink, componentId: string, timeContext: IRToGETimeContext,\n path: string, property: IRAnimatedProperty<[number, number, number, number]>,\n): void {\n if (property.type !== 'keyframed' || property.keyframes.length < 2) { return; }\n const curves = colorChannelCurves(property, timeContext);\n\n if (curves.some(curve => curve == null)) { return; }\n const { delay, duration } = clipTimeRange(timeContext, sink.frameRate);\n const bindingTrackId = createId();\n const colorTrackId = createId();\n const colorAssetId = createId();\n\n sink.appendMisc(\n {\n id: colorAssetId,\n dataType: 'ColorPropertyPlayableAsset',\n curveData: [ValueType.COLOR_CURVE, curves.map(curve => [ValueType.BEZIER_CURVE, curve])],\n },\n {\n id: colorTrackId,\n dataType: 'ColorPropertyTrack',\n path,\n children: [],\n clips: [{ start: delay, duration, endBehavior: 0, asset: toDataPath(colorAssetId) }],\n },\n {\n id: bindingTrackId,\n dataType: 'ObjectBindingTrack',\n children: [toDataPath(colorTrackId)],\n clips: [],\n },\n );\n sink.pushTrack(bindingTrackId, componentId);\n}\n\n/** 写入材质颜色轨道。 */\nfunction appendMaterialColorTrack (\n sink: PaintTrackSink, componentId: string, timeContext: IRToGETimeContext,\n materialIndex: number, property: IRAnimatedProperty<[number, number, number, number]>,\n): void {\n if (property.type !== 'keyframed' || property.keyframes.length < 2) { return; }\n const curves = colorChannelCurves(property, timeContext);\n\n if (curves.some(curve => curve == null)) { return; }\n const { delay, duration } = clipTimeRange(timeContext, sink.frameRate);\n const bindingTrackId = createId();\n const materialTrackId = createId();\n const colorTrackId = createId();\n const colorAssetId = createId();\n\n sink.appendMisc(\n {\n id: colorAssetId,\n dataType: 'ColorPropertyPlayableAsset',\n curveData: [ValueType.COLOR_CURVE, curves.map(curve => [ValueType.BEZIER_CURVE, curve])],\n },\n {\n id: colorTrackId,\n dataType: 'ColorPropertyTrack',\n path: 'colors._Color',\n children: [],\n clips: [{ start: delay, duration, endBehavior: 0, asset: toDataPath(colorAssetId) }],\n },\n {\n id: materialTrackId,\n dataType: 'MaterialTrack',\n index: materialIndex,\n children: [toDataPath(colorTrackId)],\n clips: [],\n },\n {\n id: bindingTrackId,\n dataType: 'ObjectBindingTrack',\n children: [toDataPath(materialTrackId)],\n clips: [],\n },\n );\n sink.pushTrack(bindingTrackId, componentId);\n}\n\n/** 写一条 stroke-width 浮点轨道(path='strokeWidth')。供 geometry scale × stroke-width 补偿分支调用。 */\nfunction appendFloatPropertyTrack (\n sink: PaintTrackSink, componentId: string, timeContext: IRToGETimeContext,\n property: IRAnimatedProperty<number>,\n): void {\n if (property.type !== 'keyframed' || property.keyframes.length < 2) { return; }\n const curve = convertIRScalarKeyframesToGE(property, timeContext)?.[0];\n\n if (curve == null) { return; }\n const { delay, duration } = clipTimeRange(timeContext, sink.frameRate);\n const bindingTrackId = createId();\n const propertyTrackId = createId();\n const propertyAssetId = createId();\n\n sink.appendMisc(\n {\n id: propertyAssetId,\n dataType: 'FloatPropertyPlayableAsset',\n curveData: [ValueType.BEZIER_CURVE, curve],\n },\n {\n id: propertyTrackId,\n dataType: 'FloatPropertyTrack',\n path: 'strokeWidth',\n children: [],\n clips: [{ start: delay, duration, endBehavior: 0, asset: toDataPath(propertyAssetId) }],\n },\n {\n id: bindingTrackId,\n dataType: 'ObjectBindingTrack',\n children: [toDataPath(propertyTrackId)],\n clips: [],\n },\n );\n sink.pushTrack(bindingTrackId, componentId);\n}\n\nexport function applyShapePaintAnimation (\n scene: JSONScene,\n ir: IRScene,\n paintAnimationByLayerIndex: ReadonlyMap<string, readonly SVGPreservedPaintAnimation[]>,\n): void {\n const miscs = asRecordArray(scene.miscs);\n const itemRecords = asRecordArray(scene.items);\n const componentRecords = asRecordArray(scene.components);\n const timelineAsset = miscs.find(misc => misc['dataType'] === 'TimelineAsset');\n const compositionComponent = componentRecords.find(component => component['dataType'] === 'CompositionComponent');\n const timelineTracks = timelineAsset?.['tracks'];\n const sceneBindings = compositionComponent?.['sceneBindings'];\n\n if (!Array.isArray(timelineTracks) || !Array.isArray(sceneBindings)) { return; }\n const composition = ir.compositions[0];\n\n if (composition == null) { return; }\n const paintTrackSink = createPaintTrackSink(scene, timelineTracks, sceneBindings, composition.frameRate);\n const exactShapeItemIndexes = new Map<string, number[]>();\n\n itemRecords.forEach((item, index) => {\n if (item['type'] !== 'shape') { return; }\n const name = String(item['name'] ?? '');\n const indexes = exactShapeItemIndexes.get(name) ?? [];\n\n indexes.push(index);\n exactShapeItemIndexes.set(name, indexes);\n });\n\n for (const layer of composition.layers) {\n if (layer.type !== IRLayerType.Shape) { continue; }\n // 按 layer→item 绑定顺序消费每个 shape,避免同名元素错配。\n const exactIndexes = exactShapeItemIndexes.get(layer.name ?? '');\n const baseItemIndex = exactIndexes?.shift();\n const opacity = layer.transform?.opacity;\n const paintEntries = paintAnimationByLayerIndex.get(layer.id) ?? [];\n const paintContext = paintEntries.find(\n (entry): entry is Extract<SVGPreservedPaintAnimation, { kind: 'context' }> => entry.kind === 'context',\n );\n const paintAnimations = paintEntries.filter(\n (entry): entry is Exclude<SVGPreservedPaintAnimation, { kind: 'context' }> => entry.kind !== 'context',\n );\n const animatedLayerOpacity = opacity?.type === 'keyframed' && opacity.keyframes.length >= 2 ? opacity : undefined;\n\n if (animatedLayerOpacity == null && paintAnimations.length === 0 && paintContext?.geometryScale == null) { continue; }\n const timeContext = { startFrame: layer.time.inFrame, endFrame: layer.time.outFrame };\n // 按 IR 与 Effects 的 bottom-first 顺序匹配同名 Shape item。\n\n if (baseItemIndex == null) { continue; }\n const layerItems = [itemRecords[baseItemIndex]];\n\n for (let index = baseItemIndex - 1; index >= 0; index--) {\n const candidate = itemRecords[index];\n const candidateName = String(candidate['name'] ?? '');\n\n if (candidate['type'] !== 'shape' || !candidateName.startsWith(`${layer.name}_shape_`)) { break; }\n layerItems.push(candidate);\n }\n\n for (const item of layerItems) {\n const componentRefs = asRecordArray(item['components']);\n\n for (const componentRef of componentRefs) {\n const componentId = componentRef['id'];\n\n if (typeof componentId !== 'string') { continue; }\n const component = componentRecords.find(candidate => candidate['id'] === componentId);\n\n if (component?.['dataType'] !== 'ShapeComponent') { continue; }\n const fills = asRecordArray(component['fills']);\n const strokes = asRecordArray(component['strokes']);\n const paints = fills.concat(strokes);\n const materialCount = Math.max(1, paints.length);\n\n for (let materialIndex = 0; materialIndex < materialCount; materialIndex++) {\n const paintTarget = materialIndex < fills.length ? 'fill' : 'stroke';\n const paintIndex = materialIndex < fills.length ? materialIndex : materialIndex - fills.length;\n const paint = paints[materialIndex];\n const paintAnimation = paintAnimations.findLast(\n (animation): animation is Extract<SVGPreservedPaintAnimation, { kind: 'opacity' }> => (\n animation.kind === 'opacity' && animation.target === paintTarget\n ),\n );\n const solidColorAnimation = paintAnimations.findLast(\n (animation): animation is Extract<SVGPreservedPaintAnimation, { kind: 'solid-color' }> => (\n animation.kind === 'solid-color' && animation.target === paintTarget\n ),\n );\n\n if (solidColorAnimation?.color.type === 'keyframed' && solidColorAnimation.color.keyframes.length >= 2) {\n const colorAnimation = solidColorAnimation.color;\n const alphaProperty = paintAnimation?.opacity ?? animatedLayerOpacity;\n const staticAlphaMultiplier = paintContext == null\n ? 1\n : alphaProperty == null\n ? paintContext.paintOpacity[paintTarget] * paintContext.staticElementOpacity\n : paintAnimation != null\n ? paintContext.staticElementOpacity\n : paintContext.paintOpacity[paintTarget] * paintContext.layerOpacityMultiplier;\n const frames = new Set(colorAnimation.keyframes.map(keyframe => keyframe.frame));\n\n if (alphaProperty?.type === 'keyframed') {\n for (const keyframe of alphaProperty.keyframes) { frames.add(keyframe.frame); }\n }\n // 在 composition 帧上采样 SMIL 缓动值。\n addFramesInRange(frames, timeContext);\n const colorProperty: IRAnimatedProperty<[number, number, number, number]> = {\n type: 'keyframed',\n keyframes: sortFramesInRange(frames, timeContext).map(frame => {\n const color = sampleColorProperty(colorAnimation, frame);\n const opacity = alphaProperty == null ? 1 : sampleScalarProperty(alphaProperty, frame);\n\n return {\n frame,\n value: [color[0], color[1], color[2], color[3] * opacity * staticAlphaMultiplier],\n };\n }),\n };\n\n appendMaterialColorTrack(paintTrackSink, componentId, timeContext, materialIndex, colorProperty);\n continue;\n }\n const alphaProperty = paintAnimation?.opacity ?? animatedLayerOpacity;\n\n if (alphaProperty == null || alphaProperty.type !== 'keyframed' || alphaProperty.keyframes.length < 2) { continue; }\n const gradientStops = paint?.['gradientStops'];\n\n if (Array.isArray(gradientStops) && Array.isArray(gradientStops[1]) && paintContext != null) {\n const collectionPath = paintTarget === 'fill' ? 'fills' : 'strokes';\n const stopColorAlpha = paintContext.gradientStopColorAlpha[paintTarget];\n const alphaMultiplier = paintAnimation != null\n ? paintContext.staticElementOpacity\n : paintContext.paintOpacity[paintTarget] * paintContext.layerOpacityMultiplier;\n const stops = asUnknownArray(gradientStops[1]);\n\n for (let stopIndex = 0; stopIndex < stops.length; stopIndex++) {\n const stop: unknown = stops[stopIndex];\n\n if (!Array.isArray(stop) || stop.length < 5) { continue; }\n const alphaScale = (stopColorAlpha[stopIndex] ?? Number(stop[4] ?? 1)) * alphaMultiplier;\n const colorProperty = mapKeyframedProperty(alphaProperty, value => [\n Number(stop[1]), Number(stop[2]), Number(stop[3]), value * alphaScale,\n ] as [number, number, number, number]);\n\n appendDirectColorTrack(\n paintTrackSink, componentId, timeContext,\n `${collectionPath}.${paintIndex}.gradientStops.stops.${stopIndex}.color`,\n colorProperty,\n );\n }\n continue;\n }\n const color = isRecord(paint?.['color']) ? paint['color'] : undefined;\n const baseColor = [\n Number(color?.['r'] ?? 1),\n Number(color?.['g'] ?? 1),\n Number(color?.['b'] ?? 1),\n Number(color?.['a'] ?? 1),\n ];\n const alphaBase = paintContext != null\n ? (paintAnimation != null\n ? paintContext.solidColorAlpha[paintTarget] * paintContext.staticElementOpacity\n : paintContext.solidColorAlpha[paintTarget]\n * paintContext.paintOpacity[paintTarget]\n * paintContext.layerOpacityMultiplier)\n : paintAnimation?.alphaBase ?? baseColor[3];\n // alpha 动画也通过 MaterialTrack 写入。\n const colorProperty = mapKeyframedProperty(alphaProperty, value => [\n baseColor[0], baseColor[1], baseColor[2], value * alphaBase,\n ] as [number, number, number, number]);\n\n appendMaterialColorTrack(paintTrackSink, componentId, timeContext, materialIndex, colorProperty);\n }\n\n for (const paintAnimation of paintAnimations) {\n if (paintAnimation.kind !== 'gradient-stop-color') { continue; }\n const paintCollection = paintAnimation.target === 'fill' ? fills : strokes;\n const paint = paintCollection[paintAnimation.paintIndex];\n const gradientStops = paint?.['gradientStops'];\n\n if (!Array.isArray(gradientStops) || !Array.isArray(gradientStops[1])) { continue; }\n const stops = asUnknownArray(gradientStops[1]);\n const stop: unknown = stops[paintAnimation.stopIndex];\n\n const colorProperty = paintAnimation.color;\n\n if (!Array.isArray(stop) || stop.length < 5 || colorProperty.type !== 'keyframed' || colorProperty.keyframes.length < 2) {\n continue;\n }\n const collectionPath = paintAnimation.target === 'fill' ? 'fills' : 'strokes';\n\n appendDirectColorTrack(\n paintTrackSink, componentId, timeContext,\n `${collectionPath}.${paintAnimation.paintIndex}.gradientStops.stops.${paintAnimation.stopIndex}.color`,\n colorProperty,\n );\n }\n\n const strokeWidthAnimation = paintAnimations.findLast(\n (animation): animation is Extract<SVGPreservedPaintAnimation, { kind: 'stroke-width' }> => animation.kind === 'stroke-width',\n );\n const geometryScale = paintContext?.geometryScale;\n const hasAnimatedGeometryScale = geometryScale?.type === 'keyframed' && geometryScale.keyframes.length >= 2;\n const hasAnimatedStrokeWidth = strokeWidthAnimation?.width.type === 'keyframed' && strokeWidthAnimation.width.keyframes.length >= 2;\n const shape = layer.content?.shapes?.[0];\n const baseStrokeWidth = shape?.strokes[0]?.width;\n\n if (strokes.length > 0 && baseStrokeWidth != null && (hasAnimatedGeometryScale || hasAnimatedStrokeWidth)) {\n const ratio = get2dTo3dRatio(composition.width, composition.height);\n const frames = new Set<number>();\n\n addFramesInRange(frames, timeContext);\n for (const keyframe of (geometryScale?.type === 'keyframed' ? geometryScale.keyframes : [])) { frames.add(keyframe.frame); }\n for (const keyframe of (strokeWidthAnimation?.width.type === 'keyframed' ? strokeWidthAnimation.width.keyframes : [])) { frames.add(keyframe.frame); }\n\n const property: IRAnimatedProperty<number> = {\n type: 'keyframed',\n keyframes: sortFramesInRange(frames, timeContext).map(frame => {\n const authoredWidth = strokeWidthAnimation == null\n ? baseStrokeWidth\n : sampleScalarProperty(strokeWidthAnimation.width, frame);\n const geometryValue = geometryScale?.type === 'keyframed'\n ? sampleVectorProperty(geometryScale, frame)\n : [1, 1, 1];\n const geometryFactor = Math.sqrt(Math.abs(geometryValue[0] * geometryValue[1]));\n const compensatedWidth = geometryFactor > 1e-9 ? authoredWidth / geometryFactor : 0;\n\n return { frame, value: compensatedWidth * ratio };\n }),\n };\n\n appendFloatPropertyTrack(paintTrackSink, componentId, timeContext, property);\n }\n }\n }\n }\n}\n","import type { IRAnimatedProperty, IRKeyframe, IRScene } from '@vvfx/animation-ir';\nimport { DataType, ShapePrimitiveType, type JSONScene, ValueType } from '@galacean/effects-specification';\nimport type { SVGPreservedShapeAnimation } from '../../svg-preserved-data';\nimport { convertIRScalarKeyframesToGE, type IRToGETimeContext } from '../converter/animation';\nimport { createId, toDataPath } from '../converter/data-path';\nimport { get2dTo3dRatio } from '@vvfx/ge-ir';\nimport { normalizeShapeAnimationForGE } from '../normalize-shape-animation';\n\ninterface SceneRecord {\n id?: string;\n dataType?: string;\n [key: string]: unknown;\n}\n\nexport function applyShapeGeometryAnimations (\n scene: JSONScene,\n ir: IRScene,\n animationsByLayerId: ReadonlyMap<string, SVGPreservedShapeAnimation> | undefined,\n): void {\n const composition = ir.compositions[0];\n const timelineAsset = asRecordArray(scene.miscs).find(misc => misc.dataType === DataType.TimelineAsset);\n const compositionComponent = asRecordArray(scene.components).find(component => component.dataType === DataType.CompositionComponent);\n const timelineTracks = timelineAsset?.['tracks'];\n const sceneBindings = compositionComponent?.['sceneBindings'];\n\n if (composition == null || animationsByLayerId == null || !Array.isArray(timelineTracks) || !Array.isArray(sceneBindings)) { return; }\n const itemRecords = asRecordArray(scene.items);\n const componentRecords = asRecordArray(scene.components);\n const shapeItemsByName = new Map<string, SceneRecord[]>();\n\n for (const item of itemRecords) {\n const name = typeof item['name'] === 'string' ? item['name'] : '';\n const items = shapeItemsByName.get(name) ?? [];\n\n items.push(item);\n shapeItemsByName.set(name, items);\n }\n const ratio = get2dTo3dRatio(composition.width, composition.height);\n\n for (const layer of composition.layers) {\n const item = takeLayerItem(layer.name ?? '', layer.type === 'shape', shapeItemsByName, componentRecords);\n\n if (layer.type !== 'shape') { continue; }\n const animation = animationsByLayerId.get(layer.id);\n const normalizedAnimation = animation == null ? undefined : normalizeShapeAnimationForGE(animation);\n\n if (normalizedAnimation == null || normalizedAnimation.keyframes.length < 2) { continue; }\n if (item == null || typeof item.id !== 'string') { continue; }\n const componentMatch = findShapeComponent(item, componentRecords);\n\n if (componentMatch == null || typeof componentMatch.component.id !== 'string') { continue; }\n const { component, componentIndex } = componentMatch;\n\n if (component['type'] !== ShapePrimitiveType.Custom) { continue; }\n const basePoints = readPointArray(component['points']);\n const baseInTangents = readPointArray(component['easingIns']);\n const baseOutTangents = readPointArray(component['easingOuts']);\n const animatedPoints = normalizedAnimation.keyframes.map(keyframe => flattenPaths(keyframe.paths));\n\n if (!hasPointTopology(animatedPoints, basePoints.length)\n || !hasPointTopology(animatedPoints.map(value => value.map(point => point.inTangent)), baseInTangents.length)\n || !hasPointTopology(animatedPoints.map(value => value.map(point => point.outTangent)), baseOutTangents.length)) {\n continue;\n }\n const timeContext: IRToGETimeContext = {\n startFrame: layer.time.inFrame,\n endFrame: layer.time.outFrame,\n };\n const prefix = `components.${componentIndex}.shape`;\n\n for (let pointIndex = 0; pointIndex < basePoints.length; pointIndex++) {\n appendCoordinateTrack(\n scene,\n timelineTracks,\n sceneBindings,\n item.id,\n `${prefix}.points.${pointIndex}.x`,\n normalizedAnimation.keyframes.map(keyframe => ({\n frame: keyframe.time * composition.frameRate,\n value: keyframe.paths.flatMap(path => path.points)[pointIndex].x * ratio,\n })),\n timeContext,\n composition.frameRate,\n );\n appendCoordinateTrack(\n scene,\n timelineTracks,\n sceneBindings,\n item.id,\n `${prefix}.points.${pointIndex}.y`,\n normalizedAnimation.keyframes.map(keyframe => ({\n frame: keyframe.time * composition.frameRate,\n value: -keyframe.paths.flatMap(path => path.points)[pointIndex].y * ratio,\n })),\n timeContext,\n composition.frameRate,\n );\n appendCoordinateTrack(\n scene,\n timelineTracks,\n sceneBindings,\n item.id,\n `${prefix}.easingIns.${pointIndex}.x`,\n normalizedAnimation.keyframes.map(keyframe => ({\n frame: keyframe.time * composition.frameRate,\n value: keyframe.paths.flatMap(path => path.inTangents)[pointIndex].x * ratio,\n })),\n timeContext,\n composition.frameRate,\n );\n appendCoordinateTrack(\n scene,\n timelineTracks,\n sceneBindings,\n item.id,\n `${prefix}.easingIns.${pointIndex}.y`,\n normalizedAnimation.keyframes.map(keyframe => ({\n frame: keyframe.time * composition.frameRate,\n value: -keyframe.paths.flatMap(path => path.inTangents)[pointIndex].y * ratio,\n })),\n timeContext,\n composition.frameRate,\n );\n appendCoordinateTrack(\n scene,\n timelineTracks,\n sceneBindings,\n item.id,\n `${prefix}.easingOuts.${pointIndex}.x`,\n normalizedAnimation.keyframes.map(keyframe => ({\n frame: keyframe.time * composition.frameRate,\n value: keyframe.paths.flatMap(path => path.outTangents)[pointIndex].x * ratio,\n })),\n timeContext,\n composition.frameRate,\n );\n appendCoordinateTrack(\n scene,\n timelineTracks,\n sceneBindings,\n item.id,\n `${prefix}.easingOuts.${pointIndex}.y`,\n normalizedAnimation.keyframes.map(keyframe => ({\n frame: keyframe.time * composition.frameRate,\n value: -keyframe.paths.flatMap(path => path.outTangents)[pointIndex].y * ratio,\n })),\n timeContext,\n composition.frameRate,\n );\n }\n appendCoordinateTrack(\n scene,\n timelineTracks,\n sceneBindings,\n item.id,\n `components.${componentIndex}.shapeDirty`,\n [\n { frame: layer.time.inFrame, value: 1 },\n { frame: layer.time.outFrame, value: 1 },\n ],\n timeContext,\n composition.frameRate,\n );\n }\n}\n\nfunction takeLayerItem (\n name: string,\n isShapeLayer: boolean,\n itemsByName: Map<string, SceneRecord[]>,\n components: SceneRecord[],\n): SceneRecord | undefined {\n const candidates = itemsByName.get(name);\n\n if (candidates == null) { return undefined; }\n const candidateIndex = isShapeLayer\n ? candidates.findIndex(item => findShapeComponent(item, components) != null)\n : 0;\n\n return candidateIndex < 0 ? undefined : candidates.splice(candidateIndex, 1)[0];\n}\n\nfunction appendCoordinateTrack (\n scene: JSONScene,\n timelineTracks: unknown[],\n sceneBindings: unknown[],\n itemId: string,\n path: string,\n keyframes: IRKeyframe<number>[],\n timeContext: IRToGETimeContext,\n frameRate: number,\n): void {\n const property: IRAnimatedProperty<number> = { type: 'keyframed', keyframes };\n const curve = convertIRScalarKeyframesToGE(property, timeContext)?.[0];\n\n if (curve == null) { return; }\n const playableAssetId = createId();\n const propertyTrackId = createId();\n const bindingTrackId = createId();\n const duration = (timeContext.endFrame - timeContext.startFrame) / frameRate;\n\n appendMisc(\n scene,\n {\n id: playableAssetId,\n dataType: DataType.FloatPropertyPlayableAsset,\n curveData: [ValueType.BEZIER_CURVE, curve],\n },\n {\n id: propertyTrackId,\n dataType: DataType.FloatPropertyTrack,\n path,\n children: [],\n clips: [{\n start: timeContext.startFrame / frameRate,\n duration,\n endBehavior: 0,\n asset: toDataPath(playableAssetId),\n }],\n },\n {\n id: bindingTrackId,\n dataType: DataType.ObjectBindingTrack,\n children: [toDataPath(propertyTrackId)],\n clips: [],\n },\n );\n timelineTracks.push(toDataPath(bindingTrackId));\n sceneBindings.push({ key: toDataPath(bindingTrackId), value: toDataPath(itemId) });\n}\n\nfunction findShapeComponent (item: SceneRecord, components: SceneRecord[]): { component: SceneRecord; componentIndex: number } | undefined {\n const refs = asUnknownArray(item['components']);\n\n for (let index = 0; index < refs.length; index++) {\n const ref = refs[index];\n const componentId = isRecord(ref) && typeof ref.id === 'string' ? ref.id : undefined;\n const component = componentId == null ? undefined : components.find(candidate => candidate.id === componentId);\n\n if (component?.dataType === DataType.ShapeComponent) {\n return { component, componentIndex: index };\n }\n }\n\n return undefined;\n}\n\nfunction flattenPaths (paths: SVGPreservedShapeAnimation['keyframes'][number]['paths']): Array<{\n point: { x: number; y: number };\n inTangent: { x: number; y: number };\n outTangent: { x: number; y: number };\n}> {\n return paths.flatMap(path => path.points.map((point, index) => ({\n point,\n inTangent: path.inTangents[index],\n outTangent: path.outTangents[index],\n })));\n}\n\nfunction readPointArray (value: unknown): Array<{ x: number; y: number }> {\n return Array.isArray(value)\n ? value.filter(isRecord).map(point => ({ x: Number(point.x), y: Number(point.y) }))\n : [];\n}\n\nfunction hasPointTopology (values: Array<unknown[]>, length: number): boolean {\n return length > 0 && values.every(value => value.length === length);\n}\n\nfunction appendMisc (scene: JSONScene, ...entries: SceneRecord[]): void {\n for (const entry of entries) {\n scene.miscs.push(entry as unknown as JSONScene['miscs'][number]);\n }\n}\n\nfunction isRecord (value: unknown): value is SceneRecord {\n return value != null && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction asUnknownArray (value: unknown): unknown[] {\n return Array.isArray(value) ? value : [];\n}\n\nfunction asRecordArray (value: unknown): SceneRecord[] {\n return Array.isArray(value) ? value.filter(isRecord) : [];\n}\n","import type { IRScene } from '@vvfx/animation-ir';\nimport type { ConversionDiagnostic } from '@vvfx/animation-ir/adapter';\nimport { convertIRToGE } from '@vvfx/ge-ir';\nimport { SVG2IR_WARNING_CODES, type ConvertOptions, type ConvertResult, type SVG2IRWarning } from '../common/types';\nimport type { SVGFontDefinition, SVGPreservedData, SVGPreservedPaintAnimation } from '../svg-preserved-data';\nimport type { SVGToGEOptions, SVGToGEResult } from './types';\nimport { rewriteTextComponentsToRichText } from './post-process/rewrite-text-components';\nimport {\n applyShapeAnimationBasePaths, expandIRHoldTransitions, expandPaintAnimationHoldKeyframes,\n} from './pre-process';\nimport { applyFonts } from './post-process/apply-fonts';\nimport { restoreGradientUV } from './post-process/restore-gradient-uv';\nimport { applyShapePaintAnimation } from './post-process/apply-shape-paint-animation';\nimport { applyShapeGeometryAnimations } from './post-process/apply-shape-geometry-animation';\n\n/** 从已解析的 IR 和 SVG 保留数据生成 GE 场景。 */\nexport function assembleSVGGE(\n parsed: ConvertResult,\n options?: SVGToGEOptions,\n preservedData?: SVGPreservedData,\n): SVGToGEResult {\n const { ir, warnings } = parsed;\n const { fonts } = options ?? {};\n const irForGE = expandIRHoldTransitions(ir);\n\n if (preservedData?.shapeAnimationsByLayerId != null) {\n applyShapeAnimationBasePaths(irForGE, preservedData.shapeAnimationsByLayerId);\n }\n const exportResult = convertIRToGE(irForGE);\n const data = exportResult.scene;\n\n emitGEExportDiagnostics(exportResult.diagnostics, warnings, options?.onWarning);\n\n if (preservedData != null) {\n const paintAnimationsByLayerId = clonePaintAnimationMap(preservedData.paintAnimationsByLayerId);\n\n expandPaintAnimationHoldKeyframes(paintAnimationsByLayerId);\n\n applyShapePaintAnimation(data, ir, paintAnimationsByLayerId);\n applyShapeGeometryAnimations(data, ir, preservedData.shapeAnimationsByLayerId);\n restoreGradientUV(data, ir.compositions[0].width, ir.compositions[0].height);\n rewriteTextComponentsToRichText(data, {\n textDataByLayerId: preservedData.textDataByLayerId,\n itemLayerIds: exportResult.itemLayerIds,\n });\n }\n\n applyFonts(data, fonts);\n emitMissingFontWarnings(ir, fonts, warnings, options?.onWarning);\n\n return { data, warnings };\n}\n\nfunction clonePaintAnimationMap(\n source: ReadonlyMap<string, readonly SVGPreservedPaintAnimation[]>,\n): Map<string, SVGPreservedPaintAnimation[]> {\n return new Map(\n Array.from(\n source,\n ([layerIndex, animations]) => [layerIndex, structuredClone(animations) as SVGPreservedPaintAnimation[]] as const,\n ),\n );\n}\n\nfunction emitGEExportDiagnostics(\n diagnostics: readonly ConversionDiagnostic[],\n warnings: SVG2IRWarning[],\n onWarning: ConvertOptions['onWarning'],\n): void {\n for (const diagnostic of diagnostics) {\n const warning: SVG2IRWarning = {\n code: SVG2IR_WARNING_CODES.GE_EXPORT_DIAGNOSTIC,\n message: `[${diagnostic.code}] ${diagnostic.message}`,\n elementSelector: diagnostic.sourceId ?? diagnostic.path,\n };\n\n warnings.push(warning);\n onWarning?.(warning);\n }\n}\n\nfunction emitMissingFontWarnings(\n ir: IRScene,\n fonts: readonly SVGFontDefinition[] | undefined,\n warnings: SVG2IRWarning[],\n onWarning: ConvertOptions['onWarning'],\n): void {\n const genericFamilies = new Set([\n 'sans-serif', 'serif', 'monospace', 'cursive', 'fantasy', 'system-ui',\n 'ui-sans-serif', 'ui-serif', 'ui-monospace', 'Arial', 'Helvetica',\n ]);\n const suppliedFamilies = new Set((fonts ?? []).map(font => cleanFontName(font.fontFamily)));\n const fontAssetById = new Map(\n ir.assets.filter(asset => asset.type === 'font').map(asset => [asset.id, asset] as const),\n );\n const reported = new Set<string>();\n\n for (const composition of ir.compositions) {\n for (const layer of composition.layers) {\n if (layer.type !== 'text') { continue; }\n const family = cleanFontName(fontAssetById.get(layer.content.fontAssetId)?.family ?? '');\n\n if (family !== '' && !suppliedFamilies.has(family) && !genericFamilies.has(family) && !reported.has(family)) {\n reported.add(family);\n const warning: SVG2IRWarning = {\n code: SVG2IR_WARNING_CODES.TEXT_FONT_NOT_SUPPLIED,\n message: `文字使用的字体 \"${family}\" 未在 SVG→GE 适配器中提供字体文件,Effects Runtime 可能使用 fallback 字体。`,\n };\n\n warnings.push(warning);\n onWarning?.(warning);\n }\n }\n }\n}\n\nfunction cleanFontName(raw: string): string {\n let value = raw.trim();\n\n for (let index = 0; index < 2; index++) {\n if ((value.startsWith('\"') && value.endsWith('\"')) || (value.startsWith(\"'\") && value.endsWith(\"'\"))) {\n value = value.slice(1, -1);\n }\n value = value.split(',')[0].trim();\n }\n\n return value;\n}\n","import type { SVGSource } from '../common/types';\nimport { parseSVGToIRWithPreservedData } from '../svg2ir/convert';\nimport type { SVGPreservedData } from '../svg-preserved-data';\nimport { assembleSVGGE } from './assemble';\nimport type { SVGToGEOptions, SVGToGEResult } from './types';\n\n/** SVG→GE 显式入口。传入 preservedData 时应用 SVG 专属后处理。 */\nexport function convertSVGToGE(\n source: SVGSource,\n options?: SVGToGEOptions,\n preservedData?: SVGPreservedData,\n): SVGToGEResult {\n const { fonts: _fonts, ...parserOptions } = options ?? {};\n const parsed = parseSVGToIRWithPreservedData(source, parserOptions);\n\n return assembleSVGGE(parsed, options, preservedData);\n}\n","import type { ConvertOptions, SVGSource } from './common/types';\nimport type { SVGPreservedData } from './svg-preserved-data';\nimport { convertSVGToLayers } from './svg2layers-adapter/convert';\nimport type { SVGImageResourceLoader, SVGToLayersResult } from './svg2layers-adapter/types';\nimport { convertSVGToGE } from './svg2ge-adapter/convert';\nimport type { SVGToGEOptions, SVGToGEResult } from './svg2ge-adapter/types';\n\nexport interface SVGConversionOptions extends ConvertOptions {\n outputFormat?: 'ge' | 'layers';\n fonts?: SVGToGEOptions['fonts'];\n /** layers 图片读取回调;默认使用 fetch,已有 data URL 无需读取。 */\n loadImage?: SVGImageResourceLoader;\n}\n\nexport interface SVGToLayersOptions extends SVGConversionOptions {\n outputFormat: 'layers';\n}\n\n/** SVG 多格式输出入口,默认返回 GE 场景。 */\nexport function convertSVG(\n source: SVGSource,\n options: SVGToLayersOptions,\n preservedData?: SVGPreservedData,\n): Promise<SVGToLayersResult>;\nexport function convertSVG(\n source: SVGSource,\n options?: SVGToGEOptions & { outputFormat?: 'ge' },\n preservedData?: SVGPreservedData,\n): SVGToGEResult;\nexport function convertSVG(\n source: SVGSource,\n options?: SVGConversionOptions,\n preservedData?: SVGPreservedData,\n): SVGToGEResult | Promise<SVGToLayersResult>;\nexport function convertSVG(\n source: SVGSource,\n options?: SVGConversionOptions,\n preservedData?: SVGPreservedData,\n): SVGToGEResult | Promise<SVGToLayersResult> {\n const { outputFormat = 'ge' } = options ?? {};\n\n if (outputFormat !== 'ge' && outputFormat !== 'layers') {\n throw new TypeError('[svg2ir] outputFormat must be ge or layers.');\n }\n if (options?.outputFormat === 'layers') {\n const { outputFormat: _outputFormat, loadImage, ...parserOptions } = options;\n\n return convertSVGToLayers(source, parserOptions, loadImage, preservedData);\n }\n const { outputFormat: _outputFormat, ...geOptions } = options ?? {};\n\n return convertSVGToGE(source, geOptions, preservedData);\n}\n"],"names":["_extends","Object","assign","target","i","arguments","length","source","key","prototype","hasOwnProperty","call","apply","_set_prototype_of","o","p","setPrototypeOf","__proto__","_inherits","subClass","superClass","TypeError","create","value","writable","configurable","_instanceof","left","right","Symbol","hasInstance","_type_of","obj","_is_native_reflect_construct","result","Boolean","valueOf","Reflect","construct","_","_construct","Parent","args","Class","a","push","Constructor","Function","bind","instance","_get_prototype_of","getPrototypeOf","_is_native_function","fn","toString","indexOf","_wrap_native_super","_cache","Map","undefined","has","get","set","Wrapper","enumerable","SVG_CONVERTER_ERROR_CODES","INVALID_SVG","LAYERS_CONVERSION_FAILED","PARSE_FAIL","IR_VALIDATION_FAILED","SVG_CONVERTER_ERROR_BRAND","for","isSVGConverterErrorCode","code","values","includes","isSVGConverterErrorLike","candidate","name","SVGConverterError","message","details","defineProperty","Error","extractInternalCode","error","mapInternalCodeToConverterCode","internalCode","startsWith","mapSemanticDetailsFromInternalCode","projectionErrorCode","validationCode","normalizeToConverterError","fallbackCode","fallbackMessage","keys","mappedCode","normalizedDetails","internalErrorCode","cause","String","_array_like_to_array","arr","len","arr2","Array","_unsupported_iterable_to_array","minLen","n","slice","from","test","_create_for_of_iterator_helper_loose","allowArrayLike","it","iterator","next","isArray","done","CSS_NAMED_COLORS","mapSVGColorToIRColor","c","opacity","raw","trim","toLowerCase","hex","parseHexColor","withOpacity","rgb","parseRGBColor","hsl","parseHSLColor","named","clamp01","match","expanded","map","char","join","r","parseInt","g","b","splitFunctionalColor","components","alpha","parseRGBComponent","some","parsedAlpha","parseAlpha","hue","parseHue","saturation","parsePercentage","lightness","chroma","Math","abs","hueSector","intermediate","offset","body","slashParts","split","colorPart","part","filter","endsWith","percentage","Number","isFinite","component","degrees","PI","color","max","min","EPSILON","BEGIN_TIME_EPSILON","LINEAR_OUT_TANGENT","x","y","LINEAR_IN_TANGENT","MAX_SYNCBASE_EVENTS","parseClockValue","scalar","clock","number","unit","activeDuration","tag","duration","getAttribute","repeatRaw","repeatDurationRaw","repeatDuration","repeated","count","findAnimationById","root","id","querySelectorAll","animationTags","initialBeginTimeCaches","WeakMap","windowedBeginTimeCaches","getBeginTimeCache","comparisonDuration","cached","cache","caches","parseBeginSpecifiers","absolute","dependencies","candidateRaw","absoluteTime","syncbase","replace","event","addBeginTime","times","time","sort","buildInitialBeginSchedule","tags","specs","iteration","changed","dependency","sourceBegin","current","buildWindowedBeginSchedule","dependents","maxActiveDuration","reduce","lowerBound","queue","specifiers","list","cursor","targetTimes","resolveBeginTimes","resolveBegin","comparisonEnd","begin","indefinite","durationMissing","singleValue","tagName","buildAnimationWindows","beginTimes","totalDuration","restart","acceptedBegins","previousEnd","Infinity","windows","fill","index","naturalEnd","restartedAt","end","parseNumberList","parseRotateValue","parseTranslateValue","parseScaleValue","sx","parseValue","type","parseColorValue","parsePointValue","points","parseKeySplines","segmentCount","splines","segment","trimTrailingEmptyValues","parsePacedKeyTimes","distances","previous","squared","delta","sqrt","totalDistance","sum","distance","keyTimes","segmentDistance","parseValues","valueParser","underlyingValue","parseAll","rawValues","parsed","valuesRaw","to","parsedFrom","parsedBy","parsedTo","by","zero","valuesEqual","every","interpolateValues","ratio","cubicBezierCoordinate","t","p1","p2","inv","cubicBezierRatio","handles","outHandle","inHandle","low","high","mid","splitCubicAtRatio","out","in","parameter","p0","p3","lerpPoint","q1","r1","r2","q2","s1","q3","sampleExpandedValue","samples","calcMode","keySplines","sample","cycle","activeEndSegment","authoredTime","startTime","endTime","cycleStartTime","authoredSpan","segmentIndex","startValue","endValue","sourceIndex","clipSamplesToComparisonWindow","clipped","atZero","unshift","expandSamples","accumulate","elapsedBeforeCycle","remaining","localTime","componentIndex","accumulatedValue","normalized","findIndex","span","cycleCount","ceil","parseSetValues","parseSMILTag","beginCache","transformType","attributeName","rawDuration","parsedDuration","noDurationEvent","byOnly","explicitAdditive","additive","animationValues","calcModeRaw","isDiscreteAttribute","keyTimesRaw","intervals","cycleOffset","intervalBegin","intervalEnd","sampleStart","sampleEnd","window","interval","getSMILDuration","element","node","ownerSVGElement","maxEnd","animation","SVG2IR_WARNING_CODES","LAYERS_UNSUPPORTED_TYPE","LAYERS_UNSUPPORTED_FEATURE","LAYERS_INVALID_DATA","LAYERS_TEXT_STYLE_DROPPED","LAYERS_TEXT_BOUNDS_ESTIMATED","ELEMENT_DROPPED","STROKE_DASH_DROPPED","FILTER_DROPPED","PATTERN_DROPPED","SKEW_DROPPED","TEXT_GRADIENT_FILL_FLATTENED","TEXT_STROKE_DROPPED","TEXT_DECORATION_DROPPED","TEXT_FONT_NOT_SUPPLIED","GE_EXPORT_DIAGNOSTIC","CLIP_PATH_UNITS_DROPPED","CLIP_RULE_DROPPED","GROUP_CLIP_PATH_DROPPED","MASK_CONTENT_UNITS_DROPPED","MASK_REGION_DROPPED","MASK_TYPE_DROPPED","collectWarning","emit","elementSelector","strict","warningCode","describeElement","el","getSVGAncestorNode","IDENTITY","d","e","f","parseTransform","transform","s","fns","m","fm","parseSingleTransform","multiply","op","nums","tx","ty","sy","deg","rad","cos","sin","cx","cy","tan","transformPoint","invertSVGMatrix","det","decomposeMatrix","hypot","rotation","atan2","accumulateOpacity","parentNode","accumulateAncestors","vp","buildViewBoxMatrix","viewport","parts","rawViewBox","viewBox","minX","minY","viewBoxWidth","viewBoxHeight","outerWidth","width","parseViewportLength","outerHeight","height","preserveAspectRatio","alignment","mode","rawScaleX","rawScaleY","scale","contentWidth","contentHeight","alignX","alignY","NaN","TAU","ARC_EPS","normalizeAngle","pickCircularArc","x0","y0","x1","y1","sweep","largeArc","c1","c2","a0","a1","semicircle","matches","startAngle","angleSpan","circularArcSegment","cos0","sin0","cos1","sin1","p0x","p0y","p1x","p1y","dir","sign","t0x","t0y","t1x","t1y","k","arcToCubics","rx","ry","arcSegmentAngle","dx","dy","mx","my","h","ux","uy","nx","ny","arc","absSpan","segments","segmentAngle","seg","COMMAND_LETTERS","normalizePathCommands","options","tokens","tokenize","curX","curY","subpathStartX","subpathStartY","lastCtrlQ","lastCtrlC2","letter","cmd","tok","rel","toUpperCase","L","params","arity","PATH_COMMAND_ARITY","paramIndex","firstGroup","group","command","x2","y2","reflect","qx1","qy1","qx2","qy2","xAxisRotation","largeArcFlag","sweepFlag","M","H","V","C","S","Q","T","A","normalizedToCustomShapePaths","cmds","paths","inTangents","outTangents","closed","hasSubPath","flush","prevIdx","letterRe","RegExp","numRe","exec","segStart","lastIndex","segEnd","search","nm","localRe","parseFloat","ZERO_TANGENT","mergeClosedSubpaths","ordered","getPathBoundsArea","addPoint","point","inTangent","outTangent","anchor","path","j","maxX","maxY","collectShapeGeometry","geometry","applyShapeOwnTransform","buildShapePaths","matrix","transformPathInPlace","attrNum","buildLinearPath","buildEllipsePath","parseNumPairs","isCircle","handleScale","angle","tangent","transformed","transformVectorsInPlace","numbers","vectors","vector","transformVector","attribute","fallback","isAxisAlignedRect","pts","eps","xs","ys","uniqueX","Set","round","uniqueY","size","distPointToSegment","len2","pointInPolygon","pt","poly","pi","pj","inside","intersect","rangeCovers","bbox","pminX","pminY","pmaxX","pmaxY","maskSizeAbnormal","w","bw","bh","maskCoversFull","corners","buildClipMask","es","clipPathEl","rootEl","applyAncestorTransform","shapeEls","collectShapeChildren","shapeEl","mergedPath","containerMatrix","buildGroupMaskForG","gEl","gNode","maskAttr","maskEl","findById","rawMask","gSelfAttr","gSelf","gChain","children","firstChild","href","getAttributeNS","refEl","nextSibling","rootBySel","byDoc","ownerDocument","getElementById","querySelector","cssEscape","CSS","escape","filterReplacesSource","filterAttr","filterEl","feDescendants","firstFeIn","fe","ct","in1","in2","decorateKeyframes","keyframes","nextSample","hold","partialSegment","spline","simpleTime","authoredRatio","makeKeyframes","frameRate","mapValue","baseValue","frame","last","hasGap","endFrame","keyframeValuesEqual","ensureStrictlyIncreasingFrames","gap","bridgeWidth","keyframe","beforePrevious","boundaryFrame","available","matrixForTransformValue","toPivot","fromPivot","applyRotateSpatialTangents","baseMatrix","localCenter","start","pivotX","pivotY","radiusX","radiusY","endAngle","rotateRadius","mapVector","startRadius","endRadius","startTangent","endTangent","startKeyframe","keyframeOffset","endKeyframe","spatialOut","spatialIn","staticValue","property","subdivideFullTurn","steps","step","unwrapRotationValues","matrices","authoredDelta","expected","sampleAnimationValue","frozen","intervalSamples","SMIL_ANIMATION_TAGS","animationTargetCache","animationElementsCache","findSMILRoot","findElementById","find","readAnimationParent","parent","parentElement","matchesAnimationTarget","resolveSMILAnimationTarget","svgRoot","collectSMILAnimationElements","animations","activeIntervalBegin","frozenBegin","sampleNumericAttribute","sampledAnimations","forEach","order","sampled","readViewportDimension","axis","viewBoxValue","parseGeometryLength","reference","parseTerm","term","expression","terms","total","supportedGeometryAttributes","kind","LINE_ATTRIBUTES","isLineGeometryAttribute","collectLineTranslationAnimation","animationsByAttribute","baseValues","base","master","matchingSample","offsetX","offsetY","isTranslation","parseGeometryAnimations","supported","readLineBaseValue","canConvertLineGeometryAnimations","fromEntries","sampleGeometry","centerX","centerY","radius","scaleX","referenceWidth","scaleY","referenceHeight","collectGeometryAnimation","stage","context","translation","matrixAtTime","scaleAtTime","SMIL_TRANSFORM_OWNER_TAGS","SMIL_SHAPE_OWNER_TAGS","SMIL_GEOMETRY_ATTRIBUTES_BY_TAG","rect","circle","ellipse","polygon","polyline","use","image","lineGeometryAnimationSupportCache","supportsLineGeometryAnimations","isSolidPaintAnimation","basePaint","authoredValues","isMappedSMILAnimationElement","parentTag","hasDirectOpacityAnimation","hasAnimatedVisibility","hasAnimatedAncestorOpacity","readPresentationAttribute","inlineValue","readInlineStyleProperty","style","propertyName","expectedName","resolvedValue","declaration","separator","HORIZONTAL_LENGTH_ATTRIBUTES","VERTICAL_LENGTH_ATTRIBUTES","DIAGONAL_LENGTH_ATTRIBUTES","readSVGNumberAttribute","getAttr","getPercentageReference","concrete","readSVGStringAttribute","isSVGElementVisible","readSVGOwnOpacity","readSVGElementOpacity","readSVGViewport","SQRT2","parseConcreteLength","attrVal","v","attr","gradientElementCache","gradientNodeCache","findGradientElement","svg","findOne","gradient","findGradientNode","getGradientMidpointColor","grad","stops","parseStops","sampleStopsAt","lo","hi","range","mix","resolveGradientPaint","parseLinear","parseRadial","units","readCoord","gt","noShearNoRot","diagUniformScale","axisAlignedGrad","canBake","B","fx1","fy1","fx2","fy2","IRPaintType","LinearGradient","gradientStops","gradientStart","toUV","gradientEnd","ccx","ccy","rAbs","absRadius","fx","fy","RadialGradient","parseCoordNum","isPercent","frac","absX","absY","stopEls","offsetStr","pos","stopOpacityStr","stopOpacity","isNaN","gradientStopColorAlpha","rawPaint","child","stop","stopOpacityRaw","stopOpacityValue","stopColor","readUseTarget","readHref","xhref","readUseTranslate","buildUseMatrix","useEl","useX","useY","mAnc","selfAttr","mSelf","mXY","buildUseTransform","shape","targetMatrix","targetOpacity","position","worldCenter","z","cloneShapePaint","paint","Solid","Texture","cloneBezierPath","cloneShapeForUse","fills","strokes","stroke","primitiveType","IRShapePrimitiveType","Custom","customPaths","applyUseStyleOverrides","targetEl","merged","getRawAttr","computeShapeBBox","parseUsePaint","strokePaints","fallbackStroke","sourceStroke","cap","IRLineCap","Round","IRLineJoin","Miter","strokeWidthRaw","strokeWidth","firstStroke","strokeCap","strokeJoin","parsePaintOverride","rawOverride","opacityRawOverride","opacityAttr","opacityRaw","paintOpacity","ownRaw","targetRaw","inheritedRaw","readUseContextAttr","inheritedOpacityRaw","Rectangle","Ellipse","xRadius","yRadius","Polygon","Star","outerRadius","computeCustomBBox","applyClipMask","layer","clipMasks","cp","mc","cpRef","isClip","ref","baseMask","mask","rebased","rebaseMaskToLocal","l","rotRaw","readVec2","sc","readVec3","aw","asset","ah","dispW","dispH","originX","originY","rotVal","rot","shapeBbox","shapeElementLocalBbox","shapes","cu","channel","warnUnsupportedClipMaskFeatures","selector","read","warn","contentUnits","ruleNodes","hasUnsupportedRule","convertCircularAnnulusToEllipseStroke","hasAnimatedPaintAttribute","shouldKeepAnimatedAnnulusAsCustom","contours","getCircularContour","contour","outer","inner","radiusTolerance","centersMatch","fillRule","oppositeWinding","area","first","pop","tolerance","hasLeft","hasRight","hasTop","hasBottom","expectedHandleLength","hasAnimatedTransformAttribute","siblings","sibling","transforms","transformTypes","opacityAnimation","parseDashArray","dash","concat","patternLen","offRaw","canSynthesizeDash","ot","synthesizeDashSubpaths","onIntervals","acc","cum","totalLen","periodStart","ns","ne","sub","buildOpenSubpath","lastIdx","tS","pStart","tE","buildPaints","colorAttr","rawStr","initialPaint","paints","parseRect","rxRaw","buildStyle","halfMin","cornerRadius","parseEllipse","parseCustomPath","pointsStr","moveto","lines","hasDirectAnimatedRotate","fineArcSegmentAngle","hasFillOnly","shouldMergeClosedFillPaths","relativePaths","arcCount","nonZeroVector","signs","signedPathArea","prev","accumulatedStrokeScale","posX","posY","ve","nonScaling","applyNonScaling","defaultWidth","resolvedWidth","resolvedCap","resolvedJoin","parseShapeElement","SVG_DECLARATION_CONTEXT_TAGS","SVG_UNSUPPORTED_ELEMENT_TAGS","ancestorTagNames","names","collectSymbolShapes","symbolEl","isRenderableSymbolDescendant","createSVGConversionSession","all","groupMaskGNodeToIndex","idShapes","idGroups","idSymbols","idImages","symbolShapesById","idTextEls","idTextPureUse","idEls","warnedClipMaskDefinitions","layers","assets","registeredAssetIds","fontAssetIdByDescriptor","nextLayerIndex","useFilter","add","symbol","nearestMaskedGroupAncestor","withGroupParent","parentIndex","parentId","appendLayer","applyElementClip","clippedLayer","appendAsset","registerTextFontAsset","content","info","descriptor","fontFamily","fontWeight","fontStyle","assetId","family","weight","fontAssetId","warnReferencedClipMaskFeatures","definition","definitionTag","durationSeconds","outFrame","compCenterX","compCenterY","textDataByLayerId","measureText","imageNaturalSizes","resourceBaseUrl","smilDurationSink","paintAnimationsByLayerId","shapeAnimationsByLayerId","allocateLayerIndex","peekLayerIndex","isDeclarationContext","createSVGConversionEnvironment","session","createSVGElementLookup","createLayerOutput","warnUnsupportedAttributes","flattenGradientToSolid","dashSynthesized","warnAttr","paintAttr","url","um","ttag","warnGradAttr","gradEl","gradTag","refTag","baseV","noneDefault","msg","warnTextPaintDropped","textNode","hasGradientFill","childNodes","tt","hasTextPaintAttr","cv","convertGroupElement","groupClipPath","groupMask","layerIndex","nullLayer","IRLayerType","Null","inFrame","visible","readImageHref","sourceUrl","parseImageLayer","domNode","createIRResourceSource","resolveIRResourceUrl","svgW","svgH","lbW","lbH","lbWidth","lbHeight","anchorX","anchorY","meet","computeMeetFit","cover","computeSliceCoverFit","localBounds","wx","wy","readEmbeddedImageSize","globalThis","atob","binary","byte","charCodeAt","format","marker","segmentLength","isStartOfFrame","readNaturalImageSize","embeddedSize","fromMap","par","naturalSize","iw","ih","boxAspect","imgAspect","cubicPoint","cubicDerivative","buildMotionSegment","subdivisions","buildMotionPathFromPoints","finalizeMotionPath","totalLength","vertexProgress","cumulative","buildMotionPathFromData","data","nextIndex","incoming","readMotionPathData","mpath","inlinePath","referenced","readPathData","buildReferencedMotionPath","readMotionNumber","readMotionPointValues","hasValidMotionValues","entries","entry","parseMotionAnimation","simpleDuration","pathData","pointValues","rawKeyPoints","rawKeyTimes","usesKeyPoints","keyPoints","pointKeyTimes","rotateRaw","rotate","sampleMotionPath","progress","targetLength","beforeSegment","localLength","lower","upper","derivative","sampleMotionPointValues","clamped","lastPoint","at","previousPoint","localRatio","motionProgressAtRatio","startPoint","endPoint","motionMatrixAtTime","activeEnd","simpleRatio","remainder","elapsed","simpleElapsed","radians","MAX_COMPOSITION_SAMPLES","COMPOSITION_SAMPLE_STEP","ERROR_PROBES","sampleCompositionFrames","fitsUniformGrid","refineCompositionFrames","frames","uniformFrames","anchorFrames","evaluate","jumpFrames","anchors","errors","intervalError","worstIndex","worstError","canSplitInterval","inserted","splice","interior","containsJump","alignedRight","align","worst","normalizeError","unwrapForMeasure","leftFrame","rightFrame","POSITION_TOLERANCE","SCALE_TOLERANCE","ROTATION_TOLERANCE","composeLocalTransform","motions","selfMatrix","animated","motionMatrix","motion","probeTransform","center","decomposed","alignProbe","relativeDeviation","probeError","applySampledTransformComposition","stages","geometries","flatMap","sampleFrame","cycleStart","keyTime","boundary","matrixCache","matrixAtFrame","staticMatrix","orderedFrames","positionKeyframes","scaleKeyframes","rotationKeyframes","probe","previousRotation","geometryScaleSink","OPACITY_TOLERANCE","readStaticOpacity","readStaticVisibility","display","visibility","parseVisibilityValue","hidden","parseOpacityAnimation","isOpacityAnimation","collectOpacityAnimations","opacityAtTime","staticOpacity","staticVisibility","applySampledOpacityComposition","animationsByStage","flat","beginFrame","opacityAtFrame","readDirectTransformStage","collectTransformStages","ancestorGroups","ancestorStopNode","reverse","groupStaticProduct","preserveAncestorTransforms","ancestorMatrix","applyCollectedSMILTransform","outDuration","forceSampledComposition","opacityAnimationsByStage","ancestorStages","ownStage","transformAnimations","motionAnimations","ancestorHasTransformAnimation","allTransformAnimations","allMotionAnimations","ignoreOpacity","allOpacityAnimations","ownOpacityAnimations","ancestorHasOpacityAnimation","hasTransformWork","hasAnimatedGeometry","animatedLocalBase","animatedBaseMatrix","staticBaseMatrix","staticCenter","staticDecomposed","rotationValues","baseOpacity","animatedOpacity","ownStaticOpacity","ancestorOpacity","applySMILToTransform","collected","applySMILToTransformWithOuter","innerEl","outerEl","innerContext","outerContext","innerNode","outerNode","outerCollected","innerCollected","outerGeometry","innerGeometry","bridgeStage","readRawNumberAttribute","animatedLengthReference","candidates","prepareSMILShapeGeometry","buildTransformGeometry","buildTransform","applySMILToParsedTransform","composeOpacityAcrossStages","fullMatrix","convertImageElement","imageLayer","imageAsset","imageShape","paintServerId","clampOpacity","parseSMILPaintAnimations","alphaBase","paintSources","baseStrokeWidth","paintSource","baseColor","rawAttributeName","stopIndex","alphaMultiplier","staticColor","paintIndex","gradientId","gradientTag","parseShapeGeometryAnimation","shapeAttribute","readAnimatedShapeAttribute","baseRaw","basePaths","readBasePaths","animationElement","spec","buildShapeAnimationSpec","valueIndexes","appendAnimationFrames","pathsEqual","accumulates","valueCenterX","valueCenterY","readAnimationValues","pathSets","resolveShapeValue","resolved","materializeEmptyPathSets","isPaths","discrete","hasCompatibleTopology","indexValues","additiveNeedsBase","accumulationPaths","zeroShapeLike","buildPairSpec","addPathSets","startRaw","endRaw","startSignature","endSignature","parseShapePaths","hasAuthoredGeometry","hasParsedGeometry","pointsToPath","translatePaths","commands","resolveSamplePaths","previousCycleEnd","interpolatePathSets","accumulatedPaths","scalePathSet","additivePaths","lowerIndex","floor","upperIndex","hasSameTopology","pathIndex","interpolatePath","interpolatePoint","factor","scalePoint","other","signatures","shapeCommandSignature","signature","templatePath","convertShapeElement","shapeAnimation","ownOpacity","elementOpacity","fillOpacity","strokeOpacity","normalizedPaintOpacity","fillRaw","strokeRaw","fillColor","strokeColor","paintAnimations","ancestorOpacityAnimated","opacityAnimated","staticElementOpacity","layerOpacityMultiplier","solidColorAlpha","geometryScale","Shape","isBoldSpanAttr","isUnsupportedTextOffset","dxRaw","trimmed","hasNonFirstTspanExplicitX","hasWritingMode","wm","hasTspanTransformOrRotate","hasNestedTspan","gc","readTextContent","lineHeight","lineCount","lineTexts","firstTspanX","firstTspanY","spans","isPathText","lineXs","lineYs","parentYRaw","parsedParentY","parentY","currentY","rawText","textContent","isTspanInline","text","domEl","yRaw","parsedY","xRaw","parsedX","parsedDx","supportedDx","lineX","dyRaw","parsedDy","supportedDy","newLine","positionY","fontSizeRaw","fontWeightRaw","fontStyleRaw","fontSize","bold","italic","nodeType","lineH","_object_without_properties_loose","excluded","sourceKeys","getOwnPropertyNames","propertyIsEnumerable","mapFontWeight","lowered","numericToGEWeight","inferred","inferNumericWeightFromFamily","normalizeFontFamily","linotype","bare","suffix","estimateFontMetrics","isCJK","ascRatio","descRatio","resolveFontMetrics","fd","buildCanvasFontDesc","asc","fontBoundingBoxAscent","desc","fontBoundingBoxDescent","xHeight","actualBoundingBoxAscent","actual","svgAsc","svgDesc","hanging","hangingBaseline","dominantBaselineDelta","baseline","precise","SPACE_CHAR_CANDIDATES","buildSpaceCharTable","seen","ch","greedySpaceForDx","table","best","bestErr","err","isCJKChar","codePointAt","charWidthCoef","weightStr","genericFamilies","familyName","estimateTextWidth","letterSpacing","fontDesc","chars","TEXT_ANCHOR_MAP","middle","FONT_STYLE_MAP","normal","oblique","buildSVGPreservedTextData","numericWeight","resolveEffectiveTextAlign","textAlign","isRtl","buildTextWorldMatrix","resolveTextFillColor","readTextOpacity","totalOpacity","irColorToHex","padStart","readLetterSpacing","buildSingleTextLayer","tspanLineHeight","textAnchor","dominantBaselineRaw","resolvedFontWeight","resolvedFontStyle","spaceChars","spaceText","spaceSpan","bakedLineTexts","rebuilt","cur","lineWidths","estWidth","lh","estHeight","textData","effectiveTextAlign","baselineYGe","buildSplitTextLayers","textFontSize","defaultColor","segs","segFontSize","segWeight","segStyle","segColor","totalW","sumDx","segCount","effectiveBlockWidth","effAlignB","blockLeft","leftEdge","cxs","firstSeg","firstMetrics","firstLh","firstBaselineYGe","baselineDelta","firstCyLocal","infos","accDy","cyLocal","mt","baselineYGeI","segColorHex","segSpan","buildVerticalTextLayers","charWidths","blockHeight","charCentersY","blockTop","cxLocal","buildPerLineTextLayers","tspanLineH","allSpans","xText","yText","spansByLine","sp","lineSpans","lineY","lineFsRaw","lineFs","linePrecise","effAlign","cxCenter","firstSpanColor","lineColor","lineFontSizeRaw","parseTextLayers","textFs","hasSplittableDx","hasSplittableDy","hasFontSizeDiff","canSplit","hasPerLineXDiff","canSplitPerLine","vertical","wrapSingle","convertTextElement","textLayers","animatedVisibility","textLayer","baseName","textName","textLayerId","Text","isConditionallySupported","rawLanguages","languages","navigator","language","rawLanguage","getActiveSwitchChild","switchNode","isInInactiveSwitchBranch","branch","readOwnOpacity","isOwnVisible","collectGroupElement","rootStopNode","parentMatrix","parentOpacity","parentVisible","ownMatrix","ownVisible","collectGroupChildren","activeChild","activeElement","targetId","targetShape","useMatrix","container","instances","collectGroupUseInstances","groupEl","readElementTransform","hasDirectSMILAnimation","hasSMILAnimationInChain","stopNode","isVisibleOrAnimated","buildUseLayerVisibility","useElement","targetElement","applyReferencedAnimationToTransform","targetStopNode","preserveTargetAncestors","targetAncestorMatrix","durationSink","targetContext","applyUseInstanceStyles","sourceElement","sourceShape","buildUseInstanceTransform","shouldApplyAnimation","appendUseLayer","layerId","appendUseShapeLayer","instanceShape","appendUseTextLayers","useOpacity","getName","pureTranslation","isPureTranslation","applyUseTranslationToText","appendUseImageLayer","convertUseElement","groupDef","convertGroupUse","tryConvertSymbolUse","tryConvertTextUse","tryConvertImageUse","convertShapeUse","instanceName","useHasAnimation","convertGroupShapeInstance","convertGroupTextInstance","convertGroupImageInstance","targetIsDirectShape","targetHasAnimation","symbolDef","symbolShapes","symbolMatrix","buildSymbolViewportMatrix","symbolStopNode","symbolIndex","symbolShapeEl","symbolShape","childName","accumulateSymbolChildTransform","readSymbolChildOpacity","textDef","useFilterAttr","hasFilter","imageDef","childEl","symbolNode","createSVGElementConverterRegistry","environment","lookup","output","shapeContext","textContext","imageContext","useContext","groupContext","registry","buildSVGLayers","converters","useTargetIsText","skipByFilterReplace","converter","ParseableSVG","svgStr","_options","SVG","initTexts","propagation","inlineAttr","resolvedAttr","resolveCurrentColor","num","normalizeTextAttrs","getNumAttr","hasAttribute","tspanList","tspan","firstTspan","textList","attrName","stringify","attrs","parser","isRecord","resolveEditableSVGConstructor","moduleValue","depth","default","editableSVGConstructor","editableSVGModule","createEditableSVG","parseSVGToIRScene","svgString","staticDurationSeconds","onWarning","maskTextSMILChildrenForEditableSVG","maskedInput","maskedTextAnimations","restoreTextSMILChildren","hasSVGRootElement","readViewport","textDataCollector","paintAnimationsCollector","scannedSmilDuration","effectiveDuration","layerBuildOptions","shapeAnimationCollector","backgroundColor","buildIRScene","input","composition","buildIRComposition","schemaVersion","ANIMATION_IR_SCHEMA_VERSION","entryCompositionId","compositions","withoutProlog","TEXT_SMIL_PLACEHOLDER_TAG","TEXT_SMIL_PLACEHOLDER_ATTRIBUTE","textBlock","animationXml","placeholders","placeholder","isInteger","restored","parseSVGAnimationFragment","replaceChild","document","DOMParser","parseFromString","parsedAnimation","documentElement","firstElementChild","importNode","opening","createElementNS","attributes","attributePattern","namespace","setAttributeNS","inPoint","outPoint","endBehavior","convertSVGToIR","parseSVGToIRWithPreservedData","splitSVG","preservedData","collectors","warnings","emitWarning","warning","readSVGString","irScene","validateIRScene","ir","asyncGeneratorStep","gen","resolve","reject","_next","_throw","arg","Promise","then","_async_to_generator","self","_ts_generator","thisArg","label","sent","trys","ops","Iterator","verb","LayerConversionError","throwUnsupportedLayerFeature","throwInvalidLayerData","collectLayerWarning","sourceId","collectUnsupportedIRLayer","IDENTITY_MATRIX","multiplyMatrices","local","transformBoxCorners","box","mapPointsToBBox","roundPixel","is","readStaticValue","buildIRStaticStateResolver","resolving","resolveMatrix","delete","buildLayerConversionSession","scene","getIRSceneEntryComposition","maskSourceIds","matte","sourceLayerId","resolveLayerState","convertIRImageLayer","state","mimeType","role","parseTextRuns","font","preserved","mapped","mapTextColor","styleKey","channels","buildTextRunLayout","runs","spacing","conversionOptions","segmented","run","rows","estimated","configuredLineHeight","measuredRows","row","measurementSize","metrics","chunks","advance","chunk","valid","characterCount","ascent","descent","baselines","contentTop","firstBaseline","resolveTextBounds","convertIRTextLayer","bounds","positioned","polygons","fragments","font_family","font_size","letter_spacing","direction","erase_operations","createLayerConverterRegistry","layerType","convert","resolveIRVisualState","blendMode","IRBlendMode","Normal","buildIRStaticLayers","layerCounts","converted","assembleSVGStaticLayers","encodeBase64","fromCharCode","subarray","btoa","readImageDataUrl","payload","comma","parameters","decoded","Uint8Array","character","encoder","TextEncoder","token","encode","fetchImageResource","response","URL","protocol","fetch","ok","status","arrayBuffer","headers","inlineImageResources","loadImage","resources","resource","reason","convertSVGToLayers","splitResult","JSONSceneVersion","RenderLevel","BlendingMode","SideMode","ObscuredMode","ParticleEmitterShapeType","PluginType","InteractType","InteractBehavior","ItemType","RenderMode","ParticleOrigin","RenderType","RenderFace","CameraClipMode","ValueType","BezierKeyframeType","EndBehavior","ParticleInteractionBehavior","ShapeArcMode","LightType","ModelBoundingType","CameraType","MaterialType","MaterialBlending","RenderMode3D","TextOverflow","TextSizeMode","TextBaseline","TextAlignment","TextVerticalAlign","TextWeight","FontStyle","FillType","TexturePaintScaleMode","ShapePrimitiveType","LineCap","LineJoin","NodeDataType","BackgroundType","MultimediaType","HevcVideoCodec","DataType","GeometryType","VertexFormatType","IndexFormatType","VertexBufferSemantic","LATEST","rewriteTextComponentsToRichText","TextComponent","itemRef","itemId","itemLayerIds","rewriteTextComponentToRichText","comp","old","irWidth","irHeight","irColor","readIRColor","newOptions","encodeMarkupFromSpans","textColor","letterSpace","autoResize","useLegacyRichText","wrapEnabled","textOverflow","textVerticalAlign","textWidth","textHeight","isFiniteNumber","fallbackText","defaultColorHex","hasStyleDiff","esc","effColor","effStyleKey","mergedSpans","colorHex","normalizeShapeAnimationForGE","maxPathCount","maxPointCounts","needsPadding","fallbackPoint","fallbackClosed","createDegeneratePath","padPath","pointCount","missingCount","keyframeValuesDiffer","expandAnimatedHold","expandTransformHoldTransitions","applyShapeAnimationBasePaths","animationsByLayerId","normalizedAnimation","firstPaths","expandIRHoldTransitions","structuredClone","expandPaintAnimationHoldKeyframes","applyFonts","fonts","definitions","fontURL","restoreGradientUV","compositionWidth","compositionHeight","get2dTo3dRatio","shapeFills","shapeStrokes","restoreUV","DEFAULT_OUT_TANGENT","DEFAULT_IN_TANGENT","roundNumber","digits","lerp","normalizeTime","frameTime","startFrame","getScalarValue","dimensionIndex","valuesDiffer","expandHoldTransitions","makeEaseOut","EASE_OUT","makeEaseIn","previousSegment","EASE_IN","makeEase","currentSegment","EASE","serializeBezierSegments","totalPoints","buildCurveForDimension","timeContext","expandedKeyframes","bezierCurves","nextKeyframe","t0","t1","v0","v1","firstTime","firstValue","convertIRScalarKeyframesToGE","curve","createId","bytes","crypto","getRandomValues","toDataPath","cubicBezierDerivative","bezierProgress","sampleScalarProperty","linear","sampleVectorProperty","sampleColorProperty","asRecordArray","asUnknownArray","createPaintTrackSink","timelineTracks","sceneBindings","appendMisc","misc","dataType","TrackAsset","miscs","pushTrack","bindingTrackId","componentId","colorChannelCurves","colorKeyframes","makeColorCurve","mapKeyframedProperty","clipTimeRange","delay","addFramesInRange","sortFramesInRange","appendDirectColorTrack","sink","curves","colorTrackId","colorAssetId","curveData","COLOR_CURVE","BEZIER_CURVE","clips","appendMaterialColorTrack","materialIndex","materialTrackId","appendFloatPropertyTrack","propertyTrackId","propertyAssetId","applyShapePaintAnimation","paintAnimationByLayerIndex","itemRecords","items","componentRecords","timelineAsset","compositionComponent","paintTrackSink","exactShapeItemIndexes","item","indexes","exactIndexes","baseItemIndex","shift","paintEntries","paintContext","animatedLayerOpacity","layerItems","candidateName","paintTarget","paintAnimation","findLast","solidColorAnimation","colorAnimation","alphaProperty","staticAlphaMultiplier","colorProperty","stopColorAlpha","alphaScale","collectionPath","componentRef","materialCount","paintCollection","strokeWidthAnimation","hasAnimatedGeometryScale","hasAnimatedStrokeWidth","authoredWidth","geometryValue","geometryFactor","compensatedWidth","componentRefs","applyShapeGeometryAnimations","TimelineAsset","CompositionComponent","shapeItemsByName","appendCoordinateTrack","prefix","pointIndex","takeLayerItem","componentMatch","findShapeComponent","basePoints","readPointArray","baseInTangents","baseOutTangents","animatedPoints","flattenPaths","hasPointTopology","isShapeLayer","itemsByName","candidateIndex","playableAssetId","FloatPropertyPlayableAsset","FloatPropertyTrack","ObjectBindingTrack","refs","ShapeComponent","assembleSVGGE","irForGE","exportResult","convertIRToGE","emitGEExportDiagnostics","diagnostics","clonePaintAnimationMap","emitMissingFontWarnings","diagnostic","suppliedFamilies","cleanFontName","fontAssetById","reported","convertSVGToGE","parserOptions","convertSVG","outputFormat","geOptions"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,11,12,13,59,77,78,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113]}
|