@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.
- package/dist/cjs/animation/AnimatedPerson.js +69 -63
- package/dist/cjs/animation/AnimatedPerson.js.map +1 -1
- package/dist/cjs/animation/AnimationEditor.js +27 -20
- package/dist/cjs/animation/AnimationEditor.js.map +1 -1
- package/dist/cjs/animation/Audience.js +17 -11
- package/dist/cjs/animation/Audience.js.map +1 -1
- package/dist/cjs/animation/BodyRenderer.js +7 -7
- package/dist/cjs/animation/BodyRenderer.js.map +1 -1
- package/dist/cjs/animation/animationHelper.js +83 -52
- package/dist/cjs/animation/animationHelper.js.map +1 -1
- package/dist/cjs/animation/characterTypes.js +171 -30
- package/dist/cjs/animation/characterTypes.js.map +1 -1
- package/dist/cjs/animation/choreoDSL.js +114 -62
- package/dist/cjs/animation/choreoDSL.js.map +1 -1
- package/dist/cjs/animation/karaokeIntegration.js +10 -11
- package/dist/cjs/animation/karaokeIntegration.js.map +1 -1
- package/dist/cjs/animation/lottieExport.js +15 -9
- package/dist/cjs/animation/lottieExport.js.map +1 -1
- package/dist/cjs/animation/motionPath.js +125 -30
- package/dist/cjs/animation/motionPath.js.map +1 -1
- package/dist/cjs/animation/physics.js +157 -57
- package/dist/cjs/animation/physics.js.map +1 -1
- package/dist/cjs/animation/rig/RigPlayer.js +7 -6
- package/dist/cjs/animation/rig/RigPlayer.js.map +1 -1
- package/dist/cjs/animation/rig/RiggedBody.js +7 -7
- package/dist/cjs/animation/rig/RiggedBody.js.map +1 -1
- package/dist/cjs/animation/rig/choreoRigBridge.js +52 -29
- package/dist/cjs/animation/rig/choreoRigBridge.js.map +1 -1
- package/dist/cjs/animation/rig/poseOps.js +6 -3
- package/dist/cjs/animation/rig/poseOps.js.map +1 -1
- package/dist/cjs/animation/shapes/arms.js +7 -6
- package/dist/cjs/animation/shapes/arms.js.map +1 -1
- package/dist/cjs/animation/shapes/eyes.js +31 -18
- package/dist/cjs/animation/shapes/eyes.js.map +1 -1
- package/dist/cjs/animation/shapes/hair.js +39 -23
- package/dist/cjs/animation/shapes/hair.js.map +1 -1
- package/dist/cjs/animation/shapes/heads.js +47 -29
- package/dist/cjs/animation/shapes/heads.js.map +1 -1
- package/dist/cjs/animation/shapes/headwear.js +26 -14
- package/dist/cjs/animation/shapes/headwear.js.map +1 -1
- package/dist/cjs/animation/shapes/legs.js +7 -6
- package/dist/cjs/animation/shapes/legs.js.map +1 -1
- package/dist/cjs/animation/shapes/mouths.js +28 -18
- package/dist/cjs/animation/shapes/mouths.js.map +1 -1
- package/dist/cjs/animation/shapes/noses.js +18 -9
- package/dist/cjs/animation/shapes/noses.js.map +1 -1
- package/dist/cjs/animation/shapes/outfits.js +25 -14
- package/dist/cjs/animation/shapes/outfits.js.map +1 -1
- package/dist/cjs/animation/shapes/torsos.js +5 -4
- package/dist/cjs/animation/shapes/torsos.js.map +1 -1
- package/dist/cjs/animation/spineExport.js +33 -26
- package/dist/cjs/animation/spineExport.js.map +1 -1
- package/dist/cjs/core/LocalUI.js +16 -16
- package/dist/cjs/core/LocalUI.js.map +1 -1
- package/dist/cjs/core/NiceBrushEngine.js +205 -69
- package/dist/cjs/core/NiceBrushEngine.js.map +1 -1
- package/dist/cjs/core/collaboration.js +35 -21
- package/dist/cjs/core/collaboration.js.map +1 -1
- package/dist/cjs/core/colorBlindness.js +64 -24
- package/dist/cjs/core/colorBlindness.js.map +1 -1
- package/dist/cjs/core/dragDrop.js +34 -26
- package/dist/cjs/core/dragDrop.js.map +1 -1
- package/dist/cjs/core/fixes.js +26 -14
- package/dist/cjs/core/fixes.js.map +1 -1
- package/dist/cjs/core/gridGuides.js +24 -16
- package/dist/cjs/core/gridGuides.js.map +1 -1
- package/dist/cjs/core/historyVisual.js +42 -23
- package/dist/cjs/core/historyVisual.js.map +1 -1
- package/dist/cjs/core/integrations.js +65 -48
- package/dist/cjs/core/integrations.js.map +1 -1
- package/dist/cjs/core/minimap.js +40 -24
- package/dist/cjs/core/minimap.js.map +1 -1
- package/dist/cjs/core/plugins.js +10 -6
- package/dist/cjs/core/plugins.js.map +1 -1
- package/dist/cjs/core/rtl.js +32 -27
- package/dist/cjs/core/rtl.js.map +1 -1
- package/dist/cjs/core/shortcuts.js +77 -39
- package/dist/cjs/core/shortcuts.js.map +1 -1
- package/dist/cjs/core/theme.js +68 -61
- package/dist/cjs/core/theme.js.map +1 -1
- package/dist/cjs/core/yjsCollaboration.js +61 -28
- package/dist/cjs/core/yjsCollaboration.js.map +1 -1
- package/dist/cjs/font/NiceFontEditor.js +160 -57
- package/dist/cjs/font/NiceFontEditor.js.map +1 -1
- package/dist/cjs/font/fontFormatUtils.js +37 -24
- package/dist/cjs/font/fontFormatUtils.js.map +1 -1
- package/dist/cjs/game/GameAsset2dEditor.js +73 -60
- package/dist/cjs/game/GameAsset2dEditor.js.map +1 -1
- package/dist/cjs/game/gameAssetUtils.js +18 -13
- package/dist/cjs/game/gameAssetUtils.js.map +1 -1
- package/dist/cjs/game/useGameAssetEditor.js +160 -143
- package/dist/cjs/game/useGameAssetEditor.js.map +1 -1
- package/dist/cjs/icon/NiceIconEditor.js +329 -106
- package/dist/cjs/icon/NiceIconEditor.js.map +1 -1
- package/dist/cjs/packages/ui/dist/NiceErrorBoundary-D75yr_WE.js +572 -0
- package/dist/cjs/packages/ui/dist/NiceErrorBoundary-D75yr_WE.js.map +1 -0
- package/dist/cjs/packages/ui/dist/NiceForm-CKoJA6NG.js +4979 -0
- package/dist/cjs/packages/ui/dist/NiceForm-CKoJA6NG.js.map +1 -0
- package/dist/cjs/packages/ui/dist/NiceModal-1QX7NhyH.js +98 -0
- package/dist/cjs/packages/ui/dist/NiceModal-1QX7NhyH.js.map +1 -0
- package/dist/cjs/packages/ui/dist/NiceModuleLifecyclePanel-CMrPbSw9.js +5244 -0
- package/dist/cjs/packages/ui/dist/NiceModuleLifecyclePanel-CMrPbSw9.js.map +1 -0
- package/dist/cjs/packages/ui/dist/NicePagination-DbE-uOkl.js +174 -0
- package/dist/cjs/packages/ui/dist/NicePagination-DbE-uOkl.js.map +1 -0
- package/dist/cjs/packages/ui/dist/NicePinCodeInput-B8cI8zu8.js +10459 -0
- package/dist/cjs/packages/ui/dist/NicePinCodeInput-B8cI8zu8.js.map +1 -0
- package/dist/cjs/packages/ui/dist/NiceSavedQueryPanel-CZ5bYOe_.js +6313 -0
- package/dist/cjs/packages/ui/dist/NiceSavedQueryPanel-CZ5bYOe_.js.map +1 -0
- package/dist/cjs/packages/ui/dist/NiceTabs-DzLHzwuA.js +1639 -0
- package/dist/cjs/packages/ui/dist/NiceTabs-DzLHzwuA.js.map +1 -0
- package/dist/cjs/packages/ui/dist/NiceWindow-DeC83yfE.js +807 -0
- package/dist/cjs/packages/ui/dist/NiceWindow-DeC83yfE.js.map +1 -0
- package/dist/cjs/packages/ui/dist/charts-BAS21jkC.js +3833 -0
- package/dist/cjs/packages/ui/dist/charts-BAS21jkC.js.map +1 -0
- package/dist/cjs/packages/ui/dist/core-Da43q-pO.js +11683 -0
- package/dist/cjs/packages/ui/dist/core-Da43q-pO.js.map +1 -0
- package/dist/cjs/packages/ui/dist/index-pAuGTbuB.js +28876 -0
- package/dist/cjs/packages/ui/dist/index-pAuGTbuB.js.map +1 -0
- package/dist/cjs/photo/FilterThumb.js +7 -5
- package/dist/cjs/photo/FilterThumb.js.map +1 -1
- package/dist/cjs/photo/NiceAITools.js +78 -32
- package/dist/cjs/photo/NiceAITools.js.map +1 -1
- package/dist/cjs/photo/PhotoEditor.js +4 -4
- package/dist/cjs/photo/PhotoEditor.js.map +1 -1
- package/dist/cjs/photo/PhotoEditorCanvas.js +56 -22
- package/dist/cjs/photo/PhotoEditorCanvas.js.map +1 -1
- package/dist/cjs/photo/PhotoEditorLeftPanel.js +106 -48
- package/dist/cjs/photo/PhotoEditorLeftPanel.js.map +1 -1
- package/dist/cjs/photo/PhotoEditorToolbar.js +2 -2
- package/dist/cjs/photo/PhotoEditorToolbar.js.map +1 -1
- package/dist/cjs/photo/photoEditorActions.js +27 -18
- package/dist/cjs/photo/photoEditorActions.js.map +1 -1
- package/dist/cjs/photo/photoFilters.js +316 -81
- package/dist/cjs/photo/photoFilters.js.map +1 -1
- package/dist/cjs/photo/photoOverlays.js +521 -165
- package/dist/cjs/photo/photoOverlays.js.map +1 -1
- package/dist/cjs/photo/photoSelection.js +69 -35
- package/dist/cjs/photo/photoSelection.js.map +1 -1
- package/dist/cjs/photo/usePhotoEditor.js +203 -97
- package/dist/cjs/photo/usePhotoEditor.js.map +1 -1
- package/dist/cjs/pixel/HSVPicker.js +32 -19
- package/dist/cjs/pixel/HSVPicker.js.map +1 -1
- package/dist/cjs/pixel/PixelEditor.js +25 -14
- package/dist/cjs/pixel/PixelEditor.js.map +1 -1
- package/dist/cjs/pixel/PixelEditorCanvas.js +2 -2
- package/dist/cjs/pixel/PixelEditorCanvas.js.map +1 -1
- package/dist/cjs/pixel/PixelEditorMenuBar.js +3 -3
- package/dist/cjs/pixel/PixelEditorMenuBar.js.map +1 -1
- package/dist/cjs/pixel/PixelEditorRightPanel.js +28 -8
- package/dist/cjs/pixel/PixelEditorRightPanel.js.map +1 -1
- package/dist/cjs/pixel/PixelEditorStatusBar.js +2 -2
- package/dist/cjs/pixel/PixelEditorStatusBar.js.map +1 -1
- package/dist/cjs/pixel/PixelEditorTimeline.js +3 -4
- package/dist/cjs/pixel/PixelEditorTimeline.js.map +1 -1
- package/dist/cjs/pixel/PixelEditorToolbar.js +3 -3
- package/dist/cjs/pixel/PixelEditorToolbar.js.map +1 -1
- package/dist/cjs/pixel/SpriteGeneratorPanel.js +136 -54
- package/dist/cjs/pixel/SpriteGeneratorPanel.js.map +1 -1
- package/dist/cjs/pixel/asepriteFormat.js +122 -38
- package/dist/cjs/pixel/asepriteFormat.js.map +1 -1
- package/dist/cjs/pixel/characterGeneratorPresets.js +208 -54
- package/dist/cjs/pixel/characterGeneratorPresets.js.map +1 -1
- package/dist/cjs/pixel/pixelEditorExports.js +42 -35
- package/dist/cjs/pixel/pixelEditorExports.js.map +1 -1
- package/dist/cjs/pixel/pixelEditorTypes.js +67 -33
- package/dist/cjs/pixel/pixelEditorTypes.js.map +1 -1
- package/dist/cjs/pixel/pixelEditorUtils.js +62 -38
- package/dist/cjs/pixel/pixelEditorUtils.js.map +1 -1
- package/dist/cjs/pixel/spriteGeneratorCore.js +47 -24
- package/dist/cjs/pixel/spriteGeneratorCore.js.map +1 -1
- package/dist/cjs/pixel/usePixelEditor.js +475 -213
- package/dist/cjs/pixel/usePixelEditor.js.map +1 -1
- package/dist/cjs/texture/Nice3DTexturePainter.js +201 -71
- package/dist/cjs/texture/Nice3DTexturePainter.js.map +1 -1
- package/dist/cjs/ui/NiceUIDesigner.js +280 -91
- package/dist/cjs/ui/NiceUIDesigner.js.map +1 -1
- package/dist/cjs/vector/NiceSvgToCode.js +96 -34
- package/dist/cjs/vector/NiceSvgToCode.js.map +1 -1
- package/dist/cjs/vector/VectorEditor.js +14 -13
- package/dist/cjs/vector/VectorEditor.js.map +1 -1
- package/dist/cjs/vector/VectorEditorMenuBar.js +7 -6
- package/dist/cjs/vector/VectorEditorMenuBar.js.map +1 -1
- package/dist/cjs/vector/VectorEditorRightPanel.js +87 -32
- package/dist/cjs/vector/VectorEditorRightPanel.js.map +1 -1
- package/dist/cjs/vector/VectorEditorShapeRenderer.js +17 -15
- package/dist/cjs/vector/VectorEditorShapeRenderer.js.map +1 -1
- package/dist/cjs/vector/VectorEditorStatusBar.js.map +1 -1
- package/dist/cjs/vector/useVectorEditor.js +312 -122
- package/dist/cjs/vector/useVectorEditor.js.map +1 -1
- package/dist/cjs/vector/vectorBooleanOps.js +60 -42
- package/dist/cjs/vector/vectorBooleanOps.js.map +1 -1
- package/dist/cjs/vector/vectorEditorExport.js +40 -34
- package/dist/cjs/vector/vectorEditorExport.js.map +1 -1
- package/dist/cjs/vector/vectorGradients.js +41 -40
- package/dist/cjs/vector/vectorGradients.js.map +1 -1
- package/dist/esm/animation/AnimatedPerson.js +69 -63
- package/dist/esm/animation/AnimatedPerson.js.map +1 -1
- package/dist/esm/animation/AnimationEditor.js +27 -20
- package/dist/esm/animation/AnimationEditor.js.map +1 -1
- package/dist/esm/animation/Audience.js +17 -11
- package/dist/esm/animation/Audience.js.map +1 -1
- package/dist/esm/animation/BodyRenderer.js +7 -7
- package/dist/esm/animation/BodyRenderer.js.map +1 -1
- package/dist/esm/animation/animationHelper.js +83 -52
- package/dist/esm/animation/animationHelper.js.map +1 -1
- package/dist/esm/animation/characterTypes.js +171 -30
- package/dist/esm/animation/characterTypes.js.map +1 -1
- package/dist/esm/animation/choreoDSL.js +114 -62
- package/dist/esm/animation/choreoDSL.js.map +1 -1
- package/dist/esm/animation/karaokeIntegration.js +10 -11
- package/dist/esm/animation/karaokeIntegration.js.map +1 -1
- package/dist/esm/animation/lottieExport.js +15 -9
- package/dist/esm/animation/lottieExport.js.map +1 -1
- package/dist/esm/animation/motionPath.js +125 -30
- package/dist/esm/animation/motionPath.js.map +1 -1
- package/dist/esm/animation/physics.js +157 -57
- package/dist/esm/animation/physics.js.map +1 -1
- package/dist/esm/animation/rig/RigPlayer.js +7 -6
- package/dist/esm/animation/rig/RigPlayer.js.map +1 -1
- package/dist/esm/animation/rig/RiggedBody.js +7 -7
- package/dist/esm/animation/rig/RiggedBody.js.map +1 -1
- package/dist/esm/animation/rig/choreoRigBridge.js +52 -29
- package/dist/esm/animation/rig/choreoRigBridge.js.map +1 -1
- package/dist/esm/animation/rig/poseOps.js +6 -3
- package/dist/esm/animation/rig/poseOps.js.map +1 -1
- package/dist/esm/animation/shapes/arms.js +7 -6
- package/dist/esm/animation/shapes/arms.js.map +1 -1
- package/dist/esm/animation/shapes/eyes.js +31 -18
- package/dist/esm/animation/shapes/eyes.js.map +1 -1
- package/dist/esm/animation/shapes/hair.js +39 -23
- package/dist/esm/animation/shapes/hair.js.map +1 -1
- package/dist/esm/animation/shapes/heads.js +47 -29
- package/dist/esm/animation/shapes/heads.js.map +1 -1
- package/dist/esm/animation/shapes/headwear.js +26 -14
- package/dist/esm/animation/shapes/headwear.js.map +1 -1
- package/dist/esm/animation/shapes/legs.js +7 -6
- package/dist/esm/animation/shapes/legs.js.map +1 -1
- package/dist/esm/animation/shapes/mouths.js +28 -18
- package/dist/esm/animation/shapes/mouths.js.map +1 -1
- package/dist/esm/animation/shapes/noses.js +18 -9
- package/dist/esm/animation/shapes/noses.js.map +1 -1
- package/dist/esm/animation/shapes/outfits.js +25 -14
- package/dist/esm/animation/shapes/outfits.js.map +1 -1
- package/dist/esm/animation/shapes/torsos.js +5 -4
- package/dist/esm/animation/shapes/torsos.js.map +1 -1
- package/dist/esm/animation/spineExport.js +33 -26
- package/dist/esm/animation/spineExport.js.map +1 -1
- package/dist/esm/core/LocalUI.js +16 -16
- package/dist/esm/core/LocalUI.js.map +1 -1
- package/dist/esm/core/NiceBrushEngine.js +205 -69
- package/dist/esm/core/NiceBrushEngine.js.map +1 -1
- package/dist/esm/core/collaboration.js +35 -21
- package/dist/esm/core/collaboration.js.map +1 -1
- package/dist/esm/core/colorBlindness.js +64 -24
- package/dist/esm/core/colorBlindness.js.map +1 -1
- package/dist/esm/core/dragDrop.js +34 -26
- package/dist/esm/core/dragDrop.js.map +1 -1
- package/dist/esm/core/fixes.js +26 -14
- package/dist/esm/core/fixes.js.map +1 -1
- package/dist/esm/core/gridGuides.js +24 -16
- package/dist/esm/core/gridGuides.js.map +1 -1
- package/dist/esm/core/historyVisual.js +42 -23
- package/dist/esm/core/historyVisual.js.map +1 -1
- package/dist/esm/core/integrations.js +65 -48
- package/dist/esm/core/integrations.js.map +1 -1
- package/dist/esm/core/minimap.js +40 -24
- package/dist/esm/core/minimap.js.map +1 -1
- package/dist/esm/core/plugins.js +10 -6
- package/dist/esm/core/plugins.js.map +1 -1
- package/dist/esm/core/rtl.js +32 -27
- package/dist/esm/core/rtl.js.map +1 -1
- package/dist/esm/core/shortcuts.js +77 -39
- package/dist/esm/core/shortcuts.js.map +1 -1
- package/dist/esm/core/theme.js +68 -61
- package/dist/esm/core/theme.js.map +1 -1
- package/dist/esm/core/yjsCollaboration.js +61 -28
- package/dist/esm/core/yjsCollaboration.js.map +1 -1
- package/dist/esm/font/NiceFontEditor.js +160 -57
- package/dist/esm/font/NiceFontEditor.js.map +1 -1
- package/dist/esm/font/fontFormatUtils.js +37 -24
- package/dist/esm/font/fontFormatUtils.js.map +1 -1
- package/dist/esm/game/GameAsset2dEditor.js +73 -60
- package/dist/esm/game/GameAsset2dEditor.js.map +1 -1
- package/dist/esm/game/gameAssetUtils.js +18 -13
- package/dist/esm/game/gameAssetUtils.js.map +1 -1
- package/dist/esm/game/useGameAssetEditor.js +160 -143
- package/dist/esm/game/useGameAssetEditor.js.map +1 -1
- package/dist/esm/icon/NiceIconEditor.js +329 -106
- package/dist/esm/icon/NiceIconEditor.js.map +1 -1
- package/dist/esm/packages/ui/dist/NiceErrorBoundary-D75yr_WE.js +563 -0
- package/dist/esm/packages/ui/dist/NiceErrorBoundary-D75yr_WE.js.map +1 -0
- package/dist/esm/packages/ui/dist/NiceForm-CKoJA6NG.js +4960 -0
- package/dist/esm/packages/ui/dist/NiceForm-CKoJA6NG.js.map +1 -0
- package/dist/esm/packages/ui/dist/NiceModal-1QX7NhyH.js +96 -0
- package/dist/esm/packages/ui/dist/NiceModal-1QX7NhyH.js.map +1 -0
- package/dist/esm/packages/ui/dist/NiceModuleLifecyclePanel-CMrPbSw9.js +5201 -0
- package/dist/esm/packages/ui/dist/NiceModuleLifecyclePanel-CMrPbSw9.js.map +1 -0
- package/dist/esm/packages/ui/dist/NicePagination-DbE-uOkl.js +172 -0
- package/dist/esm/packages/ui/dist/NicePagination-DbE-uOkl.js.map +1 -0
- package/dist/esm/packages/ui/dist/NicePinCodeInput-B8cI8zu8.js +10408 -0
- package/dist/esm/packages/ui/dist/NicePinCodeInput-B8cI8zu8.js.map +1 -0
- package/dist/esm/packages/ui/dist/NiceSavedQueryPanel-CZ5bYOe_.js +6296 -0
- package/dist/esm/packages/ui/dist/NiceSavedQueryPanel-CZ5bYOe_.js.map +1 -0
- package/dist/esm/packages/ui/dist/NiceTabs-DzLHzwuA.js +1630 -0
- package/dist/esm/packages/ui/dist/NiceTabs-DzLHzwuA.js.map +1 -0
- package/dist/esm/packages/ui/dist/NiceWindow-DeC83yfE.js +796 -0
- package/dist/esm/packages/ui/dist/NiceWindow-DeC83yfE.js.map +1 -0
- package/dist/esm/packages/ui/dist/charts-BAS21jkC.js +3809 -0
- package/dist/esm/packages/ui/dist/charts-BAS21jkC.js.map +1 -0
- package/dist/esm/packages/ui/dist/core-Da43q-pO.js +11502 -0
- package/dist/esm/packages/ui/dist/core-Da43q-pO.js.map +1 -0
- package/dist/esm/packages/ui/dist/index-pAuGTbuB.js +28792 -0
- package/dist/esm/packages/ui/dist/index-pAuGTbuB.js.map +1 -0
- package/dist/esm/photo/FilterThumb.js +7 -5
- package/dist/esm/photo/FilterThumb.js.map +1 -1
- package/dist/esm/photo/NiceAITools.js +78 -32
- package/dist/esm/photo/NiceAITools.js.map +1 -1
- package/dist/esm/photo/PhotoEditor.js +4 -4
- package/dist/esm/photo/PhotoEditor.js.map +1 -1
- package/dist/esm/photo/PhotoEditorCanvas.js +56 -22
- package/dist/esm/photo/PhotoEditorCanvas.js.map +1 -1
- package/dist/esm/photo/PhotoEditorLeftPanel.js +106 -48
- package/dist/esm/photo/PhotoEditorLeftPanel.js.map +1 -1
- package/dist/esm/photo/PhotoEditorToolbar.js +2 -2
- package/dist/esm/photo/PhotoEditorToolbar.js.map +1 -1
- package/dist/esm/photo/photoEditorActions.js +27 -18
- package/dist/esm/photo/photoEditorActions.js.map +1 -1
- package/dist/esm/photo/photoFilters.js +316 -81
- package/dist/esm/photo/photoFilters.js.map +1 -1
- package/dist/esm/photo/photoOverlays.js +521 -165
- package/dist/esm/photo/photoOverlays.js.map +1 -1
- package/dist/esm/photo/photoSelection.js +69 -35
- package/dist/esm/photo/photoSelection.js.map +1 -1
- package/dist/esm/photo/usePhotoEditor.js +203 -97
- package/dist/esm/photo/usePhotoEditor.js.map +1 -1
- package/dist/esm/pixel/HSVPicker.js +32 -19
- package/dist/esm/pixel/HSVPicker.js.map +1 -1
- package/dist/esm/pixel/PixelEditor.js +25 -14
- package/dist/esm/pixel/PixelEditor.js.map +1 -1
- package/dist/esm/pixel/PixelEditorCanvas.js +2 -2
- package/dist/esm/pixel/PixelEditorCanvas.js.map +1 -1
- package/dist/esm/pixel/PixelEditorMenuBar.js +3 -3
- package/dist/esm/pixel/PixelEditorMenuBar.js.map +1 -1
- package/dist/esm/pixel/PixelEditorRightPanel.js +28 -8
- package/dist/esm/pixel/PixelEditorRightPanel.js.map +1 -1
- package/dist/esm/pixel/PixelEditorStatusBar.js +2 -2
- package/dist/esm/pixel/PixelEditorStatusBar.js.map +1 -1
- package/dist/esm/pixel/PixelEditorTimeline.js +3 -4
- package/dist/esm/pixel/PixelEditorTimeline.js.map +1 -1
- package/dist/esm/pixel/PixelEditorToolbar.js +3 -3
- package/dist/esm/pixel/PixelEditorToolbar.js.map +1 -1
- package/dist/esm/pixel/SpriteGeneratorPanel.js +136 -54
- package/dist/esm/pixel/SpriteGeneratorPanel.js.map +1 -1
- package/dist/esm/pixel/asepriteFormat.js +122 -38
- package/dist/esm/pixel/asepriteFormat.js.map +1 -1
- package/dist/esm/pixel/characterGeneratorPresets.js +208 -54
- package/dist/esm/pixel/characterGeneratorPresets.js.map +1 -1
- package/dist/esm/pixel/pixelEditorExports.js +42 -35
- package/dist/esm/pixel/pixelEditorExports.js.map +1 -1
- package/dist/esm/pixel/pixelEditorTypes.js +67 -33
- package/dist/esm/pixel/pixelEditorTypes.js.map +1 -1
- package/dist/esm/pixel/pixelEditorUtils.js +62 -38
- package/dist/esm/pixel/pixelEditorUtils.js.map +1 -1
- package/dist/esm/pixel/spriteGeneratorCore.js +47 -24
- package/dist/esm/pixel/spriteGeneratorCore.js.map +1 -1
- package/dist/esm/pixel/usePixelEditor.js +475 -213
- package/dist/esm/pixel/usePixelEditor.js.map +1 -1
- package/dist/esm/texture/Nice3DTexturePainter.js +201 -71
- package/dist/esm/texture/Nice3DTexturePainter.js.map +1 -1
- package/dist/esm/ui/NiceUIDesigner.js +280 -91
- package/dist/esm/ui/NiceUIDesigner.js.map +1 -1
- package/dist/esm/vector/NiceSvgToCode.js +96 -34
- package/dist/esm/vector/NiceSvgToCode.js.map +1 -1
- package/dist/esm/vector/VectorEditor.js +14 -13
- package/dist/esm/vector/VectorEditor.js.map +1 -1
- package/dist/esm/vector/VectorEditorMenuBar.js +7 -6
- package/dist/esm/vector/VectorEditorMenuBar.js.map +1 -1
- package/dist/esm/vector/VectorEditorRightPanel.js +87 -32
- package/dist/esm/vector/VectorEditorRightPanel.js.map +1 -1
- package/dist/esm/vector/VectorEditorShapeRenderer.js +17 -15
- package/dist/esm/vector/VectorEditorShapeRenderer.js.map +1 -1
- package/dist/esm/vector/VectorEditorStatusBar.js.map +1 -1
- package/dist/esm/vector/useVectorEditor.js +312 -122
- package/dist/esm/vector/useVectorEditor.js.map +1 -1
- package/dist/esm/vector/vectorBooleanOps.js +60 -42
- package/dist/esm/vector/vectorBooleanOps.js.map +1 -1
- package/dist/esm/vector/vectorEditorExport.js +40 -34
- package/dist/esm/vector/vectorEditorExport.js.map +1 -1
- package/dist/esm/vector/vectorGradients.js +41 -40
- package/dist/esm/vector/vectorGradients.js.map +1 -1
- package/package.json +2 -2
|
@@ -42,27 +42,28 @@ const useGameAssetEditor = (options = {}) => {
|
|
|
42
42
|
timestamp: Date.now(),
|
|
43
43
|
snapshot: JSON.parse(JSON.stringify(project)),
|
|
44
44
|
};
|
|
45
|
-
setHistory(prev => {
|
|
45
|
+
setHistory((prev) => {
|
|
46
46
|
const newHistory = prev.slice(0, historyIndex + 1);
|
|
47
47
|
newHistory.push(entry);
|
|
48
|
-
if (newHistory.length > MAX_HISTORY)
|
|
48
|
+
if (newHistory.length > MAX_HISTORY) {
|
|
49
49
|
newHistory.shift();
|
|
50
|
+
}
|
|
50
51
|
return newHistory;
|
|
51
52
|
});
|
|
52
|
-
setHistoryIndex(prev => Math.min(prev + 1, MAX_HISTORY - 1));
|
|
53
|
+
setHistoryIndex((prev) => Math.min(prev + 1, MAX_HISTORY - 1));
|
|
53
54
|
}, [project, historyIndex]);
|
|
54
55
|
const undo = useCallback(() => {
|
|
55
56
|
if (historyIndex > 0) {
|
|
56
57
|
const entry = history[historyIndex - 1];
|
|
57
58
|
setProject(entry.snapshot);
|
|
58
|
-
setHistoryIndex(prev => prev - 1);
|
|
59
|
+
setHistoryIndex((prev) => prev - 1);
|
|
59
60
|
}
|
|
60
61
|
}, [history, historyIndex]);
|
|
61
62
|
const redo = useCallback(() => {
|
|
62
63
|
if (historyIndex < history.length - 1) {
|
|
63
64
|
const entry = history[historyIndex + 1];
|
|
64
65
|
setProject(entry.snapshot);
|
|
65
|
-
setHistoryIndex(prev => prev + 1);
|
|
66
|
+
setHistoryIndex((prev) => prev + 1);
|
|
66
67
|
}
|
|
67
68
|
}, [history, historyIndex]);
|
|
68
69
|
// ─────────────────────────────────────────────────────────────
|
|
@@ -92,46 +93,46 @@ const useGameAssetEditor = (options = {}) => {
|
|
|
92
93
|
// Editor state operations
|
|
93
94
|
// ─────────────────────────────────────────────────────────────
|
|
94
95
|
const setMode = useCallback((mode) => {
|
|
95
|
-
setEditorState(prev => ({ ...prev, mode }));
|
|
96
|
+
setEditorState((prev) => ({ ...prev, mode }));
|
|
96
97
|
}, []);
|
|
97
98
|
const setTileMapTool = useCallback((tool) => {
|
|
98
|
-
setEditorState(prev => ({ ...prev, tileMapTool: tool }));
|
|
99
|
+
setEditorState((prev) => ({ ...prev, tileMapTool: tool }));
|
|
99
100
|
}, []);
|
|
100
101
|
const setSpriteSheetTool = useCallback((tool) => {
|
|
101
|
-
setEditorState(prev => ({ ...prev, spriteSheetTool: tool }));
|
|
102
|
+
setEditorState((prev) => ({ ...prev, spriteSheetTool: tool }));
|
|
102
103
|
}, []);
|
|
103
104
|
const setZoom = useCallback((zoom) => {
|
|
104
|
-
setEditorState(prev => ({ ...prev, zoom: Math.max(0.1, Math.min(10, zoom)) }));
|
|
105
|
+
setEditorState((prev) => ({ ...prev, zoom: Math.max(0.1, Math.min(10, zoom)) }));
|
|
105
106
|
}, []);
|
|
106
107
|
const setPan = useCallback((x, y) => {
|
|
107
|
-
setEditorState(prev => ({ ...prev, panX: x, panY: y }));
|
|
108
|
+
setEditorState((prev) => ({ ...prev, panX: x, panY: y }));
|
|
108
109
|
}, []);
|
|
109
110
|
const toggleGrid = useCallback(() => {
|
|
110
|
-
setEditorState(prev => ({ ...prev, showGrid: !prev.showGrid }));
|
|
111
|
+
setEditorState((prev) => ({ ...prev, showGrid: !prev.showGrid }));
|
|
111
112
|
}, []);
|
|
112
113
|
const toggleCollision = useCallback(() => {
|
|
113
|
-
setEditorState(prev => ({ ...prev, showCollision: !prev.showCollision }));
|
|
114
|
+
setEditorState((prev) => ({ ...prev, showCollision: !prev.showCollision }));
|
|
114
115
|
}, []);
|
|
115
116
|
const toggleSnap = useCallback(() => {
|
|
116
|
-
setEditorState(prev => ({ ...prev, snapToGrid: !prev.snapToGrid }));
|
|
117
|
+
setEditorState((prev) => ({ ...prev, snapToGrid: !prev.snapToGrid }));
|
|
117
118
|
}, []);
|
|
118
119
|
// ─────────────────────────────────────────────────────────────
|
|
119
120
|
// Tile set operations
|
|
120
121
|
// ─────────────────────────────────────────────────────────────
|
|
121
122
|
const addTile = useCallback((imageData, name) => {
|
|
122
123
|
const tile = createTileFromImage(imageData, name);
|
|
123
|
-
setProject(prev => ({ ...prev, tileSets: [...prev.tileSets, tile] }));
|
|
124
|
+
setProject((prev) => ({ ...prev, tileSets: [...prev.tileSets, tile] }));
|
|
124
125
|
pushHistory(`Add tile: ${name}`);
|
|
125
126
|
}, [pushHistory]);
|
|
126
127
|
const removeTile = useCallback((id) => {
|
|
127
|
-
setProject(prev => ({
|
|
128
|
+
setProject((prev) => ({
|
|
128
129
|
...prev,
|
|
129
|
-
tileSets: prev.tileSets.filter(t => t.id !== id),
|
|
130
|
+
tileSets: prev.tileSets.filter((t) => t.id !== id),
|
|
130
131
|
}));
|
|
131
132
|
pushHistory('Remove tile');
|
|
132
133
|
}, [pushHistory]);
|
|
133
134
|
const selectTile = useCallback((id) => {
|
|
134
|
-
setEditorState(prev => ({ ...prev, selectedTileId: id }));
|
|
135
|
+
setEditorState((prev) => ({ ...prev, selectedTileId: id }));
|
|
135
136
|
}, []);
|
|
136
137
|
const importTileSet = useCallback(async (file) => {
|
|
137
138
|
const dataUrl = await new Promise((resolve) => {
|
|
@@ -148,8 +149,8 @@ const useGameAssetEditor = (options = {}) => {
|
|
|
148
149
|
// ─────────────────────────────────────────────────────────────
|
|
149
150
|
const createTileMap = useCallback((name, width, height) => {
|
|
150
151
|
const map = createEmptyTileMap(name, width, height, project.settings.defaultTileWidth, project.settings.defaultTileHeight);
|
|
151
|
-
setProject(prev => ({ ...prev, tileMaps: [...prev.tileMaps, map] }));
|
|
152
|
-
setEditorState(prev => ({
|
|
152
|
+
setProject((prev) => ({ ...prev, tileMaps: [...prev.tileMaps, map] }));
|
|
153
|
+
setEditorState((prev) => ({
|
|
153
154
|
...prev,
|
|
154
155
|
activeTileMapId: map.id,
|
|
155
156
|
activeLayerId: map.layers[0].id,
|
|
@@ -157,16 +158,16 @@ const useGameAssetEditor = (options = {}) => {
|
|
|
157
158
|
pushHistory(`Create tile map: ${name}`);
|
|
158
159
|
}, [project.settings, pushHistory]);
|
|
159
160
|
const removeTileMap = useCallback((id) => {
|
|
160
|
-
setProject(prev => ({
|
|
161
|
+
setProject((prev) => ({
|
|
161
162
|
...prev,
|
|
162
|
-
tileMaps: prev.tileMaps.filter(m => m.id !== id),
|
|
163
|
+
tileMaps: prev.tileMaps.filter((m) => m.id !== id),
|
|
163
164
|
}));
|
|
164
165
|
pushHistory('Remove tile map');
|
|
165
166
|
}, [pushHistory]);
|
|
166
167
|
const selectTileMap = useCallback((id) => {
|
|
167
|
-
setEditorState(prev => {
|
|
168
|
+
setEditorState((prev) => {
|
|
168
169
|
var _a, _b;
|
|
169
|
-
const map = project.tileMaps.find(m => m.id === id);
|
|
170
|
+
const map = project.tileMaps.find((m) => m.id === id);
|
|
170
171
|
return {
|
|
171
172
|
...prev,
|
|
172
173
|
activeTileMapId: id,
|
|
@@ -175,14 +176,15 @@ const useGameAssetEditor = (options = {}) => {
|
|
|
175
176
|
});
|
|
176
177
|
}, [project.tileMaps]);
|
|
177
178
|
const setTile = useCallback((layerId, x, y, tileId) => {
|
|
178
|
-
setProject(prev => ({
|
|
179
|
+
setProject((prev) => ({
|
|
179
180
|
...prev,
|
|
180
|
-
tileMaps: prev.tileMaps.map(map => ({
|
|
181
|
+
tileMaps: prev.tileMaps.map((map) => ({
|
|
181
182
|
...map,
|
|
182
|
-
layers: map.layers.map(layer => {
|
|
183
|
-
if (layer.id !== layerId)
|
|
183
|
+
layers: map.layers.map((layer) => {
|
|
184
|
+
if (layer.id !== layerId) {
|
|
184
185
|
return layer;
|
|
185
|
-
|
|
186
|
+
}
|
|
187
|
+
const newTiles = layer.tiles.map((row) => [...row]);
|
|
186
188
|
if (y >= 0 && y < newTiles.length && x >= 0 && x < newTiles[0].length) {
|
|
187
189
|
newTiles[y][x] = tileId;
|
|
188
190
|
}
|
|
@@ -192,95 +194,107 @@ const useGameAssetEditor = (options = {}) => {
|
|
|
192
194
|
}));
|
|
193
195
|
}, []);
|
|
194
196
|
const fillTiles = useCallback((layerId, startX, startY, newTileId) => {
|
|
195
|
-
setProject(prev => {
|
|
197
|
+
setProject((prev) => {
|
|
196
198
|
var _a;
|
|
197
|
-
const map = prev.tileMaps.find(m => m.layers.some(l => l.id === layerId));
|
|
198
|
-
if (!map)
|
|
199
|
+
const map = prev.tileMaps.find((m) => m.layers.some((l) => l.id === layerId));
|
|
200
|
+
if (!map) {
|
|
199
201
|
return prev;
|
|
200
|
-
|
|
201
|
-
|
|
202
|
+
}
|
|
203
|
+
const layer = map.layers.find((l) => l.id === layerId);
|
|
204
|
+
if (!layer) {
|
|
202
205
|
return prev;
|
|
206
|
+
}
|
|
203
207
|
const targetId = (_a = layer.tiles[startY]) === null || _a === void 0 ? void 0 : _a[startX];
|
|
204
|
-
if (targetId === newTileId)
|
|
208
|
+
if (targetId === newTileId) {
|
|
205
209
|
return prev;
|
|
206
|
-
|
|
210
|
+
}
|
|
211
|
+
const newTiles = layer.tiles.map((row) => [...row]);
|
|
207
212
|
const stack = [[startX, startY]];
|
|
208
213
|
const visited = new Set();
|
|
209
214
|
while (stack.length > 0) {
|
|
210
215
|
const [x, y] = stack.pop();
|
|
211
216
|
const key = `${x},${y}`;
|
|
212
|
-
if (visited.has(key))
|
|
217
|
+
if (visited.has(key)) {
|
|
213
218
|
continue;
|
|
214
|
-
|
|
219
|
+
}
|
|
220
|
+
if (y < 0 || y >= newTiles.length || x < 0 || x >= newTiles[0].length) {
|
|
215
221
|
continue;
|
|
216
|
-
|
|
222
|
+
}
|
|
223
|
+
if (newTiles[y][x] !== targetId) {
|
|
217
224
|
continue;
|
|
225
|
+
}
|
|
218
226
|
visited.add(key);
|
|
219
227
|
newTiles[y][x] = newTileId;
|
|
220
228
|
stack.push([x + 1, y], [x - 1, y], [x, y + 1], [x, y - 1]);
|
|
221
229
|
}
|
|
222
230
|
return {
|
|
223
231
|
...prev,
|
|
224
|
-
tileMaps: prev.tileMaps.map(m => m.id === map.id
|
|
225
|
-
? {
|
|
232
|
+
tileMaps: prev.tileMaps.map((m) => m.id === map.id
|
|
233
|
+
? {
|
|
234
|
+
...m,
|
|
235
|
+
layers: m.layers.map((l) => (l.id === layerId ? { ...l, tiles: newTiles } : l)),
|
|
236
|
+
}
|
|
226
237
|
: m),
|
|
227
238
|
};
|
|
228
239
|
});
|
|
229
240
|
pushHistory('Fill tiles');
|
|
230
241
|
}, [pushHistory]);
|
|
231
242
|
const addLayer = useCallback(() => {
|
|
232
|
-
const map = project.tileMaps.find(m => m.id === editorState.activeTileMapId);
|
|
233
|
-
if (!map)
|
|
243
|
+
const map = project.tileMaps.find((m) => m.id === editorState.activeTileMapId);
|
|
244
|
+
if (!map) {
|
|
234
245
|
return;
|
|
246
|
+
}
|
|
235
247
|
const newLayer = createEmptyTileLayer(`Layer ${map.layers.length + 1}`, map.width, map.height);
|
|
236
|
-
setProject(prev => ({
|
|
248
|
+
setProject((prev) => ({
|
|
237
249
|
...prev,
|
|
238
|
-
tileMaps: prev.tileMaps.map(m => m.id === map.id ? { ...m, layers: [...m.layers, newLayer] } : m),
|
|
250
|
+
tileMaps: prev.tileMaps.map((m) => m.id === map.id ? { ...m, layers: [...m.layers, newLayer] } : m),
|
|
239
251
|
}));
|
|
240
|
-
setEditorState(prev => ({ ...prev, activeLayerId: newLayer.id }));
|
|
252
|
+
setEditorState((prev) => ({ ...prev, activeLayerId: newLayer.id }));
|
|
241
253
|
pushHistory('Add layer');
|
|
242
254
|
}, [project.tileMaps, editorState.activeTileMapId, pushHistory]);
|
|
243
255
|
const removeLayer = useCallback((id) => {
|
|
244
|
-
setProject(prev => ({
|
|
256
|
+
setProject((prev) => ({
|
|
245
257
|
...prev,
|
|
246
|
-
tileMaps: prev.tileMaps.map(m => ({
|
|
258
|
+
tileMaps: prev.tileMaps.map((m) => ({
|
|
247
259
|
...m,
|
|
248
|
-
layers: m.layers.filter(l => l.id !== id),
|
|
260
|
+
layers: m.layers.filter((l) => l.id !== id),
|
|
249
261
|
})),
|
|
250
262
|
}));
|
|
251
263
|
pushHistory('Remove layer');
|
|
252
264
|
}, [pushHistory]);
|
|
253
265
|
const selectLayer = useCallback((id) => {
|
|
254
|
-
setEditorState(prev => ({ ...prev, activeLayerId: id }));
|
|
266
|
+
setEditorState((prev) => ({ ...prev, activeLayerId: id }));
|
|
255
267
|
}, []);
|
|
256
268
|
const toggleLayerVisibility = useCallback((id) => {
|
|
257
|
-
setProject(prev => ({
|
|
269
|
+
setProject((prev) => ({
|
|
258
270
|
...prev,
|
|
259
|
-
tileMaps: prev.tileMaps.map(m => ({
|
|
271
|
+
tileMaps: prev.tileMaps.map((m) => ({
|
|
260
272
|
...m,
|
|
261
|
-
layers: m.layers.map(l => (l.id === id ? { ...l, visible: !l.visible } : l)),
|
|
273
|
+
layers: m.layers.map((l) => (l.id === id ? { ...l, visible: !l.visible } : l)),
|
|
262
274
|
})),
|
|
263
275
|
}));
|
|
264
276
|
}, []);
|
|
265
277
|
const setLayerOpacity = useCallback((id, opacity) => {
|
|
266
|
-
setProject(prev => ({
|
|
278
|
+
setProject((prev) => ({
|
|
267
279
|
...prev,
|
|
268
|
-
tileMaps: prev.tileMaps.map(m => ({
|
|
280
|
+
tileMaps: prev.tileMaps.map((m) => ({
|
|
269
281
|
...m,
|
|
270
|
-
layers: m.layers.map(l => (l.id === id ? { ...l, opacity } : l)),
|
|
282
|
+
layers: m.layers.map((l) => (l.id === id ? { ...l, opacity } : l)),
|
|
271
283
|
})),
|
|
272
284
|
}));
|
|
273
285
|
}, []);
|
|
274
286
|
const moveLayer = useCallback((id, direction) => {
|
|
275
|
-
setProject(prev => ({
|
|
287
|
+
setProject((prev) => ({
|
|
276
288
|
...prev,
|
|
277
|
-
tileMaps: prev.tileMaps.map(m => {
|
|
278
|
-
const idx = m.layers.findIndex(l => l.id === id);
|
|
279
|
-
if (idx === -1)
|
|
289
|
+
tileMaps: prev.tileMaps.map((m) => {
|
|
290
|
+
const idx = m.layers.findIndex((l) => l.id === id);
|
|
291
|
+
if (idx === -1) {
|
|
280
292
|
return m;
|
|
293
|
+
}
|
|
281
294
|
const newIdx = direction === 'up' ? idx - 1 : idx + 1;
|
|
282
|
-
if (newIdx < 0 || newIdx >= m.layers.length)
|
|
295
|
+
if (newIdx < 0 || newIdx >= m.layers.length) {
|
|
283
296
|
return m;
|
|
297
|
+
}
|
|
284
298
|
const newLayers = [...m.layers];
|
|
285
299
|
[newLayers[idx], newLayers[newIdx]] = [newLayers[newIdx], newLayers[idx]];
|
|
286
300
|
return { ...m, layers: newLayers };
|
|
@@ -315,103 +329,103 @@ const useGameAssetEditor = (options = {}) => {
|
|
|
315
329
|
frames: [],
|
|
316
330
|
animations: [],
|
|
317
331
|
};
|
|
318
|
-
setProject(prev => ({ ...prev, spriteSheets: [...prev.spriteSheets, sheet] }));
|
|
319
|
-
setEditorState(prev => ({ ...prev, activeSpriteSheetId: sheet.id }));
|
|
332
|
+
setProject((prev) => ({ ...prev, spriteSheets: [...prev.spriteSheets, sheet] }));
|
|
333
|
+
setEditorState((prev) => ({ ...prev, activeSpriteSheetId: sheet.id }));
|
|
320
334
|
pushHistory(`Import sprite sheet: ${sheet.name}`);
|
|
321
335
|
}, [pushHistory]);
|
|
322
336
|
const removeSpriteSheet = useCallback((id) => {
|
|
323
|
-
setProject(prev => ({
|
|
337
|
+
setProject((prev) => ({
|
|
324
338
|
...prev,
|
|
325
|
-
spriteSheets: prev.spriteSheets.filter(s => s.id !== id),
|
|
339
|
+
spriteSheets: prev.spriteSheets.filter((s) => s.id !== id),
|
|
326
340
|
}));
|
|
327
341
|
pushHistory('Remove sprite sheet');
|
|
328
342
|
}, [pushHistory]);
|
|
329
343
|
const selectSpriteSheet = useCallback((id) => {
|
|
330
|
-
setEditorState(prev => ({ ...prev, activeSpriteSheetId: id, selectedFrameIds: [] }));
|
|
344
|
+
setEditorState((prev) => ({ ...prev, activeSpriteSheetId: id, selectedFrameIds: [] }));
|
|
331
345
|
}, []);
|
|
332
346
|
const autoSlice = useCallback((frameWidth, frameHeight) => {
|
|
333
|
-
const sheet = project.spriteSheets.find(s => s.id === editorState.activeSpriteSheetId);
|
|
334
|
-
if (!(sheet === null || sheet === void 0 ? void 0 : sheet.imageData))
|
|
347
|
+
const sheet = project.spriteSheets.find((s) => s.id === editorState.activeSpriteSheetId);
|
|
348
|
+
if (!(sheet === null || sheet === void 0 ? void 0 : sheet.imageData)) {
|
|
335
349
|
return;
|
|
350
|
+
}
|
|
336
351
|
const frames = autoSliceSpriteSheet(sheet.imageData, frameWidth, frameHeight);
|
|
337
|
-
setProject(prev => ({
|
|
352
|
+
setProject((prev) => ({
|
|
338
353
|
...prev,
|
|
339
|
-
spriteSheets: prev.spriteSheets.map(s => s.id === sheet.id ? { ...s, frames } : s),
|
|
354
|
+
spriteSheets: prev.spriteSheets.map((s) => (s.id === sheet.id ? { ...s, frames } : s)),
|
|
340
355
|
}));
|
|
341
356
|
pushHistory('Auto-slice sprite sheet');
|
|
342
357
|
}, [project.spriteSheets, editorState.activeSpriteSheetId, pushHistory]);
|
|
343
358
|
const detectSprites = useCallback(() => {
|
|
344
|
-
const sheet = project.spriteSheets.find(s => s.id === editorState.activeSpriteSheetId);
|
|
345
|
-
if (!(sheet === null || sheet === void 0 ? void 0 : sheet.imageData))
|
|
359
|
+
const sheet = project.spriteSheets.find((s) => s.id === editorState.activeSpriteSheetId);
|
|
360
|
+
if (!(sheet === null || sheet === void 0 ? void 0 : sheet.imageData)) {
|
|
346
361
|
return;
|
|
362
|
+
}
|
|
347
363
|
const frames = detectFrames(sheet.imageData);
|
|
348
|
-
setProject(prev => ({
|
|
364
|
+
setProject((prev) => ({
|
|
349
365
|
...prev,
|
|
350
|
-
spriteSheets: prev.spriteSheets.map(s => s.id === sheet.id ? { ...s, frames } : s),
|
|
366
|
+
spriteSheets: prev.spriteSheets.map((s) => (s.id === sheet.id ? { ...s, frames } : s)),
|
|
351
367
|
}));
|
|
352
368
|
pushHistory('Detect sprites');
|
|
353
369
|
}, [project.spriteSheets, editorState.activeSpriteSheetId, pushHistory]);
|
|
354
370
|
const addFrame = useCallback((frame) => {
|
|
355
371
|
const newFrame = { ...frame, id: generateId('frame') };
|
|
356
|
-
setProject(prev => ({
|
|
372
|
+
setProject((prev) => ({
|
|
357
373
|
...prev,
|
|
358
|
-
spriteSheets: prev.spriteSheets.map(s => s.id === editorState.activeSpriteSheetId
|
|
359
|
-
? { ...s, frames: [...s.frames, newFrame] }
|
|
360
|
-
: s),
|
|
374
|
+
spriteSheets: prev.spriteSheets.map((s) => s.id === editorState.activeSpriteSheetId ? { ...s, frames: [...s.frames, newFrame] } : s),
|
|
361
375
|
}));
|
|
362
376
|
pushHistory('Add frame');
|
|
363
377
|
}, [editorState.activeSpriteSheetId, pushHistory]);
|
|
364
378
|
const updateFrame = useCallback((id, updates) => {
|
|
365
|
-
setProject(prev => ({
|
|
379
|
+
setProject((prev) => ({
|
|
366
380
|
...prev,
|
|
367
|
-
spriteSheets: prev.spriteSheets.map(s => ({
|
|
381
|
+
spriteSheets: prev.spriteSheets.map((s) => ({
|
|
368
382
|
...s,
|
|
369
|
-
frames: s.frames.map(f => (f.id === id ? { ...f, ...updates } : f)),
|
|
383
|
+
frames: s.frames.map((f) => (f.id === id ? { ...f, ...updates } : f)),
|
|
370
384
|
})),
|
|
371
385
|
}));
|
|
372
386
|
}, []);
|
|
373
387
|
const removeFrame = useCallback((id) => {
|
|
374
|
-
setProject(prev => ({
|
|
388
|
+
setProject((prev) => ({
|
|
375
389
|
...prev,
|
|
376
|
-
spriteSheets: prev.spriteSheets.map(s => ({
|
|
390
|
+
spriteSheets: prev.spriteSheets.map((s) => ({
|
|
377
391
|
...s,
|
|
378
|
-
frames: s.frames.filter(f => f.id !== id),
|
|
392
|
+
frames: s.frames.filter((f) => f.id !== id),
|
|
379
393
|
})),
|
|
380
394
|
}));
|
|
381
395
|
pushHistory('Remove frame');
|
|
382
396
|
}, [pushHistory]);
|
|
383
397
|
const selectFrames = useCallback((ids) => {
|
|
384
|
-
setEditorState(prev => ({ ...prev, selectedFrameIds: ids }));
|
|
398
|
+
setEditorState((prev) => ({ ...prev, selectedFrameIds: ids }));
|
|
385
399
|
}, []);
|
|
386
400
|
// ─────────────────────────────────────────────────────────────
|
|
387
401
|
// Animation operations
|
|
388
402
|
// ─────────────────────────────────────────────────────────────
|
|
389
403
|
const createAnimation = useCallback((name, frameIds) => {
|
|
390
404
|
const animation = createSpriteAnimation(name, frameIds);
|
|
391
|
-
setProject(prev => ({
|
|
405
|
+
setProject((prev) => ({
|
|
392
406
|
...prev,
|
|
393
|
-
spriteSheets: prev.spriteSheets.map(s => s.id === editorState.activeSpriteSheetId
|
|
407
|
+
spriteSheets: prev.spriteSheets.map((s) => s.id === editorState.activeSpriteSheetId
|
|
394
408
|
? { ...s, animations: [...s.animations, animation] }
|
|
395
409
|
: s),
|
|
396
410
|
}));
|
|
397
411
|
pushHistory(`Create animation: ${name}`);
|
|
398
412
|
}, [editorState.activeSpriteSheetId, pushHistory]);
|
|
399
413
|
const removeAnimation = useCallback((id) => {
|
|
400
|
-
setProject(prev => ({
|
|
414
|
+
setProject((prev) => ({
|
|
401
415
|
...prev,
|
|
402
|
-
spriteSheets: prev.spriteSheets.map(s => ({
|
|
416
|
+
spriteSheets: prev.spriteSheets.map((s) => ({
|
|
403
417
|
...s,
|
|
404
|
-
animations: s.animations.filter(a => a.id !== id),
|
|
418
|
+
animations: s.animations.filter((a) => a.id !== id),
|
|
405
419
|
})),
|
|
406
420
|
}));
|
|
407
421
|
pushHistory('Remove animation');
|
|
408
422
|
}, [pushHistory]);
|
|
409
423
|
const updateAnimation = useCallback((id, updates) => {
|
|
410
|
-
setProject(prev => ({
|
|
424
|
+
setProject((prev) => ({
|
|
411
425
|
...prev,
|
|
412
|
-
spriteSheets: prev.spriteSheets.map(s => ({
|
|
426
|
+
spriteSheets: prev.spriteSheets.map((s) => ({
|
|
413
427
|
...s,
|
|
414
|
-
animations: s.animations.map(a => (a.id === id ? { ...a, ...updates } : a)),
|
|
428
|
+
animations: s.animations.map((a) => (a.id === id ? { ...a, ...updates } : a)),
|
|
415
429
|
})),
|
|
416
430
|
}));
|
|
417
431
|
}, []);
|
|
@@ -428,19 +442,19 @@ const useGameAssetEditor = (options = {}) => {
|
|
|
428
442
|
entryStateId: '',
|
|
429
443
|
anyStateTransitions: [],
|
|
430
444
|
};
|
|
431
|
-
setProject(prev => ({ ...prev, stateMachines: [...prev.stateMachines, sm] }));
|
|
432
|
-
setEditorState(prev => ({ ...prev, activeStateMachineId: sm.id }));
|
|
445
|
+
setProject((prev) => ({ ...prev, stateMachines: [...prev.stateMachines, sm] }));
|
|
446
|
+
setEditorState((prev) => ({ ...prev, activeStateMachineId: sm.id }));
|
|
433
447
|
pushHistory(`Create state machine: ${name}`);
|
|
434
448
|
}, [pushHistory]);
|
|
435
449
|
const removeStateMachine = useCallback((id) => {
|
|
436
|
-
setProject(prev => ({
|
|
450
|
+
setProject((prev) => ({
|
|
437
451
|
...prev,
|
|
438
|
-
stateMachines: prev.stateMachines.filter(sm => sm.id !== id),
|
|
452
|
+
stateMachines: prev.stateMachines.filter((sm) => sm.id !== id),
|
|
439
453
|
}));
|
|
440
454
|
pushHistory('Remove state machine');
|
|
441
455
|
}, [pushHistory]);
|
|
442
456
|
const selectStateMachine = useCallback((id) => {
|
|
443
|
-
setEditorState(prev => ({ ...prev, activeStateMachineId: id, selectedStateId: null }));
|
|
457
|
+
setEditorState((prev) => ({ ...prev, activeStateMachineId: id, selectedStateId: null }));
|
|
444
458
|
}, []);
|
|
445
459
|
const addState = useCallback((name, animationId) => {
|
|
446
460
|
const state = {
|
|
@@ -451,9 +465,9 @@ const useGameAssetEditor = (options = {}) => {
|
|
|
451
465
|
loop: true,
|
|
452
466
|
position: { x: Math.random() * 400, y: Math.random() * 300 },
|
|
453
467
|
};
|
|
454
|
-
setProject(prev => ({
|
|
468
|
+
setProject((prev) => ({
|
|
455
469
|
...prev,
|
|
456
|
-
stateMachines: prev.stateMachines.map(sm => sm.id === editorState.activeStateMachineId
|
|
470
|
+
stateMachines: prev.stateMachines.map((sm) => sm.id === editorState.activeStateMachineId
|
|
457
471
|
? {
|
|
458
472
|
...sm,
|
|
459
473
|
states: [...sm.states, state],
|
|
@@ -464,25 +478,25 @@ const useGameAssetEditor = (options = {}) => {
|
|
|
464
478
|
pushHistory(`Add state: ${name}`);
|
|
465
479
|
}, [editorState.activeStateMachineId, pushHistory]);
|
|
466
480
|
const removeState = useCallback((id) => {
|
|
467
|
-
setProject(prev => ({
|
|
481
|
+
setProject((prev) => ({
|
|
468
482
|
...prev,
|
|
469
|
-
stateMachines: prev.stateMachines.map(sm => ({
|
|
483
|
+
stateMachines: prev.stateMachines.map((sm) => ({
|
|
470
484
|
...sm,
|
|
471
|
-
states: sm.states.filter(s => s.id !== id),
|
|
472
|
-
transitions: sm.transitions.filter(t => t.fromStateId !== id && t.toStateId !== id),
|
|
485
|
+
states: sm.states.filter((s) => s.id !== id),
|
|
486
|
+
transitions: sm.transitions.filter((t) => t.fromStateId !== id && t.toStateId !== id),
|
|
473
487
|
})),
|
|
474
488
|
}));
|
|
475
489
|
pushHistory('Remove state');
|
|
476
490
|
}, [pushHistory]);
|
|
477
491
|
const selectState = useCallback((id) => {
|
|
478
|
-
setEditorState(prev => ({ ...prev, selectedStateId: id }));
|
|
492
|
+
setEditorState((prev) => ({ ...prev, selectedStateId: id }));
|
|
479
493
|
}, []);
|
|
480
494
|
const updateState = useCallback((id, updates) => {
|
|
481
|
-
setProject(prev => ({
|
|
495
|
+
setProject((prev) => ({
|
|
482
496
|
...prev,
|
|
483
|
-
stateMachines: prev.stateMachines.map(sm => ({
|
|
497
|
+
stateMachines: prev.stateMachines.map((sm) => ({
|
|
484
498
|
...sm,
|
|
485
|
-
states: sm.states.map(s => (s.id === id ? { ...s, ...updates } : s)),
|
|
499
|
+
states: sm.states.map((s) => (s.id === id ? { ...s, ...updates } : s)),
|
|
486
500
|
})),
|
|
487
501
|
}));
|
|
488
502
|
}, []);
|
|
@@ -495,20 +509,20 @@ const useGameAssetEditor = (options = {}) => {
|
|
|
495
509
|
duration: 0.1,
|
|
496
510
|
priority: 0,
|
|
497
511
|
};
|
|
498
|
-
setProject(prev => ({
|
|
512
|
+
setProject((prev) => ({
|
|
499
513
|
...prev,
|
|
500
|
-
stateMachines: prev.stateMachines.map(sm => sm.id === editorState.activeStateMachineId
|
|
514
|
+
stateMachines: prev.stateMachines.map((sm) => sm.id === editorState.activeStateMachineId
|
|
501
515
|
? { ...sm, transitions: [...sm.transitions, transition] }
|
|
502
516
|
: sm),
|
|
503
517
|
}));
|
|
504
518
|
pushHistory('Add transition');
|
|
505
519
|
}, [editorState.activeStateMachineId, pushHistory]);
|
|
506
520
|
const removeTransition = useCallback((id) => {
|
|
507
|
-
setProject(prev => ({
|
|
521
|
+
setProject((prev) => ({
|
|
508
522
|
...prev,
|
|
509
|
-
stateMachines: prev.stateMachines.map(sm => ({
|
|
523
|
+
stateMachines: prev.stateMachines.map((sm) => ({
|
|
510
524
|
...sm,
|
|
511
|
-
transitions: sm.transitions.filter(t => t.id !== id),
|
|
525
|
+
transitions: sm.transitions.filter((t) => t.id !== id),
|
|
512
526
|
})),
|
|
513
527
|
}));
|
|
514
528
|
pushHistory('Remove transition');
|
|
@@ -520,20 +534,20 @@ const useGameAssetEditor = (options = {}) => {
|
|
|
520
534
|
type,
|
|
521
535
|
defaultValue: type === 'bool' ? false : 0,
|
|
522
536
|
};
|
|
523
|
-
setProject(prev => ({
|
|
537
|
+
setProject((prev) => ({
|
|
524
538
|
...prev,
|
|
525
|
-
stateMachines: prev.stateMachines.map(sm => sm.id === editorState.activeStateMachineId
|
|
539
|
+
stateMachines: prev.stateMachines.map((sm) => sm.id === editorState.activeStateMachineId
|
|
526
540
|
? { ...sm, parameters: [...sm.parameters, param] }
|
|
527
541
|
: sm),
|
|
528
542
|
}));
|
|
529
543
|
pushHistory(`Add parameter: ${name}`);
|
|
530
544
|
}, [editorState.activeStateMachineId, pushHistory]);
|
|
531
545
|
const removeParameter = useCallback((id) => {
|
|
532
|
-
setProject(prev => ({
|
|
546
|
+
setProject((prev) => ({
|
|
533
547
|
...prev,
|
|
534
|
-
stateMachines: prev.stateMachines.map(sm => ({
|
|
548
|
+
stateMachines: prev.stateMachines.map((sm) => ({
|
|
535
549
|
...sm,
|
|
536
|
-
parameters: sm.parameters.filter(p => p.id !== id),
|
|
550
|
+
parameters: sm.parameters.filter((p) => p.id !== id),
|
|
537
551
|
})),
|
|
538
552
|
}));
|
|
539
553
|
pushHistory('Remove parameter');
|
|
@@ -543,18 +557,18 @@ const useGameAssetEditor = (options = {}) => {
|
|
|
543
557
|
// ─────────────────────────────────────────────────────────────
|
|
544
558
|
const addEffect = useCallback((type) => {
|
|
545
559
|
const defaultParams = {
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
560
|
+
outline: { color: '#000000', thickness: 1 },
|
|
561
|
+
shadow: { color: '#00000080', offsetX: 2, offsetY: 2, blur: 0 },
|
|
562
|
+
glow: { color: '#ffffff', size: 4, intensity: 0.8 },
|
|
549
563
|
'palette-swap': { from: '#ffffff', to: '#ff0000' },
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
564
|
+
pixelate: { size: 4 },
|
|
565
|
+
blur: { radius: 2 },
|
|
566
|
+
brightness: { value: 0 },
|
|
567
|
+
contrast: { value: 0 },
|
|
568
|
+
saturation: { value: 0 },
|
|
555
569
|
'hue-shift': { degrees: 0 },
|
|
556
|
-
|
|
557
|
-
|
|
570
|
+
invert: {},
|
|
571
|
+
tint: { color: '#ffffff', amount: 0.5 },
|
|
558
572
|
};
|
|
559
573
|
const effect = {
|
|
560
574
|
id: generateId('effect'),
|
|
@@ -562,30 +576,30 @@ const useGameAssetEditor = (options = {}) => {
|
|
|
562
576
|
enabled: true,
|
|
563
577
|
params: { ...defaultParams[type] },
|
|
564
578
|
};
|
|
565
|
-
setCurrentEffects(prev => [...prev, effect]);
|
|
579
|
+
setCurrentEffects((prev) => [...prev, effect]);
|
|
566
580
|
}, []);
|
|
567
581
|
const removeEffect = useCallback((id) => {
|
|
568
|
-
setCurrentEffects(prev => prev.filter(e => e.id !== id));
|
|
582
|
+
setCurrentEffects((prev) => prev.filter((e) => e.id !== id));
|
|
569
583
|
}, []);
|
|
570
584
|
const updateEffect = useCallback((id, updates) => {
|
|
571
|
-
setCurrentEffects(prev => prev.map(e => (e.id === id ? { ...e, ...updates } : e)));
|
|
585
|
+
setCurrentEffects((prev) => prev.map((e) => (e.id === id ? { ...e, ...updates } : e)));
|
|
572
586
|
}, []);
|
|
573
587
|
const toggleEffect = useCallback((id) => {
|
|
574
|
-
setCurrentEffects(prev => prev.map(e => (e.id === id ? { ...e, enabled: !e.enabled } : e)));
|
|
588
|
+
setCurrentEffects((prev) => prev.map((e) => (e.id === id ? { ...e, enabled: !e.enabled } : e)));
|
|
575
589
|
}, []);
|
|
576
590
|
const saveEffectPreset = useCallback((name) => {
|
|
577
591
|
const preset = {
|
|
578
592
|
id: generateId('preset'),
|
|
579
593
|
name,
|
|
580
|
-
effects: currentEffects.map(e => ({ ...e, id: generateId('effect') })),
|
|
594
|
+
effects: currentEffects.map((e) => ({ ...e, id: generateId('effect') })),
|
|
581
595
|
};
|
|
582
|
-
setProject(prev => ({ ...prev, effectPresets: [...prev.effectPresets, preset] }));
|
|
596
|
+
setProject((prev) => ({ ...prev, effectPresets: [...prev.effectPresets, preset] }));
|
|
583
597
|
pushHistory(`Save effect preset: ${name}`);
|
|
584
598
|
}, [currentEffects, pushHistory]);
|
|
585
599
|
const loadEffectPreset = useCallback((id) => {
|
|
586
|
-
const preset = project.effectPresets.find(p => p.id === id);
|
|
600
|
+
const preset = project.effectPresets.find((p) => p.id === id);
|
|
587
601
|
if (preset) {
|
|
588
|
-
setCurrentEffects(preset.effects.map(e => ({ ...e, id: generateId('effect') })));
|
|
602
|
+
setCurrentEffects(preset.effects.map((e) => ({ ...e, id: generateId('effect') })));
|
|
589
603
|
}
|
|
590
604
|
}, [project.effectPresets]);
|
|
591
605
|
const previewEffects = useCallback((imageData) => {
|
|
@@ -596,9 +610,10 @@ const useGameAssetEditor = (options = {}) => {
|
|
|
596
610
|
// ─────────────────────────────────────────────────────────────
|
|
597
611
|
const exportTileMap = useCallback((format) => {
|
|
598
612
|
var _a;
|
|
599
|
-
const map = project.tileMaps.find(m => m.id === editorState.activeTileMapId);
|
|
600
|
-
if (!map)
|
|
613
|
+
const map = project.tileMaps.find((m) => m.id === editorState.activeTileMapId);
|
|
614
|
+
if (!map) {
|
|
601
615
|
return;
|
|
616
|
+
}
|
|
602
617
|
if (format === 'json') {
|
|
603
618
|
downloadJson(map, `${map.name}.json`);
|
|
604
619
|
}
|
|
@@ -614,13 +629,13 @@ const useGameAssetEditor = (options = {}) => {
|
|
|
614
629
|
const ctx = canvas.getContext('2d');
|
|
615
630
|
ctx.fillStyle = map.backgroundColor;
|
|
616
631
|
ctx.fillRect(0, 0, canvas.width, canvas.height);
|
|
617
|
-
for (const layer of map.layers.filter(l => l.visible)) {
|
|
632
|
+
for (const layer of map.layers.filter((l) => l.visible)) {
|
|
618
633
|
ctx.globalAlpha = layer.opacity;
|
|
619
634
|
for (let y = 0; y < map.height; y++) {
|
|
620
635
|
for (let x = 0; x < map.width; x++) {
|
|
621
636
|
const tileId = (_a = layer.tiles[y]) === null || _a === void 0 ? void 0 : _a[x];
|
|
622
637
|
if (tileId) {
|
|
623
|
-
const tile = project.tileSets.find(t => t.id === tileId);
|
|
638
|
+
const tile = project.tileSets.find((t) => t.id === tileId);
|
|
624
639
|
if (tile === null || tile === void 0 ? void 0 : tile.image) {
|
|
625
640
|
const tempCanvas = document.createElement('canvas');
|
|
626
641
|
tempCanvas.width = tile.image.width;
|
|
@@ -637,9 +652,10 @@ const useGameAssetEditor = (options = {}) => {
|
|
|
637
652
|
onExport === null || onExport === void 0 ? void 0 : onExport(JSON.stringify(map), format);
|
|
638
653
|
}, [project, editorState.activeTileMapId, onExport]);
|
|
639
654
|
const exportSpriteSheet = useCallback((format) => {
|
|
640
|
-
const sheet = project.spriteSheets.find(s => s.id === editorState.activeSpriteSheetId);
|
|
641
|
-
if (!sheet)
|
|
655
|
+
const sheet = project.spriteSheets.find((s) => s.id === editorState.activeSpriteSheetId);
|
|
656
|
+
if (!sheet) {
|
|
642
657
|
return;
|
|
658
|
+
}
|
|
643
659
|
if (format === 'json') {
|
|
644
660
|
const exportData = {
|
|
645
661
|
name: sheet.name,
|
|
@@ -674,9 +690,10 @@ const useGameAssetEditor = (options = {}) => {
|
|
|
674
690
|
onExport === null || onExport === void 0 ? void 0 : onExport(JSON.stringify(sheet), format);
|
|
675
691
|
}, [project.spriteSheets, editorState.activeSpriteSheetId, onExport]);
|
|
676
692
|
const exportStateMachine = useCallback((format) => {
|
|
677
|
-
const sm = project.stateMachines.find(s => s.id === editorState.activeStateMachineId);
|
|
678
|
-
if (!sm)
|
|
693
|
+
const sm = project.stateMachines.find((s) => s.id === editorState.activeStateMachineId);
|
|
694
|
+
if (!sm) {
|
|
679
695
|
return;
|
|
696
|
+
}
|
|
680
697
|
downloadJson(sm, `${sm.name}.statemachine.json`);
|
|
681
698
|
onExport === null || onExport === void 0 ? void 0 : onExport(JSON.stringify(sm), format);
|
|
682
699
|
}, [project.stateMachines, editorState.activeStateMachineId, onExport]);
|