@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
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pathSimplification — Reduce points in paths while preserving shape
|
|
3
|
+
*
|
|
4
|
+
* Algorithms:
|
|
5
|
+
* - Douglas-Peucker (visvalingam-whyatt alternative)
|
|
6
|
+
* - Radial distance
|
|
7
|
+
* - Perpendicular distance
|
|
8
|
+
* - Nth point (uniform sampling)
|
|
9
|
+
* - Visvalingam-Whyatt (area-based)
|
|
10
|
+
*
|
|
11
|
+
* Also includes:
|
|
12
|
+
* - Path smoothing (Catmull-Rom, Bezier)
|
|
13
|
+
* - Point optimization
|
|
14
|
+
*/
|
|
15
|
+
export interface Point {
|
|
16
|
+
x: number;
|
|
17
|
+
y: number;
|
|
18
|
+
}
|
|
19
|
+
export type SimplificationAlgorithm = 'douglas-peucker' | 'visvalingam' | 'radial-distance' | 'perpendicular-distance' | 'nth-point';
|
|
20
|
+
export type SmoothingAlgorithm = 'catmull-rom' | 'bezier' | 'average' | 'none';
|
|
21
|
+
export interface SimplificationOptions {
|
|
22
|
+
/** Algorithm to use */
|
|
23
|
+
algorithm: SimplificationAlgorithm;
|
|
24
|
+
/** Tolerance/threshold (meaning varies by algorithm) */
|
|
25
|
+
tolerance: number;
|
|
26
|
+
/** For nth-point: keep every Nth point */
|
|
27
|
+
nthPoint: number;
|
|
28
|
+
/** Whether path is closed (polygon) */
|
|
29
|
+
isClosed: boolean;
|
|
30
|
+
/** Preserve start/end points */
|
|
31
|
+
preserveEndpoints: boolean;
|
|
32
|
+
/** High quality mode (slower but better) */
|
|
33
|
+
highQuality: boolean;
|
|
34
|
+
}
|
|
35
|
+
export interface SmoothingOptions {
|
|
36
|
+
/** Smoothing algorithm */
|
|
37
|
+
algorithm: SmoothingAlgorithm;
|
|
38
|
+
/** Tension for Catmull-Rom (0-1, lower = smoother) */
|
|
39
|
+
tension: number;
|
|
40
|
+
/** Number of interpolated points between each pair */
|
|
41
|
+
resolution: number;
|
|
42
|
+
/** Corner angle threshold (degrees) to preserve sharp corners */
|
|
43
|
+
cornerThreshold: number;
|
|
44
|
+
}
|
|
45
|
+
export declare const DEFAULT_SIMPLIFICATION_OPTIONS: SimplificationOptions;
|
|
46
|
+
export declare const DEFAULT_SMOOTHING_OPTIONS: SmoothingOptions;
|
|
47
|
+
/**
|
|
48
|
+
* Calculate squared distance between two points
|
|
49
|
+
*/
|
|
50
|
+
export declare function squaredDistance(p1: Point, p2: Point): number;
|
|
51
|
+
/**
|
|
52
|
+
* Calculate distance between two points
|
|
53
|
+
*/
|
|
54
|
+
export declare function distance(p1: Point, p2: Point): number;
|
|
55
|
+
/**
|
|
56
|
+
* Calculate perpendicular distance from point to line segment
|
|
57
|
+
*/
|
|
58
|
+
export declare function perpendicularDistance(point: Point, lineStart: Point, lineEnd: Point): number;
|
|
59
|
+
/**
|
|
60
|
+
* Calculate triangle area (for Visvalingam)
|
|
61
|
+
*/
|
|
62
|
+
export declare function triangleArea(p1: Point, p2: Point, p3: Point): number;
|
|
63
|
+
/**
|
|
64
|
+
* Calculate angle at point b (in degrees)
|
|
65
|
+
*/
|
|
66
|
+
export declare function angleAt(a: Point, b: Point, c: Point): number;
|
|
67
|
+
/**
|
|
68
|
+
* Douglas-Peucker algorithm
|
|
69
|
+
* Recursively simplifies path by removing points within tolerance
|
|
70
|
+
*/
|
|
71
|
+
export declare function douglasPeucker(points: Point[], tolerance: number, start?: number, end?: number): Point[];
|
|
72
|
+
/**
|
|
73
|
+
* Visvalingam-Whyatt algorithm
|
|
74
|
+
* Removes points based on area of triangles
|
|
75
|
+
*/
|
|
76
|
+
export declare function visvalingam(points: Point[], minArea: number): Point[];
|
|
77
|
+
/**
|
|
78
|
+
* Radial distance simplification
|
|
79
|
+
* Removes points too close to previous kept point
|
|
80
|
+
*/
|
|
81
|
+
export declare function radialDistance(points: Point[], tolerance: number): Point[];
|
|
82
|
+
/**
|
|
83
|
+
* Perpendicular distance simplification
|
|
84
|
+
* One-pass version of Douglas-Peucker
|
|
85
|
+
*/
|
|
86
|
+
export declare function perpendicularDistanceSimplify(points: Point[], tolerance: number): Point[];
|
|
87
|
+
/**
|
|
88
|
+
* Nth point simplification
|
|
89
|
+
* Keeps every Nth point
|
|
90
|
+
*/
|
|
91
|
+
export declare function nthPoint(points: Point[], n: number): Point[];
|
|
92
|
+
/**
|
|
93
|
+
* Main simplification function
|
|
94
|
+
*/
|
|
95
|
+
export declare function simplifyPath(points: Point[], options?: Partial<SimplificationOptions>): Point[];
|
|
96
|
+
/**
|
|
97
|
+
* Catmull-Rom spline smoothing
|
|
98
|
+
*/
|
|
99
|
+
export declare function smoothCatmullRom(points: Point[], opts?: Partial<SmoothingOptions>): Point[];
|
|
100
|
+
/**
|
|
101
|
+
* Simple average smoothing
|
|
102
|
+
*/
|
|
103
|
+
export declare function smoothAverage(points: Point[], opts?: Partial<SmoothingOptions>): Point[];
|
|
104
|
+
/**
|
|
105
|
+
* Main smoothing function
|
|
106
|
+
*/
|
|
107
|
+
export declare function smoothPath(points: Point[], options?: Partial<SmoothingOptions>): Point[];
|
|
108
|
+
/**
|
|
109
|
+
* Remove duplicate consecutive points
|
|
110
|
+
*/
|
|
111
|
+
export declare function removeDuplicates(points: Point[], tolerance?: number): Point[];
|
|
112
|
+
/**
|
|
113
|
+
* Remove collinear points (points on straight lines)
|
|
114
|
+
*/
|
|
115
|
+
export declare function removeCollinear(points: Point[], angleThreshold?: number): Point[];
|
|
116
|
+
/**
|
|
117
|
+
* Calculate path length
|
|
118
|
+
*/
|
|
119
|
+
export declare function pathLength(points: Point[]): number;
|
|
120
|
+
/**
|
|
121
|
+
* Calculate path bounds
|
|
122
|
+
*/
|
|
123
|
+
export declare function pathBounds(points: Point[]): {
|
|
124
|
+
minX: number;
|
|
125
|
+
minY: number;
|
|
126
|
+
maxX: number;
|
|
127
|
+
maxY: number;
|
|
128
|
+
width: number;
|
|
129
|
+
height: number;
|
|
130
|
+
};
|
|
131
|
+
/**
|
|
132
|
+
* Resample path to uniform point spacing
|
|
133
|
+
*/
|
|
134
|
+
export declare function resamplePath(points: Point[], targetCount: number): Point[];
|
|
135
|
+
export default simplifyPath;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PDF Export for VectorEditor
|
|
3
|
+
* Export SVG/vector graphics to PDF format
|
|
4
|
+
*/
|
|
5
|
+
export interface PdfExportOptions {
|
|
6
|
+
/** Page width in points (72 points = 1 inch) */
|
|
7
|
+
width?: number;
|
|
8
|
+
/** Page height in points */
|
|
9
|
+
height?: number;
|
|
10
|
+
/** Page format preset */
|
|
11
|
+
format?: PdfPageFormat;
|
|
12
|
+
/** Page orientation */
|
|
13
|
+
orientation?: 'portrait' | 'landscape';
|
|
14
|
+
/** Page margins in points */
|
|
15
|
+
margins?: {
|
|
16
|
+
top: number;
|
|
17
|
+
right: number;
|
|
18
|
+
bottom: number;
|
|
19
|
+
left: number;
|
|
20
|
+
};
|
|
21
|
+
/** Document title */
|
|
22
|
+
title?: string;
|
|
23
|
+
/** Document author */
|
|
24
|
+
author?: string;
|
|
25
|
+
/** Document subject */
|
|
26
|
+
subject?: string;
|
|
27
|
+
/** Document keywords */
|
|
28
|
+
keywords?: string[];
|
|
29
|
+
/** PDF compression */
|
|
30
|
+
compress?: boolean;
|
|
31
|
+
/** Image quality (0-1) for embedded images */
|
|
32
|
+
imageQuality?: number;
|
|
33
|
+
/** Scale factor for content */
|
|
34
|
+
scale?: number;
|
|
35
|
+
/** Background color (null for transparent) */
|
|
36
|
+
backgroundColor?: string | null;
|
|
37
|
+
/** Include fonts */
|
|
38
|
+
embedFonts?: boolean;
|
|
39
|
+
/** PDF/A compliance */
|
|
40
|
+
pdfaCompliance?: boolean;
|
|
41
|
+
}
|
|
42
|
+
export type PdfPageFormat = 'a0' | 'a1' | 'a2' | 'a3' | 'a4' | 'a5' | 'a6' | 'a7' | 'a8' | 'a9' | 'a10' | 'b0' | 'b1' | 'b2' | 'b3' | 'b4' | 'b5' | 'b6' | 'b7' | 'b8' | 'b9' | 'b10' | 'letter' | 'legal' | 'tabloid' | 'ledger' | 'executive' | 'custom';
|
|
43
|
+
export interface PdfExportResult {
|
|
44
|
+
/** PDF blob */
|
|
45
|
+
blob: Blob;
|
|
46
|
+
/** PDF as base64 data URL */
|
|
47
|
+
dataUrl: string;
|
|
48
|
+
/** File size in bytes */
|
|
49
|
+
size: number;
|
|
50
|
+
/** Number of pages */
|
|
51
|
+
pages: number;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Export SVG to PDF
|
|
55
|
+
*/
|
|
56
|
+
export declare function exportToPdf(svg: SVGElement | string, options?: PdfExportOptions): Promise<PdfExportResult>;
|
|
57
|
+
/**
|
|
58
|
+
* Download PDF
|
|
59
|
+
*/
|
|
60
|
+
export declare function downloadPdf(result: PdfExportResult, filename?: string): void;
|
|
61
|
+
/**
|
|
62
|
+
* Export SVG element to PDF and download
|
|
63
|
+
*/
|
|
64
|
+
export declare function exportAndDownload(svg: SVGElement | string, filename?: string, options?: PdfExportOptions): Promise<void>;
|
|
65
|
+
export default exportToPdf;
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Text On Path
|
|
3
|
+
* Utilities for placing and rendering text along SVG paths
|
|
4
|
+
*/
|
|
5
|
+
export interface TextOnPathOptions {
|
|
6
|
+
/** The text content */
|
|
7
|
+
text: string;
|
|
8
|
+
/** SVG path data (d attribute) */
|
|
9
|
+
pathData: string;
|
|
10
|
+
/** Font family */
|
|
11
|
+
fontFamily?: string;
|
|
12
|
+
/** Font size in pixels */
|
|
13
|
+
fontSize?: number;
|
|
14
|
+
/** Font weight */
|
|
15
|
+
fontWeight?: number | 'normal' | 'bold' | 'lighter' | 'bolder';
|
|
16
|
+
/** Font style */
|
|
17
|
+
fontStyle?: 'normal' | 'italic' | 'oblique';
|
|
18
|
+
/** Text fill color */
|
|
19
|
+
fill?: string;
|
|
20
|
+
/** Text stroke color */
|
|
21
|
+
stroke?: string;
|
|
22
|
+
/** Text stroke width */
|
|
23
|
+
strokeWidth?: number;
|
|
24
|
+
/** Starting offset along path (0-1 or pixels) */
|
|
25
|
+
startOffset?: number | string;
|
|
26
|
+
/** Text anchor */
|
|
27
|
+
textAnchor?: 'start' | 'middle' | 'end';
|
|
28
|
+
/** Dominant baseline */
|
|
29
|
+
dominantBaseline?: 'auto' | 'middle' | 'hanging' | 'central' | 'alphabetic';
|
|
30
|
+
/** Letter spacing */
|
|
31
|
+
letterSpacing?: number;
|
|
32
|
+
/** Side of path for text */
|
|
33
|
+
side?: 'left' | 'right';
|
|
34
|
+
/** Text direction */
|
|
35
|
+
direction?: 'ltr' | 'rtl';
|
|
36
|
+
/** Spacing method */
|
|
37
|
+
method?: 'align' | 'stretch';
|
|
38
|
+
/** Spacing behavior */
|
|
39
|
+
spacing?: 'auto' | 'exact';
|
|
40
|
+
/** Unique ID for the path (auto-generated if not provided) */
|
|
41
|
+
pathId?: string;
|
|
42
|
+
}
|
|
43
|
+
export interface TextOnPathResult {
|
|
44
|
+
/** Complete SVG markup */
|
|
45
|
+
svg: string;
|
|
46
|
+
/** Just the defs section (for embedding) */
|
|
47
|
+
defs: string;
|
|
48
|
+
/** Just the text element (for embedding) */
|
|
49
|
+
textElement: string;
|
|
50
|
+
/** Path length in pixels */
|
|
51
|
+
pathLength: number;
|
|
52
|
+
/** Text width in pixels (approximate) */
|
|
53
|
+
textWidth: number;
|
|
54
|
+
/** Whether text fits on path */
|
|
55
|
+
textFits: boolean;
|
|
56
|
+
}
|
|
57
|
+
export interface PathPoint {
|
|
58
|
+
x: number;
|
|
59
|
+
y: number;
|
|
60
|
+
angle: number;
|
|
61
|
+
t: number;
|
|
62
|
+
}
|
|
63
|
+
export interface TextOnPathAnimation {
|
|
64
|
+
/** Animation duration in ms */
|
|
65
|
+
duration?: number;
|
|
66
|
+
/** Animation easing */
|
|
67
|
+
easing?: 'linear' | 'ease' | 'ease-in' | 'ease-out' | 'ease-in-out';
|
|
68
|
+
/** Animation direction */
|
|
69
|
+
direction?: 'normal' | 'reverse' | 'alternate' | 'alternate-reverse';
|
|
70
|
+
/** Repeat count (Infinity for infinite) */
|
|
71
|
+
repeatCount?: number | 'indefinite';
|
|
72
|
+
/** Start offset range [from, to] */
|
|
73
|
+
offsetRange?: [number | string, number | string];
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Parse SVG path data into segments
|
|
77
|
+
*/
|
|
78
|
+
export declare function parsePathData(d: string): PathSegment[];
|
|
79
|
+
interface PathSegment {
|
|
80
|
+
type: 'M' | 'L' | 'C' | 'Q' | 'A' | 'Z';
|
|
81
|
+
x: number;
|
|
82
|
+
y: number;
|
|
83
|
+
x0?: number;
|
|
84
|
+
y0?: number;
|
|
85
|
+
x1?: number;
|
|
86
|
+
y1?: number;
|
|
87
|
+
x2?: number;
|
|
88
|
+
y2?: number;
|
|
89
|
+
rx?: number;
|
|
90
|
+
ry?: number;
|
|
91
|
+
xAxisRotation?: number;
|
|
92
|
+
largeArcFlag?: number;
|
|
93
|
+
sweepFlag?: number;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Calculate total path length
|
|
97
|
+
*/
|
|
98
|
+
export declare function calculatePathLength(pathData: string): number;
|
|
99
|
+
/**
|
|
100
|
+
* Sample points along a path
|
|
101
|
+
*/
|
|
102
|
+
export declare function samplePath(pathData: string, numSamples: number): PathPoint[];
|
|
103
|
+
/**
|
|
104
|
+
* Generate SVG text on path
|
|
105
|
+
*/
|
|
106
|
+
export declare function generateTextOnPath(options: TextOnPathOptions): TextOnPathResult;
|
|
107
|
+
/**
|
|
108
|
+
* Generate animated text on path
|
|
109
|
+
*/
|
|
110
|
+
export declare function generateAnimatedTextOnPath(options: TextOnPathOptions, animation: TextOnPathAnimation): string;
|
|
111
|
+
export declare const PATH_PRESETS: {
|
|
112
|
+
/** Straight horizontal line */
|
|
113
|
+
horizontal: (width: number) => string;
|
|
114
|
+
/** Arc (semicircle) */
|
|
115
|
+
arc: (width: number, height: number) => string;
|
|
116
|
+
/** Full wave */
|
|
117
|
+
wave: (width: number, amplitude: number, frequency?: number) => string;
|
|
118
|
+
/** Circle */
|
|
119
|
+
circle: (cx: number, cy: number, r: number) => string;
|
|
120
|
+
/** Ellipse */
|
|
121
|
+
ellipse: (cx: number, cy: number, rx: number, ry: number) => string;
|
|
122
|
+
/** Spiral */
|
|
123
|
+
spiral: (cx: number, cy: number, startR: number, endR: number, turns?: number) => string;
|
|
124
|
+
/** Heart shape */
|
|
125
|
+
heart: (cx: number, cy: number, size: number) => string;
|
|
126
|
+
/** Star shape (for text around star points) */
|
|
127
|
+
star: (cx: number, cy: number, outerR: number, innerR: number, points?: number) => string;
|
|
128
|
+
};
|
|
129
|
+
export interface UseTextOnPathState {
|
|
130
|
+
text: string;
|
|
131
|
+
pathData: string;
|
|
132
|
+
options: Partial<TextOnPathOptions>;
|
|
133
|
+
}
|
|
134
|
+
export interface UseTextOnPathReturn {
|
|
135
|
+
state: UseTextOnPathState;
|
|
136
|
+
result: TextOnPathResult | null;
|
|
137
|
+
setText: (text: string) => void;
|
|
138
|
+
setPath: (pathData: string) => void;
|
|
139
|
+
setOptions: (options: Partial<TextOnPathOptions>) => void;
|
|
140
|
+
usePresetPath: (preset: keyof typeof PATH_PRESETS, ...args: number[]) => void;
|
|
141
|
+
getSvg: () => string;
|
|
142
|
+
getAnimatedSvg: (animation: TextOnPathAnimation) => string;
|
|
143
|
+
}
|
|
144
|
+
export declare function useTextOnPath(initialText?: string, initialPath?: string): UseTextOnPathReturn;
|
|
145
|
+
export default useTextOnPath;
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* useVectorEditor — extracted logic + state for VectorEditor.
|
|
3
|
+
* Keeps every useState / useRef / useCallback / useEffect in a single hook
|
|
4
|
+
* so the component file is pure layout.
|
|
5
|
+
*/
|
|
6
|
+
import type { VTool, VShape } from "./vectorEditorTypes";
|
|
7
|
+
export interface UseVectorEditorOptions {
|
|
8
|
+
artW: number;
|
|
9
|
+
artH: number;
|
|
10
|
+
onSaveToLibrary?: (dataUrl: string, name: string, mimeType: string) => void;
|
|
11
|
+
}
|
|
12
|
+
export declare function useVectorEditor({ artW, artH, onSaveToLibrary }: UseVectorEditorOptions): {
|
|
13
|
+
readonly shapes: VShape[];
|
|
14
|
+
readonly selId: string | null;
|
|
15
|
+
readonly tool: VTool;
|
|
16
|
+
readonly fillCol: string;
|
|
17
|
+
readonly strokeCol: string;
|
|
18
|
+
readonly strokeW: number;
|
|
19
|
+
readonly fontSize: number;
|
|
20
|
+
readonly fontFamily: string;
|
|
21
|
+
readonly shapeOpacity: number;
|
|
22
|
+
readonly cornerRadius: number;
|
|
23
|
+
readonly polygonSides: number;
|
|
24
|
+
readonly starPoints2: number;
|
|
25
|
+
readonly starInnerRatio: number;
|
|
26
|
+
readonly zoom: number;
|
|
27
|
+
readonly px: number;
|
|
28
|
+
readonly py: number;
|
|
29
|
+
readonly dlgSvg: boolean;
|
|
30
|
+
readonly svgText: string;
|
|
31
|
+
readonly snapGrid: boolean;
|
|
32
|
+
readonly gridSize: number;
|
|
33
|
+
readonly hasClipboard: boolean;
|
|
34
|
+
readonly boolSecondShape: string | null;
|
|
35
|
+
readonly selShape: VShape | null;
|
|
36
|
+
readonly setTool: import("react").Dispatch<import("react").SetStateAction<VTool>>;
|
|
37
|
+
readonly setFillCol: import("react").Dispatch<import("react").SetStateAction<string>>;
|
|
38
|
+
readonly setStrokeCol: import("react").Dispatch<import("react").SetStateAction<string>>;
|
|
39
|
+
readonly setStrokeW: import("react").Dispatch<import("react").SetStateAction<number>>;
|
|
40
|
+
readonly setFontSize: import("react").Dispatch<import("react").SetStateAction<number>>;
|
|
41
|
+
readonly setFontFamily: import("react").Dispatch<import("react").SetStateAction<string>>;
|
|
42
|
+
readonly setShapeOpacity: import("react").Dispatch<import("react").SetStateAction<number>>;
|
|
43
|
+
readonly setCornerRadius: import("react").Dispatch<import("react").SetStateAction<number>>;
|
|
44
|
+
readonly setPolygonSides: import("react").Dispatch<import("react").SetStateAction<number>>;
|
|
45
|
+
readonly setStarPoints2: import("react").Dispatch<import("react").SetStateAction<number>>;
|
|
46
|
+
readonly setStarInnerRatio: import("react").Dispatch<import("react").SetStateAction<number>>;
|
|
47
|
+
readonly setZoom: import("react").Dispatch<import("react").SetStateAction<number>>;
|
|
48
|
+
readonly setDlgSvg: import("react").Dispatch<import("react").SetStateAction<boolean>>;
|
|
49
|
+
readonly setSvgText: import("react").Dispatch<import("react").SetStateAction<string>>;
|
|
50
|
+
readonly setSnapGrid: import("react").Dispatch<import("react").SetStateAction<boolean>>;
|
|
51
|
+
readonly setGridSize: import("react").Dispatch<import("react").SetStateAction<number>>;
|
|
52
|
+
readonly setSelId: import("react").Dispatch<import("react").SetStateAction<string | null>>;
|
|
53
|
+
readonly setBoolSecondShape: import("react").Dispatch<import("react").SetStateAction<string | null>>;
|
|
54
|
+
readonly boxRef: import("react").RefObject<HTMLDivElement>;
|
|
55
|
+
readonly fInp: import("react").RefObject<HTMLInputElement>;
|
|
56
|
+
readonly onDown: (e: React.MouseEvent<SVGSVGElement>) => void;
|
|
57
|
+
readonly onMove: (e: React.MouseEvent<SVGSVGElement>) => void;
|
|
58
|
+
readonly onUp: () => void;
|
|
59
|
+
readonly onWheel: (e: React.WheelEvent) => void;
|
|
60
|
+
readonly onDblClick: () => void;
|
|
61
|
+
readonly undo: () => void;
|
|
62
|
+
readonly redo: () => void;
|
|
63
|
+
readonly deleteShape: () => void;
|
|
64
|
+
readonly bringToFront: () => void;
|
|
65
|
+
readonly sendToBack: () => void;
|
|
66
|
+
readonly updateSel: (patch: Partial<VShape>) => void;
|
|
67
|
+
readonly copyShape: () => void;
|
|
68
|
+
readonly pasteShape: () => void;
|
|
69
|
+
readonly duplicateShape: () => void;
|
|
70
|
+
readonly flipH: () => void;
|
|
71
|
+
readonly flipV: () => void;
|
|
72
|
+
readonly alignShapes: (mode: "left" | "center" | "right" | "top" | "middle" | "bottom") => void;
|
|
73
|
+
readonly unionShapes: () => void;
|
|
74
|
+
readonly subtractShapes: () => void;
|
|
75
|
+
readonly intersectShapes: () => void;
|
|
76
|
+
readonly excludeShapes: () => void;
|
|
77
|
+
readonly outlineStroke: () => void;
|
|
78
|
+
readonly importSVGString: (raw: string) => void;
|
|
79
|
+
readonly openFile: (file: File) => Promise<void>;
|
|
80
|
+
readonly newCanvas: () => void;
|
|
81
|
+
readonly exportSVG: () => void;
|
|
82
|
+
readonly exportPNG: () => void;
|
|
83
|
+
readonly exportJPG: () => void;
|
|
84
|
+
readonly exportWebP: () => void;
|
|
85
|
+
readonly exportBMP: () => void;
|
|
86
|
+
readonly switchTool: (newTool: VTool) => void;
|
|
87
|
+
readonly saveToLibrary: () => void;
|
|
88
|
+
};
|
|
89
|
+
/** Return type for sub-component props */
|
|
90
|
+
export type VectorEditorAPI = ReturnType<typeof useVectorEditor>;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Boolean operations for vector shapes
|
|
3
|
+
* Implements union, difference, intersection, and exclusion operations
|
|
4
|
+
*/
|
|
5
|
+
import type { VShape } from "./vectorEditorTypes";
|
|
6
|
+
export type Point = {
|
|
7
|
+
x: number;
|
|
8
|
+
y: number;
|
|
9
|
+
};
|
|
10
|
+
export type Segment = {
|
|
11
|
+
start: Point;
|
|
12
|
+
end: Point;
|
|
13
|
+
};
|
|
14
|
+
export type BooleanOp = "union" | "difference" | "intersection" | "exclusion";
|
|
15
|
+
/** Perform boolean operation on two shapes */
|
|
16
|
+
export declare function booleanOperation(shapeA: VShape, shapeB: VShape, operation: BooleanOp): VShape | VShape[] | null;
|
|
17
|
+
/** Check if two shapes overlap */
|
|
18
|
+
export declare function shapesOverlap(shapeA: VShape, shapeB: VShape): boolean;
|
|
19
|
+
/** Group shapes into compound path */
|
|
20
|
+
export declare function groupToCompound(shapes: VShape[]): VShape | null;
|
|
21
|
+
/** Flatten a polyline to individual segment shapes (for outline stroke) */
|
|
22
|
+
export declare function flattenToOutline(shape: VShape, strokeWidth?: number): VShape;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { VShape } from "./vectorEditorTypes";
|
|
2
|
+
/** Build SVG markup string from shapes */
|
|
3
|
+
export declare function buildSVGString(shapes: VShape[], artW: number, artH: number): string;
|
|
4
|
+
export declare function exportSVGFile(shapes: VShape[], artW: number, artH: number): void;
|
|
5
|
+
export declare function exportPNGFile(shapes: VShape[], artW: number, artH: number): void;
|
|
6
|
+
export declare function exportJPGFile(shapes: VShape[], artW: number, artH: number): void;
|
|
7
|
+
export declare function exportWebPFile(shapes: VShape[], artW: number, artH: number): void;
|
|
8
|
+
export declare function exportBMPFile(shapes: VShape[], artW: number, artH: number): void;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { VShape } from "./vectorEditorTypes";
|
|
2
|
+
/**
|
|
3
|
+
* Parse an SVG string and return an array of VShape objects.
|
|
4
|
+
* Throws an Error if the SVG is malformed.
|
|
5
|
+
* Returns an empty array if no supported shapes are found.
|
|
6
|
+
*/
|
|
7
|
+
export declare function parseSVGToShapes(raw: string): VShape[];
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { SvgFilter } from './vectorSvgFilters';
|
|
2
|
+
export type VTool = "pointer" | "rect" | "roundrect" | "ellipse" | "line" | "arrow" | "polygon" | "star" | "pen" | "text";
|
|
3
|
+
export interface VShape {
|
|
4
|
+
id: string;
|
|
5
|
+
type: "rect" | "roundrect" | "ellipse" | "line" | "polyline" | "text" | "polygon" | "star" | "arrow";
|
|
6
|
+
x: number;
|
|
7
|
+
y: number;
|
|
8
|
+
w: number;
|
|
9
|
+
h: number;
|
|
10
|
+
x2?: number;
|
|
11
|
+
y2?: number;
|
|
12
|
+
points?: {
|
|
13
|
+
x: number;
|
|
14
|
+
y: number;
|
|
15
|
+
}[];
|
|
16
|
+
fill: string;
|
|
17
|
+
stroke: string;
|
|
18
|
+
strokeWidth: number;
|
|
19
|
+
opacity: number;
|
|
20
|
+
text?: string;
|
|
21
|
+
fontSize?: number;
|
|
22
|
+
fontFamily?: string;
|
|
23
|
+
rotation: number;
|
|
24
|
+
rx?: number;
|
|
25
|
+
sides?: number;
|
|
26
|
+
innerRadius?: number;
|
|
27
|
+
filters?: SvgFilter[];
|
|
28
|
+
}
|
|
29
|
+
export interface HistEntry {
|
|
30
|
+
shapes: VShape[];
|
|
31
|
+
}
|
|
32
|
+
export declare const sid: () => string;
|
|
33
|
+
export declare const cloneShapes: (s: VShape[]) => VShape[];
|
|
34
|
+
export declare const downloadBlob: (blob: Blob, name: string) => void;
|
|
35
|
+
export declare const TOOLS: {
|
|
36
|
+
id: VTool;
|
|
37
|
+
icon: string;
|
|
38
|
+
label: string;
|
|
39
|
+
key: string;
|
|
40
|
+
}[];
|
|
41
|
+
export declare const FONTS: string[];
|
|
42
|
+
/** Generate polygon points string for n-sided regular polygon */
|
|
43
|
+
export declare function polygonPoints(cx: number, cy: number, r: number, sides: number, rotation: number): string;
|
|
44
|
+
/** Generate star points string */
|
|
45
|
+
export declare function starPoints(cx: number, cy: number, outerR: number, innerR: number, points: number, rotation: number): string;
|
|
46
|
+
/** Snap a value to grid */
|
|
47
|
+
export declare function snapToGrid(val: number, gridSize: number): number;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gradient types and utilities for VectorEditor
|
|
3
|
+
*/
|
|
4
|
+
import type { VShape } from "./vectorEditorTypes";
|
|
5
|
+
export interface GradientStop {
|
|
6
|
+
offset: number;
|
|
7
|
+
color: string;
|
|
8
|
+
opacity?: number;
|
|
9
|
+
}
|
|
10
|
+
export interface LinearGradient {
|
|
11
|
+
type: "linear";
|
|
12
|
+
id: string;
|
|
13
|
+
angle: number;
|
|
14
|
+
stops: GradientStop[];
|
|
15
|
+
}
|
|
16
|
+
export interface RadialGradient {
|
|
17
|
+
type: "radial";
|
|
18
|
+
id: string;
|
|
19
|
+
cx: number;
|
|
20
|
+
cy: number;
|
|
21
|
+
r: number;
|
|
22
|
+
fx?: number;
|
|
23
|
+
fy?: number;
|
|
24
|
+
stops: GradientStop[];
|
|
25
|
+
}
|
|
26
|
+
export interface ConicGradient {
|
|
27
|
+
type: "conic";
|
|
28
|
+
id: string;
|
|
29
|
+
cx: number;
|
|
30
|
+
cy: number;
|
|
31
|
+
angle: number;
|
|
32
|
+
stops: GradientStop[];
|
|
33
|
+
}
|
|
34
|
+
export type Gradient = LinearGradient | RadialGradient | ConicGradient;
|
|
35
|
+
export interface GradientFill {
|
|
36
|
+
gradient: Gradient;
|
|
37
|
+
scaleX?: number;
|
|
38
|
+
scaleY?: number;
|
|
39
|
+
rotate?: number;
|
|
40
|
+
translateX?: number;
|
|
41
|
+
translateY?: number;
|
|
42
|
+
}
|
|
43
|
+
export declare const gradientId: () => string;
|
|
44
|
+
export declare const PRESET_GRADIENTS: Gradient[];
|
|
45
|
+
export declare function gradientToSVGDef(gradient: Gradient): string;
|
|
46
|
+
export declare function gradientToFillRef(gradient: Gradient): string;
|
|
47
|
+
export declare function gradientToCSS(gradient: Gradient): string;
|
|
48
|
+
export declare function cloneGradient(gradient: Gradient): Gradient;
|
|
49
|
+
export declare function createLinearGradient(colors: string[], angle?: number): LinearGradient;
|
|
50
|
+
export declare function createRadialGradient(colors: string[], cx?: number, cy?: number, r?: number): RadialGradient;
|
|
51
|
+
export declare function addGradientStop(gradient: Gradient, offset: number, color: string): Gradient;
|
|
52
|
+
export declare function removeGradientStop(gradient: Gradient, index: number): Gradient;
|
|
53
|
+
export declare function updateGradientStop(gradient: Gradient, index: number, update: Partial<GradientStop>): Gradient;
|
|
54
|
+
export declare function rotateLinearGradient(gradient: LinearGradient, angle: number): LinearGradient;
|
|
55
|
+
export declare function reverseGradient(gradient: Gradient): Gradient;
|
|
56
|
+
export interface GradientShape extends VShape {
|
|
57
|
+
fillGradient?: Gradient;
|
|
58
|
+
strokeGradient?: Gradient;
|
|
59
|
+
}
|
|
60
|
+
export declare function applyFillGradient(shape: VShape, gradient: Gradient): GradientShape;
|
|
61
|
+
export declare function applyStrokeGradient(shape: VShape, gradient: Gradient): GradientShape;
|
|
62
|
+
export declare function removeFillGradient(shape: GradientShape, solidColor: string): GradientShape;
|
|
63
|
+
export declare function removeStrokeGradient(shape: GradientShape, solidColor: string): GradientShape;
|
|
64
|
+
export declare function collectGradientDefs(shapes: VShape[]): string;
|