@nice2dev/ui-graphics 1.1.0 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (391) hide show
  1. package/dist/cjs/animation/AnimatedPerson.js +69 -63
  2. package/dist/cjs/animation/AnimatedPerson.js.map +1 -1
  3. package/dist/cjs/animation/AnimationEditor.js +27 -20
  4. package/dist/cjs/animation/AnimationEditor.js.map +1 -1
  5. package/dist/cjs/animation/Audience.js +17 -11
  6. package/dist/cjs/animation/Audience.js.map +1 -1
  7. package/dist/cjs/animation/BodyRenderer.js +7 -7
  8. package/dist/cjs/animation/BodyRenderer.js.map +1 -1
  9. package/dist/cjs/animation/animationHelper.js +83 -52
  10. package/dist/cjs/animation/animationHelper.js.map +1 -1
  11. package/dist/cjs/animation/characterTypes.js +171 -30
  12. package/dist/cjs/animation/characterTypes.js.map +1 -1
  13. package/dist/cjs/animation/choreoDSL.js +114 -62
  14. package/dist/cjs/animation/choreoDSL.js.map +1 -1
  15. package/dist/cjs/animation/karaokeIntegration.js +10 -11
  16. package/dist/cjs/animation/karaokeIntegration.js.map +1 -1
  17. package/dist/cjs/animation/lottieExport.js +15 -9
  18. package/dist/cjs/animation/lottieExport.js.map +1 -1
  19. package/dist/cjs/animation/motionPath.js +125 -30
  20. package/dist/cjs/animation/motionPath.js.map +1 -1
  21. package/dist/cjs/animation/physics.js +157 -57
  22. package/dist/cjs/animation/physics.js.map +1 -1
  23. package/dist/cjs/animation/rig/RigPlayer.js +7 -6
  24. package/dist/cjs/animation/rig/RigPlayer.js.map +1 -1
  25. package/dist/cjs/animation/rig/RiggedBody.js +7 -7
  26. package/dist/cjs/animation/rig/RiggedBody.js.map +1 -1
  27. package/dist/cjs/animation/rig/choreoRigBridge.js +52 -29
  28. package/dist/cjs/animation/rig/choreoRigBridge.js.map +1 -1
  29. package/dist/cjs/animation/rig/poseOps.js +6 -3
  30. package/dist/cjs/animation/rig/poseOps.js.map +1 -1
  31. package/dist/cjs/animation/shapes/arms.js +7 -6
  32. package/dist/cjs/animation/shapes/arms.js.map +1 -1
  33. package/dist/cjs/animation/shapes/eyes.js +31 -18
  34. package/dist/cjs/animation/shapes/eyes.js.map +1 -1
  35. package/dist/cjs/animation/shapes/hair.js +39 -23
  36. package/dist/cjs/animation/shapes/hair.js.map +1 -1
  37. package/dist/cjs/animation/shapes/heads.js +47 -29
  38. package/dist/cjs/animation/shapes/heads.js.map +1 -1
  39. package/dist/cjs/animation/shapes/headwear.js +26 -14
  40. package/dist/cjs/animation/shapes/headwear.js.map +1 -1
  41. package/dist/cjs/animation/shapes/legs.js +7 -6
  42. package/dist/cjs/animation/shapes/legs.js.map +1 -1
  43. package/dist/cjs/animation/shapes/mouths.js +28 -18
  44. package/dist/cjs/animation/shapes/mouths.js.map +1 -1
  45. package/dist/cjs/animation/shapes/noses.js +18 -9
  46. package/dist/cjs/animation/shapes/noses.js.map +1 -1
  47. package/dist/cjs/animation/shapes/outfits.js +25 -14
  48. package/dist/cjs/animation/shapes/outfits.js.map +1 -1
  49. package/dist/cjs/animation/shapes/torsos.js +5 -4
  50. package/dist/cjs/animation/shapes/torsos.js.map +1 -1
  51. package/dist/cjs/animation/spineExport.js +33 -26
  52. package/dist/cjs/animation/spineExport.js.map +1 -1
  53. package/dist/cjs/core/LocalUI.js +16 -16
  54. package/dist/cjs/core/LocalUI.js.map +1 -1
  55. package/dist/cjs/core/NiceBrushEngine.js +205 -69
  56. package/dist/cjs/core/NiceBrushEngine.js.map +1 -1
  57. package/dist/cjs/core/collaboration.js +35 -21
  58. package/dist/cjs/core/collaboration.js.map +1 -1
  59. package/dist/cjs/core/colorBlindness.js +64 -24
  60. package/dist/cjs/core/colorBlindness.js.map +1 -1
  61. package/dist/cjs/core/dragDrop.js +34 -26
  62. package/dist/cjs/core/dragDrop.js.map +1 -1
  63. package/dist/cjs/core/fixes.js +26 -14
  64. package/dist/cjs/core/fixes.js.map +1 -1
  65. package/dist/cjs/core/gridGuides.js +24 -16
  66. package/dist/cjs/core/gridGuides.js.map +1 -1
  67. package/dist/cjs/core/historyVisual.js +42 -23
  68. package/dist/cjs/core/historyVisual.js.map +1 -1
  69. package/dist/cjs/core/integrations.js +65 -48
  70. package/dist/cjs/core/integrations.js.map +1 -1
  71. package/dist/cjs/core/minimap.js +40 -24
  72. package/dist/cjs/core/minimap.js.map +1 -1
  73. package/dist/cjs/core/plugins.js +10 -6
  74. package/dist/cjs/core/plugins.js.map +1 -1
  75. package/dist/cjs/core/rtl.js +32 -27
  76. package/dist/cjs/core/rtl.js.map +1 -1
  77. package/dist/cjs/core/shortcuts.js +77 -39
  78. package/dist/cjs/core/shortcuts.js.map +1 -1
  79. package/dist/cjs/core/theme.js +68 -61
  80. package/dist/cjs/core/theme.js.map +1 -1
  81. package/dist/cjs/core/yjsCollaboration.js +61 -28
  82. package/dist/cjs/core/yjsCollaboration.js.map +1 -1
  83. package/dist/cjs/font/NiceFontEditor.js +160 -57
  84. package/dist/cjs/font/NiceFontEditor.js.map +1 -1
  85. package/dist/cjs/font/fontFormatUtils.js +37 -24
  86. package/dist/cjs/font/fontFormatUtils.js.map +1 -1
  87. package/dist/cjs/game/GameAsset2dEditor.js +73 -60
  88. package/dist/cjs/game/GameAsset2dEditor.js.map +1 -1
  89. package/dist/cjs/game/gameAssetUtils.js +18 -13
  90. package/dist/cjs/game/gameAssetUtils.js.map +1 -1
  91. package/dist/cjs/game/useGameAssetEditor.js +160 -143
  92. package/dist/cjs/game/useGameAssetEditor.js.map +1 -1
  93. package/dist/cjs/icon/NiceIconEditor.js +329 -106
  94. package/dist/cjs/icon/NiceIconEditor.js.map +1 -1
  95. package/dist/cjs/packages/ui/dist/NiceErrorBoundary-D75yr_WE.js +572 -0
  96. package/dist/cjs/packages/ui/dist/NiceErrorBoundary-D75yr_WE.js.map +1 -0
  97. package/dist/cjs/packages/ui/dist/NiceForm-CKoJA6NG.js +4979 -0
  98. package/dist/cjs/packages/ui/dist/NiceForm-CKoJA6NG.js.map +1 -0
  99. package/dist/cjs/packages/ui/dist/NiceModal-1QX7NhyH.js +98 -0
  100. package/dist/cjs/packages/ui/dist/NiceModal-1QX7NhyH.js.map +1 -0
  101. package/dist/cjs/packages/ui/dist/NiceModuleLifecyclePanel-CMrPbSw9.js +5244 -0
  102. package/dist/cjs/packages/ui/dist/NiceModuleLifecyclePanel-CMrPbSw9.js.map +1 -0
  103. package/dist/cjs/packages/ui/dist/NicePagination-DbE-uOkl.js +174 -0
  104. package/dist/cjs/packages/ui/dist/NicePagination-DbE-uOkl.js.map +1 -0
  105. package/dist/cjs/packages/ui/dist/NicePinCodeInput-B8cI8zu8.js +10459 -0
  106. package/dist/cjs/packages/ui/dist/NicePinCodeInput-B8cI8zu8.js.map +1 -0
  107. package/dist/cjs/packages/ui/dist/NiceSavedQueryPanel-CZ5bYOe_.js +6313 -0
  108. package/dist/cjs/packages/ui/dist/NiceSavedQueryPanel-CZ5bYOe_.js.map +1 -0
  109. package/dist/cjs/packages/ui/dist/NiceTabs-DzLHzwuA.js +1639 -0
  110. package/dist/cjs/packages/ui/dist/NiceTabs-DzLHzwuA.js.map +1 -0
  111. package/dist/cjs/packages/ui/dist/NiceWindow-DeC83yfE.js +807 -0
  112. package/dist/cjs/packages/ui/dist/NiceWindow-DeC83yfE.js.map +1 -0
  113. package/dist/cjs/packages/ui/dist/charts-BAS21jkC.js +3833 -0
  114. package/dist/cjs/packages/ui/dist/charts-BAS21jkC.js.map +1 -0
  115. package/dist/cjs/packages/ui/dist/core-Da43q-pO.js +11683 -0
  116. package/dist/cjs/packages/ui/dist/core-Da43q-pO.js.map +1 -0
  117. package/dist/cjs/packages/ui/dist/index-pAuGTbuB.js +28876 -0
  118. package/dist/cjs/packages/ui/dist/index-pAuGTbuB.js.map +1 -0
  119. package/dist/cjs/photo/FilterThumb.js +7 -5
  120. package/dist/cjs/photo/FilterThumb.js.map +1 -1
  121. package/dist/cjs/photo/NiceAITools.js +78 -32
  122. package/dist/cjs/photo/NiceAITools.js.map +1 -1
  123. package/dist/cjs/photo/PhotoEditor.js +4 -4
  124. package/dist/cjs/photo/PhotoEditor.js.map +1 -1
  125. package/dist/cjs/photo/PhotoEditorCanvas.js +56 -22
  126. package/dist/cjs/photo/PhotoEditorCanvas.js.map +1 -1
  127. package/dist/cjs/photo/PhotoEditorLeftPanel.js +106 -48
  128. package/dist/cjs/photo/PhotoEditorLeftPanel.js.map +1 -1
  129. package/dist/cjs/photo/PhotoEditorToolbar.js +2 -2
  130. package/dist/cjs/photo/PhotoEditorToolbar.js.map +1 -1
  131. package/dist/cjs/photo/photoEditorActions.js +27 -18
  132. package/dist/cjs/photo/photoEditorActions.js.map +1 -1
  133. package/dist/cjs/photo/photoFilters.js +316 -81
  134. package/dist/cjs/photo/photoFilters.js.map +1 -1
  135. package/dist/cjs/photo/photoOverlays.js +521 -165
  136. package/dist/cjs/photo/photoOverlays.js.map +1 -1
  137. package/dist/cjs/photo/photoSelection.js +69 -35
  138. package/dist/cjs/photo/photoSelection.js.map +1 -1
  139. package/dist/cjs/photo/usePhotoEditor.js +203 -97
  140. package/dist/cjs/photo/usePhotoEditor.js.map +1 -1
  141. package/dist/cjs/pixel/HSVPicker.js +32 -19
  142. package/dist/cjs/pixel/HSVPicker.js.map +1 -1
  143. package/dist/cjs/pixel/PixelEditor.js +25 -14
  144. package/dist/cjs/pixel/PixelEditor.js.map +1 -1
  145. package/dist/cjs/pixel/PixelEditorCanvas.js +2 -2
  146. package/dist/cjs/pixel/PixelEditorCanvas.js.map +1 -1
  147. package/dist/cjs/pixel/PixelEditorMenuBar.js +3 -3
  148. package/dist/cjs/pixel/PixelEditorMenuBar.js.map +1 -1
  149. package/dist/cjs/pixel/PixelEditorRightPanel.js +28 -8
  150. package/dist/cjs/pixel/PixelEditorRightPanel.js.map +1 -1
  151. package/dist/cjs/pixel/PixelEditorStatusBar.js +2 -2
  152. package/dist/cjs/pixel/PixelEditorStatusBar.js.map +1 -1
  153. package/dist/cjs/pixel/PixelEditorTimeline.js +3 -4
  154. package/dist/cjs/pixel/PixelEditorTimeline.js.map +1 -1
  155. package/dist/cjs/pixel/PixelEditorToolbar.js +3 -3
  156. package/dist/cjs/pixel/PixelEditorToolbar.js.map +1 -1
  157. package/dist/cjs/pixel/SpriteGeneratorPanel.js +136 -54
  158. package/dist/cjs/pixel/SpriteGeneratorPanel.js.map +1 -1
  159. package/dist/cjs/pixel/asepriteFormat.js +122 -38
  160. package/dist/cjs/pixel/asepriteFormat.js.map +1 -1
  161. package/dist/cjs/pixel/characterGeneratorPresets.js +208 -54
  162. package/dist/cjs/pixel/characterGeneratorPresets.js.map +1 -1
  163. package/dist/cjs/pixel/pixelEditorExports.js +42 -35
  164. package/dist/cjs/pixel/pixelEditorExports.js.map +1 -1
  165. package/dist/cjs/pixel/pixelEditorTypes.js +67 -33
  166. package/dist/cjs/pixel/pixelEditorTypes.js.map +1 -1
  167. package/dist/cjs/pixel/pixelEditorUtils.js +62 -38
  168. package/dist/cjs/pixel/pixelEditorUtils.js.map +1 -1
  169. package/dist/cjs/pixel/spriteGeneratorCore.js +47 -24
  170. package/dist/cjs/pixel/spriteGeneratorCore.js.map +1 -1
  171. package/dist/cjs/pixel/usePixelEditor.js +475 -213
  172. package/dist/cjs/pixel/usePixelEditor.js.map +1 -1
  173. package/dist/cjs/texture/Nice3DTexturePainter.js +201 -71
  174. package/dist/cjs/texture/Nice3DTexturePainter.js.map +1 -1
  175. package/dist/cjs/ui/NiceUIDesigner.js +280 -91
  176. package/dist/cjs/ui/NiceUIDesigner.js.map +1 -1
  177. package/dist/cjs/vector/NiceSvgToCode.js +96 -34
  178. package/dist/cjs/vector/NiceSvgToCode.js.map +1 -1
  179. package/dist/cjs/vector/VectorEditor.js +14 -13
  180. package/dist/cjs/vector/VectorEditor.js.map +1 -1
  181. package/dist/cjs/vector/VectorEditorMenuBar.js +7 -6
  182. package/dist/cjs/vector/VectorEditorMenuBar.js.map +1 -1
  183. package/dist/cjs/vector/VectorEditorRightPanel.js +87 -32
  184. package/dist/cjs/vector/VectorEditorRightPanel.js.map +1 -1
  185. package/dist/cjs/vector/VectorEditorShapeRenderer.js +17 -15
  186. package/dist/cjs/vector/VectorEditorShapeRenderer.js.map +1 -1
  187. package/dist/cjs/vector/VectorEditorStatusBar.js.map +1 -1
  188. package/dist/cjs/vector/useVectorEditor.js +312 -122
  189. package/dist/cjs/vector/useVectorEditor.js.map +1 -1
  190. package/dist/cjs/vector/vectorBooleanOps.js +60 -42
  191. package/dist/cjs/vector/vectorBooleanOps.js.map +1 -1
  192. package/dist/cjs/vector/vectorEditorExport.js +40 -34
  193. package/dist/cjs/vector/vectorEditorExport.js.map +1 -1
  194. package/dist/cjs/vector/vectorGradients.js +41 -40
  195. package/dist/cjs/vector/vectorGradients.js.map +1 -1
  196. package/dist/esm/animation/AnimatedPerson.js +69 -63
  197. package/dist/esm/animation/AnimatedPerson.js.map +1 -1
  198. package/dist/esm/animation/AnimationEditor.js +27 -20
  199. package/dist/esm/animation/AnimationEditor.js.map +1 -1
  200. package/dist/esm/animation/Audience.js +17 -11
  201. package/dist/esm/animation/Audience.js.map +1 -1
  202. package/dist/esm/animation/BodyRenderer.js +7 -7
  203. package/dist/esm/animation/BodyRenderer.js.map +1 -1
  204. package/dist/esm/animation/animationHelper.js +83 -52
  205. package/dist/esm/animation/animationHelper.js.map +1 -1
  206. package/dist/esm/animation/characterTypes.js +171 -30
  207. package/dist/esm/animation/characterTypes.js.map +1 -1
  208. package/dist/esm/animation/choreoDSL.js +114 -62
  209. package/dist/esm/animation/choreoDSL.js.map +1 -1
  210. package/dist/esm/animation/karaokeIntegration.js +10 -11
  211. package/dist/esm/animation/karaokeIntegration.js.map +1 -1
  212. package/dist/esm/animation/lottieExport.js +15 -9
  213. package/dist/esm/animation/lottieExport.js.map +1 -1
  214. package/dist/esm/animation/motionPath.js +125 -30
  215. package/dist/esm/animation/motionPath.js.map +1 -1
  216. package/dist/esm/animation/physics.js +157 -57
  217. package/dist/esm/animation/physics.js.map +1 -1
  218. package/dist/esm/animation/rig/RigPlayer.js +7 -6
  219. package/dist/esm/animation/rig/RigPlayer.js.map +1 -1
  220. package/dist/esm/animation/rig/RiggedBody.js +7 -7
  221. package/dist/esm/animation/rig/RiggedBody.js.map +1 -1
  222. package/dist/esm/animation/rig/choreoRigBridge.js +52 -29
  223. package/dist/esm/animation/rig/choreoRigBridge.js.map +1 -1
  224. package/dist/esm/animation/rig/poseOps.js +6 -3
  225. package/dist/esm/animation/rig/poseOps.js.map +1 -1
  226. package/dist/esm/animation/shapes/arms.js +7 -6
  227. package/dist/esm/animation/shapes/arms.js.map +1 -1
  228. package/dist/esm/animation/shapes/eyes.js +31 -18
  229. package/dist/esm/animation/shapes/eyes.js.map +1 -1
  230. package/dist/esm/animation/shapes/hair.js +39 -23
  231. package/dist/esm/animation/shapes/hair.js.map +1 -1
  232. package/dist/esm/animation/shapes/heads.js +47 -29
  233. package/dist/esm/animation/shapes/heads.js.map +1 -1
  234. package/dist/esm/animation/shapes/headwear.js +26 -14
  235. package/dist/esm/animation/shapes/headwear.js.map +1 -1
  236. package/dist/esm/animation/shapes/legs.js +7 -6
  237. package/dist/esm/animation/shapes/legs.js.map +1 -1
  238. package/dist/esm/animation/shapes/mouths.js +28 -18
  239. package/dist/esm/animation/shapes/mouths.js.map +1 -1
  240. package/dist/esm/animation/shapes/noses.js +18 -9
  241. package/dist/esm/animation/shapes/noses.js.map +1 -1
  242. package/dist/esm/animation/shapes/outfits.js +25 -14
  243. package/dist/esm/animation/shapes/outfits.js.map +1 -1
  244. package/dist/esm/animation/shapes/torsos.js +5 -4
  245. package/dist/esm/animation/shapes/torsos.js.map +1 -1
  246. package/dist/esm/animation/spineExport.js +33 -26
  247. package/dist/esm/animation/spineExport.js.map +1 -1
  248. package/dist/esm/core/LocalUI.js +16 -16
  249. package/dist/esm/core/LocalUI.js.map +1 -1
  250. package/dist/esm/core/NiceBrushEngine.js +205 -69
  251. package/dist/esm/core/NiceBrushEngine.js.map +1 -1
  252. package/dist/esm/core/collaboration.js +35 -21
  253. package/dist/esm/core/collaboration.js.map +1 -1
  254. package/dist/esm/core/colorBlindness.js +64 -24
  255. package/dist/esm/core/colorBlindness.js.map +1 -1
  256. package/dist/esm/core/dragDrop.js +34 -26
  257. package/dist/esm/core/dragDrop.js.map +1 -1
  258. package/dist/esm/core/fixes.js +26 -14
  259. package/dist/esm/core/fixes.js.map +1 -1
  260. package/dist/esm/core/gridGuides.js +24 -16
  261. package/dist/esm/core/gridGuides.js.map +1 -1
  262. package/dist/esm/core/historyVisual.js +42 -23
  263. package/dist/esm/core/historyVisual.js.map +1 -1
  264. package/dist/esm/core/integrations.js +65 -48
  265. package/dist/esm/core/integrations.js.map +1 -1
  266. package/dist/esm/core/minimap.js +40 -24
  267. package/dist/esm/core/minimap.js.map +1 -1
  268. package/dist/esm/core/plugins.js +10 -6
  269. package/dist/esm/core/plugins.js.map +1 -1
  270. package/dist/esm/core/rtl.js +32 -27
  271. package/dist/esm/core/rtl.js.map +1 -1
  272. package/dist/esm/core/shortcuts.js +77 -39
  273. package/dist/esm/core/shortcuts.js.map +1 -1
  274. package/dist/esm/core/theme.js +68 -61
  275. package/dist/esm/core/theme.js.map +1 -1
  276. package/dist/esm/core/yjsCollaboration.js +61 -28
  277. package/dist/esm/core/yjsCollaboration.js.map +1 -1
  278. package/dist/esm/font/NiceFontEditor.js +160 -57
  279. package/dist/esm/font/NiceFontEditor.js.map +1 -1
  280. package/dist/esm/font/fontFormatUtils.js +37 -24
  281. package/dist/esm/font/fontFormatUtils.js.map +1 -1
  282. package/dist/esm/game/GameAsset2dEditor.js +73 -60
  283. package/dist/esm/game/GameAsset2dEditor.js.map +1 -1
  284. package/dist/esm/game/gameAssetUtils.js +18 -13
  285. package/dist/esm/game/gameAssetUtils.js.map +1 -1
  286. package/dist/esm/game/useGameAssetEditor.js +160 -143
  287. package/dist/esm/game/useGameAssetEditor.js.map +1 -1
  288. package/dist/esm/icon/NiceIconEditor.js +329 -106
  289. package/dist/esm/icon/NiceIconEditor.js.map +1 -1
  290. package/dist/esm/packages/ui/dist/NiceErrorBoundary-D75yr_WE.js +563 -0
  291. package/dist/esm/packages/ui/dist/NiceErrorBoundary-D75yr_WE.js.map +1 -0
  292. package/dist/esm/packages/ui/dist/NiceForm-CKoJA6NG.js +4960 -0
  293. package/dist/esm/packages/ui/dist/NiceForm-CKoJA6NG.js.map +1 -0
  294. package/dist/esm/packages/ui/dist/NiceModal-1QX7NhyH.js +96 -0
  295. package/dist/esm/packages/ui/dist/NiceModal-1QX7NhyH.js.map +1 -0
  296. package/dist/esm/packages/ui/dist/NiceModuleLifecyclePanel-CMrPbSw9.js +5201 -0
  297. package/dist/esm/packages/ui/dist/NiceModuleLifecyclePanel-CMrPbSw9.js.map +1 -0
  298. package/dist/esm/packages/ui/dist/NicePagination-DbE-uOkl.js +172 -0
  299. package/dist/esm/packages/ui/dist/NicePagination-DbE-uOkl.js.map +1 -0
  300. package/dist/esm/packages/ui/dist/NicePinCodeInput-B8cI8zu8.js +10408 -0
  301. package/dist/esm/packages/ui/dist/NicePinCodeInput-B8cI8zu8.js.map +1 -0
  302. package/dist/esm/packages/ui/dist/NiceSavedQueryPanel-CZ5bYOe_.js +6296 -0
  303. package/dist/esm/packages/ui/dist/NiceSavedQueryPanel-CZ5bYOe_.js.map +1 -0
  304. package/dist/esm/packages/ui/dist/NiceTabs-DzLHzwuA.js +1630 -0
  305. package/dist/esm/packages/ui/dist/NiceTabs-DzLHzwuA.js.map +1 -0
  306. package/dist/esm/packages/ui/dist/NiceWindow-DeC83yfE.js +796 -0
  307. package/dist/esm/packages/ui/dist/NiceWindow-DeC83yfE.js.map +1 -0
  308. package/dist/esm/packages/ui/dist/charts-BAS21jkC.js +3809 -0
  309. package/dist/esm/packages/ui/dist/charts-BAS21jkC.js.map +1 -0
  310. package/dist/esm/packages/ui/dist/core-Da43q-pO.js +11502 -0
  311. package/dist/esm/packages/ui/dist/core-Da43q-pO.js.map +1 -0
  312. package/dist/esm/packages/ui/dist/index-pAuGTbuB.js +28792 -0
  313. package/dist/esm/packages/ui/dist/index-pAuGTbuB.js.map +1 -0
  314. package/dist/esm/photo/FilterThumb.js +7 -5
  315. package/dist/esm/photo/FilterThumb.js.map +1 -1
  316. package/dist/esm/photo/NiceAITools.js +78 -32
  317. package/dist/esm/photo/NiceAITools.js.map +1 -1
  318. package/dist/esm/photo/PhotoEditor.js +4 -4
  319. package/dist/esm/photo/PhotoEditor.js.map +1 -1
  320. package/dist/esm/photo/PhotoEditorCanvas.js +56 -22
  321. package/dist/esm/photo/PhotoEditorCanvas.js.map +1 -1
  322. package/dist/esm/photo/PhotoEditorLeftPanel.js +106 -48
  323. package/dist/esm/photo/PhotoEditorLeftPanel.js.map +1 -1
  324. package/dist/esm/photo/PhotoEditorToolbar.js +2 -2
  325. package/dist/esm/photo/PhotoEditorToolbar.js.map +1 -1
  326. package/dist/esm/photo/photoEditorActions.js +27 -18
  327. package/dist/esm/photo/photoEditorActions.js.map +1 -1
  328. package/dist/esm/photo/photoFilters.js +316 -81
  329. package/dist/esm/photo/photoFilters.js.map +1 -1
  330. package/dist/esm/photo/photoOverlays.js +521 -165
  331. package/dist/esm/photo/photoOverlays.js.map +1 -1
  332. package/dist/esm/photo/photoSelection.js +69 -35
  333. package/dist/esm/photo/photoSelection.js.map +1 -1
  334. package/dist/esm/photo/usePhotoEditor.js +203 -97
  335. package/dist/esm/photo/usePhotoEditor.js.map +1 -1
  336. package/dist/esm/pixel/HSVPicker.js +32 -19
  337. package/dist/esm/pixel/HSVPicker.js.map +1 -1
  338. package/dist/esm/pixel/PixelEditor.js +25 -14
  339. package/dist/esm/pixel/PixelEditor.js.map +1 -1
  340. package/dist/esm/pixel/PixelEditorCanvas.js +2 -2
  341. package/dist/esm/pixel/PixelEditorCanvas.js.map +1 -1
  342. package/dist/esm/pixel/PixelEditorMenuBar.js +3 -3
  343. package/dist/esm/pixel/PixelEditorMenuBar.js.map +1 -1
  344. package/dist/esm/pixel/PixelEditorRightPanel.js +28 -8
  345. package/dist/esm/pixel/PixelEditorRightPanel.js.map +1 -1
  346. package/dist/esm/pixel/PixelEditorStatusBar.js +2 -2
  347. package/dist/esm/pixel/PixelEditorStatusBar.js.map +1 -1
  348. package/dist/esm/pixel/PixelEditorTimeline.js +3 -4
  349. package/dist/esm/pixel/PixelEditorTimeline.js.map +1 -1
  350. package/dist/esm/pixel/PixelEditorToolbar.js +3 -3
  351. package/dist/esm/pixel/PixelEditorToolbar.js.map +1 -1
  352. package/dist/esm/pixel/SpriteGeneratorPanel.js +136 -54
  353. package/dist/esm/pixel/SpriteGeneratorPanel.js.map +1 -1
  354. package/dist/esm/pixel/asepriteFormat.js +122 -38
  355. package/dist/esm/pixel/asepriteFormat.js.map +1 -1
  356. package/dist/esm/pixel/characterGeneratorPresets.js +208 -54
  357. package/dist/esm/pixel/characterGeneratorPresets.js.map +1 -1
  358. package/dist/esm/pixel/pixelEditorExports.js +42 -35
  359. package/dist/esm/pixel/pixelEditorExports.js.map +1 -1
  360. package/dist/esm/pixel/pixelEditorTypes.js +67 -33
  361. package/dist/esm/pixel/pixelEditorTypes.js.map +1 -1
  362. package/dist/esm/pixel/pixelEditorUtils.js +62 -38
  363. package/dist/esm/pixel/pixelEditorUtils.js.map +1 -1
  364. package/dist/esm/pixel/spriteGeneratorCore.js +47 -24
  365. package/dist/esm/pixel/spriteGeneratorCore.js.map +1 -1
  366. package/dist/esm/pixel/usePixelEditor.js +475 -213
  367. package/dist/esm/pixel/usePixelEditor.js.map +1 -1
  368. package/dist/esm/texture/Nice3DTexturePainter.js +201 -71
  369. package/dist/esm/texture/Nice3DTexturePainter.js.map +1 -1
  370. package/dist/esm/ui/NiceUIDesigner.js +280 -91
  371. package/dist/esm/ui/NiceUIDesigner.js.map +1 -1
  372. package/dist/esm/vector/NiceSvgToCode.js +96 -34
  373. package/dist/esm/vector/NiceSvgToCode.js.map +1 -1
  374. package/dist/esm/vector/VectorEditor.js +14 -13
  375. package/dist/esm/vector/VectorEditor.js.map +1 -1
  376. package/dist/esm/vector/VectorEditorMenuBar.js +7 -6
  377. package/dist/esm/vector/VectorEditorMenuBar.js.map +1 -1
  378. package/dist/esm/vector/VectorEditorRightPanel.js +87 -32
  379. package/dist/esm/vector/VectorEditorRightPanel.js.map +1 -1
  380. package/dist/esm/vector/VectorEditorShapeRenderer.js +17 -15
  381. package/dist/esm/vector/VectorEditorShapeRenderer.js.map +1 -1
  382. package/dist/esm/vector/VectorEditorStatusBar.js.map +1 -1
  383. package/dist/esm/vector/useVectorEditor.js +312 -122
  384. package/dist/esm/vector/useVectorEditor.js.map +1 -1
  385. package/dist/esm/vector/vectorBooleanOps.js +60 -42
  386. package/dist/esm/vector/vectorBooleanOps.js.map +1 -1
  387. package/dist/esm/vector/vectorEditorExport.js +40 -34
  388. package/dist/esm/vector/vectorEditorExport.js.map +1 -1
  389. package/dist/esm/vector/vectorGradients.js +41 -40
  390. package/dist/esm/vector/vectorGradients.js.map +1 -1
  391. package/package.json +2 -2
@@ -11,48 +11,55 @@ var photoOverlays = require('./photoOverlays.js');
11
11
  * Render the current editor state to a JPEG Blob for export.
12
12
  */
13
13
  async function getExportBlob(params) {
14
- const { image, selectedFilter, filterParams, filterIntensity, adjustments, cropRect, rotation, flipH, flipV, overlays } = params;
15
- const exportCanvas = document.createElement("canvas");
14
+ const { image, selectedFilter, filterParams, filterIntensity, adjustments, cropRect, rotation, flipH, flipV, overlays, } = params;
15
+ const exportCanvas = document.createElement('canvas');
16
16
  photoFilters.renderToCanvas(exportCanvas, image, selectedFilter, { ...filterParams, intensity: filterIntensity }, adjustments, cropRect, rotation, flipH, flipV);
17
17
  if (overlays.length > 0) {
18
- const ctx = exportCanvas.getContext("2d");
19
- if (ctx)
18
+ const ctx = exportCanvas.getContext('2d');
19
+ if (ctx) {
20
20
  photoOverlays.renderAllOverlays(ctx, overlays, exportCanvas.width, exportCanvas.height);
21
+ }
21
22
  }
22
- return new Promise(res => exportCanvas.toBlob(b => res(b), "image/jpeg", 0.92));
23
+ return new Promise((res) => exportCanvas.toBlob((b) => res(b), 'image/jpeg', 0.92));
23
24
  }
24
25
  /**
25
26
  * Trigger a browser download of the given Blob as "photo-edited.jpg".
26
27
  */
27
28
  function handleDownloadBlob(blob) {
28
29
  const url = URL.createObjectURL(blob);
29
- const a = document.createElement("a");
30
+ const a = document.createElement('a');
30
31
  a.href = url;
31
- a.download = "photo-edited.jpg";
32
+ a.download = 'photo-edited.jpg';
32
33
  document.body.appendChild(a);
33
34
  a.click();
34
- setTimeout(() => { document.body.removeChild(a); URL.revokeObjectURL(url); }, 200);
35
+ setTimeout(() => {
36
+ document.body.removeChild(a);
37
+ URL.revokeObjectURL(url);
38
+ }, 200);
35
39
  }
36
40
  /**
37
41
  * Copy the current editor output to clipboard as PNG.
38
42
  */
39
43
  async function handleCopyImageToClipboard(params) {
40
- const { image, selectedFilter, filterParams, filterIntensity, adjustments, cropRect, rotation, flipH, flipV, overlays } = params;
44
+ const { image, selectedFilter, filterParams, filterIntensity, adjustments, cropRect, rotation, flipH, flipV, overlays, } = params;
41
45
  try {
42
46
  // Clipboard API requires image/png
43
- const pngCanvas = document.createElement("canvas");
47
+ const pngCanvas = document.createElement('canvas');
44
48
  photoFilters.renderToCanvas(pngCanvas, image, selectedFilter, { ...filterParams, intensity: filterIntensity }, adjustments, cropRect, rotation, flipH, flipV);
45
49
  if (overlays.length > 0) {
46
- const ctx = pngCanvas.getContext("2d");
47
- if (ctx)
50
+ const ctx = pngCanvas.getContext('2d');
51
+ if (ctx) {
48
52
  photoOverlays.renderAllOverlays(ctx, overlays, pngCanvas.width, pngCanvas.height);
53
+ }
49
54
  }
50
- const pngBlob = await new Promise(res => pngCanvas.toBlob(b => res(b), "image/png"));
55
+ const pngBlob = await new Promise((res) => pngCanvas.toBlob((b) => res(b), 'image/png'));
51
56
  if (pngBlob) {
52
- await navigator.clipboard.write([new ClipboardItem({ "image/png": pngBlob })]);
57
+ await navigator.clipboard.write([new ClipboardItem({ 'image/png': pngBlob })]);
53
58
  }
54
59
  }
55
- catch ( /* clipboard write not supported — silent fail */_a) { /* clipboard write not supported — silent fail */ }
60
+ catch (_a) {
61
+ /* clipboard write not supported — silent fail */
62
+ }
56
63
  }
57
64
  /**
58
65
  * Use the Web Share API to share the exported image.
@@ -60,12 +67,14 @@ async function handleCopyImageToClipboard(params) {
60
67
  */
61
68
  async function handleNativeShare(blob) {
62
69
  var _a;
63
- const file = new File([blob], "photo-edited.jpg", { type: "image/jpeg" });
70
+ const file = new File([blob], 'photo-edited.jpg', { type: 'image/jpeg' });
64
71
  if (navigator.share && ((_a = navigator.canShare) === null || _a === void 0 ? void 0 : _a.call(navigator, { files: [file] }))) {
65
72
  try {
66
- await navigator.share({ files: [file], title: "AudioVerse Photo", text: "" });
73
+ await navigator.share({ files: [file], title: 'AudioVerse Photo', text: '' });
74
+ }
75
+ catch (_b) {
76
+ /* user cancelled or not supported */
67
77
  }
68
- catch ( /* user cancelled or not supported */_b) { /* user cancelled or not supported */ }
69
78
  }
70
79
  else {
71
80
  // Fallback — just download
@@ -1 +1 @@
1
- {"version":3,"file":"photoEditorActions.js","sources":["../../../src/photo/photoEditorActions.ts"],"sourcesContent":[null],"names":["renderToCanvas","renderAllOverlays"],"mappings":"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"}
1
+ {"version":3,"file":"photoEditorActions.js","sources":["../../../src/photo/photoEditorActions.ts"],"sourcesContent":[null],"names":["renderToCanvas","renderAllOverlays"],"mappings":"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"}
@@ -34,10 +34,12 @@ function cloneImageData(src) {
34
34
  }
35
35
  /** Mix original and filtered based on intensity */
36
36
  function blendIntensity(original, filtered, intensity) {
37
- if (intensity >= 1)
37
+ if (intensity >= 1) {
38
38
  return filtered;
39
- if (intensity <= 0)
39
+ }
40
+ if (intensity <= 0) {
40
41
  return cloneImageData(original);
42
+ }
41
43
  const out = cloneImageData(original);
42
44
  const od = out.data;
43
45
  const fd = filtered.data;
@@ -306,26 +308,14 @@ function threshold(data, level = 128) {
306
308
  return out;
307
309
  }
308
310
  function emboss(data) {
309
- return convolve(data, [
310
- -2, -1, 0,
311
- -1, 1, 1,
312
- 0, 1, 2,
313
- ]);
311
+ return convolve(data, [-2, -1, 0, -1, 1, 1, 0, 1, 2]);
314
312
  }
315
313
  function edgeDetect(data) {
316
- return convolve(data, [
317
- -1, -1, -1,
318
- -1, 8, -1,
319
- -1, -1, -1,
320
- ]);
314
+ return convolve(data, [-1, -1, -1, -1, 8, -1, -1, -1, -1]);
321
315
  }
322
316
  function sharpen(data, amount = 1) {
323
317
  const k = amount;
324
- return convolve(data, [
325
- 0, -k, 0,
326
- -k, 1 + 4 * k, -k,
327
- 0, -k, 0,
328
- ]);
318
+ return convolve(data, [0, -k, 0, -k, 1 + 4 * k, -k, 0, -k, 0]);
329
319
  }
330
320
  function comicBook(data) {
331
321
  const edges = edgeDetect(data);
@@ -434,7 +424,7 @@ function glitch(data) {
434
424
  if (Math.random() > 0.92) {
435
425
  const shift = Math.floor(Math.random() * 30 - 15);
436
426
  for (let x = 0; x < w; x++) {
437
- const srcX = ((x + shift) % w + w) % w;
427
+ const srcX = (((x + shift) % w) + w) % w;
438
428
  const di = (y * w + x) * 4;
439
429
  const si = (y * w + srcX) * 4;
440
430
  // Red channel from shifted position
@@ -490,7 +480,7 @@ function oilPainting(data, radius = 3) {
490
480
  const ny = Math.min(h - 1, Math.max(0, y + ky));
491
481
  const nx = Math.min(w - 1, Math.max(0, x + kx));
492
482
  const ni = (ny * w + nx) * 4;
493
- const lum = Math.floor(((src[ni] + src[ni + 1] + src[ni + 2]) / 3) * levels / 256);
483
+ const lum = Math.floor((((src[ni] + src[ni + 1] + src[ni + 2]) / 3) * levels) / 256);
494
484
  const li = Math.min(lum, levels - 1);
495
485
  counts[li]++;
496
486
  rSum[li] += src[ni];
@@ -524,8 +514,9 @@ function tiltShift(data) {
524
514
  for (let y = 0; y < h; y++) {
525
515
  const dist = Math.abs(y - centerY);
526
516
  const blurRadius = dist < focusHalf ? 0 : Math.min(6, Math.floor((dist - focusHalf) / (h * 0.1)));
527
- if (blurRadius === 0)
517
+ if (blurRadius === 0) {
528
518
  continue;
519
+ }
529
520
  for (let x = 0; x < w; x++) {
530
521
  let rSum = 0, gSum = 0, bSum = 0, count = 0;
531
522
  for (let ky = -blurRadius; ky <= blurRadius; ky++) {
@@ -670,7 +661,7 @@ function convolve(data, kernel) {
670
661
  const src = data.data;
671
662
  const w = data.width, h = data.height;
672
663
  const size = Math.sqrt(kernel.length) | 0;
673
- const half = (size >> 1);
664
+ const half = size >> 1;
674
665
  for (let y = 0; y < h; y++) {
675
666
  for (let x = 0; x < w; x++) {
676
667
  let r = 0, g = 0, b = 0;
@@ -709,22 +700,24 @@ function hexToRgb(hex) {
709
700
  }
710
701
  // ── Canvas helpers for vignette & grain (applied via context) ──
711
702
  function applyVignette(ctx, w, h, amount) {
712
- if (amount <= 0)
703
+ if (amount <= 0) {
713
704
  return;
705
+ }
714
706
  const cx = w / 2, cy = h / 2;
715
707
  const radius = Math.max(w, h) * 0.7;
716
708
  const grad = ctx.createRadialGradient(cx, cy, radius * 0.4, cx, cy, radius);
717
709
  grad.addColorStop(0, 'rgba(0,0,0,0)');
718
- grad.addColorStop(1, `rgba(0,0,0,${amount / 100 * 0.7})`);
710
+ grad.addColorStop(1, `rgba(0,0,0,${(amount / 100) * 0.7})`);
719
711
  ctx.fillStyle = grad;
720
712
  ctx.fillRect(0, 0, w, h);
721
713
  }
722
714
  function applyGrain(ctx, w, h, amount) {
723
- if (amount <= 0)
715
+ if (amount <= 0) {
724
716
  return;
717
+ }
725
718
  const imageData = ctx.getImageData(0, 0, w, h);
726
719
  const d = imageData.data;
727
- const intensity = amount / 100 * 50;
720
+ const intensity = (amount / 100) * 50;
728
721
  for (let i = 0; i < d.length; i += 4) {
729
722
  const noise = (Math.random() - 0.5) * intensity;
730
723
  d[i] = clamp(d[i] + noise);
@@ -737,88 +730,326 @@ function applyGrain(ctx, w, h, amount) {
737
730
  const PHOTO_FILTERS = [
738
731
  // Color
739
732
  { id: 'none', name: 'Oryginał', category: 'color', icon: '🔲', apply: (d) => cloneImageData(d) },
740
- { id: 'grayscale', name: 'Cz/B', category: 'color', icon: '⬛', apply: (d, p) => { var _a; return blendIntensity(d, grayscale(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); } },
741
- { id: 'sepia', name: 'Sepia', category: 'color', icon: '🟤', apply: (d, p) => { var _a; return blendIntensity(d, sepia(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); } },
742
- { id: 'invert', name: 'Negatyw', category: 'color', icon: '🔄', apply: (d, p) => { var _a; return blendIntensity(d, invert(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); } },
743
- { id: 'duotone', name: 'Duotone', category: 'color', icon: '🎨', apply: (d, p) => { var _a; return blendIntensity(d, duotone(d, p), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); } },
744
- { id: 'channelShift', name: 'Channel Shift', category: 'color', icon: '🌈', apply: (d, p) => { var _a; return blendIntensity(d, channelShift(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); } },
745
- { id: 'threshold', name: 'Próg', category: 'color', icon: '⚫', apply: (d, p) => { var _a; return blendIntensity(d, threshold(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); } },
746
- { id: 'pop', name: 'Pop', category: 'color', icon: '💥', apply: (d, p) => { var _a; return blendIntensity(d, pop(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); } },
733
+ {
734
+ id: 'grayscale',
735
+ name: 'Cz/B',
736
+ category: 'color',
737
+ icon: '⬛',
738
+ apply: (d, p) => { var _a; return blendIntensity(d, grayscale(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); },
739
+ },
740
+ {
741
+ id: 'sepia',
742
+ name: 'Sepia',
743
+ category: 'color',
744
+ icon: '🟤',
745
+ apply: (d, p) => { var _a; return blendIntensity(d, sepia(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); },
746
+ },
747
+ {
748
+ id: 'invert',
749
+ name: 'Negatyw',
750
+ category: 'color',
751
+ icon: '🔄',
752
+ apply: (d, p) => { var _a; return blendIntensity(d, invert(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); },
753
+ },
754
+ {
755
+ id: 'duotone',
756
+ name: 'Duotone',
757
+ category: 'color',
758
+ icon: '🎨',
759
+ apply: (d, p) => { var _a; return blendIntensity(d, duotone(d, p), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); },
760
+ },
761
+ {
762
+ id: 'channelShift',
763
+ name: 'Channel Shift',
764
+ category: 'color',
765
+ icon: '🌈',
766
+ apply: (d, p) => { var _a; return blendIntensity(d, channelShift(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); },
767
+ },
768
+ {
769
+ id: 'threshold',
770
+ name: 'PrĂłg',
771
+ category: 'color',
772
+ icon: '⚫',
773
+ apply: (d, p) => { var _a; return blendIntensity(d, threshold(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); },
774
+ },
775
+ {
776
+ id: 'pop',
777
+ name: 'Pop',
778
+ category: 'color',
779
+ icon: '💥',
780
+ apply: (d, p) => { var _a; return blendIntensity(d, pop(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); },
781
+ },
747
782
  // Light
748
- { id: 'dreamyGlow', name: 'Dreamy Glow', category: 'light', icon: '✨', apply: (d, p) => { var _a; return blendIntensity(d, dreamyGlow(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); } },
749
- { id: 'lomoLeaks', name: 'Light Leaks', category: 'light', icon: '☀️', apply: (d, p) => { var _a; return blendIntensity(d, lomoLeaks(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); } },
750
- { id: 'fadeOut', name: 'Fade', category: 'light', icon: '🌫️', apply: (d, p) => { var _a; return blendIntensity(d, fadeOut(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); } },
751
- { id: 'golden', name: 'Golden', category: 'light', icon: '🌟', apply: (d, p) => { var _a; return blendIntensity(d, golden(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); } },
752
- { id: 'sunset', name: 'Sunset', category: 'light', icon: '🌅', apply: (d, p) => { var _a; return blendIntensity(d, sunset(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); } },
753
- { id: 'moody', name: 'Moody', category: 'light', icon: '🌑', apply: (d, p) => { var _a; return blendIntensity(d, moody(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); } },
754
- { id: 'arctic', name: 'Arctic', category: 'light', icon: '❄️', apply: (d, p) => { var _a; return blendIntensity(d, arctic(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); } },
783
+ {
784
+ id: 'dreamyGlow',
785
+ name: 'Dreamy Glow',
786
+ category: 'light',
787
+ icon: '✨',
788
+ apply: (d, p) => { var _a; return blendIntensity(d, dreamyGlow(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); },
789
+ },
790
+ {
791
+ id: 'lomoLeaks',
792
+ name: 'Light Leaks',
793
+ category: 'light',
794
+ icon: '☀️',
795
+ apply: (d, p) => { var _a; return blendIntensity(d, lomoLeaks(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); },
796
+ },
797
+ {
798
+ id: 'fadeOut',
799
+ name: 'Fade',
800
+ category: 'light',
801
+ icon: '🌫️',
802
+ apply: (d, p) => { var _a; return blendIntensity(d, fadeOut(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); },
803
+ },
804
+ {
805
+ id: 'golden',
806
+ name: 'Golden',
807
+ category: 'light',
808
+ icon: '🌟',
809
+ apply: (d, p) => { var _a; return blendIntensity(d, golden(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); },
810
+ },
811
+ {
812
+ id: 'sunset',
813
+ name: 'Sunset',
814
+ category: 'light',
815
+ icon: '🌅',
816
+ apply: (d, p) => { var _a; return blendIntensity(d, sunset(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); },
817
+ },
818
+ {
819
+ id: 'moody',
820
+ name: 'Moody',
821
+ category: 'light',
822
+ icon: '🌑',
823
+ apply: (d, p) => { var _a; return blendIntensity(d, moody(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); },
824
+ },
825
+ {
826
+ id: 'arctic',
827
+ name: 'Arctic',
828
+ category: 'light',
829
+ icon: '❄️',
830
+ apply: (d, p) => { var _a; return blendIntensity(d, arctic(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); },
831
+ },
755
832
  // Vintage
756
- { id: 'vintageFilm', name: 'Vintage Film', category: 'vintage', icon: '🎞️', apply: (d, p) => { var _a; return blendIntensity(d, vintageFilm(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); } },
757
- { id: 'kodachrome', name: 'Kodachrome', category: 'vintage', icon: '📷', apply: (d, p) => { var _a; return blendIntensity(d, kodachrome(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); } },
758
- { id: 'polaroid', name: 'Polaroid', category: 'vintage', icon: '📸', apply: (d, p) => { var _a; return blendIntensity(d, polaroid(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); } },
759
- { id: 'technicolor', name: 'Technicolor', category: 'vintage', icon: '🎬', apply: (d, p) => { var _a; return blendIntensity(d, technicolor(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); } },
760
- { id: 'brownie', name: 'Brownie', category: 'vintage', icon: '🍫', apply: (d, p) => { var _a; return blendIntensity(d, brownie(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); } },
761
- { id: 'crossProcess', name: 'Cross Process', category: 'vintage', icon: '🧪', apply: (d, p) => { var _a; return blendIntensity(d, crossProcess(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); } },
833
+ {
834
+ id: 'vintageFilm',
835
+ name: 'Vintage Film',
836
+ category: 'vintage',
837
+ icon: '🎞️',
838
+ apply: (d, p) => { var _a; return blendIntensity(d, vintageFilm(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); },
839
+ },
840
+ {
841
+ id: 'kodachrome',
842
+ name: 'Kodachrome',
843
+ category: 'vintage',
844
+ icon: '📷',
845
+ apply: (d, p) => { var _a; return blendIntensity(d, kodachrome(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); },
846
+ },
847
+ {
848
+ id: 'polaroid',
849
+ name: 'Polaroid',
850
+ category: 'vintage',
851
+ icon: '📸',
852
+ apply: (d, p) => { var _a; return blendIntensity(d, polaroid(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); },
853
+ },
854
+ {
855
+ id: 'technicolor',
856
+ name: 'Technicolor',
857
+ category: 'vintage',
858
+ icon: '🎬',
859
+ apply: (d, p) => { var _a; return blendIntensity(d, technicolor(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); },
860
+ },
861
+ {
862
+ id: 'brownie',
863
+ name: 'Brownie',
864
+ category: 'vintage',
865
+ icon: '🍫',
866
+ apply: (d, p) => { var _a; return blendIntensity(d, brownie(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); },
867
+ },
868
+ {
869
+ id: 'crossProcess',
870
+ name: 'Cross Process',
871
+ category: 'vintage',
872
+ icon: '🧪',
873
+ apply: (d, p) => { var _a; return blendIntensity(d, crossProcess(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); },
874
+ },
762
875
  // Artistic
763
- { id: 'pencilSketch', name: 'Ołówek', category: 'artistic', icon: '✏️', apply: (d, p) => { var _a; return blendIntensity(d, pencilSketch(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); } },
764
- { id: 'oilPainting', name: 'Olej', category: 'artistic', icon: '🎨', apply: (d, p) => { var _a; return blendIntensity(d, oilPainting(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); } },
765
- { id: 'watercolor', name: 'Akwarela', category: 'artistic', icon: '🖌️', apply: (d, p) => { var _a; return blendIntensity(d, watercolor(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); } },
766
- { id: 'comicBook', name: 'Komiks', category: 'artistic', icon: '💬', apply: (d, p) => { var _a; return blendIntensity(d, comicBook(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); } },
767
- { id: 'posterize', name: 'Plakat', category: 'artistic', icon: '🖼️', apply: (d, p) => { var _a; return blendIntensity(d, posterize(d, 5), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); } },
768
- { id: 'emboss', name: 'Płaskorzeźba', category: 'artistic', icon: '🗿', apply: (d, p) => { var _a; return blendIntensity(d, emboss(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); } },
769
- { id: 'edgeDetect', name: 'Krawędzie', category: 'artistic', icon: '🔍', apply: (d, p) => { var _a; return blendIntensity(d, edgeDetect(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); } },
770
- { id: 'tiltShift', name: 'Tilt Shift', category: 'artistic', icon: '🔭', apply: (d, p) => { var _a; return blendIntensity(d, tiltShift(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); } },
876
+ {
877
+ id: 'pencilSketch',
878
+ name: 'Ołówek',
879
+ category: 'artistic',
880
+ icon: '✏️',
881
+ apply: (d, p) => { var _a; return blendIntensity(d, pencilSketch(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); },
882
+ },
883
+ {
884
+ id: 'oilPainting',
885
+ name: 'Olej',
886
+ category: 'artistic',
887
+ icon: '🎨',
888
+ apply: (d, p) => { var _a; return blendIntensity(d, oilPainting(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); },
889
+ },
890
+ {
891
+ id: 'watercolor',
892
+ name: 'Akwarela',
893
+ category: 'artistic',
894
+ icon: '🖌️',
895
+ apply: (d, p) => { var _a; return blendIntensity(d, watercolor(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); },
896
+ },
897
+ {
898
+ id: 'comicBook',
899
+ name: 'Komiks',
900
+ category: 'artistic',
901
+ icon: '💬',
902
+ apply: (d, p) => { var _a; return blendIntensity(d, comicBook(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); },
903
+ },
904
+ {
905
+ id: 'posterize',
906
+ name: 'Plakat',
907
+ category: 'artistic',
908
+ icon: '🖼️',
909
+ apply: (d, p) => { var _a; return blendIntensity(d, posterize(d, 5), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); },
910
+ },
911
+ {
912
+ id: 'emboss',
913
+ name: 'Płaskorzeźba',
914
+ category: 'artistic',
915
+ icon: '🗿',
916
+ apply: (d, p) => { var _a; return blendIntensity(d, emboss(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); },
917
+ },
918
+ {
919
+ id: 'edgeDetect',
920
+ name: 'Krawędzie',
921
+ category: 'artistic',
922
+ icon: '🔍',
923
+ apply: (d, p) => { var _a; return blendIntensity(d, edgeDetect(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); },
924
+ },
925
+ {
926
+ id: 'tiltShift',
927
+ name: 'Tilt Shift',
928
+ category: 'artistic',
929
+ icon: '🔭',
930
+ apply: (d, p) => { var _a; return blendIntensity(d, tiltShift(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); },
931
+ },
771
932
  // Fun
772
- { id: 'cyberpunk', name: 'Cyberpunk', category: 'fun', icon: '🤖', apply: (d, p) => { var _a; return blendIntensity(d, cyberpunk(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); } },
773
- { id: 'retroWave', name: 'Retrowave', category: 'fun', icon: '🕹️', apply: (d, p) => { var _a; return blendIntensity(d, retroWave(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); } },
774
- { id: 'nightVision', name: 'Night Vision', category: 'fun', icon: '🌙', apply: (d, p) => { var _a; return blendIntensity(d, nightVision(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); } },
775
- { id: 'xRay', name: 'X-Ray', category: 'fun', icon: '☠️', apply: (d, p) => { var _a; return blendIntensity(d, xRay(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); } },
776
- { id: 'heatMap', name: 'Heat Map', category: 'fun', icon: '🔥', apply: (d, p) => { var _a; return blendIntensity(d, heatMap(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); } },
777
- { id: 'radioactive', name: 'Radioactive', category: 'fun', icon: '☢️', apply: (d, p) => { var _a; return blendIntensity(d, radioactive(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); } },
778
- { id: 'glitch', name: 'Glitch', category: 'fun', icon: '📺', apply: (d, p) => { var _a; return blendIntensity(d, glitch(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); } },
779
- { id: 'pixelate', name: 'Piksele', category: 'fun', icon: '🟩', apply: (d, p) => { var _a; return blendIntensity(d, pixelate(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); } },
780
- { id: 'frostedGlass', name: 'Matowe szkło', category: 'fun', icon: '🧊', apply: (d, p) => { var _a; return blendIntensity(d, frostedGlass(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); } },
781
- { id: 'solarize', name: 'Solaryzacja', category: 'fun', icon: '🌞', apply: (d, p) => { var _a; return blendIntensity(d, solarize(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); } },
933
+ {
934
+ id: 'cyberpunk',
935
+ name: 'Cyberpunk',
936
+ category: 'fun',
937
+ icon: '🤖',
938
+ apply: (d, p) => { var _a; return blendIntensity(d, cyberpunk(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); },
939
+ },
940
+ {
941
+ id: 'retroWave',
942
+ name: 'Retrowave',
943
+ category: 'fun',
944
+ icon: '🕹️',
945
+ apply: (d, p) => { var _a; return blendIntensity(d, retroWave(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); },
946
+ },
947
+ {
948
+ id: 'nightVision',
949
+ name: 'Night Vision',
950
+ category: 'fun',
951
+ icon: '🌙',
952
+ apply: (d, p) => { var _a; return blendIntensity(d, nightVision(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); },
953
+ },
954
+ {
955
+ id: 'xRay',
956
+ name: 'X-Ray',
957
+ category: 'fun',
958
+ icon: '☠️',
959
+ apply: (d, p) => { var _a; return blendIntensity(d, xRay(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); },
960
+ },
961
+ {
962
+ id: 'heatMap',
963
+ name: 'Heat Map',
964
+ category: 'fun',
965
+ icon: '🔥',
966
+ apply: (d, p) => { var _a; return blendIntensity(d, heatMap(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); },
967
+ },
968
+ {
969
+ id: 'radioactive',
970
+ name: 'Radioactive',
971
+ category: 'fun',
972
+ icon: '☢️',
973
+ apply: (d, p) => { var _a; return blendIntensity(d, radioactive(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); },
974
+ },
975
+ {
976
+ id: 'glitch',
977
+ name: 'Glitch',
978
+ category: 'fun',
979
+ icon: '📺',
980
+ apply: (d, p) => { var _a; return blendIntensity(d, glitch(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); },
981
+ },
982
+ {
983
+ id: 'pixelate',
984
+ name: 'Piksele',
985
+ category: 'fun',
986
+ icon: '🟩',
987
+ apply: (d, p) => { var _a; return blendIntensity(d, pixelate(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); },
988
+ },
989
+ {
990
+ id: 'frostedGlass',
991
+ name: 'Matowe szkło',
992
+ category: 'fun',
993
+ icon: '🧊',
994
+ apply: (d, p) => { var _a; return blendIntensity(d, frostedGlass(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); },
995
+ },
996
+ {
997
+ id: 'solarize',
998
+ name: 'Solaryzacja',
999
+ category: 'fun',
1000
+ icon: '🌞',
1001
+ apply: (d, p) => { var _a; return blendIntensity(d, solarize(d), (_a = p === null || p === void 0 ? void 0 : p.intensity) !== null && _a !== void 0 ? _a : 1); },
1002
+ },
782
1003
  ];
783
1004
  /** Get filter by ID */
784
1005
  function getFilter(id) {
785
- return PHOTO_FILTERS.find(f => f.id === id);
1006
+ return PHOTO_FILTERS.find((f) => f.id === id);
786
1007
  }
787
1008
  /** Apply adjustments to ImageData */
788
1009
  function applyAdjustments(data, adj) {
789
1010
  let out = data;
790
- if (adj.exposure && adj.exposure !== 0)
1011
+ if (adj.exposure && adj.exposure !== 0) {
791
1012
  out = adjustExposure(out, adj.exposure);
792
- if (adj.brightness && adj.brightness !== 0)
1013
+ }
1014
+ if (adj.brightness && adj.brightness !== 0) {
793
1015
  out = adjustBrightness(out, adj.brightness);
794
- if (adj.contrast && adj.contrast !== 0)
1016
+ }
1017
+ if (adj.contrast && adj.contrast !== 0) {
795
1018
  out = adjustContrast(out, adj.contrast);
796
- if (adj.saturation && adj.saturation !== 0)
1019
+ }
1020
+ if (adj.saturation && adj.saturation !== 0) {
797
1021
  out = adjustSaturation(out, adj.saturation);
798
- if (adj.temperature && adj.temperature !== 0)
1022
+ }
1023
+ if (adj.temperature && adj.temperature !== 0) {
799
1024
  out = adjustTemperature(out, adj.temperature);
800
- if (adj.tint && adj.tint !== 0)
1025
+ }
1026
+ if (adj.tint && adj.tint !== 0) {
801
1027
  out = adjustTint(out, adj.tint);
802
- if (adj.highlights && adj.highlights !== 0)
1028
+ }
1029
+ if (adj.highlights && adj.highlights !== 0) {
803
1030
  out = adjustHighlights(out, adj.highlights);
804
- if (adj.shadows && adj.shadows !== 0)
1031
+ }
1032
+ if (adj.shadows && adj.shadows !== 0) {
805
1033
  out = adjustShadows(out, adj.shadows);
806
- if (adj.sharpness && adj.sharpness > 0)
1034
+ }
1035
+ if (adj.sharpness && adj.sharpness > 0) {
807
1036
  out = sharpen(out, adj.sharpness / 100);
1037
+ }
808
1038
  return out;
809
1039
  }
810
1040
  /** Full pipeline: filter + adjustments → canvas, then vignette & grain via context */
811
1041
  function renderToCanvas(canvas, sourceImage, filterId, filterParams, adjustments, cropRect, rotation, flipH, flipV) {
812
1042
  const ctx = canvas.getContext('2d', { willReadFrequently: true });
813
- if (!ctx)
1043
+ if (!ctx) {
814
1044
  return;
1045
+ }
815
1046
  // Source dimensions
816
1047
  const sw = sourceImage.naturalWidth;
817
1048
  const sh = sourceImage.naturalHeight;
818
1049
  // Crop region (in source pixels)
819
1050
  const crop = cropRect !== null && cropRect !== void 0 ? cropRect : { x: 0, y: 0, w: sw, h: sh };
820
1051
  // Rotation affects output dimensions
821
- const rot = ((rotation !== null && rotation !== void 0 ? rotation : 0) % 360 + 360) % 360;
1052
+ const rot = (((rotation !== null && rotation !== void 0 ? rotation : 0) % 360) + 360) % 360;
822
1053
  const swapped = rot === 90 || rot === 270;
823
1054
  const outW = swapped ? crop.h : crop.w;
824
1055
  const outH = swapped ? crop.w : crop.h;
@@ -826,12 +1057,15 @@ function renderToCanvas(canvas, sourceImage, filterId, filterParams, adjustments
826
1057
  canvas.height = outH;
827
1058
  ctx.save();
828
1059
  ctx.translate(outW / 2, outH / 2);
829
- if (rot)
1060
+ if (rot) {
830
1061
  ctx.rotate((rot * Math.PI) / 180);
831
- if (flipH)
1062
+ }
1063
+ if (flipH) {
832
1064
  ctx.scale(-1, 1);
833
- if (flipV)
1065
+ }
1066
+ if (flipV) {
834
1067
  ctx.scale(1, -1);
1068
+ }
835
1069
  ctx.drawImage(sourceImage, crop.x, crop.y, crop.w, crop.h, -crop.w / 2, -crop.h / 2, crop.w, crop.h);
836
1070
  ctx.restore();
837
1071
  // Apply filter
@@ -844,7 +1078,7 @@ function renderToCanvas(canvas, sourceImage, filterId, filterParams, adjustments
844
1078
  }
845
1079
  }
846
1080
  // Apply adjustments
847
- const hasAdj = Object.values(adjustments).some(v => v !== 0 && v !== undefined);
1081
+ const hasAdj = Object.values(adjustments).some((v) => v !== 0 && v !== undefined);
848
1082
  if (hasAdj) {
849
1083
  const imgData = ctx.getImageData(0, 0, outW, outH);
850
1084
  const adjusted = applyAdjustments(imgData, adjustments);
@@ -861,9 +1095,10 @@ function renderToCanvas(canvas, sourceImage, filterId, filterParams, adjustments
861
1095
  /** Export canvas as File (for upload) */
862
1096
  function canvasToFile(canvas, filename = 'photo.jpg', quality = 0.92) {
863
1097
  return new Promise((resolve, reject) => {
864
- canvas.toBlob(blob => {
865
- if (!blob)
1098
+ canvas.toBlob((blob) => {
1099
+ if (!blob) {
866
1100
  return reject(new Error('Canvas toBlob failed'));
1101
+ }
867
1102
  resolve(new File([blob], filename, { type: 'image/jpeg' }));
868
1103
  }, 'image/jpeg', quality);
869
1104
  });