@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,51 +1,113 @@
1
- 'use strict';
2
-
3
- var jsxRuntime = require('react/jsx-runtime');
4
- var characterTypes = require('../characterTypes.js');
5
-
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const characterTypes = require("../characterTypes.js");
6
5
  function pal(c) {
7
- return {
8
- base: characterTypes.pick(c, 0, 'var(--anim-shirt, #3B82F6)'),
9
- accent: characterTypes.pick(c, 1, 'var(--anim-outfit-2, #2563EB)'),
10
- stroke: characterTypes.pick(c, 2, 'var(--anim-stroke, #111)'),
11
- };
6
+ return {
7
+ base: characterTypes.pick(c, 0, "var(--anim-shirt, #3B82F6)"),
8
+ accent: characterTypes.pick(c, 1, "var(--anim-outfit-2, #2563EB)"),
9
+ stroke: characterTypes.pick(c, 2, "var(--anim-stroke, #111)")
10
+ };
12
11
  }
13
- const OutfitTee = ({ colors, scale = 1, transform, strokeWidth = 1.4, }) => {
14
- const c = pal(colors);
15
- return (jsxRuntime.jsxs("g", { transform: `${transform !== null && transform !== void 0 ? transform : ''} scale(${scale})`, stroke: c.stroke, strokeWidth: strokeWidth, strokeLinejoin: "round", children: [jsxRuntime.jsx("path", { d: "M-28 -20 l-12 -10 l10 -10 l10 8 h40 l10 -8 l10 10 l-12 10 v40 h-56 z", fill: c.base }), jsxRuntime.jsx("line", { x1: -10, y1: -20, x2: -10, y2: 20, stroke: c.accent, strokeWidth: 0.8, opacity: 0.3 })] }));
12
+ const OutfitTee = ({
13
+ colors,
14
+ scale = 1,
15
+ transform,
16
+ strokeWidth = 1.4
17
+ }) => {
18
+ const c = pal(colors);
19
+ return /* @__PURE__ */ jsxRuntime.jsxs(
20
+ "g",
21
+ {
22
+ transform: `${transform ?? ""} scale(${scale})`,
23
+ stroke: c.stroke,
24
+ strokeWidth,
25
+ strokeLinejoin: "round",
26
+ children: [
27
+ /* @__PURE__ */ jsxRuntime.jsx(
28
+ "path",
29
+ {
30
+ d: "M-28 -20 l-12 -10 l10 -10 l10 8 h40 l10 -8 l10 10 l-12 10 v40 h-56 z",
31
+ fill: c.base
32
+ }
33
+ ),
34
+ /* @__PURE__ */ jsxRuntime.jsx("line", { x1: -10, y1: -20, x2: -10, y2: 20, stroke: c.accent, strokeWidth: 0.8, opacity: 0.3 })
35
+ ]
36
+ }
37
+ );
16
38
  };
17
- const OutfitHoodie = ({ colors, scale = 1, transform, strokeWidth = 1.4, }) => {
18
- const c = pal(colors);
19
- return (jsxRuntime.jsxs("g", { transform: `${transform !== null && transform !== void 0 ? transform : ''} scale(${scale})`, stroke: c.stroke, strokeWidth: strokeWidth, strokeLinejoin: "round", children: [jsxRuntime.jsx("path", { d: "M-28 -20 l-12 -10 l10 -10 l10 8 h40 l10 -8 l10 10 l-12 10 v40 h-56 z", fill: c.base }), jsxRuntime.jsx("path", { d: "M-6 -24 q6 12 12 0", fill: c.accent, stroke: c.stroke, strokeWidth: 0.8 }), jsxRuntime.jsx("rect", { x: -10, y: 0, width: 20, height: 18, rx: 4, fill: c.accent, opacity: 0.3 })] }));
39
+ const OutfitHoodie = ({
40
+ colors,
41
+ scale = 1,
42
+ transform,
43
+ strokeWidth = 1.4
44
+ }) => {
45
+ const c = pal(colors);
46
+ return /* @__PURE__ */ jsxRuntime.jsxs(
47
+ "g",
48
+ {
49
+ transform: `${transform ?? ""} scale(${scale})`,
50
+ stroke: c.stroke,
51
+ strokeWidth,
52
+ strokeLinejoin: "round",
53
+ children: [
54
+ /* @__PURE__ */ jsxRuntime.jsx(
55
+ "path",
56
+ {
57
+ d: "M-28 -20 l-12 -10 l10 -10 l10 8 h40 l10 -8 l10 10 l-12 10 v40 h-56 z",
58
+ fill: c.base
59
+ }
60
+ ),
61
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M-6 -24 q6 12 12 0", fill: c.accent, stroke: c.stroke, strokeWidth: 0.8 }),
62
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { x: -10, y: 0, width: 20, height: 18, rx: 4, fill: c.accent, opacity: 0.3 })
63
+ ]
64
+ }
65
+ );
20
66
  };
21
- const OutfitSuit = ({ colors, scale = 1, transform, strokeWidth = 1.4, }) => {
22
- const c = pal(colors);
23
- return (jsxRuntime.jsxs("g", { transform: `${transform !== null && transform !== void 0 ? transform : ''} scale(${scale})`, stroke: c.stroke, strokeWidth: strokeWidth, strokeLinejoin: "round", children: [jsxRuntime.jsx("path", { d: "M-30 -20 l-10 -12 l10 -8 l8 6 h44 l8 -6 l10 8 l-10 12 v42 h-60 z", fill: c.base }), jsxRuntime.jsx("path", { d: "M-8 -26 l8 20 l8 -20", fill: "none", stroke: c.accent, strokeWidth: 1.2 }), jsxRuntime.jsx("path", { d: "M0 -26 v66", fill: "none", stroke: c.stroke, strokeWidth: 0.6, opacity: 0.2 })] }));
67
+ const OutfitSuit = ({
68
+ colors,
69
+ scale = 1,
70
+ transform,
71
+ strokeWidth = 1.4
72
+ }) => {
73
+ const c = pal(colors);
74
+ return /* @__PURE__ */ jsxRuntime.jsxs(
75
+ "g",
76
+ {
77
+ transform: `${transform ?? ""} scale(${scale})`,
78
+ stroke: c.stroke,
79
+ strokeWidth,
80
+ strokeLinejoin: "round",
81
+ children: [
82
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M-30 -20 l-10 -12 l10 -8 l8 6 h44 l8 -6 l10 8 l-10 12 v42 h-60 z", fill: c.base }),
83
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M-8 -26 l8 20 l8 -20", fill: "none", stroke: c.accent, strokeWidth: 1.2 }),
84
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M0 -26 v66", fill: "none", stroke: c.stroke, strokeWidth: 0.6, opacity: 0.2 })
85
+ ]
86
+ }
87
+ );
24
88
  };
25
89
  const OUTFIT_RENDERERS = {
26
- tee: OutfitTee,
27
- hoodie: OutfitHoodie,
28
- suit: OutfitSuit,
29
- dress: OutfitTee,
30
- tank: OutfitTee,
31
- jacket: OutfitSuit,
32
- blazer: OutfitSuit,
33
- vest: OutfitTee,
34
- sweatshirt: OutfitHoodie,
35
- kimono: OutfitSuit,
36
- polo: OutfitTee,
37
- stripes: OutfitTee,
38
- checker: OutfitTee,
39
- jersey: OutfitTee,
40
- tux: OutfitSuit,
41
- robe: OutfitSuit,
90
+ tee: OutfitTee,
91
+ hoodie: OutfitHoodie,
92
+ suit: OutfitSuit,
93
+ dress: OutfitTee,
94
+ tank: OutfitTee,
95
+ jacket: OutfitSuit,
96
+ blazer: OutfitSuit,
97
+ vest: OutfitTee,
98
+ sweatshirt: OutfitHoodie,
99
+ kimono: OutfitSuit,
100
+ polo: OutfitTee,
101
+ stripes: OutfitTee,
102
+ checker: OutfitTee,
103
+ jersey: OutfitTee,
104
+ tux: OutfitSuit,
105
+ robe: OutfitSuit
42
106
  };
43
107
  const Outfit = ({ variant, ...rest }) => {
44
- var _a;
45
- const Comp = (_a = OUTFIT_RENDERERS[variant]) !== null && _a !== void 0 ? _a : OutfitTee;
46
- return jsxRuntime.jsx(Comp, { ...rest });
108
+ const Comp = OUTFIT_RENDERERS[variant] ?? OutfitTee;
109
+ return /* @__PURE__ */ jsxRuntime.jsx(Comp, { ...rest });
47
110
  };
48
-
49
111
  exports.OUTFIT_RENDERERS = OUTFIT_RENDERERS;
50
112
  exports.Outfit = Outfit;
51
113
  exports.OutfitHoodie = OutfitHoodie;
@@ -1,13 +1,17 @@
1
- 'use strict';
2
-
3
- var jsxRuntime = require('react/jsx-runtime');
4
- var characterTypes = require('../characterTypes.js');
5
-
6
- const Torso = ({ colors, scale = 1, transform, strokeWidth = 1.4, fill, }) => {
7
- const arr = colors !== null && colors !== void 0 ? colors : [];
8
- const skin = fill !== null && fill !== void 0 ? fill : characterTypes.pick(arr, 0, 'var(--anim-skin, #FFD2B3)');
9
- const stroke = characterTypes.pick(arr, 2, 'var(--anim-stroke, #111)');
10
- return (jsxRuntime.jsx("g", { transform: `${transform !== null && transform !== void 0 ? transform : ''} scale(${scale})`, stroke: stroke, strokeWidth: strokeWidth, children: jsxRuntime.jsx("path", { d: "M-24 -20 h48 v44 h-48 z", fill: skin, opacity: 0.5 }) }));
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const characterTypes = require("../characterTypes.js");
5
+ const Torso = ({
6
+ colors,
7
+ scale = 1,
8
+ transform,
9
+ strokeWidth = 1.4,
10
+ fill
11
+ }) => {
12
+ const arr = colors ?? [];
13
+ const skin = fill ?? characterTypes.pick(arr, 0, "var(--anim-skin, #FFD2B3)");
14
+ const stroke = characterTypes.pick(arr, 2, "var(--anim-stroke, #111)");
15
+ return /* @__PURE__ */ jsxRuntime.jsx("g", { transform: `${transform ?? ""} scale(${scale})`, stroke, strokeWidth, children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M-24 -20 h48 v44 h-48 z", fill: skin, opacity: 0.5 }) });
11
16
  };
12
-
13
17
  exports.Torso = Torso;
@@ -1,138 +1,120 @@
1
- 'use strict';
2
-
3
- var rigMath = require('./rig/rigMath.js');
4
- var rigTypes = require('./rig/rigTypes.js');
5
-
6
- /**
7
- * spineExport.ts — Export animations to Spine JSON format.
8
- *
9
- * Spine is a popular 2D skeletal animation tool. This module exports
10
- * rig configurations and pose sequences to the Spine JSON format
11
- * for import into Spine editor or Spine runtimes.
12
- */
13
- // ── Bone Mapping ────────────────────────────────────────────────
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const rigMath = require("./rig/rigMath.js");
4
+ const rigTypes = require("./rig/rigTypes.js");
14
5
  const BONE_PARENT_MAP = {
15
- pelvis: 'root',
16
- spineLower: 'pelvis',
17
- spineUpper: 'spineLower',
18
- neck: 'spineUpper',
19
- head: 'neck',
20
- lShoulder: 'spineUpper',
21
- lUpperArm: 'lShoulder',
22
- lForearm: 'lUpperArm',
23
- lHand: 'lForearm',
24
- rShoulder: 'spineUpper',
25
- rUpperArm: 'rShoulder',
26
- rForearm: 'rUpperArm',
27
- rHand: 'rForearm',
28
- lThigh: 'pelvis',
29
- lShin: 'lThigh',
30
- lFoot: 'lShin',
31
- rThigh: 'pelvis',
32
- rShin: 'rThigh',
33
- rFoot: 'rShin',
6
+ pelvis: "root",
7
+ spineLower: "pelvis",
8
+ spineUpper: "spineLower",
9
+ neck: "spineUpper",
10
+ head: "neck",
11
+ lShoulder: "spineUpper",
12
+ lUpperArm: "lShoulder",
13
+ lForearm: "lUpperArm",
14
+ lHand: "lForearm",
15
+ rShoulder: "spineUpper",
16
+ rUpperArm: "rShoulder",
17
+ rForearm: "rUpperArm",
18
+ rHand: "rForearm",
19
+ lThigh: "pelvis",
20
+ lShin: "lThigh",
21
+ lFoot: "lShin",
22
+ rThigh: "pelvis",
23
+ rShin: "rThigh",
24
+ rFoot: "rShin"
34
25
  };
35
26
  function boneLength(rig, key, size) {
36
- var _a;
37
- const spec = rig[key];
38
- return ((_a = spec === null || spec === void 0 ? void 0 : spec.length) !== null && _a !== void 0 ? _a : 0) * size;
27
+ const spec = rig[key];
28
+ return (spec?.length ?? 0) * size;
39
29
  }
40
- // ── Export ───────────────────────────────────────────────────────
41
- /** Export rig and animations to Spine JSON format. */
42
30
  function exportToSpine(animations, options = {}) {
43
- const { name = 'nice2dev_character', size = 200, rig = rigTypes.DEFAULT_RIG, imagePath = './images/', } = options;
44
- // Solve default pose for initial bone positions
45
- const fk = rigMath.solveFK(rig, rigTypes.DEFAULT_POSE, size);
46
- // Build bones
47
- const bones = rigTypes.BONE_ORDER.map((key) => {
48
- var _a;
49
- const solved = fk[key];
50
- const parent = BONE_PARENT_MAP[key];
51
- const parentSolved = parent ? fk[parent] : undefined;
52
- const x = solved ? (parentSolved ? solved.x - parentSolved.x : solved.x) : 0;
53
- const y = solved ? (parentSolved ? solved.y - parentSolved.y : solved.y) : 0;
54
- const rotation = (_a = rigTypes.DEFAULT_POSE[key]) !== null && _a !== void 0 ? _a : 0;
55
- return {
56
- name: key,
57
- parent: parent,
58
- length: boneLength(rig, key, size),
59
- x: Math.round(x * 100) / 100,
60
- y: Math.round(-y * 100) / 100, // Spine uses Y-up
61
- rotation: Math.round(rotation * 100) / 100,
62
- };
63
- });
64
- // Build slots (one per bone for attachment)
65
- const slots = rigTypes.BONE_ORDER.map((key) => ({
66
- name: `${key}_slot`,
67
- bone: key,
68
- attachment: `${key}_img`,
69
- }));
70
- // Build default skin
71
- const skinAttachments = {};
72
- for (const key of rigTypes.BONE_ORDER) {
73
- skinAttachments[`${key}_slot`] = {
74
- [`${key}_img`]: {
75
- type: 'region',
76
- x: 0,
77
- y: 0,
78
- width: Math.round(boneLength(rig, key, size)),
79
- height: 8,
80
- },
81
- };
82
- }
83
- // Build animations
84
- const animationsOut = {};
85
- for (const anim of animations) {
86
- const sortedKf = [...anim.keyframes].sort((a, b) => a.time - b.time);
87
- const boneRotations = {};
88
- for (const key of rigTypes.BONE_ORDER) {
89
- const rotateKf = sortedKf.map((kf) => {
90
- var _a, _b, _c;
91
- return ({
92
- time: Math.round(kf.time) / 1000, // ms → seconds
93
- angle: ((_b = (_a = kf.pose[key]) !== null && _a !== void 0 ? _a : rigTypes.DEFAULT_POSE[key]) !== null && _b !== void 0 ? _b : 0) - ((_c = rigTypes.DEFAULT_POSE[key]) !== null && _c !== void 0 ? _c : 0),
94
- curve: 'stepped',
95
- });
96
- });
97
- boneRotations[key] = { rotate: rotateKf };
98
- }
99
- animationsOut[anim.name] = { bones: boneRotations };
100
- }
31
+ const {
32
+ name = "nice2dev_character",
33
+ size = 200,
34
+ rig = rigTypes.DEFAULT_RIG,
35
+ imagePath = "./images/"
36
+ } = options;
37
+ const fk = rigMath.solveFK(rig, rigTypes.DEFAULT_POSE, size);
38
+ const bones = rigTypes.BONE_ORDER.map((key) => {
39
+ const solved = fk[key];
40
+ const parent = BONE_PARENT_MAP[key];
41
+ const parentSolved = parent ? fk[parent] : void 0;
42
+ const x = solved ? parentSolved ? solved.x - parentSolved.x : solved.x : 0;
43
+ const y = solved ? parentSolved ? solved.y - parentSolved.y : solved.y : 0;
44
+ const rotation = rigTypes.DEFAULT_POSE[key] ?? 0;
101
45
  return {
102
- skeleton: {
103
- hash: generateHash(name),
104
- spine: '4.1',
105
- x: 0,
106
- y: 0,
107
- width: size,
108
- height: size,
109
- images: imagePath,
110
- },
111
- bones,
112
- slots,
113
- skins: { default: skinAttachments },
114
- animations: animationsOut,
46
+ name: key,
47
+ parent,
48
+ length: boneLength(rig, key, size),
49
+ x: Math.round(x * 100) / 100,
50
+ y: Math.round(-y * 100) / 100,
51
+ // Spine uses Y-up
52
+ rotation: Math.round(rotation * 100) / 100
53
+ };
54
+ });
55
+ const slots = rigTypes.BONE_ORDER.map((key) => ({
56
+ name: `${key}_slot`,
57
+ bone: key,
58
+ attachment: `${key}_img`
59
+ }));
60
+ const skinAttachments = {};
61
+ for (const key of rigTypes.BONE_ORDER) {
62
+ skinAttachments[`${key}_slot`] = {
63
+ [`${key}_img`]: {
64
+ type: "region",
65
+ x: 0,
66
+ y: 0,
67
+ width: Math.round(boneLength(rig, key, size)),
68
+ height: 8
69
+ }
115
70
  };
71
+ }
72
+ const animationsOut = {};
73
+ for (const anim of animations) {
74
+ const sortedKf = [...anim.keyframes].sort((a, b) => a.time - b.time);
75
+ const boneRotations = {};
76
+ for (const key of rigTypes.BONE_ORDER) {
77
+ const rotateKf = sortedKf.map((kf) => ({
78
+ time: Math.round(kf.time) / 1e3,
79
+ // ms → seconds
80
+ angle: (kf.pose[key] ?? rigTypes.DEFAULT_POSE[key] ?? 0) - (rigTypes.DEFAULT_POSE[key] ?? 0),
81
+ curve: "stepped"
82
+ }));
83
+ boneRotations[key] = { rotate: rotateKf };
84
+ }
85
+ animationsOut[anim.name] = { bones: boneRotations };
86
+ }
87
+ return {
88
+ skeleton: {
89
+ hash: generateHash(name),
90
+ spine: "4.1",
91
+ x: 0,
92
+ y: 0,
93
+ width: size,
94
+ height: size,
95
+ images: imagePath
96
+ },
97
+ bones,
98
+ slots,
99
+ skins: { default: skinAttachments },
100
+ animations: animationsOut
101
+ };
116
102
  }
117
- /** Serialize Spine data to JSON string. */
118
103
  function spineToJSON(data) {
119
- return JSON.stringify(data, null, 2);
104
+ return JSON.stringify(data, null, 2);
120
105
  }
121
- /** Create a downloadable Blob for the Spine JSON. */
122
106
  function spineToBlob(data) {
123
- return new Blob([spineToJSON(data)], { type: 'application/json' });
107
+ return new Blob([spineToJSON(data)], { type: "application/json" });
124
108
  }
125
- // ── Helpers ─────────────────────────────────────────────────────
126
109
  function generateHash(input) {
127
- let hash = 0;
128
- for (let i = 0; i < input.length; i++) {
129
- const char = input.charCodeAt(i);
130
- hash = (hash << 5) - hash + char;
131
- hash |= 0;
132
- }
133
- return Math.abs(hash).toString(36);
110
+ let hash = 0;
111
+ for (let i = 0; i < input.length; i++) {
112
+ const char = input.charCodeAt(i);
113
+ hash = (hash << 5) - hash + char;
114
+ hash |= 0;
115
+ }
116
+ return Math.abs(hash).toString(36);
134
117
  }
135
-
136
118
  exports.exportToSpine = exportToSpine;
137
119
  exports.spineToBlob = spineToBlob;
138
120
  exports.spineToJSON = spineToJSON;
@@ -1,53 +1,118 @@
1
- 'use strict';
2
-
3
- var jsxRuntime = require('react/jsx-runtime');
4
- var ui = require('@nice2dev/ui');
5
- var React = require('react');
6
-
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const ui = require("@nice2dev/ui");
5
+ const React = require("react");
7
6
  const variantMap = {
8
- dark: 'secondary',
9
- light: 'ghost',
10
- 'outline-secondary': 'outline',
11
- 'outline-info': 'info',
12
- 'outline-warning': 'warning',
13
- 'outline-danger': 'error',
7
+ dark: "secondary",
8
+ light: "ghost",
9
+ "outline-secondary": "outline",
10
+ "outline-info": "info",
11
+ "outline-warning": "warning",
12
+ "outline-danger": "error"
14
13
  };
15
14
  const sizeMap = {
16
- sm: 'sm',
17
- md: 'md',
15
+ sm: "sm",
16
+ md: "md"
18
17
  };
19
- const Button = ({ variant = 'dark', size = 'md', className = '', children, disabled, onClick, title, style, }) => {
20
- return (jsxRuntime.jsx(ui.NiceButton, { variant: variantMap[variant], size: sizeMap[size], className: className, disabled: disabled, onClick: onClick, "aria-label": title, style: style, children: children }));
18
+ const Button = ({
19
+ variant = "dark",
20
+ size = "md",
21
+ className = "",
22
+ children,
23
+ disabled,
24
+ onClick,
25
+ title,
26
+ style
27
+ }) => {
28
+ return /* @__PURE__ */ jsxRuntime.jsx(
29
+ ui.NiceButton,
30
+ {
31
+ variant: variantMap[variant],
32
+ size: sizeMap[size],
33
+ className,
34
+ disabled,
35
+ onClick,
36
+ "aria-label": title,
37
+ style,
38
+ children
39
+ }
40
+ );
21
41
  };
22
- const RangeInput = ({ accentColor, style, className = '', value, min = 0, max = 100, step = 1, onChange, onMouseUp, }) => {
23
- const handleChange = React.useCallback((val) => {
24
- if (onChange) {
25
- const syntheticEvent = {
26
- target: { value: String(val) },
27
- currentTarget: { value: String(val) },
28
- };
29
- onChange(syntheticEvent);
30
- }
31
- // Trigger onMouseUp on every change since NiceSlider doesn't have onChangeEnd
32
- if (onMouseUp) {
33
- onMouseUp({});
34
- }
35
- }, [onChange, onMouseUp]);
36
- return (jsxRuntime.jsx(ui.NiceSlider, { value: typeof value === 'number' ? value : Number(value) || 0, min: Number(min), max: Number(max), step: Number(step), className: className, style: { ...style, '--nice-accent': accentColor }, onChange: handleChange, showValue: false }));
42
+ const RangeInput = ({
43
+ accentColor,
44
+ style,
45
+ className = "",
46
+ value,
47
+ min = 0,
48
+ max = 100,
49
+ step = 1,
50
+ onChange,
51
+ onMouseUp
52
+ }) => {
53
+ const handleChange = React.useCallback(
54
+ (val) => {
55
+ if (onChange) {
56
+ const syntheticEvent = {
57
+ target: { value: String(val) },
58
+ currentTarget: { value: String(val) }
59
+ };
60
+ onChange(syntheticEvent);
61
+ }
62
+ if (onMouseUp) {
63
+ onMouseUp({});
64
+ }
65
+ },
66
+ [onChange, onMouseUp]
67
+ );
68
+ return /* @__PURE__ */ jsxRuntime.jsx(
69
+ ui.NiceSlider,
70
+ {
71
+ value: typeof value === "number" ? value : Number(value) || 0,
72
+ min: Number(min),
73
+ max: Number(max),
74
+ step: Number(step),
75
+ className,
76
+ style: { ...style, "--nice-accent": accentColor },
77
+ onChange: handleChange,
78
+ showValue: false
79
+ }
80
+ );
37
81
  };
38
- const TextArea = ({ className = '', value, onChange, rows, placeholder, disabled, style, }) => {
39
- const handleChange = React.useCallback((newValue) => {
40
- if (onChange) {
41
- const syntheticEvent = {
42
- target: { value: newValue },
43
- currentTarget: { value: newValue },
44
- };
45
- onChange(syntheticEvent);
46
- }
47
- }, [onChange]);
48
- return (jsxRuntime.jsx(ui.NiceTextArea, { className: className, value: typeof value === 'string' ? value : String(value !== null && value !== void 0 ? value : ''), onChange: handleChange, rows: rows, placeholder: placeholder, disabled: disabled, style: style }));
82
+ const TextArea = ({
83
+ className = "",
84
+ value,
85
+ onChange,
86
+ rows,
87
+ placeholder,
88
+ disabled,
89
+ style
90
+ }) => {
91
+ const handleChange = React.useCallback(
92
+ (newValue) => {
93
+ if (onChange) {
94
+ const syntheticEvent = {
95
+ target: { value: newValue },
96
+ currentTarget: { value: newValue }
97
+ };
98
+ onChange(syntheticEvent);
99
+ }
100
+ },
101
+ [onChange]
102
+ );
103
+ return /* @__PURE__ */ jsxRuntime.jsx(
104
+ ui.NiceTextArea,
105
+ {
106
+ className,
107
+ value: typeof value === "string" ? value : String(value ?? ""),
108
+ onChange: handleChange,
109
+ rows,
110
+ placeholder,
111
+ disabled,
112
+ style
113
+ }
114
+ );
49
115
  };
50
-
51
116
  exports.Button = Button;
52
117
  exports.RangeInput = RangeInput;
53
118
  exports.TextArea = TextArea;