@nice2dev/ui-graphics 1.3.15 → 1.3.17

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 (294) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/cjs/animation/AnimatedPerson.js +470 -143
  3. package/dist/cjs/animation/AnimationEditor.js +289 -101
  4. package/dist/cjs/animation/Audience.js +83 -61
  5. package/dist/cjs/animation/BodyRenderer.js +69 -28
  6. package/dist/cjs/animation/animationHelper.js +281 -288
  7. package/dist/cjs/animation/characterTypes.js +200 -203
  8. package/dist/cjs/animation/choreoDSL.js +205 -219
  9. package/dist/cjs/animation/choreography.js +4 -32
  10. package/dist/cjs/animation/karaokeIntegration.js +68 -77
  11. package/dist/cjs/animation/lottieExport.js +108 -114
  12. package/dist/cjs/animation/motionPath.js +225 -248
  13. package/dist/cjs/animation/physics.js +227 -254
  14. package/dist/cjs/animation/rig/RigPlayer.js +53 -56
  15. package/dist/cjs/animation/rig/RiggedBody.js +71 -26
  16. package/dist/cjs/animation/rig/choreoRigBridge.js +72 -77
  17. package/dist/cjs/animation/rig/ik.js +13 -18
  18. package/dist/cjs/animation/rig/poseOps.js +34 -41
  19. package/dist/cjs/animation/rig/presets.js +64 -72
  20. package/dist/cjs/animation/rig/rigMath.js +25 -32
  21. package/dist/cjs/animation/rig/rigTypes.js +59 -63
  22. package/dist/cjs/animation/shapes/arms.js +31 -13
  23. package/dist/cjs/animation/shapes/eyes.js +129 -47
  24. package/dist/cjs/animation/shapes/hair.js +72 -45
  25. package/dist/cjs/animation/shapes/heads.js +131 -57
  26. package/dist/cjs/animation/shapes/headwear.js +47 -38
  27. package/dist/cjs/animation/shapes/legs.js +31 -13
  28. package/dist/cjs/animation/shapes/mouths.js +120 -44
  29. package/dist/cjs/animation/shapes/noses.js +80 -25
  30. package/dist/cjs/animation/shapes/outfits.js +101 -39
  31. package/dist/cjs/animation/shapes/torsos.js +15 -11
  32. package/dist/cjs/animation/spineExport.js +103 -121
  33. package/dist/cjs/core/LocalUI.js +108 -43
  34. package/dist/cjs/core/NiceBrushEngine.js +758 -552
  35. package/dist/cjs/core/collaboration.js +249 -251
  36. package/dist/cjs/core/colorBlindness.js +100 -115
  37. package/dist/cjs/core/dragDrop.js +155 -158
  38. package/dist/cjs/core/editorAsk.js +51 -41
  39. package/dist/cjs/core/fixes.js +140 -171
  40. package/dist/cjs/core/gridGuides.js +166 -201
  41. package/dist/cjs/core/historyVisual.js +156 -135
  42. package/dist/cjs/core/i18n.js +13 -14
  43. package/dist/cjs/core/integrations.js +238 -249
  44. package/dist/cjs/core/minimap.js +149 -151
  45. package/dist/cjs/core/plugins.js +98 -113
  46. package/dist/cjs/core/rtl.js +71 -83
  47. package/dist/cjs/core/shortcuts.js +196 -225
  48. package/dist/cjs/core/theme.js +142 -149
  49. package/dist/cjs/core/yjsCollaboration.js +232 -293
  50. package/dist/cjs/design/design-tools.js +12 -22
  51. package/dist/cjs/font/NiceFontEditor.js +877 -316
  52. package/dist/cjs/font/fontFormatUtils.js +388 -448
  53. package/dist/cjs/game/GameAsset2dEditor.js +1201 -392
  54. package/dist/cjs/game/GameAsset2dEditor.module.css.js +146 -5
  55. package/dist/cjs/game/gameAssetTypes.js +7 -16
  56. package/dist/cjs/game/gameAssetUtils.js +390 -413
  57. package/dist/cjs/game/useGameAssetEditor.js +820 -763
  58. package/dist/cjs/index.js +81 -84
  59. package/dist/cjs/nice2dev-ui-graphics.css +1 -1
  60. package/dist/cjs/node_modules/lib0/array.js +8 -70
  61. package/dist/cjs/node_modules/lib0/binary.js +3 -20
  62. package/dist/cjs/node_modules/lib0/broadcastchannel.js +24 -86
  63. package/dist/cjs/node_modules/lib0/buffer.js +15 -82
  64. package/dist/cjs/node_modules/lib0/conditions.js +3 -16
  65. package/dist/cjs/node_modules/lib0/decoding.js +108 -287
  66. package/dist/cjs/node_modules/lib0/dom.js +14 -44
  67. package/dist/cjs/node_modules/lib0/encoding.js +68 -418
  68. package/dist/cjs/node_modules/lib0/environment.js +26 -92
  69. package/dist/cjs/node_modules/lib0/error.js +5 -29
  70. package/dist/cjs/node_modules/lib0/function.js +27 -66
  71. package/dist/cjs/node_modules/lib0/iterator.js +8 -33
  72. package/dist/cjs/node_modules/lib0/logging.common.js +12 -22
  73. package/dist/cjs/node_modules/lib0/logging.js +32 -71
  74. package/dist/cjs/node_modules/lib0/map.js +16 -86
  75. package/dist/cjs/node_modules/lib0/math.js +3 -32
  76. package/dist/cjs/node_modules/lib0/number.js +4 -15
  77. package/dist/cjs/node_modules/lib0/object.js +14 -88
  78. package/dist/cjs/node_modules/lib0/observable.js +38 -78
  79. package/dist/cjs/node_modules/lib0/pair.js +3 -20
  80. package/dist/cjs/node_modules/lib0/prng.js +8 -77
  81. package/dist/cjs/node_modules/lib0/promise.js +6 -30
  82. package/dist/cjs/node_modules/lib0/random.js +8 -23
  83. package/dist/cjs/node_modules/lib0/schema.js +313 -687
  84. package/dist/cjs/node_modules/lib0/set.js +3 -10
  85. package/dist/cjs/node_modules/lib0/storage.js +20 -55
  86. package/dist/cjs/node_modules/lib0/string.js +17 -72
  87. package/dist/cjs/node_modules/lib0/symbol.js +2 -12
  88. package/dist/cjs/node_modules/lib0/time.js +2 -15
  89. package/dist/cjs/node_modules/lib0/trait/equality.js +3 -28
  90. package/dist/cjs/node_modules/lib0/url.js +4 -18
  91. package/dist/cjs/node_modules/lib0/webcrypto.js +2 -5
  92. package/dist/cjs/node_modules/y-protocols/auth.js +5 -19
  93. package/dist/cjs/node_modules/y-protocols/awareness.js +53 -116
  94. package/dist/cjs/node_modules/y-protocols/sync.js +16 -103
  95. package/dist/cjs/node_modules/y-websocket/src/y-websocket.js +77 -219
  96. package/dist/cjs/node_modules/yjs/dist/yjs.js +2128 -4868
  97. package/dist/cjs/photo/FilterThumb.js +37 -25
  98. package/dist/cjs/photo/NiceAITools.js +679 -467
  99. package/dist/cjs/photo/PhotoEditor.js +34 -20
  100. package/dist/cjs/photo/PhotoEditor.module.css.js +296 -5
  101. package/dist/cjs/photo/PhotoEditorCanvas.js +250 -91
  102. package/dist/cjs/photo/PhotoEditorLeftPanel.js +1086 -224
  103. package/dist/cjs/photo/PhotoEditorToolbar.js +135 -19
  104. package/dist/cjs/photo/photoEditorActions.js +89 -72
  105. package/dist/cjs/photo/photoEditorTypes.js +29 -32
  106. package/dist/cjs/photo/photoFilters.js +959 -985
  107. package/dist/cjs/photo/photoOverlays.js +899 -945
  108. package/dist/cjs/photo/photoSelection.js +427 -499
  109. package/dist/cjs/photo/usePhotoEditor.js +739 -741
  110. package/dist/cjs/pixel/HSVPicker.js +191 -175
  111. package/dist/cjs/pixel/PixelEditor.js +159 -48
  112. package/dist/cjs/pixel/PixelEditor.module.css.js +209 -5
  113. package/dist/cjs/pixel/PixelEditorCanvas.js +29 -16
  114. package/dist/cjs/pixel/PixelEditorMenuBar.js +160 -162
  115. package/dist/cjs/pixel/PixelEditorRightPanel.js +377 -45
  116. package/dist/cjs/pixel/PixelEditorStatusBar.js +47 -20
  117. package/dist/cjs/pixel/PixelEditorTimeline.js +106 -23
  118. package/dist/cjs/pixel/PixelEditorToolbar.js +99 -21
  119. package/dist/cjs/pixel/SpriteGeneratorPanel.js +483 -303
  120. package/dist/cjs/pixel/animalGeneratorPresets.js +776 -601
  121. package/dist/cjs/pixel/asepriteFormat.js +511 -560
  122. package/dist/cjs/pixel/buildingGeneratorPresets.js +693 -520
  123. package/dist/cjs/pixel/characterGeneratorPresets.js +644 -544
  124. package/dist/cjs/pixel/pixel-pro.js +52 -63
  125. package/dist/cjs/pixel/pixelEditorExports.js +388 -428
  126. package/dist/cjs/pixel/pixelEditorTypes.js +91 -108
  127. package/dist/cjs/pixel/pixelEditorUtils.js +519 -561
  128. package/dist/cjs/pixel/spriteGeneratorCore.js +206 -257
  129. package/dist/cjs/pixel/usePixelEditor.js +1321 -1343
  130. package/dist/cjs/texture/Nice3DTexturePainter.js +707 -440
  131. package/dist/cjs/ui/NiceUIDesigner.js +954 -527
  132. package/dist/cjs/vector/NiceSvgToCode.js +586 -446
  133. package/dist/cjs/vector/VectorEditor.js +290 -117
  134. package/dist/cjs/vector/VectorEditor.module.css.js +86 -5
  135. package/dist/cjs/vector/VectorEditorMenuBar.js +333 -275
  136. package/dist/cjs/vector/VectorEditorRightPanel.js +1094 -371
  137. package/dist/cjs/vector/VectorEditorShapeRenderer.js +198 -60
  138. package/dist/cjs/vector/VectorEditorStatusBar.js +39 -13
  139. package/dist/cjs/vector/useVectorEditor.js +848 -889
  140. package/dist/cjs/vector/vectorAnimation.js +110 -137
  141. package/dist/cjs/vector/vectorBooleanOps.js +398 -485
  142. package/dist/cjs/vector/vectorEditorExport.js +201 -203
  143. package/dist/cjs/vector/vectorEditorImport.js +173 -189
  144. package/dist/cjs/vector/vectorEditorTypes.js +42 -49
  145. package/dist/cjs/vector/vectorGradients.js +151 -174
  146. package/dist/cjs/vector/vectorIconExport.js +52 -59
  147. package/dist/cjs/vector/vectorIconImport.js +169 -219
  148. package/dist/esm/animation/AnimatedPerson.js +470 -141
  149. package/dist/esm/animation/AnimationEditor.js +290 -100
  150. package/dist/esm/animation/Audience.js +83 -59
  151. package/dist/esm/animation/BodyRenderer.js +71 -25
  152. package/dist/esm/animation/animationHelper.js +284 -287
  153. package/dist/esm/animation/characterTypes.js +204 -202
  154. package/dist/esm/animation/choreoDSL.js +212 -218
  155. package/dist/esm/animation/choreography.js +8 -31
  156. package/dist/esm/animation/karaokeIntegration.js +74 -76
  157. package/dist/esm/animation/lottieExport.js +112 -113
  158. package/dist/esm/animation/motionPath.js +235 -247
  159. package/dist/esm/animation/physics.js +235 -253
  160. package/dist/esm/animation/rig/RigPlayer.js +53 -54
  161. package/dist/esm/animation/rig/RiggedBody.js +71 -24
  162. package/dist/esm/animation/rig/choreoRigBridge.js +74 -76
  163. package/dist/esm/animation/rig/ik.js +14 -17
  164. package/dist/esm/animation/rig/poseOps.js +37 -40
  165. package/dist/esm/animation/rig/presets.js +70 -71
  166. package/dist/esm/animation/rig/rigMath.js +28 -31
  167. package/dist/esm/animation/rig/rigTypes.js +62 -62
  168. package/dist/esm/animation/shapes/arms.js +32 -12
  169. package/dist/esm/animation/shapes/eyes.js +135 -46
  170. package/dist/esm/animation/shapes/hair.js +80 -44
  171. package/dist/esm/animation/shapes/heads.js +140 -56
  172. package/dist/esm/animation/shapes/headwear.js +54 -37
  173. package/dist/esm/animation/shapes/legs.js +32 -12
  174. package/dist/esm/animation/shapes/mouths.js +127 -43
  175. package/dist/esm/animation/shapes/noses.js +87 -24
  176. package/dist/esm/animation/shapes/outfits.js +106 -38
  177. package/dist/esm/animation/shapes/torsos.js +16 -10
  178. package/dist/esm/animation/spineExport.js +106 -120
  179. package/dist/esm/core/LocalUI.js +111 -42
  180. package/dist/esm/core/NiceBrushEngine.js +761 -551
  181. package/dist/esm/core/collaboration.js +255 -250
  182. package/dist/esm/core/colorBlindness.js +106 -114
  183. package/dist/esm/core/dragDrop.js +157 -157
  184. package/dist/esm/core/editorAsk.js +53 -40
  185. package/dist/esm/core/fixes.js +145 -170
  186. package/dist/esm/core/gridGuides.js +178 -200
  187. package/dist/esm/core/historyVisual.js +158 -134
  188. package/dist/esm/core/i18n.js +15 -13
  189. package/dist/esm/core/integrations.js +244 -248
  190. package/dist/esm/core/minimap.js +151 -150
  191. package/dist/esm/core/plugins.js +102 -112
  192. package/dist/esm/core/rtl.js +77 -82
  193. package/dist/esm/core/shortcuts.js +200 -224
  194. package/dist/esm/core/theme.js +150 -148
  195. package/dist/esm/core/yjsCollaboration.js +240 -292
  196. package/dist/esm/design/design-tools.js +13 -21
  197. package/dist/esm/font/NiceFontEditor.js +880 -315
  198. package/dist/esm/font/fontFormatUtils.js +394 -447
  199. package/dist/esm/game/GameAsset2dEditor.js +1202 -391
  200. package/dist/esm/game/GameAsset2dEditor.module.css.js +146 -3
  201. package/dist/esm/game/gameAssetTypes.js +8 -15
  202. package/dist/esm/game/gameAssetUtils.js +408 -412
  203. package/dist/esm/game/useGameAssetEditor.js +821 -762
  204. package/dist/esm/index.js +332 -69
  205. package/dist/esm/nice2dev-ui-graphics.css +1 -1
  206. package/dist/esm/node_modules/lib0/array.js +15 -69
  207. package/dist/esm/node_modules/lib0/binary.js +14 -19
  208. package/dist/esm/node_modules/lib0/broadcastchannel.js +27 -85
  209. package/dist/esm/node_modules/lib0/buffer.js +20 -80
  210. package/dist/esm/node_modules/lib0/conditions.js +4 -15
  211. package/dist/esm/node_modules/lib0/decoding.js +128 -286
  212. package/dist/esm/node_modules/lib0/dom.js +20 -43
  213. package/dist/esm/node_modules/lib0/encoding.js +90 -415
  214. package/dist/esm/node_modules/lib0/environment.js +33 -91
  215. package/dist/esm/node_modules/lib0/error.js +8 -28
  216. package/dist/esm/node_modules/lib0/function.js +31 -65
  217. package/dist/esm/node_modules/lib0/iterator.js +11 -32
  218. package/dist/esm/node_modules/lib0/logging.common.js +22 -21
  219. package/dist/esm/node_modules/lib0/logging.js +44 -70
  220. package/dist/esm/node_modules/lib0/map.js +21 -85
  221. package/dist/esm/node_modules/lib0/math.js +9 -31
  222. package/dist/esm/node_modules/lib0/number.js +7 -14
  223. package/dist/esm/node_modules/lib0/object.js +26 -87
  224. package/dist/esm/node_modules/lib0/observable.js +40 -77
  225. package/dist/esm/node_modules/lib0/pair.js +5 -19
  226. package/dist/esm/node_modules/lib0/prng.js +15 -76
  227. package/dist/esm/node_modules/lib0/promise.js +7 -29
  228. package/dist/esm/node_modules/lib0/random.js +10 -22
  229. package/dist/esm/node_modules/lib0/schema.js +367 -686
  230. package/dist/esm/node_modules/lib0/set.js +4 -9
  231. package/dist/esm/node_modules/lib0/storage.js +23 -54
  232. package/dist/esm/node_modules/lib0/string.js +26 -71
  233. package/dist/esm/node_modules/lib0/symbol.js +3 -11
  234. package/dist/esm/node_modules/lib0/time.js +3 -14
  235. package/dist/esm/node_modules/lib0/trait/equality.js +5 -27
  236. package/dist/esm/node_modules/lib0/url.js +5 -17
  237. package/dist/esm/node_modules/lib0/webcrypto.js +3 -4
  238. package/dist/esm/node_modules/y-protocols/auth.js +7 -18
  239. package/dist/esm/node_modules/y-protocols/awareness.js +58 -115
  240. package/dist/esm/node_modules/y-protocols/sync.js +26 -102
  241. package/dist/esm/node_modules/y-websocket/src/y-websocket.js +82 -218
  242. package/dist/esm/node_modules/yjs/dist/yjs.js +2263 -4899
  243. package/dist/esm/photo/FilterThumb.js +37 -23
  244. package/dist/esm/photo/NiceAITools.js +685 -466
  245. package/dist/esm/photo/PhotoEditor.js +34 -18
  246. package/dist/esm/photo/PhotoEditor.module.css.js +296 -3
  247. package/dist/esm/photo/PhotoEditorCanvas.js +250 -89
  248. package/dist/esm/photo/PhotoEditorLeftPanel.js +1086 -222
  249. package/dist/esm/photo/PhotoEditorToolbar.js +135 -17
  250. package/dist/esm/photo/photoEditorActions.js +93 -71
  251. package/dist/esm/photo/photoEditorTypes.js +32 -31
  252. package/dist/esm/photo/photoFilters.js +967 -984
  253. package/dist/esm/photo/photoOverlays.js +913 -944
  254. package/dist/esm/photo/photoSelection.js +438 -498
  255. package/dist/esm/photo/usePhotoEditor.js +740 -740
  256. package/dist/esm/pixel/HSVPicker.js +192 -174
  257. package/dist/esm/pixel/PixelEditor.js +160 -47
  258. package/dist/esm/pixel/PixelEditor.module.css.js +209 -3
  259. package/dist/esm/pixel/PixelEditorCanvas.js +29 -14
  260. package/dist/esm/pixel/PixelEditorMenuBar.js +160 -160
  261. package/dist/esm/pixel/PixelEditorRightPanel.js +377 -43
  262. package/dist/esm/pixel/PixelEditorStatusBar.js +47 -18
  263. package/dist/esm/pixel/PixelEditorTimeline.js +106 -21
  264. package/dist/esm/pixel/PixelEditorToolbar.js +99 -19
  265. package/dist/esm/pixel/SpriteGeneratorPanel.js +483 -301
  266. package/dist/esm/pixel/animalGeneratorPresets.js +782 -600
  267. package/dist/esm/pixel/asepriteFormat.js +517 -559
  268. package/dist/esm/pixel/buildingGeneratorPresets.js +699 -519
  269. package/dist/esm/pixel/characterGeneratorPresets.js +650 -543
  270. package/dist/esm/pixel/pixel-pro.js +53 -62
  271. package/dist/esm/pixel/pixelEditorExports.js +397 -427
  272. package/dist/esm/pixel/pixelEditorTypes.js +103 -107
  273. package/dist/esm/pixel/pixelEditorUtils.js +551 -560
  274. package/dist/esm/pixel/spriteGeneratorCore.js +223 -256
  275. package/dist/esm/pixel/usePixelEditor.js +1322 -1342
  276. package/dist/esm/texture/Nice3DTexturePainter.js +709 -439
  277. package/dist/esm/ui/NiceUIDesigner.js +957 -526
  278. package/dist/esm/vector/NiceSvgToCode.js +589 -445
  279. package/dist/esm/vector/VectorEditor.js +291 -116
  280. package/dist/esm/vector/VectorEditor.module.css.js +86 -3
  281. package/dist/esm/vector/VectorEditorMenuBar.js +333 -273
  282. package/dist/esm/vector/VectorEditorRightPanel.js +1094 -369
  283. package/dist/esm/vector/VectorEditorShapeRenderer.js +199 -59
  284. package/dist/esm/vector/VectorEditorStatusBar.js +39 -11
  285. package/dist/esm/vector/useVectorEditor.js +849 -888
  286. package/dist/esm/vector/vectorAnimation.js +115 -136
  287. package/dist/esm/vector/vectorBooleanOps.js +401 -484
  288. package/dist/esm/vector/vectorEditorExport.js +207 -202
  289. package/dist/esm/vector/vectorEditorImport.js +174 -188
  290. package/dist/esm/vector/vectorEditorTypes.js +50 -48
  291. package/dist/esm/vector/vectorGradients.js +158 -173
  292. package/dist/esm/vector/vectorIconExport.js +53 -58
  293. package/dist/esm/vector/vectorIconImport.js +171 -218
  294. package/package.json +9 -15
@@ -1,283 +1,260 @@
1
- 'use strict';
2
-
3
- /**
4
- * motionPath.ts — Spline-based motion path editor for AnimationEditor.
5
- *
6
- * Cubic Bézier paths that can be evaluated at any t ∈ [0..1]
7
- * to drive bone position or object translation.
8
- */
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
9
3
  function createLinearPath(a, b, c, d) {
10
- var _a;
11
- let id;
12
- let from;
13
- let to;
14
- let name;
15
- if (typeof a === 'string') {
16
- id = a;
17
- from = b;
18
- to = c;
19
- name = d !== null && d !== void 0 ? d : 'Linear Path';
20
- }
21
- else {
22
- id = `linear-${Date.now()}`;
23
- from = a;
24
- to = b;
25
- name = (_a = c) !== null && _a !== void 0 ? _a : 'Linear Path';
26
- }
27
- return {
28
- id,
29
- name,
30
- closed: false,
31
- points: [
32
- { pos: from, cpIn: from, cpOut: lerp2(from, to, 1 / 3) },
33
- { pos: to, cpIn: lerp2(from, to, 2 / 3), cpOut: to },
34
- ],
35
- };
4
+ let id;
5
+ let from;
6
+ let to;
7
+ let name;
8
+ if (typeof a === "string") {
9
+ id = a;
10
+ from = b;
11
+ to = c;
12
+ name = d ?? "Linear Path";
13
+ } else {
14
+ id = `linear-${Date.now()}`;
15
+ from = a;
16
+ to = b;
17
+ name = c ?? "Linear Path";
18
+ }
19
+ return {
20
+ id,
21
+ name,
22
+ closed: false,
23
+ points: [
24
+ { pos: from, cpIn: from, cpOut: lerp2(from, to, 1 / 3) },
25
+ { pos: to, cpIn: lerp2(from, to, 2 / 3), cpOut: to }
26
+ ]
27
+ };
36
28
  }
37
29
  function createCircularPath(a, b, c, d, e) {
38
- var _a;
39
- let id;
40
- let cx;
41
- let cy;
42
- let radius;
43
- let name;
44
- if (typeof a === 'string') {
45
- id = a;
46
- cx = b;
47
- cy = c;
48
- radius = d;
49
- name = e !== null && e !== void 0 ? e : 'Circular Path';
30
+ let id;
31
+ let cx;
32
+ let cy;
33
+ let radius;
34
+ let name;
35
+ if (typeof a === "string") {
36
+ id = a;
37
+ cx = b;
38
+ cy = c;
39
+ radius = d;
40
+ name = e ?? "Circular Path";
41
+ } else {
42
+ id = `circular-${Date.now()}`;
43
+ cx = a.x;
44
+ cy = a.y;
45
+ radius = b;
46
+ name = c ?? "Circular Path";
47
+ }
48
+ const k = 0.5522847498;
49
+ const r = radius;
50
+ const points = [
51
+ {
52
+ pos: { x: cx + r, y: cy },
53
+ cpIn: { x: cx + r, y: cy - r * k },
54
+ cpOut: { x: cx + r, y: cy + r * k }
55
+ },
56
+ {
57
+ pos: { x: cx, y: cy + r },
58
+ cpIn: { x: cx + r * k, y: cy + r },
59
+ cpOut: { x: cx - r * k, y: cy + r }
60
+ },
61
+ {
62
+ pos: { x: cx - r, y: cy },
63
+ cpIn: { x: cx - r, y: cy + r * k },
64
+ cpOut: { x: cx - r, y: cy - r * k }
65
+ },
66
+ {
67
+ pos: { x: cx, y: cy - r },
68
+ cpIn: { x: cx - r * k, y: cy - r },
69
+ cpOut: { x: cx + r * k, y: cy - r }
50
70
  }
51
- else {
52
- id = `circular-${Date.now()}`;
53
- cx = a.x;
54
- cy = a.y;
55
- radius = b;
56
- name = (_a = c) !== null && _a !== void 0 ? _a : 'Circular Path';
57
- }
58
- // Approximate circle with 4 cubic Bézier segments
59
- const k = 0.5522847498; // (4/3)*tan(π/8)
60
- const r = radius;
61
- const points = [
62
- {
63
- pos: { x: cx + r, y: cy },
64
- cpIn: { x: cx + r, y: cy - r * k },
65
- cpOut: { x: cx + r, y: cy + r * k },
66
- },
67
- {
68
- pos: { x: cx, y: cy + r },
69
- cpIn: { x: cx + r * k, y: cy + r },
70
- cpOut: { x: cx - r * k, y: cy + r },
71
- },
72
- {
73
- pos: { x: cx - r, y: cy },
74
- cpIn: { x: cx - r, y: cy + r * k },
75
- cpOut: { x: cx - r, y: cy - r * k },
76
- },
77
- {
78
- pos: { x: cx, y: cy - r },
79
- cpIn: { x: cx - r * k, y: cy - r },
80
- cpOut: { x: cx + r * k, y: cy - r },
81
- },
82
- ];
83
- return { id, name, points, closed: true };
71
+ ];
72
+ return { id, name, points, closed: true };
84
73
  }
85
74
  function createFigure8Path(a, b, c, d, e, f) {
86
- var _a;
87
- let id;
88
- let cx;
89
- let cy;
90
- let width;
91
- let height;
92
- let name;
93
- if (typeof a === 'string') {
94
- id = a;
95
- cx = b;
96
- cy = c;
97
- width = d;
98
- height = e;
99
- name = f !== null && f !== void 0 ? f : 'Figure-8 Path';
100
- }
101
- else {
102
- id = `figure8-${Date.now()}`;
103
- cx = a.x;
104
- cy = a.y;
105
- width = b;
106
- height = c;
107
- name = (_a = d) !== null && _a !== void 0 ? _a : 'Figure-8 Path';
75
+ let id;
76
+ let cx;
77
+ let cy;
78
+ let width;
79
+ let height;
80
+ let name;
81
+ if (typeof a === "string") {
82
+ id = a;
83
+ cx = b;
84
+ cy = c;
85
+ width = d;
86
+ height = e;
87
+ name = f ?? "Figure-8 Path";
88
+ } else {
89
+ id = `figure8-${Date.now()}`;
90
+ cx = a.x;
91
+ cy = a.y;
92
+ width = b;
93
+ height = c;
94
+ name = d ?? "Figure-8 Path";
95
+ }
96
+ const hw = width / 2;
97
+ const hh = height / 2;
98
+ const points = [
99
+ {
100
+ pos: { x: cx, y: cy },
101
+ cpIn: { x: cx - hw * 0.6, y: cy + hh },
102
+ cpOut: { x: cx + hw * 0.6, y: cy - hh }
103
+ },
104
+ {
105
+ pos: { x: cx + hw, y: cy - hh },
106
+ cpIn: { x: cx + hw * 0.4, y: cy - hh },
107
+ cpOut: { x: cx + hw, y: cy }
108
+ },
109
+ {
110
+ pos: { x: cx, y: cy },
111
+ cpIn: { x: cx + hw * 0.6, y: cy + hh },
112
+ cpOut: { x: cx - hw * 0.6, y: cy - hh }
113
+ },
114
+ {
115
+ pos: { x: cx - hw, y: cy + hh },
116
+ cpIn: { x: cx - hw, y: cy },
117
+ cpOut: { x: cx - hw * 0.4, y: cy + hh }
108
118
  }
109
- const hw = width / 2;
110
- const hh = height / 2;
111
- const points = [
112
- {
113
- pos: { x: cx, y: cy },
114
- cpIn: { x: cx - hw * 0.6, y: cy + hh },
115
- cpOut: { x: cx + hw * 0.6, y: cy - hh },
116
- },
117
- {
118
- pos: { x: cx + hw, y: cy - hh },
119
- cpIn: { x: cx + hw * 0.4, y: cy - hh },
120
- cpOut: { x: cx + hw, y: cy },
121
- },
122
- {
123
- pos: { x: cx, y: cy },
124
- cpIn: { x: cx + hw * 0.6, y: cy + hh },
125
- cpOut: { x: cx - hw * 0.6, y: cy - hh },
126
- },
127
- {
128
- pos: { x: cx - hw, y: cy + hh },
129
- cpIn: { x: cx - hw, y: cy },
130
- cpOut: { x: cx - hw * 0.4, y: cy + hh },
131
- },
132
- ];
133
- return { id, name, points, closed: true };
119
+ ];
120
+ return { id, name, points, closed: true };
134
121
  }
135
- // ── Path Evaluation ─────────────────────────────────────────────
136
122
  function lerp2(a, b, t) {
137
- return { x: a.x + (b.x - a.x) * t, y: a.y + (b.y - a.y) * t };
123
+ return { x: a.x + (b.x - a.x) * t, y: a.y + (b.y - a.y) * t };
138
124
  }
139
125
  function cubicBezier(p0, p1, p2, p3, t) {
140
- const t2 = t * t;
141
- const t3 = t2 * t;
142
- const mt = 1 - t;
143
- const mt2 = mt * mt;
144
- const mt3 = mt2 * mt;
145
- return {
146
- x: mt3 * p0.x + 3 * mt2 * t * p1.x + 3 * mt * t2 * p2.x + t3 * p3.x,
147
- y: mt3 * p0.y + 3 * mt2 * t * p1.y + 3 * mt * t2 * p2.y + t3 * p3.y,
148
- };
126
+ const t2 = t * t;
127
+ const t3 = t2 * t;
128
+ const mt = 1 - t;
129
+ const mt2 = mt * mt;
130
+ const mt3 = mt2 * mt;
131
+ return {
132
+ x: mt3 * p0.x + 3 * mt2 * t * p1.x + 3 * mt * t2 * p2.x + t3 * p3.x,
133
+ y: mt3 * p0.y + 3 * mt2 * t * p1.y + 3 * mt * t2 * p2.y + t3 * p3.y
134
+ };
149
135
  }
150
136
  function cubicBezierDerivative(p0, p1, p2, p3, t) {
151
- const mt = 1 - t;
152
- return {
153
- x: 3 * mt * mt * (p1.x - p0.x) + 6 * mt * t * (p2.x - p1.x) + 3 * t * t * (p3.x - p2.x),
154
- y: 3 * mt * mt * (p1.y - p0.y) + 6 * mt * t * (p2.y - p1.y) + 3 * t * t * (p3.y - p2.y),
155
- };
137
+ const mt = 1 - t;
138
+ return {
139
+ x: 3 * mt * mt * (p1.x - p0.x) + 6 * mt * t * (p2.x - p1.x) + 3 * t * t * (p3.x - p2.x),
140
+ y: 3 * mt * mt * (p1.y - p0.y) + 6 * mt * t * (p2.y - p1.y) + 3 * t * t * (p3.y - p2.y)
141
+ };
156
142
  }
157
- /** Evaluate a position on the motion path at parameter t ∈ [0..1]. */
158
143
  function evaluatePath(path, t) {
159
- var _a, _b;
160
- const n = path.closed ? path.points.length : path.points.length - 1;
161
- if (n <= 0) {
162
- return (_b = (_a = path.points[0]) === null || _a === void 0 ? void 0 : _a.pos) !== null && _b !== void 0 ? _b : { x: 0, y: 0 };
163
- }
164
- const tClamped = path.closed ? ((t % 1) + 1) % 1 : Math.max(0, Math.min(1, t));
165
- const segFloat = tClamped * n;
166
- const seg = Math.min(Math.floor(segFloat), n - 1);
167
- const localT = segFloat - seg;
168
- const i0 = seg;
169
- const i1 = path.closed ? (seg + 1) % path.points.length : seg + 1;
170
- const p0 = path.points[i0];
171
- const p1 = path.points[i1];
172
- return cubicBezier(p0.pos, p0.cpOut, p1.cpIn, p1.pos, localT);
144
+ const n = path.closed ? path.points.length : path.points.length - 1;
145
+ if (n <= 0) {
146
+ return path.points[0]?.pos ?? { x: 0, y: 0 };
147
+ }
148
+ const tClamped = path.closed ? (t % 1 + 1) % 1 : Math.max(0, Math.min(1, t));
149
+ const segFloat = tClamped * n;
150
+ const seg = Math.min(Math.floor(segFloat), n - 1);
151
+ const localT = segFloat - seg;
152
+ const i0 = seg;
153
+ const i1 = path.closed ? (seg + 1) % path.points.length : seg + 1;
154
+ const p0 = path.points[i0];
155
+ const p1 = path.points[i1];
156
+ return cubicBezier(p0.pos, p0.cpOut, p1.cpIn, p1.pos, localT);
173
157
  }
174
- /** Get the tangent direction at parameter t. */
175
158
  function evaluatePathTangent(path, t) {
176
- const n = path.closed ? path.points.length : path.points.length - 1;
177
- if (n <= 0) {
178
- return { x: 1, y: 0 };
179
- }
180
- const tClamped = path.closed ? ((t % 1) + 1) % 1 : Math.max(0, Math.min(1, t));
181
- const segFloat = tClamped * n;
182
- const seg = Math.min(Math.floor(segFloat), n - 1);
183
- const localT = segFloat - seg;
184
- const i0 = seg;
185
- const i1 = path.closed ? (seg + 1) % path.points.length : seg + 1;
186
- const p0 = path.points[i0];
187
- const p1 = path.points[i1];
188
- const d = cubicBezierDerivative(p0.pos, p0.cpOut, p1.cpIn, p1.pos, localT);
189
- const len = Math.hypot(d.x, d.y) || 1;
190
- return { x: d.x / len, y: d.y / len };
159
+ const n = path.closed ? path.points.length : path.points.length - 1;
160
+ if (n <= 0) {
161
+ return { x: 1, y: 0 };
162
+ }
163
+ const tClamped = path.closed ? (t % 1 + 1) % 1 : Math.max(0, Math.min(1, t));
164
+ const segFloat = tClamped * n;
165
+ const seg = Math.min(Math.floor(segFloat), n - 1);
166
+ const localT = segFloat - seg;
167
+ const i0 = seg;
168
+ const i1 = path.closed ? (seg + 1) % path.points.length : seg + 1;
169
+ const p0 = path.points[i0];
170
+ const p1 = path.points[i1];
171
+ const d = cubicBezierDerivative(p0.pos, p0.cpOut, p1.cpIn, p1.pos, localT);
172
+ const len = Math.hypot(d.x, d.y) || 1;
173
+ return { x: d.x / len, y: d.y / len };
191
174
  }
192
- /** Approximate total path length by sampling. */
193
175
  function pathLength(path, samples = 64) {
194
- let len = 0;
195
- let prev = evaluatePath(path, 0);
196
- for (let i = 1; i <= samples; i++) {
197
- const cur = evaluatePath(path, i / samples);
198
- len += Math.hypot(cur.x - prev.x, cur.y - prev.y);
199
- prev = cur;
200
- }
201
- return len;
176
+ let len = 0;
177
+ let prev = evaluatePath(path, 0);
178
+ for (let i = 1; i <= samples; i++) {
179
+ const cur = evaluatePath(path, i / samples);
180
+ len += Math.hypot(cur.x - prev.x, cur.y - prev.y);
181
+ prev = cur;
182
+ }
183
+ return len;
202
184
  }
203
- /** Compute arc-length parameterization lookup table. */
204
185
  function arcLengthTable(path, samples = 64) {
205
- const table = [0];
206
- let prev = evaluatePath(path, 0);
207
- let cumLen = 0;
208
- for (let i = 1; i <= samples; i++) {
209
- const t = i / samples;
210
- const cur = evaluatePath(path, t);
211
- cumLen += Math.hypot(cur.x - prev.x, cur.y - prev.y);
212
- table.push(cumLen);
213
- prev = cur;
214
- }
215
- // Normalize to [0..1]
216
- const total = cumLen || 1;
217
- for (let i = 0; i <= samples; i++) {
218
- table[i] /= total;
219
- }
220
- return table;
186
+ const table = [0];
187
+ let prev = evaluatePath(path, 0);
188
+ let cumLen = 0;
189
+ for (let i = 1; i <= samples; i++) {
190
+ const t = i / samples;
191
+ const cur = evaluatePath(path, t);
192
+ cumLen += Math.hypot(cur.x - prev.x, cur.y - prev.y);
193
+ table.push(cumLen);
194
+ prev = cur;
195
+ }
196
+ const total = cumLen || 1;
197
+ for (let i = 0; i <= samples; i++) {
198
+ table[i] /= total;
199
+ }
200
+ return table;
221
201
  }
222
- /** Convert distance fraction → parametric t using arc-length table. */
223
202
  function distanceToT(arcTable, d) {
224
- const n = arcTable.length - 1;
225
- const clamped = Math.max(0, Math.min(1, d));
226
- for (let i = 0; i < n; i++) {
227
- if (arcTable[i + 1] >= clamped) {
228
- const segLen = arcTable[i + 1] - arcTable[i];
229
- const frac = segLen > 0 ? (clamped - arcTable[i]) / segLen : 0;
230
- return (i + frac) / n;
231
- }
203
+ const n = arcTable.length - 1;
204
+ const clamped = Math.max(0, Math.min(1, d));
205
+ for (let i = 0; i < n; i++) {
206
+ if (arcTable[i + 1] >= clamped) {
207
+ const segLen = arcTable[i + 1] - arcTable[i];
208
+ const frac = segLen > 0 ? (clamped - arcTable[i]) / segLen : 0;
209
+ return (i + frac) / n;
232
210
  }
233
- return 1;
211
+ }
212
+ return 1;
234
213
  }
235
- // ── Animation Evaluation ────────────────────────────────────────
236
214
  const EASING_FNS = {
237
- linear: (t) => t,
238
- 'ease-in': (t) => t * t,
239
- 'ease-out': (t) => t * (2 - t),
240
- 'ease-in-out': (t) => t * t * (3 - 2 * t),
215
+ linear: (t) => t,
216
+ "ease-in": (t) => t * t,
217
+ "ease-out": (t) => t * (2 - t),
218
+ "ease-in-out": (t) => t * t * (3 - 2 * t)
241
219
  };
242
- /** Evaluate a motion path animation at a given time (ms). Returns position on path. */
243
220
  function evaluateMotionPathAnimation(path, anim, timeMs) {
244
- var _a;
245
- if (anim.keyframes.length === 0) {
246
- return null;
247
- }
248
- const kfs = [...anim.keyframes].sort((a, b) => a.time - b.time);
249
- const totalDuration = kfs[kfs.length - 1].time - kfs[0].time;
250
- let time = timeMs;
251
- if (anim.loop && totalDuration > 0) {
252
- time =
253
- kfs[0].time + ((((timeMs - kfs[0].time) % totalDuration) + totalDuration) % totalDuration);
254
- }
255
- // Find surrounding keyframes
256
- if (time <= kfs[0].time) {
257
- return evaluatePath(path, kfs[0].t);
258
- }
259
- if (time >= kfs[kfs.length - 1].time) {
260
- return evaluatePath(path, kfs[kfs.length - 1].t);
261
- }
262
- for (let i = 0; i < kfs.length - 1; i++) {
263
- if (time >= kfs[i].time && time <= kfs[i + 1].time) {
264
- const segDur = kfs[i + 1].time - kfs[i].time;
265
- const rawT = segDur > 0 ? (time - kfs[i].time) / segDur : 0;
266
- const easing = EASING_FNS[(_a = kfs[i].easing) !== null && _a !== void 0 ? _a : 'linear'];
267
- const easedT = easing(rawT);
268
- const pathT = kfs[i].t + (kfs[i + 1].t - kfs[i].t) * easedT;
269
- return evaluatePath(path, pathT);
270
- }
271
- }
221
+ if (anim.keyframes.length === 0) {
222
+ return null;
223
+ }
224
+ const kfs = [...anim.keyframes].sort((a, b) => a.time - b.time);
225
+ const totalDuration = kfs[kfs.length - 1].time - kfs[0].time;
226
+ let time = timeMs;
227
+ if (anim.loop && totalDuration > 0) {
228
+ time = kfs[0].time + ((timeMs - kfs[0].time) % totalDuration + totalDuration) % totalDuration;
229
+ }
230
+ if (time <= kfs[0].time) {
231
+ return evaluatePath(path, kfs[0].t);
232
+ }
233
+ if (time >= kfs[kfs.length - 1].time) {
272
234
  return evaluatePath(path, kfs[kfs.length - 1].t);
235
+ }
236
+ for (let i = 0; i < kfs.length - 1; i++) {
237
+ if (time >= kfs[i].time && time <= kfs[i + 1].time) {
238
+ const segDur = kfs[i + 1].time - kfs[i].time;
239
+ const rawT = segDur > 0 ? (time - kfs[i].time) / segDur : 0;
240
+ const easing = EASING_FNS[kfs[i].easing ?? "linear"];
241
+ const easedT = easing(rawT);
242
+ const pathT = kfs[i].t + (kfs[i + 1].t - kfs[i].t) * easedT;
243
+ return evaluatePath(path, pathT);
244
+ }
245
+ }
246
+ return evaluatePath(path, kfs[kfs.length - 1].t);
273
247
  }
274
- // ── Preset Paths ────────────────────────────────────────────────
275
248
  const PRESET_PATHS = {
276
- bouncingArc: (cx, cy, w, _h) => createLinearPath('preset-arc', { x: cx - w / 2, y: cy }, { x: cx + w / 2, y: cy }, 'Bouncing Arc'),
277
- circle: (cx, cy, r) => createCircularPath('preset-circle', cx, cy, r, 'Circle'),
278
- figure8: (cx, cy, w, h) => createFigure8Path('preset-figure8', cx, cy, w, h, 'Figure-8'),
249
+ bouncingArc: (cx, cy, w, _h) => createLinearPath(
250
+ "preset-arc",
251
+ { x: cx - w / 2, y: cy },
252
+ { x: cx + w / 2, y: cy },
253
+ "Bouncing Arc"
254
+ ),
255
+ circle: (cx, cy, r) => createCircularPath("preset-circle", cx, cy, r, "Circle"),
256
+ figure8: (cx, cy, w, h) => createFigure8Path("preset-figure8", cx, cy, w, h, "Figure-8")
279
257
  };
280
-
281
258
  exports.PRESET_PATHS = PRESET_PATHS;
282
259
  exports.arcLengthTable = arcLengthTable;
283
260
  exports.createCircularPath = createCircularPath;