@retikz/vanilla 0.3.0-alpha.5 → 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 (83) 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/scope.d.ts +1 -1
  5. package/dist/es/builder/scope.d.ts.map +1 -1
  6. package/dist/es/builder/scope.js +2 -2
  7. package/dist/es/builder/types.d.ts +18 -5
  8. package/dist/es/builder/types.d.ts.map +1 -1
  9. package/dist/es/builder/types.js +17 -0
  10. package/dist/es/constants.d.ts +3 -0
  11. package/dist/es/constants.d.ts.map +1 -0
  12. package/dist/es/figure.d.ts +6 -4
  13. package/dist/es/figure.d.ts.map +1 -1
  14. package/dist/es/figure.js +43 -9
  15. package/dist/es/index.d.ts +11 -5
  16. package/dist/es/index.d.ts.map +1 -1
  17. package/dist/es/index.js +5 -5
  18. package/dist/{lib/mountCanvas.d.ts → es/mount-canvas.d.ts} +3 -2
  19. package/dist/es/mount-canvas.d.ts.map +1 -0
  20. package/dist/es/{mountCanvas.js → mount-canvas.js} +103 -26
  21. package/dist/es/{mountSvg.d.ts → mount-svg.d.ts} +1 -1
  22. package/dist/es/mount-svg.d.ts.map +1 -0
  23. package/dist/es/{mountSvg.js → mount-svg.js} +20 -17
  24. package/dist/{lib/renderToSvgString.d.ts → es/render-to-svg-string.d.ts} +3 -2
  25. package/dist/es/render-to-svg-string.d.ts.map +1 -0
  26. package/dist/es/render-to-svg-string.js +23 -0
  27. package/dist/es/{svgNodeToDom.d.ts → svg-node-to-dom.d.ts} +1 -1
  28. package/dist/es/svg-node-to-dom.d.ts.map +1 -0
  29. package/dist/es/{svgNodeToDom.js → svg-node-to-dom.js} +1 -1
  30. package/dist/es/{toScene.d.ts → to-scene.d.ts} +1 -1
  31. package/dist/es/to-scene.d.ts.map +1 -0
  32. package/dist/es/{toScene.js → to-scene.js} +1 -1
  33. package/dist/es/types.d.ts +2 -2
  34. package/dist/es/types.d.ts.map +1 -1
  35. package/dist/lib/builder/{isFigure.cjs → is-figure.cjs} +1 -1
  36. package/dist/lib/builder/{isFigure.d.ts → is-figure.d.ts} +1 -1
  37. package/dist/lib/builder/is-figure.d.ts.map +1 -0
  38. package/dist/lib/builder/scope.cjs +2 -2
  39. package/dist/lib/builder/scope.d.ts +1 -1
  40. package/dist/lib/builder/scope.d.ts.map +1 -1
  41. package/dist/lib/builder/types.cjs +17 -0
  42. package/dist/lib/builder/types.d.ts +18 -5
  43. package/dist/lib/builder/types.d.ts.map +1 -1
  44. package/dist/lib/constants.d.ts +3 -0
  45. package/dist/lib/constants.d.ts.map +1 -0
  46. package/dist/lib/figure.cjs +47 -13
  47. package/dist/lib/figure.d.ts +6 -4
  48. package/dist/lib/figure.d.ts.map +1 -1
  49. package/dist/lib/index.cjs +30 -6
  50. package/dist/lib/index.d.ts +11 -5
  51. package/dist/lib/index.d.ts.map +1 -1
  52. package/dist/lib/{mountCanvas.cjs → mount-canvas.cjs} +104 -27
  53. package/dist/{es/mountCanvas.d.ts → lib/mount-canvas.d.ts} +3 -2
  54. package/dist/lib/mount-canvas.d.ts.map +1 -0
  55. package/dist/lib/{mountSvg.cjs → mount-svg.cjs} +24 -21
  56. package/dist/lib/{mountSvg.d.ts → mount-svg.d.ts} +1 -1
  57. package/dist/lib/mount-svg.d.ts.map +1 -0
  58. package/dist/lib/render-to-svg-string.cjs +23 -0
  59. package/dist/{es/renderToSvgString.d.ts → lib/render-to-svg-string.d.ts} +3 -2
  60. package/dist/lib/render-to-svg-string.d.ts.map +1 -0
  61. package/dist/lib/{svgNodeToDom.cjs → svg-node-to-dom.cjs} +1 -1
  62. package/dist/lib/{svgNodeToDom.d.ts → svg-node-to-dom.d.ts} +1 -1
  63. package/dist/lib/svg-node-to-dom.d.ts.map +1 -0
  64. package/dist/lib/{toScene.cjs → to-scene.cjs} +1 -1
  65. package/dist/lib/{toScene.d.ts → to-scene.d.ts} +1 -1
  66. package/dist/lib/to-scene.d.ts.map +1 -0
  67. package/dist/lib/types.d.ts +2 -2
  68. package/dist/lib/types.d.ts.map +1 -1
  69. package/package.json +5 -6
  70. package/dist/es/builder/isFigure.d.ts.map +0 -1
  71. package/dist/es/mountCanvas.d.ts.map +0 -1
  72. package/dist/es/mountSvg.d.ts.map +0 -1
  73. package/dist/es/renderToSvgString.d.ts.map +0 -1
  74. package/dist/es/renderToSvgString.js +0 -28
  75. package/dist/es/svgNodeToDom.d.ts.map +0 -1
  76. package/dist/es/toScene.d.ts.map +0 -1
  77. package/dist/lib/builder/isFigure.d.ts.map +0 -1
  78. package/dist/lib/mountCanvas.d.ts.map +0 -1
  79. package/dist/lib/mountSvg.d.ts.map +0 -1
  80. package/dist/lib/renderToSvgString.cjs +0 -28
  81. package/dist/lib/renderToSvgString.d.ts.map +0 -1
  82. package/dist/lib/svgNodeToDom.d.ts.map +0 -1
  83. package/dist/lib/toScene.d.ts.map +0 -1
@@ -1,9 +1,9 @@
1
- const require_isFigure = require("./builder/isFigure.cjs");
2
- const require_toScene = require("./toScene.cjs");
1
+ const require_is_figure = require("./builder/is-figure.cjs");
2
+ const require_to_scene = require("./to-scene.cjs");
3
3
  let _retikz_render_animation = require("@retikz/render/animation");
4
4
  let _retikz_render_hydration = require("@retikz/render/hydration");
5
5
  let _retikz_render_canvas = require("@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;
@@ -12,19 +12,24 @@ var resolveDevicePixelRatio = (override) => {
12
12
  };
13
13
  /**
14
14
  * 把 IR / Scene / Figure 挂成真实 `<canvas>` DOM(无框架浏览器 runtime,对齐 `mountSvg`)
15
- * @description 收 IR`toScene` compile、收 Scene 直用、收 Figure `figure.ir`。位图按「名义显示尺寸」
15
+ * @description 收 `Figure`delegate `figure.mountCanvas`(与 mountSvg→`figure.mount` 对称)。收 IR
16
+ * `toScene` compile、收 Scene 直用。位图按「名义显示尺寸」
16
17
  * `width`/`height`(均为有限数值时)× dpr 开、否则回退内容边界;`renderToCanvas` 再把 Scene 内容 meet-fit
17
18
  * 进去(镜像 SVG `preserveAspectRatio=meet` + CanvasHost)。返回的 `CanvasView` 暴露 `hydrate`(hitTest 定位)
18
19
  * 与 `clientToScene`(逆 meet-fit 坐标映射)。DOM 仅在调用时惰性触碰,`import` 本模块不碰 DOM——守 SSR 导入安全。
19
20
  */
20
21
  var mountCanvas = (container, input, options = {}) => {
22
+ if (require_is_figure.isFigure(input)) return input.mountCanvas(container, options);
21
23
  if (typeof Element === "undefined" || !(container instanceof Element)) throw new Error("mountCanvas: container must be a DOM Element.");
22
24
  const canvas = document.createElement("canvas");
23
25
  const ratio = resolveDevicePixelRatio(options.devicePixelRatio);
24
26
  const animate = options.animate !== false && !(0, _retikz_render_animation.prefersReducedMotion)();
25
27
  let clock;
26
28
  const registry = (0, _retikz_render_animation.createIdClockRegistry)();
29
+ let visibleActivated = /* @__PURE__ */ new Set();
30
+ let visibleTeardown;
27
31
  let currentScene;
32
+ const liveHydrations = /* @__PURE__ */ new Set();
28
33
  /** 把全局帧时刻折算成单个 prim 的动画解析(per-id):stop→渲染 base;否则按有效时刻 + 是否含非自动播 track */
29
34
  const resolvePrim = (id, globalTime) => id !== void 0 && registry.isStopped(id) ? { mode: "skip" } : {
30
35
  mode: "at",
@@ -42,9 +47,52 @@ var mountCanvas = (container, input, options = {}) => {
42
47
  resolvePrimAnimation: (id) => resolvePrim(id, time)
43
48
  });
44
49
  };
50
+ const ensureClockPlaying = () => {
51
+ clock?.play();
52
+ };
53
+ /** Canvas visible trigger:按 canvas client rect 与 id 聚合 bbox 相交激活一次 */
54
+ const activateVisibleTracks = () => {
55
+ const ids = (0, _retikz_render_hydration.collectCanvasVisibleAnimationIds)(currentScene);
56
+ if (ids.size === 0) return;
57
+ let changed = false;
58
+ for (const id of ids) {
59
+ if (visibleActivated.has(id)) continue;
60
+ if (!(0, _retikz_render_hydration.isCanvasAnimationIdVisible)(canvas, currentScene, id)) continue;
61
+ registry.restart(id, clock?.time ?? 0);
62
+ visibleActivated.add(id);
63
+ changed = true;
64
+ }
65
+ if (!changed) return;
66
+ ensureClockPlaying();
67
+ renderFrame();
68
+ };
69
+ const resetVisibleBridge = () => {
70
+ visibleActivated = /* @__PURE__ */ new Set();
71
+ visibleTeardown?.();
72
+ visibleTeardown = void 0;
73
+ if (!animate || !(0, _retikz_render_animation.sceneHasAnimations)(currentScene)) return;
74
+ if ((0, _retikz_render_hydration.collectCanvasVisibleAnimationIds)(currentScene).size === 0 || typeof window === "undefined") return;
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
+ };
84
+ window.addEventListener("scroll", schedule, true);
85
+ window.addEventListener("resize", schedule);
86
+ schedule();
87
+ visibleTeardown = () => {
88
+ window.removeEventListener("scroll", schedule, true);
89
+ window.removeEventListener("resize", schedule);
90
+ if (scheduledRaf !== void 0) window.cancelAnimationFrame(scheduledRaf);
91
+ };
92
+ };
45
93
  const renderInto = (next) => {
46
- if (require_isFigure.isFigure(next)) throw new Error("mountCanvas: view.update does not accept a Figure; pass figure.ir instead.");
47
- const scene = require_toScene.toScene(next, options);
94
+ if (require_is_figure.isFigure(next)) throw new Error("mountCanvas: view.update does not accept a Figure; pass figure.ir instead.");
95
+ const scene = require_to_scene.toScene(next, options);
48
96
  currentScene = scene;
49
97
  const hasNominalSize = typeof options.width === "number" && Number.isFinite(options.width) && typeof options.height === "number" && Number.isFinite(options.height);
50
98
  const bitmapWidth = hasNominalSize ? options.width : scene.layout.width;
@@ -54,6 +102,15 @@ var mountCanvas = (container, input, options = {}) => {
54
102
  if (options.width !== void 0) canvas.style.width = `${options.width}px`;
55
103
  if (options.height !== void 0) canvas.style.height = `${options.height}px`;
56
104
  canvas.style.objectFit = "contain";
105
+ if (options.snapshotAt !== void 0) {
106
+ (0, _retikz_render_canvas.renderToCanvas)(canvas, scene, {
107
+ devicePixelRatio: ratio,
108
+ time: options.snapshotAt,
109
+ easings: options.easings,
110
+ animationProperties: options.animationProperties
111
+ });
112
+ return;
113
+ }
57
114
  (0, _retikz_render_canvas.renderToCanvas)(canvas, scene, { devicePixelRatio: ratio });
58
115
  clock?.dispose();
59
116
  clock = void 0;
@@ -70,8 +127,9 @@ var mountCanvas = (container, input, options = {}) => {
70
127
  });
71
128
  if ((0, _retikz_render_animation.sceneHasAutoplayTrigger)(scene)) clock.play();
72
129
  }
130
+ resetVisibleBridge();
73
131
  };
74
- renderInto(require_isFigure.isFigure(input) ? input.ir : input);
132
+ renderInto(input);
75
133
  container.appendChild(canvas);
76
134
  /**
77
135
  * 把指针的 client 像素坐标逆 meet-fit 映射成 Scene user units
@@ -109,38 +167,57 @@ var mountCanvas = (container, input, options = {}) => {
109
167
  context2d?.setTransform(1, 0, 0, 1, 0, 0);
110
168
  return (0, _retikz_render_canvas.hitTest)(currentScene, scenePoint, { context2d });
111
169
  };
112
- const buildContext = (event, id) => {
113
- const mouse = event;
114
- return {
115
- id,
116
- meta: (0, _retikz_render_hydration.metaOf)(currentScene, id),
117
- renderer: "canvas",
118
- element: null,
119
- root: canvas,
120
- point: typeof mouse.clientX === "number" ? clientToScene(mouse.clientX, mouse.clientY) : null,
121
- geometry: (0, _retikz_render_hydration.geometryOf)(currentScene, id),
122
- animation: (0, _retikz_render_hydration.createCanvasIdAnimationControls)({
123
- registry,
124
- clockTime: () => clock?.time ?? 0,
125
- ensurePlaying: () => clock?.play(),
126
- renderFrame,
127
- defaultId: id
128
- }),
129
- scene: currentScene
130
- };
170
+ const buildContext = (0, _retikz_render_hydration.createContextBuilder)({
171
+ renderer: "canvas",
172
+ root: canvas,
173
+ scene: () => currentScene,
174
+ resolveElement: () => null,
175
+ resolvePoint: (event) => {
176
+ const mouse = event;
177
+ return typeof mouse.clientX === "number" ? clientToScene(mouse.clientX, mouse.clientY) : null;
178
+ },
179
+ makeAnimation: (id) => (0, _retikz_render_hydration.createCanvasIdAnimationControls)({
180
+ registry,
181
+ clockTime: () => clock?.time ?? 0,
182
+ ensurePlaying: () => clock?.play(),
183
+ renderFrame,
184
+ defaultId: id
185
+ })
186
+ });
187
+ const userHandlers = hydrateOptions.handlers;
188
+ const bind = () => (0, _retikz_render_hydration.createHydrationController)(canvas, (0, _retikz_render_hydration.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()
131
196
  };
132
- return { dispose: (0, _retikz_render_hydration.createHydrationController)(canvas, hydrateOptions.handlers, locate, buildContext).dispose };
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();
133
206
  };
134
207
  return {
135
208
  root: canvas,
136
209
  update(next) {
137
210
  if (disposed) throw new Error("mountCanvas: view already disposed.");
138
211
  renderInto(next);
212
+ rebindHydrations();
139
213
  },
140
214
  dispose() {
141
215
  if (disposed) return;
142
216
  disposed = true;
217
+ visibleTeardown?.();
143
218
  clock?.dispose();
219
+ for (const live of liveHydrations) live.unbind();
220
+ liveHydrations.clear();
144
221
  canvas.remove();
145
222
  },
146
223
  hydrate,
@@ -1,10 +1,11 @@
1
1
  import { CanvasView, MountCanvasOptions, RenderInput } from './types';
2
2
  /**
3
3
  * 把 IR / Scene / Figure 挂成真实 `<canvas>` DOM(无框架浏览器 runtime,对齐 `mountSvg`)
4
- * @description 收 IR`toScene` compile、收 Scene 直用、收 Figure `figure.ir`。位图按「名义显示尺寸」
4
+ * @description 收 `Figure`delegate `figure.mountCanvas`(与 mountSvg→`figure.mount` 对称)。收 IR
5
+ * `toScene` compile、收 Scene 直用。位图按「名义显示尺寸」
5
6
  * `width`/`height`(均为有限数值时)× dpr 开、否则回退内容边界;`renderToCanvas` 再把 Scene 内容 meet-fit
6
7
  * 进去(镜像 SVG `preserveAspectRatio=meet` + CanvasHost)。返回的 `CanvasView` 暴露 `hydrate`(hitTest 定位)
7
8
  * 与 `clientToScene`(逆 meet-fit 坐标映射)。DOM 仅在调用时惰性触碰,`import` 本模块不碰 DOM——守 SSR 导入安全。
8
9
  */
9
10
  export declare const mountCanvas: (container: Element, input: RenderInput, options?: MountCanvasOptions) => CanvasView;
10
- //# 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,13 +1,11 @@
1
- const require_isFigure = require("./builder/isFigure.cjs");
2
- const require_toScene = require("./toScene.cjs");
3
- const require_svgNodeToDom = require("./svgNodeToDom.cjs");
1
+ const require_is_figure = require("./builder/is-figure.cjs");
2
+ const require_to_scene = require("./to-scene.cjs");
3
+ const require_svg_node_to_dom = require("./svg-node-to-dom.cjs");
4
4
  let _retikz_render_svg = require("@retikz/render/svg");
5
5
  let _retikz_render_animation = require("@retikz/render/animation");
6
6
  let _retikz_render_hydration = require("@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
- /** 默认资源 id 前缀(确定性);多实例同页须经 `options.idPrefix` 显式区分 */
10
- var DEFAULT_ID_PREFIX = "r";
11
9
  /**
12
10
  * 把 IR / Scene / Figure 挂成真实 SVG DOM(无框架浏览器 runtime)
13
11
  * @description 收 `Figure` 时 delegate 给 `figure.mount`(Figure 自持 config,call-site options 覆盖)。收
@@ -16,16 +14,17 @@ var DEFAULT_ID_PREFIX = "r";
16
14
  * 原地重渲染、root 元素 identity 跨 update 不变、不失效。DOM 仅在调用时惰性触碰,`import` 本模块不碰 DOM——守 SSR 导入安全。
17
15
  */
18
16
  var mountSvg = (container, input, options = {}) => {
19
- if (require_isFigure.isFigure(input)) return input.mount(container, options);
17
+ if (require_is_figure.isFigure(input)) return input.mount(container, options);
20
18
  if (typeof Element === "undefined" || !(container instanceof Element)) throw new Error("mountSvg: container must be a DOM Element.");
21
- const idPrefix = options.idPrefix ?? DEFAULT_ID_PREFIX;
19
+ const idPrefix = options.idPrefix ?? "r";
22
20
  const root = document.createElementNS(SVG_NS, "svg");
23
21
  const animate = options.animate !== false && !(0, _retikz_render_animation.prefersReducedMotion)();
24
22
  let animationControls;
25
23
  let currentScene;
24
+ const liveHydrationDisposers = /* @__PURE__ */ new Set();
26
25
  const renderInto = (next) => {
27
- if (require_isFigure.isFigure(next)) throw new Error("mountSvg: view.update does not accept a Figure; pass figure.ir instead.");
28
- const scene = require_toScene.toScene(next, options);
26
+ if (require_is_figure.isFigure(next)) throw new Error("mountSvg: view.update does not accept a Figure; pass figure.ir instead.");
27
+ const scene = require_to_scene.toScene(next, options);
29
28
  currentScene = scene;
30
29
  const doc = (0, _retikz_render_svg.buildSvgDocument)(scene, {
31
30
  idPrefix,
@@ -35,10 +34,10 @@ var mountSvg = (container, input, options = {}) => {
35
34
  });
36
35
  while (root.firstChild) root.removeChild(root.firstChild);
37
36
  for (const attr of [...root.attributes]) root.removeAttribute(attr.name);
38
- require_svgNodeToDom.applyAttrs(root, doc);
37
+ require_svg_node_to_dom.applyAttrs(root, doc);
39
38
  if (options.width !== void 0) root.setAttribute("width", String(options.width));
40
39
  if (options.height !== void 0) root.setAttribute("height", String(options.height));
41
- for (const child of doc.children ?? []) root.appendChild(typeof child === "string" ? document.createTextNode(child) : require_svgNodeToDom.svgNodeToDom(child));
40
+ for (const child of doc.children ?? []) root.appendChild(typeof child === "string" ? document.createTextNode(child) : require_svg_node_to_dom.svgNodeToDom(child));
42
41
  animationControls?.dispose();
43
42
  animationControls = animate && (0, _retikz_render_animation.sceneHasAnimations)(scene) ? (0, _retikz_render_animation.bindWaapiDescriptors)(root) : void 0;
44
43
  };
@@ -51,18 +50,21 @@ var mountSvg = (container, input, options = {}) => {
51
50
  * `data-retikz-animation-owner` 双查 `getAnimations()` per-id 控制。
52
51
  */
53
52
  const hydrate = (hydrateOptions) => {
54
- const buildContext = (event, id) => ({
55
- id,
56
- meta: (0, _retikz_render_hydration.metaOf)(currentScene, id),
53
+ const buildContext = (0, _retikz_render_hydration.createContextBuilder)({
57
54
  renderer: "svg",
58
- element: (0, _retikz_render_hydration.resolveSvgElement)(event),
59
55
  root,
60
- point: (0, _retikz_render_hydration.resolvePointViaLayout)(root, currentScene.layout)(event),
61
- geometry: (0, _retikz_render_hydration.geometryOf)(currentScene, id),
62
- animation: (0, _retikz_render_hydration.createSvgAnimationControls)(root, id),
63
- scene: currentScene
56
+ scene: () => currentScene,
57
+ resolveElement: _retikz_render_hydration.resolveSvgElement,
58
+ resolvePoint: (event) => (0, _retikz_render_hydration.resolvePointViaLayout)(root, currentScene.layout)(event),
59
+ makeAnimation: (id) => (0, _retikz_render_hydration.createSvgAnimationControls)(root, id)
64
60
  });
65
- return { dispose: (0, _retikz_render_hydration.createHydrationController)(root, hydrateOptions.handlers, _retikz_render_hydration.locateSvg, buildContext).dispose };
61
+ const controller = (0, _retikz_render_hydration.createHydrationController)(root, hydrateOptions.handlers, _retikz_render_hydration.locateSvg, buildContext);
62
+ const dispose = () => {
63
+ controller.dispose();
64
+ liveHydrationDisposers.delete(dispose);
65
+ };
66
+ liveHydrationDisposers.add(dispose);
67
+ return { dispose };
66
68
  };
67
69
  let disposed = false;
68
70
  return {
@@ -75,6 +77,7 @@ var mountSvg = (container, input, options = {}) => {
75
77
  dispose() {
76
78
  if (disposed) return;
77
79
  disposed = true;
80
+ for (const disposeHydration of [...liveHydrationDisposers]) disposeHydration();
78
81
  animationControls?.dispose();
79
82
  root.remove();
80
83
  },
@@ -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"}
@@ -0,0 +1,23 @@
1
+ const require_is_figure = require("./builder/is-figure.cjs");
2
+ const require_to_scene = require("./to-scene.cjs");
3
+ let _retikz_render_svg = require("@retikz/render/svg");
4
+ //#region src/render-to-svg-string.ts
5
+ /**
6
+ * 把 IR / Scene / Figure 渲染成 SVG 字符串(SSR / 构建期)
7
+ * @description 收 `Figure` 时 delegate 给 `figure.toSvgString`。收 IR/Scene 时薄包 `@retikz/render/svg`:`toScene`
8
+ * (ir 缺省走 core fallback measurer、确定性)→ 序列化。`width`/`height` 直接透传给 render,由其结构化写进根
9
+ * `<svg>` attrs(不在本层对字符串做正则后处理)。零 DOM。
10
+ */
11
+ var renderToSvgString = (input, options = {}) => {
12
+ if (require_is_figure.isFigure(input)) return input.toSvgString(options);
13
+ return (0, _retikz_render_svg.renderToSvgString)(require_to_scene.toScene(input, options), {
14
+ idPrefix: options.idPrefix ?? "r",
15
+ animate: options.animate,
16
+ snapshotAt: options.snapshotAt,
17
+ easings: options.easings,
18
+ width: options.width,
19
+ height: options.height
20
+ });
21
+ };
22
+ //#endregion
23
+ exports.renderToSvgString = renderToSvgString;
@@ -2,7 +2,8 @@ import { RenderInput, RenderToStringOptions } from './types';
2
2
  /**
3
3
  * 把 IR / Scene / Figure 渲染成 SVG 字符串(SSR / 构建期)
4
4
  * @description 收 `Figure` 时 delegate 给 `figure.toSvgString`。收 IR/Scene 时薄包 `@retikz/render/svg`:`toScene`
5
- * (ir 缺省走 core fallback measurer、确定性)→ 序列化 → 若给 `width`/`height` 注入根 `<svg>`。零 DOM。
5
+ * (ir 缺省走 core fallback measurer、确定性)→ 序列化。`width`/`height` 直接透传给 render,由其结构化写进根
6
+ * `<svg>` attrs(不在本层对字符串做正则后处理)。零 DOM。
6
7
  */
7
8
  export declare const renderToSvgString: (input: RenderInput, options?: RenderToStringOptions) => string;
8
- //# 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,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 元素上
@@ -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,5 +1,5 @@
1
1
  let _retikz_core = require("@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 键
@@ -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"}
@@ -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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@retikz/vanilla",
3
- "version": "0.3.0-alpha.5",
4
- "description": "Framework-free runtime for retikz: mount Scene/IR to SVG DOM, or render to SVG string for SSR.",
3
+ "version": "0.3.0-beta.2",
4
+ "description": "Framework-free retikz runtime: mount SVG/Canvas, hydrate interactions, control animations, or render SVG strings for SSR.",
5
5
  "type": "module",
6
6
  "author": "Pionpill",
7
7
  "homepage": "https://pionpill.github.io/retikz/",
@@ -39,17 +39,16 @@
39
39
  "dist/**/*"
40
40
  ],
41
41
  "dependencies": {
42
- "@retikz/core": "0.3.0-alpha.5",
43
- "@retikz/render": "0.3.0-alpha.5"
42
+ "@retikz/core": "0.3.0-beta.2",
43
+ "@retikz/render": "0.3.0-beta.2"
44
44
  },
45
45
  "devDependencies": {
46
46
  "@types/node": "^25.6.0",
47
47
  "typescript": "^6.0.3",
48
48
  "vite": "^8.0.10",
49
49
  "vite-plugin-dts": "^4.5.4",
50
- "vite-tsconfig-paths": "^6.1.1",
51
50
  "vitest": "^4.1.5",
52
- "zod": "^3.23.8"
51
+ "zod": "^4.4.3"
53
52
  },
54
53
  "scripts": {
55
54
  "dev": "vite",
@@ -1 +0,0 @@
1
- {"version":3,"file":"isFigure.d.ts","sourceRoot":"","sources":["../../../src/builder/isFigure.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 +0,0 @@
1
- {"version":3,"file":"mountCanvas.d.ts","sourceRoot":"","sources":["../../src/mountCanvas.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,UAAU,EAAkB,kBAAkB,EAAE,WAAW,EAAc,MAAM,SAAS,CAAC;AASvG;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,GACtB,WAAW,OAAO,EAClB,OAAO,WAAW,EAClB,UAAS,kBAAuB,KAC/B,UA6JF,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"mountSvg.d.ts","sourceRoot":"","sources":["../../src/mountSvg.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAmC,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAMvG;;;;;;GAMG;AACH,eAAO,MAAM,QAAQ,GAAI,WAAW,OAAO,EAAE,OAAO,WAAW,EAAE,UAAS,YAAiB,KAAG,WA4E7F,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"renderToSvgString.d.ts","sourceRoot":"","sources":["../../src/renderToSvgString.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAYlE;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,GAAI,OAAO,WAAW,EAAE,UAAS,qBAA0B,KAAG,MAS3F,CAAC"}
@@ -1,28 +0,0 @@
1
- import { isFigure } from "./builder/isFigure.js";
2
- import { toScene } from "./toScene.js";
3
- import { renderToSvgString } from "@retikz/render/svg";
4
- //#region src/renderToSvgString.ts
5
- /** 默认资源 id 前缀(确定性);多实例同页须经 `options.idPrefix` 显式区分 */
6
- var DEFAULT_ID_PREFIX = "r";
7
- /** 把 `width`/`height` 注入到开头的 `<svg` 标签(@retikz/render/svg 只产 viewBox) */
8
- var injectSize = (svg, width, height) => {
9
- if (width === void 0 && height === void 0) return svg;
10
- const attrs = [width !== void 0 ? ` width="${width}"` : "", height !== void 0 ? ` height="${height}"` : ""].join("");
11
- return svg.replace(/^<svg/, `<svg${attrs}`);
12
- };
13
- /**
14
- * 把 IR / Scene / Figure 渲染成 SVG 字符串(SSR / 构建期)
15
- * @description 收 `Figure` 时 delegate 给 `figure.toSvgString`。收 IR/Scene 时薄包 `@retikz/render/svg`:`toScene`
16
- * (ir 缺省走 core fallback measurer、确定性)→ 序列化 → 若给 `width`/`height` 注入根 `<svg>`。零 DOM。
17
- */
18
- var renderToSvgString$1 = (input, options = {}) => {
19
- if (isFigure(input)) return input.toSvgString(options);
20
- return injectSize(renderToSvgString(toScene(input, options), {
21
- idPrefix: options.idPrefix ?? DEFAULT_ID_PREFIX,
22
- animate: options.animate,
23
- snapshotAt: options.snapshotAt,
24
- easings: options.easings
25
- }), options.width, options.height);
26
- };
27
- //#endregion
28
- export { renderToSvgString$1 as renderToSvgString };
@@ -1 +0,0 @@
1
- {"version":3,"file":"svgNodeToDom.d.ts","sourceRoot":"","sources":["../../src/svgNodeToDom.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 +0,0 @@
1
- {"version":3,"file":"toScene.d.ts","sourceRoot":"","sources":["../../src/toScene.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 +0,0 @@
1
- {"version":3,"file":"isFigure.d.ts","sourceRoot":"","sources":["../../../src/builder/isFigure.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 +0,0 @@
1
- {"version":3,"file":"mountCanvas.d.ts","sourceRoot":"","sources":["../../src/mountCanvas.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,UAAU,EAAkB,kBAAkB,EAAE,WAAW,EAAc,MAAM,SAAS,CAAC;AASvG;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,GACtB,WAAW,OAAO,EAClB,OAAO,WAAW,EAClB,UAAS,kBAAuB,KAC/B,UA6JF,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"mountSvg.d.ts","sourceRoot":"","sources":["../../src/mountSvg.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAmC,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAMvG;;;;;;GAMG;AACH,eAAO,MAAM,QAAQ,GAAI,WAAW,OAAO,EAAE,OAAO,WAAW,EAAE,UAAS,YAAiB,KAAG,WA4E7F,CAAC"}
@@ -1,28 +0,0 @@
1
- const require_isFigure = require("./builder/isFigure.cjs");
2
- const require_toScene = require("./toScene.cjs");
3
- let _retikz_render_svg = require("@retikz/render/svg");
4
- //#region src/renderToSvgString.ts
5
- /** 默认资源 id 前缀(确定性);多实例同页须经 `options.idPrefix` 显式区分 */
6
- var DEFAULT_ID_PREFIX = "r";
7
- /** 把 `width`/`height` 注入到开头的 `<svg` 标签(@retikz/render/svg 只产 viewBox) */
8
- var injectSize = (svg, width, height) => {
9
- if (width === void 0 && height === void 0) return svg;
10
- const attrs = [width !== void 0 ? ` width="${width}"` : "", height !== void 0 ? ` height="${height}"` : ""].join("");
11
- return svg.replace(/^<svg/, `<svg${attrs}`);
12
- };
13
- /**
14
- * 把 IR / Scene / Figure 渲染成 SVG 字符串(SSR / 构建期)
15
- * @description 收 `Figure` 时 delegate 给 `figure.toSvgString`。收 IR/Scene 时薄包 `@retikz/render/svg`:`toScene`
16
- * (ir 缺省走 core fallback measurer、确定性)→ 序列化 → 若给 `width`/`height` 注入根 `<svg>`。零 DOM。
17
- */
18
- var renderToSvgString = (input, options = {}) => {
19
- if (require_isFigure.isFigure(input)) return input.toSvgString(options);
20
- return injectSize((0, _retikz_render_svg.renderToSvgString)(require_toScene.toScene(input, options), {
21
- idPrefix: options.idPrefix ?? DEFAULT_ID_PREFIX,
22
- animate: options.animate,
23
- snapshotAt: options.snapshotAt,
24
- easings: options.easings
25
- }), options.width, options.height);
26
- };
27
- //#endregion
28
- exports.renderToSvgString = renderToSvgString;
@@ -1 +0,0 @@
1
- {"version":3,"file":"renderToSvgString.d.ts","sourceRoot":"","sources":["../../src/renderToSvgString.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAYlE;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,GAAI,OAAO,WAAW,EAAE,UAAS,qBAA0B,KAAG,MAS3F,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"svgNodeToDom.d.ts","sourceRoot":"","sources":["../../src/svgNodeToDom.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 +0,0 @@
1
- {"version":3,"file":"toScene.d.ts","sourceRoot":"","sources":["../../src/toScene.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"}