@vvfx/svg2ir 0.0.0-stage → 0.0.1-beta.11
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 +208 -2
- package/dist/common/errors.d.ts +33 -0
- package/dist/common/types.d.ts +93 -0
- package/dist/convert.d.ts +21 -0
- package/dist/debug.d.ts +8 -0
- package/dist/helper.d.ts +5 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.js +17202 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +17196 -0
- package/dist/index.mjs.map +1 -0
- package/dist/node.d.ts +1 -0
- package/dist/node.js +17219 -0
- package/dist/node.js.map +1 -0
- package/dist/node.mjs +17213 -0
- package/dist/node.mjs.map +1 -0
- package/dist/parse-svg/bridge.d.ts +10 -0
- package/dist/parse-svg/build-element-tree-path.d.ts +2 -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/svg-rasterizer/prepare-snapshot.d.ts +9 -0
- package/dist/svg-rasterizer/rasterize-svg.d.ts +11 -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 +11 -0
- package/dist/svg2ir/convert-arc.d.ts +10 -0
- package/dist/svg2ir/convert.d.ts +23 -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 +163 -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 +55 -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 +21 -0
- package/dist/svg2layers-adapter/baking/build-baked-layers.d.ts +13 -0
- package/dist/svg2layers-adapter/baking/normalize-layer-blending.d.ts +10 -0
- package/dist/svg2layers-adapter/baking/plan-graphic-baking.d.ts +18 -0
- package/dist/svg2layers-adapter/baking/resolve-baking-warnings.d.ts +4 -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/image/inspect-mask.d.ts +3 -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/strip-layer-animation.d.ts +5 -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/parse-svg/build-element-tree-path.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/image/inspect-mask.ts","../src/svg2layers-adapter/converter/layers/resolve-visual-state.ts","../src/svg2layers-adapter/converter/layers/build-layers.ts","../src/svg2layers-adapter/assemble.ts","../src/svg-rasterizer/prepare-snapshot.ts","../src/svg-rasterizer/rasterize-svg.ts","../src/svg2layers-adapter/baking/normalize-layer-blending.ts","../src/svg2layers-adapter/baking/plan-graphic-baking.ts","../src/svg2layers-adapter/baking/resolve-baking-warnings.ts","../src/svg2layers-adapter/baking/build-baked-layers.ts","../src/svg2layers-adapter/post-process/inline-image-resources.ts","../src/svg2layers-adapter/strip-layer-animation.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.js parses a fragment; remove only the prolog and let the DOM handle nested markup.\n const content = svgStr.replace(/^\\uFEFF/, '')\n .replace(/^(?:\\s|<\\?xml\\b[\\s\\S]*?\\?>|<!DOCTYPE\\b[^>]*>|<!--[\\s\\S]*?-->)+/i, '');\n\n // svg.js SVG(string) 的 d.ts 标为 Element,但对完整 <svg> 文档运行时返回根 SVG 文档实例。\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 ? Array.from(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","/** Structural source identity, independent of optional or duplicate SVG IDs. */\nexport function buildElementTreePath(element: Element): string {\n const indices: number[] = [];\n let current = element;\n\n while (isElementNode(current.parentNode)) {\n const parent = current.parentNode;\n\n indices.unshift(Array.from(parent.children).indexOf(current));\n current = parent;\n }\n\n return indices.join('/');\n}\n\nfunction isElementNode(node: Node | null): node is Element {\n return node?.nodeType === 1;\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/** 转换过程中产生的烘焙、降级或内容损失诊断。 */\nexport interface SVG2IRWarning {\n code: SVG2IRWarningCode;\n message: string;\n /** 触发元素在 SVG 里的定位提示(id/tag/索引等)。 */\n elementSelector?: string;\n}\n\n/** SVG 转换诊断码;用于报告烘焙、降级和不支持的特性。 */\nexport const SVG2IR_WARNING_CODES = {\n /** 图形或图形组已栅格化,矢量编辑能力变化通过 warning 报告。 */\n LAYERS_GRAPHIC_BAKED: 'svg2ge_layers_graphic_baked',\n LAYERS_BLEND_MODE_DOWNGRADED: 'svg2ge_layers_blend_mode_downgraded',\n LAYERS_ANIMATION_STRIPPED: 'svg2ge_layers_animation_stripped',\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 { buildElementTreePath } from '../../../parse-svg/build-element-tree-path';\nimport 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 layerSourceCollector?: Map<string, string>;\n warningSourceCollector?: Map<SVG2IRWarning, string>;\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 options.layerSourceCollector?.set(layer.id, buildElementTreePath(element.node));\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 Array.from(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/** 去除单个字体族名的 CSS 字符串引号。 */\nexport function normalizeFontFamilyName(fontFamily: string): string {\n return fontFamily.trim().replace(/^(['\"])(.*)\\1$/, '$2');\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 family = normalizeFontFamilyName(fontFamily);\n const familyName = genericFamilies.includes(family) ? family : `\"${family}\"`;\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 chars = Array.from(content);\n const len = chars.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 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 { buildElementTreePath } from '../../../parse-svg/build-element-tree-path';\nimport 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 let currentPath: string | undefined;\n const warningSourceCollector = options.warningSourceCollector;\n const session: SVGConversionSession = createSVGConversionSession(es, warningSourceCollector == null ? options : {\n ...options,\n emit: warning => {\n if (currentPath != null) { warningSourceCollector.set(warning, currentPath); }\n options.emit(warning);\n },\n });\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 (warningSourceCollector != null) { currentPath = buildElementTreePath(element.node); }\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 layerSourceCollector?: Map<string, string>;\n warningSourceCollector?: Map<SVG2IRWarning, string>;\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 layerSourceCollector: options?.layerSourceCollector,\n warningSourceCollector: options?.warningSourceCollector,\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 layerSourceCollector?: Map<string, string>;\n warningSourceCollector?: Map<SVG2IRWarning, string>;\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 layerSourceCollector: collectors?.layerSourceCollector,\n warningSourceCollector: collectors?.warningSourceCollector,\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 const advisory = code === SVG2IR_WARNING_CODES.LAYERS_TEXT_BOUNDS_ESTIMATED\n || code === SVG2IR_WARNING_CODES.LAYERS_GRAPHIC_BAKED;\n\n if (options.strict === true && !advisory) {\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 { buildCanvasFontDesc, estimateTextWidth, resolveFontMetrics } from '../../../svg2ir/converter/text/font-metrics';\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 weight = run.bold ? 'bold' : 'normal';\n const style = run.italic ? 'italic' : 'normal';\n const font = buildCanvasFontDesc(measurementSize, family, weight, style);\n const metrics = conversionOptions.measureText?.(font, segmented ? 'x' : run.text);\n const characters = Array.from(run.text);\n const chunks = segmented ? characters : [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 : estimateTextWidth(chunk, measurementSize, 0, undefined, family, weight, style);\n }\n const characterCount = characters.length;\n const width = advance * scale + Math.max(0, characterCount - 1) * spacing;\n const fallback = resolveFontMetrics(undefined, family, weight, style, run.fontSize);\n const ascent = metrics?.fontBoundingBoxAscent == null\n ? fallback.asc : metrics.fontBoundingBoxAscent * scale;\n const descent = metrics?.fontBoundingBoxDescent == null\n ? fallback.desc : 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 // Keep the authored font-family string, quotes included; consumers resolve families themselves.\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 type { IRLocalBounds, IRMask } from '@vvfx/animation-ir';\n\n/** 完全覆盖图片的直边矩形 mask 不改变可见内容。 */\nexport function maskCoversImage(mask: IRMask, bounds: IRLocalBounds): boolean {\n const { path } = mask;\n const epsilon = 1e-6;\n\n if (mask.mode === 'subtract' || mask.inverted === true || !path.closed || path.points.length !== 4) {\n return false;\n }\n if (path.inTangents.length !== 4 || path.outTangents.length !== 4\n || [...path.inTangents, ...path.outTangents].some(tangent => tangent.x !== 0 || tangent.y !== 0)) {\n return false;\n }\n const straightEdges = path.points.every((point, index) => {\n const next = path.points[(index + 1) % 4];\n const opposite = path.points[(index + 2) % 4];\n const dx = Math.abs(next.x - point.x);\n const dy = Math.abs(next.y - point.y);\n\n return Number.isFinite(point.x) && Number.isFinite(point.y)\n && Math.abs(opposite.x - point.x) > epsilon && Math.abs(opposite.y - point.y) > epsilon\n && ((dx <= epsilon && dy > epsilon) || (dy <= epsilon && dx > epsilon));\n });\n\n if (!straightEdges) { return false; }\n const xs = path.points.map(point => point.x);\n const ys = path.points.map(point => point.y);\n const left = Math.min(...xs);\n const right = Math.max(...xs);\n const top = Math.min(...ys);\n const bottom = Math.max(...ys);\n\n return bounds.width > 0 && bounds.height > 0\n && left <= bounds.x + epsilon && right >= bounds.x + bounds.width - epsilon\n && top <= bounds.y + epsilon && bottom >= bounds.y + bounds.height - epsilon;\n}\n","import { SVG2IR_WARNING_CODES } from '../../../common/types';\nimport { IRBlendMode, type IRLayer } from '@vvfx/animation-ir';\nimport { maskCoversImage } from '../image/inspect-mask';\nimport { collectLayerWarning, 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 const unsupportedMask = layer.mask != null\n && (layer.type !== 'image' || !maskCoversImage(layer.mask, layer.localBounds));\n\n if (unsupportedMask || 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 collectLayerWarning(session.warnings, session.options, SVG2IR_WARNING_CODES.LAYERS_BLEND_MODE_DOWNGRADED,\n `Blend mode \"${String(layer.blendMode)}\" was downgraded to \"normal\"; the layer is retained.`, layer.id);\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, sourceIds?: Map<SVGStaticLayer, string>): 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 sourceIds?.set(converted, layer.id);\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 { getIRSceneEntryComposition } from '@vvfx/animation-ir/adapter';\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 { BakedLayersResult } from './baking/build-baked-layers';\nimport type { SVGStaticLayer, SVGToLayersResult } from './types';\n\nexport function assembleSVGStaticLayers(\n scene: IRScene,\n options: ConvertOptions,\n warnings: SVG2IRWarning[],\n preservedData?: SVGPreservedData,\n sourceIds?: Map<SVGStaticLayer, string>,\n): { size: [number, number]; data: SVGStaticLayer[] } {\n const session = buildLayerConversionSession(scene, options, warnings, preservedData);\n const data = buildIRStaticLayers(session, sourceIds);\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\ninterface SVGLayerAssemblyInput {\n scene: IRScene;\n options: ConvertOptions;\n warnings: SVG2IRWarning[];\n preservedData: SVGPreservedData;\n layerSources: ReadonlyMap<string, string>;\n warningSources: ReadonlyMap<SVG2IRWarning, string>;\n baking: BakedLayersResult;\n}\n\n/** Replace baked sources, combine native and raster layers in painter order, then report final diagnostics. */\nexport function assembleSVGLayers(input: SVGLayerAssemblyInput): SVGToLayersResult {\n const { scene, options, preservedData, layerSources, warningSources, baking } = input;\n const warnings = input.warnings.filter(warning => !baking.resolvesWarning(warning, warningSources.get(warning)));\n const composition = getIRSceneEntryComposition(scene);\n const nativeScene: IRScene = {\n ...scene,\n compositions: scene.compositions.map(candidate => candidate === composition ? {\n ...candidate,\n layers: candidate.layers.filter(layer => !baking.replacesSource(layerSources.get(layer.id))),\n } : candidate),\n };\n const sourceIds = new Map<SVGStaticLayer, string>();\n\n warnings.push(...baking.warnings);\n const native = assembleSVGStaticLayers(nativeScene, { ...options, strict: false, onWarning: undefined },\n warnings, preservedData, sourceIds);\n const ordered = native.data.map(layer => ({ path: layerSources.get(sourceIds.get(layer) ?? '') ?? '', layer }));\n\n ordered.push(...baking.layers);\n ordered.sort((left, right) => comparePaths(left.path, right.path));\n const counts = { image: 0, text: 0 };\n const data = ordered.map(({ layer }) => ({\n ...layer, id: `${layer.type}_${String(++counts[layer.type]).padStart(4, '0')}`,\n }));\n\n for (const warning of warnings) {\n options.onWarning?.(warning);\n if (options.strict === true) {\n const message = warning.message.replace(/^\\[svg2ge:layers\\] /, '');\n\n collectLayerWarning([], { ...options, onWarning: undefined }, warning.code, message, warning.elementSelector);\n }\n }\n\n return { size: native.size, data, warnings };\n}\n\nfunction comparePaths(left: string, right: string): number {\n const a = left.split('/').map(Number);\n const b = right.split('/').map(Number);\n\n for (let index = 0; index < Math.min(a.length, b.length); index++) {\n if (a[index] !== b[index]) { return a[index] - b[index]; }\n }\n\n return a.length - b.length;\n}\n","import { buildElementTreePath } from '../parse-svg/build-element-tree-path';\n\nconst animatedElements = new Set(['animate', 'animatetransform', 'animatemotion', 'set']);\n\nconst declarations = new Set([\n 'defs', 'style', 'title', 'desc', 'metadata', 'symbol', 'clippath', 'mask', 'filter',\n 'lineargradient', 'radialgradient', 'pattern', 'marker',\n]);\n\nexport interface SVGSnapshotContext {\n root: Element;\n target: Element;\n elements: readonly Element[];\n dependencies: ReadonlySet<Element>;\n readStyle: (element: Element) => CSSStyleDeclaration;\n}\n\n/** Preserve selector context until styles are frozen, then isolate the requested paint subtree. */\nexport function prepareSVGSnapshot(\n source: string,\n path: string,\n size: [number, number],\n inspect?: (context: SVGSnapshotContext) => void,\n): string {\n const parsed = new DOMParser().parseFromString(source, 'image/svg+xml');\n\n if (parsed.querySelector('parsererror') != null) { throw new Error('Invalid SVG document.'); }\n const root = parsed.documentElement;\n const elements = [root, ...Array.from(root.querySelectorAll('*'))];\n const selected = elements.find(element => buildElementTreePath(element) === path);\n\n if (selected == null) { throw new Error('The graphic source element could not be located.'); }\n if (root.querySelector('script, foreignObject') != null) {\n throw new Error('Scripts and foreignObject are outside static graphic baking support.');\n }\n if (Array.from(root.querySelectorAll('style')).some(element => /@import|@font-face/i.test(element.textContent ?? ''))) {\n throw new Error('External stylesheets and fonts require explicit resource preparation.');\n }\n for (const element of elements) {\n for (const attribute of Array.from(element.attributes)) {\n if (/^on/i.test(attribute.name)) { element.removeAttributeNode(attribute); }\n }\n }\n const frame = document.createElement('iframe');\n\n frame.setAttribute('sandbox', 'allow-same-origin');\n frame.style.cssText = `position:fixed;left:-100000px;top:0;width:${size[0]}px;height:${size[1]}px;border:0;`;\n document.body.appendChild(frame);\n try {\n const frameDocument = frame.contentDocument;\n const frameWindow = frame.contentWindow;\n\n if (frameDocument == null || frameWindow == null) { throw new Error('Unable to create isolated SVG context.'); }\n frameDocument.body.style.cssText = 'margin:0;';\n const mounted = frameDocument.importNode(root, true);\n\n mounted.setAttribute('width', String(size[0]));\n mounted.setAttribute('height', String(size[1]));\n frameDocument.body.appendChild(mounted);\n const mountedElements = [mounted, ...Array.from(mounted.querySelectorAll('*'))];\n const selectedIndex = elements.indexOf(selected);\n const target = mountedElements[selectedIndex];\n const normalizeReference = (url: string): string => {\n if (url.startsWith('#')) { return url; }\n const hash = url.indexOf('#');\n\n if (hash >= 0 && url.slice(0, hash) === frameDocument.baseURI.split('#')[0]) { return url.slice(hash); }\n throw new Error('External paint resources require explicit resource preparation.');\n };\n const frozenStyles: Array<string | null> = [];\n const templateRoots = Array.from(mounted.querySelectorAll('use')).flatMap(element => {\n const href = element.getAttribute('href') ?? element.getAttribute('xlink:href') ?? '';\n const template = href.startsWith('#') ? mountedElements.find(candidate => candidate.id === href.slice(1)) : null;\n\n return template == null ? [] : [template];\n });\n const styleRules: CSSStyleRule[] = [];\n const collectRules = (rules: CSSRuleList): void => {\n for (const rule of Array.from(rules)) {\n if (isStyleRule(rule)) {\n styleRules.push(rule);\n } else if (hasNestedRules(rule)) {\n if (isMediaRule(rule) && !frameWindow.matchMedia(rule.conditionText).matches) { continue; }\n collectRules(rule.cssRules);\n }\n }\n };\n\n for (const sheet of Array.from(frameDocument.styleSheets)) { collectRules(sheet.cssRules); }\n\n for (const element of mountedElements) {\n const computed = frameWindow.getComputedStyle(element);\n const inside = target.contains(element);\n const ancestor = element !== target && element.contains(target);\n\n if ((inside || ancestor) && (computed.animationName !== 'none'\n || hasAnimationChildren(element))) {\n throw new Error('Animated graphics require an explicit sampling policy.');\n }\n // Freezing inherited defaults on a definition changes <use> instance inheritance.\n // Freeze only authored declarations, after matching selectors in the intact source tree.\n const authored = frameDocument.createElement('div').style;\n\n authored.cssText = element.getAttribute('style') ?? '';\n const names = new Set(Array.from(authored));\n\n for (const rule of styleRules) {\n if (element.matches(rule.selectorText)) {\n for (const name of Array.from(rule.style)) { names.add(name); }\n }\n }\n const properties = Array.from(names, name => {\n let value = computed.getPropertyValue(name);\n\n value = value.replace(/url\\([\"']?([^)'\"\\s]+)[\"']?\\)/g, (_match: string, url: string) => {\n return `url(\"${normalizeReference(url)}\")`;\n });\n\n return `${name}:${value} !important;`;\n });\n\n const isTemplate = templateRoots.some(template => template.contains(element));\n\n frozenStyles.push(isTemplate ? null : properties.join(''));\n }\n for (let index = 0; index < mountedElements.length; index++) {\n const style = frozenStyles[index];\n\n if (style != null) { mountedElements[index].setAttribute('style', style); }\n }\n const byId = new Map(mountedElements.filter(element => element.id !== '').map(element => [element.id, element]));\n const seen = new Set<Element>();\n const checkDependencies = (element: Element): void => {\n if (seen.has(element)) { return; }\n seen.add(element);\n for (const attribute of Array.from(element.attributes)) {\n if (attribute.localName === 'href' && element.tagName.toLowerCase() === 'a') { continue; }\n if (attribute.localName === 'href' && !attribute.value.startsWith('#')\n && !(['image', 'feimage'].includes(element.tagName.toLowerCase()) && /^data:image\\//i.test(attribute.value))) {\n throw new Error('External SVG references require explicit resource preparation.');\n }\n const normalized = attribute.value.replace(/url\\(\\s*[\"']?([^)'\"\\s]+)[\"']?\\s*\\)/g,\n (_match: string, url: string) => `url(\"${normalizeReference(url)}\")`);\n const ids = Array.from(normalized.matchAll(/url\\([\"']?#([^)'\"\\s]+)[\"']?\\)/g), match => match[1]);\n\n if (normalized !== attribute.value) { element.setAttribute(attribute.name, normalized); }\n\n if (attribute.localName === 'href' && attribute.value.startsWith('#')) { ids.push(attribute.value.slice(1)); }\n for (const id of ids) {\n const dependency = byId.get(id);\n\n if (dependency == null) { throw new Error(`Missing SVG reference: #${id}.`); }\n checkDependencies(dependency);\n }\n }\n for (const child of Array.from(element.children)) {\n if (!declarations.has(child.tagName.toLowerCase())) { checkDependencies(child); }\n }\n };\n\n checkDependencies(target);\n for (const dependency of seen) {\n if (frameWindow.getComputedStyle(dependency).animationName !== 'none'\n || hasAnimationChildren(dependency)) {\n throw new Error('Animated graphics require an explicit sampling policy.');\n }\n }\n inspect?.({\n root: mounted, target, elements: mountedElements, dependencies: seen,\n readStyle: element => frameWindow.getComputedStyle(element),\n });\n const isolate = (element: Element): void => {\n for (const child of Array.from(element.children)) {\n const tag = child.tagName.toLowerCase();\n\n if (declarations.has(tag) || child === target || target.contains(child)) { continue; }\n if (child.contains(target)) {\n isolate(child);\n } else {\n const definitions = frameDocument.createElementNS('http://www.w3.org/2000/svg', 'defs');\n\n child.replaceWith(definitions);\n definitions.appendChild(child);\n }\n }\n };\n\n if (target !== mounted) { isolate(mounted); }\n\n return new XMLSerializer().serializeToString(mounted);\n } finally {\n frame.remove();\n }\n}\n\n/** Only animations attached to this element reject its own bake scope, not unrelated subtrees. */\nfunction hasAnimationChildren(element: Element): boolean {\n return Array.from(element.children)\n .some(child => animatedElements.has(child.tagName.toLowerCase()));\n}\n\nfunction isStyleRule(rule: CSSRule): rule is CSSStyleRule {\n return rule.type === 1;\n}\n\nfunction hasNestedRules(rule: CSSRule): rule is CSSGroupingRule {\n return 'cssRules' in rule;\n}\n\nfunction isMediaRule(rule: CSSRule): rule is CSSMediaRule {\n return rule.type === 4;\n}\n","import { prepareSVGSnapshot, type SVGSnapshotContext } from './prepare-snapshot';\n\ninterface RasterizedSVG {\n url: string;\n /** Logical viewport pixels, independent of raster resolution. */\n bbox: [number, number, number, number];\n}\n\n/** Render an SVG subtree as a cropped PNG, or return null if it has no visible pixels. */\nexport async function rasterizeSVG(\n source: string,\n path: string,\n size: [number, number],\n scale = 2,\n inspect?: (context: SVGSnapshotContext) => void,\n): Promise<RasterizedSVG | null> {\n if (!Number.isFinite(scale) || scale <= 0) { throw new RangeError('rasterScale must be finite and positive.'); }\n if (Math.ceil(size[0] * scale) * Math.ceil(size[1] * scale) > 16_777_216) {\n throw new RangeError('SVG rasterization exceeds the 16 megapixel working limit; reduce rasterScale.');\n }\n const snapshot = prepareSVGSnapshot(source, path, size, inspect);\n const canvas = await renderSVG(snapshot, size, scale);\n\n return cropRasterImage(canvas, scale);\n}\n\n/** No DOM access at module initialization: the Node entry also imports this module. */\nexport function canRasterizeSVG(): boolean {\n return typeof window !== 'undefined' && typeof document !== 'undefined'\n && typeof window.HTMLCanvasElement === 'function' && typeof window.Image === 'function'\n && typeof window.getComputedStyle === 'function';\n}\n\nasync function renderSVG(svg: string, size: [number, number], scale: number): Promise<HTMLCanvasElement> {\n const canvas = document.createElement('canvas');\n\n canvas.width = Math.ceil(size[0] * scale);\n canvas.height = Math.ceil(size[1] * scale);\n const context = canvas.getContext('2d');\n\n if (context == null) { throw new Error('A 2D canvas context is required for SVG rasterization.'); }\n const image = new Image();\n const url = URL.createObjectURL(new Blob([svg], { type: 'image/svg+xml' }));\n\n try {\n await new Promise<void>((resolve, reject) => {\n image.onload = () => resolve();\n image.onerror = () => reject(new Error('The prepared SVG could not be decoded.'));\n image.src = url;\n });\n context.drawImage(image, 0, 0, canvas.width, canvas.height);\n\n return canvas;\n } finally {\n URL.revokeObjectURL(url);\n }\n}\n\n/** Trim transparent pixels after rendering, retaining strokes, blur and filter extents. */\nfunction cropRasterImage(canvas: HTMLCanvasElement, scale: number): RasterizedSVG | null {\n const context = canvas.getContext('2d');\n\n if (context == null) { throw new Error('A 2D canvas context is required for SVG rasterization.'); }\n const { data } = context.getImageData(0, 0, canvas.width, canvas.height);\n let left = canvas.width;\n let top = canvas.height;\n let right = 0;\n let bottom = 0;\n\n for (let y = 0; y < canvas.height; y++) {\n for (let x = 0; x < canvas.width; x++) {\n if (data[(y * canvas.width + x) * 4 + 3] === 0) { continue; }\n left = Math.min(left, x);\n top = Math.min(top, y);\n right = Math.max(right, x + 1);\n bottom = Math.max(bottom, y + 1);\n }\n }\n if (right <= left || bottom <= top) { return null; }\n const cropped = document.createElement('canvas');\n\n cropped.width = right - left;\n cropped.height = bottom - top;\n const croppedContext = cropped.getContext('2d');\n\n if (croppedContext == null) { throw new Error('A 2D canvas context is required for SVG rasterization.'); }\n croppedContext.drawImage(canvas, left, top, cropped.width, cropped.height, 0, 0, cropped.width, cropped.height);\n\n return { url: cropped.toDataURL('image/png'), bbox: [left / scale, top / scale, right / scale, bottom / scale] };\n}\n","import { SVG } from '@svgdotjs/svg.js';\nimport { readPresentationAttribute } from '../../parse-svg/read-presentation-attribute';\n\nconst normalValues = new Set(['normal', 'initial', 'inherit', 'unset', 'revert', 'revert-layer']);\n\ninterface BlendDowngrade {\n mode: string;\n selector: string;\n}\n\n/** Replace non-normal mix-blend-mode declarations with normal and report each downgrade. */\nexport function normalizeLayerBlending(source: string): { source: string; downgrades: BlendDowngrade[] } {\n const svg = SVG(source);\n const downgrades: BlendDowngrade[] = [];\n let changed = false;\n\n for (const element of [svg.node, ...Array.from(svg.node.querySelectorAll('*'))]) {\n const tag = element.tagName.toLowerCase();\n const id = element.getAttribute('id') ?? '';\n const selector = id === '' ? tag : `${tag}#${id}`;\n const mode = readPresentationAttribute(element, 'mix-blend-mode')?.replace(/\\/\\*[\\s\\S]*?\\*\\//g, '').trim();\n\n if (mode != null && !normalValues.has(mode.toLowerCase())) {\n downgrades.push({ mode, selector });\n }\n const style = element.getAttribute('style');\n\n if (style != null) {\n const normalized = normalizeBlendDeclarations(style);\n\n if (normalized !== style) {\n element.setAttribute('style', normalized);\n changed = true;\n }\n }\n const attribute = element.getAttribute('mix-blend-mode');\n\n if (attribute != null && !normalValues.has(attribute.trim().toLowerCase())) {\n element.setAttribute('mix-blend-mode', 'normal');\n changed = true;\n }\n if (tag === 'style') {\n const text = element.textContent ?? '';\n const normalized = normalizeBlendDeclarations(text, value => downgrades.push({ mode: value, selector }));\n\n if (normalized !== text) {\n element.textContent = normalized;\n changed = true;\n }\n }\n }\n\n return { source: changed ? svg.svg() : source, downgrades };\n}\n\n/** Match declaration boundaries without changing strings, comments or function arguments. */\nfunction normalizeBlendDeclarations(source: string, onDowngrade?: (mode: string) => void): string {\n const replacements: Array<{ start: number; end: number; value: string }> = [];\n let start = 0;\n let colon = -1;\n let parentheses = 0;\n let quote: string | undefined;\n let comment = false;\n const finish = (end: number): void => {\n if (colon < start) { return; }\n const name = source.slice(start, colon).replace(/\\/\\*[\\s\\S]*?\\*\\//g, '').trim().toLowerCase();\n\n if (name !== 'mix-blend-mode') { return; }\n const value = source.slice(colon + 1, end).replace(/\\/\\*[\\s\\S]*?\\*\\//g, '').trim();\n const mode = value.replace(/\\s*!important\\s*$/i, '').trim();\n\n if (mode === '' || normalValues.has(mode.toLowerCase())) { return; }\n onDowngrade?.(mode);\n replacements.push({\n start: colon + 1, end, value: /!important\\s*$/i.test(value) ? ' normal !important' : ' normal',\n });\n };\n\n for (let index = 0; index < source.length; index++) {\n const character = source[index];\n const next = source[index + 1];\n\n if (comment) {\n if (character === '*' && next === '/') { comment = false; index++; }\n continue;\n }\n if (quote != null) {\n if (character === '\\\\') { index++; } else if (character === quote) { quote = undefined; }\n continue;\n }\n if (character === '/' && next === '*') { comment = true; index++; continue; }\n if (character === '\"' || character === \"'\") { quote = character; continue; }\n if (character === '(') { parentheses++; continue; }\n if (character === ')') { parentheses = Math.max(0, parentheses - 1); continue; }\n if (parentheses > 0) { continue; }\n if (character === ':' && colon < start) { colon = index; }\n if (character === ';' || character === '}' || character === '{') {\n if (character !== '{') { finish(index); }\n start = index + 1;\n colon = -1;\n }\n }\n finish(source.length);\n let result = '';\n let cursor = 0;\n\n for (const replacement of replacements) {\n result += source.slice(cursor, replacement.start) + replacement.value;\n cursor = replacement.end;\n }\n\n return result + source.slice(cursor);\n}\n","import { SVG } from '@svgdotjs/svg.js';\nimport { buildElementTreePath } from '../../parse-svg/build-element-tree-path';\nimport type { SVGSnapshotContext } from '../../svg-rasterizer/prepare-snapshot';\n\nconst declarations = new Set([\n 'defs', 'style', 'title', 'desc', 'metadata', 'symbol', 'clippath', 'mask', 'filter',\n 'lineargradient', 'radialgradient', 'pattern', 'marker',\n]);\nconst graphics = new Set(['path', 'rect', 'circle', 'ellipse', 'line', 'polyline', 'polygon', 'use']);\nconst containers = new Set(['svg', 'g', 'a', 'switch']);\nconst groupEffects = ['opacity', 'filter', 'mask', 'clip-path'];\nconst native = new Set(['text', 'image', 'foreignobject']);\n\ninterface GraphicBakeScope {\n path: string;\n selector: string;\n isGroup: boolean;\n}\n\ninterface GraphicBakingPlan {\n scopes: GraphicBakeScope[];\n warnings: Array<{ message: string; selector: string }>;\n}\n\n/** Select graphic-only subtrees; keep native text and images as separate layers. */\nexport function planGraphicBaking(source: string): GraphicBakingPlan {\n const root = SVG(source).node;\n const scopes: GraphicBakeScope[] = [];\n const warnings: GraphicBakingPlan['warnings'] = [];\n const effectRules = collectGroupEffectRules(root);\n const byId = new Map(Array.from(root.querySelectorAll('[id]')).map(element =>\n [element.getAttribute('id') ?? '', element],\n ));\n const tagOf = (element: Element): string => element.tagName.toLowerCase();\n const selectorOf = (element: Element): string => {\n const id = element.getAttribute('id') ?? '';\n\n return `${tagOf(element)}${id === '' ? '' : `#${id}`}`;\n };\n const references = (element: Element): Element[] => {\n const ids = Array.from(element.attributes).flatMap(attribute => {\n const values = Array.from(attribute.value.matchAll(/url\\(\\s*['\"]?#([^)'\"\\s]+)['\"]?\\s*\\)/g), match => match[1]);\n\n if ((attribute.localName === 'href') && attribute.value.startsWith('#')) {\n values.push(attribute.value.slice(1));\n }\n\n return values;\n });\n\n return ids.flatMap(id => {\n const target = byId.get(id);\n\n return target == null ? [] : [target];\n });\n };\n const containsNative = (element: Element, seen = new Set<Element>()): boolean => {\n if (seen.has(element)) { return false; }\n seen.add(element);\n if (native.has(tagOf(element))) { return true; }\n\n return Array.from(element.children).some(child => !declarations.has(tagOf(child)) && containsNative(child, seen))\n || references(element).some(target => containsNative(target, seen));\n };\n const hasGraphics = (element: Element): boolean => graphics.has(tagOf(element))\n || Array.from(element.children).some(child => !declarations.has(tagOf(child)) && hasGraphics(child));\n const hasGroupEffect = (element: Element): boolean => {\n const style = element.getAttribute('style') ?? '';\n\n return effectRules.some(rule => element.matches(rule.selectorText)) || hasGraphicGroupEffect(name =>\n element.getAttribute(name)\n ?? new RegExp(`(?:^|;)\\\\s*${name}\\\\s*:\\\\s*([^;]+)`).exec(style)?.[1]?.trim(),\n );\n };\n const visit = (element: Element): void => {\n const tag = tagOf(element);\n const style = element.getAttribute('style') ?? '';\n const display = /(?:^|;)\\s*display\\s*:\\s*([^;]+)/.exec(style)?.[1]?.trim()\n ?? element.getAttribute('display');\n\n if (display === 'none') { return; }\n if (declarations.has(tag) || native.has(tag)) { return; }\n if (!containers.has(tag) && !graphics.has(tag)) { return; }\n if (!hasGraphics(element)) { return; }\n if ((graphics.has(tag) || tag === 'switch') && !containsNative(element)) {\n scopes.push({ path: buildElementTreePath(element), selector: selectorOf(element), isGroup: containers.has(tag) });\n\n return;\n }\n if (hasGroupEffect(element) && !containsNative(element)) {\n scopes.push({ path: buildElementTreePath(element), selector: selectorOf(element), isGroup: containers.has(tag) });\n\n return;\n }\n if (hasGroupEffect(element)) {\n warnings.push({\n message: 'A compositing group contains native text or images; its graphics cannot be baked separately.',\n selector: selectorOf(element),\n });\n\n return;\n }\n for (const child of Array.from(element.children)) { visit(child); }\n };\n\n visit(root);\n\n return { scopes, warnings };\n}\n\nfunction collectGroupEffectRules(root: Element): CSSStyleRule[] {\n const result: CSSStyleRule[] = [];\n\n if (typeof CSSStyleSheet !== 'function') { return result; }\n const visit = (rules: CSSRuleList): void => {\n for (const rule of Array.from(rules)) {\n if (isStyleRule(rule)) {\n const affectsGroup = hasGraphicGroupEffect(name => {\n const value = rule.style.getPropertyValue(name).trim();\n\n return value === '' || value === 'initial' || value === 'unset' ? undefined : value;\n });\n\n if (affectsGroup) { result.push(rule); }\n } else if (hasNestedRules(rule)) {\n visit(rule.cssRules);\n }\n }\n };\n\n for (const style of Array.from(root.querySelectorAll('style'))) {\n const sheet = new CSSStyleSheet();\n\n sheet.replaceSync(style.textContent ?? '');\n visit(sheet.cssRules);\n }\n\n return result;\n}\n\n/** Reject text/image dependencies and effects that cannot be rendered independently. */\nexport function validateGraphicSnapshot(context: SVGSnapshotContext): void {\n const { root, target, elements, dependencies, readStyle } = context;\n\n for (const element of dependencies) {\n if (['text', 'image', 'foreignobject'].includes(element.tagName.toLowerCase())) {\n throw new Error('Graphic dependencies contain native text or images; they must remain editable.');\n }\n }\n for (const element of elements) {\n const computed = readStyle(element);\n const ancestor = element !== target && element.contains(target);\n const groupEffect = ancestor && hasGraphicGroupEffect(name => name === 'mask'\n ? computed.maskImage : computed.getPropertyValue(name));\n\n if (ancestor && (groupEffect || computed.mixBlendMode !== 'normal')) {\n throw new Error('A mixed group effect cannot be applied independently to its graphics.');\n }\n if (target.contains(element) && target !== root && computed.mixBlendMode !== 'normal') {\n throw new Error('Blend modes that depend on an external backdrop cannot be baked independently.');\n }\n }\n}\n\nfunction isStyleRule(rule: CSSRule): rule is CSSStyleRule {\n return rule.type === 1;\n}\n\nfunction hasNestedRules(rule: CSSRule): rule is CSSGroupingRule {\n return 'cssRules' in rule;\n}\n\nfunction hasGraphicGroupEffect(readValue: (name: string) => string | null | undefined): boolean {\n return groupEffects.some(name => {\n const value = readValue(name);\n\n return value != null && value !== 'none' && value !== 'normal' && value !== '1';\n });\n}\n","import { SVG } from '@svgdotjs/svg.js';\nimport { buildElementTreePath } from '../../parse-svg/build-element-tree-path';\n\n/** Mask and clipPath definitions do not produce visible layers. */\nexport function collectNonRenderingDeclarationPaths(source: string): Set<string> {\n const root = SVG(source).node;\n const elements = Array.from(root.querySelectorAll('*')).filter(element => {\n const tag = element.tagName.toLowerCase();\n\n return tag === 'mask' || tag === 'clippath';\n });\n\n return new Set(elements.map(buildElementTreePath));\n}\n\n/** A stylesheet diagnostic is resolved only when every element it can affect was baked. */\nexport function collectBakedStylesheetPaths(source: string, isBaked: (path: string) => boolean): Set<string> {\n const resolved = new Set<string>();\n\n if (typeof DOMParser === 'undefined' || typeof CSSStyleSheet !== 'function') { return resolved; }\n const root = new DOMParser().parseFromString(source, 'image/svg+xml').documentElement;\n const allUsesBaked = Array.from(root.querySelectorAll('use')).every(element => isBaked(buildElementTreePath(element)));\n const isHandled = (element: Element): boolean => {\n if (isBaked(buildElementTreePath(element))) { return true; }\n if (element.closest('defs, symbol, marker, pattern, clipPath, mask, filter') != null) { return allUsesBaked; }\n\n return false;\n };\n\n for (const style of Array.from(root.querySelectorAll('style'))) {\n const sheet = new CSSStyleSheet();\n\n sheet.replaceSync(style.textContent ?? '');\n const rules = Array.from(sheet.cssRules);\n const handled = rules.every(rule => {\n if (!isStyleRule(rule)) { return false; }\n if (Array.from(rule.style).every(name => name === 'mix-blend-mode')) { return true; }\n const matched = [root, ...Array.from(root.querySelectorAll('*'))]\n .filter(element => element.matches(rule.selectorText));\n\n return matched.every(isHandled);\n });\n\n if (handled) { resolved.add(buildElementTreePath(style)); }\n }\n\n return resolved;\n}\n\nfunction isStyleRule(rule: CSSRule): rule is CSSStyleRule {\n return rule.type === 1;\n}\n","import { SVG2IR_WARNING_CODES, type ConvertOptions, type SVG2IRWarning } from '../../common/types';\nimport { canRasterizeSVG, rasterizeSVG } from '../../svg-rasterizer/rasterize-svg';\nimport { collectLayerWarning } from '../converter/diagnostics/collect-warnings';\nimport type { SVGImageLayer } from '../types';\nimport { normalizeLayerBlending } from './normalize-layer-blending';\nimport { planGraphicBaking, validateGraphicSnapshot } from './plan-graphic-baking';\nimport { collectBakedStylesheetPaths, collectNonRenderingDeclarationPaths } from './resolve-baking-warnings';\n\nexport interface BakedLayersResult {\n layers: Array<{ path: string; layer: SVGImageLayer }>;\n warnings: SVG2IRWarning[];\n replacesSource: (path: string | undefined) => boolean;\n resolvesWarning: (warning: SVG2IRWarning, path: string | undefined) => boolean;\n}\n\n/** Rasterize graphics and track the source layers and warnings they replace. */\nexport async function buildBakedLayers(\n source: string,\n size: [number, number],\n options: ConvertOptions,\n rasterScale: number,\n): Promise<BakedLayersResult> {\n const deferredOptions = { ...options, strict: false, onWarning: undefined };\n const bakedPaths: string[] = [];\n const baked: BakedLayersResult['layers'] = [];\n const bakingWarnings: SVG2IRWarning[] = [];\n const blending = normalizeLayerBlending(source);\n const plan = planGraphicBaking(blending.source);\n\n for (const downgrade of blending.downgrades) {\n collectLayerWarning(bakingWarnings, deferredOptions, SVG2IR_WARNING_CODES.LAYERS_BLEND_MODE_DOWNGRADED,\n `mix-blend-mode \"${downgrade.mode}\" was downgraded to \"normal\"; the layer is retained.`, downgrade.selector);\n }\n\n for (const warning of plan.warnings) {\n collectLayerWarning(bakingWarnings, deferredOptions, SVG2IR_WARNING_CODES.LAYERS_UNSUPPORTED_FEATURE,\n warning.message, warning.selector);\n }\n for (const scope of plan.scopes) {\n try {\n if (!canRasterizeSVG()) { throw new Error('Graphic baking requires a browser with SVG and Canvas support.'); }\n const image = await rasterizeSVG(blending.source, scope.path, size, rasterScale, validateGraphicSnapshot);\n\n bakedPaths.push(scope.path);\n const message = image == null\n ? 'Graphic rasterization produced no visible pixels; no image layer was emitted.'\n : scope.isGroup\n ? 'Graphic group baked into a single PNG; child graphics and paint/effect parameters are no longer editable.'\n : 'Graphic baked into a PNG; vector geometry and paint/effect parameters are no longer editable.';\n\n collectLayerWarning(bakingWarnings, deferredOptions, SVG2IR_WARNING_CODES.LAYERS_GRAPHIC_BAKED,\n message, scope.selector);\n if (image == null) { continue; }\n const [left, top, right, bottom] = image.bbox;\n const width = right - left;\n const height = bottom - top;\n\n baked.push({ path: scope.path, layer: {\n id: '', type: 'image', role: 'content', bbox: image.bbox, size: [width, height], rotation: [0, 0, 0],\n url: image.url, width, height,\n } });\n } catch (error) {\n const reason = error instanceof Error ? error.message : String(error);\n\n collectLayerWarning(bakingWarnings, deferredOptions, SVG2IR_WARNING_CODES.LAYERS_UNSUPPORTED_FEATURE,\n `Graphic baking failed: ${reason}`, scope.selector);\n }\n }\n const replacesSource = (path: string | undefined): boolean => path != null\n && bakedPaths.some(scope => scope === '' || path === scope || path.startsWith(`${scope}/`));\n const handledStyles = collectBakedStylesheetPaths(blending.source, replacesSource);\n const declarations = collectNonRenderingDeclarationPaths(source);\n\n return {\n layers: baked, warnings: bakingWarnings, replacesSource,\n resolvesWarning: (warning, path) => replacesSource(path)\n || (warning.code === SVG2IR_WARNING_CODES.ELEMENT_DROPPED && path != null\n && (handledStyles.has(path) || declarations.has(path))),\n };\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 { SVG } from '@svgdotjs/svg.js';\n\nconst animatedTags = new Set(['animate', 'animatetransform', 'animatemotion', 'set']);\n\n/** Static layers cannot sample animation; drop SMIL nodes so elements keep their authored state. */\nexport function stripLayerAnimation(source: string): { source: string; removed: number } {\n const svg = SVG(source) as unknown as { node?: Element; svg: () => string } | null;\n\n if (svg?.node == null) { return { source, removed: 0 }; }\n const elements = Array.from(svg.node.querySelectorAll('*'))\n .filter(element => animatedTags.has(element.tagName.toLowerCase()));\n\n if (elements.length === 0) { return { source, removed: 0 }; }\n for (const element of elements) { element.remove(); }\n\n return { source: svg.svg(), removed: elements.length };\n}\n","import { SVG2IR_WARNING_CODES, type ConvertOptions, type SVGSource, type SVG2IRWarning } from '../common/types';\nimport type { SVGPreservedData } from '../svg-preserved-data';\nimport { parseSVGToIRWithPreservedData } from '../svg2ir/convert';\nimport { assembleSVGLayers } from './assemble';\nimport { collectLayerWarning } from './converter/diagnostics/collect-warnings';\nimport { buildBakedLayers } from './baking/build-baked-layers';\nimport { inlineImageResources } from './post-process/inline-image-resources';\nimport { stripLayerAnimation } from './strip-layer-animation';\nimport type { SVGImageResourceLoader, SVGToLayersResult } from './types';\n\nexport async function convertSVGToLayers(\n source: SVGSource,\n options: ConvertOptions,\n loadImage?: SVGImageResourceLoader,\n preservedData?: SVGPreservedData,\n rasterScale = 2,\n): Promise<SVGToLayersResult> {\n const layerSources = new Map<string, string>();\n const warningSources = new Map<SVG2IRWarning, string>();\n const collected: Required<SVGPreservedData> = {\n textDataByLayerId: new Map(), paintAnimationsByLayerId: new Map(), shapeAnimationsByLayerId: new Map(),\n };\n const stripped = stripLayerAnimation(source);\n const staticSource = stripped.source;\n\n // Preserve original layer IDs while gathering the source identities required by baking and assembly.\n const parsed = parseSVGToIRWithPreservedData(staticSource, { ...options, strict: false, onWarning: undefined }, {\n ...collected, layerSourceCollector: layerSources, warningSourceCollector: warningSources,\n });\n\n if (stripped.removed > 0) {\n collectLayerWarning(parsed.warnings, { ...options, strict: false, onWarning: undefined },\n SVG2IR_WARNING_CODES.LAYERS_ANIMATION_STRIPPED,\n `${stripped.removed} animated element(s) were removed; static layers output does not sample animation.`);\n }\n\n const composition = parsed.ir.compositions[0];\n const baking = await buildBakedLayers(staticSource, [composition.width, composition.height], options, rasterScale);\n const assembled = assembleSVGLayers({\n scene: parsed.ir, options, warnings: parsed.warnings, preservedData: preservedData ?? collected,\n layerSources, warningSources, baking,\n });\n\n return { ...assembled, data: await inlineImageResources(assembled.data, loadImage) };\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 /** Graphic baking resolution; logical layer dimensions remain unchanged. Default: 2. */\n rasterScale?: number;\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, rasterScale, ...parserOptions } = options;\n\n return convertSVGToLayers(source, parserOptions, loadImage, preservedData, rasterScale);\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","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","match","expanded","map","char","join","r","parseInt","g","b","splitFunctionalColor","components","alpha","parseRGBComponent","some","parsedAlpha","parseAlpha","hue","parseHue","saturation","parsePercentage","lightness","chroma","Math","abs","hueSector","intermediate","offset","body","slashParts","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","buildElementTreePath","indices","isElementNode","parentNode","children","nodeType","SVG2IR_WARNING_CODES","LAYERS_GRAPHIC_BAKED","LAYERS_BLEND_MODE_DOWNGRADED","LAYERS_ANIMATION_STRIPPED","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","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","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","layerSourceCollector","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","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","normalizeFontFamilyName","weightStr","genericFamilies","familyName","estimateTextWidth","letterSpacing","chars","fontDesc","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","currentPath","warningSourceCollector","warning","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","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","advisory","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","characters","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","maskCoversImage","epsilon","inverted","straightEdges","opposite","top","bottom","resolveIRVisualState","unsupportedMask","blendMode","IRBlendMode","Normal","buildIRStaticLayers","sourceIds","layerCounts","converted","assembleSVGStaticLayers","assembleSVGLayers","layerSources","warningSources","baking","resolvesWarning","nativeScene","replacesSource","native","comparePaths","counts","animatedElements","declarations","prepareSVGSnapshot","inspect","elements","selected","removeAttributeNode","createElement","setAttribute","cssText","appendChild","computed","frameWindow","getComputedStyle","contains","ancestor","animationName","hasAnimationChildren","authored","frameDocument","styleRules","rule","selectorText","properties","getPropertyValue","_match","normalizeReference","isTemplate","templateRoots","template","frozenStyles","contentDocument","contentWindow","mounted","mountedElements","selectedIndex","hash","baseURI","collectRules","rules","isStyleRule","hasNestedRules","isMediaRule","matchMedia","conditionText","cssRules","styleSheets","sheet","byId","checkDependencies","localName","ids","matchAll","readStyle","isolate","definitions","replaceWith","XMLSerializer","serializeToString","remove","rasterizeSVG","snapshot","canvas","RangeError","renderSVG","cropRasterImage","canRasterizeSVG","HTMLCanvasElement","Image","getContext","URL","createObjectURL","Blob","onload","onerror","src","drawImage","revokeObjectURL","getImageData","cropped","croppedContext","toDataURL","normalValues","normalizeLayerBlending","downgrades","normalizeBlendDeclarations","onDowngrade","replacements","colon","parentheses","quote","comment","finish","character","replacement","graphics","containers","groupEffects","planGraphicBaking","scopes","effectRules","collectGroupEffectRules","tagOf","selectorOf","references","containsNative","hasGraphics","hasGroupEffect","hasGraphicGroupEffect","visit","isGroup","CSSStyleSheet","affectsGroup","replaceSync","validateGraphicSnapshot","groupEffect","maskImage","mixBlendMode","readValue","collectNonRenderingDeclarationPaths","collectBakedStylesheetPaths","isBaked","allUsesBaked","isHandled","closest","handled","matched","buildBakedLayers","rasterScale","deferredOptions","bakedPaths","baked","bakingWarnings","blending","plan","downgrade","scope","reason","handledStyles","encodeBase64","fromCharCode","subarray","btoa","readImageDataUrl","payload","comma","parameters","decoded","Uint8Array","encoder","TextEncoder","token","encode","fetchImageResource","response","protocol","fetch","ok","status","arrayBuffer","headers","inlineImageResources","loadImage","resources","resource","animatedTags","stripLayerAnimation","removed","convertSVGToLayers","stripped","staticSource","assembled","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","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,63,79,80,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123]}
|