@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,276 +1,336 @@
1
- import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
- import { NiceMenu, NiceSelect, NiceCheckbox, NiceButton } from '@nice2dev/ui';
3
- import { NiceIcon } from '@nice2dev/ui-core';
4
- import React, { useMemo } from 'react';
5
- import { useNiceTranslation } from '../core/i18n.js';
6
- import styles from './VectorEditor.module.css.js';
7
-
1
+ import { jsx, jsxs, Fragment } from "react/jsx-runtime";
2
+ import { NiceMenu, NiceSelect, NiceCheckbox, NiceButton } from "@nice2dev/ui";
3
+ import { NiceIcon } from "@nice2dev/ui-core";
4
+ import React, { useMemo } from "react";
5
+ import { useNiceTranslation } from "../core/i18n.js";
6
+ import styles from "./VectorEditor.module.css.js";
8
7
  const VectorEditorMenuBar$1 = ({ api, hasOnSaveToLibrary, onExportIconSnippet }) => {
9
- const { t } = useNiceTranslation();
10
- const { selId, hasClipboard, snapGrid, fInp, shapes, boolSecondShape, newCanvas, setDlgSvg, setBoolSecondShape, exportSVG, exportPNG, exportJPG, exportWebP, exportBMP, undo, redo, duplicateShape, copyShape, pasteShape, deleteShape, bringToFront, sendToBack, flipH, flipV, alignShapes, setSnapGrid, saveToLibrary, unionShapes, subtractShapes, intersectShapes, excludeShapes, outlineStroke, } = api;
11
- // Check if we can perform boolean ops (need 2 shapes selected)
12
- const canBool = !!(selId && boolSecondShape && selId !== boolSecondShape);
13
- const hasSel = !!selId;
14
- const menuItems = useMemo(() => [
8
+ const { t } = useNiceTranslation();
9
+ const {
10
+ selId,
11
+ hasClipboard,
12
+ snapGrid,
13
+ fInp,
14
+ shapes,
15
+ boolSecondShape,
16
+ newCanvas,
17
+ setDlgSvg,
18
+ setBoolSecondShape,
19
+ exportSVG,
20
+ exportPNG,
21
+ exportJPG,
22
+ exportWebP,
23
+ exportBMP,
24
+ undo,
25
+ redo,
26
+ duplicateShape,
27
+ copyShape,
28
+ pasteShape,
29
+ deleteShape,
30
+ bringToFront,
31
+ sendToBack,
32
+ flipH,
33
+ flipV,
34
+ alignShapes,
35
+ setSnapGrid,
36
+ saveToLibrary,
37
+ unionShapes,
38
+ subtractShapes,
39
+ intersectShapes,
40
+ excludeShapes,
41
+ outlineStroke
42
+ } = api;
43
+ const canBool = !!(selId && boolSecondShape && selId !== boolSecondShape);
44
+ const hasSel = !!selId;
45
+ const menuItems = useMemo(
46
+ () => [
47
+ {
48
+ id: "file",
49
+ label: t("vectorEditor.menu.file", "File"),
50
+ children: [
51
+ {
52
+ id: "new",
53
+ label: t("vectorEditor.menu.newCanvas", "New canvas"),
54
+ onClick: () => newCanvas()
55
+ },
56
+ {
57
+ id: "open",
58
+ label: t("vectorEditor.menu.openSvg", "Open SVG…"),
59
+ onClick: () => fInp.current?.click()
60
+ },
61
+ {
62
+ id: "paste",
63
+ label: t("vectorEditor.menu.pasteSvg", "Paste SVG…"),
64
+ onClick: () => setDlgSvg(true)
65
+ },
66
+ { id: "sep1", divider: true },
67
+ {
68
+ id: "exp-svg",
69
+ label: t("vectorEditor.menu.exportSvg", "Export SVG"),
70
+ onClick: () => exportSVG()
71
+ },
72
+ {
73
+ id: "exp-png",
74
+ label: t("vectorEditor.menu.exportPng", "Export PNG"),
75
+ onClick: () => exportPNG()
76
+ },
77
+ {
78
+ id: "exp-jpg",
79
+ label: t("vectorEditor.menu.exportJpg", "Export JPG"),
80
+ onClick: () => exportJPG()
81
+ },
82
+ {
83
+ id: "exp-webp",
84
+ label: t("vectorEditor.menu.exportWebp", "Export WebP"),
85
+ onClick: () => exportWebP()
86
+ },
87
+ {
88
+ id: "exp-bmp",
89
+ label: t("vectorEditor.menu.exportBmp", "Export BMP"),
90
+ onClick: () => exportBMP()
91
+ },
92
+ ...hasOnSaveToLibrary ? [
93
+ { id: "sep2", divider: true },
94
+ {
95
+ id: "save-lib",
96
+ icon: /* @__PURE__ */ jsx(NiceIcon, { name: "box", size: 14 }),
97
+ label: t("vectorEditor.menu.saveToLibrary", "Save to Library"),
98
+ onClick: () => saveToLibrary()
99
+ }
100
+ ] : [],
101
+ ...onExportIconSnippet ? [
102
+ { id: "sep3", divider: true },
103
+ {
104
+ id: "export-snippet",
105
+ icon: /* @__PURE__ */ jsx(NiceIcon, { name: "clipboard", size: 14 }),
106
+ label: t("vectorEditor.menu.exportIconSnippet", "Export Icon Snippet"),
107
+ onClick: () => onExportIconSnippet()
108
+ }
109
+ ] : []
110
+ ]
111
+ },
112
+ {
113
+ id: "edit",
114
+ label: t("vectorEditor.menu.edit", "Edit"),
115
+ children: [
116
+ {
117
+ id: "undo",
118
+ label: t("vectorEditor.menu.undo", "Undo (Ctrl+Z)"),
119
+ onClick: () => undo()
120
+ },
121
+ {
122
+ id: "redo",
123
+ label: t("vectorEditor.menu.redo", "Redo (Ctrl+Y)"),
124
+ onClick: () => redo()
125
+ },
126
+ { id: "sep1", divider: true },
127
+ {
128
+ id: "cut",
129
+ label: t("vectorEditor.menu.copy", "Copy (Ctrl+C)"),
130
+ onClick: () => copyShape(),
131
+ disabled: !hasSel
132
+ },
133
+ {
134
+ id: "paste",
135
+ label: t("vectorEditor.menu.paste", "Paste (Ctrl+V)"),
136
+ onClick: () => pasteShape(),
137
+ disabled: !hasClipboard
138
+ },
139
+ {
140
+ id: "dup",
141
+ label: t("vectorEditor.menu.duplicate", "Duplicate (Ctrl+D)"),
142
+ onClick: () => duplicateShape(),
143
+ disabled: !hasSel
144
+ },
145
+ { id: "sep2", divider: true },
146
+ {
147
+ id: "del",
148
+ label: t("vectorEditor.menu.delete", "Delete (Del)"),
149
+ onClick: () => deleteShape(),
150
+ disabled: !hasSel,
151
+ danger: true
152
+ }
153
+ ]
154
+ },
155
+ {
156
+ id: "object",
157
+ label: t("vectorEditor.menu.object", "Object"),
158
+ children: [
159
+ {
160
+ id: "front",
161
+ label: t("vectorEditor.menu.bringToFront", "Bring to Front"),
162
+ onClick: () => bringToFront(),
163
+ disabled: !hasSel
164
+ },
165
+ {
166
+ id: "back",
167
+ label: t("vectorEditor.menu.sendToBack", "Send to Back"),
168
+ onClick: () => sendToBack(),
169
+ disabled: !hasSel
170
+ },
171
+ { id: "sep1", divider: true },
172
+ {
173
+ id: "fh",
174
+ label: t("vectorEditor.menu.flipH", "Flip Horizontal"),
175
+ onClick: () => flipH(),
176
+ disabled: !hasSel
177
+ },
178
+ {
179
+ id: "fv",
180
+ label: t("vectorEditor.menu.flipV", "Flip Vertical"),
181
+ onClick: () => flipV(),
182
+ disabled: !hasSel
183
+ },
184
+ { id: "sep2", divider: true },
185
+ {
186
+ id: "al",
187
+ label: t("vectorEditor.menu.alignLeft", "Align Left"),
188
+ onClick: () => alignShapes("left"),
189
+ disabled: !hasSel
190
+ },
191
+ {
192
+ id: "ac",
193
+ label: t("vectorEditor.menu.alignCenter", "Align Center"),
194
+ onClick: () => alignShapes("center"),
195
+ disabled: !hasSel
196
+ },
197
+ {
198
+ id: "ar",
199
+ label: t("vectorEditor.menu.alignRight", "Align Right"),
200
+ onClick: () => alignShapes("right"),
201
+ disabled: !hasSel
202
+ }
203
+ ]
204
+ },
205
+ {
206
+ id: "path",
207
+ label: t("vectorEditor.menu.path", "Path"),
208
+ children: [
209
+ {
210
+ id: "union",
211
+ label: t("vectorEditor.menu.union", "Union (∪)"),
212
+ onClick: () => unionShapes(),
213
+ disabled: !canBool
214
+ },
215
+ {
216
+ id: "sub",
217
+ label: t("vectorEditor.menu.subtract", "Subtract (−)"),
218
+ onClick: () => subtractShapes(),
219
+ disabled: !canBool
220
+ },
221
+ {
222
+ id: "int",
223
+ label: t("vectorEditor.menu.intersect", "Intersect (∩)"),
224
+ onClick: () => intersectShapes(),
225
+ disabled: !canBool
226
+ },
227
+ {
228
+ id: "exc",
229
+ label: t("vectorEditor.menu.exclude", "Exclude (⊕)"),
230
+ onClick: () => excludeShapes(),
231
+ disabled: !canBool
232
+ },
233
+ { id: "sep1", divider: true },
234
+ {
235
+ id: "outline",
236
+ label: t("vectorEditor.menu.outlineStroke", "Outline stroke"),
237
+ onClick: () => outlineStroke(),
238
+ disabled: !hasSel
239
+ }
240
+ ]
241
+ },
242
+ {
243
+ id: "view",
244
+ label: t("vectorEditor.menu.view", "View"),
245
+ children: [
246
+ {
247
+ id: "snap",
248
+ label: t("vectorEditor.menu.snapToGrid", "Snap to grid"),
249
+ badge: snapGrid ? /* @__PURE__ */ jsx(NiceIcon, { name: "check", size: 14 }) : void 0,
250
+ onClick: () => setSnapGrid((v) => !v)
251
+ }
252
+ ]
253
+ }
254
+ ],
255
+ [
256
+ t,
257
+ newCanvas,
258
+ fInp,
259
+ setDlgSvg,
260
+ exportSVG,
261
+ exportPNG,
262
+ exportJPG,
263
+ exportWebP,
264
+ exportBMP,
265
+ hasOnSaveToLibrary,
266
+ saveToLibrary,
267
+ onExportIconSnippet,
268
+ undo,
269
+ redo,
270
+ hasSel,
271
+ copyShape,
272
+ pasteShape,
273
+ hasClipboard,
274
+ duplicateShape,
275
+ deleteShape,
276
+ bringToFront,
277
+ sendToBack,
278
+ flipH,
279
+ flipV,
280
+ alignShapes,
281
+ unionShapes,
282
+ subtractShapes,
283
+ intersectShapes,
284
+ excludeShapes,
285
+ outlineStroke,
286
+ canBool,
287
+ snapGrid,
288
+ setSnapGrid
289
+ ]
290
+ );
291
+ return /* @__PURE__ */ jsxs("div", { className: styles.menuBar, children: [
292
+ /* @__PURE__ */ jsx(NiceMenu, { items: menuItems, variant: "ghost", density: "compact", size: "sm", openTrigger: "click" }),
293
+ /* @__PURE__ */ jsx("div", { className: styles.menuSep }),
294
+ shapes.length >= 2 && /* @__PURE__ */ jsx(
295
+ NiceSelect,
296
+ {
297
+ className: styles.menuBtn,
298
+ value: boolSecondShape || "",
299
+ onChange: (val) => setBoolSecondShape(val || null),
300
+ options: [
301
+ { value: "", label: t("vectorEditor.menu.secondShape", "2nd Shape") },
302
+ ...shapes.filter((s) => s.id !== selId).map((s, i) => ({
303
+ value: s.id,
304
+ label: s.name ?? t("vectorEditor.shape", "Shape {i}").replace("{i}", String(i + 1))
305
+ }))
306
+ ],
307
+ style: { minWidth: 100 }
308
+ }
309
+ ),
310
+ /* @__PURE__ */ jsxs("label", { className: styles.menuLabel, children: [
311
+ /* @__PURE__ */ jsx(NiceCheckbox, { checked: snapGrid, onChange: () => setSnapGrid((v) => !v) }),
312
+ t("vectorEditor.menu.snap", "Snap")
313
+ ] }),
314
+ onExportIconSnippet && /* @__PURE__ */ jsxs(Fragment, { children: [
315
+ /* @__PURE__ */ jsx("div", { className: styles.menuSep }),
316
+ /* @__PURE__ */ jsxs(
317
+ NiceButton,
15
318
  {
16
- id: 'file',
17
- label: t('vectorEditor.menu.file', 'File'),
18
- children: [
19
- {
20
- id: 'new',
21
- label: t('vectorEditor.menu.newCanvas', 'New canvas'),
22
- onClick: () => newCanvas(),
23
- },
24
- {
25
- id: 'open',
26
- label: t('vectorEditor.menu.openSvg', 'Open SVG…'),
27
- onClick: () => { var _a; return (_a = fInp.current) === null || _a === void 0 ? void 0 : _a.click(); },
28
- },
29
- {
30
- id: 'paste',
31
- label: t('vectorEditor.menu.pasteSvg', 'Paste SVG…'),
32
- onClick: () => setDlgSvg(true),
33
- },
34
- { id: 'sep1', divider: true },
35
- {
36
- id: 'exp-svg',
37
- label: t('vectorEditor.menu.exportSvg', 'Export SVG'),
38
- onClick: () => exportSVG(),
39
- },
40
- {
41
- id: 'exp-png',
42
- label: t('vectorEditor.menu.exportPng', 'Export PNG'),
43
- onClick: () => exportPNG(),
44
- },
45
- {
46
- id: 'exp-jpg',
47
- label: t('vectorEditor.menu.exportJpg', 'Export JPG'),
48
- onClick: () => exportJPG(),
49
- },
50
- {
51
- id: 'exp-webp',
52
- label: t('vectorEditor.menu.exportWebp', 'Export WebP'),
53
- onClick: () => exportWebP(),
54
- },
55
- {
56
- id: 'exp-bmp',
57
- label: t('vectorEditor.menu.exportBmp', 'Export BMP'),
58
- onClick: () => exportBMP(),
59
- },
60
- ...(hasOnSaveToLibrary
61
- ? [
62
- { id: 'sep2', divider: true },
63
- {
64
- id: 'save-lib',
65
- icon: jsx(NiceIcon, { name: "box", size: 14 }),
66
- label: t('vectorEditor.menu.saveToLibrary', 'Save to Library'),
67
- onClick: () => saveToLibrary(),
68
- },
69
- ]
70
- : []),
71
- ...(onExportIconSnippet
72
- ? [
73
- { id: 'sep3', divider: true },
74
- {
75
- id: 'export-snippet',
76
- icon: jsx(NiceIcon, { name: "clipboard", size: 14 }),
77
- label: t('vectorEditor.menu.exportIconSnippet', 'Export Icon Snippet'),
78
- onClick: () => onExportIconSnippet(),
79
- },
80
- ]
81
- : []),
82
- ],
83
- },
84
- {
85
- id: 'edit',
86
- label: t('vectorEditor.menu.edit', 'Edit'),
87
- children: [
88
- {
89
- id: 'undo',
90
- label: t('vectorEditor.menu.undo', 'Undo (Ctrl+Z)'),
91
- onClick: () => undo(),
92
- },
93
- {
94
- id: 'redo',
95
- label: t('vectorEditor.menu.redo', 'Redo (Ctrl+Y)'),
96
- onClick: () => redo(),
97
- },
98
- { id: 'sep1', divider: true },
99
- {
100
- id: 'cut',
101
- label: t('vectorEditor.menu.copy', 'Copy (Ctrl+C)'),
102
- onClick: () => copyShape(),
103
- disabled: !hasSel,
104
- },
105
- {
106
- id: 'paste',
107
- label: t('vectorEditor.menu.paste', 'Paste (Ctrl+V)'),
108
- onClick: () => pasteShape(),
109
- disabled: !hasClipboard,
110
- },
111
- {
112
- id: 'dup',
113
- label: t('vectorEditor.menu.duplicate', 'Duplicate (Ctrl+D)'),
114
- onClick: () => duplicateShape(),
115
- disabled: !hasSel,
116
- },
117
- { id: 'sep2', divider: true },
118
- {
119
- id: 'del',
120
- label: t('vectorEditor.menu.delete', 'Delete (Del)'),
121
- onClick: () => deleteShape(),
122
- disabled: !hasSel,
123
- danger: true,
124
- },
125
- ],
126
- },
127
- {
128
- id: 'object',
129
- label: t('vectorEditor.menu.object', 'Object'),
130
- children: [
131
- {
132
- id: 'front',
133
- label: t('vectorEditor.menu.bringToFront', 'Bring to Front'),
134
- onClick: () => bringToFront(),
135
- disabled: !hasSel,
136
- },
137
- {
138
- id: 'back',
139
- label: t('vectorEditor.menu.sendToBack', 'Send to Back'),
140
- onClick: () => sendToBack(),
141
- disabled: !hasSel,
142
- },
143
- { id: 'sep1', divider: true },
144
- {
145
- id: 'fh',
146
- label: t('vectorEditor.menu.flipH', 'Flip Horizontal'),
147
- onClick: () => flipH(),
148
- disabled: !hasSel,
149
- },
150
- {
151
- id: 'fv',
152
- label: t('vectorEditor.menu.flipV', 'Flip Vertical'),
153
- onClick: () => flipV(),
154
- disabled: !hasSel,
155
- },
156
- { id: 'sep2', divider: true },
157
- {
158
- id: 'al',
159
- label: t('vectorEditor.menu.alignLeft', 'Align Left'),
160
- onClick: () => alignShapes('left'),
161
- disabled: !hasSel,
162
- },
163
- {
164
- id: 'ac',
165
- label: t('vectorEditor.menu.alignCenter', 'Align Center'),
166
- onClick: () => alignShapes('center'),
167
- disabled: !hasSel,
168
- },
169
- {
170
- id: 'ar',
171
- label: t('vectorEditor.menu.alignRight', 'Align Right'),
172
- onClick: () => alignShapes('right'),
173
- disabled: !hasSel,
174
- },
175
- ],
176
- },
177
- {
178
- id: 'path',
179
- label: t('vectorEditor.menu.path', 'Path'),
180
- children: [
181
- {
182
- id: 'union',
183
- label: t('vectorEditor.menu.union', 'Union (∪)'),
184
- onClick: () => unionShapes(),
185
- disabled: !canBool,
186
- },
187
- {
188
- id: 'sub',
189
- label: t('vectorEditor.menu.subtract', 'Subtract (−)'),
190
- onClick: () => subtractShapes(),
191
- disabled: !canBool,
192
- },
193
- {
194
- id: 'int',
195
- label: t('vectorEditor.menu.intersect', 'Intersect (∩)'),
196
- onClick: () => intersectShapes(),
197
- disabled: !canBool,
198
- },
199
- {
200
- id: 'exc',
201
- label: t('vectorEditor.menu.exclude', 'Exclude (⊕)'),
202
- onClick: () => excludeShapes(),
203
- disabled: !canBool,
204
- },
205
- { id: 'sep1', divider: true },
206
- {
207
- id: 'outline',
208
- label: t('vectorEditor.menu.outlineStroke', 'Outline stroke'),
209
- onClick: () => outlineStroke(),
210
- disabled: !hasSel,
211
- },
212
- ],
213
- },
214
- {
215
- id: 'view',
216
- label: t('vectorEditor.menu.view', 'View'),
217
- children: [
218
- {
219
- id: 'snap',
220
- label: t('vectorEditor.menu.snapToGrid', 'Snap to grid'),
221
- badge: snapGrid ? jsx(NiceIcon, { name: "check", size: 14 }) : undefined,
222
- onClick: () => setSnapGrid((v) => !v),
223
- },
224
- ],
225
- },
226
- ], [
227
- t,
228
- newCanvas,
229
- fInp,
230
- setDlgSvg,
231
- exportSVG,
232
- exportPNG,
233
- exportJPG,
234
- exportWebP,
235
- exportBMP,
236
- hasOnSaveToLibrary,
237
- saveToLibrary,
238
- onExportIconSnippet,
239
- undo,
240
- redo,
241
- hasSel,
242
- copyShape,
243
- pasteShape,
244
- hasClipboard,
245
- duplicateShape,
246
- deleteShape,
247
- bringToFront,
248
- sendToBack,
249
- flipH,
250
- flipV,
251
- alignShapes,
252
- unionShapes,
253
- subtractShapes,
254
- intersectShapes,
255
- excludeShapes,
256
- outlineStroke,
257
- canBool,
258
- snapGrid,
259
- setSnapGrid,
260
- ]);
261
- return (jsxs("div", { className: styles.menuBar, children: [jsx(NiceMenu, { items: menuItems, variant: "ghost", density: "compact", size: "sm", openTrigger: "click" }), jsx("div", { className: styles.menuSep }), shapes.length >= 2 && (jsx(NiceSelect, { className: styles.menuBtn, value: boolSecondShape || '', onChange: (val) => setBoolSecondShape(val || null), options: [
262
- { value: '', label: t('vectorEditor.menu.secondShape', '2nd Shape') },
263
- ...shapes
264
- .filter((s) => s.id !== selId)
265
- .map((s, i) => {
266
- var _a;
267
- return ({
268
- value: s.id,
269
- label: (_a = s.name) !== null && _a !== void 0 ? _a : t('vectorEditor.shape', 'Shape {i}').replace('{i}', String(i + 1)),
270
- });
271
- }),
272
- ], style: { minWidth: 100 } })), jsxs("label", { className: styles.menuLabel, children: [jsx(NiceCheckbox, { checked: snapGrid, onChange: () => setSnapGrid((v) => !v) }), t('vectorEditor.menu.snap', 'Snap')] }), onExportIconSnippet && (jsxs(Fragment, { children: [jsx("div", { className: styles.menuSep }), jsxs(NiceButton, { className: styles.menuBtn, variant: "primary", size: "sm", onClick: onExportIconSnippet, children: [jsx(NiceIcon, { name: "clipboard", size: 14 }), ' ', t('vectorEditor.menu.exportIcon', 'Export Icon')] })] }))] }));
319
+ className: styles.menuBtn,
320
+ variant: "primary",
321
+ size: "sm",
322
+ onClick: onExportIconSnippet,
323
+ children: [
324
+ /* @__PURE__ */ jsx(NiceIcon, { name: "clipboard", size: 14 }),
325
+ " ",
326
+ t("vectorEditor.menu.exportIcon", "Export Icon")
327
+ ]
328
+ }
329
+ )
330
+ ] })
331
+ ] });
332
+ };
333
+ const VectorEditorMenuBar = React.memo(VectorEditorMenuBar$1);
334
+ export {
335
+ VectorEditorMenuBar as default
273
336
  };
274
- var VectorEditorMenuBar = React.memo(VectorEditorMenuBar$1);
275
-
276
- export { VectorEditorMenuBar as default };