@retikz/core 0.3.0-alpha.3 → 0.3.0-alpha.5

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 (242) hide show
  1. package/README.md +41 -41
  2. package/dist/es/compile/anchor-cache.d.ts +5 -3
  3. package/dist/es/compile/anchor-cache.d.ts.map +1 -1
  4. package/dist/es/compile/anchor-cache.js +14 -10
  5. package/dist/es/compile/boundary.d.ts +19 -0
  6. package/dist/es/compile/boundary.d.ts.map +1 -0
  7. package/dist/es/compile/boundary.js +64 -0
  8. package/dist/es/compile/compile.d.ts +1 -1
  9. package/dist/es/compile/compile.d.ts.map +1 -1
  10. package/dist/es/compile/compile.js +49 -5
  11. package/dist/es/compile/node.d.ts +26 -8
  12. package/dist/es/compile/node.d.ts.map +1 -1
  13. package/dist/es/compile/node.js +103 -16
  14. package/dist/es/compile/path/anchor.d.ts.map +1 -1
  15. package/dist/es/compile/path/anchor.js +7 -6
  16. package/dist/es/compile/path/index.d.ts.map +1 -1
  17. package/dist/es/compile/path/index.js +7 -3
  18. package/dist/es/compile/path/relative.js +1 -1
  19. package/dist/es/compile/scope.d.ts.map +1 -1
  20. package/dist/es/compile/scope.js +2 -1
  21. package/dist/es/geometry/arc.d.ts +14 -0
  22. package/dist/es/geometry/arc.d.ts.map +1 -1
  23. package/dist/es/geometry/arc.js +65 -9
  24. package/dist/es/geometry/index.d.ts +1 -0
  25. package/dist/es/geometry/index.d.ts.map +1 -1
  26. package/dist/es/geometry/rect.d.ts +2 -2
  27. package/dist/es/geometry/rect.d.ts.map +1 -1
  28. package/dist/es/geometry/rect.js +3 -3
  29. package/dist/es/geometry/roundedContour.d.ts +88 -0
  30. package/dist/es/geometry/roundedContour.d.ts.map +1 -0
  31. package/dist/es/geometry/roundedContour.js +417 -0
  32. package/dist/es/index.d.ts +9 -5
  33. package/dist/es/index.d.ts.map +1 -1
  34. package/dist/es/index.js +11 -6
  35. package/dist/es/ir/animation.d.ts +218 -0
  36. package/dist/es/ir/animation.d.ts.map +1 -0
  37. package/dist/es/ir/animation.js +118 -0
  38. package/dist/es/ir/boundary.d.ts +25 -0
  39. package/dist/es/ir/boundary.d.ts.map +1 -0
  40. package/dist/es/ir/boundary.js +14 -0
  41. package/dist/es/ir/index.d.ts +3 -0
  42. package/dist/es/ir/index.d.ts.map +1 -1
  43. package/dist/es/ir/node.d.ts +219 -27
  44. package/dist/es/ir/node.d.ts.map +1 -1
  45. package/dist/es/ir/node.js +10 -3
  46. package/dist/es/ir/path/arrow.d.ts +36 -36
  47. package/dist/es/ir/path/path.d.ts +702 -203
  48. package/dist/es/ir/path/path.d.ts.map +1 -1
  49. package/dist/es/ir/path/path.js +4 -0
  50. package/dist/es/ir/path/step.d.ts +674 -154
  51. package/dist/es/ir/path/step.d.ts.map +1 -1
  52. package/dist/es/ir/path/step.js +2 -2
  53. package/dist/es/ir/path/target.d.ts +43 -8
  54. package/dist/es/ir/path/target.d.ts.map +1 -1
  55. package/dist/es/ir/path/target.js +4 -5
  56. package/dist/es/ir/scene.d.ts +156 -0
  57. package/dist/es/ir/scene.d.ts.map +1 -1
  58. package/dist/es/ir/scene.js +3 -1
  59. package/dist/es/ir/scope.d.ts +1671 -424
  60. package/dist/es/ir/scope.d.ts.map +1 -1
  61. package/dist/es/ir/scope.js +10 -2
  62. package/dist/es/ir/shape.d.ts +14 -0
  63. package/dist/es/ir/shape.d.ts.map +1 -0
  64. package/dist/es/ir/shape.js +9 -0
  65. package/dist/es/parsers/parseNodeTarget.d.ts.map +1 -1
  66. package/dist/es/parsers/parseNodeTarget.js +4 -2
  67. package/dist/es/presets/animation.d.ts +123 -0
  68. package/dist/es/presets/animation.d.ts.map +1 -0
  69. package/dist/es/presets/animation.js +272 -0
  70. package/dist/es/presets/index.d.ts +3 -0
  71. package/dist/es/presets/index.d.ts.map +1 -0
  72. package/dist/es/primitive/ellipse.d.ts +6 -0
  73. package/dist/es/primitive/ellipse.d.ts.map +1 -1
  74. package/dist/es/primitive/group.d.ts +6 -0
  75. package/dist/es/primitive/group.d.ts.map +1 -1
  76. package/dist/es/primitive/path.d.ts +6 -0
  77. package/dist/es/primitive/path.d.ts.map +1 -1
  78. package/dist/es/primitive/rect.d.ts +6 -0
  79. package/dist/es/primitive/rect.d.ts.map +1 -1
  80. package/dist/es/primitive/scene.d.ts +3 -0
  81. package/dist/es/primitive/scene.d.ts.map +1 -1
  82. package/dist/es/primitive/text.d.ts +6 -0
  83. package/dist/es/primitive/text.d.ts.map +1 -1
  84. package/dist/es/shapes/_contour.d.ts +19 -0
  85. package/dist/es/shapes/_contour.d.ts.map +1 -0
  86. package/dist/es/shapes/_contour.js +60 -0
  87. package/dist/es/shapes/_shared.d.ts +54 -0
  88. package/dist/es/shapes/_shared.d.ts.map +1 -1
  89. package/dist/es/shapes/_shared.js +68 -1
  90. package/dist/es/shapes/arc.d.ts +8 -0
  91. package/dist/es/shapes/arc.d.ts.map +1 -0
  92. package/dist/es/shapes/arc.js +104 -0
  93. package/dist/es/shapes/define.d.ts +13 -0
  94. package/dist/es/shapes/define.d.ts.map +1 -0
  95. package/dist/es/shapes/define.js +13 -0
  96. package/dist/es/shapes/ellipse.d.ts +5 -4
  97. package/dist/es/shapes/ellipse.d.ts.map +1 -1
  98. package/dist/es/shapes/ellipse.js +15 -7
  99. package/dist/es/shapes/index.d.ts +9 -6
  100. package/dist/es/shapes/index.d.ts.map +1 -1
  101. package/dist/es/shapes/index.js +10 -5
  102. package/dist/es/shapes/polygon.d.ts +13 -0
  103. package/dist/es/shapes/polygon.d.ts.map +1 -0
  104. package/dist/es/shapes/polygon.js +104 -0
  105. package/dist/es/shapes/rectangle.d.ts +7 -5
  106. package/dist/es/shapes/rectangle.d.ts.map +1 -1
  107. package/dist/es/shapes/rectangle.js +37 -8
  108. package/dist/es/shapes/sector.d.ts +9 -0
  109. package/dist/es/shapes/sector.d.ts.map +1 -0
  110. package/dist/es/shapes/sector.js +143 -0
  111. package/dist/es/shapes/star.d.ts +15 -0
  112. package/dist/es/shapes/star.d.ts.map +1 -0
  113. package/dist/es/shapes/star.js +113 -0
  114. package/dist/es/shapes/types.d.ts +47 -14
  115. package/dist/es/shapes/types.d.ts.map +1 -1
  116. package/dist/lib/compile/anchor-cache.cjs +14 -10
  117. package/dist/lib/compile/anchor-cache.d.ts +5 -3
  118. package/dist/lib/compile/anchor-cache.d.ts.map +1 -1
  119. package/dist/lib/compile/boundary.cjs +65 -0
  120. package/dist/lib/compile/boundary.d.ts +19 -0
  121. package/dist/lib/compile/boundary.d.ts.map +1 -0
  122. package/dist/lib/compile/compile.cjs +49 -5
  123. package/dist/lib/compile/compile.d.ts +1 -1
  124. package/dist/lib/compile/compile.d.ts.map +1 -1
  125. package/dist/lib/compile/node.cjs +103 -16
  126. package/dist/lib/compile/node.d.ts +26 -8
  127. package/dist/lib/compile/node.d.ts.map +1 -1
  128. package/dist/lib/compile/path/anchor.cjs +7 -6
  129. package/dist/lib/compile/path/anchor.d.ts.map +1 -1
  130. package/dist/lib/compile/path/index.cjs +7 -3
  131. package/dist/lib/compile/path/index.d.ts.map +1 -1
  132. package/dist/lib/compile/path/relative.cjs +1 -1
  133. package/dist/lib/compile/scope.cjs +2 -1
  134. package/dist/lib/compile/scope.d.ts.map +1 -1
  135. package/dist/lib/geometry/arc.cjs +66 -8
  136. package/dist/lib/geometry/arc.d.ts +14 -0
  137. package/dist/lib/geometry/arc.d.ts.map +1 -1
  138. package/dist/lib/geometry/index.d.ts +1 -0
  139. package/dist/lib/geometry/index.d.ts.map +1 -1
  140. package/dist/lib/geometry/rect.cjs +3 -3
  141. package/dist/lib/geometry/rect.d.ts +2 -2
  142. package/dist/lib/geometry/rect.d.ts.map +1 -1
  143. package/dist/lib/geometry/roundedContour.cjs +418 -0
  144. package/dist/lib/geometry/roundedContour.d.ts +88 -0
  145. package/dist/lib/geometry/roundedContour.d.ts.map +1 -0
  146. package/dist/lib/index.cjs +41 -7
  147. package/dist/lib/index.d.ts +9 -5
  148. package/dist/lib/index.d.ts.map +1 -1
  149. package/dist/lib/ir/animation.cjs +127 -0
  150. package/dist/lib/ir/animation.d.ts +218 -0
  151. package/dist/lib/ir/animation.d.ts.map +1 -0
  152. package/dist/lib/ir/boundary.cjs +15 -0
  153. package/dist/lib/ir/boundary.d.ts +25 -0
  154. package/dist/lib/ir/boundary.d.ts.map +1 -0
  155. package/dist/lib/ir/index.d.ts +3 -0
  156. package/dist/lib/ir/index.d.ts.map +1 -1
  157. package/dist/lib/ir/node.cjs +10 -3
  158. package/dist/lib/ir/node.d.ts +219 -27
  159. package/dist/lib/ir/node.d.ts.map +1 -1
  160. package/dist/lib/ir/path/arrow.d.ts +36 -36
  161. package/dist/lib/ir/path/path.cjs +4 -0
  162. package/dist/lib/ir/path/path.d.ts +702 -203
  163. package/dist/lib/ir/path/path.d.ts.map +1 -1
  164. package/dist/lib/ir/path/step.cjs +2 -2
  165. package/dist/lib/ir/path/step.d.ts +674 -154
  166. package/dist/lib/ir/path/step.d.ts.map +1 -1
  167. package/dist/lib/ir/path/target.cjs +4 -5
  168. package/dist/lib/ir/path/target.d.ts +43 -8
  169. package/dist/lib/ir/path/target.d.ts.map +1 -1
  170. package/dist/lib/ir/scene.cjs +3 -1
  171. package/dist/lib/ir/scene.d.ts +156 -0
  172. package/dist/lib/ir/scene.d.ts.map +1 -1
  173. package/dist/lib/ir/scope.cjs +10 -2
  174. package/dist/lib/ir/scope.d.ts +1671 -424
  175. package/dist/lib/ir/scope.d.ts.map +1 -1
  176. package/dist/lib/ir/shape.cjs +9 -0
  177. package/dist/lib/ir/shape.d.ts +14 -0
  178. package/dist/lib/ir/shape.d.ts.map +1 -0
  179. package/dist/lib/parsers/parseNodeTarget.cjs +4 -2
  180. package/dist/lib/parsers/parseNodeTarget.d.ts.map +1 -1
  181. package/dist/lib/presets/animation.cjs +286 -0
  182. package/dist/lib/presets/animation.d.ts +123 -0
  183. package/dist/lib/presets/animation.d.ts.map +1 -0
  184. package/dist/lib/presets/index.d.ts +3 -0
  185. package/dist/lib/presets/index.d.ts.map +1 -0
  186. package/dist/lib/primitive/ellipse.d.ts +6 -0
  187. package/dist/lib/primitive/ellipse.d.ts.map +1 -1
  188. package/dist/lib/primitive/group.d.ts +6 -0
  189. package/dist/lib/primitive/group.d.ts.map +1 -1
  190. package/dist/lib/primitive/path.d.ts +6 -0
  191. package/dist/lib/primitive/path.d.ts.map +1 -1
  192. package/dist/lib/primitive/rect.d.ts +6 -0
  193. package/dist/lib/primitive/rect.d.ts.map +1 -1
  194. package/dist/lib/primitive/scene.d.ts +3 -0
  195. package/dist/lib/primitive/scene.d.ts.map +1 -1
  196. package/dist/lib/primitive/text.d.ts +6 -0
  197. package/dist/lib/primitive/text.d.ts.map +1 -1
  198. package/dist/lib/shapes/_contour.cjs +61 -0
  199. package/dist/lib/shapes/_contour.d.ts +19 -0
  200. package/dist/lib/shapes/_contour.d.ts.map +1 -0
  201. package/dist/lib/shapes/_shared.cjs +70 -0
  202. package/dist/lib/shapes/_shared.d.ts +54 -0
  203. package/dist/lib/shapes/_shared.d.ts.map +1 -1
  204. package/dist/lib/shapes/arc.cjs +104 -0
  205. package/dist/lib/shapes/arc.d.ts +8 -0
  206. package/dist/lib/shapes/arc.d.ts.map +1 -0
  207. package/dist/lib/shapes/define.cjs +13 -0
  208. package/dist/lib/shapes/define.d.ts +13 -0
  209. package/dist/lib/shapes/define.d.ts.map +1 -0
  210. package/dist/lib/shapes/ellipse.cjs +15 -7
  211. package/dist/lib/shapes/ellipse.d.ts +5 -4
  212. package/dist/lib/shapes/ellipse.d.ts.map +1 -1
  213. package/dist/lib/shapes/index.cjs +12 -6
  214. package/dist/lib/shapes/index.d.ts +9 -6
  215. package/dist/lib/shapes/index.d.ts.map +1 -1
  216. package/dist/lib/shapes/polygon.cjs +104 -0
  217. package/dist/lib/shapes/polygon.d.ts +13 -0
  218. package/dist/lib/shapes/polygon.d.ts.map +1 -0
  219. package/dist/lib/shapes/rectangle.cjs +37 -8
  220. package/dist/lib/shapes/rectangle.d.ts +7 -5
  221. package/dist/lib/shapes/rectangle.d.ts.map +1 -1
  222. package/dist/lib/shapes/sector.cjs +143 -0
  223. package/dist/lib/shapes/sector.d.ts +9 -0
  224. package/dist/lib/shapes/sector.d.ts.map +1 -0
  225. package/dist/lib/shapes/star.cjs +113 -0
  226. package/dist/lib/shapes/star.d.ts +15 -0
  227. package/dist/lib/shapes/star.d.ts.map +1 -0
  228. package/dist/lib/shapes/types.d.ts +47 -14
  229. package/dist/lib/shapes/types.d.ts.map +1 -1
  230. package/package.json +2 -2
  231. package/dist/es/shapes/circle.d.ts +0 -8
  232. package/dist/es/shapes/circle.d.ts.map +0 -1
  233. package/dist/es/shapes/circle.js +0 -34
  234. package/dist/es/shapes/diamond.d.ts +0 -8
  235. package/dist/es/shapes/diamond.d.ts.map +0 -1
  236. package/dist/es/shapes/diamond.js +0 -66
  237. package/dist/lib/shapes/circle.cjs +0 -34
  238. package/dist/lib/shapes/circle.d.ts +0 -8
  239. package/dist/lib/shapes/circle.d.ts.map +0 -1
  240. package/dist/lib/shapes/diamond.cjs +0 -66
  241. package/dist/lib/shapes/diamond.d.ts +0 -8
  242. package/dist/lib/shapes/diamond.d.ts.map +0 -1
@@ -2,9 +2,11 @@
2
2
  * @retikz/core 公开 API
3
3
  * @description 任何 framework adapter(@retikz/react、@retikz/vue、@retikz/render/canvas、@retikz/ssr)只能 import 本文件导出内容,不准走子路径。本包零 React/零 DOM 依赖
4
4
  */
5
- export { PositionSchema, PolarPositionSchema, AtPositionSchema, OffsetPositionSchema, AT_DIRECTIONS, TargetSchema, AnchorRefSchema, NodeTargetSchema, RelativeTargetSchema, RelativeAccumulateTargetSchema, AbsoluteTargetSchema, BetweenPositionSchema, MoveStepSchema, LineStepSchema, FoldStepSchema, CycleStepSchema, CurveStepSchema, CubicStepSchema, BendStepSchema, ArcStepSchema, CirclePathStepSchema, EllipsePathStepSchema, RectangleStepSchema, GeneratorStepSchema, ControlPointSchema, StepLabelSchema, StepSchema, NodeSchema, NodeLabelSchema, CoordinateSchema, FontSchema, TextBlockSchema, LineSpecSchema, PathSchema, ArrowDetailSchema, ArrowEndDetailSchema, ScopeSchema, CompositeBaseSchema, NodeDefaultSchema, PathDefaultSchema, LabelDefaultSchema, ArrowDefaultSchema, TransformSchema, ChildSchema, SceneSchema, CURRENT_IR_VERSION, PaintSpecSchema, GradientStopSchema, JsonValueSchema, JsonObjectSchema, ClipSpecSchema, ViewBoxSchema, } from './ir';
6
- export type { IRPosition, IRAtPosition, IROffsetPosition, AtDirection, IRTarget, IRAnchorRef, IRNodeTarget, IRRelativeTarget, IRRelativeAccumulateTarget, IRAbsoluteTarget, IRBetweenPosition, IRMoveStep, IRLineStep, IRFoldStep, IRCycleStep, IRCurveStep, IRCubicStep, IRBendStep, IRArcStep, IRCirclePathStep, IREllipsePathStep, IRRectangleStep, IRGeneratorStep, IRControlPoint, IRStepLabel, IRStep, IRNode, IRNodeLabel, IRCoordinate, IRFont, IRLineSpec, IRTextBlock, IRPath, IRScope, IRComposite, IRNodeDefault, IRPathDefault, IRLabelDefault, IRArrowDefault, StyleChannel, IRTransform, IRTranslateTransform, IRPolarTranslateTransform, IRAtTranslateTransform, IROffsetTranslateTransform, IRRotateTransform, IRScaleTransform, IRChild, IR, ArrowShape, BuiltinArrowName, ArrowShapeName, IRArrowDetail, IRArrowEndDetail, NodeShape, BuiltinShapeName, NodeTextAlign, PatternShapeName, BuiltinPatternName, IRPaintSpec, IRGradientStop, JsonValue, IRJsonObject, IRClipSpec, IRViewBox, } from './ir';
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, PATTERN_SHAPES, } from './ir';
5
+ export { PositionSchema, PolarPositionSchema, AtPositionSchema, OffsetPositionSchema, AT_DIRECTIONS, TargetSchema, AnchorRefSchema, NodeTargetSchema, RelativeTargetSchema, RelativeAccumulateTargetSchema, AbsoluteTargetSchema, BetweenPositionSchema, MoveStepSchema, LineStepSchema, FoldStepSchema, CycleStepSchema, CurveStepSchema, CubicStepSchema, BendStepSchema, ArcStepSchema, CirclePathStepSchema, EllipsePathStepSchema, RectangleStepSchema, GeneratorStepSchema, ControlPointSchema, StepLabelSchema, StepSchema, NodeSchema, NodeLabelSchema, ShapeRefSchema, CoordinateSchema, FontSchema, TextBlockSchema, LineSpecSchema, PathSchema, ArrowDetailSchema, ArrowEndDetailSchema, ScopeSchema, CompositeBaseSchema, NodeDefaultSchema, PathDefaultSchema, LabelDefaultSchema, ArrowDefaultSchema, TransformSchema, ChildSchema, SceneSchema, CURRENT_IR_VERSION, PaintSpecSchema, GradientStopSchema, JsonValueSchema, JsonObjectSchema, ClipSpecSchema, ViewBoxSchema, } from './ir';
6
+ export type { IRPosition, IRAtPosition, IROffsetPosition, AtDirection, IRTarget, IRAnchorRef, IRNodeTarget, IRRelativeTarget, IRRelativeAccumulateTarget, IRAbsoluteTarget, IRBetweenPosition, IRMoveStep, IRLineStep, IRFoldStep, IRCycleStep, IRCurveStep, IRCubicStep, IRBendStep, IRArcStep, IRCirclePathStep, IREllipsePathStep, IRRectangleStep, IRGeneratorStep, IRControlPoint, IRStepLabel, IRStep, IRNode, IRNodeLabel, IRShapeRef, IRCoordinate, IRFont, IRLineSpec, IRTextBlock, IRPath, IRScope, IRComposite, IRNodeDefault, IRPathDefault, IRLabelDefault, IRArrowDefault, StyleChannel, IRTransform, IRTranslateTransform, IRPolarTranslateTransform, IRAtTranslateTransform, IROffsetTranslateTransform, IRRotateTransform, IRScaleTransform, IRChild, IR, ArrowShape, BuiltinArrowName, ArrowShapeName, IRArrowDetail, IRArrowEndDetail, NodeShape, BuiltinShapeName, NodeTextAlign, PatternShapeName, BuiltinPatternName, IRPaintSpec, IRGradientStop, JsonValue, IRJsonObject, IRClipSpec, IRViewBox, } from './ir';
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, PATTERN_SHAPES, Boundary, BoundarySchema, AnimationProperty, AnimationEasing, AnimationDirection, AnimationFill, AnimationTrigger, AnimationTrackSchema, KeyframeSchema, TriggerSchema, EasingSchema, OriginSchema, } from './ir';
8
+ export type { BoundaryKeyword, IRBoundary } from './ir';
9
+ export type { BuiltinAnimationProperty, AnimationPropertyRef, AnimationEasingName, AnimationDirectionName, AnimationFillName, AnimationTriggerName, IRAnimationTrack, IRKeyframe, IRAnimationTrigger, IRAnimationOrigin, } from './ir';
8
10
  export type { ScenePrimitive, RectPrim, EllipsePrim, TextPrim, TextLine, PathPrim, PathCommand,
9
11
  /** 7 个 named PathCommand 分支(便于 wrapper / Pick<>) */
10
12
  MovePathCommand, LinePathCommand, QuadPathCommand, CubicPathCommand, ArcPathCommand, EllipseArcPathCommand, ClosePathCommand, ArrowEndSpec, GroupPrim, Transform,
@@ -20,10 +22,12 @@ export type { FontSpec, TextMetrics, TextMeasurer, CompileOptions, CompileWarnin
20
22
  export { computeLayout, fallbackMeasurer, compileToScene } from './compile';
21
23
  export type { WayItem, WayDSL, WayCycle, WayVia, WayRelativeItem, WayLabel, WayLabelOp, } from './parsers';
22
24
  export { parseWay, DrawWay, parseTargetSugar, parseNodeTarget } from './parsers';
25
+ export { fadeIn, drawOn, scaleIn, grow, growUp, slideIn, colorShift, cameraTo, pulse, spin, loop, flash, blink, wiggle, stagger, } from './presets';
26
+ export type { AnimationPresetOptions, ScaleInOptions, GrowUpOptions, SlideInOptions, ColorShiftOptions, CameraToOptions, PulseOptions, SpinOptions, LoopOptions, FlashOptions, BlinkOptions, WiggleOptions, } from './presets';
23
27
  export type { Position, Rect, RectAnchor, Circle, Ellipse, Diamond, PolarPosition, } from './geometry';
24
28
  export { point, rect, circle, ellipse, diamond, RECT_ANCHORS, polar } from './geometry';
25
- export type { ShapeDefinition, ShapeStyle } from './shapes';
26
- export { BUILTIN_SHAPES, worldToLocal, localToWorld } from './shapes';
29
+ export type { ShapeDefinition, ShapeDefinitionInput, ShapeStyle } from './shapes';
30
+ export { BUILTIN_SHAPES, defineShape, worldToLocal, localToWorld } from './shapes';
27
31
  export type { ArrowDefinition, ArrowEmitContext } from './arrows';
28
32
  export { BUILTIN_ARROWS } from './arrows';
29
33
  export type { PatternDefinition, PatternEmitContext } from './patterns';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,127 @@
1
+ const require_json = require("./json.cjs");
2
+ let zod = require("zod");
3
+ //#region src/ir/animation.ts
4
+ /**
5
+ * 可动画属性通道(renderer 无关;DrawWay 风格 const + 派生类型,裸字面量 'opacity' 仍第一形态)
6
+ * @description `viewBox` 仅在 scene 根合法(镜头),元素级 viewBox track 由 compile / render 拒;
7
+ * `pathDraw` 是 0..1 路径画出进度;`scaleX` / `scaleY` 是非均匀缩放(柱状图从基线长出等),`scale` 是均匀缩放;
8
+ * transform 通道(scale / scaleX / scaleY / rotate)的支点见 track 级 `origin`,缺省几何中心。
9
+ * 各后端按通道翻译:SVG WAAPI/CSS、Canvas rAF 几何 lerp。
10
+ */
11
+ var AnimationProperty = {
12
+ Opacity: "opacity",
13
+ Fill: "fill",
14
+ Stroke: "stroke",
15
+ StrokeWidth: "strokeWidth",
16
+ TranslateX: "translateX",
17
+ TranslateY: "translateY",
18
+ Rotate: "rotate",
19
+ Scale: "scale",
20
+ ScaleX: "scaleX",
21
+ ScaleY: "scaleY",
22
+ PathDraw: "pathDraw",
23
+ ViewBox: "viewBox"
24
+ };
25
+ /** 缓动具名预设(与 CSS 同名);track / keyframe 亦可改用 cubic-bezier 四元组 */
26
+ var AnimationEasing = {
27
+ Linear: "linear",
28
+ Ease: "ease",
29
+ EaseIn: "ease-in",
30
+ EaseOut: "ease-out",
31
+ EaseInOut: "ease-in-out"
32
+ };
33
+ /** 每次迭代的播放方向(抄 WAAPI / CSS animation-direction) */
34
+ var AnimationDirection = {
35
+ Normal: "normal",
36
+ Reverse: "reverse",
37
+ Alternate: "alternate",
38
+ AlternateReverse: "alternate-reverse"
39
+ };
40
+ /** 活动区间外取值(抄 WAAPI / CSS animation-fill-mode) */
41
+ var AnimationFill = {
42
+ None: "none",
43
+ Forwards: "forwards",
44
+ Backwards: "backwards",
45
+ Both: "both"
46
+ };
47
+ var EasingSchema = zod.z.union([zod.z.string().min(1), zod.z.tuple([
48
+ zod.z.number().finite(),
49
+ zod.z.number().finite(),
50
+ zod.z.number().finite(),
51
+ zod.z.number().finite()
52
+ ])]).describe("Easing: a named preset (built-in linear / ease / ease-in / ease-out / ease-in-out, or a custom name resolved by a renderer-registered easing) or a cubic-bezier control-point tuple [x1, y1, x2, y2]. Defaults to linear when omitted.");
53
+ var KeyframeSchema = zod.z.object({
54
+ at: zod.z.number().min(0).max(1).describe("Normalized keyframe time in [0, 1] (WAAPI offset, decoupled from duration). Keyframes within a track must be sorted ascending by `at`."),
55
+ value: require_json.JsonValueSchema.describe("Keyframe value (any JSON value). For built-in properties it is narrowed by the track-level refinement: a finite number (opacity / scale / rotate / translateX|Y / strokeWidth / pathDraw 0..1), a color string (fill / stroke, interpolated in oklch), or a 4-number array [x, y, w, h] (viewBox). Custom (non-built-in) properties accept any JSON value, interpreted by a renderer-registered interpolator."),
56
+ easing: EasingSchema.optional().describe("Per-segment easing from this keyframe to the next; overrides the track-level easing.")
57
+ }).describe("A single animation keyframe: a value at a normalized time, with optional per-segment easing.");
58
+ /** 播放触发器关键字(runtime 落地;DrawWay 风格 const + 派生类型,与其它 Animation 枚举单一真源一致) */
59
+ var AnimationTrigger = {
60
+ Load: "load",
61
+ Visible: "visible",
62
+ Manual: "manual"
63
+ };
64
+ var TriggerSchema = zod.z.union([zod.z.nativeEnum(AnimationTrigger), zod.z.object({ onEvent: zod.z.string().min(1).describe("Event name (e.g. \"click\") the runtime binds to start playback; the handler function never enters the IR.") })]).describe("When playback starts: \"load\" (on render, SSR-friendly) / \"visible\" (runtime IntersectionObserver) / \"manual\" (runtime API) / { onEvent } (bridge to hydration; only the event name is stored, never a callback). Defaults to \"load\".");
65
+ var OriginSchema = zod.z.union([zod.z.string().min(1).describe("Named transform pivot reusing the node anchor vocabulary (center / north / south / east / west / north-east / ... / south-west), resolved against the element boundary by the renderer."), zod.z.tuple([zod.z.number().finite(), zod.z.number().finite()]).describe("Explicit pivot in the element local coordinate space [x, y].")]).describe("Transform pivot for scale / scaleX / scaleY / rotate channels: a named anchor or an explicit local-space point. Ignored by non-transform channels. Defaults to the element geometric center.");
66
+ var AnimationTrackSchema = zod.z.object({
67
+ property: zod.z.string().min(1).describe("Renderer-agnostic animated channel. Built-in: opacity / fill / stroke / strokeWidth / translateX / translateY / rotate / scale (uniform) / scaleX / scaleY (non-uniform) / pathDraw (0..1 reveal) / viewBox (scene-root camera only). Any other string is a custom channel that passes through to a renderer-registered interpolator. `viewBox` is valid only at the scene root (enforced at compile)."),
68
+ keyframes: zod.z.array(KeyframeSchema).min(1).refine((frames) => frames.every((frame, index) => index === 0 || frame.at >= frames[index - 1].at), { message: "keyframes must be sorted ascending by `at`" }).describe("Ordered keyframes (at least one), sorted ascending by `at` within [0, 1]. Each keyframe gives the absolute display value at that time (NOT a delta on top of the base). By convention the final keyframe equals the element base (settled) state, so ignoring the animation renders the complete base figure."),
69
+ duration: zod.z.number().finite().positive().describe("One-iteration duration in milliseconds (> 0)."),
70
+ delay: zod.z.number().finite().nonnegative().optional().describe("Delay before the first iteration, in milliseconds (>= 0). Group-level stagger is compiled by sugar into per-track delays."),
71
+ easing: EasingSchema.optional().describe("Track-level easing applied to each segment that lacks its own keyframe easing. Defaults to linear."),
72
+ iterations: zod.z.union([zod.z.number().finite().positive(), zod.z.literal("infinite")]).optional().describe("Total play count (WAAPI iterations): a positive number (may be fractional) or \"infinite\". Omitted = 1 = play once."),
73
+ direction: zod.z.nativeEnum(AnimationDirection).optional().describe("Per-iteration playback direction (WAAPI / CSS animation-direction). Defaults to \"normal\"."),
74
+ fill: zod.z.nativeEnum(AnimationFill).optional().describe("Value held outside the active interval (WAAPI / CSS fill-mode). Defaults to \"forwards\" so the element settles at its base (end) state, matching the static-settled invariant."),
75
+ trigger: TriggerSchema.optional().describe("Playback trigger; defaults to \"load\"."),
76
+ origin: OriginSchema.optional().describe("Transform pivot for scale / scaleX / scaleY / rotate channels; ignored by other channels. Defaults to the element geometric center.")
77
+ }).superRefine((track, ctx) => {
78
+ const numeric = new Set([
79
+ AnimationProperty.Opacity,
80
+ AnimationProperty.StrokeWidth,
81
+ AnimationProperty.TranslateX,
82
+ AnimationProperty.TranslateY,
83
+ AnimationProperty.Rotate,
84
+ AnimationProperty.Scale,
85
+ AnimationProperty.ScaleX,
86
+ AnimationProperty.ScaleY,
87
+ AnimationProperty.PathDraw
88
+ ]);
89
+ track.keyframes.forEach((frame, index) => {
90
+ const value = frame.value;
91
+ const path = [
92
+ "keyframes",
93
+ index,
94
+ "value"
95
+ ];
96
+ if (track.property === AnimationProperty.ViewBox) {
97
+ if (!Array.isArray(value) || value.length !== 4) ctx.addIssue({
98
+ code: zod.z.ZodIssueCode.custom,
99
+ path,
100
+ message: "viewBox keyframe value must be a 4-number array [x, y, w, h]"
101
+ });
102
+ } else if (track.property === AnimationProperty.Fill || track.property === AnimationProperty.Stroke) {
103
+ if (typeof value !== "string") ctx.addIssue({
104
+ code: zod.z.ZodIssueCode.custom,
105
+ path,
106
+ message: `${track.property} keyframe value must be a color string`
107
+ });
108
+ } else if (numeric.has(track.property)) {
109
+ if (typeof value !== "number") ctx.addIssue({
110
+ code: zod.z.ZodIssueCode.custom,
111
+ path,
112
+ message: `${track.property} keyframe value must be a number`
113
+ });
114
+ }
115
+ });
116
+ }).describe("A declarative timeline animation track on a single renderer-agnostic property: keyframes over normalized time plus WAAPI-style timing options. The `property` is open (built-in channels or a custom name resolved by a renderer-registered interpolator). Fully JSON-serializable (no functions); playback control and callbacks live in the runtime, not the IR. Renderers that cannot animate render the static settled state and emit a diagnosable warning.");
117
+ //#endregion
118
+ exports.AnimationDirection = AnimationDirection;
119
+ exports.AnimationEasing = AnimationEasing;
120
+ exports.AnimationFill = AnimationFill;
121
+ exports.AnimationProperty = AnimationProperty;
122
+ exports.AnimationTrackSchema = AnimationTrackSchema;
123
+ exports.AnimationTrigger = AnimationTrigger;
124
+ exports.EasingSchema = EasingSchema;
125
+ exports.KeyframeSchema = KeyframeSchema;
126
+ exports.OriginSchema = OriginSchema;
127
+ exports.TriggerSchema = TriggerSchema;
@@ -0,0 +1,218 @@
1
+ import { z } from 'zod';
2
+ import { ValueOf } from '../types';
3
+ /**
4
+ * 可动画属性通道(renderer 无关;DrawWay 风格 const + 派生类型,裸字面量 'opacity' 仍第一形态)
5
+ * @description `viewBox` 仅在 scene 根合法(镜头),元素级 viewBox track 由 compile / render 拒;
6
+ * `pathDraw` 是 0..1 路径画出进度;`scaleX` / `scaleY` 是非均匀缩放(柱状图从基线长出等),`scale` 是均匀缩放;
7
+ * transform 通道(scale / scaleX / scaleY / rotate)的支点见 track 级 `origin`,缺省几何中心。
8
+ * 各后端按通道翻译:SVG WAAPI/CSS、Canvas rAF 几何 lerp。
9
+ */
10
+ export declare const AnimationProperty: {
11
+ readonly Opacity: "opacity";
12
+ readonly Fill: "fill";
13
+ readonly Stroke: "stroke";
14
+ readonly StrokeWidth: "strokeWidth";
15
+ readonly TranslateX: "translateX";
16
+ readonly TranslateY: "translateY";
17
+ readonly Rotate: "rotate";
18
+ readonly Scale: "scale";
19
+ readonly ScaleX: "scaleX";
20
+ readonly ScaleY: "scaleY";
21
+ readonly PathDraw: "pathDraw";
22
+ readonly ViewBox: "viewBox";
23
+ };
24
+ /** 内置可动画属性通道名联合 */
25
+ export type BuiltinAnimationProperty = ValueOf<typeof AnimationProperty>;
26
+ /** 属性名:内置 ∪ 任意自定义字符串(`& {}` 保内置自动补全,同 NodeShape 范式);自定义通道由后续 renderer 注册的插值器解释 */
27
+ export type AnimationPropertyRef = BuiltinAnimationProperty | (string & {});
28
+ /** 缓动具名预设(与 CSS 同名);track / keyframe 亦可改用 cubic-bezier 四元组 */
29
+ export declare const AnimationEasing: {
30
+ readonly Linear: "linear";
31
+ readonly Ease: "ease";
32
+ readonly EaseIn: "ease-in";
33
+ readonly EaseOut: "ease-out";
34
+ readonly EaseInOut: "ease-in-out";
35
+ };
36
+ /** 缓动预设名联合 */
37
+ export type AnimationEasingName = ValueOf<typeof AnimationEasing>;
38
+ /** 每次迭代的播放方向(抄 WAAPI / CSS animation-direction) */
39
+ export declare const AnimationDirection: {
40
+ readonly Normal: "normal";
41
+ readonly Reverse: "reverse";
42
+ readonly Alternate: "alternate";
43
+ readonly AlternateReverse: "alternate-reverse";
44
+ };
45
+ /** 播放方向名联合 */
46
+ export type AnimationDirectionName = ValueOf<typeof AnimationDirection>;
47
+ /** 活动区间外取值(抄 WAAPI / CSS animation-fill-mode) */
48
+ export declare const AnimationFill: {
49
+ readonly None: "none";
50
+ readonly Forwards: "forwards";
51
+ readonly Backwards: "backwards";
52
+ readonly Both: "both";
53
+ };
54
+ /** 填充模式名联合 */
55
+ export type AnimationFillName = ValueOf<typeof AnimationFill>;
56
+ export declare const EasingSchema: z.ZodUnion<[z.ZodString, z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>]>;
57
+ export declare const KeyframeSchema: z.ZodObject<{
58
+ at: z.ZodNumber;
59
+ value: z.ZodType<import('./json').JsonValue, z.ZodTypeDef, import('./json').JsonValue>;
60
+ easing: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>]>>;
61
+ }, "strip", z.ZodTypeAny, {
62
+ value: import('./json').JsonValue;
63
+ at: number;
64
+ easing?: string | [number, number, number, number] | undefined;
65
+ }, {
66
+ value: import('./json').JsonValue;
67
+ at: number;
68
+ easing?: string | [number, number, number, number] | undefined;
69
+ }>;
70
+ /** 播放触发器关键字(runtime 落地;DrawWay 风格 const + 派生类型,与其它 Animation 枚举单一真源一致) */
71
+ export declare const AnimationTrigger: {
72
+ readonly Load: "load";
73
+ readonly Visible: "visible";
74
+ readonly Manual: "manual";
75
+ };
76
+ /** 触发器关键字联合(不含 { onEvent } 对象形态) */
77
+ export type AnimationTriggerName = ValueOf<typeof AnimationTrigger>;
78
+ export declare const TriggerSchema: z.ZodUnion<[z.ZodNativeEnum<{
79
+ readonly Load: "load";
80
+ readonly Visible: "visible";
81
+ readonly Manual: "manual";
82
+ }>, z.ZodObject<{
83
+ onEvent: z.ZodString;
84
+ }, "strip", z.ZodTypeAny, {
85
+ onEvent: string;
86
+ }, {
87
+ onEvent: string;
88
+ }>]>;
89
+ export declare const OriginSchema: z.ZodUnion<[z.ZodString, z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>]>;
90
+ export declare const AnimationTrackSchema: z.ZodEffects<z.ZodObject<{
91
+ property: z.ZodString;
92
+ keyframes: z.ZodEffects<z.ZodArray<z.ZodObject<{
93
+ at: z.ZodNumber;
94
+ value: z.ZodType<import('./json').JsonValue, z.ZodTypeDef, import('./json').JsonValue>;
95
+ easing: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>]>>;
96
+ }, "strip", z.ZodTypeAny, {
97
+ value: import('./json').JsonValue;
98
+ at: number;
99
+ easing?: string | [number, number, number, number] | undefined;
100
+ }, {
101
+ value: import('./json').JsonValue;
102
+ at: number;
103
+ easing?: string | [number, number, number, number] | undefined;
104
+ }>, "many">, {
105
+ value: import('./json').JsonValue;
106
+ at: number;
107
+ easing?: string | [number, number, number, number] | undefined;
108
+ }[], {
109
+ value: import('./json').JsonValue;
110
+ at: number;
111
+ easing?: string | [number, number, number, number] | undefined;
112
+ }[]>;
113
+ duration: z.ZodNumber;
114
+ delay: z.ZodOptional<z.ZodNumber>;
115
+ easing: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>]>>;
116
+ iterations: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodLiteral<"infinite">]>>;
117
+ direction: z.ZodOptional<z.ZodNativeEnum<{
118
+ readonly Normal: "normal";
119
+ readonly Reverse: "reverse";
120
+ readonly Alternate: "alternate";
121
+ readonly AlternateReverse: "alternate-reverse";
122
+ }>>;
123
+ fill: z.ZodOptional<z.ZodNativeEnum<{
124
+ readonly None: "none";
125
+ readonly Forwards: "forwards";
126
+ readonly Backwards: "backwards";
127
+ readonly Both: "both";
128
+ }>>;
129
+ trigger: z.ZodOptional<z.ZodUnion<[z.ZodNativeEnum<{
130
+ readonly Load: "load";
131
+ readonly Visible: "visible";
132
+ readonly Manual: "manual";
133
+ }>, z.ZodObject<{
134
+ onEvent: z.ZodString;
135
+ }, "strip", z.ZodTypeAny, {
136
+ onEvent: string;
137
+ }, {
138
+ onEvent: string;
139
+ }>]>>;
140
+ origin: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>]>>;
141
+ }, "strip", z.ZodTypeAny, {
142
+ property: string;
143
+ keyframes: {
144
+ value: import('./json').JsonValue;
145
+ at: number;
146
+ easing?: string | [number, number, number, number] | undefined;
147
+ }[];
148
+ duration: number;
149
+ fill?: "none" | "forwards" | "backwards" | "both" | undefined;
150
+ origin?: string | [number, number] | undefined;
151
+ direction?: "reverse" | "normal" | "alternate" | "alternate-reverse" | undefined;
152
+ easing?: string | [number, number, number, number] | undefined;
153
+ delay?: number | undefined;
154
+ iterations?: number | "infinite" | undefined;
155
+ trigger?: "load" | "visible" | "manual" | {
156
+ onEvent: string;
157
+ } | undefined;
158
+ }, {
159
+ property: string;
160
+ keyframes: {
161
+ value: import('./json').JsonValue;
162
+ at: number;
163
+ easing?: string | [number, number, number, number] | undefined;
164
+ }[];
165
+ duration: number;
166
+ fill?: "none" | "forwards" | "backwards" | "both" | undefined;
167
+ origin?: string | [number, number] | undefined;
168
+ direction?: "reverse" | "normal" | "alternate" | "alternate-reverse" | undefined;
169
+ easing?: string | [number, number, number, number] | undefined;
170
+ delay?: number | undefined;
171
+ iterations?: number | "infinite" | undefined;
172
+ trigger?: "load" | "visible" | "manual" | {
173
+ onEvent: string;
174
+ } | undefined;
175
+ }>, {
176
+ property: string;
177
+ keyframes: {
178
+ value: import('./json').JsonValue;
179
+ at: number;
180
+ easing?: string | [number, number, number, number] | undefined;
181
+ }[];
182
+ duration: number;
183
+ fill?: "none" | "forwards" | "backwards" | "both" | undefined;
184
+ origin?: string | [number, number] | undefined;
185
+ direction?: "reverse" | "normal" | "alternate" | "alternate-reverse" | undefined;
186
+ easing?: string | [number, number, number, number] | undefined;
187
+ delay?: number | undefined;
188
+ iterations?: number | "infinite" | undefined;
189
+ trigger?: "load" | "visible" | "manual" | {
190
+ onEvent: string;
191
+ } | undefined;
192
+ }, {
193
+ property: string;
194
+ keyframes: {
195
+ value: import('./json').JsonValue;
196
+ at: number;
197
+ easing?: string | [number, number, number, number] | undefined;
198
+ }[];
199
+ duration: number;
200
+ fill?: "none" | "forwards" | "backwards" | "both" | undefined;
201
+ origin?: string | [number, number] | undefined;
202
+ direction?: "reverse" | "normal" | "alternate" | "alternate-reverse" | undefined;
203
+ easing?: string | [number, number, number, number] | undefined;
204
+ delay?: number | undefined;
205
+ iterations?: number | "infinite" | undefined;
206
+ trigger?: "load" | "visible" | "manual" | {
207
+ onEvent: string;
208
+ } | undefined;
209
+ }>;
210
+ /** 时间轴动画 track(renderer 无关、JSON 可序列化、无函数;keyframe 给绝对展示值、末帧 = 元素 base 终态) */
211
+ export type IRAnimationTrack = z.infer<typeof AnimationTrackSchema>;
212
+ /** 单个动画关键帧 */
213
+ export type IRKeyframe = z.infer<typeof KeyframeSchema>;
214
+ /** transform 支点(命名 anchor ∪ 局部坐标点;scale / scaleX / scaleY / rotate 用,缺省几何中心) */
215
+ export type IRAnimationOrigin = z.infer<typeof OriginSchema>;
216
+ /** 动画播放触发器(load / visible / manual / { onEvent }) */
217
+ export type IRAnimationTrigger = z.infer<typeof TriggerSchema>;
218
+ //# sourceMappingURL=animation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"animation.d.ts","sourceRoot":"","sources":["../../../src/ir/animation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAGxC;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;CAapB,CAAC;AACX,mBAAmB;AACnB,MAAM,MAAM,wBAAwB,GAAG,OAAO,CAAC,OAAO,iBAAiB,CAAC,CAAC;AACzE,kFAAkF;AAClF,MAAM,MAAM,oBAAoB,GAAG,wBAAwB,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAE5E,8DAA8D;AAC9D,eAAO,MAAM,eAAe;;;;;;CAMlB,CAAC;AACX,cAAc;AACd,MAAM,MAAM,mBAAmB,GAAG,OAAO,CAAC,OAAO,eAAe,CAAC,CAAC;AAElE,mDAAmD;AACnD,eAAO,MAAM,kBAAkB;;;;;CAKrB,CAAC;AACX,cAAc;AACd,MAAM,MAAM,sBAAsB,GAAG,OAAO,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAExE,iDAAiD;AACjD,eAAO,MAAM,aAAa;;;;;CAKhB,CAAC;AACX,cAAc;AACd,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC,OAAO,aAAa,CAAC,CAAC;AAE9D,eAAO,MAAM,YAAY,mGAOtB,CAAC;AAEJ,eAAO,MAAM,cAAc;;;;;;;;;;;;EAgBgF,CAAC;AAE5G,0EAA0E;AAC1E,eAAO,MAAM,gBAAgB;;;;CAAkE,CAAC;AAChG,oCAAoC;AACpC,MAAM,MAAM,oBAAoB,GAAG,OAAO,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAEpE,eAAO,MAAM,aAAa;;;;;;;;;;IAYvB,CAAC;AAEJ,eAAO,MAAM,YAAY,yEActB,CAAC;AAEJ,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmF9B,CAAC;AAEJ,6EAA6E;AAC7E,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AACpE,cAAc;AACd,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AACxD,gFAAgF;AAChF,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAC7D,qDAAqD;AACrD,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC"}
@@ -0,0 +1,15 @@
1
+ const require_shape = require("./shape.cjs");
2
+ let zod = require("zod");
3
+ //#region src/ir/boundary.ts
4
+ /** 连接面引用:保留字 'shape'/'circle' 或借用已注册 shape(裸名 / {type, params}) */
5
+ var BoundarySchema = zod.z.union([zod.z.string().min(1), require_shape.ShapeRefSchema]).describe("Connection surface: how edges meet this node and how compass anchors resolve, independent of the visual `shape`. Reserved keywords: \"shape\" (default — the node's own visual shape) and \"circle\" (true circle, radius = larger AABB half-axis). Any other registered shape name (\"rectangle\" / \"ellipse\" / \"polygon\" / …) or `{ type, params }` borrows that shape's boundary over this node's bounding box. Layout-neutral: never changes the node footprint. Named shape-specific anchors and edge proportional points always resolve against the visual shape.");
6
+ /** 连接面保留关键字:非「借用已注册 shape」的两个内置语义(编译期消解) */
7
+ var Boundary = {
8
+ /** 连接面 = 节点自身视觉形状(默认) */
9
+ Self: "shape",
10
+ /** 真圆:半径 = 节点 AABB 较长半轴 max(halfWidth, halfHeight) */
11
+ Circle: "circle"
12
+ };
13
+ //#endregion
14
+ exports.Boundary = Boundary;
15
+ exports.BoundarySchema = BoundarySchema;
@@ -0,0 +1,25 @@
1
+ import { z } from 'zod';
2
+ import { ValueOf } from '../types';
3
+ /** 连接面引用:保留字 'shape'/'circle' 或借用已注册 shape(裸名 / {type, params}) */
4
+ export declare const BoundarySchema: z.ZodUnion<[z.ZodString, z.ZodObject<{
5
+ type: z.ZodString;
6
+ params: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodType<import('./json').JsonValue, z.ZodTypeDef, import('./json').JsonValue>>>;
7
+ }, "strip", z.ZodTypeAny, {
8
+ type: string;
9
+ params?: Record<string, import('./json').JsonValue> | undefined;
10
+ }, {
11
+ type: string;
12
+ params?: Record<string, import('./json').JsonValue> | undefined;
13
+ }>]>;
14
+ /** 连接面引用类型('shape' | 'circle' | 其它 shape 名 | {type, params}) */
15
+ export type IRBoundary = z.infer<typeof BoundarySchema>;
16
+ /** 连接面保留关键字:非「借用已注册 shape」的两个内置语义(编译期消解) */
17
+ export declare const Boundary: {
18
+ /** 连接面 = 节点自身视觉形状(默认) */
19
+ readonly Self: "shape";
20
+ /** 真圆:半径 = 节点 AABB 较长半轴 max(halfWidth, halfHeight) */
21
+ readonly Circle: "circle";
22
+ };
23
+ /** 连接面保留关键字联合('shape' | 'circle';其余取值为借用的 shape 引用) */
24
+ export type BoundaryKeyword = ValueOf<typeof Boundary>;
25
+ //# sourceMappingURL=boundary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boundary.d.ts","sourceRoot":"","sources":["../../../src/ir/boundary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAGxC,mEAAmE;AACnE,eAAO,MAAM,cAAc;;;;;;;;;IAIxB,CAAC;AAEJ,gEAAgE;AAChE,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAExD,4CAA4C;AAC5C,eAAO,MAAM,QAAQ;IACnB,yBAAyB;;IAEzB,sDAAsD;;CAE9C,CAAC;AAEX,uDAAuD;AACvD,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,OAAO,QAAQ,CAAC,CAAC"}
@@ -1,10 +1,13 @@
1
1
  export * from './position';
2
2
  export * from './font';
3
3
  export * from './json';
4
+ export * from './animation';
4
5
  export * from './paint';
5
6
  export * from './clip';
6
7
  export * from './text';
7
8
  export * from './path';
9
+ export * from './shape';
10
+ export * from './boundary';
8
11
  export * from './node';
9
12
  export * from './coordinate';
10
13
  export * from './transform';
@@ -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,SAAS,CAAC;AACxB,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,aAAa,CAAC;AAC5B,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,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC"}
@@ -2,15 +2,19 @@ const require_position = require("./position/position.cjs");
2
2
  const require_polar_position = require("./position/polar-position.cjs");
3
3
  const require_at_position = require("./position/at-position.cjs");
4
4
  const require_offset_position = require("./position/offset-position.cjs");
5
+ const require_json = require("./json.cjs");
6
+ const require_shape = require("./shape.cjs");
7
+ const require_boundary = require("./boundary.cjs");
5
8
  const require_between_position = require("./position/between-position.cjs");
6
9
  const require_font = require("./font.cjs");
10
+ const require_animation = require("./animation.cjs");
7
11
  const require_paint = require("./paint.cjs");
8
12
  const require_text = require("./text.cjs");
9
13
  let zod = require("zod");
10
14
  //#region src/ir/node.ts
11
15
  /**
12
16
  * 节点形状常量(用 const + ValueOf 派生,不用 TS enum)
13
- * @description rectangle 默认;circle/ellipse/diamond 几何语义:node 视觉边界包"text 矩形 + padding";rectangle: 视觉=text;circle: r=√(innerHalfW²+innerHalfH²);ellipse: rx=innerHalfW×√2,ry=innerHalfH×√2;diamond: halfA=2×innerHalfW,halfB=2×innerHalfH
17
+ * @description rectangle 默认;几何语义:node 视觉边界包"text 矩形 + padding";rectangle: 视觉=text;ellipse: rx=innerHalfW×√2,ry=innerHalfH×√2。circle 是 ellipse 等轴 preset 别名(`{ type:'ellipse', params:{ circumscribe:'equal' } }`,两轴 = 内框对角线半长 √(innerHalfW²+innerHalfH²));diamond 是 polygon 4 边形 45° preset 别名(`{ type:'polygon', params:{ sides:4, rotate:45 } }`)——circle / diamond 均保留为合法 shape 名向后兼容,编译期分别消解为 ellipse / polygon,不进 shape 注册表
14
18
  */
15
19
  var NODE_SHAPES = {
16
20
  rectangle: "rectangle",
@@ -50,7 +54,10 @@ var NodeLabelSchema = zod.z.object({
50
54
  var NodeSchema = zod.z.object({
51
55
  type: zod.z.literal("node").describe("Discriminator marking this child as a node"),
52
56
  id: zod.z.string().min(1).optional().describe("Optional unique id; required if any path needs to reference this node by string"),
53
- shape: zod.z.string().min(1).optional().describe("Node visual shape name; built-in `rectangle` / `circle` / `ellipse` / `diamond`, or an extension shape registered via `CompileOptions.shapes`. Any non-empty string passes schema validation; unregistered names are rejected at compile time. Defaults to `rectangle`. The boundary fully contains text + padding (circumscribed for circle / ellipse / diamond)."),
57
+ shape: zod.z.union([zod.z.string().min(1), require_shape.ShapeRefSchema]).optional().describe("Node visual shape: a bare name string (parameterless, e.g. \"rectangle\") or `{ type, params }` carrying a JSON params object (e.g. `{ type:\"sector\", params:{ innerRadius, outerRadius, startAngle, endAngle } }`). Built-in or registered via CompileOptions.shapes; unregistered type rejected at compile time. Defaults to \"rectangle\"."),
58
+ boundary: require_boundary.BoundarySchema.optional().describe("Default connection surface for edges meeting this node (see BoundarySchema). Defaults to \"shape\" (use the visual shape). Per-edge overridable via the edge endpoint `boundary` field."),
59
+ meta: require_json.JsonObjectSchema.optional().describe("Opaque provenance metadata carried by this element (e.g. a Tier 2 lowering tagging which datum / series / layer it came from). Provenance passthrough: preserved verbatim into the Scene primitive(s) this element emits, ignored by renderers, and never interpreted by the compiler — it does not affect layout, connection, style, or bounding box. Must be a JSON object (fully serializable). Not inherited across scopes; not part of the every-X style defaults."),
60
+ animations: zod.z.array(require_animation.AnimationTrackSchema).optional().describe("Declarative timeline animation tracks for this element (fadeIn / drawOn / pulse / …). Each track animates one renderer-agnostic property over normalized time; the element base value is the settled (animation-end) state. Carried verbatim into the Scene primitive(s) this element emits; renderers play them or, when unable, render the static settled state with a diagnosable warning. Does not affect layout / bounding box (animations may transiently overflow). Not inherited across scopes; not part of the every-X style defaults."),
54
61
  position: zod.z.union([
55
62
  require_position.PositionSchema,
56
63
  require_polar_position.PolarPositionSchema,
@@ -72,7 +79,7 @@ var NodeSchema = zod.z.object({
72
79
  dashed: zod.z.boolean().optional().describe("Border style preset: dashed line (TikZ `dashed`); compiled to a default dash pattern. `dashArray` takes precedence."),
73
80
  dotted: zod.z.boolean().optional().describe("Border style preset: dotted line (TikZ `dotted`); compiled to a default dot pattern. `dashArray` and `dashed` take precedence."),
74
81
  dashArray: zod.z.array(zod.z.number().finite().nonnegative()).min(1).optional().describe("Explicit stroke dash pattern lengths in user units (e.g. [4, 2]); overrides `dashed` / `dotted`."),
75
- roundedCorners: zod.z.number().nonnegative().optional().describe("Corner radius in user units; only effective on `rectangle` shape."),
82
+ cornerRadius: zod.z.number().nonnegative().optional().describe("Migration-period top-level corner radius in user units; only effective on `rectangle` shape. Prefer the shape params form `{ type: \"rectangle\", params: { cornerRadius } }`."),
76
83
  minimumWidth: zod.z.number().nonnegative().optional().describe("Minimum visual border width in user units; floors the bounding box width."),
77
84
  minimumHeight: zod.z.number().nonnegative().optional().describe("Minimum visual border height in user units; floors the bounding box height."),
78
85
  minimumSize: zod.z.number().nonnegative().optional().describe("Symmetric alias for `minimumWidth` + `minimumHeight`; axis-specific fields take precedence."),