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