@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.
Files changed (529) hide show
  1. package/APIs.md +60 -0
  2. package/LICENSE +12 -0
  3. package/README.md +219 -0
  4. package/dist/components/canvas/canvas.cjs +106 -0
  5. package/dist/components/canvas/canvas.cjs.map +1 -0
  6. package/dist/components/canvas/canvas.d.ts +15 -0
  7. package/dist/components/canvas/canvas.js +84 -0
  8. package/dist/components/canvas/canvas.js.map +1 -0
  9. package/dist/components/canvas/grid.cjs +167 -0
  10. package/dist/components/canvas/grid.cjs.map +1 -0
  11. package/dist/components/canvas/grid.d.ts +5 -0
  12. package/dist/components/canvas/grid.js +144 -0
  13. package/dist/components/canvas/grid.js.map +1 -0
  14. package/dist/components/shapeTypes/circle.d.ts +2 -0
  15. package/dist/components/shapeTypes/rectangle.d.ts +4 -0
  16. package/dist/components/shapeTypes/rectangle.js +22 -0
  17. package/dist/components/shapeTypes/rectangle.js.map +1 -0
  18. package/dist/components/shapeTypes/rhombus.d.ts +1 -0
  19. package/dist/config/defaultConfig.cjs +542 -0
  20. package/dist/config/defaultConfig.cjs.map +1 -0
  21. package/dist/config/defaultConfig.d.ts +2 -0
  22. package/dist/config/defaultConfig.js +540 -0
  23. package/dist/config/defaultConfig.js.map +1 -0
  24. package/dist/config/testConfig.cjs +553 -0
  25. package/dist/config/testConfig.cjs.map +1 -0
  26. package/dist/config/testConfig.d.ts +2 -0
  27. package/dist/config/testConfig.js +551 -0
  28. package/dist/config/testConfig.js.map +1 -0
  29. package/dist/config/testConfig1.d.ts +2 -0
  30. package/dist/config/testXML.cjs +17 -0
  31. package/dist/config/testXML.cjs.map +1 -0
  32. package/dist/config/testXML.d.ts +1 -0
  33. package/dist/config/testXML.js +15 -0
  34. package/dist/config/testXML.js.map +1 -0
  35. package/dist/connections/paths/curved.cjs +34 -0
  36. package/dist/connections/paths/curved.cjs.map +1 -0
  37. package/dist/connections/paths/curved.d.ts +2 -0
  38. package/dist/connections/paths/curved.js +32 -0
  39. package/dist/connections/paths/curved.js.map +1 -0
  40. package/dist/connections/paths/index.cjs +16 -0
  41. package/dist/connections/paths/index.cjs.map +1 -0
  42. package/dist/connections/paths/index.d.ts +12 -0
  43. package/dist/connections/paths/index.js +14 -0
  44. package/dist/connections/paths/index.js.map +1 -0
  45. package/dist/connections/paths/l-bent.cjs +59 -0
  46. package/dist/connections/paths/l-bent.cjs.map +1 -0
  47. package/dist/connections/paths/l-bent.d.ts +5 -0
  48. package/dist/connections/paths/l-bent.js +57 -0
  49. package/dist/connections/paths/l-bent.js.map +1 -0
  50. package/dist/connections/paths/s-shaped.cjs +24 -0
  51. package/dist/connections/paths/s-shaped.cjs.map +1 -0
  52. package/dist/connections/paths/s-shaped.d.ts +5 -0
  53. package/dist/connections/paths/s-shaped.js +22 -0
  54. package/dist/connections/paths/s-shaped.js.map +1 -0
  55. package/dist/connections/paths/straight.cjs +9 -0
  56. package/dist/connections/paths/straight.cjs.map +1 -0
  57. package/dist/connections/paths/straight.d.ts +2 -0
  58. package/dist/connections/paths/straight.js +7 -0
  59. package/dist/connections/paths/straight.js.map +1 -0
  60. package/dist/connections/render.cjs +382 -0
  61. package/dist/connections/render.cjs.map +1 -0
  62. package/dist/connections/render.d.ts +29 -0
  63. package/dist/connections/render.js +360 -0
  64. package/dist/connections/render.js.map +1 -0
  65. package/dist/connections/routing/index.d.ts +14 -0
  66. package/dist/connections/routing/smartRouter.cjs +26 -0
  67. package/dist/connections/routing/smartRouter.cjs.map +1 -0
  68. package/dist/connections/routing/smartRouter.d.ts +13 -0
  69. package/dist/connections/routing/smartRouter.js +24 -0
  70. package/dist/connections/routing/smartRouter.js.map +1 -0
  71. package/dist/contextpad/defaults.cjs +181 -0
  72. package/dist/contextpad/defaults.cjs.map +1 -0
  73. package/dist/contextpad/defaults.d.ts +2 -0
  74. package/dist/contextpad/defaults.js +179 -0
  75. package/dist/contextpad/defaults.js.map +1 -0
  76. package/dist/contextpad/registry.cjs +54 -0
  77. package/dist/contextpad/registry.cjs.map +1 -0
  78. package/dist/contextpad/registry.d.ts +21 -0
  79. package/dist/contextpad/registry.js +52 -0
  80. package/dist/contextpad/registry.js.map +1 -0
  81. package/dist/contextpad/renderer.cjs +347 -0
  82. package/dist/contextpad/renderer.cjs.map +1 -0
  83. package/dist/contextpad/renderer.d.ts +32 -0
  84. package/dist/contextpad/renderer.js +326 -0
  85. package/dist/contextpad/renderer.js.map +1 -0
  86. package/dist/core/engine.cjs +2254 -0
  87. package/dist/core/engine.cjs.map +1 -0
  88. package/dist/core/engine.d.ts +444 -0
  89. package/dist/core/engine.js +2233 -0
  90. package/dist/core/engine.js.map +1 -0
  91. package/dist/core/eventManager.cjs +29 -0
  92. package/dist/core/eventManager.cjs.map +1 -0
  93. package/dist/core/eventManager.d.ts +6 -0
  94. package/dist/core/eventManager.js +27 -0
  95. package/dist/core/eventManager.js.map +1 -0
  96. package/dist/core/history/command.cjs +182 -0
  97. package/dist/core/history/command.cjs.map +1 -0
  98. package/dist/core/history/command.d.ts +119 -0
  99. package/dist/core/history/command.js +171 -0
  100. package/dist/core/history/command.js.map +1 -0
  101. package/dist/core/history/undoManager.cjs +54 -0
  102. package/dist/core/history/undoManager.cjs.map +1 -0
  103. package/dist/core/history/undoManager.d.ts +18 -0
  104. package/dist/core/history/undoManager.js +52 -0
  105. package/dist/core/history/undoManager.js.map +1 -0
  106. package/dist/core/license.cjs +36 -0
  107. package/dist/core/license.cjs.map +1 -0
  108. package/dist/core/license.d.ts +16 -0
  109. package/dist/core/license.js +34 -0
  110. package/dist/core/license.js.map +1 -0
  111. package/dist/core/samples.cjs +68 -0
  112. package/dist/core/samples.cjs.map +1 -0
  113. package/dist/core/samples.d.ts +6 -0
  114. package/dist/core/samples.js +66 -0
  115. package/dist/core/samples.js.map +1 -0
  116. package/dist/core/serialization.cjs +123 -0
  117. package/dist/core/serialization.cjs.map +1 -0
  118. package/dist/core/serialization.d.ts +26 -0
  119. package/dist/core/serialization.js +121 -0
  120. package/dist/core/serialization.js.map +1 -0
  121. package/dist/core/validation.cjs +92 -0
  122. package/dist/core/validation.cjs.map +1 -0
  123. package/dist/core/validation.d.ts +24 -0
  124. package/dist/core/validation.js +89 -0
  125. package/dist/core/validation.js.map +1 -0
  126. package/dist/core/zoom&PanManager.d.ts +16 -0
  127. package/dist/core/zoom_PanManager.cjs +96 -0
  128. package/dist/core/zoom_PanManager.cjs.map +1 -0
  129. package/dist/core/zoom_PanManager.js +75 -0
  130. package/dist/core/zoom_PanManager.js.map +1 -0
  131. package/dist/effects/engine.cjs +203 -0
  132. package/dist/effects/engine.cjs.map +1 -0
  133. package/dist/effects/engine.d.ts +6 -0
  134. package/dist/effects/engine.js +182 -0
  135. package/dist/effects/engine.js.map +1 -0
  136. package/dist/events/drag.cjs +299 -0
  137. package/dist/events/drag.cjs.map +1 -0
  138. package/dist/events/drag.d.ts +19 -0
  139. package/dist/events/drag.js +278 -0
  140. package/dist/events/drag.js.map +1 -0
  141. package/dist/events/mouseClick.cjs +36 -0
  142. package/dist/events/mouseClick.cjs.map +1 -0
  143. package/dist/events/mouseClick.d.ts +26 -0
  144. package/dist/events/mouseClick.js +34 -0
  145. package/dist/events/mouseClick.js.map +1 -0
  146. package/dist/events/mouseMove.cjs +104 -0
  147. package/dist/events/mouseMove.cjs.map +1 -0
  148. package/dist/events/mouseMove.d.ts +11 -0
  149. package/dist/events/mouseMove.js +82 -0
  150. package/dist/events/mouseMove.js.map +1 -0
  151. package/dist/events/resize.cjs +98 -0
  152. package/dist/events/resize.cjs.map +1 -0
  153. package/dist/events/resize.d.ts +14 -0
  154. package/dist/events/resize.js +77 -0
  155. package/dist/events/resize.js.map +1 -0
  156. package/dist/examples/keyboard-shortcuts.d.ts +10 -0
  157. package/dist/icons.bundle.js +763 -0
  158. package/dist/icons.bundle.js.map +1 -0
  159. package/dist/icons.cjs +105 -0
  160. package/dist/icons.cjs.map +1 -0
  161. package/dist/icons.d.ts +7 -0
  162. package/dist/icons.js +89 -0
  163. package/dist/icons.js.map +1 -0
  164. package/dist/index.cjs +284 -0
  165. package/dist/index.cjs.map +1 -0
  166. package/dist/index.d.ts +160 -0
  167. package/dist/index.js +204 -0
  168. package/dist/index.js.map +1 -0
  169. package/dist/model/configurationModel.d.ts +280 -0
  170. package/dist/model/interface.d.ts +95 -0
  171. package/dist/model/shapeModel.d.ts +28 -0
  172. package/dist/node_modules/lucide/dist/esm/createElement.cjs +36 -0
  173. package/dist/node_modules/lucide/dist/esm/createElement.cjs.map +1 -0
  174. package/dist/node_modules/lucide/dist/esm/createElement.js +34 -0
  175. package/dist/node_modules/lucide/dist/esm/createElement.js.map +1 -0
  176. package/dist/node_modules/lucide/dist/esm/defaultAttributes.cjs +23 -0
  177. package/dist/node_modules/lucide/dist/esm/defaultAttributes.cjs.map +1 -0
  178. package/dist/node_modules/lucide/dist/esm/defaultAttributes.js +21 -0
  179. package/dist/node_modules/lucide/dist/esm/defaultAttributes.js.map +1 -0
  180. package/dist/node_modules/lucide/dist/esm/icons/arrow-down-right.cjs +16 -0
  181. package/dist/node_modules/lucide/dist/esm/icons/arrow-down-right.cjs.map +1 -0
  182. package/dist/node_modules/lucide/dist/esm/icons/arrow-down-right.js +14 -0
  183. package/dist/node_modules/lucide/dist/esm/icons/arrow-down-right.js.map +1 -0
  184. package/dist/node_modules/lucide/dist/esm/icons/arrow-right.cjs +16 -0
  185. package/dist/node_modules/lucide/dist/esm/icons/arrow-right.cjs.map +1 -0
  186. package/dist/node_modules/lucide/dist/esm/icons/arrow-right.js +14 -0
  187. package/dist/node_modules/lucide/dist/esm/icons/arrow-right.js.map +1 -0
  188. package/dist/node_modules/lucide/dist/esm/icons/arrow-up-right.cjs +16 -0
  189. package/dist/node_modules/lucide/dist/esm/icons/arrow-up-right.cjs.map +1 -0
  190. package/dist/node_modules/lucide/dist/esm/icons/arrow-up-right.js +14 -0
  191. package/dist/node_modules/lucide/dist/esm/icons/arrow-up-right.js.map +1 -0
  192. package/dist/node_modules/lucide/dist/esm/icons/box.cjs +22 -0
  193. package/dist/node_modules/lucide/dist/esm/icons/box.cjs.map +1 -0
  194. package/dist/node_modules/lucide/dist/esm/icons/box.js +20 -0
  195. package/dist/node_modules/lucide/dist/esm/icons/box.js.map +1 -0
  196. package/dist/node_modules/lucide/dist/esm/icons/chevron-down.cjs +13 -0
  197. package/dist/node_modules/lucide/dist/esm/icons/chevron-down.cjs.map +1 -0
  198. package/dist/node_modules/lucide/dist/esm/icons/chevron-down.js +11 -0
  199. package/dist/node_modules/lucide/dist/esm/icons/chevron-down.js.map +1 -0
  200. package/dist/node_modules/lucide/dist/esm/icons/chevron-right.cjs +13 -0
  201. package/dist/node_modules/lucide/dist/esm/icons/chevron-right.cjs.map +1 -0
  202. package/dist/node_modules/lucide/dist/esm/icons/chevron-right.js +11 -0
  203. package/dist/node_modules/lucide/dist/esm/icons/chevron-right.js.map +1 -0
  204. package/dist/node_modules/lucide/dist/esm/icons/circle-alert.cjs +17 -0
  205. package/dist/node_modules/lucide/dist/esm/icons/circle-alert.cjs.map +1 -0
  206. package/dist/node_modules/lucide/dist/esm/icons/circle-alert.js +15 -0
  207. package/dist/node_modules/lucide/dist/esm/icons/circle-alert.js.map +1 -0
  208. package/dist/node_modules/lucide/dist/esm/icons/circle-check-big.cjs +16 -0
  209. package/dist/node_modules/lucide/dist/esm/icons/circle-check-big.cjs.map +1 -0
  210. package/dist/node_modules/lucide/dist/esm/icons/circle-check-big.js +14 -0
  211. package/dist/node_modules/lucide/dist/esm/icons/circle-check-big.js.map +1 -0
  212. package/dist/node_modules/lucide/dist/esm/icons/circle-question-mark.cjs +17 -0
  213. package/dist/node_modules/lucide/dist/esm/icons/circle-question-mark.cjs.map +1 -0
  214. package/dist/node_modules/lucide/dist/esm/icons/circle-question-mark.js +15 -0
  215. package/dist/node_modules/lucide/dist/esm/icons/circle-question-mark.js.map +1 -0
  216. package/dist/node_modules/lucide/dist/esm/icons/circle.cjs +13 -0
  217. package/dist/node_modules/lucide/dist/esm/icons/circle.cjs.map +1 -0
  218. package/dist/node_modules/lucide/dist/esm/icons/circle.js +11 -0
  219. package/dist/node_modules/lucide/dist/esm/icons/circle.js.map +1 -0
  220. package/dist/node_modules/lucide/dist/esm/icons/cloud.cjs +13 -0
  221. package/dist/node_modules/lucide/dist/esm/icons/cloud.cjs.map +1 -0
  222. package/dist/node_modules/lucide/dist/esm/icons/cloud.js +11 -0
  223. package/dist/node_modules/lucide/dist/esm/icons/cloud.js.map +1 -0
  224. package/dist/node_modules/lucide/dist/esm/icons/copy.cjs +16 -0
  225. package/dist/node_modules/lucide/dist/esm/icons/copy.cjs.map +1 -0
  226. package/dist/node_modules/lucide/dist/esm/icons/copy.js +14 -0
  227. package/dist/node_modules/lucide/dist/esm/icons/copy.js.map +1 -0
  228. package/dist/node_modules/lucide/dist/esm/icons/database.cjs +17 -0
  229. package/dist/node_modules/lucide/dist/esm/icons/database.cjs.map +1 -0
  230. package/dist/node_modules/lucide/dist/esm/icons/database.js +15 -0
  231. package/dist/node_modules/lucide/dist/esm/icons/database.js.map +1 -0
  232. package/dist/node_modules/lucide/dist/esm/icons/diamond.cjs +20 -0
  233. package/dist/node_modules/lucide/dist/esm/icons/diamond.cjs.map +1 -0
  234. package/dist/node_modules/lucide/dist/esm/icons/diamond.js +18 -0
  235. package/dist/node_modules/lucide/dist/esm/icons/diamond.js.map +1 -0
  236. package/dist/node_modules/lucide/dist/esm/icons/download.cjs +17 -0
  237. package/dist/node_modules/lucide/dist/esm/icons/download.cjs.map +1 -0
  238. package/dist/node_modules/lucide/dist/esm/icons/download.js +15 -0
  239. package/dist/node_modules/lucide/dist/esm/icons/download.js.map +1 -0
  240. package/dist/node_modules/lucide/dist/esm/icons/eye-off.cjs +28 -0
  241. package/dist/node_modules/lucide/dist/esm/icons/eye-off.cjs.map +1 -0
  242. package/dist/node_modules/lucide/dist/esm/icons/eye-off.js +26 -0
  243. package/dist/node_modules/lucide/dist/esm/icons/eye-off.js.map +1 -0
  244. package/dist/node_modules/lucide/dist/esm/icons/eye.cjs +21 -0
  245. package/dist/node_modules/lucide/dist/esm/icons/eye.cjs.map +1 -0
  246. package/dist/node_modules/lucide/dist/esm/icons/eye.js +19 -0
  247. package/dist/node_modules/lucide/dist/esm/icons/eye.js.map +1 -0
  248. package/dist/node_modules/lucide/dist/esm/icons/grid-3x3.cjs +19 -0
  249. package/dist/node_modules/lucide/dist/esm/icons/grid-3x3.cjs.map +1 -0
  250. package/dist/node_modules/lucide/dist/esm/icons/grid-3x3.js +17 -0
  251. package/dist/node_modules/lucide/dist/esm/icons/grid-3x3.js.map +1 -0
  252. package/dist/node_modules/lucide/dist/esm/icons/history.cjs +17 -0
  253. package/dist/node_modules/lucide/dist/esm/icons/history.cjs.map +1 -0
  254. package/dist/node_modules/lucide/dist/esm/icons/history.js +15 -0
  255. package/dist/node_modules/lucide/dist/esm/icons/history.js.map +1 -0
  256. package/dist/node_modules/lucide/dist/esm/icons/info.cjs +17 -0
  257. package/dist/node_modules/lucide/dist/esm/icons/info.cjs.map +1 -0
  258. package/dist/node_modules/lucide/dist/esm/icons/info.js +15 -0
  259. package/dist/node_modules/lucide/dist/esm/icons/info.js.map +1 -0
  260. package/dist/node_modules/lucide/dist/esm/icons/lasso.cjs +17 -0
  261. package/dist/node_modules/lucide/dist/esm/icons/lasso.cjs.map +1 -0
  262. package/dist/node_modules/lucide/dist/esm/icons/lasso.js +15 -0
  263. package/dist/node_modules/lucide/dist/esm/icons/lasso.js.map +1 -0
  264. package/dist/node_modules/lucide/dist/esm/icons/maximize.cjs +18 -0
  265. package/dist/node_modules/lucide/dist/esm/icons/maximize.cjs.map +1 -0
  266. package/dist/node_modules/lucide/dist/esm/icons/maximize.js +16 -0
  267. package/dist/node_modules/lucide/dist/esm/icons/maximize.js.map +1 -0
  268. package/dist/node_modules/lucide/dist/esm/icons/minimize.cjs +18 -0
  269. package/dist/node_modules/lucide/dist/esm/icons/minimize.cjs.map +1 -0
  270. package/dist/node_modules/lucide/dist/esm/icons/minimize.js +16 -0
  271. package/dist/node_modules/lucide/dist/esm/icons/minimize.js.map +1 -0
  272. package/dist/node_modules/lucide/dist/esm/icons/mouse-pointer.cjs +21 -0
  273. package/dist/node_modules/lucide/dist/esm/icons/mouse-pointer.cjs.map +1 -0
  274. package/dist/node_modules/lucide/dist/esm/icons/mouse-pointer.js +19 -0
  275. package/dist/node_modules/lucide/dist/esm/icons/mouse-pointer.js.map +1 -0
  276. package/dist/node_modules/lucide/dist/esm/icons/move.cjs +20 -0
  277. package/dist/node_modules/lucide/dist/esm/icons/move.cjs.map +1 -0
  278. package/dist/node_modules/lucide/dist/esm/icons/move.js +18 -0
  279. package/dist/node_modules/lucide/dist/esm/icons/move.js.map +1 -0
  280. package/dist/node_modules/lucide/dist/esm/icons/panels-top-left.cjs +17 -0
  281. package/dist/node_modules/lucide/dist/esm/icons/panels-top-left.cjs.map +1 -0
  282. package/dist/node_modules/lucide/dist/esm/icons/panels-top-left.js +15 -0
  283. package/dist/node_modules/lucide/dist/esm/icons/panels-top-left.js.map +1 -0
  284. package/dist/node_modules/lucide/dist/esm/icons/pen.cjs +20 -0
  285. package/dist/node_modules/lucide/dist/esm/icons/pen.cjs.map +1 -0
  286. package/dist/node_modules/lucide/dist/esm/icons/pen.js +18 -0
  287. package/dist/node_modules/lucide/dist/esm/icons/pen.js.map +1 -0
  288. package/dist/node_modules/lucide/dist/esm/icons/plus.cjs +16 -0
  289. package/dist/node_modules/lucide/dist/esm/icons/plus.cjs.map +1 -0
  290. package/dist/node_modules/lucide/dist/esm/icons/plus.js +14 -0
  291. package/dist/node_modules/lucide/dist/esm/icons/plus.js.map +1 -0
  292. package/dist/node_modules/lucide/dist/esm/icons/search.cjs +16 -0
  293. package/dist/node_modules/lucide/dist/esm/icons/search.cjs.map +1 -0
  294. package/dist/node_modules/lucide/dist/esm/icons/search.js +14 -0
  295. package/dist/node_modules/lucide/dist/esm/icons/search.js.map +1 -0
  296. package/dist/node_modules/lucide/dist/esm/icons/settings.cjs +21 -0
  297. package/dist/node_modules/lucide/dist/esm/icons/settings.cjs.map +1 -0
  298. package/dist/node_modules/lucide/dist/esm/icons/settings.js +19 -0
  299. package/dist/node_modules/lucide/dist/esm/icons/settings.js.map +1 -0
  300. package/dist/node_modules/lucide/dist/esm/icons/share-2.cjs +19 -0
  301. package/dist/node_modules/lucide/dist/esm/icons/share-2.cjs.map +1 -0
  302. package/dist/node_modules/lucide/dist/esm/icons/share-2.js +17 -0
  303. package/dist/node_modules/lucide/dist/esm/icons/share-2.js.map +1 -0
  304. package/dist/node_modules/lucide/dist/esm/icons/square.cjs +13 -0
  305. package/dist/node_modules/lucide/dist/esm/icons/square.cjs.map +1 -0
  306. package/dist/node_modules/lucide/dist/esm/icons/square.js +11 -0
  307. package/dist/node_modules/lucide/dist/esm/icons/square.js.map +1 -0
  308. package/dist/node_modules/lucide/dist/esm/icons/sticky-note.cjs +21 -0
  309. package/dist/node_modules/lucide/dist/esm/icons/sticky-note.cjs.map +1 -0
  310. package/dist/node_modules/lucide/dist/esm/icons/sticky-note.js +19 -0
  311. package/dist/node_modules/lucide/dist/esm/icons/sticky-note.js.map +1 -0
  312. package/dist/node_modules/lucide/dist/esm/icons/trash-2.cjs +19 -0
  313. package/dist/node_modules/lucide/dist/esm/icons/trash-2.cjs.map +1 -0
  314. package/dist/node_modules/lucide/dist/esm/icons/trash-2.js +17 -0
  315. package/dist/node_modules/lucide/dist/esm/icons/trash-2.js.map +1 -0
  316. package/dist/node_modules/lucide/dist/esm/icons/triangle.cjs +15 -0
  317. package/dist/node_modules/lucide/dist/esm/icons/triangle.cjs.map +1 -0
  318. package/dist/node_modules/lucide/dist/esm/icons/triangle.js +13 -0
  319. package/dist/node_modules/lucide/dist/esm/icons/triangle.js.map +1 -0
  320. package/dist/node_modules/lucide/dist/esm/icons/x.cjs +16 -0
  321. package/dist/node_modules/lucide/dist/esm/icons/x.cjs.map +1 -0
  322. package/dist/node_modules/lucide/dist/esm/icons/x.js +14 -0
  323. package/dist/node_modules/lucide/dist/esm/icons/x.js.map +1 -0
  324. package/dist/node_modules/lucide/dist/esm/icons/zap.cjs +20 -0
  325. package/dist/node_modules/lucide/dist/esm/icons/zap.cjs.map +1 -0
  326. package/dist/node_modules/lucide/dist/esm/icons/zap.js +18 -0
  327. package/dist/node_modules/lucide/dist/esm/icons/zap.js.map +1 -0
  328. package/dist/node_modules/lucide/dist/esm/lucide.cjs +56 -0
  329. package/dist/node_modules/lucide/dist/esm/lucide.cjs.map +1 -0
  330. package/dist/node_modules/lucide/dist/esm/lucide.js +54 -0
  331. package/dist/node_modules/lucide/dist/esm/lucide.js.map +1 -0
  332. package/dist/node_modules/lucide/dist/esm/replaceElement.cjs +73 -0
  333. package/dist/node_modules/lucide/dist/esm/replaceElement.cjs.map +1 -0
  334. package/dist/node_modules/lucide/dist/esm/replaceElement.js +67 -0
  335. package/dist/node_modules/lucide/dist/esm/replaceElement.js.map +1 -0
  336. package/dist/node_modules/lucide/dist/esm/shared/src/utils/hasA11yProp.cjs +20 -0
  337. package/dist/node_modules/lucide/dist/esm/shared/src/utils/hasA11yProp.cjs.map +1 -0
  338. package/dist/node_modules/lucide/dist/esm/shared/src/utils/hasA11yProp.js +18 -0
  339. package/dist/node_modules/lucide/dist/esm/shared/src/utils/hasA11yProp.js.map +1 -0
  340. package/dist/node_modules/lucide/dist/esm/shared/src/utils/mergeClasses.cjs +15 -0
  341. package/dist/node_modules/lucide/dist/esm/shared/src/utils/mergeClasses.cjs.map +1 -0
  342. package/dist/node_modules/lucide/dist/esm/shared/src/utils/mergeClasses.js +13 -0
  343. package/dist/node_modules/lucide/dist/esm/shared/src/utils/mergeClasses.js.map +1 -0
  344. package/dist/node_modules/lucide/dist/esm/shared/src/utils/toCamelCase.cjs +16 -0
  345. package/dist/node_modules/lucide/dist/esm/shared/src/utils/toCamelCase.cjs.map +1 -0
  346. package/dist/node_modules/lucide/dist/esm/shared/src/utils/toCamelCase.js +14 -0
  347. package/dist/node_modules/lucide/dist/esm/shared/src/utils/toCamelCase.js.map +1 -0
  348. package/dist/node_modules/lucide/dist/esm/shared/src/utils/toPascalCase.cjs +19 -0
  349. package/dist/node_modules/lucide/dist/esm/shared/src/utils/toPascalCase.cjs.map +1 -0
  350. package/dist/node_modules/lucide/dist/esm/shared/src/utils/toPascalCase.js +17 -0
  351. package/dist/node_modules/lucide/dist/esm/shared/src/utils/toPascalCase.js.map +1 -0
  352. package/dist/nodes/content.cjs +186 -0
  353. package/dist/nodes/content.cjs.map +1 -0
  354. package/dist/nodes/content.d.ts +16 -0
  355. package/dist/nodes/content.js +184 -0
  356. package/dist/nodes/content.js.map +1 -0
  357. package/dist/nodes/geometry/ellipsePath.cjs +18 -0
  358. package/dist/nodes/geometry/ellipsePath.cjs.map +1 -0
  359. package/dist/nodes/geometry/ellipsePath.d.ts +5 -0
  360. package/dist/nodes/geometry/ellipsePath.js +16 -0
  361. package/dist/nodes/geometry/ellipsePath.js.map +1 -0
  362. package/dist/nodes/geometry/kitePath.cjs +15 -0
  363. package/dist/nodes/geometry/kitePath.cjs.map +1 -0
  364. package/dist/nodes/geometry/kitePath.d.ts +5 -0
  365. package/dist/nodes/geometry/kitePath.js +13 -0
  366. package/dist/nodes/geometry/kitePath.js.map +1 -0
  367. package/dist/nodes/geometry/octagonPath.cjs +23 -0
  368. package/dist/nodes/geometry/octagonPath.cjs.map +1 -0
  369. package/dist/nodes/geometry/octagonPath.d.ts +4 -0
  370. package/dist/nodes/geometry/octagonPath.js +21 -0
  371. package/dist/nodes/geometry/octagonPath.js.map +1 -0
  372. package/dist/nodes/geometry/parallelogramPath.cjs +16 -0
  373. package/dist/nodes/geometry/parallelogramPath.cjs.map +1 -0
  374. package/dist/nodes/geometry/parallelogramPath.d.ts +5 -0
  375. package/dist/nodes/geometry/parallelogramPath.js +14 -0
  376. package/dist/nodes/geometry/parallelogramPath.js.map +1 -0
  377. package/dist/nodes/geometry/pentagonPath.cjs +23 -0
  378. package/dist/nodes/geometry/pentagonPath.cjs.map +1 -0
  379. package/dist/nodes/geometry/pentagonPath.d.ts +4 -0
  380. package/dist/nodes/geometry/pentagonPath.js +21 -0
  381. package/dist/nodes/geometry/pentagonPath.js.map +1 -0
  382. package/dist/nodes/geometry/polygonPath.cjs +28 -0
  383. package/dist/nodes/geometry/polygonPath.cjs.map +1 -0
  384. package/dist/nodes/geometry/polygonPath.d.ts +5 -0
  385. package/dist/nodes/geometry/polygonPath.js +26 -0
  386. package/dist/nodes/geometry/polygonPath.js.map +1 -0
  387. package/dist/nodes/geometry/rectanglePath.cjs +23 -0
  388. package/dist/nodes/geometry/rectanglePath.cjs.map +1 -0
  389. package/dist/nodes/geometry/rectanglePath.d.ts +4 -0
  390. package/dist/nodes/geometry/rectanglePath.js +21 -0
  391. package/dist/nodes/geometry/rectanglePath.js.map +1 -0
  392. package/dist/nodes/geometry/semicirclePath.cjs +17 -0
  393. package/dist/nodes/geometry/semicirclePath.cjs.map +1 -0
  394. package/dist/nodes/geometry/semicirclePath.d.ts +5 -0
  395. package/dist/nodes/geometry/semicirclePath.js +15 -0
  396. package/dist/nodes/geometry/semicirclePath.js.map +1 -0
  397. package/dist/nodes/geometry/starPath.cjs +28 -0
  398. package/dist/nodes/geometry/starPath.cjs.map +1 -0
  399. package/dist/nodes/geometry/starPath.d.ts +4 -0
  400. package/dist/nodes/geometry/starPath.js +26 -0
  401. package/dist/nodes/geometry/starPath.js.map +1 -0
  402. package/dist/nodes/geometry/trapezoidPath.cjs +16 -0
  403. package/dist/nodes/geometry/trapezoidPath.cjs.map +1 -0
  404. package/dist/nodes/geometry/trapezoidPath.d.ts +5 -0
  405. package/dist/nodes/geometry/trapezoidPath.js +14 -0
  406. package/dist/nodes/geometry/trapezoidPath.js.map +1 -0
  407. package/dist/nodes/geometry/trianglePath.cjs +14 -0
  408. package/dist/nodes/geometry/trianglePath.cjs.map +1 -0
  409. package/dist/nodes/geometry/trianglePath.d.ts +5 -0
  410. package/dist/nodes/geometry/trianglePath.js +12 -0
  411. package/dist/nodes/geometry/trianglePath.js.map +1 -0
  412. package/dist/nodes/overlay.cjs +136 -0
  413. package/dist/nodes/overlay.cjs.map +1 -0
  414. package/dist/nodes/overlay.d.ts +24 -0
  415. package/dist/nodes/overlay.js +130 -0
  416. package/dist/nodes/overlay.js.map +1 -0
  417. package/dist/nodes/placement.cjs +346 -0
  418. package/dist/nodes/placement.cjs.map +1 -0
  419. package/dist/nodes/placement.d.ts +66 -0
  420. package/dist/nodes/placement.js +325 -0
  421. package/dist/nodes/placement.js.map +1 -0
  422. package/dist/nodes/ports.cjs +196 -0
  423. package/dist/nodes/ports.cjs.map +1 -0
  424. package/dist/nodes/ports.d.ts +12 -0
  425. package/dist/nodes/ports.js +194 -0
  426. package/dist/nodes/ports.js.map +1 -0
  427. package/dist/nodes/registry.cjs +26 -0
  428. package/dist/nodes/registry.cjs.map +1 -0
  429. package/dist/nodes/registry.d.ts +8 -0
  430. package/dist/nodes/registry.js +24 -0
  431. package/dist/nodes/registry.js.map +1 -0
  432. package/dist/nodes/shapes/circle.cjs +50 -0
  433. package/dist/nodes/shapes/circle.cjs.map +1 -0
  434. package/dist/nodes/shapes/circle.d.ts +2 -0
  435. package/dist/nodes/shapes/circle.js +48 -0
  436. package/dist/nodes/shapes/circle.js.map +1 -0
  437. package/dist/nodes/shapes/decagon.cjs +51 -0
  438. package/dist/nodes/shapes/decagon.cjs.map +1 -0
  439. package/dist/nodes/shapes/decagon.d.ts +5 -0
  440. package/dist/nodes/shapes/decagon.js +49 -0
  441. package/dist/nodes/shapes/decagon.js.map +1 -0
  442. package/dist/nodes/shapes/heptagon.cjs +51 -0
  443. package/dist/nodes/shapes/heptagon.cjs.map +1 -0
  444. package/dist/nodes/shapes/heptagon.d.ts +5 -0
  445. package/dist/nodes/shapes/heptagon.js +49 -0
  446. package/dist/nodes/shapes/heptagon.js.map +1 -0
  447. package/dist/nodes/shapes/hexagon.cjs +51 -0
  448. package/dist/nodes/shapes/hexagon.cjs.map +1 -0
  449. package/dist/nodes/shapes/hexagon.d.ts +5 -0
  450. package/dist/nodes/shapes/hexagon.js +49 -0
  451. package/dist/nodes/shapes/hexagon.js.map +1 -0
  452. package/dist/nodes/shapes/kite.cjs +43 -0
  453. package/dist/nodes/shapes/kite.cjs.map +1 -0
  454. package/dist/nodes/shapes/kite.d.ts +5 -0
  455. package/dist/nodes/shapes/kite.js +41 -0
  456. package/dist/nodes/shapes/kite.js.map +1 -0
  457. package/dist/nodes/shapes/nonagon.cjs +51 -0
  458. package/dist/nodes/shapes/nonagon.cjs.map +1 -0
  459. package/dist/nodes/shapes/nonagon.d.ts +5 -0
  460. package/dist/nodes/shapes/nonagon.js +49 -0
  461. package/dist/nodes/shapes/nonagon.js.map +1 -0
  462. package/dist/nodes/shapes/octagon.cjs +46 -0
  463. package/dist/nodes/shapes/octagon.cjs.map +1 -0
  464. package/dist/nodes/shapes/octagon.d.ts +2 -0
  465. package/dist/nodes/shapes/octagon.js +44 -0
  466. package/dist/nodes/shapes/octagon.js.map +1 -0
  467. package/dist/nodes/shapes/oval.cjs +43 -0
  468. package/dist/nodes/shapes/oval.cjs.map +1 -0
  469. package/dist/nodes/shapes/oval.d.ts +5 -0
  470. package/dist/nodes/shapes/oval.js +41 -0
  471. package/dist/nodes/shapes/oval.js.map +1 -0
  472. package/dist/nodes/shapes/parallelogram.cjs +44 -0
  473. package/dist/nodes/shapes/parallelogram.cjs.map +1 -0
  474. package/dist/nodes/shapes/parallelogram.d.ts +5 -0
  475. package/dist/nodes/shapes/parallelogram.js +42 -0
  476. package/dist/nodes/shapes/parallelogram.js.map +1 -0
  477. package/dist/nodes/shapes/pentagon.cjs +46 -0
  478. package/dist/nodes/shapes/pentagon.cjs.map +1 -0
  479. package/dist/nodes/shapes/pentagon.d.ts +2 -0
  480. package/dist/nodes/shapes/pentagon.js +44 -0
  481. package/dist/nodes/shapes/pentagon.js.map +1 -0
  482. package/dist/nodes/shapes/rectangle.cjs +43 -0
  483. package/dist/nodes/shapes/rectangle.cjs.map +1 -0
  484. package/dist/nodes/shapes/rectangle.d.ts +2 -0
  485. package/dist/nodes/shapes/rectangle.js +41 -0
  486. package/dist/nodes/shapes/rectangle.js.map +1 -0
  487. package/dist/nodes/shapes/rhombus.cjs +38 -0
  488. package/dist/nodes/shapes/rhombus.cjs.map +1 -0
  489. package/dist/nodes/shapes/rhombus.d.ts +2 -0
  490. package/dist/nodes/shapes/rhombus.js +36 -0
  491. package/dist/nodes/shapes/rhombus.js.map +1 -0
  492. package/dist/nodes/shapes/semicircle.cjs +38 -0
  493. package/dist/nodes/shapes/semicircle.cjs.map +1 -0
  494. package/dist/nodes/shapes/semicircle.d.ts +2 -0
  495. package/dist/nodes/shapes/semicircle.js +36 -0
  496. package/dist/nodes/shapes/semicircle.js.map +1 -0
  497. package/dist/nodes/shapes/star.cjs +51 -0
  498. package/dist/nodes/shapes/star.cjs.map +1 -0
  499. package/dist/nodes/shapes/star.d.ts +2 -0
  500. package/dist/nodes/shapes/star.js +49 -0
  501. package/dist/nodes/shapes/star.js.map +1 -0
  502. package/dist/nodes/shapes/trapezoid.cjs +44 -0
  503. package/dist/nodes/shapes/trapezoid.cjs.map +1 -0
  504. package/dist/nodes/shapes/trapezoid.d.ts +5 -0
  505. package/dist/nodes/shapes/trapezoid.js +42 -0
  506. package/dist/nodes/shapes/trapezoid.js.map +1 -0
  507. package/dist/nodes/shapes/triangle.cjs +42 -0
  508. package/dist/nodes/shapes/triangle.cjs.map +1 -0
  509. package/dist/nodes/shapes/triangle.d.ts +5 -0
  510. package/dist/nodes/shapes/triangle.js +40 -0
  511. package/dist/nodes/shapes/triangle.js.map +1 -0
  512. package/dist/types/index.d.ts +213 -0
  513. package/dist/utils/configMerger.cjs +147 -0
  514. package/dist/utils/configMerger.cjs.map +1 -0
  515. package/dist/utils/configMerger.d.ts +2 -0
  516. package/dist/utils/configMerger.js +145 -0
  517. package/dist/utils/configMerger.js.map +1 -0
  518. package/dist/utils/helpers.cjs +21 -0
  519. package/dist/utils/helpers.cjs.map +1 -0
  520. package/dist/utils/helpers.d.ts +13 -0
  521. package/dist/utils/helpers.js +18 -0
  522. package/dist/utils/helpers.js.map +1 -0
  523. package/dist/zenode.cjs.js +1228 -0
  524. package/dist/zenode.cjs.js.map +1 -0
  525. package/dist/zenode.esm.js +1203 -0
  526. package/dist/zenode.esm.js.map +1 -0
  527. package/dist/zenode.umd.js +1232 -0
  528. package/dist/zenode.umd.js.map +1 -0
  529. 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
+ [![npm version](https://img.shields.io/npm/v/@zenode/designer?style=flat-square&color=4A90E2)](https://www.npmjs.com/package/@zenode/designer)
9
+ [![License: MIT](https://img.shields.io/badge/License-MIT-green?style=flat-square)](LICENSE)
10
+ [![GitHub Stars](https://img.shields.io/github/stars/martinmanu/Zenode?style=flat-square&color=ffd700)](https://github.com/martinmanu/Zenode/stargazers)
11
+ [![TypeScript](https://img.shields.io/badge/TypeScript-strict-blue?style=flat-square)](https://www.typescriptlang.org/)
12
+ [![D3.js](https://img.shields.io/badge/Powered%20by-D3.js-orange?style=flat-square)](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":"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"}
@@ -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":";;;AAAA;AAKgB,SAAA,UAAU,CACxB,iBAAyB,EACzB,YAAoB,EAAA;IAcpB,MAAM,SAAS,GAAG,EAAE,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,KAAI,aAAa,CAAC,MAAM,CAAC,aAAa;AACrF,IAAc,CAAA,YAAY,KAAA,IAAA,IAAZ,YAAY,KAAZ,MAAA,GAAA,MAAA,GAAA,YAAY,CAAE,KAAK,KAAI,aAAa,CAAC,MAAM,CAAC;AAC1D,IAAe,CAAA,YAAY,KAAA,IAAA,IAAZ,YAAY,KAAZ,MAAA,GAAA,MAAA,GAAA,YAAY,CAAE,MAAM,KAAI,aAAa,CAAC,MAAM,CAAC;AAC5D,IAAA,MAAM,eAAe,GAAG,CAAA,YAAY,KAAA,IAAA,IAAZ,YAAY,KAAZ,MAAA,GAAA,MAAA,GAAA,YAAY,CAAE,eAAe,KAAI,aAAa,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,QAAA,EAAE,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,QAAA,EAAE,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;;;;"}