@zenode/designer 3.5.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/APIs.md +60 -0
- package/LICENSE +12 -0
- package/README.md +219 -0
- package/dist/components/canvas/canvas.cjs +106 -0
- package/dist/components/canvas/canvas.cjs.map +1 -0
- package/dist/components/canvas/canvas.d.ts +15 -0
- package/dist/components/canvas/canvas.js +84 -0
- package/dist/components/canvas/canvas.js.map +1 -0
- package/dist/components/canvas/grid.cjs +167 -0
- package/dist/components/canvas/grid.cjs.map +1 -0
- package/dist/components/canvas/grid.d.ts +5 -0
- package/dist/components/canvas/grid.js +144 -0
- package/dist/components/canvas/grid.js.map +1 -0
- package/dist/components/shapeTypes/circle.d.ts +2 -0
- package/dist/components/shapeTypes/rectangle.d.ts +4 -0
- package/dist/components/shapeTypes/rectangle.js +22 -0
- package/dist/components/shapeTypes/rectangle.js.map +1 -0
- package/dist/components/shapeTypes/rhombus.d.ts +1 -0
- package/dist/config/defaultConfig.cjs +542 -0
- package/dist/config/defaultConfig.cjs.map +1 -0
- package/dist/config/defaultConfig.d.ts +2 -0
- package/dist/config/defaultConfig.js +540 -0
- package/dist/config/defaultConfig.js.map +1 -0
- package/dist/config/testConfig.cjs +553 -0
- package/dist/config/testConfig.cjs.map +1 -0
- package/dist/config/testConfig.d.ts +2 -0
- package/dist/config/testConfig.js +551 -0
- package/dist/config/testConfig.js.map +1 -0
- package/dist/config/testConfig1.d.ts +2 -0
- package/dist/config/testXML.cjs +17 -0
- package/dist/config/testXML.cjs.map +1 -0
- package/dist/config/testXML.d.ts +1 -0
- package/dist/config/testXML.js +15 -0
- package/dist/config/testXML.js.map +1 -0
- package/dist/connections/paths/curved.cjs +34 -0
- package/dist/connections/paths/curved.cjs.map +1 -0
- package/dist/connections/paths/curved.d.ts +2 -0
- package/dist/connections/paths/curved.js +32 -0
- package/dist/connections/paths/curved.js.map +1 -0
- package/dist/connections/paths/index.cjs +16 -0
- package/dist/connections/paths/index.cjs.map +1 -0
- package/dist/connections/paths/index.d.ts +12 -0
- package/dist/connections/paths/index.js +14 -0
- package/dist/connections/paths/index.js.map +1 -0
- package/dist/connections/paths/l-bent.cjs +59 -0
- package/dist/connections/paths/l-bent.cjs.map +1 -0
- package/dist/connections/paths/l-bent.d.ts +5 -0
- package/dist/connections/paths/l-bent.js +57 -0
- package/dist/connections/paths/l-bent.js.map +1 -0
- package/dist/connections/paths/s-shaped.cjs +24 -0
- package/dist/connections/paths/s-shaped.cjs.map +1 -0
- package/dist/connections/paths/s-shaped.d.ts +5 -0
- package/dist/connections/paths/s-shaped.js +22 -0
- package/dist/connections/paths/s-shaped.js.map +1 -0
- package/dist/connections/paths/straight.cjs +9 -0
- package/dist/connections/paths/straight.cjs.map +1 -0
- package/dist/connections/paths/straight.d.ts +2 -0
- package/dist/connections/paths/straight.js +7 -0
- package/dist/connections/paths/straight.js.map +1 -0
- package/dist/connections/render.cjs +382 -0
- package/dist/connections/render.cjs.map +1 -0
- package/dist/connections/render.d.ts +29 -0
- package/dist/connections/render.js +360 -0
- package/dist/connections/render.js.map +1 -0
- package/dist/connections/routing/index.d.ts +14 -0
- package/dist/connections/routing/smartRouter.cjs +26 -0
- package/dist/connections/routing/smartRouter.cjs.map +1 -0
- package/dist/connections/routing/smartRouter.d.ts +13 -0
- package/dist/connections/routing/smartRouter.js +24 -0
- package/dist/connections/routing/smartRouter.js.map +1 -0
- package/dist/contextpad/defaults.cjs +181 -0
- package/dist/contextpad/defaults.cjs.map +1 -0
- package/dist/contextpad/defaults.d.ts +2 -0
- package/dist/contextpad/defaults.js +179 -0
- package/dist/contextpad/defaults.js.map +1 -0
- package/dist/contextpad/registry.cjs +54 -0
- package/dist/contextpad/registry.cjs.map +1 -0
- package/dist/contextpad/registry.d.ts +21 -0
- package/dist/contextpad/registry.js +52 -0
- package/dist/contextpad/registry.js.map +1 -0
- package/dist/contextpad/renderer.cjs +347 -0
- package/dist/contextpad/renderer.cjs.map +1 -0
- package/dist/contextpad/renderer.d.ts +32 -0
- package/dist/contextpad/renderer.js +326 -0
- package/dist/contextpad/renderer.js.map +1 -0
- package/dist/core/engine.cjs +2254 -0
- package/dist/core/engine.cjs.map +1 -0
- package/dist/core/engine.d.ts +444 -0
- package/dist/core/engine.js +2233 -0
- package/dist/core/engine.js.map +1 -0
- package/dist/core/eventManager.cjs +29 -0
- package/dist/core/eventManager.cjs.map +1 -0
- package/dist/core/eventManager.d.ts +6 -0
- package/dist/core/eventManager.js +27 -0
- package/dist/core/eventManager.js.map +1 -0
- package/dist/core/history/command.cjs +182 -0
- package/dist/core/history/command.cjs.map +1 -0
- package/dist/core/history/command.d.ts +119 -0
- package/dist/core/history/command.js +171 -0
- package/dist/core/history/command.js.map +1 -0
- package/dist/core/history/undoManager.cjs +54 -0
- package/dist/core/history/undoManager.cjs.map +1 -0
- package/dist/core/history/undoManager.d.ts +18 -0
- package/dist/core/history/undoManager.js +52 -0
- package/dist/core/history/undoManager.js.map +1 -0
- package/dist/core/license.cjs +36 -0
- package/dist/core/license.cjs.map +1 -0
- package/dist/core/license.d.ts +16 -0
- package/dist/core/license.js +34 -0
- package/dist/core/license.js.map +1 -0
- package/dist/core/samples.cjs +68 -0
- package/dist/core/samples.cjs.map +1 -0
- package/dist/core/samples.d.ts +6 -0
- package/dist/core/samples.js +66 -0
- package/dist/core/samples.js.map +1 -0
- package/dist/core/serialization.cjs +123 -0
- package/dist/core/serialization.cjs.map +1 -0
- package/dist/core/serialization.d.ts +26 -0
- package/dist/core/serialization.js +121 -0
- package/dist/core/serialization.js.map +1 -0
- package/dist/core/validation.cjs +92 -0
- package/dist/core/validation.cjs.map +1 -0
- package/dist/core/validation.d.ts +24 -0
- package/dist/core/validation.js +89 -0
- package/dist/core/validation.js.map +1 -0
- package/dist/core/zoom&PanManager.d.ts +16 -0
- package/dist/core/zoom_PanManager.cjs +96 -0
- package/dist/core/zoom_PanManager.cjs.map +1 -0
- package/dist/core/zoom_PanManager.js +75 -0
- package/dist/core/zoom_PanManager.js.map +1 -0
- package/dist/effects/engine.cjs +203 -0
- package/dist/effects/engine.cjs.map +1 -0
- package/dist/effects/engine.d.ts +6 -0
- package/dist/effects/engine.js +182 -0
- package/dist/effects/engine.js.map +1 -0
- package/dist/events/drag.cjs +299 -0
- package/dist/events/drag.cjs.map +1 -0
- package/dist/events/drag.d.ts +19 -0
- package/dist/events/drag.js +278 -0
- package/dist/events/drag.js.map +1 -0
- package/dist/events/mouseClick.cjs +36 -0
- package/dist/events/mouseClick.cjs.map +1 -0
- package/dist/events/mouseClick.d.ts +26 -0
- package/dist/events/mouseClick.js +34 -0
- package/dist/events/mouseClick.js.map +1 -0
- package/dist/events/mouseMove.cjs +104 -0
- package/dist/events/mouseMove.cjs.map +1 -0
- package/dist/events/mouseMove.d.ts +11 -0
- package/dist/events/mouseMove.js +82 -0
- package/dist/events/mouseMove.js.map +1 -0
- package/dist/events/resize.cjs +98 -0
- package/dist/events/resize.cjs.map +1 -0
- package/dist/events/resize.d.ts +14 -0
- package/dist/events/resize.js +77 -0
- package/dist/events/resize.js.map +1 -0
- package/dist/examples/keyboard-shortcuts.d.ts +10 -0
- package/dist/icons.bundle.js +763 -0
- package/dist/icons.bundle.js.map +1 -0
- package/dist/icons.cjs +105 -0
- package/dist/icons.cjs.map +1 -0
- package/dist/icons.d.ts +7 -0
- package/dist/icons.js +89 -0
- package/dist/icons.js.map +1 -0
- package/dist/index.cjs +284 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +160 -0
- package/dist/index.js +204 -0
- package/dist/index.js.map +1 -0
- package/dist/model/configurationModel.d.ts +280 -0
- package/dist/model/interface.d.ts +95 -0
- package/dist/model/shapeModel.d.ts +28 -0
- package/dist/node_modules/lucide/dist/esm/createElement.cjs +36 -0
- package/dist/node_modules/lucide/dist/esm/createElement.cjs.map +1 -0
- package/dist/node_modules/lucide/dist/esm/createElement.js +34 -0
- package/dist/node_modules/lucide/dist/esm/createElement.js.map +1 -0
- package/dist/node_modules/lucide/dist/esm/defaultAttributes.cjs +23 -0
- package/dist/node_modules/lucide/dist/esm/defaultAttributes.cjs.map +1 -0
- package/dist/node_modules/lucide/dist/esm/defaultAttributes.js +21 -0
- package/dist/node_modules/lucide/dist/esm/defaultAttributes.js.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/arrow-down-right.cjs +16 -0
- package/dist/node_modules/lucide/dist/esm/icons/arrow-down-right.cjs.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/arrow-down-right.js +14 -0
- package/dist/node_modules/lucide/dist/esm/icons/arrow-down-right.js.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/arrow-right.cjs +16 -0
- package/dist/node_modules/lucide/dist/esm/icons/arrow-right.cjs.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/arrow-right.js +14 -0
- package/dist/node_modules/lucide/dist/esm/icons/arrow-right.js.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/arrow-up-right.cjs +16 -0
- package/dist/node_modules/lucide/dist/esm/icons/arrow-up-right.cjs.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/arrow-up-right.js +14 -0
- package/dist/node_modules/lucide/dist/esm/icons/arrow-up-right.js.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/box.cjs +22 -0
- package/dist/node_modules/lucide/dist/esm/icons/box.cjs.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/box.js +20 -0
- package/dist/node_modules/lucide/dist/esm/icons/box.js.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/chevron-down.cjs +13 -0
- package/dist/node_modules/lucide/dist/esm/icons/chevron-down.cjs.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/chevron-down.js +11 -0
- package/dist/node_modules/lucide/dist/esm/icons/chevron-down.js.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/chevron-right.cjs +13 -0
- package/dist/node_modules/lucide/dist/esm/icons/chevron-right.cjs.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/chevron-right.js +11 -0
- package/dist/node_modules/lucide/dist/esm/icons/chevron-right.js.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/circle-alert.cjs +17 -0
- package/dist/node_modules/lucide/dist/esm/icons/circle-alert.cjs.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/circle-alert.js +15 -0
- package/dist/node_modules/lucide/dist/esm/icons/circle-alert.js.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/circle-check-big.cjs +16 -0
- package/dist/node_modules/lucide/dist/esm/icons/circle-check-big.cjs.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/circle-check-big.js +14 -0
- package/dist/node_modules/lucide/dist/esm/icons/circle-check-big.js.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/circle-question-mark.cjs +17 -0
- package/dist/node_modules/lucide/dist/esm/icons/circle-question-mark.cjs.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/circle-question-mark.js +15 -0
- package/dist/node_modules/lucide/dist/esm/icons/circle-question-mark.js.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/circle.cjs +13 -0
- package/dist/node_modules/lucide/dist/esm/icons/circle.cjs.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/circle.js +11 -0
- package/dist/node_modules/lucide/dist/esm/icons/circle.js.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/cloud.cjs +13 -0
- package/dist/node_modules/lucide/dist/esm/icons/cloud.cjs.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/cloud.js +11 -0
- package/dist/node_modules/lucide/dist/esm/icons/cloud.js.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/copy.cjs +16 -0
- package/dist/node_modules/lucide/dist/esm/icons/copy.cjs.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/copy.js +14 -0
- package/dist/node_modules/lucide/dist/esm/icons/copy.js.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/database.cjs +17 -0
- package/dist/node_modules/lucide/dist/esm/icons/database.cjs.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/database.js +15 -0
- package/dist/node_modules/lucide/dist/esm/icons/database.js.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/diamond.cjs +20 -0
- package/dist/node_modules/lucide/dist/esm/icons/diamond.cjs.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/diamond.js +18 -0
- package/dist/node_modules/lucide/dist/esm/icons/diamond.js.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/download.cjs +17 -0
- package/dist/node_modules/lucide/dist/esm/icons/download.cjs.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/download.js +15 -0
- package/dist/node_modules/lucide/dist/esm/icons/download.js.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/eye-off.cjs +28 -0
- package/dist/node_modules/lucide/dist/esm/icons/eye-off.cjs.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/eye-off.js +26 -0
- package/dist/node_modules/lucide/dist/esm/icons/eye-off.js.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/eye.cjs +21 -0
- package/dist/node_modules/lucide/dist/esm/icons/eye.cjs.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/eye.js +19 -0
- package/dist/node_modules/lucide/dist/esm/icons/eye.js.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/grid-3x3.cjs +19 -0
- package/dist/node_modules/lucide/dist/esm/icons/grid-3x3.cjs.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/grid-3x3.js +17 -0
- package/dist/node_modules/lucide/dist/esm/icons/grid-3x3.js.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/history.cjs +17 -0
- package/dist/node_modules/lucide/dist/esm/icons/history.cjs.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/history.js +15 -0
- package/dist/node_modules/lucide/dist/esm/icons/history.js.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/info.cjs +17 -0
- package/dist/node_modules/lucide/dist/esm/icons/info.cjs.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/info.js +15 -0
- package/dist/node_modules/lucide/dist/esm/icons/info.js.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/lasso.cjs +17 -0
- package/dist/node_modules/lucide/dist/esm/icons/lasso.cjs.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/lasso.js +15 -0
- package/dist/node_modules/lucide/dist/esm/icons/lasso.js.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/maximize.cjs +18 -0
- package/dist/node_modules/lucide/dist/esm/icons/maximize.cjs.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/maximize.js +16 -0
- package/dist/node_modules/lucide/dist/esm/icons/maximize.js.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/minimize.cjs +18 -0
- package/dist/node_modules/lucide/dist/esm/icons/minimize.cjs.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/minimize.js +16 -0
- package/dist/node_modules/lucide/dist/esm/icons/minimize.js.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/mouse-pointer.cjs +21 -0
- package/dist/node_modules/lucide/dist/esm/icons/mouse-pointer.cjs.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/mouse-pointer.js +19 -0
- package/dist/node_modules/lucide/dist/esm/icons/mouse-pointer.js.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/move.cjs +20 -0
- package/dist/node_modules/lucide/dist/esm/icons/move.cjs.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/move.js +18 -0
- package/dist/node_modules/lucide/dist/esm/icons/move.js.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/panels-top-left.cjs +17 -0
- package/dist/node_modules/lucide/dist/esm/icons/panels-top-left.cjs.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/panels-top-left.js +15 -0
- package/dist/node_modules/lucide/dist/esm/icons/panels-top-left.js.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/pen.cjs +20 -0
- package/dist/node_modules/lucide/dist/esm/icons/pen.cjs.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/pen.js +18 -0
- package/dist/node_modules/lucide/dist/esm/icons/pen.js.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/plus.cjs +16 -0
- package/dist/node_modules/lucide/dist/esm/icons/plus.cjs.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/plus.js +14 -0
- package/dist/node_modules/lucide/dist/esm/icons/plus.js.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/search.cjs +16 -0
- package/dist/node_modules/lucide/dist/esm/icons/search.cjs.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/search.js +14 -0
- package/dist/node_modules/lucide/dist/esm/icons/search.js.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/settings.cjs +21 -0
- package/dist/node_modules/lucide/dist/esm/icons/settings.cjs.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/settings.js +19 -0
- package/dist/node_modules/lucide/dist/esm/icons/settings.js.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/share-2.cjs +19 -0
- package/dist/node_modules/lucide/dist/esm/icons/share-2.cjs.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/share-2.js +17 -0
- package/dist/node_modules/lucide/dist/esm/icons/share-2.js.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/square.cjs +13 -0
- package/dist/node_modules/lucide/dist/esm/icons/square.cjs.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/square.js +11 -0
- package/dist/node_modules/lucide/dist/esm/icons/square.js.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/sticky-note.cjs +21 -0
- package/dist/node_modules/lucide/dist/esm/icons/sticky-note.cjs.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/sticky-note.js +19 -0
- package/dist/node_modules/lucide/dist/esm/icons/sticky-note.js.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/trash-2.cjs +19 -0
- package/dist/node_modules/lucide/dist/esm/icons/trash-2.cjs.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/trash-2.js +17 -0
- package/dist/node_modules/lucide/dist/esm/icons/trash-2.js.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/triangle.cjs +15 -0
- package/dist/node_modules/lucide/dist/esm/icons/triangle.cjs.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/triangle.js +13 -0
- package/dist/node_modules/lucide/dist/esm/icons/triangle.js.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/x.cjs +16 -0
- package/dist/node_modules/lucide/dist/esm/icons/x.cjs.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/x.js +14 -0
- package/dist/node_modules/lucide/dist/esm/icons/x.js.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/zap.cjs +20 -0
- package/dist/node_modules/lucide/dist/esm/icons/zap.cjs.map +1 -0
- package/dist/node_modules/lucide/dist/esm/icons/zap.js +18 -0
- package/dist/node_modules/lucide/dist/esm/icons/zap.js.map +1 -0
- package/dist/node_modules/lucide/dist/esm/lucide.cjs +56 -0
- package/dist/node_modules/lucide/dist/esm/lucide.cjs.map +1 -0
- package/dist/node_modules/lucide/dist/esm/lucide.js +54 -0
- package/dist/node_modules/lucide/dist/esm/lucide.js.map +1 -0
- package/dist/node_modules/lucide/dist/esm/replaceElement.cjs +73 -0
- package/dist/node_modules/lucide/dist/esm/replaceElement.cjs.map +1 -0
- package/dist/node_modules/lucide/dist/esm/replaceElement.js +67 -0
- package/dist/node_modules/lucide/dist/esm/replaceElement.js.map +1 -0
- package/dist/node_modules/lucide/dist/esm/shared/src/utils/hasA11yProp.cjs +20 -0
- package/dist/node_modules/lucide/dist/esm/shared/src/utils/hasA11yProp.cjs.map +1 -0
- package/dist/node_modules/lucide/dist/esm/shared/src/utils/hasA11yProp.js +18 -0
- package/dist/node_modules/lucide/dist/esm/shared/src/utils/hasA11yProp.js.map +1 -0
- package/dist/node_modules/lucide/dist/esm/shared/src/utils/mergeClasses.cjs +15 -0
- package/dist/node_modules/lucide/dist/esm/shared/src/utils/mergeClasses.cjs.map +1 -0
- package/dist/node_modules/lucide/dist/esm/shared/src/utils/mergeClasses.js +13 -0
- package/dist/node_modules/lucide/dist/esm/shared/src/utils/mergeClasses.js.map +1 -0
- package/dist/node_modules/lucide/dist/esm/shared/src/utils/toCamelCase.cjs +16 -0
- package/dist/node_modules/lucide/dist/esm/shared/src/utils/toCamelCase.cjs.map +1 -0
- package/dist/node_modules/lucide/dist/esm/shared/src/utils/toCamelCase.js +14 -0
- package/dist/node_modules/lucide/dist/esm/shared/src/utils/toCamelCase.js.map +1 -0
- package/dist/node_modules/lucide/dist/esm/shared/src/utils/toPascalCase.cjs +19 -0
- package/dist/node_modules/lucide/dist/esm/shared/src/utils/toPascalCase.cjs.map +1 -0
- package/dist/node_modules/lucide/dist/esm/shared/src/utils/toPascalCase.js +17 -0
- package/dist/node_modules/lucide/dist/esm/shared/src/utils/toPascalCase.js.map +1 -0
- package/dist/nodes/content.cjs +186 -0
- package/dist/nodes/content.cjs.map +1 -0
- package/dist/nodes/content.d.ts +16 -0
- package/dist/nodes/content.js +184 -0
- package/dist/nodes/content.js.map +1 -0
- package/dist/nodes/geometry/ellipsePath.cjs +18 -0
- package/dist/nodes/geometry/ellipsePath.cjs.map +1 -0
- package/dist/nodes/geometry/ellipsePath.d.ts +5 -0
- package/dist/nodes/geometry/ellipsePath.js +16 -0
- package/dist/nodes/geometry/ellipsePath.js.map +1 -0
- package/dist/nodes/geometry/kitePath.cjs +15 -0
- package/dist/nodes/geometry/kitePath.cjs.map +1 -0
- package/dist/nodes/geometry/kitePath.d.ts +5 -0
- package/dist/nodes/geometry/kitePath.js +13 -0
- package/dist/nodes/geometry/kitePath.js.map +1 -0
- package/dist/nodes/geometry/octagonPath.cjs +23 -0
- package/dist/nodes/geometry/octagonPath.cjs.map +1 -0
- package/dist/nodes/geometry/octagonPath.d.ts +4 -0
- package/dist/nodes/geometry/octagonPath.js +21 -0
- package/dist/nodes/geometry/octagonPath.js.map +1 -0
- package/dist/nodes/geometry/parallelogramPath.cjs +16 -0
- package/dist/nodes/geometry/parallelogramPath.cjs.map +1 -0
- package/dist/nodes/geometry/parallelogramPath.d.ts +5 -0
- package/dist/nodes/geometry/parallelogramPath.js +14 -0
- package/dist/nodes/geometry/parallelogramPath.js.map +1 -0
- package/dist/nodes/geometry/pentagonPath.cjs +23 -0
- package/dist/nodes/geometry/pentagonPath.cjs.map +1 -0
- package/dist/nodes/geometry/pentagonPath.d.ts +4 -0
- package/dist/nodes/geometry/pentagonPath.js +21 -0
- package/dist/nodes/geometry/pentagonPath.js.map +1 -0
- package/dist/nodes/geometry/polygonPath.cjs +28 -0
- package/dist/nodes/geometry/polygonPath.cjs.map +1 -0
- package/dist/nodes/geometry/polygonPath.d.ts +5 -0
- package/dist/nodes/geometry/polygonPath.js +26 -0
- package/dist/nodes/geometry/polygonPath.js.map +1 -0
- package/dist/nodes/geometry/rectanglePath.cjs +23 -0
- package/dist/nodes/geometry/rectanglePath.cjs.map +1 -0
- package/dist/nodes/geometry/rectanglePath.d.ts +4 -0
- package/dist/nodes/geometry/rectanglePath.js +21 -0
- package/dist/nodes/geometry/rectanglePath.js.map +1 -0
- package/dist/nodes/geometry/semicirclePath.cjs +17 -0
- package/dist/nodes/geometry/semicirclePath.cjs.map +1 -0
- package/dist/nodes/geometry/semicirclePath.d.ts +5 -0
- package/dist/nodes/geometry/semicirclePath.js +15 -0
- package/dist/nodes/geometry/semicirclePath.js.map +1 -0
- package/dist/nodes/geometry/starPath.cjs +28 -0
- package/dist/nodes/geometry/starPath.cjs.map +1 -0
- package/dist/nodes/geometry/starPath.d.ts +4 -0
- package/dist/nodes/geometry/starPath.js +26 -0
- package/dist/nodes/geometry/starPath.js.map +1 -0
- package/dist/nodes/geometry/trapezoidPath.cjs +16 -0
- package/dist/nodes/geometry/trapezoidPath.cjs.map +1 -0
- package/dist/nodes/geometry/trapezoidPath.d.ts +5 -0
- package/dist/nodes/geometry/trapezoidPath.js +14 -0
- package/dist/nodes/geometry/trapezoidPath.js.map +1 -0
- package/dist/nodes/geometry/trianglePath.cjs +14 -0
- package/dist/nodes/geometry/trianglePath.cjs.map +1 -0
- package/dist/nodes/geometry/trianglePath.d.ts +5 -0
- package/dist/nodes/geometry/trianglePath.js +12 -0
- package/dist/nodes/geometry/trianglePath.js.map +1 -0
- package/dist/nodes/overlay.cjs +136 -0
- package/dist/nodes/overlay.cjs.map +1 -0
- package/dist/nodes/overlay.d.ts +24 -0
- package/dist/nodes/overlay.js +130 -0
- package/dist/nodes/overlay.js.map +1 -0
- package/dist/nodes/placement.cjs +346 -0
- package/dist/nodes/placement.cjs.map +1 -0
- package/dist/nodes/placement.d.ts +66 -0
- package/dist/nodes/placement.js +325 -0
- package/dist/nodes/placement.js.map +1 -0
- package/dist/nodes/ports.cjs +196 -0
- package/dist/nodes/ports.cjs.map +1 -0
- package/dist/nodes/ports.d.ts +12 -0
- package/dist/nodes/ports.js +194 -0
- package/dist/nodes/ports.js.map +1 -0
- package/dist/nodes/registry.cjs +26 -0
- package/dist/nodes/registry.cjs.map +1 -0
- package/dist/nodes/registry.d.ts +8 -0
- package/dist/nodes/registry.js +24 -0
- package/dist/nodes/registry.js.map +1 -0
- package/dist/nodes/shapes/circle.cjs +50 -0
- package/dist/nodes/shapes/circle.cjs.map +1 -0
- package/dist/nodes/shapes/circle.d.ts +2 -0
- package/dist/nodes/shapes/circle.js +48 -0
- package/dist/nodes/shapes/circle.js.map +1 -0
- package/dist/nodes/shapes/decagon.cjs +51 -0
- package/dist/nodes/shapes/decagon.cjs.map +1 -0
- package/dist/nodes/shapes/decagon.d.ts +5 -0
- package/dist/nodes/shapes/decagon.js +49 -0
- package/dist/nodes/shapes/decagon.js.map +1 -0
- package/dist/nodes/shapes/heptagon.cjs +51 -0
- package/dist/nodes/shapes/heptagon.cjs.map +1 -0
- package/dist/nodes/shapes/heptagon.d.ts +5 -0
- package/dist/nodes/shapes/heptagon.js +49 -0
- package/dist/nodes/shapes/heptagon.js.map +1 -0
- package/dist/nodes/shapes/hexagon.cjs +51 -0
- package/dist/nodes/shapes/hexagon.cjs.map +1 -0
- package/dist/nodes/shapes/hexagon.d.ts +5 -0
- package/dist/nodes/shapes/hexagon.js +49 -0
- package/dist/nodes/shapes/hexagon.js.map +1 -0
- package/dist/nodes/shapes/kite.cjs +43 -0
- package/dist/nodes/shapes/kite.cjs.map +1 -0
- package/dist/nodes/shapes/kite.d.ts +5 -0
- package/dist/nodes/shapes/kite.js +41 -0
- package/dist/nodes/shapes/kite.js.map +1 -0
- package/dist/nodes/shapes/nonagon.cjs +51 -0
- package/dist/nodes/shapes/nonagon.cjs.map +1 -0
- package/dist/nodes/shapes/nonagon.d.ts +5 -0
- package/dist/nodes/shapes/nonagon.js +49 -0
- package/dist/nodes/shapes/nonagon.js.map +1 -0
- package/dist/nodes/shapes/octagon.cjs +46 -0
- package/dist/nodes/shapes/octagon.cjs.map +1 -0
- package/dist/nodes/shapes/octagon.d.ts +2 -0
- package/dist/nodes/shapes/octagon.js +44 -0
- package/dist/nodes/shapes/octagon.js.map +1 -0
- package/dist/nodes/shapes/oval.cjs +43 -0
- package/dist/nodes/shapes/oval.cjs.map +1 -0
- package/dist/nodes/shapes/oval.d.ts +5 -0
- package/dist/nodes/shapes/oval.js +41 -0
- package/dist/nodes/shapes/oval.js.map +1 -0
- package/dist/nodes/shapes/parallelogram.cjs +44 -0
- package/dist/nodes/shapes/parallelogram.cjs.map +1 -0
- package/dist/nodes/shapes/parallelogram.d.ts +5 -0
- package/dist/nodes/shapes/parallelogram.js +42 -0
- package/dist/nodes/shapes/parallelogram.js.map +1 -0
- package/dist/nodes/shapes/pentagon.cjs +46 -0
- package/dist/nodes/shapes/pentagon.cjs.map +1 -0
- package/dist/nodes/shapes/pentagon.d.ts +2 -0
- package/dist/nodes/shapes/pentagon.js +44 -0
- package/dist/nodes/shapes/pentagon.js.map +1 -0
- package/dist/nodes/shapes/rectangle.cjs +43 -0
- package/dist/nodes/shapes/rectangle.cjs.map +1 -0
- package/dist/nodes/shapes/rectangle.d.ts +2 -0
- package/dist/nodes/shapes/rectangle.js +41 -0
- package/dist/nodes/shapes/rectangle.js.map +1 -0
- package/dist/nodes/shapes/rhombus.cjs +38 -0
- package/dist/nodes/shapes/rhombus.cjs.map +1 -0
- package/dist/nodes/shapes/rhombus.d.ts +2 -0
- package/dist/nodes/shapes/rhombus.js +36 -0
- package/dist/nodes/shapes/rhombus.js.map +1 -0
- package/dist/nodes/shapes/semicircle.cjs +38 -0
- package/dist/nodes/shapes/semicircle.cjs.map +1 -0
- package/dist/nodes/shapes/semicircle.d.ts +2 -0
- package/dist/nodes/shapes/semicircle.js +36 -0
- package/dist/nodes/shapes/semicircle.js.map +1 -0
- package/dist/nodes/shapes/star.cjs +51 -0
- package/dist/nodes/shapes/star.cjs.map +1 -0
- package/dist/nodes/shapes/star.d.ts +2 -0
- package/dist/nodes/shapes/star.js +49 -0
- package/dist/nodes/shapes/star.js.map +1 -0
- package/dist/nodes/shapes/trapezoid.cjs +44 -0
- package/dist/nodes/shapes/trapezoid.cjs.map +1 -0
- package/dist/nodes/shapes/trapezoid.d.ts +5 -0
- package/dist/nodes/shapes/trapezoid.js +42 -0
- package/dist/nodes/shapes/trapezoid.js.map +1 -0
- package/dist/nodes/shapes/triangle.cjs +42 -0
- package/dist/nodes/shapes/triangle.cjs.map +1 -0
- package/dist/nodes/shapes/triangle.d.ts +5 -0
- package/dist/nodes/shapes/triangle.js +40 -0
- package/dist/nodes/shapes/triangle.js.map +1 -0
- package/dist/types/index.d.ts +213 -0
- package/dist/utils/configMerger.cjs +147 -0
- package/dist/utils/configMerger.cjs.map +1 -0
- package/dist/utils/configMerger.d.ts +2 -0
- package/dist/utils/configMerger.js +145 -0
- package/dist/utils/configMerger.js.map +1 -0
- package/dist/utils/helpers.cjs +21 -0
- package/dist/utils/helpers.cjs.map +1 -0
- package/dist/utils/helpers.d.ts +13 -0
- package/dist/utils/helpers.js +18 -0
- package/dist/utils/helpers.js.map +1 -0
- package/dist/zenode.cjs.js +1228 -0
- package/dist/zenode.cjs.js.map +1 -0
- package/dist/zenode.esm.js +1203 -0
- package/dist/zenode.esm.js.map +1 -0
- package/dist/zenode.umd.js +1232 -0
- package/dist/zenode.umd.js.map +1 -0
- package/package.json +60 -0
package/APIs.md
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# Zenode Engine Public API Reference
|
|
2
|
+
|
|
3
|
+
The Zenode Engine is a high-performance, D3.js-powered diagramming library. This reference documents the Layer 1 (Core) APIs available for node management, viewport control, and JSON-based persistence.
|
|
4
|
+
|
|
5
|
+
## 1. Core Lifecycle & Configuration
|
|
6
|
+
|
|
7
|
+
| API | Description | Usage Example |
|
|
8
|
+
|---|---|---|
|
|
9
|
+
| `initializeCanvas(selector, config)` | Starts the engine in the target DOM element. | `Zenode.initializeCanvas('#canvas', { ... })` |
|
|
10
|
+
| `updateConfig(config)` | Dynamically updates engine settings. | `Zenode.updateConfig({ grid: { visible: false } })` |
|
|
11
|
+
| `resizeCanvas(w, h)` | Updates canvas dimensions (e.g., on window resize). | `Zenode.resizeCanvas(window.innerWidth, 600)` |
|
|
12
|
+
| `clear()` | Wipes all nodes and edges from the workspace. | `Zenode.clear()` |
|
|
13
|
+
| `getDiagramState()` | Returns a JSON snapshot of nodes, edges, and viewport. | `const state = Zenode.getDiagramState()` |
|
|
14
|
+
|
|
15
|
+
## 2. Node & Edge Management
|
|
16
|
+
|
|
17
|
+
| API | Description | Usage Example |
|
|
18
|
+
|---|---|---|
|
|
19
|
+
| `addNode(config)` | Adds a node. Returns the generated or provided ID. | `const id = Zenode.addNode({ type: 'rectangle', x: 50, y: 50 })` |
|
|
20
|
+
| `removeNode(id)` | Deletes a node and its connections. | `Zenode.removeNode('n1')` |
|
|
21
|
+
| `updateNode(id, patch)` | Updates node data (position, meta). | `Zenode.updateNode('n1', { x: 200 })` |
|
|
22
|
+
| `addEdge(config)` | Creates a connection. Supports `type` override. | `Zenode.addEdge({ sourceNodeId: 'n1', targetNodeId: 'n2', type: 's-shaped' })` |
|
|
23
|
+
| `duplicateNode(id)` | Clones a node and its content. | `Zenode.duplicateNode('n1')` |
|
|
24
|
+
| `focusNode(id, opts?)` | Animates the viewport to focus on a node. | `Zenode.focusNode('n1', { zoom: 1.5, duration: 500 })` |
|
|
25
|
+
| `groupSelection()` | Encapsulates the current selection within a visual group boundary. | `Zenode.groupSelection()` |
|
|
26
|
+
| `ungroupSelection()` | Break apart active selection or selected group. | `Zenode.ungroupSelection()` |
|
|
27
|
+
| `toggleGroupingSelection()` | Smart toggle: groups selected nodes, or ungroups if exactly matching an existing group. | `Zenode.toggleGroupingSelection()` |
|
|
28
|
+
| `getVisualGroups()` | Returns array of all active visual groups. | `const groups = Zenode.getVisualGroups()` |
|
|
29
|
+
| `removeVisualGroup(id)` | Deletes a group boundary (without deleting the member nodes). | `engine.removeVisualGroup('g1')` |
|
|
30
|
+
| `bringToFront(ids)` | Moves nodes to top layer. | `Zenode.bringToFront(['n1'])` |
|
|
31
|
+
| `sendToBack(ids)` | Moves nodes to bottom layer. | `Zenode.sendToBack(['n1'])` |
|
|
32
|
+
|
|
33
|
+
## 3. Data Serialization & Export
|
|
34
|
+
|
|
35
|
+
| API | Description | Usage Example |
|
|
36
|
+
|---|---|---|
|
|
37
|
+
| `validate()` | Runs structural validation (cycles, orphans). | `const result = Zenode.validate()` |
|
|
38
|
+
|
|
39
|
+
## 4. Visual Feedback & Status
|
|
40
|
+
|
|
41
|
+
| API | Description | Usage Example |
|
|
42
|
+
|---|---|---|
|
|
43
|
+
| `setNodeStatus(id, type)` | Triggers visual cues (`running`, `success`, `error`). | `engine.setNodeStatus('n1', 'error')` |
|
|
44
|
+
| `updateNodeContent(id, cnt)` | Sets text, icons, and layout for a node. | `Zenode.updateNodeContent('n1', { items: [...] })` |
|
|
45
|
+
| `highlight(id, opts?)` | Pulses a node with target behavior/color. | `engine.highlight('n1', { color: '#ff0000', duration: 3000 })` |
|
|
46
|
+
|
|
47
|
+
## 5. Placement & Interaction
|
|
48
|
+
|
|
49
|
+
| API | Description | Usage Example |
|
|
50
|
+
|---|---|---|
|
|
51
|
+
| `placeShapeAt(type, id, x, y)` | Immediately places a shape at exact canvas coordinates. | `engine.placeShapeAt('circle', 'c1', 100, 200)` |
|
|
52
|
+
| `placeShapeAtSafePos(type, id)` | Finds the nearest non-overlapping spot in viewport to place a shape. | `engine.placeShapeAtSafePos('rectangle', 'r1')` |
|
|
53
|
+
| `handleDrop(event)` | Native DND handler: parses drop data and places shape at mouse. | `container.ondrop = (e) => Zenode.handleDrop(e)` |
|
|
54
|
+
| `startPlacement(type, id, data?)` | Enters placement mode with a ghost preview. | `engine.startPlacement('rectangle', 'task0')` |
|
|
55
|
+
| `cancelPlacement()` | Aborts placement mode and removes preview. | `engine.cancelPlacement()` |
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
> [!TIP]
|
|
60
|
+
> **Deterministic IDs**: If you provide an `id` in `addNode(config)`, the engine will use it strictly. If not, it will return a UUID which you should store for future `updateNode` calls.
|
package/LICENSE
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
Zenode License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024 martinmanu
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted to use this software for personal and commercial purposes.
|
|
6
|
+
However, copying, modifying, distributing, or reverse-engineering this software
|
|
7
|
+
is strictly prohibited without prior written permission from the author.
|
|
8
|
+
|
|
9
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
10
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
11
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
12
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
# Zenode Designer
|
|
4
|
+
|
|
5
|
+
**A high-performance, D3.js-powered visual workflow canvas for JavaScript.**
|
|
6
|
+
Engineering-first · JSON-schema-driven · Framework-agnostic · Performance-tuned
|
|
7
|
+
|
|
8
|
+
[](https://www.npmjs.com/package/@zenode/designer)
|
|
9
|
+
[](LICENSE)
|
|
10
|
+
[](https://github.com/martinmanu/Zenode/stargazers)
|
|
11
|
+
[](https://www.typescriptlang.org/)
|
|
12
|
+
[](https://d3js.org/)
|
|
13
|
+
|
|
14
|
+
</div>
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
> **`@zenode/designer`** is Layer 1 of the Zenode ecosystem — the visual canvas that powers everything. Drop it into any JavaScript project (React, Vue, Svelte, or vanilla) and get a production-grade diagramming engine with zero lock-in.
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Demo
|
|
23
|
+
|
|
24
|
+
<div align="center">
|
|
25
|
+
<video src="assets/demo.mp4" width="100%" autoplay loop muted playsinline></video>
|
|
26
|
+
</div>
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Key Capabilities
|
|
31
|
+
|
|
32
|
+
* **D3-Native Performance**: Leverages the power of D3.js for fine-grained SVG control, ensuring thousands of nodes run smoothly at 60fps.
|
|
33
|
+
* **Infinite Canvas**: A truly unrestricted panning and zooming environment with a synced SVG pattern grid.
|
|
34
|
+
* **Generic History Engine**: Robust undo/redo system based on the Command pattern, capturing full state snapshots for perfect restoration.
|
|
35
|
+
* **Smart Selection**: Integrated single-select, lasso multi-select, and renderer-aware selection overlays.
|
|
36
|
+
* **Extensible Context Pad**: A floating HTML action bar that follows your selection, fully customizable via a simple registration API.
|
|
37
|
+
* **Visual Grouping**: Encapsulate multiple nodes within collective boundaries with synced movement and ghost previews.
|
|
38
|
+
* **Visual Effects Suite**: Built-in support for status glows, stroke-flow animations, and progress gradients.
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## The Zenode Ecosystem
|
|
43
|
+
|
|
44
|
+
Zenode is built as a modular four-layer system. You can adopt one package for a specific need or use the entire stack for a complete workflow solution.
|
|
45
|
+
|
|
46
|
+
| Layer | Package | Role |
|
|
47
|
+
|---|---|---|
|
|
48
|
+
| **Layer 1** | `@zenode/designer` | **Visual Canvas**: Shapes, connections, and user interaction (This Package). |
|
|
49
|
+
| **Layer 2** | `@zenode/serializer` | **Data Exchange**: High-fidelity export/import (JSON, BPMN 2.0, Mermaid). |
|
|
50
|
+
| **Layer 3** | `@zenode/runtime` | **Execution**: Converts diagrams into executable JavaScript workflows. |
|
|
51
|
+
| **Layer 4** | `@zenode/transformer` | **Output Shaping**: User-defined data mapping from execution results. |
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## Quick Start
|
|
56
|
+
|
|
57
|
+
### Installation
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
npm install @zenode/designer
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### Initialization
|
|
64
|
+
|
|
65
|
+
```html
|
|
66
|
+
<div id="canvasContainer" style="width: 100vw; height: 100vh;"></div>
|
|
67
|
+
|
|
68
|
+
<script type="module">
|
|
69
|
+
import * as Zenode from '@zenode/designer';
|
|
70
|
+
|
|
71
|
+
// Initialize with optional configuration
|
|
72
|
+
const engine = Zenode.initializeCanvas('#canvasContainer', {
|
|
73
|
+
canvas: { backgroundColor: '#f8fafc' },
|
|
74
|
+
canvasProperties: {
|
|
75
|
+
snapToGrid: true,
|
|
76
|
+
zoomEnabled: true
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
// Create shapes programmatically
|
|
81
|
+
Zenode.createShape('rectangle', 'start-node');
|
|
82
|
+
</script>
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
## Core Architecture
|
|
88
|
+
|
|
89
|
+
### The ShapeRenderer Contract
|
|
90
|
+
|
|
91
|
+
Zenode uses a unique renderer contract. Every shape — whether built-in or custom — must implement this interface. This ensures that features like selection rings, ports, and alignment guides work perfectly across any geometry.
|
|
92
|
+
|
|
93
|
+
```typescript
|
|
94
|
+
export interface ShapeRenderer {
|
|
95
|
+
draw: (g: D3Selection, config: ResolvedShapeConfig) => void;
|
|
96
|
+
getPath: (config: ResolvedShapeConfig) => string; // Exact SVG path data
|
|
97
|
+
getBounds: (config: ResolvedShapeConfig) => BoundingBox; // Collision/Selection box
|
|
98
|
+
getPorts: (config: ResolvedShapeConfig) => PortMap; // Connection anchors
|
|
99
|
+
}
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### D3 Layer Stack
|
|
103
|
+
|
|
104
|
+
Layers are strictly ordered to ensure predictable depth management and event bubbling:
|
|
105
|
+
|
|
106
|
+
1. `g.grid` — The infinite background pattern.
|
|
107
|
+
2. `g.connections` — The link/edge layer.
|
|
108
|
+
3. `g.placed-nodes` — The primary interactive shapes.
|
|
109
|
+
4. `g.preview` — Ghost previews (pointer-events: none).
|
|
110
|
+
5. `g.guides` — Alignment assistants.
|
|
111
|
+
6. `g.lasso` — Box selection overlay.
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## Roadmap
|
|
116
|
+
|
|
117
|
+
| Component | Status | Progress |
|
|
118
|
+
|---|---|---|
|
|
119
|
+
| **Core Interaction** | ✅ | Drag, Snap, Lasso, Zoom/Pan complete |
|
|
120
|
+
| **Connection Engine** | ✅ | Straight, Curved, S-Shape, L-Bent routing |
|
|
121
|
+
| **History System** | ✅ | Full Undo/Redo command pattern |
|
|
122
|
+
| **Context Pad** | ✅ | Floating actions & Plugin API |
|
|
123
|
+
| **Visual Grouping** | ✅ | Boundary containers & collective movement |
|
|
124
|
+
| **BPMN Parity** | 🔨 | Resize handles & lane support in progress |
|
|
125
|
+
| **Serialization** | ✅ | Mermaid, XML, DOT & JSON support |
|
|
126
|
+
| **Properties** | 🔨 | Schema-driven node panels (Layer 1) |
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## Why Zenode?
|
|
131
|
+
|
|
132
|
+
| Feature | React Flow | BPMN.js | **Zenode** |
|
|
133
|
+
|---|---|---|---|
|
|
134
|
+
| **Agnostic** | ❌ (React only) | ✅ | ✅ (Any Framework) |
|
|
135
|
+
| **SVG Control** | Limited | High | **Absolute** |
|
|
136
|
+
| **Visual Effects** | Manual | CSS only | **Built-in (Glow/Animate)** |
|
|
137
|
+
| **Execution** | ❌ | ❌ | ✅ (via Layer 3) |
|
|
138
|
+
| **Plugin-first** | ⚠️ | ❌ | ✅ |
|
|
139
|
+
|
|
140
|
+
## 🛠 API Reference
|
|
141
|
+
|
|
142
|
+
<details>
|
|
143
|
+
<summary><b>View Complete Engine API (Expand)</b></summary>
|
|
144
|
+
<br>
|
|
145
|
+
|
|
146
|
+
The Zenode Engine is a high-performance, D3.js-powered diagramming library. This reference documented the Layer 1 (Core) APIs available for node management, viewport control, and data serialization.
|
|
147
|
+
|
|
148
|
+
### 1. Core Lifecycle & Configuration
|
|
149
|
+
| API | Description | Usage Example |
|
|
150
|
+
|---|---|---|
|
|
151
|
+
| `initializeCanvas(selector, config)` | Starts the engine in the target DOM element. | `Zenode.initializeCanvas('#canvas', { ... })` |
|
|
152
|
+
| `updateConfig(config)` | Dynamically updates engine settings. | `Zenode.updateConfig({ grid: { visible: false } })` |
|
|
153
|
+
| `getDiagramState()` | Returns a JSON snapshot of nodes, edges, and viewport. | `const state = Zenode.getDiagramState()` |
|
|
154
|
+
| `clear()` | Wipes all nodes and edges from the workspace. | `Zenode.clear()` |
|
|
155
|
+
| `reset()` | Clears everything and resets zoom/pan to defaults. | `Zenode.reset()` |
|
|
156
|
+
| `zoomTo(scale, ms?)` | Sets absolute zoom level (e.g. 1.0 = 100%). | `engine.zoomTo(0.8)` |
|
|
157
|
+
| `panTo(x, y, ms?)` | Centers the view on a specific coordinate. | `engine.panTo(200, 300)` |
|
|
158
|
+
| `fitToScreen(ms?)` | Autcalculated zoom/pan to show all objects. | `engine.fitToScreen(800)` |
|
|
159
|
+
|
|
160
|
+
### 2. Node & Edge Management
|
|
161
|
+
| API | Description | Usage Example |
|
|
162
|
+
|---|---|---|
|
|
163
|
+
| `addNode(config)` | Adds a node. Returns the generated or provided ID. | `const id = Zenode.addNode({ type: 'rectangle', ... })` |
|
|
164
|
+
| `removeNode(id)` | Deletes a node and its connections. | `Zenode.removeNode('n1')` |
|
|
165
|
+
| `updateNode(id, patch)` | Updates node data (position, meta). | `Zenode.updateNode('n1', { x: 200 })` |
|
|
166
|
+
| `addEdge(config)` | Creates a connection. Supports `type` override. | `Zenode.addEdge({ ..., type: 's-shaped' })` |
|
|
167
|
+
| `duplicateNode(id)` | Clones a node and its content. | `const newId = Zenode.duplicateNode('n1')` |
|
|
168
|
+
| `focusNode(id, opts?)` | Animates the viewport to focus on a node. | `Zenode.focusNode('n1', { zoom: 1.5 })` |
|
|
169
|
+
| `groupSelection()` | Encapsulates the current selection within a visual group. | `Zenode.groupSelection()` |
|
|
170
|
+
| `ungroupSelection()` | Break apart active selection or selected group. | `Zenode.ungroupSelection()` |
|
|
171
|
+
| `toggleGroupingSelection()`| Smart toggle grouping logic. | `Zenode.toggleGroupingSelection()` |
|
|
172
|
+
| `getVisualGroups()` | Returns array of all active visual groups. | `Zenode.getVisualGroups()` |
|
|
173
|
+
|
|
174
|
+
### 3. Data Serialization & Export
|
|
175
|
+
| API | Description | Usage Example |
|
|
176
|
+
|---|---|---|
|
|
177
|
+
| `toXML()` | Exports current state as a Zenode XML string. | `const xml = Zenode.toXML()` |
|
|
178
|
+
| `fromXML(xmlString)` | Restores the canvas from a Zenode XML string. | `Zenode.fromXML(myXml)` |
|
|
179
|
+
| `toMermaid()` | Generates a Mermaid.js flowchart script. | `console.log(Zenode.toMermaid())` |
|
|
180
|
+
| `toDOT()` | Generates a Graphviz/DOT language script. | `const dot = Zenode.toDOT()` |
|
|
181
|
+
| `validate()` | Runs structural validation (cycles, orphans). | `const result = Zenode.validate()` |
|
|
182
|
+
|
|
183
|
+
### 4. Visual Feedback & Status
|
|
184
|
+
| API | Description | Usage Example |
|
|
185
|
+
|---|---|---|
|
|
186
|
+
| `setNodeStatus(id, type)` | Triggers visual cues (`running`, `success`, `error`). | `engine.setNodeStatus('n1', 'error')` |
|
|
187
|
+
| `updateNodeContent(id, cnt)` | Sets text, icons, and layout for a node. | `Zenode.updateNodeContent('n1', { items: [...] })` |
|
|
188
|
+
| `highlight(id, opts?)` | Pulses a node with target behavior/color. | `engine.highlight('n1', { color: '#ff0000', duration: 3000 })` |
|
|
189
|
+
|
|
190
|
+
### 5. Placement & Interaction
|
|
191
|
+
| API | Description | Usage Example |
|
|
192
|
+
|---|---|---|
|
|
193
|
+
| `startPlacement(type, id, data?)` | Enters placement mode with a ghost preview FOLLOWING the mouse. | `engine.startPlacement('rectangle', 'task0')` |
|
|
194
|
+
| `updatePlacementPreview(e \| p)` | Manually updates the ghost preview's position (e.g. from DND `dragover`). | `engine.updatePlacementPreview(event)` |
|
|
195
|
+
| `completePlacement(e \| p?)` | Adds the node and exits placement mode. | `engine.completePlacement(event)` |
|
|
196
|
+
| `cancelPlacement()` | Aborts placement mode and removes preview (also mapped to `Escape`). | `engine.cancelPlacement()` |
|
|
197
|
+
| `placeShapeAt(type, id, x, y)` | Immediately places a shape at exact canvas coordinates. | `engine.placeShapeAt('circle', 'c1', 100, 200)` |
|
|
198
|
+
| `placeShapeAtSafePos(type, id)` | Finds the nearest non-overlapping spot in viewport to place a shape. | `engine.placeShapeAtSafePos('rectangle', 'r1')` |
|
|
199
|
+
| `handleDrop(event)` | Native DND handler: parses drop data and places shape at mouse. | `container.ondrop = (e) => Zenode.handleDrop(e)` |
|
|
200
|
+
|
|
201
|
+
> [!TIP]
|
|
202
|
+
> **Deterministic IDs**: If you provide an `id` in `addNode(config)`, the engine will use it strictly. If not, it will return a UUID which you should captured for future calls.
|
|
203
|
+
|
|
204
|
+
</details>
|
|
205
|
+
|
|
206
|
+
---
|
|
207
|
+
|
|
208
|
+
## 🌟 Support Zenode
|
|
209
|
+
|
|
210
|
+
If you find this project useful, **please consider [leaving a Star](https://github.com/martinmanu/Zenode/stargazers) on [<u>GitHub!</u>](https://github.com/martinmanu/Zenode) ⭐** It helps the project grow and motivates further development of the execution runtime.
|
|
211
|
+
|
|
212
|
+
---
|
|
213
|
+
|
|
214
|
+
<div align="center">
|
|
215
|
+
|
|
216
|
+
**Built with D3.js · TypeScript .**
|
|
217
|
+
[<u>GitHub</u>](https://github.com/martinmanu/Zenode)
|
|
218
|
+
|
|
219
|
+
</div>
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var defaultConfig = require('../../config/defaultConfig.cjs');
|
|
4
|
+
var d3 = require('d3');
|
|
5
|
+
|
|
6
|
+
function _interopNamespaceDefault(e) {
|
|
7
|
+
var n = Object.create(null);
|
|
8
|
+
if (e) {
|
|
9
|
+
Object.keys(e).forEach(function (k) {
|
|
10
|
+
if (k !== 'default') {
|
|
11
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
12
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function () { return e[k]; }
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
n.default = e;
|
|
20
|
+
return Object.freeze(n);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
var d3__namespace = /*#__PURE__*/_interopNamespaceDefault(d3);
|
|
24
|
+
|
|
25
|
+
// src/components/canvas/drawCanvas.ts
|
|
26
|
+
function drawCanvas(containerSelector, canvasConfig) {
|
|
27
|
+
const container = d3__namespace.select(containerSelector);
|
|
28
|
+
if (container.empty()) {
|
|
29
|
+
throw new Error(`Container '${containerSelector}' not found in DOM.`);
|
|
30
|
+
}
|
|
31
|
+
let canvasClasses = (canvasConfig === null || canvasConfig === void 0 ? void 0 : canvasConfig.canvasClasses) || defaultConfig.defaultConfig.canvas.canvasClasses;
|
|
32
|
+
(canvasConfig === null || canvasConfig === void 0 ? void 0 : canvasConfig.width) || defaultConfig.defaultConfig.canvas.width;
|
|
33
|
+
(canvasConfig === null || canvasConfig === void 0 ? void 0 : canvasConfig.height) || defaultConfig.defaultConfig.canvas.height;
|
|
34
|
+
const backgroundColor = (canvasConfig === null || canvasConfig === void 0 ? void 0 : canvasConfig.backgroundColor) || defaultConfig.defaultConfig.canvas.backgroundColor;
|
|
35
|
+
const svg = container
|
|
36
|
+
.append("svg")
|
|
37
|
+
.attr("width", "100%")
|
|
38
|
+
.attr("height", "100%")
|
|
39
|
+
.attr("class", canvasClasses.join(" "))
|
|
40
|
+
.style("background-color", backgroundColor)
|
|
41
|
+
.style("display", "block")
|
|
42
|
+
.attr("preserveAspectRatio", "xMidYMid meet");
|
|
43
|
+
const gridLayout = svg.append("g").attr("class", "grid");
|
|
44
|
+
const canvasContainerGroup = svg
|
|
45
|
+
.append("g")
|
|
46
|
+
.attr("class", "canvas-container");
|
|
47
|
+
const elementsGroup = canvasContainerGroup
|
|
48
|
+
.append("g")
|
|
49
|
+
.attr("class", "elements-group");
|
|
50
|
+
const visualGroupsGroup = canvasContainerGroup
|
|
51
|
+
.insert("g", ".elements-group")
|
|
52
|
+
.attr("class", "visual-groups");
|
|
53
|
+
const connectionsGroup = canvasContainerGroup
|
|
54
|
+
.insert("g", ".elements-group")
|
|
55
|
+
.attr("class", "connections");
|
|
56
|
+
const placedNodesGroup = canvasContainerGroup
|
|
57
|
+
.insert("g", ".elements-group")
|
|
58
|
+
.attr("class", "placed-nodes");
|
|
59
|
+
const ghostConnectionGroup = canvasContainerGroup
|
|
60
|
+
.insert("g", ".elements-group")
|
|
61
|
+
.attr("class", "ghost-connection")
|
|
62
|
+
.style("pointer-events", "none");
|
|
63
|
+
const ghostsGroup = canvasContainerGroup
|
|
64
|
+
.insert("g", ".elements-group")
|
|
65
|
+
.attr("class", "ghosts")
|
|
66
|
+
.style("pointer-events", "none");
|
|
67
|
+
const guidesGroup = canvasContainerGroup
|
|
68
|
+
.append("g")
|
|
69
|
+
.attr("class", "guides")
|
|
70
|
+
.style("pointer-events", "none");
|
|
71
|
+
const lassoGroup = canvasContainerGroup
|
|
72
|
+
.append("g")
|
|
73
|
+
.attr("class", "lasso")
|
|
74
|
+
.style("pointer-events", "none");
|
|
75
|
+
elementsGroup.style("pointer-events", "none");
|
|
76
|
+
return {
|
|
77
|
+
grid: gridLayout,
|
|
78
|
+
elements: elementsGroup,
|
|
79
|
+
svg: svg,
|
|
80
|
+
canvasContainer: canvasContainerGroup,
|
|
81
|
+
connections: connectionsGroup,
|
|
82
|
+
visualGroups: visualGroupsGroup,
|
|
83
|
+
ghostConnection: ghostConnectionGroup,
|
|
84
|
+
ghosts: ghostsGroup,
|
|
85
|
+
placedNodes: placedNodesGroup,
|
|
86
|
+
guides: guidesGroup,
|
|
87
|
+
lasso: lassoGroup,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
function lockedCanvas(locked, svg, zoomBehaviour) {
|
|
91
|
+
if (locked) {
|
|
92
|
+
svg.on(".zoom", null); // Disable zoom and pan
|
|
93
|
+
svg.style("cursor", "default");
|
|
94
|
+
d3__namespace.selectAll(".shape, .connection").style("pointer-events", "none");
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
svg.call(zoomBehaviour); // Enable zoom and pan
|
|
98
|
+
svg.style("cursor", "grab");
|
|
99
|
+
d3__namespace.selectAll(".shape, .connection").style("pointer-events", "all");
|
|
100
|
+
}
|
|
101
|
+
console.log(`Canvas ${locked ? "locked (Preview Mode)" : "unlocked (Edit Mode)"}`);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
exports.drawCanvas = drawCanvas;
|
|
105
|
+
exports.lockedCanvas = lockedCanvas;
|
|
106
|
+
//# sourceMappingURL=canvas.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvas.cjs","sources":["../../../src/components/canvas/canvas.ts"],"sourcesContent":[null],"names":["d3","defaultConfig"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAKgB,SAAA,UAAU,CACxB,iBAAyB,EACzB,YAAoB,EAAA;IAcpB,MAAM,SAAS,GAAGA,aAAE,CAAC,MAAM,CAAC,iBAAiB,CAAC;AAC9C,IAAA,IAAI,SAAS,CAAC,KAAK,EAAE,EAAE;AACrB,QAAA,MAAM,IAAI,KAAK,CAAC,cAAc,iBAAiB,CAAA,mBAAA,CAAqB,CAAC;;AAEvE,IAAA,IAAI,aAAa,GAAG,CAAA,YAAY,KAAA,IAAA,IAAZ,YAAY,KAAZ,MAAA,GAAA,MAAA,GAAA,YAAY,CAAE,aAAa,KAAIC,2BAAa,CAAC,MAAM,CAAC,aAAa;AACrF,IAAc,CAAA,YAAY,KAAA,IAAA,IAAZ,YAAY,KAAZ,MAAA,GAAA,MAAA,GAAA,YAAY,CAAE,KAAK,KAAIA,2BAAa,CAAC,MAAM,CAAC;AAC1D,IAAe,CAAA,YAAY,KAAA,IAAA,IAAZ,YAAY,KAAZ,MAAA,GAAA,MAAA,GAAA,YAAY,CAAE,MAAM,KAAIA,2BAAa,CAAC,MAAM,CAAC;AAC5D,IAAA,MAAM,eAAe,GAAG,CAAA,YAAY,KAAA,IAAA,IAAZ,YAAY,KAAZ,MAAA,GAAA,MAAA,GAAA,YAAY,CAAE,eAAe,KAAIA,2BAAa,CAAC,MAAM,CAAC,eAAe;IAC7F,MAAM,GAAG,GAAG;SACT,MAAM,CAAC,KAAK;AACZ,SAAA,IAAI,CAAC,OAAO,EAAE,MAAM;AACpB,SAAA,IAAI,CAAC,QAAQ,EAAE,MAAM;SACrB,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC;AACrC,SAAA,KAAK,CAAC,kBAAkB,EAAE,eAAe;AACzC,SAAA,KAAK,CAAC,SAAS,EAAE,OAAO;AACxB,SAAA,IAAI,CAAC,qBAAqB,EAAE,eAAe,CAAC;AAC/C,IAAA,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC;IACxD,MAAM,oBAAoB,GAAG;SAC1B,MAAM,CAAC,GAAG;AACV,SAAA,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC;IACpC,MAAM,aAAa,GAAG;SACnB,MAAM,CAAC,GAAG;AACV,SAAA,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC;IAClC,MAAM,iBAAiB,GAAG;AACvB,SAAA,MAAM,CAAC,GAAG,EAAE,iBAAiB;AAC7B,SAAA,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC;IACjC,MAAM,gBAAgB,GAAG;AACtB,SAAA,MAAM,CAAC,GAAG,EAAE,iBAAiB;AAC7B,SAAA,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC;IAC/B,MAAM,gBAAgB,GAAG;AACtB,SAAA,MAAM,CAAC,GAAG,EAAE,iBAAiB;AAC7B,SAAA,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC;IAChC,MAAM,oBAAoB,GAAG;AAC1B,SAAA,MAAM,CAAC,GAAG,EAAE,iBAAiB;AAC7B,SAAA,IAAI,CAAC,OAAO,EAAE,kBAAkB;AAChC,SAAA,KAAK,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAElC,MAAM,WAAW,GAAG;AACjB,SAAA,MAAM,CAAC,GAAG,EAAE,iBAAiB;AAC7B,SAAA,IAAI,CAAC,OAAO,EAAE,QAAQ;AACtB,SAAA,KAAK,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAElC,MAAM,WAAW,GAAG;SACjB,MAAM,CAAC,GAAG;AACV,SAAA,IAAI,CAAC,OAAO,EAAE,QAAQ;AACtB,SAAA,KAAK,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAElC,MAAM,UAAU,GAAG;SAChB,MAAM,CAAC,GAAG;AACV,SAAA,IAAI,CAAC,OAAO,EAAE,OAAO;AACrB,SAAA,KAAK,CAAC,gBAAgB,EAAE,MAAM,CAAC;AAElC,IAAA,aAAa,CAAC,KAAK,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAE7C,OAAO;AACL,QAAA,IAAI,EAAE,UAAU;AAChB,QAAA,QAAQ,EAAE,aAAa;AACvB,QAAA,GAAG,EAAE,GAAG;AACR,QAAA,eAAe,EAAE,oBAAoB;AACrC,QAAA,WAAW,EAAE,gBAAgB;AAC7B,QAAA,YAAY,EAAE,iBAAiB;AAC/B,QAAA,eAAe,EAAE,oBAAoB;AACrC,QAAA,MAAM,EAAE,WAAW;AACnB,QAAA,WAAW,EAAE,gBAAgB;AAC7B,QAAA,MAAM,EAAE,WAAW;AACnB,QAAA,KAAK,EAAE,UAAU;KAClB;AACH;SAEgB,YAAY,CAAC,MAAe,EAAG,GAAQ,EAAE,aAAkB,EAAA;IAEzE,IAAI,MAAM,EAAE;QACV,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACtB,QAAA,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC;AAC9B,QAAAD,aAAE,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC,KAAK,CAAC,gBAAgB,EAAE,MAAM,CAAC;;SAC9D;AACL,QAAA,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACxB,QAAA,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC;AAC3B,QAAAA,aAAE,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC;;AAGpE,IAAA,OAAO,CAAC,GAAG,CAAC,CAAA,OAAA,EAAU,MAAM,GAAG,uBAAuB,GAAG,sBAAsB,CAAA,CAAE,CAAC;AACpF;;;;;"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Canvas } from "../../model/configurationModel.js";
|
|
2
|
+
export declare function drawCanvas(containerSelector: string, canvasConfig: Canvas): {
|
|
3
|
+
svg: any;
|
|
4
|
+
grid: any;
|
|
5
|
+
elements: any;
|
|
6
|
+
canvasContainer: any;
|
|
7
|
+
connections: any;
|
|
8
|
+
ghostConnection: any;
|
|
9
|
+
placedNodes: any;
|
|
10
|
+
visualGroups: any;
|
|
11
|
+
guides: any;
|
|
12
|
+
ghosts: any;
|
|
13
|
+
lasso: any;
|
|
14
|
+
};
|
|
15
|
+
export declare function lockedCanvas(locked: boolean, svg: any, zoomBehaviour: any): void;
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { defaultConfig } from '../../config/defaultConfig.js';
|
|
2
|
+
import * as d3 from 'd3';
|
|
3
|
+
|
|
4
|
+
// src/components/canvas/drawCanvas.ts
|
|
5
|
+
function drawCanvas(containerSelector, canvasConfig) {
|
|
6
|
+
const container = d3.select(containerSelector);
|
|
7
|
+
if (container.empty()) {
|
|
8
|
+
throw new Error(`Container '${containerSelector}' not found in DOM.`);
|
|
9
|
+
}
|
|
10
|
+
let canvasClasses = (canvasConfig === null || canvasConfig === void 0 ? void 0 : canvasConfig.canvasClasses) || defaultConfig.canvas.canvasClasses;
|
|
11
|
+
(canvasConfig === null || canvasConfig === void 0 ? void 0 : canvasConfig.width) || defaultConfig.canvas.width;
|
|
12
|
+
(canvasConfig === null || canvasConfig === void 0 ? void 0 : canvasConfig.height) || defaultConfig.canvas.height;
|
|
13
|
+
const backgroundColor = (canvasConfig === null || canvasConfig === void 0 ? void 0 : canvasConfig.backgroundColor) || defaultConfig.canvas.backgroundColor;
|
|
14
|
+
const svg = container
|
|
15
|
+
.append("svg")
|
|
16
|
+
.attr("width", "100%")
|
|
17
|
+
.attr("height", "100%")
|
|
18
|
+
.attr("class", canvasClasses.join(" "))
|
|
19
|
+
.style("background-color", backgroundColor)
|
|
20
|
+
.style("display", "block")
|
|
21
|
+
.attr("preserveAspectRatio", "xMidYMid meet");
|
|
22
|
+
const gridLayout = svg.append("g").attr("class", "grid");
|
|
23
|
+
const canvasContainerGroup = svg
|
|
24
|
+
.append("g")
|
|
25
|
+
.attr("class", "canvas-container");
|
|
26
|
+
const elementsGroup = canvasContainerGroup
|
|
27
|
+
.append("g")
|
|
28
|
+
.attr("class", "elements-group");
|
|
29
|
+
const visualGroupsGroup = canvasContainerGroup
|
|
30
|
+
.insert("g", ".elements-group")
|
|
31
|
+
.attr("class", "visual-groups");
|
|
32
|
+
const connectionsGroup = canvasContainerGroup
|
|
33
|
+
.insert("g", ".elements-group")
|
|
34
|
+
.attr("class", "connections");
|
|
35
|
+
const placedNodesGroup = canvasContainerGroup
|
|
36
|
+
.insert("g", ".elements-group")
|
|
37
|
+
.attr("class", "placed-nodes");
|
|
38
|
+
const ghostConnectionGroup = canvasContainerGroup
|
|
39
|
+
.insert("g", ".elements-group")
|
|
40
|
+
.attr("class", "ghost-connection")
|
|
41
|
+
.style("pointer-events", "none");
|
|
42
|
+
const ghostsGroup = canvasContainerGroup
|
|
43
|
+
.insert("g", ".elements-group")
|
|
44
|
+
.attr("class", "ghosts")
|
|
45
|
+
.style("pointer-events", "none");
|
|
46
|
+
const guidesGroup = canvasContainerGroup
|
|
47
|
+
.append("g")
|
|
48
|
+
.attr("class", "guides")
|
|
49
|
+
.style("pointer-events", "none");
|
|
50
|
+
const lassoGroup = canvasContainerGroup
|
|
51
|
+
.append("g")
|
|
52
|
+
.attr("class", "lasso")
|
|
53
|
+
.style("pointer-events", "none");
|
|
54
|
+
elementsGroup.style("pointer-events", "none");
|
|
55
|
+
return {
|
|
56
|
+
grid: gridLayout,
|
|
57
|
+
elements: elementsGroup,
|
|
58
|
+
svg: svg,
|
|
59
|
+
canvasContainer: canvasContainerGroup,
|
|
60
|
+
connections: connectionsGroup,
|
|
61
|
+
visualGroups: visualGroupsGroup,
|
|
62
|
+
ghostConnection: ghostConnectionGroup,
|
|
63
|
+
ghosts: ghostsGroup,
|
|
64
|
+
placedNodes: placedNodesGroup,
|
|
65
|
+
guides: guidesGroup,
|
|
66
|
+
lasso: lassoGroup,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
function lockedCanvas(locked, svg, zoomBehaviour) {
|
|
70
|
+
if (locked) {
|
|
71
|
+
svg.on(".zoom", null); // Disable zoom and pan
|
|
72
|
+
svg.style("cursor", "default");
|
|
73
|
+
d3.selectAll(".shape, .connection").style("pointer-events", "none");
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
svg.call(zoomBehaviour); // Enable zoom and pan
|
|
77
|
+
svg.style("cursor", "grab");
|
|
78
|
+
d3.selectAll(".shape, .connection").style("pointer-events", "all");
|
|
79
|
+
}
|
|
80
|
+
console.log(`Canvas ${locked ? "locked (Preview Mode)" : "unlocked (Edit Mode)"}`);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export { drawCanvas, lockedCanvas };
|
|
84
|
+
//# sourceMappingURL=canvas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvas.js","sources":["../../../src/components/canvas/canvas.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|