@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
package/dist/node.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node.js","sources":["../../../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/parse-svg/read-presentation-attribute.ts","../src/parse-svg/svg-parser.ts","../src/parse-svg/node.ts","../../../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/_set_prototype_of.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/_type_of.js","../src/parse-svg/bridge.ts","../../../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/_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/_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","../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/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/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","../src/node.ts"],"sourcesContent":["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","/** 读取 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","/**\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","/**\n * Node 入口:在 Node 环境(无原生 DOM)注册 svgdom 给 svg.js。\n *\n * 在 Node 环境(无原生 DOM)注册 svgdom 提供的 window/document 给 svg.js,\n * 之后导出的 ParseableSVG 即可在 Node 解析 SVG。浏览器入口(默认 ./index)直接用原生 DOM,无需此桥接。\n *\n * 注:不在构造期做 svgo purify(实测对 svg2ir IR/Effects 输出无影响——\n * svg2ir fixture 零 <style>、svgo 数值字面化但值不变、注释 svg2ir 不消费)。\n\n */\nimport { createSVGWindow } from 'svgdom';\nimport { registerWindow } from '@svgdotjs/svg.js';\nimport ParseableSVG from './svg-parser';\n\nconst window = createSVGWindow();\n\n// svgdom 的 window 是最小 DOM stub(非完整 Window),运行时被 svg.js registerWindow 接受;\n// d.ts 标 Window 类型过严,svgdom 的 window 是最小 DOM stub,这里断言对齐运行时用法。\nregisterWindow(window as unknown as globalThis.Window, window.document);\n\nexport default ParseableSVG;\nexport { ParseableSVG };","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","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 _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 _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","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","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","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 _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","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","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","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","import * as editableSVGNodeModule from './parse-svg/node';\nimport { resolveEditableSVGConstructor, setEditableSVGConstructor } from './parse-svg/bridge';\n\nsetEditableSVGConstructor(resolveEditableSVGConstructor(editableSVGNodeModule));\n\nexport * from './index';\n"],"names":["_array_like_to_array","arr","len","length","i","arr2","Array","_unsupported_iterable_to_array","o","minLen","n","Object","prototype","toString","call","slice","name","from","test","_create_for_of_iterator_helper_loose","allowArrayLike","it","Symbol","iterator","next","bind","isArray","done","value","TypeError","readPresentationAttribute","node","attributeName","inlineValue","readInlineStyleProperty","getAttribute","style","propertyName","trim","expectedName","toLowerCase","resolvedValue","split","declaration","separator","indexOf","replace","ParseableSVG","svgStr","_options","SVG","content","match","svg","initTexts","getAttr","element","propagation","inlineAttr","attr","resolvedAttr","resolveCurrentColor","num","parseFloat","Number","isNaN","type","parent","normalizeTextAttrs","text","x","getNumAttr","dx","y","dy","fill","hasAttribute","tspanList","find","every","tspan","firstTspan","textList","attrName","stringify","el","attrs","key","startsWith","parser","color","window","createSVGWindow","registerWindow","document","_is_native_reflect_construct","result","Boolean","valueOf","Reflect","construct","_","_set_prototype_of","p","setPrototypeOf","__proto__","_construct","Parent","args","Class","a","push","apply","Constructor","Function","instance","arguments","_type_of","obj","isRecord","resolveEditableSVGConstructor","moduleValue","candidate","depth","default","editableSVGConstructor","editableSVGModule","setEditableSVGConstructor","constructor","createEditableSVG","_extends","assign","target","source","hasOwnProperty","_inherits","subClass","superClass","create","writable","configurable","_instanceof","left","right","hasInstance","_get_prototype_of","getPrototypeOf","_is_native_function","fn","_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","SVGConverterError","message","details","defineProperty","Error","extractInternalCode","error","mapInternalCodeToConverterCode","internalCode","mapSemanticDetailsFromInternalCode","projectionErrorCode","validationCode","normalizeToConverterError","fallbackCode","fallbackMessage","keys","mappedCode","normalizedDetails","internalErrorCode","cause","String","CSS_NAMED_COLORS","mapSVGColorToIRColor","c","opacity","raw","hex","parseHexColor","withOpacity","rgb","parseRGBColor","hsl","parseHSLColor","named","clamp01","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","colorPart","part","filter","endsWith","percentage","isFinite","component","degrees","PI","max","min","EPSILON","BEGIN_TIME_EPSILON","LINEAR_OUT_TANGENT","LINEAR_IN_TANGENT","MAX_SYNCBASE_EVENTS","parseClockValue","scalar","clock","number","unit","activeDuration","tag","duration","repeatRaw","repeatDurationRaw","repeatDuration","repeated","count","findAnimationById","root","id","querySelectorAll","animationTags","initialBeginTimeCaches","WeakMap","windowedBeginTimeCaches","getBeginTimeCache","comparisonDuration","cached","cache","caches","parseBeginSpecifiers","absolute","dependencies","candidateRaw","absoluteTime","syncbase","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","index","naturalEnd","restartedAt","end","parseNumberList","parseRotateValue","parseTranslateValue","parseScaleValue","sx","parseValue","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","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","rawDuration","parsedDuration","noDurationEvent","byOnly","explicitAdditive","additive","animationValues","calcModeRaw","isDiscreteAttribute","keyTimesRaw","intervals","cycleOffset","intervalBegin","intervalEnd","sampleStart","sampleEnd","interval","getSMILDuration","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","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","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","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","readAnimationParent","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","HORIZONTAL_LENGTH_ATTRIBUTES","VERTICAL_LENGTH_ATTRIBUTES","DIAGONAL_LENGTH_ATTRIBUTES","readSVGNumberAttribute","getPercentageReference","concrete","readSVGStringAttribute","isSVGElementVisible","readSVGOwnOpacity","readSVGElementOpacity","readSVGViewport","SQRT2","parseConcreteLength","attrVal","v","gradientElementCache","gradientNodeCache","findGradientElement","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","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","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","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","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","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","editableSVGNodeModule"],"mappings":"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","x_google_ignoreList":[0,1,2,6,7,8,9,11,12,13,14,15,16,62,78,79,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114]}
|