@retikz/core 0.1.0 → 0.2.0-alpha.1

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 (87) hide show
  1. package/dist/es/compile/anchor-cache.d.ts +12 -0
  2. package/dist/es/compile/anchor-cache.d.ts.map +1 -0
  3. package/dist/es/compile/anchor-cache.js +41 -0
  4. package/dist/es/compile/compile.d.ts +2 -2
  5. package/dist/es/compile/compile.d.ts.map +1 -1
  6. package/dist/es/compile/compile.js +148 -40
  7. package/dist/es/compile/index.d.ts +1 -0
  8. package/dist/es/compile/index.d.ts.map +1 -1
  9. package/dist/es/compile/name-stack.d.ts +81 -0
  10. package/dist/es/compile/name-stack.d.ts.map +1 -0
  11. package/dist/es/compile/name-stack.js +104 -0
  12. package/dist/es/compile/node.d.ts +8 -4
  13. package/dist/es/compile/node.d.ts.map +1 -1
  14. package/dist/es/compile/node.js +13 -5
  15. package/dist/es/compile/path/anchor.d.ts +11 -5
  16. package/dist/es/compile/path/anchor.d.ts.map +1 -1
  17. package/dist/es/compile/path/anchor.js +24 -13
  18. package/dist/es/compile/path/index.d.ts +9 -3
  19. package/dist/es/compile/path/index.d.ts.map +1 -1
  20. package/dist/es/compile/path/index.js +17 -16
  21. package/dist/es/compile/path/relative.d.ts +10 -4
  22. package/dist/es/compile/path/relative.d.ts.map +1 -1
  23. package/dist/es/compile/path/relative.js +16 -8
  24. package/dist/es/compile/position.d.ts +19 -3
  25. package/dist/es/compile/position.d.ts.map +1 -1
  26. package/dist/es/compile/position.js +28 -8
  27. package/dist/es/compile/scope.d.ts +66 -0
  28. package/dist/es/compile/scope.d.ts.map +1 -0
  29. package/dist/es/compile/scope.js +256 -0
  30. package/dist/es/index.d.ts +2 -2
  31. package/dist/es/index.d.ts.map +1 -1
  32. package/dist/es/index.js +3 -1
  33. package/dist/es/ir/index.d.ts +2 -0
  34. package/dist/es/ir/index.d.ts.map +1 -1
  35. package/dist/es/ir/scene.d.ts +18 -3542
  36. package/dist/es/ir/scene.d.ts.map +1 -1
  37. package/dist/es/ir/scene.js +11 -3
  38. package/dist/es/ir/scope.d.ts +190 -0
  39. package/dist/es/ir/scope.d.ts.map +1 -0
  40. package/dist/es/ir/scope.js +29 -0
  41. package/dist/es/ir/transform.d.ts +204 -0
  42. package/dist/es/ir/transform.d.ts.map +1 -0
  43. package/dist/es/ir/transform.js +56 -0
  44. package/dist/lib/compile/anchor-cache.cjs +41 -0
  45. package/dist/lib/compile/anchor-cache.d.ts +12 -0
  46. package/dist/lib/compile/anchor-cache.d.ts.map +1 -0
  47. package/dist/lib/compile/compile.cjs +148 -40
  48. package/dist/lib/compile/compile.d.ts +2 -2
  49. package/dist/lib/compile/compile.d.ts.map +1 -1
  50. package/dist/lib/compile/index.d.ts +1 -0
  51. package/dist/lib/compile/index.d.ts.map +1 -1
  52. package/dist/lib/compile/name-stack.cjs +104 -0
  53. package/dist/lib/compile/name-stack.d.ts +81 -0
  54. package/dist/lib/compile/name-stack.d.ts.map +1 -0
  55. package/dist/lib/compile/node.cjs +13 -5
  56. package/dist/lib/compile/node.d.ts +8 -4
  57. package/dist/lib/compile/node.d.ts.map +1 -1
  58. package/dist/lib/compile/path/anchor.cjs +23 -12
  59. package/dist/lib/compile/path/anchor.d.ts +11 -5
  60. package/dist/lib/compile/path/anchor.d.ts.map +1 -1
  61. package/dist/lib/compile/path/index.cjs +17 -16
  62. package/dist/lib/compile/path/index.d.ts +9 -3
  63. package/dist/lib/compile/path/index.d.ts.map +1 -1
  64. package/dist/lib/compile/path/relative.cjs +16 -8
  65. package/dist/lib/compile/path/relative.d.ts +10 -4
  66. package/dist/lib/compile/path/relative.d.ts.map +1 -1
  67. package/dist/lib/compile/position.cjs +28 -8
  68. package/dist/lib/compile/position.d.ts +19 -3
  69. package/dist/lib/compile/position.d.ts.map +1 -1
  70. package/dist/lib/compile/scope.cjs +261 -0
  71. package/dist/lib/compile/scope.d.ts +66 -0
  72. package/dist/lib/compile/scope.d.ts.map +1 -0
  73. package/dist/lib/index.cjs +4 -0
  74. package/dist/lib/index.d.ts +2 -2
  75. package/dist/lib/index.d.ts.map +1 -1
  76. package/dist/lib/ir/index.d.ts +2 -0
  77. package/dist/lib/ir/index.d.ts.map +1 -1
  78. package/dist/lib/ir/scene.cjs +11 -3
  79. package/dist/lib/ir/scene.d.ts +18 -3542
  80. package/dist/lib/ir/scene.d.ts.map +1 -1
  81. package/dist/lib/ir/scope.cjs +30 -0
  82. package/dist/lib/ir/scope.d.ts +190 -0
  83. package/dist/lib/ir/scope.d.ts.map +1 -0
  84. package/dist/lib/ir/transform.cjs +56 -0
  85. package/dist/lib/ir/transform.d.ts +204 -0
  86. package/dist/lib/ir/transform.d.ts.map +1 -0
  87. package/package.json +1 -1
@@ -0,0 +1,66 @@
1
+ import { IRPosition, IRTransform } from '../ir';
2
+ import { Transform } from '../primitive';
3
+ import { NameStack } from './name-stack';
4
+ import { NodeLayout } from './node';
5
+ /**
6
+ * 把 IR 6 变体 transforms 展平为 Scene 3 变体(Cartesian translate / rotate / scale)
7
+ * @description 4 个 translate 变体(translate / polar-translate / at-translate / offset-translate)
8
+ * 各自构造对应 Position 字面量并调用 `resolvePosition` 拿到 Cartesian (x, y),再写成 Cartesian translate;
9
+ * rotate / scale 直接透传。referent 未解析时返回 null(上游负责发 warn / throw)
10
+ */
11
+ export declare const lowerScopeTransforms: (transforms: ReadonlyArray<IRTransform>, nameStack: NameStack, nodeDistance?: number) => Array<Transform> | null;
12
+ /**
13
+ * 把局部坐标点 (x, y) 按 Cartesian-only transform 链 apply 到全局坐标
14
+ * @description 数组语义与 SVG `transform="t0 t1 t2"` / TikZ scope option 顺序一致:
15
+ * array[0] 是最外层(最后 apply 到 local),array[last] 是最内层(最先 apply);
16
+ * 即对局部点 P,结果 = t0(t1(t2(P)))。实现上从数组尾部往头部迭代依次 apply。
17
+ * 只接受已被 `lowerScopeTransforms` 展平后的 3 变体(translate / rotate / scale)
18
+ */
19
+ export declare const applyTransformChain: (local: IRPosition, chain: ReadonlyArray<Transform>) => IRPosition;
20
+ /**
21
+ * 把全局坐标点反向投影回 scope 局部坐标系(`applyTransformChain` 的逆)
22
+ * @description chain = [t0, t1, t2](array[0] 最外层、最后 apply)的逆 =
23
+ * 按数组正序应用每个 transform 的逆:t0^-1 / t1^-1 / t2^-1。
24
+ * translate(-x, -y) / rotate(-deg, cx, cy) / scale(1/x, 1/y)。
25
+ * scale 分量为 0 时反向投影未定义——退化为返回原点 (0, 0) 当前层,避免 NaN 污染下游。
26
+ * 作用:referent 全局点 → 当前 scope 局部坐标系,配合 `applyTransformChain` 实现
27
+ * "referent 全局 + relative 部分在当前 scope 局部度量 + 末端正向投影回全局" 的语义。
28
+ */
29
+ export declare const inverseTransformChain: (global: IRPosition, chain: ReadonlyArray<Transform>) => IRPosition;
30
+ /**
31
+ * 复制 NodeLayout 并把 rect 中心点 + rotate + 尺寸全部按 scope transform chain 投到全局
32
+ * @description rect 中心走 `applyTransformChain`;chain 里的 rotate 累加到 `rect.rotate`(弧度)、
33
+ * scale 乘进 rect.width / height / margin——这样 path 端点的 boundary clip 取的是与 SVG `<g>`
34
+ * 实际渲染一致的视觉尺寸 / 朝向,跨 / 入 / 出 rotate / scale scope 的 path 都贴节点视觉边界。
35
+ * 非均匀 scale 与 rotate 在 chain 中混合时,按"累加 rotate + 分量相乘 scale"近似(uniform scale 精确,
36
+ * anisotropic + rotate 的剪切耦合不展开——alpha 阶段限制)。
37
+ */
38
+ export declare const projectLayoutToGlobal: (layout: NodeLayout, chain: ReadonlyArray<Transform>) => NodeLayout;
39
+ /** scope bbox 计算结果:bbox 几何中心 + 尺寸(width/height ≥ 0;空 scope 退化为 0×0 占位时仍合法) */
40
+ export type ScopeBoundingBox = {
41
+ /** bbox 几何中心 x(全局坐标) */
42
+ x: number;
43
+ /** bbox 几何中心 y(全局坐标) */
44
+ y: number;
45
+ /** bbox 宽度(≥ 0;空 scope / 单点退化为 0) */
46
+ width: number;
47
+ /** bbox 高度(≥ 0;空 scope / 单点退化为 0) */
48
+ height: number;
49
+ };
50
+ /**
51
+ * 收集一组 NodeLayout 的全局 axis-aligned bounding box
52
+ * @description 每个 layout 的 4 角点已是全局坐标系(Pass 1 累积 chain apply 后),
53
+ * 取每个 layout 的 rotate-aware `north-west` / `north-east` / `south-west` / `south-east`
54
+ * 4 角点(rect.anchor 已含 layout.rect.rotate 处理)并求 AABB;
55
+ * layout 是 0×0(coordinate / 空 scope 占位)时退化为单点也合法;
56
+ * 空 layouts 数组返回 null(调用方按"empty scope + fallback origin"退化为 0×0 占位)
57
+ */
58
+ export declare const computeScopeBoundingBox: (layouts: ReadonlyArray<NodeLayout>) => ScopeBoundingBox | null;
59
+ /**
60
+ * 用 scope id + bbox 构造 synthetic rectangle NodeLayout
61
+ * @description bbox 为 null 时退化为 fallbackOrigin 的 0×0 占位(空 scope 仍要有可引用句柄)。
62
+ * synthetic layout 完全复用 rectangle 路径:`scope.id.<keyword>` / `scope.id.<deg>` / `scope.id` 作为 referent
63
+ * 走与普通 rectangle Node 完全一致的 anchorOf / boundaryPointOf / 中心点取值
64
+ */
65
+ export declare const registerScopeAsLayout: (id: string, bbox: ScopeBoundingBox | null, fallbackOrigin: IRPosition) => NodeLayout;
66
+ //# sourceMappingURL=scope.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope.d.ts","sourceRoot":"","sources":["../../../src/compile/scope.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAGV,UAAU,EACV,WAAW,EAEZ,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAGzC;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,GAC/B,YAAY,aAAa,CAAC,WAAW,CAAC,EACtC,WAAW,SAAS,EACpB,eAAe,MAAM,KACpB,KAAK,CAAC,SAAS,CAAC,GAAG,IAiDrB,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,GAC9B,OAAO,UAAU,EACjB,OAAO,aAAa,CAAC,SAAS,CAAC,KAC9B,UAyBF,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,qBAAqB,GAChC,QAAQ,UAAU,EAClB,OAAO,aAAa,CAAC,SAAS,CAAC,KAC9B,UAgCF,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB,GAChC,QAAQ,UAAU,EAClB,OAAO,aAAa,CAAC,SAAS,CAAC,KAC9B,UAuBF,CAAC;AAEF,8EAA8E;AAC9E,MAAM,MAAM,gBAAgB,GAAG;IAC7B,wBAAwB;IACxB,CAAC,EAAE,MAAM,CAAC;IACV,wBAAwB;IACxB,CAAC,EAAE,MAAM,CAAC;IACV,qCAAqC;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,qCAAqC;IACrC,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,uBAAuB,GAClC,SAAS,aAAa,CAAC,UAAU,CAAC,KACjC,gBAAgB,GAAG,IA2BrB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,GAChC,IAAI,MAAM,EACV,MAAM,gBAAgB,GAAG,IAAI,EAC7B,gBAAgB,UAAU,KACzB,UAeF,CAAC"}
@@ -11,6 +11,8 @@ const require_step = require("./ir/path/step.cjs");
11
11
  const require_path = require("./ir/path/path.cjs");
12
12
  const require_node = require("./ir/node.cjs");
13
13
  const require_coordinate = require("./ir/coordinate.cjs");
14
+ const require_transform = require("./ir/transform.cjs");
15
+ const require_scope = require("./ir/scope.cjs");
14
16
  const require_scene = require("./ir/scene.cjs");
15
17
  const require_rect = require("./geometry/rect.cjs");
16
18
  const require_circle = require("./geometry/circle.cjs");
@@ -61,10 +63,12 @@ exports.RECT_ANCHORS = require_rect.RECT_ANCHORS;
61
63
  exports.RelativeAccumulateTargetSchema = require_target.RelativeAccumulateTargetSchema;
62
64
  exports.RelativeTargetSchema = require_target.RelativeTargetSchema;
63
65
  exports.SceneSchema = require_scene.SceneSchema;
66
+ exports.ScopeSchema = require_scope.ScopeSchema;
64
67
  exports.StepLabelSchema = require_step.StepLabelSchema;
65
68
  exports.StepSchema = require_step.StepSchema;
66
69
  exports.TargetSchema = require_target.TargetSchema;
67
70
  exports.TextBlockSchema = require_text.TextBlockSchema;
71
+ exports.TransformSchema = require_transform.TransformSchema;
68
72
  exports.circle = require_circle.circle;
69
73
  exports.compileToScene = require_compile.compileToScene;
70
74
  exports.computeLayout = require_layout.computeLayout;
@@ -2,8 +2,8 @@
2
2
  * @retikz/core 公开 API
3
3
  * @description 任何 framework adapter(@retikz/react、@retikz/vue、@retikz/canvas、@retikz/ssr)只能 import 本文件导出内容,不准走子路径。本包零 React/零 DOM 依赖
4
4
  */
5
- export { PositionSchema, PolarPositionSchema, AtPositionSchema, OffsetPositionSchema, AT_DIRECTIONS, TargetSchema, RelativeTargetSchema, RelativeAccumulateTargetSchema, MoveStepSchema, LineStepSchema, FoldStepSchema, CycleStepSchema, CurveStepSchema, CubicStepSchema, BendStepSchema, ArcStepSchema, CirclePathStepSchema, EllipsePathStepSchema, ControlPointSchema, StepLabelSchema, StepSchema, NodeSchema, NodeLabelSchema, CoordinateSchema, FontSchema, TextBlockSchema, LineSpecSchema, PathSchema, ArrowDetailSchema, ArrowEndDetailSchema, ChildSchema, SceneSchema, CURRENT_IR_VERSION, } from './ir';
6
- export type { IRPosition, IRAtPosition, IROffsetPosition, AtDirection, IRTarget, IRRelativeTarget, IRRelativeAccumulateTarget, IRMoveStep, IRLineStep, IRFoldStep, IRCycleStep, IRCurveStep, IRCubicStep, IRBendStep, IRArcStep, IRCirclePathStep, IREllipsePathStep, IRControlPoint, IRStepLabel, IRStep, IRNode, IRNodeLabel, IRCoordinate, IRFont, IRLineSpec, IRTextBlock, IRPath, IRChild, IR, ArrowShape, IRArrowDetail, IRArrowEndDetail, NodeShape, NodeTextAlign, } from './ir';
5
+ export { PositionSchema, PolarPositionSchema, AtPositionSchema, OffsetPositionSchema, AT_DIRECTIONS, TargetSchema, RelativeTargetSchema, RelativeAccumulateTargetSchema, MoveStepSchema, LineStepSchema, FoldStepSchema, CycleStepSchema, CurveStepSchema, CubicStepSchema, BendStepSchema, ArcStepSchema, CirclePathStepSchema, EllipsePathStepSchema, ControlPointSchema, StepLabelSchema, StepSchema, NodeSchema, NodeLabelSchema, CoordinateSchema, FontSchema, TextBlockSchema, LineSpecSchema, PathSchema, ArrowDetailSchema, ArrowEndDetailSchema, ScopeSchema, TransformSchema, ChildSchema, SceneSchema, CURRENT_IR_VERSION, } from './ir';
6
+ export type { IRPosition, IRAtPosition, IROffsetPosition, AtDirection, IRTarget, IRRelativeTarget, IRRelativeAccumulateTarget, IRMoveStep, IRLineStep, IRFoldStep, IRCycleStep, IRCurveStep, IRCubicStep, IRBendStep, IRArcStep, IRCirclePathStep, IREllipsePathStep, IRControlPoint, IRStepLabel, IRStep, IRNode, IRNodeLabel, IRCoordinate, IRFont, IRLineSpec, IRTextBlock, IRPath, IRScope, IRTransform, IRTranslateTransform, IRPolarTranslateTransform, IRAtTranslateTransform, IROffsetTranslateTransform, IRRotateTransform, IRScaleTransform, IRChild, IR, ArrowShape, IRArrowDetail, IRArrowEndDetail, NodeShape, NodeTextAlign, } from './ir';
7
7
  export { ARROW_SHAPES, DEFAULT_ARROW_SHAPE, HOLLOW_ARROW_SHAPES, ARROW_MARKER_DEFAULT_SIZE, ARROW_MARKER_HOLLOW_DEFAULT_LINE_WIDTH, NODE_SHAPES, NODE_TEXT_ALIGNS, } from './ir';
8
8
  export type { ScenePrimitive, RectPrim, EllipsePrim, TextPrim, TextLine, PathPrim, PathCommand,
9
9
  /** 7 个 named PathCommand 分支(便于 wrapper / Pick<>) */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,EACpB,aAAa,EACb,YAAY,EACZ,oBAAoB,EACpB,8BAA8B,EAC9B,cAAc,EACd,cAAc,EACd,cAAc,EACd,eAAe,EACf,eAAe,EACf,eAAe,EACf,cAAc,EACd,aAAa,EACb,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,EAClB,eAAe,EACf,UAAU,EACV,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,UAAU,EACV,eAAe,EACf,cAAc,EACd,UAAU,EACV,iBAAiB,EACjB,oBAAoB,EACpB,WAAW,EACX,WAAW,EACX,kBAAkB,GACnB,MAAM,MAAM,CAAC;AACd,YAAY,EACV,UAAU,EACV,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,QAAQ,EACR,gBAAgB,EAChB,0BAA0B,EAC1B,UAAU,EACV,UAAU,EACV,UAAU,EACV,WAAW,EACX,WAAW,EACX,WAAW,EACX,UAAU,EACV,SAAS,EACT,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,WAAW,EACX,MAAM,EACN,MAAM,EACN,WAAW,EACX,YAAY,EACZ,MAAM,EACN,UAAU,EACV,WAAW,EACX,MAAM,EACN,OAAO,EACP,EAAE,EACF,UAAU,EACV,aAAa,EACb,gBAAgB,EAChB,SAAS,EACT,aAAa,GACd,MAAM,MAAM,CAAC;AACd,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,EACnB,yBAAyB,EACzB,sCAAsC,EACtC,WAAW,EACX,gBAAgB,GACjB,MAAM,MAAM,CAAC;AAGd,YAAY,EACV,cAAc,EACd,QAAQ,EACR,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,WAAW;AACX,oDAAoD;AACpD,eAAe,EACf,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,qBAAqB,EACrB,gBAAgB,EAChB,YAAY,EACZ,SAAS,EACT,SAAS;AACT,6BAA6B;AAC7B,kBAAkB,EAClB,eAAe,EACf,cAAc,EACd,MAAM,EACN,KAAK,GACN,MAAM,aAAa,CAAC;AAGrB,YAAY,EACV,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,cAAc,EACd,cAAc,GACf,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAG5E,YAAY,EACV,OAAO,EACP,MAAM,EACN,QAAQ,EACR,MAAM,EACN,eAAe,EACf,QAAQ,EACR,UAAU,GACX,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAIhE,YAAY,EACV,QAAQ,EACR,IAAI,EACJ,UAAU,EACV,MAAM,EACN,OAAO,EACP,OAAO,EACP,aAAa,GACd,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAGxF,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,EACpB,aAAa,EACb,YAAY,EACZ,oBAAoB,EACpB,8BAA8B,EAC9B,cAAc,EACd,cAAc,EACd,cAAc,EACd,eAAe,EACf,eAAe,EACf,eAAe,EACf,cAAc,EACd,aAAa,EACb,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,EAClB,eAAe,EACf,UAAU,EACV,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,UAAU,EACV,eAAe,EACf,cAAc,EACd,UAAU,EACV,iBAAiB,EACjB,oBAAoB,EACpB,WAAW,EACX,eAAe,EACf,WAAW,EACX,WAAW,EACX,kBAAkB,GACnB,MAAM,MAAM,CAAC;AACd,YAAY,EACV,UAAU,EACV,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,QAAQ,EACR,gBAAgB,EAChB,0BAA0B,EAC1B,UAAU,EACV,UAAU,EACV,UAAU,EACV,WAAW,EACX,WAAW,EACX,WAAW,EACX,UAAU,EACV,SAAS,EACT,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,WAAW,EACX,MAAM,EACN,MAAM,EACN,WAAW,EACX,YAAY,EACZ,MAAM,EACN,UAAU,EACV,WAAW,EACX,MAAM,EACN,OAAO,EACP,WAAW,EACX,oBAAoB,EACpB,yBAAyB,EACzB,sBAAsB,EACtB,0BAA0B,EAC1B,iBAAiB,EACjB,gBAAgB,EAChB,OAAO,EACP,EAAE,EACF,UAAU,EACV,aAAa,EACb,gBAAgB,EAChB,SAAS,EACT,aAAa,GACd,MAAM,MAAM,CAAC;AACd,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,EACnB,yBAAyB,EACzB,sCAAsC,EACtC,WAAW,EACX,gBAAgB,GACjB,MAAM,MAAM,CAAC;AAGd,YAAY,EACV,cAAc,EACd,QAAQ,EACR,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,WAAW;AACX,oDAAoD;AACpD,eAAe,EACf,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,qBAAqB,EACrB,gBAAgB,EAChB,YAAY,EACZ,SAAS,EACT,SAAS;AACT,6BAA6B;AAC7B,kBAAkB,EAClB,eAAe,EACf,cAAc,EACd,MAAM,EACN,KAAK,GACN,MAAM,aAAa,CAAC;AAGrB,YAAY,EACV,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,cAAc,EACd,cAAc,GACf,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAG5E,YAAY,EACV,OAAO,EACP,MAAM,EACN,QAAQ,EACR,MAAM,EACN,eAAe,EACf,QAAQ,EACR,UAAU,GACX,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAIhE,YAAY,EACV,QAAQ,EACR,IAAI,EACJ,UAAU,EACV,MAAM,EACN,OAAO,EACP,OAAO,EACP,aAAa,GACd,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAGxF,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC"}
@@ -4,5 +4,7 @@ export * from './text';
4
4
  export * from './path';
5
5
  export * from './node';
6
6
  export * from './coordinate';
7
+ export * from './transform';
8
+ export * from './scope';
7
9
  export * from './scene';
8
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ir/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ir/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC"}
@@ -1,13 +1,21 @@
1
1
  const require_path = require("./path/path.cjs");
2
2
  const require_node = require("./node.cjs");
3
3
  const require_coordinate = require("./coordinate.cjs");
4
+ const require_scope = require("./scope.cjs");
4
5
  let zod = require("zod");
5
6
  //#region src/ir/scene.ts
6
- var ChildSchema = zod.z.discriminatedUnion("type", [
7
+ /**
8
+ * ChildSchema:4 类 IR 子节点的 discriminated union
9
+ * @description 用 `z.ZodType<IRChild>` + `z.lazy` 包裹整个 union 让 ScopeSchema.children 能递归引用自己;
10
+ * scope 内嵌 scope 无深度限制(与 polar/offset 嵌套规则一致)
11
+ */
12
+ var ChildSchema = zod.z.lazy(() => zod.z.discriminatedUnion("type", [
7
13
  require_node.NodeSchema,
8
14
  require_path.PathSchema,
9
- require_coordinate.CoordinateSchema
10
- ]).describe("Top-level scene child: a node, a path, or a coordinate placeholder; discriminator field is `type`");
15
+ require_coordinate.CoordinateSchema,
16
+ require_scope.ScopeSchema
17
+ ]).describe("Top-level scene child: a node, a path, a coordinate placeholder, or a scope container; discriminator field is `type`"));
18
+ require_scope.__registerChildSchema(ChildSchema);
11
19
  var SceneSchema = zod.z.object({
12
20
  version: zod.z.literal(1).describe("IR major version number; bump only on breaking schema changes"),
13
21
  type: zod.z.literal("scene").describe("Discriminator marking this object as the root scene"),