@nice2dev/ui-graphics 1.3.14 → 1.3.16

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,193 +1,178 @@
1
- /**
2
- * Gradient types and utilities for VectorEditor
3
- */
4
- /* ────────────────────────────────────────────────────────────────
5
- GRADIENT ID GENERATOR
6
- ──────────────────────────────────────────────────────────────── */
7
1
  let _gradId = 0;
8
2
  const gradientId = () => `grad${++_gradId}`;
9
- /* ────────────────────────────────────────────────────────────────
10
- PRESET GRADIENTS
11
- ──────────────────────────────────────────────────────────────── */
12
3
  const PRESET_GRADIENTS = [
13
- // Linear gradients
14
- {
15
- type: 'linear',
16
- id: gradientId(),
17
- angle: 0,
18
- stops: [
19
- { offset: 0, color: '#ff0000' },
20
- { offset: 1, color: '#0000ff' },
21
- ],
22
- },
23
- {
24
- type: 'linear',
25
- id: gradientId(),
26
- angle: 45,
27
- stops: [
28
- { offset: 0, color: '#00ff00' },
29
- { offset: 0.5, color: '#ffff00' },
30
- { offset: 1, color: '#ff0000' },
31
- ],
32
- },
33
- {
34
- type: 'linear',
35
- id: gradientId(),
36
- angle: 90,
37
- stops: [
38
- { offset: 0, color: '#ffffff' },
39
- { offset: 1, color: '#000000' },
40
- ],
41
- },
42
- {
43
- type: 'linear',
44
- id: gradientId(),
45
- angle: 0,
46
- stops: [
47
- { offset: 0, color: '#667eea' },
48
- { offset: 1, color: '#764ba2' },
49
- ],
50
- },
51
- {
52
- type: 'linear',
53
- id: gradientId(),
54
- angle: 45,
55
- stops: [
56
- { offset: 0, color: '#f093fb' },
57
- { offset: 1, color: '#f5576c' },
58
- ],
59
- },
60
- // Radial gradients
61
- {
62
- type: 'radial',
63
- id: gradientId(),
64
- cx: 0.5,
65
- cy: 0.5,
66
- r: 0.7,
67
- stops: [
68
- { offset: 0, color: '#ffffff' },
69
- { offset: 1, color: '#000000' },
70
- ],
71
- },
72
- {
73
- type: 'radial',
74
- id: gradientId(),
75
- cx: 0.3,
76
- cy: 0.3,
77
- r: 0.8,
78
- stops: [
79
- { offset: 0, color: '#ffff88' },
80
- { offset: 0.5, color: '#ff8800' },
81
- { offset: 1, color: '#880000' },
82
- ],
83
- },
84
- {
85
- type: 'radial',
86
- id: gradientId(),
87
- cx: 0.5,
88
- cy: 0.5,
89
- r: 0.5,
90
- stops: [
91
- { offset: 0, color: '#00ffff', opacity: 1 },
92
- { offset: 1, color: '#00ffff', opacity: 0 },
93
- ],
94
- },
4
+ // Linear gradients
5
+ {
6
+ type: "linear",
7
+ id: gradientId(),
8
+ angle: 0,
9
+ stops: [
10
+ { offset: 0, color: "#ff0000" },
11
+ { offset: 1, color: "#0000ff" }
12
+ ]
13
+ },
14
+ {
15
+ type: "linear",
16
+ id: gradientId(),
17
+ angle: 45,
18
+ stops: [
19
+ { offset: 0, color: "#00ff00" },
20
+ { offset: 0.5, color: "#ffff00" },
21
+ { offset: 1, color: "#ff0000" }
22
+ ]
23
+ },
24
+ {
25
+ type: "linear",
26
+ id: gradientId(),
27
+ angle: 90,
28
+ stops: [
29
+ { offset: 0, color: "#ffffff" },
30
+ { offset: 1, color: "#000000" }
31
+ ]
32
+ },
33
+ {
34
+ type: "linear",
35
+ id: gradientId(),
36
+ angle: 0,
37
+ stops: [
38
+ { offset: 0, color: "#667eea" },
39
+ { offset: 1, color: "#764ba2" }
40
+ ]
41
+ },
42
+ {
43
+ type: "linear",
44
+ id: gradientId(),
45
+ angle: 45,
46
+ stops: [
47
+ { offset: 0, color: "#f093fb" },
48
+ { offset: 1, color: "#f5576c" }
49
+ ]
50
+ },
51
+ // Radial gradients
52
+ {
53
+ type: "radial",
54
+ id: gradientId(),
55
+ cx: 0.5,
56
+ cy: 0.5,
57
+ r: 0.7,
58
+ stops: [
59
+ { offset: 0, color: "#ffffff" },
60
+ { offset: 1, color: "#000000" }
61
+ ]
62
+ },
63
+ {
64
+ type: "radial",
65
+ id: gradientId(),
66
+ cx: 0.3,
67
+ cy: 0.3,
68
+ r: 0.8,
69
+ stops: [
70
+ { offset: 0, color: "#ffff88" },
71
+ { offset: 0.5, color: "#ff8800" },
72
+ { offset: 1, color: "#880000" }
73
+ ]
74
+ },
75
+ {
76
+ type: "radial",
77
+ id: gradientId(),
78
+ cx: 0.5,
79
+ cy: 0.5,
80
+ r: 0.5,
81
+ stops: [
82
+ { offset: 0, color: "#00ffff", opacity: 1 },
83
+ { offset: 1, color: "#00ffff", opacity: 0 }
84
+ ]
85
+ }
95
86
  ];
96
- /* ────────────────────────────────────────────────────────────────
97
- GRADIENT TO SVG CONVERSION
98
- ──────────────────────────────────────────────────────────────── */
99
87
  function gradientToSVGDef(gradient) {
100
- const stopsSVG = gradient.stops
101
- .map((stop) => `<stop offset="${stop.offset * 100}%" stop-color="${stop.color}"${stop.opacity !== undefined ? ` stop-opacity="${stop.opacity}"` : ''}/>`)
102
- .join('\n ');
103
- switch (gradient.type) {
104
- case 'linear': {
105
- const rad = (gradient.angle * Math.PI) / 180;
106
- const x1 = 50 - Math.cos(rad) * 50;
107
- const y1 = 50 - Math.sin(rad) * 50;
108
- const x2 = 50 + Math.cos(rad) * 50;
109
- const y2 = 50 + Math.sin(rad) * 50;
110
- return `<linearGradient id="${gradient.id}" x1="${x1}%" y1="${y1}%" x2="${x2}%" y2="${y2}%">
111
- ${stopsSVG}
88
+ const stopsSVG = gradient.stops.map(
89
+ (stop) => `<stop offset="${stop.offset * 100}%" stop-color="${stop.color}"${stop.opacity !== void 0 ? ` stop-opacity="${stop.opacity}"` : ""}/>`
90
+ ).join("\n ");
91
+ switch (gradient.type) {
92
+ case "linear": {
93
+ const rad = gradient.angle * Math.PI / 180;
94
+ const x1 = 50 - Math.cos(rad) * 50;
95
+ const y1 = 50 - Math.sin(rad) * 50;
96
+ const x2 = 50 + Math.cos(rad) * 50;
97
+ const y2 = 50 + Math.sin(rad) * 50;
98
+ return `<linearGradient id="${gradient.id}" x1="${x1}%" y1="${y1}%" x2="${x2}%" y2="${y2}%">
99
+ ${stopsSVG}
112
100
  </linearGradient>`;
113
- }
114
- case 'radial': {
115
- const fxAttr = gradient.fx !== undefined ? ` fx="${gradient.fx * 100}%"` : '';
116
- const fyAttr = gradient.fy !== undefined ? ` fy="${gradient.fy * 100}%"` : '';
117
- return `<radialGradient id="${gradient.id}" cx="${gradient.cx * 100}%" cy="${gradient.cy * 100}%" r="${gradient.r * 100}%"${fxAttr}${fyAttr}>
118
- ${stopsSVG}
101
+ }
102
+ case "radial": {
103
+ const fxAttr = gradient.fx !== void 0 ? ` fx="${gradient.fx * 100}%"` : "";
104
+ const fyAttr = gradient.fy !== void 0 ? ` fy="${gradient.fy * 100}%"` : "";
105
+ return `<radialGradient id="${gradient.id}" cx="${gradient.cx * 100}%" cy="${gradient.cy * 100}%" r="${gradient.r * 100}%"${fxAttr}${fyAttr}>
106
+ ${stopsSVG}
119
107
  </radialGradient>`;
120
- }
121
- case 'conic': {
122
- // SVG doesn't support conic gradients natively, so we approximate with many linear stops
123
- // This creates a radial gradient with the same appearance
124
- return `<radialGradient id="${gradient.id}" cx="${gradient.cx * 100}%" cy="${gradient.cy * 100}%" r="50%">
125
- ${stopsSVG}
108
+ }
109
+ case "conic": {
110
+ return `<radialGradient id="${gradient.id}" cx="${gradient.cx * 100}%" cy="${gradient.cy * 100}%" r="50%">
111
+ ${stopsSVG}
126
112
  </radialGradient>`;
127
- }
128
113
  }
114
+ }
129
115
  }
130
- /* ────────────────────────────────────────────────────────────────
131
- GRADIENT TO CSS
132
- ──────────────────────────────────────────────────────────────── */
133
116
  function gradientToCSS(gradient) {
134
- const stops = gradient.stops
135
- .map((stop) => {
136
- const opacity = stop.opacity !== undefined ? stop.opacity : 1;
137
- const color = hexToRGBA(stop.color, opacity);
138
- return `${color} ${stop.offset * 100}%`;
139
- })
140
- .join(', ');
141
- switch (gradient.type) {
142
- case 'linear':
143
- return `linear-gradient(${gradient.angle}deg, ${stops})`;
144
- case 'radial':
145
- return `radial-gradient(ellipse ${gradient.r * 100}% ${gradient.r * 100}% at ${gradient.cx * 100}% ${gradient.cy * 100}%, ${stops})`;
146
- case 'conic':
147
- return `conic-gradient(from ${gradient.angle}deg at ${gradient.cx * 100}% ${gradient.cy * 100}%, ${stops})`;
148
- }
117
+ const stops = gradient.stops.map((stop) => {
118
+ const opacity = stop.opacity !== void 0 ? stop.opacity : 1;
119
+ const color = hexToRGBA(stop.color, opacity);
120
+ return `${color} ${stop.offset * 100}%`;
121
+ }).join(", ");
122
+ switch (gradient.type) {
123
+ case "linear":
124
+ return `linear-gradient(${gradient.angle}deg, ${stops})`;
125
+ case "radial":
126
+ return `radial-gradient(ellipse ${gradient.r * 100}% ${gradient.r * 100}% at ${gradient.cx * 100}% ${gradient.cy * 100}%, ${stops})`;
127
+ case "conic":
128
+ return `conic-gradient(from ${gradient.angle}deg at ${gradient.cx * 100}% ${gradient.cy * 100}%, ${stops})`;
129
+ }
149
130
  }
150
131
  function hexToRGBA(hex, opacity) {
151
- const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
152
- if (!result) {
153
- return hex;
154
- }
155
- const r = parseInt(result[1], 16);
156
- const g = parseInt(result[2], 16);
157
- const b = parseInt(result[3], 16);
158
- return `rgba(${r}, ${g}, ${b}, ${opacity})`;
132
+ const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
133
+ if (!result) {
134
+ return hex;
135
+ }
136
+ const r = parseInt(result[1], 16);
137
+ const g = parseInt(result[2], 16);
138
+ const b = parseInt(result[3], 16);
139
+ return `rgba(${r}, ${g}, ${b}, ${opacity})`;
159
140
  }
160
- /* ────────────────────────────────────────────────────────────────
161
- GRADIENT MANIPULATION
162
- ──────────────────────────────────────────────────────────────── */
163
141
  function cloneGradient(gradient) {
164
- return JSON.parse(JSON.stringify(gradient));
142
+ return JSON.parse(JSON.stringify(gradient));
165
143
  }
166
144
  function createLinearGradient(colors, angle = 0) {
167
- const stops = colors.map((color, i) => ({
168
- offset: i / (colors.length - 1),
169
- color,
170
- }));
171
- return {
172
- type: 'linear',
173
- id: gradientId(),
174
- angle,
175
- stops,
176
- };
145
+ const stops = colors.map((color, i) => ({
146
+ offset: i / (colors.length - 1),
147
+ color
148
+ }));
149
+ return {
150
+ type: "linear",
151
+ id: gradientId(),
152
+ angle,
153
+ stops
154
+ };
177
155
  }
178
156
  function createRadialGradient(colors, cx = 0.5, cy = 0.5, r = 0.7) {
179
- const stops = colors.map((color, i) => ({
180
- offset: i / (colors.length - 1),
181
- color,
182
- }));
183
- return {
184
- type: 'radial',
185
- id: gradientId(),
186
- cx,
187
- cy,
188
- r,
189
- stops,
190
- };
157
+ const stops = colors.map((color, i) => ({
158
+ offset: i / (colors.length - 1),
159
+ color
160
+ }));
161
+ return {
162
+ type: "radial",
163
+ id: gradientId(),
164
+ cx,
165
+ cy,
166
+ r,
167
+ stops
168
+ };
191
169
  }
192
-
193
- export { PRESET_GRADIENTS, cloneGradient, createLinearGradient, createRadialGradient, gradientId, gradientToCSS, gradientToSVGDef };
170
+ export {
171
+ PRESET_GRADIENTS,
172
+ cloneGradient,
173
+ createLinearGradient,
174
+ createRadialGradient,
175
+ gradientId,
176
+ gradientToCSS,
177
+ gradientToSVGDef
178
+ };
@@ -1,63 +1,58 @@
1
- import { starPoints, polygonPoints } from './vectorEditorTypes.js';
2
-
3
- /** Build a complete `export const NtdX = createIcon({...})` snippet string. */
1
+ import { starPoints, polygonPoints } from "./vectorEditorTypes.js";
4
2
  function shapesToIconSnippet(shapes, opts) {
5
- const { iconName, variant = 'solid', artW, artH } = opts;
6
- const scale = 24 / Math.max(artW, artH);
7
- const cleanName = iconName.replace(/^Ntd/, '').replace(/[^A-Za-z0-9]/g, '');
8
- const display = `Ntd${cleanName}`;
9
- const jsxLines = shapes
10
- .filter((s) => !s.hidden)
11
- .map((s) => shapeToJsx(s, scale))
12
- .filter(Boolean);
13
- return [
14
- `export const ${display} = createIcon({`,
15
- ` displayName: '${display}',`,
16
- ` paths: {`,
17
- ` ${variant}: ({ primaryColor, strokeWidth }) => (`,
18
- ` <>`,
19
- ...jsxLines.map((l) => ` ${l}`),
20
- ` </>`,
21
- ` ),`,
22
- ` },`,
23
- `});`,
24
- ].join('\n');
3
+ const { iconName, variant = "solid", artW, artH } = opts;
4
+ const scale = 24 / Math.max(artW, artH);
5
+ const cleanName = iconName.replace(/^Ntd/, "").replace(/[^A-Za-z0-9]/g, "");
6
+ const display = `Ntd${cleanName}`;
7
+ const jsxLines = shapes.filter((s) => !s.hidden).map((s) => shapeToJsx(s, scale)).filter(Boolean);
8
+ return [
9
+ `export const ${display} = createIcon({`,
10
+ ` displayName: '${display}',`,
11
+ ` paths: {`,
12
+ ` ${variant}: ({ primaryColor, strokeWidth }) => (`,
13
+ ` <>`,
14
+ ...jsxLines.map((l) => ` ${l}`),
15
+ ` </>`,
16
+ ` ),`,
17
+ ` },`,
18
+ `});`
19
+ ].join("\n");
25
20
  }
26
21
  function shapeToJsx(s, scale) {
27
- var _a, _b, _c, _d, _e, _f, _g;
28
- const n = (v) => +(v * scale).toFixed(3);
29
- const fill = s.fill && s.fill !== 'none' ? '{primaryColor}' : '"none"';
30
- const stroke = s.stroke && s.stroke !== 'none' ? '{primaryColor}' : '"none"';
31
- const sw = s.strokeWidth ? `{strokeWidth}` : '"0"';
32
- switch (s.type) {
33
- case 'rect':
34
- return `<rect x={${n(s.x)}} y={${n(s.y)}} width={${n(s.w)}} height={${n(s.h)}} fill=${fill} stroke=${stroke} strokeWidth=${sw} />`;
35
- case 'roundrect':
36
- return `<rect x={${n(s.x)}} y={${n(s.y)}} width={${n(s.w)}} height={${n(s.h)}} rx={${n(s.rx || 12)}} fill=${fill} stroke=${stroke} strokeWidth=${sw} />`;
37
- case 'ellipse':
38
- return `<ellipse cx={${n(s.x + s.w / 2)}} cy={${n(s.y + s.h / 2)}} rx={${n(s.w / 2)}} ry={${n(s.h / 2)}} fill=${fill} stroke=${stroke} strokeWidth=${sw} />`;
39
- case 'line':
40
- return `<line x1={${n(s.x)}} y1={${n(s.y)}} x2={${n((_a = s.x2) !== null && _a !== void 0 ? _a : s.x)}} y2={${n((_b = s.y2) !== null && _b !== void 0 ? _b : s.y)}} stroke=${stroke} strokeWidth=${sw} />`;
41
- case 'arrow':
42
- return `<line x1={${n(s.x)}} y1={${n(s.y)}} x2={${n((_c = s.x2) !== null && _c !== void 0 ? _c : s.x)}} y2={${n((_d = s.y2) !== null && _d !== void 0 ? _d : s.y)}} stroke=${stroke} strokeWidth=${sw} />`;
43
- case 'polyline':
44
- return `<polyline points="${((_e = s.points) !== null && _e !== void 0 ? _e : []).map((p) => `${n(p.x)},${n(p.y)}`).join(' ')}" fill=${fill} stroke=${stroke} strokeWidth=${sw} />`;
45
- case 'polygon': {
46
- const cx = s.x + s.w / 2, cy = s.y + s.h / 2, r = Math.min(s.w, s.h) / 2;
47
- return `<polygon points="${polygonPoints(n(cx), n(cy), n(r), s.sides || 6, s.rotation)}" fill=${fill} stroke=${stroke} strokeWidth=${sw} />`;
48
- }
49
- case 'star': {
50
- const cx = s.x + s.w / 2, cy = s.y + s.h / 2, r = Math.min(s.w, s.h) / 2;
51
- const ir = r * (s.innerRadius || 0.4);
52
- return `<polygon points="${starPoints(n(cx), n(cy), n(r), n(ir), s.sides || 5, s.rotation)}" fill=${fill} stroke=${stroke} strokeWidth=${sw} />`;
53
- }
54
- case 'text':
55
- return `<text x={${n(s.x)}} y={${n(s.y + (s.fontSize || 24))}} fontSize={${n(s.fontSize || 24)}} fill=${fill}>${(_f = s.text) !== null && _f !== void 0 ? _f : ''}</text>`;
56
- case 'path':
57
- return `<path d="${(_g = s.d) !== null && _g !== void 0 ? _g : ''}" fill=${fill} stroke=${stroke} strokeWidth=${sw} />`;
58
- default:
59
- return '';
22
+ const n = (v) => +(v * scale).toFixed(3);
23
+ const fill = s.fill && s.fill !== "none" ? "{primaryColor}" : '"none"';
24
+ const stroke = s.stroke && s.stroke !== "none" ? "{primaryColor}" : '"none"';
25
+ const sw = s.strokeWidth ? `{strokeWidth}` : '"0"';
26
+ switch (s.type) {
27
+ case "rect":
28
+ return `<rect x={${n(s.x)}} y={${n(s.y)}} width={${n(s.w)}} height={${n(s.h)}} fill=${fill} stroke=${stroke} strokeWidth=${sw} />`;
29
+ case "roundrect":
30
+ return `<rect x={${n(s.x)}} y={${n(s.y)}} width={${n(s.w)}} height={${n(s.h)}} rx={${n(s.rx || 12)}} fill=${fill} stroke=${stroke} strokeWidth=${sw} />`;
31
+ case "ellipse":
32
+ return `<ellipse cx={${n(s.x + s.w / 2)}} cy={${n(s.y + s.h / 2)}} rx={${n(s.w / 2)}} ry={${n(s.h / 2)}} fill=${fill} stroke=${stroke} strokeWidth=${sw} />`;
33
+ case "line":
34
+ return `<line x1={${n(s.x)}} y1={${n(s.y)}} x2={${n(s.x2 ?? s.x)}} y2={${n(s.y2 ?? s.y)}} stroke=${stroke} strokeWidth=${sw} />`;
35
+ case "arrow":
36
+ return `<line x1={${n(s.x)}} y1={${n(s.y)}} x2={${n(s.x2 ?? s.x)}} y2={${n(s.y2 ?? s.y)}} stroke=${stroke} strokeWidth=${sw} />`;
37
+ case "polyline":
38
+ return `<polyline points="${(s.points ?? []).map((p) => `${n(p.x)},${n(p.y)}`).join(" ")}" fill=${fill} stroke=${stroke} strokeWidth=${sw} />`;
39
+ case "polygon": {
40
+ const cx = s.x + s.w / 2, cy = s.y + s.h / 2, r = Math.min(s.w, s.h) / 2;
41
+ return `<polygon points="${polygonPoints(n(cx), n(cy), n(r), s.sides || 6, s.rotation)}" fill=${fill} stroke=${stroke} strokeWidth=${sw} />`;
60
42
  }
43
+ case "star": {
44
+ const cx = s.x + s.w / 2, cy = s.y + s.h / 2, r = Math.min(s.w, s.h) / 2;
45
+ const ir = r * (s.innerRadius || 0.4);
46
+ return `<polygon points="${starPoints(n(cx), n(cy), n(r), n(ir), s.sides || 5, s.rotation)}" fill=${fill} stroke=${stroke} strokeWidth=${sw} />`;
47
+ }
48
+ case "text":
49
+ return `<text x={${n(s.x)}} y={${n(s.y + (s.fontSize || 24))}} fontSize={${n(s.fontSize || 24)}} fill=${fill}>${s.text ?? ""}</text>`;
50
+ case "path":
51
+ return `<path d="${s.d ?? ""}" fill=${fill} stroke=${stroke} strokeWidth=${sw} />`;
52
+ default:
53
+ return "";
54
+ }
61
55
  }
62
-
63
- export { shapesToIconSnippet };
56
+ export {
57
+ shapesToIconSnippet
58
+ };