@retikz/vanilla 0.3.0-beta.1 → 0.3.0-beta.2

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.
Files changed (71) hide show
  1. package/dist/es/builder/{isFigure.d.ts → is-figure.d.ts} +1 -1
  2. package/dist/es/builder/is-figure.d.ts.map +1 -0
  3. package/dist/es/builder/{isFigure.js → is-figure.js} +1 -1
  4. package/dist/es/builder/types.d.ts +18 -5
  5. package/dist/es/builder/types.d.ts.map +1 -1
  6. package/dist/es/builder/types.js +17 -0
  7. package/dist/es/figure.d.ts +1 -1
  8. package/dist/es/figure.d.ts.map +1 -1
  9. package/dist/es/figure.js +38 -8
  10. package/dist/es/index.d.ts +4 -4
  11. package/dist/es/index.d.ts.map +1 -1
  12. package/dist/es/index.js +3 -3
  13. package/dist/{lib/mountCanvas.d.ts → es/mount-canvas.d.ts} +1 -1
  14. package/dist/es/mount-canvas.d.ts.map +1 -0
  15. package/dist/es/{mountCanvas.js → mount-canvas.js} +46 -7
  16. package/dist/es/{mountSvg.d.ts → mount-svg.d.ts} +1 -1
  17. package/dist/es/mount-svg.d.ts.map +1 -0
  18. package/dist/es/{mountSvg.js → mount-svg.js} +13 -5
  19. package/dist/{lib/renderToSvgString.d.ts → es/render-to-svg-string.d.ts} +1 -1
  20. package/dist/es/render-to-svg-string.d.ts.map +1 -0
  21. package/dist/es/{renderToSvgString.js → render-to-svg-string.js} +3 -3
  22. package/dist/es/{svgNodeToDom.d.ts → svg-node-to-dom.d.ts} +1 -1
  23. package/dist/es/svg-node-to-dom.d.ts.map +1 -0
  24. package/dist/es/{svgNodeToDom.js → svg-node-to-dom.js} +1 -1
  25. package/dist/{lib/toScene.d.ts → es/to-scene.d.ts} +1 -1
  26. package/dist/es/to-scene.d.ts.map +1 -0
  27. package/dist/es/{toScene.js → to-scene.js} +1 -1
  28. package/dist/es/types.d.ts +2 -2
  29. package/dist/es/types.d.ts.map +1 -1
  30. package/dist/lib/builder/{isFigure.cjs → is-figure.cjs} +1 -1
  31. package/dist/lib/builder/{isFigure.d.ts → is-figure.d.ts} +1 -1
  32. package/dist/lib/builder/is-figure.d.ts.map +1 -0
  33. package/dist/lib/builder/types.cjs +17 -0
  34. package/dist/lib/builder/types.d.ts +18 -5
  35. package/dist/lib/builder/types.d.ts.map +1 -1
  36. package/dist/lib/figure.cjs +43 -13
  37. package/dist/lib/figure.d.ts +1 -1
  38. package/dist/lib/figure.d.ts.map +1 -1
  39. package/dist/lib/index.cjs +6 -6
  40. package/dist/lib/index.d.ts +4 -4
  41. package/dist/lib/index.d.ts.map +1 -1
  42. package/dist/lib/{mountCanvas.cjs → mount-canvas.cjs} +49 -10
  43. package/dist/{es/mountCanvas.d.ts → lib/mount-canvas.d.ts} +1 -1
  44. package/dist/lib/mount-canvas.d.ts.map +1 -0
  45. package/dist/lib/{mountSvg.cjs → mount-svg.cjs} +18 -10
  46. package/dist/lib/{mountSvg.d.ts → mount-svg.d.ts} +1 -1
  47. package/dist/lib/mount-svg.d.ts.map +1 -0
  48. package/dist/lib/{renderToSvgString.cjs → render-to-svg-string.cjs} +5 -5
  49. package/dist/{es/renderToSvgString.d.ts → lib/render-to-svg-string.d.ts} +1 -1
  50. package/dist/lib/render-to-svg-string.d.ts.map +1 -0
  51. package/dist/lib/{svgNodeToDom.cjs → svg-node-to-dom.cjs} +1 -1
  52. package/dist/lib/{svgNodeToDom.d.ts → svg-node-to-dom.d.ts} +1 -1
  53. package/dist/lib/svg-node-to-dom.d.ts.map +1 -0
  54. package/dist/lib/{toScene.cjs → to-scene.cjs} +1 -1
  55. package/dist/{es/toScene.d.ts → lib/to-scene.d.ts} +1 -1
  56. package/dist/lib/to-scene.d.ts.map +1 -0
  57. package/dist/lib/types.d.ts +2 -2
  58. package/dist/lib/types.d.ts.map +1 -1
  59. package/package.json +4 -4
  60. package/dist/es/builder/isFigure.d.ts.map +0 -1
  61. package/dist/es/mountCanvas.d.ts.map +0 -1
  62. package/dist/es/mountSvg.d.ts.map +0 -1
  63. package/dist/es/renderToSvgString.d.ts.map +0 -1
  64. package/dist/es/svgNodeToDom.d.ts.map +0 -1
  65. package/dist/es/toScene.d.ts.map +0 -1
  66. package/dist/lib/builder/isFigure.d.ts.map +0 -1
  67. package/dist/lib/mountCanvas.d.ts.map +0 -1
  68. package/dist/lib/mountSvg.d.ts.map +0 -1
  69. package/dist/lib/renderToSvgString.d.ts.map +0 -1
  70. package/dist/lib/svgNodeToDom.d.ts.map +0 -1
  71. package/dist/lib/toScene.d.ts.map +0 -1
@@ -3,4 +3,4 @@ import { Figure } from '../figure';
3
3
  export declare const FIGURE_BRAND: unique symbol;
4
4
  /** 运行时判断一个值是不是 Figure(带 brand);纯结构检查、零内部 import → 不与 mountSvg/Figure 形成运行时环 */
5
5
  export declare const isFigure: (value: unknown) => value is Figure;
6
- //# sourceMappingURL=isFigure.d.ts.map
6
+ //# sourceMappingURL=is-figure.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is-figure.d.ts","sourceRoot":"","sources":["../../../src/builder/is-figure.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAExC,oGAAoG;AACpG,eAAO,MAAM,YAAY,EAAE,OAAO,MAA4C,CAAC;AAE/E,+EAA+E;AAC/E,eAAO,MAAM,QAAQ,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,MACuD,CAAC"}
@@ -1,4 +1,4 @@
1
- //#region src/builder/isFigure.ts
1
+ //#region src/builder/is-figure.ts
2
2
  /** Figure 品牌标记(Symbol.for 跨包/重复 import 仍同一);标准 mountSvg/renderToSvgString 用它区分 Figure 与 IR/Scene */
3
3
  var FIGURE_BRAND = Symbol.for("retikz.vanilla.figure");
4
4
  /** 运行时判断一个值是不是 Figure(带 brand);纯结构检查、零内部 import → 不与 mountSvg/Figure 形成运行时环 */
@@ -1,4 +1,4 @@
1
- import { CompileOptions, IRChild, IRCoordinate, IRNode, IRPath, IRScope, IRViewBox, WayDSL } from '@retikz/core';
1
+ import { CompileOptions, IRAnimationTrack, IRChild, IRCoordinate, IRNode, IRPath, IRScope, IRViewBox, WayDSL } from '@retikz/core';
2
2
  /** builder 函数返回的 IR 子节点(node / draw / coordinate / scope 的产物) */
3
3
  export type Child = IRChild;
4
4
  /** node 的 config:从 IRNode 派生,剔除判别符 type 与提为 positional 的 id */
@@ -11,16 +11,29 @@ export type CoordinateConfig = Omit<IRCoordinate, 'type' | 'id'>;
11
11
  export type ScopeConfig = Omit<IRScope, 'type' | 'children'>;
12
12
  /** draw 的 way:直接复用 core 的 way DSL 全集(id 串 / 坐标 / Cycle / 折角 / 相对 / 曲线 / 弧 …) */
13
13
  export type Way = WayDSL;
14
+ /**
15
+ * figure 根级级联样式默认(与 React `<Layout>` 顶层样式 props 对齐)
16
+ * @description 取 `IRScope` 的级联样式通道(graphic state + 四通道 every-X),**不含**容器 / 命名空间 / 变换 /
17
+ * 屏障 / 栈序 / 裁剪字段(那些挂在 figure 根上语义易混)。组 IR 时若任一字段携带样式指令,把根 children 包进
18
+ * 一层合成根 `<Scope>`,等价于用户手写一层根 scope;全缺省时不包,IR 形态逐字保持。
19
+ */
20
+ export type FigureRootStyle = Pick<IRScope, 'color' | 'stroke' | 'fill' | 'strokeWidth' | 'opacity' | 'fillOpacity' | 'drawOpacity' | 'nodeDefault' | 'pathDefault' | 'labelDefault' | 'arrowDefault'>;
21
+ /** {@link FigureRootStyle} 的字段表——`figure.ts` 组 IR 时拣根样式 + 从 render options 剔除(IR-only 字段不下发) */
22
+ export declare const FIGURE_ROOT_STYLE_FIELDS: readonly ["color", "stroke", "fill", "strokeWidth", "opacity", "fillOpacity", "drawOpacity", "nodeDefault", "pathDefault", "labelDefault", "arrowDefault"];
14
23
  /**
15
24
  * figure 的 config
16
- * @description `viewBox` → IR.viewBox(内容坐标系);`width`/`height` → 根 `<svg>` 显示尺寸(adapter 职责);
17
- * `idPrefix` → SVG 资源 id 前缀;其余(measureText / shapes / arrows / patterns / pathGenerators /
18
- * padding / precision / nodeDistance / onWarn)派生自 core `CompileOptions`、原样喂 compileToScene。
25
+ * @description `viewBox` → IR.viewBox(内容坐标系);`animations` → IR `animations`(镜头时间轴,配 cameraTo
26
+ * preset);`width`/`height` → 根 `<svg>` 显示尺寸(adapter 职责);`idPrefix` → SVG 资源 id 前缀;根级级联样式
27
+ * (color / nodeDefault / pathDefault / labelDefault / arrowDefault 等)按需包合成根 `<Scope>`;其余(measureText /
28
+ * shapes / arrows / patterns / pathGenerators / padding / precision / nodeDistance / onWarn)派生自 core
29
+ * `CompileOptions`、原样喂 compileToScene。
19
30
  */
20
31
  export type FigureConfig = {
21
32
  width?: number;
22
33
  height?: number;
23
34
  viewBox?: IRViewBox;
24
35
  idPrefix?: string;
25
- } & CompileOptions;
36
+ /** scene 根(镜头)时间轴动画 tracks(`viewBox` property,配 `cameraTo()` preset);注入 IR 根 `animations` */
37
+ animations?: Array<IRAnimationTrack>;
38
+ } & FigureRootStyle & CompileOptions;
26
39
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/builder/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,OAAO,EACP,YAAY,EACZ,MAAM,EACN,MAAM,EACN,OAAO,EACP,SAAS,EACT,MAAM,EACP,MAAM,cAAc,CAAC;AAEtB,iEAAiE;AACjE,MAAM,MAAM,KAAK,GAAG,OAAO,CAAC;AAE5B,+DAA+D;AAC/D,MAAM,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;AAErD,mEAAmE;AACnE,MAAM,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC,CAAC;AAE3D,qFAAqF;AACrF,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;AAEjE,8EAA8E;AAC9E,MAAM,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CAAC,CAAC;AAE7D,gFAAgF;AAChF,MAAM,MAAM,GAAG,GAAG,MAAM,CAAC;AAEzB;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,cAAc,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/builder/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,gBAAgB,EAChB,OAAO,EACP,YAAY,EACZ,MAAM,EACN,MAAM,EACN,OAAO,EACP,SAAS,EACT,MAAM,EACP,MAAM,cAAc,CAAC;AAEtB,iEAAiE;AACjE,MAAM,MAAM,KAAK,GAAG,OAAO,CAAC;AAE5B,+DAA+D;AAC/D,MAAM,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;AAErD,mEAAmE;AACnE,MAAM,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC,CAAC;AAE3D,qFAAqF;AACrF,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;AAEjE,8EAA8E;AAC9E,MAAM,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CAAC,CAAC;AAE7D,gFAAgF;AAChF,MAAM,MAAM,GAAG,GAAG,MAAM,CAAC;AAEzB;;;;;GAKG;AACH,MAAM,MAAM,eAAe,GAAG,IAAI,CAChC,OAAO,EACL,OAAO,GACP,QAAQ,GACR,MAAM,GACN,aAAa,GACb,SAAS,GACT,aAAa,GACb,aAAa,GACb,aAAa,GACb,aAAa,GACb,cAAc,GACd,cAAc,CACjB,CAAC;AAEF,gGAAgG;AAChG,eAAO,MAAM,wBAAwB,4JAYoB,CAAC;AAE1D;;;;;;;GAOG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6FAA6F;IAC7F,UAAU,CAAC,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC;CACtC,GAAG,eAAe,GACjB,cAAc,CAAC"}
@@ -0,0 +1,17 @@
1
+ //#region src/builder/types.ts
2
+ /** {@link FigureRootStyle} 的字段表——`figure.ts` 组 IR 时拣根样式 + 从 render options 剔除(IR-only 字段不下发) */
3
+ var FIGURE_ROOT_STYLE_FIELDS = [
4
+ "color",
5
+ "stroke",
6
+ "fill",
7
+ "strokeWidth",
8
+ "opacity",
9
+ "fillOpacity",
10
+ "drawOpacity",
11
+ "nodeDefault",
12
+ "pathDefault",
13
+ "labelDefault",
14
+ "arrowDefault"
15
+ ];
16
+ //#endregion
17
+ export { FIGURE_ROOT_STYLE_FIELDS };
@@ -1,6 +1,6 @@
1
1
  import { IR } from '@retikz/core';
2
2
  import { RenderOptions } from '@retikz/render/canvas';
3
- import { FIGURE_BRAND } from './builder/isFigure';
3
+ import { FIGURE_BRAND } from './builder/is-figure';
4
4
  import { node } from './builder/node';
5
5
  import { ScopeBuilder } from './builder/scope';
6
6
  import { Child, CoordinateConfig, DrawConfig, FigureConfig, ScopeConfig, Way } from './builder/types';
@@ -1 +1 @@
1
- {"version":3,"file":"figure.d.ts","sourceRoot":"","sources":["../../src/figure.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAG3D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAEtC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAK3G,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,YAAY,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEhH;;;;;GAKG;AACH,MAAM,MAAM,MAAM,GAAG;IACnB,QAAQ,CAAC,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC;IAC9B,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC;IAChB,KAAK,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,YAAY,KAAK,WAAW,CAAC;IACnE,WAAW,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,kBAAkB,KAAK,UAAU,CAAC;IAC9E,WAAW,EAAE,CAAC,OAAO,CAAC,EAAE,qBAAqB,KAAK,MAAM,CAAC;IACzD,QAAQ,EAAE,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE,aAAa,KAAK,IAAI,CAAC;IACvE,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,MAAM,CAAC;IACnD,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,UAAU,KAAK,MAAM,CAAC;IAChD,UAAU,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,KAAK,MAAM,CAAC;IAC7D,KAAK,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,YAAY,KAAK,IAAI,CAAC,KAAK,MAAM,CAAC;CACzF,CAAC;AAEF,2DAA2D;AAC3D,eAAO,MAAM,YAAY,GAAI,QAAQ,YAAY,EAAE,UAAU,KAAK,CAAC,KAAK,CAAC,KAAG,MAwD3E,CAAC"}
1
+ {"version":3,"file":"figure.d.ts","sourceRoot":"","sources":["../../src/figure.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAG3D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAEtC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD,OAAO,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,YAAY,EAAmB,WAAW,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAK5H,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,YAAY,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEhH;;;;;GAKG;AACH,MAAM,MAAM,MAAM,GAAG;IACnB,QAAQ,CAAC,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC;IAC9B,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC;IAChB,KAAK,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,YAAY,KAAK,WAAW,CAAC;IACnE,WAAW,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,kBAAkB,KAAK,UAAU,CAAC;IAC9E,WAAW,EAAE,CAAC,OAAO,CAAC,EAAE,qBAAqB,KAAK,MAAM,CAAC;IACzD,QAAQ,EAAE,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE,aAAa,KAAK,IAAI,CAAC;IACvE,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,MAAM,CAAC;IACnD,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,UAAU,KAAK,MAAM,CAAC;IAChD,UAAU,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,KAAK,MAAM,CAAC;IAC7D,KAAK,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,YAAY,KAAK,IAAI,CAAC,KAAK,MAAM,CAAC;CACzF,CAAC;AAoBF,2DAA2D;AAC3D,eAAO,MAAM,YAAY,GAAI,QAAQ,YAAY,EAAE,UAAU,KAAK,CAAC,KAAK,CAAC,KAAG,MAoE3E,CAAC"}
package/dist/es/figure.js CHANGED
@@ -1,33 +1,61 @@
1
- import { FIGURE_BRAND } from "./builder/isFigure.js";
2
- import { toScene } from "./toScene.js";
3
- import { renderToSvgString } from "./renderToSvgString.js";
4
- import { mountSvg } from "./mountSvg.js";
5
- import { mountCanvas } from "./mountCanvas.js";
1
+ import { FIGURE_BRAND } from "./builder/is-figure.js";
2
+ import { toScene } from "./to-scene.js";
3
+ import { renderToSvgString } from "./render-to-svg-string.js";
4
+ import { mountSvg } from "./mount-svg.js";
5
+ import { mountCanvas } from "./mount-canvas.js";
6
6
  import { coordinate } from "./builder/coordinate.js";
7
7
  import { draw } from "./builder/draw.js";
8
8
  import { node } from "./builder/node.js";
9
9
  import { scope } from "./builder/scope.js";
10
+ import { FIGURE_ROOT_STYLE_FIELDS } from "./builder/types.js";
10
11
  import { renderToCanvas } from "@retikz/render/canvas";
11
12
  //#region src/figure.ts
13
+ /**
14
+ * 拣出真正携带样式指令的根样式字段
15
+ * @description 在「取 defined」基础上剔除空对象的四通道 default(`nodeDefault: {}` 等)——空 default 无样式指令,
16
+ * 留着只会让 figure 无谓包一层空合成根 `<Scope>`、改变 IR / Scene 拓扑却无视觉差异。标量通道的 falsy-但-defined
17
+ * 值(`strokeWidth: 0` / `opacity: 0`)是有意义样式、保留(镜像 react `pickScopeStyle`)。
18
+ */
19
+ var pickRootStyle = (config) => {
20
+ const picked = {};
21
+ for (const key of FIGURE_ROOT_STYLE_FIELDS) {
22
+ const value = config[key];
23
+ if (value === void 0) continue;
24
+ if (typeof value === "object" && Object.keys(value).length === 0) continue;
25
+ Object.assign(picked, { [key]: value });
26
+ }
27
+ return picked;
28
+ };
12
29
  /** figure() 的内部入口:装配 Figure(持 config + children,方法闭包其上) */
13
30
  var createFigure = (config, children) => {
14
- /** call-site options 覆盖 figure 存的 config(call-site wins):viewBox 已并进 ir,其余(width/height/idPrefix + 全套 CompileOptions)全透传 */
31
+ /**
32
+ * call-site options 覆盖 figure 存的 config(call-site wins):viewBox / animations / 根样式已并进 ir,
33
+ * 这些 IR-only 字段从下发的 render options 剔除;其余(width/height/idPrefix + 全套 CompileOptions)全透传。
34
+ */
15
35
  const renderOptions = (callSite) => {
16
36
  const merged = {
17
37
  ...config,
18
38
  ...callSite
19
39
  };
20
40
  delete merged.viewBox;
41
+ delete merged.animations;
42
+ for (const key of FIGURE_ROOT_STYLE_FIELDS) delete merged[key];
21
43
  return merged;
22
44
  };
23
45
  const fig = {
24
46
  [FIGURE_BRAND]: true,
25
47
  get ir() {
48
+ const rootStyle = pickRootStyle(config);
26
49
  return {
27
50
  version: 1,
28
51
  type: "scene",
29
- children,
30
- ...config.viewBox ? { viewBox: config.viewBox } : {}
52
+ children: Object.keys(rootStyle).length > 0 ? [{
53
+ type: "scope",
54
+ ...rootStyle,
55
+ children
56
+ }] : children,
57
+ ...config.viewBox ? { viewBox: config.viewBox } : {},
58
+ ...config.animations ? { animations: config.animations } : {}
31
59
  };
32
60
  },
33
61
  mount(container, options) {
@@ -45,6 +73,8 @@ var createFigure = (config, children) => {
45
73
  delete compile.idPrefix;
46
74
  delete compile.width;
47
75
  delete compile.height;
76
+ delete compile.animations;
77
+ for (const key of FIGURE_ROOT_STYLE_FIELDS) delete compile[key];
48
78
  renderToCanvas(canvas, toScene(fig.ir, compile), options ?? {});
49
79
  },
50
80
  node(...args) {
@@ -6,10 +6,10 @@
6
6
  * `figure`/`node`/`draw`/`coordinate`/`scope` 是命令式 builder:用具名图元 + 自定义 shape 构图、产同一份 IR。
7
7
  * 模块顶层不触碰任何 DOM 全局——`import` 在纯 Node 下安全。
8
8
  */
9
- export { renderToSvgString } from './renderToSvgString';
10
- export { mountSvg } from './mountSvg';
9
+ export { renderToSvgString } from './render-to-svg-string';
10
+ export { mountSvg } from './mount-svg';
11
11
  export { hydrate } from './hydrate';
12
- export { mountCanvas } from './mountCanvas';
12
+ export { mountCanvas } from './mount-canvas';
13
13
  export type { RetikzEventValue, HydrationHandlers, HydrationHandler, HydrationContext, HydrationAnimationControls, HydrationGeometry, } from '@retikz/render/hydration';
14
14
  export { fadeIn, drawOn, scaleIn, grow, growUp, slideIn, colorShift, cameraTo, pulse, spin, loop, flash, blink, wiggle, stagger, } from '@retikz/core';
15
15
  export type { AnimationPresetOptions, ScaleInOptions, GrowUpOptions, SlideInOptions, ColorShiftOptions, CameraToOptions, PulseOptions, SpinOptions, LoopOptions, FlashOptions, BlinkOptions, WiggleOptions, } from '@retikz/core';
@@ -26,6 +26,6 @@ export { coordinate } from './builder/coordinate';
26
26
  export { scope } from './builder/scope';
27
27
  export type { Figure } from './figure';
28
28
  export type { ScopeBuilder } from './builder/scope';
29
- export type { Child, NodeConfig, DrawConfig, CoordinateConfig, ScopeConfig, FigureConfig, Way, } from './builder/types';
29
+ export type { Child, NodeConfig, DrawConfig, CoordinateConfig, ScopeConfig, FigureConfig, FigureRootStyle, Way, } from './builder/types';
30
30
  export type { RenderInput, CommonOptions, MountOptions, RenderToStringOptions, VanillaView, CanvasView, MountCanvasOptions, HydrateOptions, HydrationHandle, ScenePoint, AnimationControls, } from './types';
31
31
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,YAAY,EACV,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,0BAA0B,EAC1B,iBAAiB,GAClB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,MAAM,EACN,MAAM,EACN,OAAO,EACP,IAAI,EACJ,MAAM,EACN,OAAO,EACP,UAAU,EACV,QAAQ,EACR,KAAK,EACL,IAAI,EACJ,IAAI,EACJ,KAAK,EACL,KAAK,EACL,MAAM,EACN,OAAO,GACR,MAAM,cAAc,CAAC;AACtB,YAAY,EACV,sBAAsB,EACtB,cAAc,EACd,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,YAAY,EACZ,WAAW,EACX,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,aAAa,GACd,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,YAAY,EACV,OAAO,EACP,MAAM,EACN,QAAQ,EACR,MAAM,EACN,eAAe,EACf,QAAQ,EACR,UAAU,GACX,MAAM,cAAc,CAAC;AAEtB,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE9D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAC/E,YAAY,EACV,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,UAAU,EACV,uBAAuB,EACvB,oBAAoB,EACpB,YAAY,GACb,MAAM,cAAc,CAAC;AAEtB,YAAY,EACV,2BAA2B,EAC3B,yBAAyB,EACzB,WAAW,EACX,QAAQ,EACR,cAAc,GACf,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,YAAY,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACvC,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,YAAY,EACV,KAAK,EACL,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,GAAG,GACJ,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,WAAW,EACX,aAAa,EACb,YAAY,EACZ,qBAAqB,EACrB,WAAW,EACX,UAAU,EACV,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,UAAU,EACV,iBAAiB,GAClB,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,YAAY,EACV,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,0BAA0B,EAC1B,iBAAiB,GAClB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,MAAM,EACN,MAAM,EACN,OAAO,EACP,IAAI,EACJ,MAAM,EACN,OAAO,EACP,UAAU,EACV,QAAQ,EACR,KAAK,EACL,IAAI,EACJ,IAAI,EACJ,KAAK,EACL,KAAK,EACL,MAAM,EACN,OAAO,GACR,MAAM,cAAc,CAAC;AACtB,YAAY,EACV,sBAAsB,EACtB,cAAc,EACd,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,YAAY,EACZ,WAAW,EACX,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,aAAa,GACd,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,YAAY,EACV,OAAO,EACP,MAAM,EACN,QAAQ,EACR,MAAM,EACN,eAAe,EACf,QAAQ,EACR,UAAU,GACX,MAAM,cAAc,CAAC;AAEtB,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE9D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAC/E,YAAY,EACV,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,UAAU,EACV,uBAAuB,EACvB,oBAAoB,EACpB,YAAY,GACb,MAAM,cAAc,CAAC;AAEtB,YAAY,EACV,2BAA2B,EAC3B,yBAAyB,EACzB,WAAW,EACX,QAAQ,EACR,cAAc,GACf,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,YAAY,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACvC,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,YAAY,EACV,KAAK,EACL,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,eAAe,EACf,GAAG,GACJ,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,WAAW,EACX,aAAa,EACb,YAAY,EACZ,qBAAqB,EACrB,WAAW,EACX,UAAU,EACV,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,UAAU,EACV,iBAAiB,GAClB,MAAM,SAAS,CAAC"}
package/dist/es/index.js CHANGED
@@ -1,7 +1,7 @@
1
- import { renderToSvgString } from "./renderToSvgString.js";
2
- import { mountSvg } from "./mountSvg.js";
1
+ import { renderToSvgString } from "./render-to-svg-string.js";
2
+ import { mountSvg } from "./mount-svg.js";
3
3
  import { hydrate } from "./hydrate.js";
4
- import { mountCanvas } from "./mountCanvas.js";
4
+ import { mountCanvas } from "./mount-canvas.js";
5
5
  import { coordinate } from "./builder/coordinate.js";
6
6
  import { draw } from "./builder/draw.js";
7
7
  import { node } from "./builder/node.js";
@@ -8,4 +8,4 @@ import { CanvasView, MountCanvasOptions, RenderInput } from './types';
8
8
  * 与 `clientToScene`(逆 meet-fit 坐标映射)。DOM 仅在调用时惰性触碰,`import` 本模块不碰 DOM——守 SSR 导入安全。
9
9
  */
10
10
  export declare const mountCanvas: (container: Element, input: RenderInput, options?: MountCanvasOptions) => CanvasView;
11
- //# sourceMappingURL=mountCanvas.d.ts.map
11
+ //# sourceMappingURL=mount-canvas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mount-canvas.d.ts","sourceRoot":"","sources":["../../src/mount-canvas.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,UAAU,EAAkB,kBAAkB,EAAE,WAAW,EAAc,MAAM,SAAS,CAAC;AASvG;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW,GACtB,WAAW,OAAO,EAClB,OAAO,WAAW,EAClB,UAAS,kBAAuB,KAC/B,UA4PF,CAAC"}
@@ -1,9 +1,9 @@
1
- import { isFigure } from "./builder/isFigure.js";
2
- import { toScene } from "./toScene.js";
1
+ import { isFigure } from "./builder/is-figure.js";
2
+ import { toScene } from "./to-scene.js";
3
3
  import { createClock, createIdClockRegistry, prefersReducedMotion, sceneAnimationDurationMs, sceneHasAnimations, sceneHasAutoplayTrigger } from "@retikz/render/animation";
4
4
  import { collectCanvasVisibleAnimationIds, createCanvasIdAnimationControls, createContextBuilder, createHydrationController, isCanvasAnimationIdVisible, withCanvasAnimationEventHandlers } from "@retikz/render/hydration";
5
5
  import { hitTest, renderToCanvas } from "@retikz/render/canvas";
6
- //#region src/mountCanvas.ts
6
+ //#region src/mount-canvas.ts
7
7
  /** 设备像素比:取有限正数、否则回退 1(镜像 react CanvasHost) */
8
8
  var resolveDevicePixelRatio = (override) => {
9
9
  if (typeof override === "number" && Number.isFinite(override) && override > 0) return override;
@@ -29,6 +29,7 @@ var mountCanvas = (container, input, options = {}) => {
29
29
  let visibleActivated = /* @__PURE__ */ new Set();
30
30
  let visibleTeardown;
31
31
  let currentScene;
32
+ const liveHydrations = /* @__PURE__ */ new Set();
32
33
  /** 把全局帧时刻折算成单个 prim 的动画解析(per-id):stop→渲染 base;否则按有效时刻 + 是否含非自动播 track */
33
34
  const resolvePrim = (id, globalTime) => id !== void 0 && registry.isStopped(id) ? { mode: "skip" } : {
34
35
  mode: "at",
@@ -71,14 +72,22 @@ var mountCanvas = (container, input, options = {}) => {
71
72
  visibleTeardown = void 0;
72
73
  if (!animate || !sceneHasAnimations(currentScene)) return;
73
74
  if (collectCanvasVisibleAnimationIds(currentScene).size === 0 || typeof window === "undefined") return;
74
- const schedule = () => activateVisibleTracks();
75
+ let scheduledRaf;
76
+ const runScheduled = () => {
77
+ scheduledRaf = void 0;
78
+ activateVisibleTracks();
79
+ };
80
+ const schedule = () => {
81
+ if (scheduledRaf !== void 0) return;
82
+ scheduledRaf = window.requestAnimationFrame(runScheduled);
83
+ };
75
84
  window.addEventListener("scroll", schedule, true);
76
85
  window.addEventListener("resize", schedule);
77
- const raf = window.requestAnimationFrame(schedule);
86
+ schedule();
78
87
  visibleTeardown = () => {
79
88
  window.removeEventListener("scroll", schedule, true);
80
89
  window.removeEventListener("resize", schedule);
81
- window.cancelAnimationFrame(raf);
90
+ if (scheduledRaf !== void 0) window.cancelAnimationFrame(scheduledRaf);
82
91
  };
83
92
  };
84
93
  const renderInto = (next) => {
@@ -93,6 +102,15 @@ var mountCanvas = (container, input, options = {}) => {
93
102
  if (options.width !== void 0) canvas.style.width = `${options.width}px`;
94
103
  if (options.height !== void 0) canvas.style.height = `${options.height}px`;
95
104
  canvas.style.objectFit = "contain";
105
+ if (options.snapshotAt !== void 0) {
106
+ renderToCanvas(canvas, scene, {
107
+ devicePixelRatio: ratio,
108
+ time: options.snapshotAt,
109
+ easings: options.easings,
110
+ animationProperties: options.animationProperties
111
+ });
112
+ return;
113
+ }
96
114
  renderToCanvas(canvas, scene, { devicePixelRatio: ratio });
97
115
  clock?.dispose();
98
116
  clock = void 0;
@@ -166,19 +184,40 @@ var mountCanvas = (container, input, options = {}) => {
166
184
  defaultId: id
167
185
  })
168
186
  });
169
- return { dispose: createHydrationController(canvas, withCanvasAnimationEventHandlers(currentScene, hydrateOptions.handlers), locate, buildContext).dispose };
187
+ const userHandlers = hydrateOptions.handlers;
188
+ const bind = () => createHydrationController(canvas, withCanvasAnimationEventHandlers(currentScene, userHandlers), locate, buildContext);
189
+ let controller = bind();
190
+ const live = {
191
+ rebind: () => {
192
+ controller.dispose();
193
+ controller = bind();
194
+ },
195
+ unbind: () => controller.dispose()
196
+ };
197
+ liveHydrations.add(live);
198
+ return { dispose: () => {
199
+ live.unbind();
200
+ liveHydrations.delete(live);
201
+ } };
202
+ };
203
+ /** update 换 scene 后按新 scene 重建存活水合的 onEvent 动画 handler 表(新增 / 移除的 onEvent track 即时反映) */
204
+ const rebindHydrations = () => {
205
+ for (const live of liveHydrations) live.rebind();
170
206
  };
171
207
  return {
172
208
  root: canvas,
173
209
  update(next) {
174
210
  if (disposed) throw new Error("mountCanvas: view already disposed.");
175
211
  renderInto(next);
212
+ rebindHydrations();
176
213
  },
177
214
  dispose() {
178
215
  if (disposed) return;
179
216
  disposed = true;
180
217
  visibleTeardown?.();
181
218
  clock?.dispose();
219
+ for (const live of liveHydrations) live.unbind();
220
+ liveHydrations.clear();
182
221
  canvas.remove();
183
222
  },
184
223
  hydrate,
@@ -7,4 +7,4 @@ import { MountOptions, RenderInput, VanillaView } from './types';
7
7
  * 原地重渲染、root 元素 identity 跨 update 不变、不失效。DOM 仅在调用时惰性触碰,`import` 本模块不碰 DOM——守 SSR 导入安全。
8
8
  */
9
9
  export declare const mountSvg: (container: Element, input: RenderInput, options?: MountOptions) => VanillaView;
10
- //# sourceMappingURL=mountSvg.d.ts.map
10
+ //# sourceMappingURL=mount-svg.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mount-svg.d.ts","sourceRoot":"","sources":["../../src/mount-svg.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAmC,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAIvG;;;;;;GAMG;AACH,eAAO,MAAM,QAAQ,GAAI,WAAW,OAAO,EAAE,OAAO,WAAW,EAAE,UAAS,YAAiB,KAAG,WAkF7F,CAAC"}
@@ -1,10 +1,10 @@
1
- import { isFigure } from "./builder/isFigure.js";
2
- import { toScene } from "./toScene.js";
3
- import { applyAttrs, svgNodeToDom } from "./svgNodeToDom.js";
1
+ import { isFigure } from "./builder/is-figure.js";
2
+ import { toScene } from "./to-scene.js";
3
+ import { applyAttrs, svgNodeToDom } from "./svg-node-to-dom.js";
4
4
  import { buildSvgDocument } from "@retikz/render/svg";
5
5
  import { bindWaapiDescriptors, prefersReducedMotion, sceneHasAnimations } from "@retikz/render/animation";
6
6
  import { createContextBuilder, createHydrationController, createSvgAnimationControls, locateSvg, resolvePointViaLayout, resolveSvgElement } from "@retikz/render/hydration";
7
- //#region src/mountSvg.ts
7
+ //#region src/mount-svg.ts
8
8
  var SVG_NS = "http://www.w3.org/2000/svg";
9
9
  /**
10
10
  * 把 IR / Scene / Figure 挂成真实 SVG DOM(无框架浏览器 runtime)
@@ -21,6 +21,7 @@ var mountSvg = (container, input, options = {}) => {
21
21
  const animate = options.animate !== false && !prefersReducedMotion();
22
22
  let animationControls;
23
23
  let currentScene;
24
+ const liveHydrationDisposers = /* @__PURE__ */ new Set();
24
25
  const renderInto = (next) => {
25
26
  if (isFigure(next)) throw new Error("mountSvg: view.update does not accept a Figure; pass figure.ir instead.");
26
27
  const scene = toScene(next, options);
@@ -57,7 +58,13 @@ var mountSvg = (container, input, options = {}) => {
57
58
  resolvePoint: (event) => resolvePointViaLayout(root, currentScene.layout)(event),
58
59
  makeAnimation: (id) => createSvgAnimationControls(root, id)
59
60
  });
60
- return { dispose: createHydrationController(root, hydrateOptions.handlers, locateSvg, buildContext).dispose };
61
+ const controller = createHydrationController(root, hydrateOptions.handlers, locateSvg, buildContext);
62
+ const dispose = () => {
63
+ controller.dispose();
64
+ liveHydrationDisposers.delete(dispose);
65
+ };
66
+ liveHydrationDisposers.add(dispose);
67
+ return { dispose };
61
68
  };
62
69
  let disposed = false;
63
70
  return {
@@ -70,6 +77,7 @@ var mountSvg = (container, input, options = {}) => {
70
77
  dispose() {
71
78
  if (disposed) return;
72
79
  disposed = true;
80
+ for (const disposeHydration of [...liveHydrationDisposers]) disposeHydration();
73
81
  animationControls?.dispose();
74
82
  root.remove();
75
83
  },
@@ -6,4 +6,4 @@ import { RenderInput, RenderToStringOptions } from './types';
6
6
  * `<svg>` attrs(不在本层对字符串做正则后处理)。零 DOM。
7
7
  */
8
8
  export declare const renderToSvgString: (input: RenderInput, options?: RenderToStringOptions) => string;
9
- //# sourceMappingURL=renderToSvgString.d.ts.map
9
+ //# sourceMappingURL=render-to-svg-string.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-to-svg-string.d.ts","sourceRoot":"","sources":["../../src/render-to-svg-string.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAElE;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAAI,OAAO,WAAW,EAAE,UAAS,qBAA0B,KAAG,MAU3F,CAAC"}
@@ -1,7 +1,7 @@
1
- import { isFigure } from "./builder/isFigure.js";
2
- import { toScene } from "./toScene.js";
1
+ import { isFigure } from "./builder/is-figure.js";
2
+ import { toScene } from "./to-scene.js";
3
3
  import { renderToSvgString } from "@retikz/render/svg";
4
- //#region src/renderToSvgString.ts
4
+ //#region src/render-to-svg-string.ts
5
5
  /**
6
6
  * 把 IR / Scene / Figure 渲染成 SVG 字符串(SSR / 构建期)
7
7
  * @description 收 `Figure` 时 delegate 给 `figure.toSvgString`。收 IR/Scene 时薄包 `@retikz/render/svg`:`toScene`
@@ -11,4 +11,4 @@ export declare const applyAttrs: (el: SVGElement, node: SvgNode) => void;
11
11
  * (`document.createElementNS`),模块顶层不碰任何 DOM 全局——守 SSR 导入安全。
12
12
  */
13
13
  export declare const svgNodeToDom: (node: SvgNode) => SVGElement;
14
- //# sourceMappingURL=svgNodeToDom.d.ts.map
14
+ //# sourceMappingURL=svg-node-to-dom.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"svg-node-to-dom.d.ts","sourceRoot":"","sources":["../../src/svg-node-to-dom.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAIlD;;;;GAIG;AACH,eAAO,MAAM,UAAU,GAAI,IAAI,UAAU,EAAE,MAAM,OAAO,KAAG,IAS1D,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,YAAY,GAAI,MAAM,OAAO,KAAG,UAO5C,CAAC"}
@@ -1,4 +1,4 @@
1
- //#region src/svgNodeToDom.ts
1
+ //#region src/svg-node-to-dom.ts
2
2
  var SVG_NS = "http://www.w3.org/2000/svg";
3
3
  /**
4
4
  * 把 `SvgNode` 的 attrs / style 写到一个(可复用的)SVG 元素上
@@ -7,4 +7,4 @@ import { CommonOptions } from './types';
7
7
  * `fallbackMeasurer`,Node 下确定可跑)。注:调用方须先把 `Figure` 解成 `ir`,此处只认 `IR | Scene`。
8
8
  */
9
9
  export declare const toScene: (input: Scene | IR, options: CommonOptions) => Scene;
10
- //# sourceMappingURL=toScene.d.ts.map
10
+ //# sourceMappingURL=to-scene.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"to-scene.d.ts","sourceRoot":"","sources":["../../src/to-scene.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,KAAK,EAAkB,MAAM,cAAc,CAAC;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C;;;;;GAKG;AACH,eAAO,MAAM,OAAO,GAAI,OAAO,KAAK,GAAG,EAAE,EAAE,SAAS,aAAa,KAAG,KAOnE,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { compileToScene } from "@retikz/core";
2
- //#region src/toScene.ts
2
+ //#region src/to-scene.ts
3
3
  /**
4
4
  * 入参归一成 `Scene`
5
5
  * @description 已是 `Scene`(有 `primitives`)直接用;否则当 `IR` 经 `compileToScene` 编译。剥掉 render-only 键
@@ -18,7 +18,7 @@ export type CommonOptions = {
18
18
  height?: number;
19
19
  /**
20
20
  * 是否播放动画(缺省 true);`false` → 渲染 base 静态图(不 emit CSS/WAAPI、Canvas 不起 rAF)
21
- * @description runtime 据 `{animate:false}` 或 `prefers-reduced-motion` 走静态路径(ADR-01「三事一路」)。
21
+ * @description runtime 据 `{animate:false}` 或 `prefers-reduced-motion` 走静态路径,不起任何动画。
22
22
  */
23
23
  animate?: boolean;
24
24
  /**
@@ -37,7 +37,7 @@ export type VanillaView = {
37
37
  readonly root: SVGSVGElement;
38
38
  /** 整图重渲染(原地复用 `root`,清子节点 + 重设 root attrs + 重物化),不承诺局部 patch */
39
39
  update: (next: RenderInput) => void;
40
- /** 卸载:移除 `root`、置 view 失效(再调 `update` 抛、`dispose` noop) */
40
+ /** 卸载:解绑本 view 上未手动 dispose 的水合、移除 `root`、置 view 失效(再调 `update` 抛、`dispose` noop) */
41
41
  dispose: () => void;
42
42
  /**
43
43
  * 绑定 handler 到本 view 的 `<svg>`(locateSvg 定位);handler 收 `(event, context)` 富上下文
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC7G,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC,YAAY,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAElE,oFAAoF;AACpF,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,EAAE,GAAG,MAAM,CAAC;AAE9C;;;;;;GAMG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4CAA4C;IAC5C,OAAO,CAAC,EAAE,cAAc,CAAC;CAC1B,GAAG,cAAc,CAAC;AAEnB,MAAM,MAAM,qBAAqB,GAAG,aAAa,CAAC;AAClD,MAAM,MAAM,YAAY,GAAG,aAAa,CAAC;AAEzC,6DAA6D;AAC7D,MAAM,MAAM,WAAW,GAAG;IACxB,0CAA0C;IAC1C,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,gEAAgE;IAChE,MAAM,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,CAAC;IACpC,2DAA2D;IAC3D,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB;;;;OAIG;IACH,OAAO,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,eAAe,CAAC;IACtD,yEAAyE;IACzE,SAAS,CAAC,EAAE,iBAAiB,CAAC;CAC/B,CAAC;AAEF,yCAAyC;AACzC,MAAM,MAAM,eAAe,GAAG;IAC5B,kCAAkC;IAClC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,kEAAkE;IAClE,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,qFAAqF;IACrF,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,gFAAgF;IAChF,QAAQ,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;CAC7B,CAAC;AAEF,gDAAgD;AAChD,MAAM,MAAM,UAAU,GAAG;IACvB,2BAA2B;IAC3B,CAAC,EAAE,MAAM,CAAC;IACV,2BAA2B;IAC3B,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,4CAA4C;IAC5C,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IACjC,iDAAiD;IACjD,MAAM,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,CAAC;IACpC,gEAAgE;IAChE,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,4FAA4F;IAC5F,OAAO,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,eAAe,CAAC;IACtD;;;;OAIG;IACH,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,UAAU,CAAC;IAChE,6DAA6D;IAC7D,SAAS,CAAC,EAAE,iBAAiB,CAAC;CAC/B,CAAC;AAEF,kEAAkE;AAClE,MAAM,MAAM,kBAAkB,GAAG,aAAa,GAAG;IAC/C,yEAAyE;IACzE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iDAAiD;IACjD,mBAAmB,CAAC,EAAE,yBAAyB,CAAC;CACjD,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC7G,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC,YAAY,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAElE,oFAAoF;AACpF,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,EAAE,GAAG,MAAM,CAAC;AAE9C;;;;;;GAMG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4CAA4C;IAC5C,OAAO,CAAC,EAAE,cAAc,CAAC;CAC1B,GAAG,cAAc,CAAC;AAEnB,MAAM,MAAM,qBAAqB,GAAG,aAAa,CAAC;AAClD,MAAM,MAAM,YAAY,GAAG,aAAa,CAAC;AAEzC,6DAA6D;AAC7D,MAAM,MAAM,WAAW,GAAG;IACxB,0CAA0C;IAC1C,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,gEAAgE;IAChE,MAAM,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,CAAC;IACpC,qFAAqF;IACrF,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB;;;;OAIG;IACH,OAAO,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,eAAe,CAAC;IACtD,yEAAyE;IACzE,SAAS,CAAC,EAAE,iBAAiB,CAAC;CAC/B,CAAC;AAEF,yCAAyC;AACzC,MAAM,MAAM,eAAe,GAAG;IAC5B,kCAAkC;IAClC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,kEAAkE;IAClE,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,qFAAqF;IACrF,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,gFAAgF;IAChF,QAAQ,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;CAC7B,CAAC;AAEF,gDAAgD;AAChD,MAAM,MAAM,UAAU,GAAG;IACvB,2BAA2B;IAC3B,CAAC,EAAE,MAAM,CAAC;IACV,2BAA2B;IAC3B,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,4CAA4C;IAC5C,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IACjC,iDAAiD;IACjD,MAAM,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,CAAC;IACpC,gEAAgE;IAChE,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,4FAA4F;IAC5F,OAAO,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,eAAe,CAAC;IACtD;;;;OAIG;IACH,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,UAAU,CAAC;IAChE,6DAA6D;IAC7D,SAAS,CAAC,EAAE,iBAAiB,CAAC;CAC/B,CAAC;AAEF,kEAAkE;AAClE,MAAM,MAAM,kBAAkB,GAAG,aAAa,GAAG;IAC/C,yEAAyE;IACzE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iDAAiD;IACjD,mBAAmB,CAAC,EAAE,yBAAyB,CAAC;CACjD,CAAC"}
@@ -1,4 +1,4 @@
1
- //#region src/builder/isFigure.ts
1
+ //#region src/builder/is-figure.ts
2
2
  /** Figure 品牌标记(Symbol.for 跨包/重复 import 仍同一);标准 mountSvg/renderToSvgString 用它区分 Figure 与 IR/Scene */
3
3
  var FIGURE_BRAND = Symbol.for("retikz.vanilla.figure");
4
4
  /** 运行时判断一个值是不是 Figure(带 brand);纯结构检查、零内部 import → 不与 mountSvg/Figure 形成运行时环 */
@@ -3,4 +3,4 @@ import { Figure } from '../figure';
3
3
  export declare const FIGURE_BRAND: unique symbol;
4
4
  /** 运行时判断一个值是不是 Figure(带 brand);纯结构检查、零内部 import → 不与 mountSvg/Figure 形成运行时环 */
5
5
  export declare const isFigure: (value: unknown) => value is Figure;
6
- //# sourceMappingURL=isFigure.d.ts.map
6
+ //# sourceMappingURL=is-figure.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is-figure.d.ts","sourceRoot":"","sources":["../../../src/builder/is-figure.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAExC,oGAAoG;AACpG,eAAO,MAAM,YAAY,EAAE,OAAO,MAA4C,CAAC;AAE/E,+EAA+E;AAC/E,eAAO,MAAM,QAAQ,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,MACuD,CAAC"}
@@ -0,0 +1,17 @@
1
+ //#region src/builder/types.ts
2
+ /** {@link FigureRootStyle} 的字段表——`figure.ts` 组 IR 时拣根样式 + 从 render options 剔除(IR-only 字段不下发) */
3
+ var FIGURE_ROOT_STYLE_FIELDS = [
4
+ "color",
5
+ "stroke",
6
+ "fill",
7
+ "strokeWidth",
8
+ "opacity",
9
+ "fillOpacity",
10
+ "drawOpacity",
11
+ "nodeDefault",
12
+ "pathDefault",
13
+ "labelDefault",
14
+ "arrowDefault"
15
+ ];
16
+ //#endregion
17
+ exports.FIGURE_ROOT_STYLE_FIELDS = FIGURE_ROOT_STYLE_FIELDS;
@@ -1,4 +1,4 @@
1
- import { CompileOptions, IRChild, IRCoordinate, IRNode, IRPath, IRScope, IRViewBox, WayDSL } from '@retikz/core';
1
+ import { CompileOptions, IRAnimationTrack, IRChild, IRCoordinate, IRNode, IRPath, IRScope, IRViewBox, WayDSL } from '@retikz/core';
2
2
  /** builder 函数返回的 IR 子节点(node / draw / coordinate / scope 的产物) */
3
3
  export type Child = IRChild;
4
4
  /** node 的 config:从 IRNode 派生,剔除判别符 type 与提为 positional 的 id */
@@ -11,16 +11,29 @@ export type CoordinateConfig = Omit<IRCoordinate, 'type' | 'id'>;
11
11
  export type ScopeConfig = Omit<IRScope, 'type' | 'children'>;
12
12
  /** draw 的 way:直接复用 core 的 way DSL 全集(id 串 / 坐标 / Cycle / 折角 / 相对 / 曲线 / 弧 …) */
13
13
  export type Way = WayDSL;
14
+ /**
15
+ * figure 根级级联样式默认(与 React `<Layout>` 顶层样式 props 对齐)
16
+ * @description 取 `IRScope` 的级联样式通道(graphic state + 四通道 every-X),**不含**容器 / 命名空间 / 变换 /
17
+ * 屏障 / 栈序 / 裁剪字段(那些挂在 figure 根上语义易混)。组 IR 时若任一字段携带样式指令,把根 children 包进
18
+ * 一层合成根 `<Scope>`,等价于用户手写一层根 scope;全缺省时不包,IR 形态逐字保持。
19
+ */
20
+ export type FigureRootStyle = Pick<IRScope, 'color' | 'stroke' | 'fill' | 'strokeWidth' | 'opacity' | 'fillOpacity' | 'drawOpacity' | 'nodeDefault' | 'pathDefault' | 'labelDefault' | 'arrowDefault'>;
21
+ /** {@link FigureRootStyle} 的字段表——`figure.ts` 组 IR 时拣根样式 + 从 render options 剔除(IR-only 字段不下发) */
22
+ export declare const FIGURE_ROOT_STYLE_FIELDS: readonly ["color", "stroke", "fill", "strokeWidth", "opacity", "fillOpacity", "drawOpacity", "nodeDefault", "pathDefault", "labelDefault", "arrowDefault"];
14
23
  /**
15
24
  * figure 的 config
16
- * @description `viewBox` → IR.viewBox(内容坐标系);`width`/`height` → 根 `<svg>` 显示尺寸(adapter 职责);
17
- * `idPrefix` → SVG 资源 id 前缀;其余(measureText / shapes / arrows / patterns / pathGenerators /
18
- * padding / precision / nodeDistance / onWarn)派生自 core `CompileOptions`、原样喂 compileToScene。
25
+ * @description `viewBox` → IR.viewBox(内容坐标系);`animations` → IR `animations`(镜头时间轴,配 cameraTo
26
+ * preset);`width`/`height` → 根 `<svg>` 显示尺寸(adapter 职责);`idPrefix` → SVG 资源 id 前缀;根级级联样式
27
+ * (color / nodeDefault / pathDefault / labelDefault / arrowDefault 等)按需包合成根 `<Scope>`;其余(measureText /
28
+ * shapes / arrows / patterns / pathGenerators / padding / precision / nodeDistance / onWarn)派生自 core
29
+ * `CompileOptions`、原样喂 compileToScene。
19
30
  */
20
31
  export type FigureConfig = {
21
32
  width?: number;
22
33
  height?: number;
23
34
  viewBox?: IRViewBox;
24
35
  idPrefix?: string;
25
- } & CompileOptions;
36
+ /** scene 根(镜头)时间轴动画 tracks(`viewBox` property,配 `cameraTo()` preset);注入 IR 根 `animations` */
37
+ animations?: Array<IRAnimationTrack>;
38
+ } & FigureRootStyle & CompileOptions;
26
39
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/builder/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,OAAO,EACP,YAAY,EACZ,MAAM,EACN,MAAM,EACN,OAAO,EACP,SAAS,EACT,MAAM,EACP,MAAM,cAAc,CAAC;AAEtB,iEAAiE;AACjE,MAAM,MAAM,KAAK,GAAG,OAAO,CAAC;AAE5B,+DAA+D;AAC/D,MAAM,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;AAErD,mEAAmE;AACnE,MAAM,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC,CAAC;AAE3D,qFAAqF;AACrF,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;AAEjE,8EAA8E;AAC9E,MAAM,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CAAC,CAAC;AAE7D,gFAAgF;AAChF,MAAM,MAAM,GAAG,GAAG,MAAM,CAAC;AAEzB;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,cAAc,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/builder/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,gBAAgB,EAChB,OAAO,EACP,YAAY,EACZ,MAAM,EACN,MAAM,EACN,OAAO,EACP,SAAS,EACT,MAAM,EACP,MAAM,cAAc,CAAC;AAEtB,iEAAiE;AACjE,MAAM,MAAM,KAAK,GAAG,OAAO,CAAC;AAE5B,+DAA+D;AAC/D,MAAM,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;AAErD,mEAAmE;AACnE,MAAM,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC,CAAC;AAE3D,qFAAqF;AACrF,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;AAEjE,8EAA8E;AAC9E,MAAM,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CAAC,CAAC;AAE7D,gFAAgF;AAChF,MAAM,MAAM,GAAG,GAAG,MAAM,CAAC;AAEzB;;;;;GAKG;AACH,MAAM,MAAM,eAAe,GAAG,IAAI,CAChC,OAAO,EACL,OAAO,GACP,QAAQ,GACR,MAAM,GACN,aAAa,GACb,SAAS,GACT,aAAa,GACb,aAAa,GACb,aAAa,GACb,aAAa,GACb,cAAc,GACd,cAAc,CACjB,CAAC;AAEF,gGAAgG;AAChG,eAAO,MAAM,wBAAwB,4JAYoB,CAAC;AAE1D;;;;;;;GAOG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6FAA6F;IAC7F,UAAU,CAAC,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC;CACtC,GAAG,eAAe,GACjB,cAAc,CAAC"}