@nice2dev/ui-graphics 1.0.0
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/CHANGELOG.md +84 -0
- package/LICENSE +21 -0
- package/README.md +339 -0
- package/dist/cjs/animation/AnimatedPerson.js +153 -0
- package/dist/cjs/animation/AnimatedPerson.js.map +1 -0
- package/dist/cjs/animation/AnimationEditor.js +106 -0
- package/dist/cjs/animation/AnimationEditor.js.map +1 -0
- package/dist/cjs/animation/Audience.js +59 -0
- package/dist/cjs/animation/Audience.js.map +1 -0
- package/dist/cjs/animation/BodyRenderer.js +33 -0
- package/dist/cjs/animation/BodyRenderer.js.map +1 -0
- package/dist/cjs/animation/animationHelper.js +272 -0
- package/dist/cjs/animation/animationHelper.js.map +1 -0
- package/dist/cjs/animation/characterTypes.js +75 -0
- package/dist/cjs/animation/characterTypes.js.map +1 -0
- package/dist/cjs/animation/choreoDSL.js +190 -0
- package/dist/cjs/animation/choreoDSL.js.map +1 -0
- package/dist/cjs/animation/choreography.js +41 -0
- package/dist/cjs/animation/choreography.js.map +1 -0
- package/dist/cjs/animation/karaokeIntegration.js +98 -0
- package/dist/cjs/animation/karaokeIntegration.js.map +1 -0
- package/dist/cjs/animation/lottieExport.js +128 -0
- package/dist/cjs/animation/lottieExport.js.map +1 -0
- package/dist/cjs/animation/motionPath.js +196 -0
- package/dist/cjs/animation/motionPath.js.map +1 -0
- package/dist/cjs/animation/physics.js +201 -0
- package/dist/cjs/animation/physics.js.map +1 -0
- package/dist/cjs/animation/rig/RigPlayer.js +63 -0
- package/dist/cjs/animation/rig/RigPlayer.js.map +1 -0
- package/dist/cjs/animation/rig/RiggedBody.js +30 -0
- package/dist/cjs/animation/rig/RiggedBody.js.map +1 -0
- package/dist/cjs/animation/rig/choreoRigBridge.js +63 -0
- package/dist/cjs/animation/rig/choreoRigBridge.js.map +1 -0
- package/dist/cjs/animation/rig/ik.js +22 -0
- package/dist/cjs/animation/rig/ik.js.map +1 -0
- package/dist/cjs/animation/rig/poseOps.js +49 -0
- package/dist/cjs/animation/rig/poseOps.js.map +1 -0
- package/dist/cjs/animation/rig/presets.js +60 -0
- package/dist/cjs/animation/rig/presets.js.map +1 -0
- package/dist/cjs/animation/rig/rigMath.js +41 -0
- package/dist/cjs/animation/rig/rigMath.js.map +1 -0
- package/dist/cjs/animation/rig/rigTypes.js +44 -0
- package/dist/cjs/animation/rig/rigTypes.js.map +1 -0
- package/dist/cjs/animation/shapes/arms.js +15 -0
- package/dist/cjs/animation/shapes/arms.js.map +1 -0
- package/dist/cjs/animation/shapes/eyes.js +52 -0
- package/dist/cjs/animation/shapes/eyes.js.map +1 -0
- package/dist/cjs/animation/shapes/hair.js +55 -0
- package/dist/cjs/animation/shapes/hair.js.map +1 -0
- package/dist/cjs/animation/shapes/heads.js +62 -0
- package/dist/cjs/animation/shapes/heads.js.map +1 -0
- package/dist/cjs/animation/shapes/headwear.js +44 -0
- package/dist/cjs/animation/shapes/headwear.js.map +1 -0
- package/dist/cjs/animation/shapes/legs.js +15 -0
- package/dist/cjs/animation/shapes/legs.js.map +1 -0
- package/dist/cjs/animation/shapes/mouths.js +53 -0
- package/dist/cjs/animation/shapes/mouths.js.map +1 -0
- package/dist/cjs/animation/shapes/noses.js +31 -0
- package/dist/cjs/animation/shapes/noses.js.map +1 -0
- package/dist/cjs/animation/shapes/outfits.js +43 -0
- package/dist/cjs/animation/shapes/outfits.js.map +1 -0
- package/dist/cjs/animation/shapes/torsos.js +13 -0
- package/dist/cjs/animation/shapes/torsos.js.map +1 -0
- package/dist/cjs/animation/spineExport.js +132 -0
- package/dist/cjs/animation/spineExport.js.map +1 -0
- package/dist/cjs/core/LocalUI.js +54 -0
- package/dist/cjs/core/LocalUI.js.map +1 -0
- package/dist/cjs/core/collaboration.js +259 -0
- package/dist/cjs/core/collaboration.js.map +1 -0
- package/dist/cjs/core/colorBlindness.js +97 -0
- package/dist/cjs/core/colorBlindness.js.map +1 -0
- package/dist/cjs/core/dragDrop.js +168 -0
- package/dist/cjs/core/dragDrop.js.map +1 -0
- package/dist/cjs/core/fixes.js +185 -0
- package/dist/cjs/core/fixes.js.map +1 -0
- package/dist/cjs/core/gridGuides.js +245 -0
- package/dist/cjs/core/gridGuides.js.map +1 -0
- package/dist/cjs/core/historyVisual.js +124 -0
- package/dist/cjs/core/historyVisual.js.map +1 -0
- package/dist/cjs/core/i18n.js +16 -0
- package/dist/cjs/core/i18n.js.map +1 -0
- package/dist/cjs/core/integrations.js +261 -0
- package/dist/cjs/core/integrations.js.map +1 -0
- package/dist/cjs/core/minimap.js +142 -0
- package/dist/cjs/core/minimap.js.map +1 -0
- package/dist/cjs/core/plugins.js +129 -0
- package/dist/cjs/core/plugins.js.map +1 -0
- package/dist/cjs/core/rtl.js +102 -0
- package/dist/cjs/core/rtl.js.map +1 -0
- package/dist/cjs/core/shortcuts.js +205 -0
- package/dist/cjs/core/shortcuts.js.map +1 -0
- package/dist/cjs/core/theme.js +171 -0
- package/dist/cjs/core/theme.js.map +1 -0
- package/dist/cjs/font/NiceFontEditor.js +193 -0
- package/dist/cjs/font/NiceFontEditor.js.map +1 -0
- package/dist/cjs/game/GameAsset2dEditor.js +371 -0
- package/dist/cjs/game/GameAsset2dEditor.js.map +1 -0
- package/dist/cjs/game/GameAsset2dEditor.module.css.js +6 -0
- package/dist/cjs/game/GameAsset2dEditor.module.css.js.map +1 -0
- package/dist/cjs/game/gameAssetTypes.js +20 -0
- package/dist/cjs/game/gameAssetTypes.js.map +1 -0
- package/dist/cjs/game/gameAssetUtils.js +475 -0
- package/dist/cjs/game/gameAssetUtils.js.map +1 -0
- package/dist/cjs/game/useGameAssetEditor.js +761 -0
- package/dist/cjs/game/useGameAssetEditor.js.map +1 -0
- package/dist/cjs/icon/NiceIconEditor.js +249 -0
- package/dist/cjs/icon/NiceIconEditor.js.map +1 -0
- package/dist/cjs/index.js +264 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/nice2dev-ui/dist/index.js +32070 -0
- package/dist/cjs/nice2dev-ui/dist/index.js.map +1 -0
- package/dist/cjs/nice2dev-ui-graphics.css +1 -0
- package/dist/cjs/photo/FilterThumb.js +29 -0
- package/dist/cjs/photo/FilterThumb.js.map +1 -0
- package/dist/cjs/photo/PhotoEditor.js +20 -0
- package/dist/cjs/photo/PhotoEditor.js.map +1 -0
- package/dist/cjs/photo/PhotoEditor.module.css.js +6 -0
- package/dist/cjs/photo/PhotoEditor.module.css.js.map +1 -0
- package/dist/cjs/photo/PhotoEditorCanvas.js +59 -0
- package/dist/cjs/photo/PhotoEditorCanvas.js.map +1 -0
- package/dist/cjs/photo/PhotoEditorLeftPanel.js +174 -0
- package/dist/cjs/photo/PhotoEditorLeftPanel.js.map +1 -0
- package/dist/cjs/photo/PhotoEditorToolbar.js +15 -0
- package/dist/cjs/photo/PhotoEditorToolbar.js.map +1 -0
- package/dist/cjs/photo/photoEditorActions.js +80 -0
- package/dist/cjs/photo/photoEditorActions.js.map +1 -0
- package/dist/cjs/photo/photoEditorTypes.js +40 -0
- package/dist/cjs/photo/photoEditorTypes.js.map +1 -0
- package/dist/cjs/photo/photoFilters.js +880 -0
- package/dist/cjs/photo/photoFilters.js.map +1 -0
- package/dist/cjs/photo/photoOverlays.js +651 -0
- package/dist/cjs/photo/photoOverlays.js.map +1 -0
- package/dist/cjs/photo/photoSelection.js +547 -0
- package/dist/cjs/photo/photoSelection.js.map +1 -0
- package/dist/cjs/photo/usePhotoEditor.js +640 -0
- package/dist/cjs/photo/usePhotoEditor.js.map +1 -0
- package/dist/cjs/pixel/HSVPicker.js +173 -0
- package/dist/cjs/pixel/HSVPicker.js.map +1 -0
- package/dist/cjs/pixel/PixelEditor.js +28 -0
- package/dist/cjs/pixel/PixelEditor.js.map +1 -0
- package/dist/cjs/pixel/PixelEditor.module.css.js +6 -0
- package/dist/cjs/pixel/PixelEditor.module.css.js.map +1 -0
- package/dist/cjs/pixel/PixelEditorCanvas.js +15 -0
- package/dist/cjs/pixel/PixelEditorCanvas.js.map +1 -0
- package/dist/cjs/pixel/PixelEditorMenuBar.js +11 -0
- package/dist/cjs/pixel/PixelEditorMenuBar.js.map +1 -0
- package/dist/cjs/pixel/PixelEditorRightPanel.js +15 -0
- package/dist/cjs/pixel/PixelEditorRightPanel.js.map +1 -0
- package/dist/cjs/pixel/PixelEditorStatusBar.js +15 -0
- package/dist/cjs/pixel/PixelEditorStatusBar.js.map +1 -0
- package/dist/cjs/pixel/PixelEditorTimeline.js +11 -0
- package/dist/cjs/pixel/PixelEditorTimeline.js.map +1 -0
- package/dist/cjs/pixel/PixelEditorToolbar.js +16 -0
- package/dist/cjs/pixel/PixelEditorToolbar.js.map +1 -0
- package/dist/cjs/pixel/asepriteFormat.js +512 -0
- package/dist/cjs/pixel/asepriteFormat.js.map +1 -0
- package/dist/cjs/pixel/pixelEditorExports.js +471 -0
- package/dist/cjs/pixel/pixelEditorExports.js.map +1 -0
- package/dist/cjs/pixel/pixelEditorTypes.js +102 -0
- package/dist/cjs/pixel/pixelEditorTypes.js.map +1 -0
- package/dist/cjs/pixel/pixelEditorUtils.js +664 -0
- package/dist/cjs/pixel/pixelEditorUtils.js.map +1 -0
- package/dist/cjs/pixel/usePixelEditor.js +1112 -0
- package/dist/cjs/pixel/usePixelEditor.js.map +1 -0
- package/dist/cjs/texture/Nice3DTexturePainter.js +236 -0
- package/dist/cjs/texture/Nice3DTexturePainter.js.map +1 -0
- package/dist/cjs/ui/NiceUIDesigner.js +191 -0
- package/dist/cjs/ui/NiceUIDesigner.js.map +1 -0
- package/dist/cjs/vector/VectorEditor.js +31 -0
- package/dist/cjs/vector/VectorEditor.js.map +1 -0
- package/dist/cjs/vector/VectorEditor.module.css.js +6 -0
- package/dist/cjs/vector/VectorEditor.module.css.js.map +1 -0
- package/dist/cjs/vector/VectorEditorMenuBar.js +16 -0
- package/dist/cjs/vector/VectorEditorMenuBar.js.map +1 -0
- package/dist/cjs/vector/VectorEditorRightPanel.js +126 -0
- package/dist/cjs/vector/VectorEditorRightPanel.js.map +1 -0
- package/dist/cjs/vector/VectorEditorShapeRenderer.js +55 -0
- package/dist/cjs/vector/VectorEditorShapeRenderer.js.map +1 -0
- package/dist/cjs/vector/VectorEditorStatusBar.js +14 -0
- package/dist/cjs/vector/VectorEditorStatusBar.js.map +1 -0
- package/dist/cjs/vector/useVectorEditor.js +613 -0
- package/dist/cjs/vector/useVectorEditor.js.map +1 -0
- package/dist/cjs/vector/vectorBooleanOps.js +511 -0
- package/dist/cjs/vector/vectorBooleanOps.js.map +1 -0
- package/dist/cjs/vector/vectorEditorExport.js +159 -0
- package/dist/cjs/vector/vectorEditorExport.js.map +1 -0
- package/dist/cjs/vector/vectorEditorImport.js +150 -0
- package/dist/cjs/vector/vectorEditorImport.js.map +1 -0
- package/dist/cjs/vector/vectorEditorTypes.js +72 -0
- package/dist/cjs/vector/vectorEditorTypes.js.map +1 -0
- package/dist/cjs/vector/vectorGradients.js +201 -0
- package/dist/cjs/vector/vectorGradients.js.map +1 -0
- package/dist/esm/animation/AnimatedPerson.js +151 -0
- package/dist/esm/animation/AnimatedPerson.js.map +1 -0
- package/dist/esm/animation/AnimationEditor.js +104 -0
- package/dist/esm/animation/AnimationEditor.js.map +1 -0
- package/dist/esm/animation/Audience.js +57 -0
- package/dist/esm/animation/Audience.js.map +1 -0
- package/dist/esm/animation/BodyRenderer.js +28 -0
- package/dist/esm/animation/BodyRenderer.js.map +1 -0
- package/dist/esm/animation/animationHelper.js +268 -0
- package/dist/esm/animation/animationHelper.js.map +1 -0
- package/dist/esm/animation/characterTypes.js +70 -0
- package/dist/esm/animation/characterTypes.js.map +1 -0
- package/dist/esm/animation/choreoDSL.js +182 -0
- package/dist/esm/animation/choreoDSL.js.map +1 -0
- package/dist/esm/animation/choreography.js +36 -0
- package/dist/esm/animation/choreography.js.map +1 -0
- package/dist/esm/animation/karaokeIntegration.js +91 -0
- package/dist/esm/animation/karaokeIntegration.js.map +1 -0
- package/dist/esm/animation/lottieExport.js +123 -0
- package/dist/esm/animation/lottieExport.js.map +1 -0
- package/dist/esm/animation/motionPath.js +185 -0
- package/dist/esm/animation/motionPath.js.map +1 -0
- package/dist/esm/animation/physics.js +192 -0
- package/dist/esm/animation/physics.js.map +1 -0
- package/dist/esm/animation/rig/RigPlayer.js +61 -0
- package/dist/esm/animation/rig/RigPlayer.js.map +1 -0
- package/dist/esm/animation/rig/RiggedBody.js +28 -0
- package/dist/esm/animation/rig/RiggedBody.js.map +1 -0
- package/dist/esm/animation/rig/choreoRigBridge.js +60 -0
- package/dist/esm/animation/rig/choreoRigBridge.js.map +1 -0
- package/dist/esm/animation/rig/ik.js +20 -0
- package/dist/esm/animation/rig/ik.js.map +1 -0
- package/dist/esm/animation/rig/poseOps.js +45 -0
- package/dist/esm/animation/rig/poseOps.js.map +1 -0
- package/dist/esm/animation/rig/presets.js +53 -0
- package/dist/esm/animation/rig/presets.js.map +1 -0
- package/dist/esm/animation/rig/rigMath.js +37 -0
- package/dist/esm/animation/rig/rigMath.js.map +1 -0
- package/dist/esm/animation/rig/rigTypes.js +40 -0
- package/dist/esm/animation/rig/rigTypes.js.map +1 -0
- package/dist/esm/animation/shapes/arms.js +13 -0
- package/dist/esm/animation/shapes/arms.js.map +1 -0
- package/dist/esm/animation/shapes/eyes.js +45 -0
- package/dist/esm/animation/shapes/eyes.js.map +1 -0
- package/dist/esm/animation/shapes/hair.js +46 -0
- package/dist/esm/animation/shapes/hair.js.map +1 -0
- package/dist/esm/animation/shapes/heads.js +52 -0
- package/dist/esm/animation/shapes/heads.js.map +1 -0
- package/dist/esm/animation/shapes/headwear.js +36 -0
- package/dist/esm/animation/shapes/headwear.js.map +1 -0
- package/dist/esm/animation/shapes/legs.js +13 -0
- package/dist/esm/animation/shapes/legs.js.map +1 -0
- package/dist/esm/animation/shapes/mouths.js +45 -0
- package/dist/esm/animation/shapes/mouths.js.map +1 -0
- package/dist/esm/animation/shapes/noses.js +23 -0
- package/dist/esm/animation/shapes/noses.js.map +1 -0
- package/dist/esm/animation/shapes/outfits.js +37 -0
- package/dist/esm/animation/shapes/outfits.js.map +1 -0
- package/dist/esm/animation/shapes/torsos.js +11 -0
- package/dist/esm/animation/shapes/torsos.js.map +1 -0
- package/dist/esm/animation/spineExport.js +128 -0
- package/dist/esm/animation/spineExport.js.map +1 -0
- package/dist/esm/core/LocalUI.js +50 -0
- package/dist/esm/core/LocalUI.js.map +1 -0
- package/dist/esm/core/collaboration.js +252 -0
- package/dist/esm/core/collaboration.js.map +1 -0
- package/dist/esm/core/colorBlindness.js +90 -0
- package/dist/esm/core/colorBlindness.js.map +1 -0
- package/dist/esm/core/dragDrop.js +165 -0
- package/dist/esm/core/dragDrop.js.map +1 -0
- package/dist/esm/core/fixes.js +179 -0
- package/dist/esm/core/fixes.js.map +1 -0
- package/dist/esm/core/gridGuides.js +232 -0
- package/dist/esm/core/gridGuides.js.map +1 -0
- package/dist/esm/core/historyVisual.js +121 -0
- package/dist/esm/core/historyVisual.js.map +1 -0
- package/dist/esm/core/i18n.js +13 -0
- package/dist/esm/core/i18n.js.map +1 -0
- package/dist/esm/core/integrations.js +254 -0
- package/dist/esm/core/integrations.js.map +1 -0
- package/dist/esm/core/minimap.js +139 -0
- package/dist/esm/core/minimap.js.map +1 -0
- package/dist/esm/core/plugins.js +124 -0
- package/dist/esm/core/plugins.js.map +1 -0
- package/dist/esm/core/rtl.js +95 -0
- package/dist/esm/core/rtl.js.map +1 -0
- package/dist/esm/core/shortcuts.js +200 -0
- package/dist/esm/core/shortcuts.js.map +1 -0
- package/dist/esm/core/theme.js +162 -0
- package/dist/esm/core/theme.js.map +1 -0
- package/dist/esm/font/NiceFontEditor.js +189 -0
- package/dist/esm/font/NiceFontEditor.js.map +1 -0
- package/dist/esm/game/GameAsset2dEditor.js +369 -0
- package/dist/esm/game/GameAsset2dEditor.js.map +1 -0
- package/dist/esm/game/GameAsset2dEditor.module.css.js +4 -0
- package/dist/esm/game/GameAsset2dEditor.module.css.js.map +1 -0
- package/dist/esm/game/gameAssetTypes.js +18 -0
- package/dist/esm/game/gameAssetTypes.js.map +1 -0
- package/dist/esm/game/gameAssetUtils.js +456 -0
- package/dist/esm/game/gameAssetUtils.js.map +1 -0
- package/dist/esm/game/useGameAssetEditor.js +759 -0
- package/dist/esm/game/useGameAssetEditor.js.map +1 -0
- package/dist/esm/icon/NiceIconEditor.js +246 -0
- package/dist/esm/icon/NiceIconEditor.js.map +1 -0
- package/dist/esm/index.js +59 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/nice2dev-ui/dist/index.js +31720 -0
- package/dist/esm/nice2dev-ui/dist/index.js.map +1 -0
- package/dist/esm/nice2dev-ui-graphics.css +1 -0
- package/dist/esm/photo/FilterThumb.js +27 -0
- package/dist/esm/photo/FilterThumb.js.map +1 -0
- package/dist/esm/photo/PhotoEditor.js +18 -0
- package/dist/esm/photo/PhotoEditor.js.map +1 -0
- package/dist/esm/photo/PhotoEditor.module.css.js +4 -0
- package/dist/esm/photo/PhotoEditor.module.css.js.map +1 -0
- package/dist/esm/photo/PhotoEditorCanvas.js +57 -0
- package/dist/esm/photo/PhotoEditorCanvas.js.map +1 -0
- package/dist/esm/photo/PhotoEditorLeftPanel.js +172 -0
- package/dist/esm/photo/PhotoEditorLeftPanel.js.map +1 -0
- package/dist/esm/photo/PhotoEditorToolbar.js +13 -0
- package/dist/esm/photo/PhotoEditorToolbar.js.map +1 -0
- package/dist/esm/photo/photoEditorActions.js +75 -0
- package/dist/esm/photo/photoEditorActions.js.map +1 -0
- package/dist/esm/photo/photoEditorTypes.js +36 -0
- package/dist/esm/photo/photoEditorTypes.js.map +1 -0
- package/dist/esm/photo/photoFilters.js +871 -0
- package/dist/esm/photo/photoFilters.js.map +1 -0
- package/dist/esm/photo/photoOverlays.js +636 -0
- package/dist/esm/photo/photoOverlays.js.map +1 -0
- package/dist/esm/photo/photoSelection.js +535 -0
- package/dist/esm/photo/photoSelection.js.map +1 -0
- package/dist/esm/photo/usePhotoEditor.js +638 -0
- package/dist/esm/photo/usePhotoEditor.js.map +1 -0
- package/dist/esm/pixel/HSVPicker.js +171 -0
- package/dist/esm/pixel/HSVPicker.js.map +1 -0
- package/dist/esm/pixel/PixelEditor.js +26 -0
- package/dist/esm/pixel/PixelEditor.js.map +1 -0
- package/dist/esm/pixel/PixelEditor.module.css.js +4 -0
- package/dist/esm/pixel/PixelEditor.module.css.js.map +1 -0
- package/dist/esm/pixel/PixelEditorCanvas.js +13 -0
- package/dist/esm/pixel/PixelEditorCanvas.js.map +1 -0
- package/dist/esm/pixel/PixelEditorMenuBar.js +9 -0
- package/dist/esm/pixel/PixelEditorMenuBar.js.map +1 -0
- package/dist/esm/pixel/PixelEditorRightPanel.js +13 -0
- package/dist/esm/pixel/PixelEditorRightPanel.js.map +1 -0
- package/dist/esm/pixel/PixelEditorStatusBar.js +13 -0
- package/dist/esm/pixel/PixelEditorStatusBar.js.map +1 -0
- package/dist/esm/pixel/PixelEditorTimeline.js +9 -0
- package/dist/esm/pixel/PixelEditorTimeline.js.map +1 -0
- package/dist/esm/pixel/PixelEditorToolbar.js +14 -0
- package/dist/esm/pixel/PixelEditorToolbar.js.map +1 -0
- package/dist/esm/pixel/asepriteFormat.js +505 -0
- package/dist/esm/pixel/asepriteFormat.js.map +1 -0
- package/dist/esm/pixel/pixelEditorExports.js +461 -0
- package/dist/esm/pixel/pixelEditorExports.js.map +1 -0
- package/dist/esm/pixel/pixelEditorTypes.js +90 -0
- package/dist/esm/pixel/pixelEditorTypes.js.map +1 -0
- package/dist/esm/pixel/pixelEditorUtils.js +631 -0
- package/dist/esm/pixel/pixelEditorUtils.js.map +1 -0
- package/dist/esm/pixel/usePixelEditor.js +1110 -0
- package/dist/esm/pixel/usePixelEditor.js.map +1 -0
- package/dist/esm/texture/Nice3DTexturePainter.js +233 -0
- package/dist/esm/texture/Nice3DTexturePainter.js.map +1 -0
- package/dist/esm/ui/NiceUIDesigner.js +187 -0
- package/dist/esm/ui/NiceUIDesigner.js.map +1 -0
- package/dist/esm/vector/VectorEditor.js +29 -0
- package/dist/esm/vector/VectorEditor.js.map +1 -0
- package/dist/esm/vector/VectorEditor.module.css.js +4 -0
- package/dist/esm/vector/VectorEditor.module.css.js.map +1 -0
- package/dist/esm/vector/VectorEditorMenuBar.js +14 -0
- package/dist/esm/vector/VectorEditorMenuBar.js.map +1 -0
- package/dist/esm/vector/VectorEditorRightPanel.js +124 -0
- package/dist/esm/vector/VectorEditorRightPanel.js.map +1 -0
- package/dist/esm/vector/VectorEditorShapeRenderer.js +53 -0
- package/dist/esm/vector/VectorEditorShapeRenderer.js.map +1 -0
- package/dist/esm/vector/VectorEditorStatusBar.js +12 -0
- package/dist/esm/vector/VectorEditorStatusBar.js.map +1 -0
- package/dist/esm/vector/useVectorEditor.js +611 -0
- package/dist/esm/vector/useVectorEditor.js.map +1 -0
- package/dist/esm/vector/vectorBooleanOps.js +507 -0
- package/dist/esm/vector/vectorBooleanOps.js.map +1 -0
- package/dist/esm/vector/vectorEditorExport.js +152 -0
- package/dist/esm/vector/vectorEditorExport.js.map +1 -0
- package/dist/esm/vector/vectorEditorImport.js +148 -0
- package/dist/esm/vector/vectorEditorImport.js.map +1 -0
- package/dist/esm/vector/vectorEditorTypes.js +63 -0
- package/dist/esm/vector/vectorEditorTypes.js.map +1 -0
- package/dist/esm/vector/vectorGradients.js +193 -0
- package/dist/esm/vector/vectorGradients.js.map +1 -0
- package/dist/types/__benchmarks__/bench.d.ts +13 -0
- package/dist/types/__tests__/setup.d.ts +4 -0
- package/dist/types/animation/AnimatedPerson.d.ts +14 -0
- package/dist/types/animation/AnimationEditor.d.ts +20 -0
- package/dist/types/animation/Audience.d.ts +11 -0
- package/dist/types/animation/BodyRenderer.d.ts +12 -0
- package/dist/types/animation/animationHelper.d.ts +28 -0
- package/dist/types/animation/characterTypes.d.ts +37 -0
- package/dist/types/animation/choreoDSL.d.ts +88 -0
- package/dist/types/animation/choreography.d.ts +8 -0
- package/dist/types/animation/karaokeIntegration.d.ts +31 -0
- package/dist/types/animation/lottieExport.d.ts +77 -0
- package/dist/types/animation/motionPath.d.ts +60 -0
- package/dist/types/animation/physics.d.ts +73 -0
- package/dist/types/animation/rig/RigPlayer.d.ts +32 -0
- package/dist/types/animation/rig/RiggedBody.d.ts +19 -0
- package/dist/types/animation/rig/choreoRigBridge.d.ts +9 -0
- package/dist/types/animation/rig/ik.d.ts +8 -0
- package/dist/types/animation/rig/poseOps.d.ts +14 -0
- package/dist/types/animation/rig/presets.d.ts +13 -0
- package/dist/types/animation/rig/rigMath.d.ts +7 -0
- package/dist/types/animation/rig/rigTypes.d.ts +38 -0
- package/dist/types/animation/shapes/arms.d.ts +10 -0
- package/dist/types/animation/shapes/eyes.d.ts +17 -0
- package/dist/types/animation/shapes/hair.d.ts +17 -0
- package/dist/types/animation/shapes/heads.d.ts +18 -0
- package/dist/types/animation/shapes/headwear.d.ts +16 -0
- package/dist/types/animation/shapes/legs.d.ts +10 -0
- package/dist/types/animation/shapes/mouths.d.ts +17 -0
- package/dist/types/animation/shapes/noses.d.ts +17 -0
- package/dist/types/animation/shapes/outfits.d.ts +14 -0
- package/dist/types/animation/shapes/torsos.d.ts +9 -0
- package/dist/types/animation/spineExport.d.ts +66 -0
- package/dist/types/core/LocalUI.d.ts +21 -0
- package/dist/types/core/collaboration.d.ts +164 -0
- package/dist/types/core/colorBlindness.d.ts +24 -0
- package/dist/types/core/dragDrop.d.ts +46 -0
- package/dist/types/core/fixes.d.ts +80 -0
- package/dist/types/core/gridGuides.d.ts +70 -0
- package/dist/types/core/historyVisual.d.ts +915 -0
- package/dist/types/core/i18n.d.ts +27 -0
- package/dist/types/core/integrations.d.ts +103 -0
- package/dist/types/core/minimap.d.ts +49 -0
- package/dist/types/core/plugins.d.ts +111 -0
- package/dist/types/core/rtl.d.ts +32 -0
- package/dist/types/core/shortcuts.d.ts +150 -0
- package/dist/types/core/theme.d.ts +78 -0
- package/dist/types/core/useGamepad.d.ts +64 -0
- package/dist/types/core/usePointerPressure.d.ts +88 -0
- package/dist/types/font/NiceFontEditor.d.ts +62 -0
- package/dist/types/game/AnimationPreviewPlayer.d.ts +29 -0
- package/dist/types/game/CollisionEditor.d.ts +101 -0
- package/dist/types/game/GameAsset2dEditor.d.ts +17 -0
- package/dist/types/game/GameAssetExportPanel.d.ts +20 -0
- package/dist/types/game/IsometricEditor.d.ts +22 -0
- package/dist/types/game/IsometricTilePanel.d.ts +18 -0
- package/dist/types/game/gameAssetExport.d.ts +160 -0
- package/dist/types/game/gameAssetTypes.d.ts +238 -0
- package/dist/types/game/gameAssetUtils.d.ts +23 -0
- package/dist/types/game/index.d.ts +8 -0
- package/dist/types/game/isometricTiles.d.ts +250 -0
- package/dist/types/game/useAnimationPreview.d.ts +63 -0
- package/dist/types/game/useCollisionEditor.d.ts +96 -0
- package/dist/types/game/useGameAssetEditor.d.ts +79 -0
- package/dist/types/game/useGameAssetExport.d.ts +82 -0
- package/dist/types/icon/NiceIconEditor.d.ts +79 -0
- package/dist/types/index.d.ts +85 -0
- package/dist/types/photo/BatchProcessingPanel.d.ts +13 -0
- package/dist/types/photo/FaceDetectionPanel.d.ts +18 -0
- package/dist/types/photo/FilterThumb.d.ts +14 -0
- package/dist/types/photo/PerspectiveCorrectionPanel.d.ts +17 -0
- package/dist/types/photo/PhotoEditor.d.ts +2 -0
- package/dist/types/photo/PhotoEditorCanvas.d.ts +14 -0
- package/dist/types/photo/PhotoEditorLeftPanel.d.ts +13 -0
- package/dist/types/photo/PhotoEditorToolbar.d.ts +13 -0
- package/dist/types/photo/RawFilePanel.d.ts +14 -0
- package/dist/types/photo/StyleTransferPanel.d.ts +15 -0
- package/dist/types/photo/aiStyleTransfer.d.ts +58 -0
- package/dist/types/photo/batchProcessing.d.ts +95 -0
- package/dist/types/photo/faceDetection.d.ts +103 -0
- package/dist/types/photo/index.d.ts +17 -0
- package/dist/types/photo/perspectiveCorrection.d.ts +134 -0
- package/dist/types/photo/photoEditorActions.d.ts +40 -0
- package/dist/types/photo/photoEditorTypes.d.ts +34 -0
- package/dist/types/photo/photoFilters.d.ts +55 -0
- package/dist/types/photo/photoOverlays.d.ts +126 -0
- package/dist/types/photo/photoSelection.d.ts +56 -0
- package/dist/types/photo/rawFileSupport.d.ts +124 -0
- package/dist/types/photo/usePhotoEditor.d.ts +123 -0
- package/dist/types/pixel/HSVPicker.d.ts +11 -0
- package/dist/types/pixel/PaletteExtractorPanel.d.ts +16 -0
- package/dist/types/pixel/PixelEditor.d.ts +17 -0
- package/dist/types/pixel/PixelEditorCanvas.d.ts +10 -0
- package/dist/types/pixel/PixelEditorMenuBar.d.ts +11 -0
- package/dist/types/pixel/PixelEditorRightPanel.d.ts +11 -0
- package/dist/types/pixel/PixelEditorStatusBar.d.ts +11 -0
- package/dist/types/pixel/PixelEditorTimeline.d.ts +11 -0
- package/dist/types/pixel/PixelEditorToolbar.d.ts +11 -0
- package/dist/types/pixel/TileMapPanel.d.ts +14 -0
- package/dist/types/pixel/asepriteFormat.d.ts +62 -0
- package/dist/types/pixel/paletteExtractor.d.ts +73 -0
- package/dist/types/pixel/pixelEditorExports.d.ts +31 -0
- package/dist/types/pixel/pixelEditorTypes.d.ts +51 -0
- package/dist/types/pixel/pixelEditorUtils.d.ts +136 -0
- package/dist/types/pixel/tileMapMode.d.ts +122 -0
- package/dist/types/pixel/usePixelEditor.d.ts +114 -0
- package/dist/types/texture/Nice3DTexturePainter.d.ts +55 -0
- package/dist/types/ui/NiceUIDesigner.d.ts +43 -0
- package/dist/types/vector/PathSimplificationPanel.d.ts +15 -0
- package/dist/types/vector/PdfExportPanel.d.ts +20 -0
- package/dist/types/vector/TextOnPathPanel.d.ts +26 -0
- package/dist/types/vector/VectorEditor.d.ts +32 -0
- package/dist/types/vector/VectorEditorMenuBar.d.ts +8 -0
- package/dist/types/vector/VectorEditorRightPanel.d.ts +7 -0
- package/dist/types/vector/VectorEditorShapeRenderer.d.ts +9 -0
- package/dist/types/vector/VectorEditorStatusBar.d.ts +9 -0
- package/dist/types/vector/VectorFilterPanel.d.ts +19 -0
- package/dist/types/vector/VectorPatternPanel.d.ts +21 -0
- package/dist/types/vector/pathSimplification.d.ts +135 -0
- package/dist/types/vector/pdfExport.d.ts +65 -0
- package/dist/types/vector/textOnPath.d.ts +145 -0
- package/dist/types/vector/useVectorEditor.d.ts +90 -0
- package/dist/types/vector/vectorBooleanOps.d.ts +22 -0
- package/dist/types/vector/vectorEditorExport.d.ts +8 -0
- package/dist/types/vector/vectorEditorImport.d.ts +7 -0
- package/dist/types/vector/vectorEditorTypes.d.ts +47 -0
- package/dist/types/vector/vectorGradients.d.ts +64 -0
- package/dist/types/vector/vectorPatternFills.d.ts +101 -0
- package/dist/types/vector/vectorSvgFilters.d.ts +134 -0
- package/package.json +93 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to `@nice2dev/ui-graphics` will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## [1.1.0] — 2026-06-15
|
|
11
|
+
|
|
12
|
+
### 🚀 Major Feature Release
|
|
13
|
+
|
|
14
|
+
Massive expansion: 4 new editors, physics engine, integrations, collaboration, and significant UX improvements.
|
|
15
|
+
|
|
16
|
+
### New Editors
|
|
17
|
+
|
|
18
|
+
- **NiceIconEditor** — SVG icon design with grid alignment, variant support (outline/filled/duotone), React component export
|
|
19
|
+
- **NiceUIDesigner** — drag & drop UI builder with 12 component types and React/TSX code generation
|
|
20
|
+
- **Nice3DTexturePainter** — UV texture painting with layer support, brush tools, blend modes
|
|
21
|
+
- **NiceFontEditor** — glyph editor with Unicode mapping, SVG font export, text preview
|
|
22
|
+
|
|
23
|
+
### Animation
|
|
24
|
+
|
|
25
|
+
- **Physics simulation** — Verlet integration engine with ragdoll (14-bone) and cloth (spring-mass grid)
|
|
26
|
+
- **Motion path editor** — cubic Bézier paths with arc-length parameterization, preset paths (linear, circular, figure-8)
|
|
27
|
+
- **Lottie/Bodymovin export** — export animations to Lottie JSON format
|
|
28
|
+
- **Spine export** — export to Spine 4.1 JSON format for game engine integration
|
|
29
|
+
|
|
30
|
+
### Shared Editor Features
|
|
31
|
+
|
|
32
|
+
- **Plugin system** — extensible architecture with tool/filter/exporter/panel/menu registration and React context
|
|
33
|
+
- **Visual undo/redo** — timeline-based history with thumbnail previews and jump-to-any-point
|
|
34
|
+
- **Customizable shortcuts** — remappable keyboard shortcuts with localStorage persistence
|
|
35
|
+
- **External drag & drop** — drop files from desktop with MIME validation and image conversion
|
|
36
|
+
- **RTL UI support** — full right-to-left layout with CSS logical properties and auto-detection
|
|
37
|
+
|
|
38
|
+
### UX Improvements
|
|
39
|
+
|
|
40
|
+
- **Zoom navigator (minimap)** — draggable viewport overview with position presets
|
|
41
|
+
- **Grid, guides & rulers** — configurable grid, horizontal/vertical rulers, draggable guides with snap
|
|
42
|
+
- **Color blindness simulation** — 9 vision type simulations (Machado et al.), canvas filter + SVG filter generation
|
|
43
|
+
- **Dark/light theme** — 20+ color tokens, auto system theme detection, localStorage persistence
|
|
44
|
+
|
|
45
|
+
### Integrations
|
|
46
|
+
|
|
47
|
+
- **Unsplash/Pexels** — stock image search providers
|
|
48
|
+
- **Adobe Creative Cloud** — OAuth connector with library import
|
|
49
|
+
- **Figma** — file import with SVG extraction and plugin code export
|
|
50
|
+
- **Template library** — searchable template system with categories
|
|
51
|
+
- **AI image generation** — OpenAI DALL-E 3, Stability AI, and custom provider support
|
|
52
|
+
|
|
53
|
+
### Collaboration
|
|
54
|
+
|
|
55
|
+
- **Real-time editing** — WebSocket transport with cursor/selection sync and operation broadcasting
|
|
56
|
+
- **Comments & annotations** — threaded comments anchored to canvas coordinates
|
|
57
|
+
- **Version history** — snapshot system with named versions and thumbnail previews
|
|
58
|
+
|
|
59
|
+
### Bug Fixes
|
|
60
|
+
|
|
61
|
+
- **Retina canvas** — proper devicePixelRatio scaling for sharp rendering on HiDPI displays
|
|
62
|
+
- **Vector performance** — SpatialHashGrid for O(1) spatial queries with >100 shapes
|
|
63
|
+
- **Animation memory leak** — AnimationCleanup utility for tracking and disposing RAF/timer resources
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## [1.0.0] — 2026-03-17
|
|
68
|
+
|
|
69
|
+
### 🎨 Initial Release
|
|
70
|
+
|
|
71
|
+
First stable release of `@nice2dev/ui-graphics` — pixel, vector, photo & animation editors for React.
|
|
72
|
+
|
|
73
|
+
### Features
|
|
74
|
+
|
|
75
|
+
- **NicePixelEditor** — full pixel art editor with layers, palette, tools, animation timeline
|
|
76
|
+
- **NiceVectorEditor** — SVG-based vector drawing with shapes, paths, groups, boolean ops
|
|
77
|
+
- **NicePhotoEditor** — image editing with filters, adjustments, crop, rotate, resize
|
|
78
|
+
- **NiceAnimationEditor** — frame-by-frame and tweened animation with onion skinning
|
|
79
|
+
- **NiceAnimatedPerson** — rigged character with poses, limb manipulation, expressions
|
|
80
|
+
- **Export** — PNG, JPEG, SVG, GIF, sprite sheet export
|
|
81
|
+
- **Undo/Redo** — full history stack for all editors
|
|
82
|
+
- **Clipboard** — copy/paste shapes, selections, layers across editors
|
|
83
|
+
- **Grid & Snapping** — pixel grid, smart guides, snap-to-grid
|
|
84
|
+
- **Color** — RGBA, HSLA, HEX picker with palette management
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 NiceToDev
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,339 @@
|
|
|
1
|
+
# @nice2dev/ui-graphics
|
|
2
|
+
|
|
3
|
+
> Professional-grade Pixel, Vector, Photo, Animation and Game Asset editors for React — fully tree-shakeable, zero external UI dependencies.
|
|
4
|
+
|
|
5
|
+
[](https://www.npmjs.com/package/@nice2dev/ui-graphics)
|
|
6
|
+
[](LICENSE)
|
|
7
|
+
[](https://www.typescriptlang.org/)
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Features
|
|
12
|
+
|
|
13
|
+
### Editors
|
|
14
|
+
|
|
15
|
+
- **PixelEditor** — Aseprite-inspired pixel art with layers, frames, dithering, GIF / sprite-sheet export, .aseprite import, tile map mode
|
|
16
|
+
- **VectorEditor** — SVG shapes, pen tool, boolean operations, gradients, pattern fills, text-on-path, PDF export
|
|
17
|
+
- **PhotoEditor** — 50+ filters, RAW support, smart selection (magic wand, lasso, magnetic), healing brush, content-aware fill, face detection, batch processing, AI style-transfer
|
|
18
|
+
- **AnimationEditor** — 2D character builder with skeleton rigging, IK/FK, ragdoll/cloth physics, motion paths, Lottie & Spine export
|
|
19
|
+
- **GameAsset2dEditor** — tile maps, sprite sheets, animation state machines, collision shapes, isometric 2.5D, multi-engine export (Tiled, Godot, Unity, Phaser, Construct)
|
|
20
|
+
- **NiceIconEditor** — SVG icon creation with variant system
|
|
21
|
+
- **NiceUIDesigner** — drag & drop UI builder generating React code
|
|
22
|
+
- **Nice3DTexturePainter** — paint textures on 3D models in-browser
|
|
23
|
+
- **NiceFontEditor** — glyph editor with SVG font export
|
|
24
|
+
|
|
25
|
+
### Core Systems
|
|
26
|
+
|
|
27
|
+
- **Plugin system** — register custom tools, filters, exporters, panels
|
|
28
|
+
- **Visual undo/redo** — thumbnail timeline history
|
|
29
|
+
- **Keyboard shortcuts** — customizable, remappable, exportable
|
|
30
|
+
- **Drag & drop** — external file/image drops into editors
|
|
31
|
+
- **RTL support** — right-to-left UI with logical style swapping
|
|
32
|
+
- **Minimap** — zoom navigator for large canvases
|
|
33
|
+
- **Grid/Guides/Rulers** — snap-to-grid, snap-to-guide, snap-to-pixel
|
|
34
|
+
- **Color blindness simulation** — 8 modes (protanopia, deuteranopia, etc.)
|
|
35
|
+
- **Dark/light theme** — CSS custom properties, auto system detection
|
|
36
|
+
- **i18n** — `NiceI18nProvider` — zero-dependency translation context
|
|
37
|
+
|
|
38
|
+
### Integrations
|
|
39
|
+
|
|
40
|
+
- Unsplash / Pexels stock image picker
|
|
41
|
+
- Adobe Creative Cloud connector
|
|
42
|
+
- Figma import/export
|
|
43
|
+
- Template library
|
|
44
|
+
- AI image generation (OpenAI, Stability)
|
|
45
|
+
|
|
46
|
+
### Collaboration
|
|
47
|
+
|
|
48
|
+
- Real-time collaborative editing (WebSocket transport)
|
|
49
|
+
- Comments/annotations
|
|
50
|
+
- Version history with preview
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## Installation
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
npm install @nice2dev/ui-graphics framer-motion
|
|
58
|
+
# peer deps: react >=17, react-dom >=17, framer-motion >=10
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Quick Start
|
|
62
|
+
|
|
63
|
+
```tsx
|
|
64
|
+
import { PixelEditor } from '@nice2dev/ui-graphics';
|
|
65
|
+
import '@nice2dev/ui-graphics/style.css';
|
|
66
|
+
|
|
67
|
+
function App() {
|
|
68
|
+
return <PixelEditor initialWidth={64} initialHeight={64} />;
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## Editors
|
|
75
|
+
|
|
76
|
+
### PixelEditor
|
|
77
|
+
|
|
78
|
+
```tsx
|
|
79
|
+
import { PixelEditor } from '@nice2dev/ui-graphics';
|
|
80
|
+
|
|
81
|
+
<PixelEditor
|
|
82
|
+
initialWidth={64}
|
|
83
|
+
initialHeight={64}
|
|
84
|
+
onSaveToLibrary={(dataUrl, name, mimeType) => upload(dataUrl)}
|
|
85
|
+
/>
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
| Prop | Type | Default | Description |
|
|
89
|
+
|------|------|---------|-------------|
|
|
90
|
+
| `initialWidth` | `number` | `64` | Canvas width in pixels |
|
|
91
|
+
| `initialHeight` | `number` | `64` | Canvas height in pixels |
|
|
92
|
+
| `className` | `string` | — | CSS class on root |
|
|
93
|
+
| `onSaveToLibrary` | `(dataUrl, name, mimeType) => void` | — | Callback on save |
|
|
94
|
+
|
|
95
|
+
### VectorEditor
|
|
96
|
+
|
|
97
|
+
```tsx
|
|
98
|
+
import { VectorEditor } from '@nice2dev/ui-graphics';
|
|
99
|
+
|
|
100
|
+
<VectorEditor />
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
| Prop | Type | Default | Description |
|
|
104
|
+
|------|------|---------|-------------|
|
|
105
|
+
| `className` | `string` | — | CSS class on root |
|
|
106
|
+
|
|
107
|
+
### PhotoEditor
|
|
108
|
+
|
|
109
|
+
```tsx
|
|
110
|
+
import { PhotoEditor } from '@nice2dev/ui-graphics';
|
|
111
|
+
|
|
112
|
+
<PhotoEditor />
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### AnimationEditor
|
|
116
|
+
|
|
117
|
+
```tsx
|
|
118
|
+
import { AnimationEditor } from '@nice2dev/ui-graphics';
|
|
119
|
+
|
|
120
|
+
<AnimationEditor
|
|
121
|
+
onChange={(cfg) => saveCharacter(cfg)}
|
|
122
|
+
onNotify={(msg, type) => toast(msg, { type })}
|
|
123
|
+
/>
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
| Prop | Type | Default | Description |
|
|
127
|
+
|------|------|---------|-------------|
|
|
128
|
+
| `initialConfig` | `CharacterConfig` | `DEFAULT_CHARACTER` | Starting character config |
|
|
129
|
+
| `onChange` | `(cfg: CharacterConfig) => void` | — | Called on every change |
|
|
130
|
+
| `storageKey` | `string \| false` | `"nice2dev.animation-editor.character"` | localStorage key; `false` to disable |
|
|
131
|
+
| `onNotify` | `(msg, type?) => void` | — | Notification callback |
|
|
132
|
+
| `showJsonPanel` | `boolean` | `true` | Show JSON editor panel |
|
|
133
|
+
| `showPreview` | `boolean` | `true` | Show animated preview |
|
|
134
|
+
| `className` | `string` | — | CSS class on root |
|
|
135
|
+
|
|
136
|
+
### GameAsset2dEditor
|
|
137
|
+
|
|
138
|
+
```tsx
|
|
139
|
+
import { GameAsset2dEditor } from '@nice2dev/ui-graphics';
|
|
140
|
+
|
|
141
|
+
<GameAsset2dEditor />
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
## Core APIs
|
|
147
|
+
|
|
148
|
+
### i18n — Translation Provider
|
|
149
|
+
|
|
150
|
+
```tsx
|
|
151
|
+
import { NiceI18nProvider, AnimationEditor } from '@nice2dev/ui-graphics';
|
|
152
|
+
|
|
153
|
+
<NiceI18nProvider t={(key, fallback) => myI18n(key) ?? fallback}>
|
|
154
|
+
<AnimationEditor />
|
|
155
|
+
</NiceI18nProvider>
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### Plugin System
|
|
159
|
+
|
|
160
|
+
```tsx
|
|
161
|
+
import { PluginRegistry, NicePluginProvider, type EditorPlugin } from '@nice2dev/ui-graphics';
|
|
162
|
+
|
|
163
|
+
const myPlugin: EditorPlugin = {
|
|
164
|
+
id: 'my-plugin',
|
|
165
|
+
name: 'My Plugin',
|
|
166
|
+
version: '1.0.0',
|
|
167
|
+
editors: ['pixel'],
|
|
168
|
+
tools: [{ id: 'custom-brush', label: 'Custom Brush' }],
|
|
169
|
+
filters: [{ id: 'sepia', label: 'Sepia', apply: (img) => /* ... */ img }],
|
|
170
|
+
};
|
|
171
|
+
|
|
172
|
+
// Programmatic registration
|
|
173
|
+
PluginRegistry.register(myPlugin);
|
|
174
|
+
|
|
175
|
+
// Or via React context
|
|
176
|
+
<NicePluginProvider plugins={[myPlugin]}>
|
|
177
|
+
<PixelEditor />
|
|
178
|
+
</NicePluginProvider>
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
### Theme (Dark / Light)
|
|
182
|
+
|
|
183
|
+
```tsx
|
|
184
|
+
import { NiceEditorThemeProvider, useEditorTheme } from '@nice2dev/ui-graphics';
|
|
185
|
+
|
|
186
|
+
<NiceEditorThemeProvider initialMode="auto">
|
|
187
|
+
<YourApp />
|
|
188
|
+
</NiceEditorThemeProvider>
|
|
189
|
+
|
|
190
|
+
// Inside components:
|
|
191
|
+
const { theme, mode, setMode, toggleMode } = useEditorTheme();
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
### Keyboard Shortcuts
|
|
195
|
+
|
|
196
|
+
```tsx
|
|
197
|
+
import { ShortcutRegistry, useShortcuts, DEFAULT_SHORTCUTS } from '@nice2dev/ui-graphics';
|
|
198
|
+
|
|
199
|
+
// Register a custom shortcut
|
|
200
|
+
ShortcutRegistry.register({
|
|
201
|
+
id: 'custom.action',
|
|
202
|
+
label: 'My Action',
|
|
203
|
+
category: 'Custom',
|
|
204
|
+
defaultKey: 'Ctrl+Shift+M',
|
|
205
|
+
action: () => console.log('fired!'),
|
|
206
|
+
});
|
|
207
|
+
|
|
208
|
+
// Remap an existing shortcut
|
|
209
|
+
ShortcutRegistry.remap('general.undo', 'Ctrl+Shift+Z');
|
|
210
|
+
|
|
211
|
+
// In components — activates key listener
|
|
212
|
+
const shortcuts = useShortcuts();
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
### Color Blindness Simulation
|
|
216
|
+
|
|
217
|
+
```tsx
|
|
218
|
+
import { simulateColor, simulateColorBlindness, COLOR_BLINDNESS_TYPES } from '@nice2dev/ui-graphics';
|
|
219
|
+
|
|
220
|
+
// Simulate a single color
|
|
221
|
+
const [r, g, b] = simulateColor(255, 0, 0, 'deuteranopia');
|
|
222
|
+
|
|
223
|
+
// Simulate on ImageData (in-place)
|
|
224
|
+
simulateColorBlindness(imageData, 'protanopia');
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
### Grid, Guides & Snapping
|
|
228
|
+
|
|
229
|
+
```tsx
|
|
230
|
+
import { snapToGrid, snapToGuides, snapPoint, createGuide } from '@nice2dev/ui-graphics';
|
|
231
|
+
|
|
232
|
+
const snapped = snapToGrid(17, 23, 16); // { x: 16, y: 16, snappedX: true, snappedY: true }
|
|
233
|
+
const guide = createGuide('vertical', 100);
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
### RTL Support
|
|
237
|
+
|
|
238
|
+
```tsx
|
|
239
|
+
import { NiceRTLProvider, useIsRTL } from '@nice2dev/ui-graphics';
|
|
240
|
+
|
|
241
|
+
<NiceRTLProvider direction="rtl">
|
|
242
|
+
<PixelEditor />
|
|
243
|
+
</NiceRTLProvider>
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
### Animation Utilities
|
|
247
|
+
|
|
248
|
+
```tsx
|
|
249
|
+
import {
|
|
250
|
+
solveTwoBoneIK,
|
|
251
|
+
blendPose, tweenPose, ease,
|
|
252
|
+
createLinearPath, evaluatePath,
|
|
253
|
+
exportToLottie, exportToSpine,
|
|
254
|
+
} from '@nice2dev/ui-graphics';
|
|
255
|
+
|
|
256
|
+
// IK solving
|
|
257
|
+
const { upper, fore } = solveTwoBoneIK(0, 0, 100, 80, targetX, targetY);
|
|
258
|
+
|
|
259
|
+
// Pose blending
|
|
260
|
+
const midPose = blendPose(poseA, poseB, 0.5);
|
|
261
|
+
|
|
262
|
+
// Lottie export
|
|
263
|
+
const lottieJson = exportToLottie(characterConfig, choreography);
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
### Performance Fixes
|
|
267
|
+
|
|
268
|
+
```tsx
|
|
269
|
+
import { setupRetinaCanvas, SpatialHashGrid, AnimationCleanup } from '@nice2dev/ui-graphics';
|
|
270
|
+
|
|
271
|
+
// Retina-ready canvas
|
|
272
|
+
const ctx = setupRetinaCanvas(canvas, { width: 800, height: 600 });
|
|
273
|
+
|
|
274
|
+
// Spatial indexing for large shape sets
|
|
275
|
+
const grid = new SpatialHashGrid<Shape>(200);
|
|
276
|
+
grid.insert(shape, bounds);
|
|
277
|
+
const visible = grid.query(viewport);
|
|
278
|
+
|
|
279
|
+
// Memory-safe animation lifecycle
|
|
280
|
+
const cleanup = new AnimationCleanup();
|
|
281
|
+
cleanup.requestAnimationFrame(render);
|
|
282
|
+
cleanup.setTimeout(onComplete, 1000);
|
|
283
|
+
// On unmount:
|
|
284
|
+
cleanup.dispose();
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
---
|
|
288
|
+
|
|
289
|
+
## Development
|
|
290
|
+
|
|
291
|
+
```bash
|
|
292
|
+
# Build
|
|
293
|
+
npm run build
|
|
294
|
+
|
|
295
|
+
# Dev (watch mode)
|
|
296
|
+
npm run dev
|
|
297
|
+
|
|
298
|
+
# Demo app
|
|
299
|
+
npm run demo
|
|
300
|
+
|
|
301
|
+
# Storybook
|
|
302
|
+
npm run storybook
|
|
303
|
+
|
|
304
|
+
# Tests
|
|
305
|
+
npm run test
|
|
306
|
+
npm run test:watch
|
|
307
|
+
npm run test:coverage
|
|
308
|
+
|
|
309
|
+
# Performance benchmarks
|
|
310
|
+
npm run bench
|
|
311
|
+
|
|
312
|
+
# Bundle analysis
|
|
313
|
+
npm run analyze
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
## Architecture
|
|
317
|
+
|
|
318
|
+
```
|
|
319
|
+
src/
|
|
320
|
+
index.ts # public API barrel export
|
|
321
|
+
pixel/ # PixelEditor + utils
|
|
322
|
+
vector/ # VectorEditor + boolean ops, gradients
|
|
323
|
+
photo/ # PhotoEditor + filters, selection
|
|
324
|
+
animation/ # AnimationEditor + rig, physics, motion paths
|
|
325
|
+
rig/ # Skeleton rigging, IK, FK, pose blending
|
|
326
|
+
shapes/ # SVG body part renderers
|
|
327
|
+
game/ # GameAsset2dEditor
|
|
328
|
+
icon/ # NiceIconEditor
|
|
329
|
+
ui/ # NiceUIDesigner
|
|
330
|
+
texture/ # Nice3DTexturePainter
|
|
331
|
+
font/ # NiceFontEditor
|
|
332
|
+
core/ # Shared systems (plugins, shortcuts, theme, i18n, etc.)
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
Every editor and utility is independently tree-shakeable — import only what you need.
|
|
336
|
+
|
|
337
|
+
## License
|
|
338
|
+
|
|
339
|
+
MIT © NiceToDev
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var React = require('react');
|
|
5
|
+
var framerMotion = require('framer-motion');
|
|
6
|
+
var animationHelper = require('./animationHelper.js');
|
|
7
|
+
var characterTypes = require('./characterTypes.js');
|
|
8
|
+
|
|
9
|
+
const AnimatedPerson = ({ id, name, size, score = 10, startPose = "idle", onReady, character, }) => {
|
|
10
|
+
var _a, _b, _c, _d, _e;
|
|
11
|
+
const fx = animationHelper.usePersonControls();
|
|
12
|
+
const cfg = React.useMemo(() => ({ ...characterTypes.DEFAULT_CHARACTER, ...(character !== null && character !== void 0 ? character : {}) }), [character]);
|
|
13
|
+
React.useEffect(() => {
|
|
14
|
+
onReady === null || onReady === void 0 ? void 0 : onReady(fx);
|
|
15
|
+
void animationHelper.playPose(fx, startPose, {});
|
|
16
|
+
}, [fx, onReady, startPose]);
|
|
17
|
+
const W = (_c = (_b = (_a = cfg.size) !== null && _a !== void 0 ? _a : size) !== null && _b !== void 0 ? _b : characterTypes.DEFAULT_CHARACTER.size) !== null && _c !== void 0 ? _c : 180;
|
|
18
|
+
const skin = characterTypes.pick(cfg.face.colors, 0, "var(--anim-skin, #FFD2B3)");
|
|
19
|
+
return (jsxRuntime.jsx(framerMotion.motion.div, { id: id, style: { width: W, height: W * 1.35, overflow: "visible" }, animate: fx.root, children: jsxRuntime.jsxs("svg", { viewBox: "0 0 180 240", width: "100%", height: "100%", role: "img", "aria-label": (_e = (_d = cfg.name) !== null && _d !== void 0 ? _d : name) !== null && _e !== void 0 ? _e : "Juror", children: [jsxRuntime.jsxs(framerMotion.motion.g, { animate: fx.body, children: [jsxRuntime.jsx("rect", { x: "68", y: "158", width: "14", height: "46", rx: "6", fill: characterTypes.pick(cfg.outfit.colors, 1, "var(--anim-outfit-leg, #334155)") }), jsxRuntime.jsx("ellipse", { cx: "75", cy: "204", rx: "10", ry: "5", fill: characterTypes.pick(cfg.outfit.colors, 1, "var(--anim-outfit-leg-shadow, #1E293B)") }), jsxRuntime.jsx("rect", { x: "98", y: "158", width: "14", height: "46", rx: "6", fill: characterTypes.pick(cfg.outfit.colors, 1, "var(--anim-outfit-leg, #334155)") }), jsxRuntime.jsx("ellipse", { cx: "105", cy: "204", rx: "10", ry: "5", fill: characterTypes.pick(cfg.outfit.colors, 1, "var(--anim-outfit-leg-shadow, #1E293B)") })] }), jsxRuntime.jsx(framerMotion.motion.g, { animate: fx.body, children: renderOutfit(cfg.outfit) }), jsxRuntime.jsx("rect", { x: "84", y: "82", width: "12", height: "12", rx: "4", fill: skin }), jsxRuntime.jsxs(framerMotion.motion.g, { animate: fx.leftArm, style: { transformOrigin: "64px 96px" }, children: [jsxRuntime.jsx("rect", { x: "36", y: "96", width: "16", height: "36", rx: "7", fill: skin }), jsxRuntime.jsx("circle", { cx: "44", cy: "136", r: "7", fill: skin })] }), jsxRuntime.jsxs(framerMotion.motion.g, { animate: fx.rightArm, style: { transformOrigin: "116px 96px" }, children: [jsxRuntime.jsx("rect", { x: "128", y: "96", width: "16", height: "36", rx: "7", fill: skin }), jsxRuntime.jsx("circle", { cx: "136", cy: "136", r: "7", fill: skin }), jsxRuntime.jsxs(framerMotion.motion.g, { animate: fx.card, children: [jsxRuntime.jsx("rect", { x: "126", y: "50", width: "42", height: "30", rx: "4", fill: "var(--surface-bg, #fff)", stroke: "var(--text-primary, #111)", strokeWidth: 1.2 }), jsxRuntime.jsx("text", { x: "147", y: "70", textAnchor: "middle", fontSize: "16", fontWeight: 700, fill: "var(--text-primary, #111)", children: String(score) })] }), renderProp(cfg.prop)] }), jsxRuntime.jsxs(framerMotion.motion.g, { animate: fx.head, children: [renderHairBack(cfg.hair), renderFace(cfg.face), jsxRuntime.jsx(framerMotion.motion.g, { animate: fx.eyes, children: renderEyes(cfg.eyes) }), renderNose(cfg.nose), jsxRuntime.jsx(framerMotion.motion.g, { animate: fx.mouth, children: renderMouth(cfg.mouth) }), renderHeadwear(cfg.headwear)] }), jsxRuntime.jsxs(framerMotion.motion.g, { animate: fx.curse, initial: { opacity: 0 }, children: [jsxRuntime.jsx("rect", { x: "62", y: "10", width: "56", height: "22", rx: "8", fill: "var(--text-primary, #111)" }), jsxRuntime.jsx("text", { x: "90", y: "26", textAnchor: "middle", fontSize: "12", fill: "var(--surface-bg, #fff)", children: "#!%&*" }), jsxRuntime.jsx("path", { d: "M82 32 l4 8 l4 -8", fill: "var(--text-primary, #111)" })] })] }) }));
|
|
20
|
+
};
|
|
21
|
+
/* ---------------- RENDERERS (redesigned proportions) ---------------- */
|
|
22
|
+
function renderOutfit(cfg) {
|
|
23
|
+
const base = characterTypes.pick(cfg.colors, 0, "var(--anim-shirt, #3B82F6)");
|
|
24
|
+
const accent = characterTypes.pick(cfg.colors, 1, base);
|
|
25
|
+
const stroke = characterTypes.pick(cfg.colors, 2, "var(--anim-stroke, #111)");
|
|
26
|
+
switch (cfg.variant) {
|
|
27
|
+
case "hoodie":
|
|
28
|
+
return (jsxRuntime.jsxs("g", { children: [jsxRuntime.jsx("rect", { x: "52", y: "92", width: "76", height: "66", rx: "16", fill: base, stroke: stroke, strokeWidth: 1 }), jsxRuntime.jsx("path", { d: "M52 102 Q90 72 128 102", fill: accent, opacity: 0.2 }), jsxRuntime.jsx("ellipse", { cx: "90", cy: "94", rx: "18", ry: "6", fill: accent, opacity: 0.3 })] }));
|
|
29
|
+
case "suit":
|
|
30
|
+
return (jsxRuntime.jsxs("g", { children: [jsxRuntime.jsx("rect", { x: "52", y: "92", width: "76", height: "66", rx: "12", fill: base, stroke: stroke, strokeWidth: 1 }), jsxRuntime.jsx("path", { d: "M90 92 L72 118 L90 110 L108 118 Z", fill: accent, opacity: 0.75 }), jsxRuntime.jsx("rect", { x: "88", y: "110", width: "4", height: "48", fill: "var(--surface-bg, #fff)", opacity: 0.8 }), jsxRuntime.jsx("circle", { cx: "90", cy: "120", r: "2", fill: stroke }), jsxRuntime.jsx("circle", { cx: "90", cy: "134", r: "2", fill: stroke })] }));
|
|
31
|
+
case "dress":
|
|
32
|
+
return (jsxRuntime.jsxs("g", { children: [jsxRuntime.jsx("rect", { x: "52", y: "92", width: "76", height: "56", rx: "14", fill: base, stroke: stroke, strokeWidth: 1 }), jsxRuntime.jsx("path", { d: "M52 148 L128 148 L136 168 L44 168 Z", fill: accent })] }));
|
|
33
|
+
case "tee":
|
|
34
|
+
default:
|
|
35
|
+
return (jsxRuntime.jsxs("g", { children: [jsxRuntime.jsx("rect", { x: "52", y: "92", width: "76", height: "66", rx: "14", fill: base, stroke: stroke, strokeWidth: 1 }), jsxRuntime.jsx("path", { d: "M82 92 L90 100 L98 92", fill: "none", stroke: stroke, strokeWidth: 1, opacity: 0.4 })] }));
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
function renderHairBack(cfg) {
|
|
39
|
+
const base = characterTypes.pick(cfg.colors, 0, "var(--anim-hair, #1F2937)");
|
|
40
|
+
const hi = characterTypes.pick(cfg.colors, 1, base);
|
|
41
|
+
switch (cfg.variant) {
|
|
42
|
+
case "long":
|
|
43
|
+
return (jsxRuntime.jsxs("g", { children: [jsxRuntime.jsx("path", { d: "M60 46 Q90 22 120 46 L120 76 Q90 92 60 76 Z", fill: base }), jsxRuntime.jsx("path", { d: "M90 46 Q92 56 102 62", stroke: hi, strokeWidth: 2.5, opacity: 0.35 })] }));
|
|
44
|
+
case "curly":
|
|
45
|
+
return (jsxRuntime.jsxs("g", { children: [jsxRuntime.jsx("path", { d: "M66 40 q10 -14 22 0 q10 -14 22 0 l0 12 q-32 12 -64 0 Z", fill: base }), jsxRuntime.jsx("circle", { cx: "66", cy: "44", r: "5", fill: base }), jsxRuntime.jsx("circle", { cx: "114", cy: "44", r: "5", fill: base })] }));
|
|
46
|
+
case "mohawk":
|
|
47
|
+
return jsxRuntime.jsx("path", { d: "M82 28 L98 28 L100 50 L80 50 Z", fill: base });
|
|
48
|
+
case "short":
|
|
49
|
+
return jsxRuntime.jsx("path", { d: "M68 47 C78 24, 102 24, 112 47 L68 47 Z", fill: base });
|
|
50
|
+
case "none":
|
|
51
|
+
default:
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
function renderFace(cfg) {
|
|
56
|
+
const skin = characterTypes.pick(cfg.colors, 0, "var(--anim-skin, #FFD2B3)");
|
|
57
|
+
const shadow = characterTypes.pick(cfg.colors, 1, skin);
|
|
58
|
+
const stroke = characterTypes.pick(cfg.colors, 2, "var(--anim-stroke, #111)");
|
|
59
|
+
switch (cfg.variant) {
|
|
60
|
+
case "oval":
|
|
61
|
+
return (jsxRuntime.jsxs("g", { children: [jsxRuntime.jsx("ellipse", { cx: "90", cy: "60", rx: "26", ry: "28", fill: skin, stroke: stroke, strokeWidth: 1 }), jsxRuntime.jsx("ellipse", { cx: "90", cy: "76", rx: "16", ry: "5", fill: shadow, opacity: 0.08 })] }));
|
|
62
|
+
case "square":
|
|
63
|
+
return (jsxRuntime.jsxs("g", { children: [jsxRuntime.jsx("rect", { x: "64", y: "36", width: "52", height: "48", rx: "12", fill: skin, stroke: stroke, strokeWidth: 1 }), jsxRuntime.jsx("ellipse", { cx: "90", cy: "76", rx: "16", ry: "5", fill: shadow, opacity: 0.08 })] }));
|
|
64
|
+
case "heart":
|
|
65
|
+
return (jsxRuntime.jsxs("g", { children: [jsxRuntime.jsx("path", { d: "M90 36 q-18 10 -18 26 q0 16 18 26 q18 -10 18 -26 q0 -16 -18 -26 Z", fill: skin, stroke: stroke, strokeWidth: 1 }), jsxRuntime.jsx("ellipse", { cx: "90", cy: "76", rx: "16", ry: "5", fill: shadow, opacity: 0.08 })] }));
|
|
66
|
+
case "round":
|
|
67
|
+
default:
|
|
68
|
+
return (jsxRuntime.jsxs("g", { children: [jsxRuntime.jsx("circle", { cx: "90", cy: "60", r: "26", fill: skin, stroke: stroke, strokeWidth: 1 }), jsxRuntime.jsx("ellipse", { cx: "90", cy: "76", rx: "16", ry: "5", fill: shadow, opacity: 0.08 })] }));
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
function renderEyes(cfg) {
|
|
72
|
+
const base = characterTypes.pick(cfg.colors, 0, "var(--anim-eye-base, #111)");
|
|
73
|
+
switch (cfg.variant) {
|
|
74
|
+
case "oval":
|
|
75
|
+
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("ellipse", { cx: "80", cy: "56", rx: "4.5", ry: "3.5", fill: base }), jsxRuntime.jsx("ellipse", { cx: "100", cy: "56", rx: "4.5", ry: "3.5", fill: base }), jsxRuntime.jsx("circle", { cx: "81.5", cy: "55", r: "1.2", fill: "var(--surface-bg, #fff)", opacity: 0.7 }), jsxRuntime.jsx("circle", { cx: "101.5", cy: "55", r: "1.2", fill: "var(--surface-bg, #fff)", opacity: 0.7 })] }));
|
|
76
|
+
case "laugh":
|
|
77
|
+
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("path", { d: "M76 56 q4 -4 8 0", stroke: base, strokeWidth: 2.5, fill: "none", strokeLinecap: "round" }), jsxRuntime.jsx("path", { d: "M96 56 q4 -4 8 0", stroke: base, strokeWidth: 2.5, fill: "none", strokeLinecap: "round" })] }));
|
|
78
|
+
case "wink":
|
|
79
|
+
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("circle", { cx: "80", cy: "56", r: "3.5", fill: base }), jsxRuntime.jsx("circle", { cx: "81.5", cy: "55", r: "1", fill: "var(--surface-bg, #fff)", opacity: 0.7 }), jsxRuntime.jsx("path", { d: "M96 56 l8 0", stroke: base, strokeWidth: 2.5, strokeLinecap: "round" })] }));
|
|
80
|
+
case "sleepy":
|
|
81
|
+
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("path", { d: "M76 56 l8 0", stroke: base, strokeWidth: 2.5, strokeLinecap: "round" }), jsxRuntime.jsx("path", { d: "M96 56 l8 0", stroke: base, strokeWidth: 2.5, strokeLinecap: "round" })] }));
|
|
82
|
+
case "dot":
|
|
83
|
+
default:
|
|
84
|
+
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("circle", { cx: "80", cy: "56", r: "3.5", fill: base }), jsxRuntime.jsx("circle", { cx: "100", cy: "56", r: "3.5", fill: base }), jsxRuntime.jsx("circle", { cx: "81.5", cy: "55", r: "1", fill: "var(--surface-bg, #fff)", opacity: 0.7 }), jsxRuntime.jsx("circle", { cx: "101.5", cy: "55", r: "1", fill: "var(--surface-bg, #fff)", opacity: 0.7 })] }));
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
function renderNose(cfg) {
|
|
88
|
+
const base = characterTypes.pick(cfg.colors, 0, "var(--anim-nose, #111)");
|
|
89
|
+
switch (cfg.variant) {
|
|
90
|
+
case "triangle":
|
|
91
|
+
return jsxRuntime.jsx("path", { d: "M90 62 l-4 8 h8 Z", fill: base, opacity: 0.6 });
|
|
92
|
+
case "round":
|
|
93
|
+
return jsxRuntime.jsx("circle", { cx: "90", cy: "66", r: "3", fill: base, opacity: 0.6 });
|
|
94
|
+
case "line":
|
|
95
|
+
default:
|
|
96
|
+
return jsxRuntime.jsx("rect", { x: "89", y: "62", width: "2", height: "8", fill: base, rx: "1", opacity: 0.5 });
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
function renderMouth(cfg) {
|
|
100
|
+
const base = characterTypes.pick(cfg.colors, 0, "var(--anim-mouth-base, #111)");
|
|
101
|
+
const tooth = characterTypes.pick(cfg.colors, 1, "var(--white, #fff)");
|
|
102
|
+
switch (cfg.variant) {
|
|
103
|
+
case "frown":
|
|
104
|
+
return jsxRuntime.jsx("path", { d: "M80 76 q10 -6 20 0", stroke: base, strokeWidth: 2.5, fill: "none", strokeLinecap: "round" });
|
|
105
|
+
case "open":
|
|
106
|
+
return jsxRuntime.jsx("ellipse", { cx: "90", cy: "76", rx: "7", ry: "5", fill: base });
|
|
107
|
+
case "flat":
|
|
108
|
+
return jsxRuntime.jsx("rect", { x: "82", y: "75", width: "16", height: "2.5", rx: "1.25", fill: base });
|
|
109
|
+
case "o":
|
|
110
|
+
return jsxRuntime.jsx("circle", { cx: "90", cy: "76", r: "4", fill: base });
|
|
111
|
+
case "teeth":
|
|
112
|
+
return (jsxRuntime.jsxs("g", { children: [jsxRuntime.jsx("rect", { x: "82", y: "74", width: "16", height: "7", rx: "3", fill: base }), jsxRuntime.jsx("rect", { x: "84", y: "75", width: "12", height: "3", rx: "1", fill: tooth })] }));
|
|
113
|
+
case "smile":
|
|
114
|
+
default:
|
|
115
|
+
return jsxRuntime.jsx("path", { d: "M80 76 q10 8 20 0", stroke: base, strokeWidth: 2.5, fill: "none", strokeLinecap: "round" });
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
function renderHeadwear(cfg) {
|
|
119
|
+
const base = characterTypes.pick(cfg.colors, 0, "var(--anim-headwear-base, #111)");
|
|
120
|
+
const accent = characterTypes.pick(cfg.colors, 1, base);
|
|
121
|
+
switch (cfg.variant) {
|
|
122
|
+
case "cap":
|
|
123
|
+
return (jsxRuntime.jsxs("g", { children: [jsxRuntime.jsx("path", { d: "M68 44 q22 -18 44 0 l-6 4 q-18 -10 -28 0 Z", fill: base }), jsxRuntime.jsx("rect", { x: "60", y: "44", width: "52", height: "5", rx: "2", fill: base })] }));
|
|
124
|
+
case "headphones":
|
|
125
|
+
return (jsxRuntime.jsxs("g", { children: [jsxRuntime.jsx("path", { d: "M66 56 q0 -24 24 -24 q24 0 24 24", stroke: base, strokeWidth: 5, fill: "none" }), jsxRuntime.jsx("rect", { x: "58", y: "52", width: "12", height: "16", rx: "4", fill: accent }), jsxRuntime.jsx("rect", { x: "110", y: "52", width: "12", height: "16", rx: "4", fill: accent })] }));
|
|
126
|
+
case "hat":
|
|
127
|
+
return (jsxRuntime.jsxs("g", { children: [jsxRuntime.jsx("rect", { x: "62", y: "38", width: "56", height: "8", rx: "3", fill: base }), jsxRuntime.jsx("rect", { x: "72", y: "30", width: "36", height: "10", rx: "3", fill: base })] }));
|
|
128
|
+
case "crown":
|
|
129
|
+
return jsxRuntime.jsx("path", { d: "M72 42 l6 12 l6 -10 l6 10 l6 -10 l6 12 v6 h-30 Z", fill: base });
|
|
130
|
+
case "none":
|
|
131
|
+
default:
|
|
132
|
+
return null;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
function renderProp(cfg) {
|
|
136
|
+
const base = characterTypes.pick(cfg.colors, 0, "var(--anim-prop-base, #111)");
|
|
137
|
+
const accent = characterTypes.pick(cfg.colors, 1, "var(--anim-prop-accent, #666)");
|
|
138
|
+
const light = characterTypes.pick(cfg.colors, 2, "var(--anim-prop-light, #CCC)");
|
|
139
|
+
switch (cfg.variant) {
|
|
140
|
+
case "mic":
|
|
141
|
+
return (jsxRuntime.jsxs("g", { transform: "translate(140,90)", children: [jsxRuntime.jsx("rect", { x: "0", y: "0", width: "4", height: "16", rx: "2", fill: accent }), jsxRuntime.jsx("circle", { cx: "2", cy: "-2", r: "6", fill: base, stroke: light, strokeWidth: 1 })] }));
|
|
142
|
+
case "clipboard":
|
|
143
|
+
return (jsxRuntime.jsxs("g", { transform: "translate(140,86)", children: [jsxRuntime.jsx("rect", { x: "-6", y: "-2", width: "20", height: "26", rx: "3", fill: light, stroke: base }), jsxRuntime.jsx("rect", { x: "0", y: "-6", width: "8", height: "6", rx: "2", fill: base })] }));
|
|
144
|
+
case "star":
|
|
145
|
+
return (jsxRuntime.jsx("g", { transform: "translate(140,86)", children: jsxRuntime.jsx("path", { d: "M8 0 L10 6 L16 6 L11 10 L13 16 L8 12 L3 16 L5 10 L0 6 L6 6 Z", fill: accent, stroke: base }) }));
|
|
146
|
+
case "none":
|
|
147
|
+
default:
|
|
148
|
+
return null;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
module.exports = AnimatedPerson;
|
|
153
|
+
//# sourceMappingURL=AnimatedPerson.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AnimatedPerson.js","sources":["../../../src/animation/AnimatedPerson.tsx"],"sourcesContent":[null],"names":["usePersonControls","useMemo","DEFAULT_CHARACTER","useEffect","playPose","pick","_jsx","motion","_jsxs","_Fragment"],"mappings":"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"}
|