testeranto 0.200.1 → 0.202.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 (373) hide show
  1. package/README.md +26 -1
  2. package/design-editor/DesignEditor.tsx +40 -241
  3. package/dist/common/design-editor/DesignEditor.js +33 -198
  4. package/dist/common/src/App.js +158 -16
  5. package/dist/common/src/PM/PM_WithBuild.js +135 -0
  6. package/dist/common/src/PM/PM_WithEslintAndTsc.js +79 -67
  7. package/dist/common/src/PM/PM_WithGit.js +517 -0
  8. package/dist/common/src/PM/PM_WithProcesses.js +519 -0
  9. package/dist/common/src/PM/PM_WithWebSocket.js +535 -0
  10. package/dist/common/src/PM/base.js +62 -0
  11. package/dist/common/src/PM/main.js +533 -1676
  12. package/dist/common/src/PM/metafileOutputs.js +78 -0
  13. package/dist/common/src/PM/node.js +0 -6
  14. package/dist/common/src/PM/pure.js +0 -8
  15. package/dist/common/src/PM/types.js +1 -0
  16. package/dist/common/src/PM/utils.js +210 -0
  17. package/dist/common/src/PM/web.js +0 -6
  18. package/dist/common/src/ReportServer.js +0 -10
  19. package/dist/common/src/ReportServerLib.js +0 -140
  20. package/dist/common/src/components/pure/AppFrame.js +68 -56
  21. package/dist/common/src/components/pure/ArtifactTree.js +80 -0
  22. package/dist/common/src/components/pure/BuildLogViewer.js +106 -0
  23. package/dist/common/src/components/pure/DebugEnv.js +30 -0
  24. package/dist/common/src/components/pure/FileTree.js +34 -0
  25. package/dist/common/src/components/pure/FileTreeItem.js +29 -0
  26. package/dist/common/src/components/pure/GitHubLoginButton.js +18 -0
  27. package/dist/common/src/components/pure/GitIntegrationView.js +342 -0
  28. package/dist/common/src/components/pure/ProcessManager.js +1 -0
  29. package/dist/common/src/components/pure/ProcessManagerView.js +73 -74
  30. package/dist/common/src/components/pure/ProjectPageView.js +4 -117
  31. package/dist/common/src/components/pure/Settings.js +121 -0
  32. package/dist/common/src/components/pure/Settings.test.js +34 -0
  33. package/dist/common/src/components/pure/SignIn.js +22 -0
  34. package/dist/common/src/components/pure/SingleProcessView.js +166 -213
  35. package/dist/common/src/components/pure/TestPageView.js +113 -368
  36. package/dist/common/src/components/pure/TestPageView_utils.js +117 -0
  37. package/dist/common/src/components/pure/TestTable.js +33 -0
  38. package/dist/common/src/components/pure/ToastNotification.js +14 -0
  39. package/dist/common/src/components/pure/UserProfile.js +27 -0
  40. package/dist/common/src/components/stateful/AuthCallbackPage.js +51 -0
  41. package/dist/common/src/components/stateful/FeaturesReporter.js +2 -1
  42. package/dist/common/src/components/stateful/FileTree.js +58 -39
  43. package/dist/common/src/components/stateful/GitIntegrationPage.js +12 -0
  44. package/dist/common/src/components/stateful/ProcessManagerPage.js +13 -15
  45. package/dist/common/src/components/stateful/ProjectPage.js +6 -5
  46. package/dist/common/src/components/stateful/ProjectsPage.js +17 -19
  47. package/dist/common/src/components/stateful/SingleProcessPage.js +16 -26
  48. package/dist/common/src/components/stateful/TestPage.js +7 -5
  49. package/dist/common/src/hooks/useGitMode.js +21 -0
  50. package/dist/common/src/lib/BaseSuite.test/mock.js +15 -8
  51. package/dist/common/src/lib/BaseSuite.test/test.js +56 -80
  52. package/dist/common/src/lib/Tiposkripto.js +24 -0
  53. package/dist/common/src/lib/Tiposkripto.test/MockTiposkripto.js +154 -10
  54. package/dist/common/src/lib/Tiposkripto.test/Tiposkripto.adapter.js +6 -12
  55. package/dist/common/src/lib/Tiposkripto.test/Tiposkripto.implementation.js +63 -23
  56. package/dist/common/src/lib/Tiposkripto.test/Tiposkripto.specification.js +14 -6
  57. package/dist/common/src/lib/pmProxy.test/specification.js +167 -52
  58. package/dist/common/src/services/FileService.js +505 -0
  59. package/dist/common/src/services/GitHubAuthService.js +184 -0
  60. package/dist/common/src/testeranto.js +38 -97
  61. package/dist/common/src/utils/api.js +12 -8
  62. package/dist/common/src/utils/gitTest.js +27 -0
  63. package/dist/common/src/utils.js +23 -13
  64. package/dist/common/testeranto.config.js +21 -17
  65. package/dist/common/tsconfig.common.tsbuildinfo +1 -1
  66. package/dist/module/design-editor/DesignEditor.js +33 -199
  67. package/dist/module/src/App.js +121 -15
  68. package/dist/module/src/PM/PM_WithBuild.js +128 -0
  69. package/dist/module/src/PM/PM_WithEslintAndTsc.js +79 -67
  70. package/dist/module/src/PM/PM_WithGit.js +477 -0
  71. package/dist/module/src/PM/PM_WithProcesses.js +479 -0
  72. package/dist/module/src/PM/PM_WithWebSocket.js +528 -0
  73. package/dist/module/src/PM/base.js +62 -0
  74. package/dist/module/src/PM/main.js +533 -1676
  75. package/dist/module/src/PM/metafileOutputs.js +78 -0
  76. package/dist/module/src/PM/node.js +0 -6
  77. package/dist/module/src/PM/pure.js +0 -8
  78. package/dist/module/src/PM/types.js +1 -1
  79. package/dist/module/src/PM/utils.js +196 -0
  80. package/dist/module/src/PM/web.js +0 -6
  81. package/dist/module/src/ReportServer.js +1 -9
  82. package/dist/module/src/ReportServerLib.js +1 -134
  83. package/dist/module/src/components/pure/AppFrame.js +66 -24
  84. package/dist/module/src/components/pure/ArtifactTree.js +80 -0
  85. package/dist/module/src/components/pure/BuildLogViewer.js +99 -0
  86. package/dist/module/src/components/pure/DebugEnv.js +23 -0
  87. package/dist/module/src/components/pure/FileTree.js +27 -0
  88. package/dist/module/src/components/pure/FileTreeItem.js +22 -0
  89. package/dist/module/src/components/pure/GitHubLoginButton.js +11 -0
  90. package/dist/module/src/components/pure/GitIntegrationView.js +305 -0
  91. package/dist/module/src/components/pure/ProcessManager.js +1 -0
  92. package/dist/module/src/components/pure/ProcessManagerView.js +74 -75
  93. package/dist/module/src/components/pure/ProjectPageView.js +5 -118
  94. package/dist/module/src/components/pure/Settings.js +84 -0
  95. package/dist/module/src/components/pure/Settings.test.js +29 -0
  96. package/dist/module/src/components/pure/SignIn.js +15 -0
  97. package/dist/module/src/components/pure/SingleProcessView.js +130 -214
  98. package/dist/module/src/components/pure/TestPageView.js +97 -352
  99. package/dist/module/src/components/pure/TestPageView_utils.js +109 -0
  100. package/dist/module/src/components/pure/TestTable.js +26 -0
  101. package/dist/module/src/components/pure/ToastNotification.js +7 -0
  102. package/dist/module/src/components/pure/UserProfile.js +20 -0
  103. package/dist/module/src/components/stateful/AuthCallbackPage.js +14 -0
  104. package/dist/module/src/components/stateful/FeaturesReporter.js +2 -1
  105. package/dist/module/src/components/stateful/FileTree.js +59 -33
  106. package/dist/module/src/components/stateful/GitIntegrationPage.js +5 -0
  107. package/dist/module/src/components/stateful/ProcessManagerPage.js +13 -15
  108. package/dist/module/src/components/stateful/ProjectPage.js +6 -5
  109. package/dist/module/src/components/stateful/ProjectsPage.js +16 -18
  110. package/dist/module/src/components/stateful/SingleProcessPage.js +16 -26
  111. package/dist/module/src/components/stateful/TestPage.js +8 -6
  112. package/dist/module/src/hooks/useGitMode.js +17 -0
  113. package/dist/module/src/lib/BaseSuite.test/mock.js +15 -8
  114. package/dist/module/src/lib/BaseSuite.test/test.js +56 -80
  115. package/dist/module/src/lib/Tiposkripto.js +24 -0
  116. package/dist/module/src/lib/Tiposkripto.test/MockTiposkripto.js +154 -10
  117. package/dist/module/src/lib/Tiposkripto.test/Tiposkripto.adapter.js +6 -12
  118. package/dist/module/src/lib/Tiposkripto.test/Tiposkripto.implementation.js +63 -23
  119. package/dist/module/src/lib/Tiposkripto.test/Tiposkripto.specification.js +14 -6
  120. package/dist/module/src/lib/pmProxy.test/specification.js +167 -52
  121. package/dist/module/src/services/FileService.js +468 -0
  122. package/dist/module/src/services/GitHubAuthService.js +180 -0
  123. package/dist/module/src/testeranto.js +38 -97
  124. package/dist/module/src/utils/api.js +10 -7
  125. package/dist/module/src/utils/gitTest.js +23 -0
  126. package/dist/module/src/utils.js +21 -12
  127. package/dist/module/testeranto.config.js +21 -17
  128. package/dist/module/tsconfig.module.tsbuildinfo +1 -1
  129. package/dist/prebuild/App.css +94 -121
  130. package/dist/prebuild/App.js +44601 -11225
  131. package/dist/prebuild/testeranto.mjs +3113 -2256
  132. package/dist/types/design-editor/DesignEditor.d.ts +1 -18
  133. package/dist/types/src/App.d.ts +18 -0
  134. package/dist/types/src/PM/PM_WithBuild.d.ts +13 -0
  135. package/dist/types/src/PM/PM_WithEslintAndTsc.d.ts +2 -4
  136. package/dist/types/src/PM/PM_WithGit.d.ts +27 -0
  137. package/dist/types/src/PM/PM_WithProcesses.d.ts +29 -0
  138. package/dist/types/src/PM/PM_WithWebSocket.d.ts +108 -0
  139. package/dist/types/src/PM/base.d.ts +1 -1
  140. package/dist/types/src/PM/index.d.ts +0 -2
  141. package/dist/types/src/PM/main.d.ts +6 -77
  142. package/dist/types/src/PM/metafileOutputs.d.ts +0 -0
  143. package/dist/types/src/PM/node.d.ts +0 -2
  144. package/dist/types/src/PM/pure.d.ts +0 -2
  145. package/dist/types/src/PM/types.d.ts +118 -0
  146. package/dist/types/src/PM/utils.d.ts +35 -0
  147. package/dist/types/src/PM/web.d.ts +0 -2
  148. package/dist/types/src/Pure.d.ts +6 -1
  149. package/dist/types/src/ReportServer.d.ts +0 -1
  150. package/dist/types/src/ReportServerLib.d.ts +0 -1
  151. package/dist/types/src/Types.d.ts +1 -0
  152. package/dist/types/src/components/pure/ArtifactTree.d.ts +0 -0
  153. package/dist/types/src/components/pure/BuildLogViewer.d.ts +7 -0
  154. package/dist/types/src/components/pure/DebugEnv.d.ts +2 -0
  155. package/dist/types/src/components/pure/FileTree.d.ts +6 -0
  156. package/dist/types/src/components/pure/FileTreeItem.d.ts +8 -0
  157. package/dist/types/src/components/pure/GitHubLoginButton.d.ts +8 -0
  158. package/dist/types/src/components/pure/GitIntegrationView.d.ts +1 -0
  159. package/dist/types/src/components/pure/Settings.d.ts +1 -0
  160. package/dist/types/src/components/pure/Settings.test.d.ts +1 -0
  161. package/dist/types/src/components/pure/SignIn.d.ts +1 -0
  162. package/dist/types/src/components/pure/SingleProcessView.d.ts +10 -0
  163. package/dist/types/src/components/pure/TestPageView.d.ts +2 -1
  164. package/dist/types/src/components/pure/TestPageView_utils.d.ts +23 -0
  165. package/dist/types/src/components/pure/TestTable.d.ts +16 -0
  166. package/dist/types/src/components/pure/ToastNotification.d.ts +6 -0
  167. package/dist/types/src/components/pure/UserProfile.d.ts +2 -0
  168. package/dist/types/src/components/stateful/AuthCallbackPage.d.ts +2 -0
  169. package/dist/types/src/components/stateful/FileTree.d.ts +0 -8
  170. package/dist/types/src/components/stateful/GitIntegrationPage.d.ts +1 -0
  171. package/dist/types/src/hooks/useGitMode.d.ts +7 -0
  172. package/dist/types/src/lib/BaseSuite.test/mock.d.ts +2 -2
  173. package/dist/types/src/lib/BaseSuite.test/test.d.ts +4 -3
  174. package/dist/types/src/lib/Tiposkripto.d.ts +2 -0
  175. package/dist/types/src/lib/Tiposkripto.test/MockTiposkripto.d.ts +3 -0
  176. package/dist/types/src/lib/Tiposkripto.test/Tiposkripto.types.d.ts +5 -0
  177. package/dist/types/src/lib/index.d.ts +6 -0
  178. package/dist/types/src/services/FileService.d.ts +34 -0
  179. package/dist/types/src/services/GitHubAuthService.d.ts +32 -0
  180. package/dist/types/src/utils/api.d.ts +1 -0
  181. package/dist/types/src/utils/gitTest.d.ts +11 -0
  182. package/dist/types/src/utils.d.ts +3 -3
  183. package/dist/types/tsconfig.types.tsbuildinfo +1 -1
  184. package/example/__pycache__/Calculator.cpython-313.pyc +0 -0
  185. package/example/vendor/github.com/adamwong246/testeranto/src/golingvu/README.md +187 -0
  186. package/example/vendor/github.com/adamwong246/testeranto/src/golingvu/base_given.go +163 -0
  187. package/example/vendor/github.com/adamwong246/testeranto/src/golingvu/base_suite.go +85 -0
  188. package/example/vendor/github.com/adamwong246/testeranto/src/golingvu/base_then.go +21 -0
  189. package/example/vendor/github.com/adamwong246/testeranto/src/golingvu/base_when.go +21 -0
  190. package/example/vendor/github.com/adamwong246/testeranto/src/golingvu/golingvu.go +554 -0
  191. package/example/vendor/github.com/adamwong246/testeranto/src/golingvu/test_adapter.go +33 -0
  192. package/example/vendor/github.com/adamwong246/testeranto/src/golingvu/types.go +72 -0
  193. package/example/vendor/modules.txt +5 -0
  194. package/git-integration-plan.md +395 -0
  195. package/package.json +26 -14
  196. package/src/App.tsx +169 -18
  197. package/src/PM/PM_WithBuild.ts +171 -0
  198. package/src/PM/PM_WithEslintAndTsc.ts +109 -86
  199. package/src/PM/PM_WithGit.ts +585 -0
  200. package/src/PM/PM_WithProcesses.ts +639 -0
  201. package/src/PM/PM_WithWebSocket.ts +631 -0
  202. package/src/PM/base.ts +63 -1
  203. package/src/PM/index.ts +8 -5
  204. package/src/PM/main.ts +672 -2050
  205. package/src/PM/metafileOutputs.ts +90 -0
  206. package/src/PM/node.ts +18 -18
  207. package/src/PM/pure.ts +5 -13
  208. package/src/PM/types.ts +145 -0
  209. package/src/PM/utils.ts +256 -0
  210. package/src/PM/web.ts +8 -8
  211. package/src/README.md +122 -0
  212. package/src/ReportServer.ts +0 -12
  213. package/src/ReportServerLib.ts +0 -147
  214. package/src/Types.ts +1 -0
  215. package/src/app.scss +14 -164
  216. package/src/components/pure/AppFrame.tsx +237 -71
  217. package/src/components/pure/ArtifactTree.tsx +82 -0
  218. package/src/components/pure/BuildLogViewer.tsx +168 -0
  219. package/src/components/pure/DebugEnv.tsx +30 -0
  220. package/src/components/pure/FileTree.tsx +58 -0
  221. package/src/components/pure/FileTreeItem.tsx +49 -0
  222. package/src/components/pure/GitHubLoginButton.tsx +31 -0
  223. package/src/components/pure/GitIntegrationView.tsx +443 -0
  224. package/src/components/pure/ProcessManager.tsx +6 -5
  225. package/src/components/pure/ProcessManagerView.tsx +162 -166
  226. package/src/components/pure/ProjectPageView.tsx +6 -224
  227. package/src/components/pure/Settings.test.tsx +34 -0
  228. package/src/components/pure/Settings.tsx +163 -0
  229. package/src/components/pure/SignIn.tsx +33 -0
  230. package/src/components/pure/SingleProcessView.tsx +231 -235
  231. package/src/components/pure/TestPageView.test/specification.ts +1 -0
  232. package/src/components/pure/TestPageView.tsx +317 -826
  233. package/src/components/pure/TestPageView_utils.tsx +285 -0
  234. package/src/components/pure/TestTable.tsx +88 -0
  235. package/src/components/pure/ToastNotification.tsx +19 -0
  236. package/src/components/pure/UserProfile.tsx +44 -0
  237. package/src/components/stateful/AuthCallbackPage.tsx +21 -0
  238. package/src/components/stateful/FeaturesReporter.tsx +3 -1
  239. package/src/components/stateful/FileTree.tsx +58 -58
  240. package/src/components/stateful/GitIntegrationPage.tsx +8 -0
  241. package/src/components/stateful/ProcessManagerPage.tsx +13 -17
  242. package/src/components/stateful/ProjectPage.tsx +6 -5
  243. package/src/components/stateful/ProjectsPage.tsx +17 -19
  244. package/src/components/stateful/SVGEditor/CircleForm.tsx +68 -0
  245. package/src/components/stateful/SVGEditor/GroupForm.tsx +56 -0
  246. package/src/components/stateful/SVGEditor/RectForm.tsx +74 -0
  247. package/src/components/stateful/SVGEditor/SVGAttributeField.tsx +29 -0
  248. package/src/components/stateful/SVGEditor/SVGAttributesEditor.tsx +73 -0
  249. package/src/components/stateful/SVGEditor/SVGEditorControls.tsx +45 -0
  250. package/src/components/stateful/SVGEditor/SVGElementForm.tsx +45 -0
  251. package/src/components/stateful/SVGEditor/SVGPreview.tsx +225 -0
  252. package/src/components/stateful/SVGEditor/SVGTextEditor.tsx +166 -0
  253. package/src/components/stateful/SVGEditor/SVGTree.tsx +159 -0
  254. package/src/components/stateful/SVGEditor/SVGTypes.ts +36 -0
  255. package/src/components/stateful/SVGEditor/svg.xsd.xml +3038 -0
  256. package/src/components/stateful/SVGEditorPage.tsx +503 -0
  257. package/src/components/stateful/SingleProcessPage.tsx +18 -31
  258. package/src/components/stateful/TestPage.tsx +25 -22
  259. package/src/golingvu/golingvu.go +38 -2
  260. package/src/hooks/useGitMode.ts +20 -0
  261. package/src/lib/BaseSuite.test/mock.ts +16 -10
  262. package/src/lib/BaseSuite.test/test.ts +144 -103
  263. package/src/lib/Tiposkripto.test/MockTiposkripto.ts +178 -14
  264. package/src/lib/Tiposkripto.test/Tiposkripto.adapter.ts +9 -14
  265. package/src/lib/Tiposkripto.test/Tiposkripto.implementation.ts +78 -38
  266. package/src/lib/Tiposkripto.test/Tiposkripto.specification.ts +51 -9
  267. package/src/lib/Tiposkripto.test/Tiposkripto.types.ts +5 -0
  268. package/src/lib/Tiposkripto.ts +27 -0
  269. package/src/lib/index.ts +7 -0
  270. package/src/lib/pmProxy.test/specification.ts +168 -166
  271. package/src/pitono/PM/__pycache__/python.cpython-313.pyc +0 -0
  272. package/src/pitono/__pycache__/Pitono.cpython-313.pyc +0 -0
  273. package/src/pitono/__pycache__/__init__.cpython-313.pyc +0 -0
  274. package/src/pitono/__pycache__/base_given.cpython-313.pyc +0 -0
  275. package/src/pitono/__pycache__/base_suite.cpython-313.pyc +0 -0
  276. package/src/pitono/__pycache__/base_then.cpython-313.pyc +0 -0
  277. package/src/pitono/__pycache__/base_when.cpython-313.pyc +0 -0
  278. package/src/pitono/__pycache__/core_generator.cpython-313.pyc +0 -0
  279. package/src/pitono/__pycache__/simple_adapter.cpython-313.pyc +0 -0
  280. package/src/pitono/__pycache__/types.cpython-313.pyc +0 -0
  281. package/src/services/FileService.ts +542 -0
  282. package/src/services/GitHubAuthService.ts +240 -0
  283. package/src/testeranto.ts +62 -140
  284. package/src/utils/api.ts +15 -13
  285. package/src/utils/gitTest.ts +29 -0
  286. package/src/utils.ts +21 -12
  287. package/testeranto/App.css +94 -121
  288. package/testeranto/App.js +44601 -11225
  289. package/testeranto/bundles/golang/core/Calculator.golingvu.go +53 -0
  290. package/testeranto/bundles/golang/core/Calculator.golingvu.golingvu.go +53 -0
  291. package/testeranto/bundles/node/core/chunk-RIM6RECA.mjs +1170 -0
  292. package/testeranto/bundles/node/core/chunk-VXVF7WFO.mjs +4321 -0
  293. package/testeranto/bundles/node/core/example/Calculator.test.mjs +503 -0
  294. package/testeranto/bundles/node/core/src/lib/BaseSuite.test/node.test.mjs +94 -1231
  295. package/testeranto/bundles/node/core/src/lib/TipoSkripto.test/TipoSkripto.mjs +574 -0
  296. package/testeranto/bundles/node/core/src/lib/pmProxy.test/index.mjs +482 -0
  297. package/testeranto/bundles/pure/core/chunk-XYOCRDEQ.mjs +1080 -0
  298. package/testeranto/bundles/pure/core/src/Pure.test.mjs +410 -0
  299. package/testeranto/bundles/pure/core/src/lib/BaseSuite.test/pure.test.mjs +93 -1146
  300. package/testeranto/bundles/python/core/Calculator.pitono.test.py +24 -0
  301. package/testeranto/bundles/python/core/test_example.py +24 -0
  302. package/testeranto/bundles/web/core/MPLUSRounded1c-Black-O75GP5JI.ttf +0 -0
  303. package/testeranto/bundles/web/core/MPLUSRounded1c-Bold-R524Q5BH.ttf +0 -0
  304. package/testeranto/bundles/web/core/MPLUSRounded1c-ExtraBold-C6GRMYVT.ttf +0 -0
  305. package/testeranto/bundles/web/core/MPLUSRounded1c-Light-WKN65Y2C.ttf +0 -0
  306. package/testeranto/bundles/web/core/MPLUSRounded1c-Medium-ZC4DWL7C.ttf +0 -0
  307. package/testeranto/bundles/web/core/MPLUSRounded1c-Regular-DT6EKZ3S.ttf +0 -0
  308. package/testeranto/bundles/web/core/MPLUSRounded1c-Thin-YWDNVG6M.ttf +0 -0
  309. package/testeranto/bundles/web/core/chunk-DFRN4SYZ.mjs +2297 -0
  310. package/testeranto/bundles/web/core/chunk-JMDLMADH.mjs +27996 -0
  311. package/testeranto/bundles/web/core/chunk-LQMU5NCG.mjs +3082 -0
  312. package/testeranto/bundles/web/core/chunk-Q5TONB2Z.mjs +6874 -0
  313. package/testeranto/bundles/web/core/src/components/pure/FeaturesReporterView.test/index.mjs +164 -0
  314. package/testeranto/bundles/web/core/src/components/pure/ModalContent.test/index.css +11697 -0
  315. package/testeranto/bundles/web/core/src/components/pure/ModalContent.test/index.mjs +336 -0
  316. package/testeranto/bundles/web/core/src/components/pure/ProjectPageView.test/index.css +11697 -0
  317. package/testeranto/bundles/web/core/src/components/pure/ProjectPageView.test/index.mjs +517 -0
  318. package/testeranto/bundles/web/core/src/lib/BaseSuite.test/web.test.mjs +107 -1134
  319. package/testeranto/metafiles/golang/core.json +3 -3
  320. package/testeranto/metafiles/node/core.json +474 -31
  321. package/testeranto/metafiles/pure/core.json +144 -28
  322. package/testeranto/metafiles/python/core.json +11 -0
  323. package/testeranto/metafiles/web/core.json +15829 -45
  324. package/testeranto/reports/core/config.json +40 -0
  325. package/testeranto/reports/core/src/Pure.test/pure/exit.log +0 -0
  326. package/testeranto/reports/core/src/Pure.test/pure/lint_errors.txt +0 -0
  327. package/testeranto/reports/core/src/Pure.test/pure/prompt.txt +14 -0
  328. package/testeranto/reports/core/src/Pure.test/pure/type_errors.txt +73 -0
  329. package/testeranto/reports/core/src/components/pure/FeaturesReporterView.test/index/web/debug.log +0 -0
  330. package/testeranto/reports/core/src/components/pure/FeaturesReporterView.test/index/web/error.log +91 -0
  331. package/testeranto/reports/core/src/components/pure/FeaturesReporterView.test/index/web/exit.log +1 -0
  332. package/testeranto/reports/core/src/components/pure/FeaturesReporterView.test/index/web/info.log +2 -0
  333. package/testeranto/reports/core/src/components/pure/FeaturesReporterView.test/index/web/tests.json +68 -0
  334. package/testeranto/reports/core/src/components/pure/FeaturesReporterView.test/index/web/warn.log +0 -0
  335. package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/debug.log +0 -0
  336. package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/error.log +30 -0
  337. package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/exit.log +1 -0
  338. package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/info.log +2 -0
  339. package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/tests.json +88 -0
  340. package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/warn.log +0 -0
  341. package/testeranto/reports/core/src/lib/BaseSuite.test/node.test/node/lint_errors.txt +0 -6
  342. package/testeranto/reports/core/src/lib/BaseSuite.test/node.test/node/prompt.txt +0 -11
  343. package/testeranto/reports/core/src/lib/BaseSuite.test/node.test/node/stdout.log +1 -0
  344. package/testeranto/reports/core/src/lib/BaseSuite.test/node.test/node/tests.json +1 -1
  345. package/testeranto/reports/core/src/lib/BaseSuite.test/node.test/node/type_errors.txt +35 -38
  346. package/testeranto/reports/core/src/lib/BaseSuite.test/pure.test/pure/lint_errors.txt +0 -2
  347. package/testeranto/reports/core/src/lib/BaseSuite.test/pure.test/pure/prompt.txt +0 -10
  348. package/testeranto/reports/core/src/lib/BaseSuite.test/pure.test/pure/type_errors.txt +40 -38
  349. package/testeranto/reports/core/src/lib/BaseSuite.test/web.test/web/tests.json +1 -1
  350. package/testeranto/reports/core/src/lib/TipoSkripto.test/TipoSkripto/node/exit.log +1 -0
  351. package/testeranto/reports/core/src/lib/TipoSkripto.test/TipoSkripto/node/lint_errors.txt +0 -0
  352. package/testeranto/reports/core/src/lib/TipoSkripto.test/TipoSkripto/node/message.txt +17 -0
  353. package/testeranto/reports/core/src/lib/TipoSkripto.test/TipoSkripto/node/prompt.txt +17 -0
  354. package/testeranto/reports/core/src/lib/TipoSkripto.test/TipoSkripto/node/stderr.log +55 -0
  355. package/testeranto/reports/core/src/lib/TipoSkripto.test/TipoSkripto/node/stdout.log +191 -0
  356. package/testeranto/reports/core/src/lib/TipoSkripto.test/TipoSkripto/node/type_errors.txt +71 -0
  357. package/testeranto/reports/core/src/lib/pmProxy.test/index/node/exit.log +1 -0
  358. package/testeranto/reports/core/src/lib/pmProxy.test/index/node/lint_errors.txt +15 -0
  359. package/testeranto/reports/core/src/lib/pmProxy.test/index/node/message.txt +17 -0
  360. package/testeranto/reports/core/src/lib/pmProxy.test/index/node/prompt.txt +17 -0
  361. package/testeranto/reports/core/src/lib/pmProxy.test/index/node/stderr.log +20 -0
  362. package/testeranto/reports/core/src/lib/pmProxy.test/index/node/stdout.log +4 -0
  363. package/testeranto/reports/core/src/lib/pmProxy.test/index/node/type_errors.txt +49 -0
  364. package/testeranto/reports/core/summary.json +34 -6
  365. package/testeranto.config.ts +26 -20
  366. package/tsc.log +141 -91
  367. package/tsconfig.json +6 -2
  368. package/dist/types/design-editor/server.d.ts +0 -1
  369. package/testeranto/bundles/web/core/src/lib/BaseSuite.test/web.test.html +0 -15
  370. package/testeranto/reports/core/src/lib/BaseSuite.test/web.test/web/lint_errors.txt +0 -2
  371. package/testeranto/reports/core/src/lib/BaseSuite.test/web.test/web/prompt.txt +0 -25
  372. package/testeranto/reports/core/src/lib/BaseSuite.test/web.test/web/type_errors.txt +0 -56
  373. /package/testeranto/reports/core/src/{lib/BaseSuite.test/web.test/web → Pure.test/pure}/message.txt +0 -0
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  ## Brings vibe coding to the real world
4
4
 
5
- Testeranto lets you vibe code large, real-world codebases by intelligently managing the AI context
5
+ Testeranto lets you vibe code large, real-world polyglot codebases by intelligently managing the AI context
6
6
 
7
7
  #### 🚀 Join Our Beta Program! 🚀
8
8
 
@@ -28,6 +28,7 @@ We're launching a private beta for GitHub stargazers first, followed by a public
28
28
  ## What is testeranto?
29
29
 
30
30
  - Testeranto produces test results that can be fed to Aider.ai to automatically fix failing tests.
31
+ - Testeranto supports TypeScript/Javascript, golang and python (with more planed)
31
32
  - Testeranto tests are specified in a strongly-typed gherkin-like syntax. Rather than testing your code directly, Testeranto requires you to wrap your code with a semantic interface that is based on TS type signatures.
32
33
  - Testeranto can run tests in the frontend, the backend, or both.
33
34
  - Testeranto can be used to test anything that can be bundled with esbuild.
@@ -56,6 +57,30 @@ We're launching a private beta for GitHub stargazers first, followed by a public
56
57
 
57
58
  0. Install Aider and signup for a LLM service.
58
59
 
60
+ ### Server-Side Setup for GitHub OAuth
61
+
62
+ For GitHub authentication to work properly, you need to set up the server-side token exchange:
63
+
64
+ 1. Add the following environment variables to your server:
65
+ ```
66
+ GITHUB_CLIENT_ID=your_github_oauth_client_id
67
+ GITHUB_CLIENT_SECRET=your_github_oauth_client_secret
68
+ ```
69
+
70
+ 2. The server will handle the OAuth token exchange at the `/api/auth/github/token` endpoint
71
+
72
+ ### GitHub Authentication Setup
73
+
74
+ To enable Git operations with GitHub:
75
+
76
+ 1. Create a GitHub OAuth App at https://github.com/settings/developers
77
+ 2. Set the Authorization callback URL to: `http://localhost:3000/auth/github/callback`
78
+ 3. Copy the Client ID
79
+ 4. Update the `clientId` field in the `githubOAuth` section of `testeranto.config.ts`
80
+ 5. Restart the development server
81
+
82
+ **Note**: The client secret is not needed for the frontend application as it will be handled by the server-side component for token exchange.
83
+
59
84
  1. Install testeranto:
60
85
 
61
86
  ```bash
@@ -1,251 +1,50 @@
1
- /* eslint-disable @typescript-eslint/no-explicit-any */
2
- import React, { useState, useEffect, useRef } from 'react';
3
- import { Canvas, Rect, Circle, Text } from 'fabric';
4
- import { toPng } from 'html-to-image';
1
+ import React, { useEffect, useRef } from 'react';
2
+ import { Canvas, Rect, Text } from 'fabric';
5
3
 
6
- interface DesignObject {
7
- type: string;
8
- [key: string]: any;
9
- }
10
-
11
- interface Design {
12
- version: string;
13
- background: string;
14
- objects: DesignObject[];
15
- }
16
-
17
- interface Collaborator {
18
- id: string;
19
- name: string;
20
- }
21
-
22
- export interface DesignEditorRef {
23
- loadDesign: (design: Design) => void;
24
- saveDesign: () => Design | null;
25
- }
26
-
27
- export const DesignEditor = React.forwardRef<DesignEditorRef, { projectId: string }>(
28
- ({ projectId }, ref) => {
29
- const canvasRef = useRef<any>(null);
30
- const [design, setDesign] = useState<Design>({
31
- objects: [],
32
- background: '#ffffff',
33
- version: '1.0'
34
- });
35
- const [collaborators, setCollaborators] = useState<Collaborator[]>([]);
36
- const wsRef = useRef<WebSocket | null>(null);
37
-
38
- // Initialize canvas and WebSocket connection
4
+ export const DesignEditor = () => {
5
+ const canvasRef = useRef<HTMLCanvasElement>(null);
6
+
39
7
  useEffect(() => {
40
- // @ts-ignore
41
- const canvas = new fabric.Canvas('design-canvas', {
8
+ if (!canvasRef.current) return;
9
+
10
+ // Initialize the fabric canvas
11
+ const canvas = new Canvas(canvasRef.current, {
42
12
  width: 800,
43
- height: 600
13
+ height: 600,
14
+ backgroundColor: '#f0f0f0'
44
15
  });
45
- canvas.backgroundColor = design.background;
46
- canvasRef.current = canvas;
47
-
48
- const wsPort = window.location.port ? Number(window.location.port) + 1 : 3001;
49
- const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:';
50
- const host = window.location.hostname;
51
- wsRef.current = new WebSocket(`${protocol}//${host}:${wsPort}/design?project=${projectId}`);
52
-
53
- wsRef.current.onmessage = (event) => {
54
- const message = JSON.parse(event.data);
55
- if (message.type === 'design_update' && canvasRef.current) {
56
- canvasRef.current.loadFromJSON(message.data, () => {
57
- canvasRef.current?.renderAll();
58
- });
59
- } else if (message.type === 'collaborators_update') {
60
- setCollaborators(message.data);
61
- }
62
- };
63
-
16
+
17
+ // Add a simple rectangle
18
+ const rect = new Rect({
19
+ left: 100,
20
+ top: 100,
21
+ width: 100,
22
+ height: 100,
23
+ fill: 'red',
24
+ angle: 0
25
+ });
26
+
27
+ // Add text
28
+ const text = new Text('Hello Fabric.js!', {
29
+ left: 50,
30
+ top: 50,
31
+ fontSize: 20,
32
+ fill: 'blue'
33
+ });
34
+
35
+ // Add objects to canvas
36
+ canvas.add(rect, text);
37
+ canvas.renderAll();
38
+
39
+ // Cleanup
64
40
  return () => {
65
- wsRef.current?.close();
66
41
  canvas.dispose();
67
42
  };
68
- }, [projectId]);
69
-
70
- const addShape = (shape: string) => {
71
- if (!canvasRef.current) return;
72
-
73
- let object;
74
- switch (shape) {
75
- case 'rectangle':
76
- // @ts-ignore
77
- object = new fabric.Rect({
78
- width: 100,
79
- height: 100,
80
- fill: 'red',
81
- left: 100,
82
- top: 100
83
- });
84
- break;
85
- case 'circle':
86
- // @ts-ignore
87
- object = new fabric.Circle({
88
- radius: 50,
89
- fill: 'blue',
90
- left: 200,
91
- top: 200
92
- });
93
- break;
94
- case 'text':
95
- // @ts-ignore
96
- object = new fabric.Text('Double click to edit', {
97
- fontFamily: 'Arial',
98
- fontSize: 20,
99
- left: 100,
100
- top: 300
101
- });
102
- break;
103
- default:
104
- return;
105
- }
106
-
107
- canvasRef.current.add(object);
108
- canvasRef.current.renderAll();
109
- };
110
-
111
- const saveDesign = (): Design | null => {
112
- if (!canvasRef.current) {
113
- console.warn('Canvas ref is null, cannot save design');
114
- return null;
115
- }
116
-
117
- try {
118
- // Get current canvas state
119
- const json = canvasRef.current.toJSON() as Design;
120
- setDesign(json);
121
-
122
- // Send update to collaborators
123
- if (wsRef.current) {
124
- wsRef.current.send(JSON.stringify({
125
- type: 'design_update',
126
- data: json
127
- }));
128
- }
129
-
130
- // Force re-render of all objects
131
- canvasRef.current.getObjects().forEach(obj => {
132
- obj.set('dirty', true);
133
- });
134
- canvasRef.current.renderAll();
135
-
136
- console.log('Design saved:', json);
137
- return json;
138
- } catch (err) {
139
- console.error('Error saving design:', err);
140
- return null;
141
- }
142
- };
143
-
144
- const loadDesign = (design: Design) => {
145
- console.log('loadDesign called with:', design);
146
- if (!canvasRef.current) {
147
- console.warn('Canvas ref is null, cannot load design');
148
- return;
149
- }
150
-
151
- try {
152
- console.log('Loading design into canvas...');
153
-
154
- // Clear existing canvas
155
- canvasRef.current.clear();
156
-
157
- // Set background color
158
- if (design.background) {
159
- canvasRef.current.backgroundColor = design.background;
160
- }
161
-
162
- // Load objects if they exist
163
- if (design.objects && design.objects.length > 0) {
164
- console.log('Loading objects:', design.objects.length);
165
- canvasRef.current.loadFromJSON(design, () => {
166
- console.log('Design loaded, rendering canvas...');
167
- // Force re-render of all objects
168
- canvasRef.current?.getObjects().forEach(obj => {
169
- obj.set('dirty', true);
170
- });
171
- canvasRef.current?.renderAll();
172
- console.log('Canvas rendered with new design');
173
- });
174
- } else {
175
- console.log('No objects to load, rendering empty canvas');
176
- canvasRef.current.renderAll();
177
- }
178
-
179
- // Force immediate render
180
- canvasRef.current.renderAll();
181
- } catch (err) {
182
- console.error('Error loading design:', err);
183
- if (err instanceof Error) {
184
- console.error('Error details:', {
185
- name: err.name,
186
- message: err.message,
187
- stack: err.stack
188
- });
189
- }
190
- }
191
- };
192
-
193
- // Expose methods via ref
194
- React.useImperativeHandle(ref, () => ({
195
- loadDesign,
196
- saveDesign
197
- }));
198
-
199
- const exportAsPNG = async () => {
200
- if (!canvasRef.current) return;
201
-
202
- try {
203
- // Store current active object and hide controls
204
- const activeObject = canvasRef.current.getActiveObject();
205
- if (activeObject) {
206
- canvasRef.current.discardActiveObject();
207
- }
208
-
209
- // Render once to clear controls
210
- canvasRef.current.renderAll();
211
-
212
- // Get canvas element and export
213
- const canvasElement = document.getElementById('design-canvas');
214
- if (!canvasElement) return;
215
-
216
- const dataUrl = await toPng(canvasElement);
217
- const link = document.createElement('a');
218
- link.download = `design-${projectId}.png`;
219
- link.href = dataUrl;
220
- link.click();
221
-
222
- // Restore active object if there was one
223
- if (activeObject) {
224
- canvasRef.current.setActiveObject(activeObject);
225
- canvasRef.current.renderAll();
226
- }
227
- } catch (error) {
228
- console.error('Error exporting PNG:', error);
229
- }
230
- };
231
-
43
+ }, []);
44
+
232
45
  return (
233
- <div className="design-editor">
234
- <div className="toolbar">
235
- <button onClick={() => addShape('rectangle')}>Add Rectangle</button>
236
- <button onClick={() => addShape('circle')}>Add Circle</button>
237
- <button onClick={() => addShape('text')}>Add Text</button>
238
- <button onClick={exportAsPNG}>Export PNG</button>
239
- </div>
240
- <canvas id="design-canvas" />
241
- <div className="collaborators">
242
- <h3>Collaborators ({collaborators.length})</h3>
243
- <ul>
244
- {collaborators.map(user => (
245
- <li key={user.id}>{user.name}</li>
246
- ))}
247
- </ul>
248
- </div>
46
+ <div>
47
+ <canvas ref={canvasRef} />
249
48
  </div>
250
49
  );
251
- });
50
+ };
@@ -34,209 +34,44 @@ var __importStar = (this && this.__importStar) || (function () {
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.DesignEditor = void 0;
37
- /* eslint-disable @typescript-eslint/no-explicit-any */
38
37
  const react_1 = __importStar(require("react"));
39
- const html_to_image_1 = require("html-to-image");
40
- exports.DesignEditor = react_1.default.forwardRef(({ projectId }, ref) => {
38
+ const fabric_1 = require("fabric");
39
+ const DesignEditor = () => {
41
40
  const canvasRef = (0, react_1.useRef)(null);
42
- const [design, setDesign] = (0, react_1.useState)({
43
- objects: [],
44
- background: '#ffffff',
45
- version: '1.0'
46
- });
47
- const [collaborators, setCollaborators] = (0, react_1.useState)([]);
48
- const wsRef = (0, react_1.useRef)(null);
49
- // Initialize canvas and WebSocket connection
50
41
  (0, react_1.useEffect)(() => {
51
- // @ts-ignore
52
- const canvas = new fabric.Canvas('design-canvas', {
42
+ if (!canvasRef.current)
43
+ return;
44
+ // Initialize the fabric canvas
45
+ const canvas = new fabric_1.Canvas(canvasRef.current, {
53
46
  width: 800,
54
- height: 600
47
+ height: 600,
48
+ backgroundColor: '#f0f0f0'
55
49
  });
56
- canvas.backgroundColor = design.background;
57
- canvasRef.current = canvas;
58
- const wsPort = window.location.port ? Number(window.location.port) + 1 : 3001;
59
- const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:';
60
- const host = window.location.hostname;
61
- wsRef.current = new WebSocket(`${protocol}//${host}:${wsPort}/design?project=${projectId}`);
62
- wsRef.current.onmessage = (event) => {
63
- const message = JSON.parse(event.data);
64
- if (message.type === 'design_update' && canvasRef.current) {
65
- canvasRef.current.loadFromJSON(message.data, () => {
66
- var _a;
67
- (_a = canvasRef.current) === null || _a === void 0 ? void 0 : _a.renderAll();
68
- });
69
- }
70
- else if (message.type === 'collaborators_update') {
71
- setCollaborators(message.data);
72
- }
73
- };
50
+ // Add a simple rectangle
51
+ const rect = new fabric_1.Rect({
52
+ left: 100,
53
+ top: 100,
54
+ width: 100,
55
+ height: 100,
56
+ fill: 'red',
57
+ angle: 0
58
+ });
59
+ // Add text
60
+ const text = new fabric_1.Text('Hello Fabric.js!', {
61
+ left: 50,
62
+ top: 50,
63
+ fontSize: 20,
64
+ fill: 'blue'
65
+ });
66
+ // Add objects to canvas
67
+ canvas.add(rect, text);
68
+ canvas.renderAll();
69
+ // Cleanup
74
70
  return () => {
75
- var _a;
76
- (_a = wsRef.current) === null || _a === void 0 ? void 0 : _a.close();
77
71
  canvas.dispose();
78
72
  };
79
- }, [projectId]);
80
- const addShape = (shape) => {
81
- if (!canvasRef.current)
82
- return;
83
- let object;
84
- switch (shape) {
85
- case 'rectangle':
86
- // @ts-ignore
87
- object = new fabric.Rect({
88
- width: 100,
89
- height: 100,
90
- fill: 'red',
91
- left: 100,
92
- top: 100
93
- });
94
- break;
95
- case 'circle':
96
- // @ts-ignore
97
- object = new fabric.Circle({
98
- radius: 50,
99
- fill: 'blue',
100
- left: 200,
101
- top: 200
102
- });
103
- break;
104
- case 'text':
105
- // @ts-ignore
106
- object = new fabric.Text('Double click to edit', {
107
- fontFamily: 'Arial',
108
- fontSize: 20,
109
- left: 100,
110
- top: 300
111
- });
112
- break;
113
- default:
114
- return;
115
- }
116
- canvasRef.current.add(object);
117
- canvasRef.current.renderAll();
118
- };
119
- const saveDesign = () => {
120
- if (!canvasRef.current) {
121
- console.warn('Canvas ref is null, cannot save design');
122
- return null;
123
- }
124
- try {
125
- // Get current canvas state
126
- const json = canvasRef.current.toJSON();
127
- setDesign(json);
128
- // Send update to collaborators
129
- if (wsRef.current) {
130
- wsRef.current.send(JSON.stringify({
131
- type: 'design_update',
132
- data: json
133
- }));
134
- }
135
- // Force re-render of all objects
136
- canvasRef.current.getObjects().forEach(obj => {
137
- obj.set('dirty', true);
138
- });
139
- canvasRef.current.renderAll();
140
- console.log('Design saved:', json);
141
- return json;
142
- }
143
- catch (err) {
144
- console.error('Error saving design:', err);
145
- return null;
146
- }
147
- };
148
- const loadDesign = (design) => {
149
- console.log('loadDesign called with:', design);
150
- if (!canvasRef.current) {
151
- console.warn('Canvas ref is null, cannot load design');
152
- return;
153
- }
154
- try {
155
- console.log('Loading design into canvas...');
156
- // Clear existing canvas
157
- canvasRef.current.clear();
158
- // Set background color
159
- if (design.background) {
160
- canvasRef.current.backgroundColor = design.background;
161
- }
162
- // Load objects if they exist
163
- if (design.objects && design.objects.length > 0) {
164
- console.log('Loading objects:', design.objects.length);
165
- canvasRef.current.loadFromJSON(design, () => {
166
- var _a, _b;
167
- console.log('Design loaded, rendering canvas...');
168
- // Force re-render of all objects
169
- (_a = canvasRef.current) === null || _a === void 0 ? void 0 : _a.getObjects().forEach(obj => {
170
- obj.set('dirty', true);
171
- });
172
- (_b = canvasRef.current) === null || _b === void 0 ? void 0 : _b.renderAll();
173
- console.log('Canvas rendered with new design');
174
- });
175
- }
176
- else {
177
- console.log('No objects to load, rendering empty canvas');
178
- canvasRef.current.renderAll();
179
- }
180
- // Force immediate render
181
- canvasRef.current.renderAll();
182
- }
183
- catch (err) {
184
- console.error('Error loading design:', err);
185
- if (err instanceof Error) {
186
- console.error('Error details:', {
187
- name: err.name,
188
- message: err.message,
189
- stack: err.stack
190
- });
191
- }
192
- }
193
- };
194
- // Expose methods via ref
195
- react_1.default.useImperativeHandle(ref, () => ({
196
- loadDesign,
197
- saveDesign
198
- }));
199
- const exportAsPNG = async () => {
200
- if (!canvasRef.current)
201
- return;
202
- try {
203
- // Store current active object and hide controls
204
- const activeObject = canvasRef.current.getActiveObject();
205
- if (activeObject) {
206
- canvasRef.current.discardActiveObject();
207
- }
208
- // Render once to clear controls
209
- canvasRef.current.renderAll();
210
- // Get canvas element and export
211
- const canvasElement = document.getElementById('design-canvas');
212
- if (!canvasElement)
213
- return;
214
- const dataUrl = await (0, html_to_image_1.toPng)(canvasElement);
215
- const link = document.createElement('a');
216
- link.download = `design-${projectId}.png`;
217
- link.href = dataUrl;
218
- link.click();
219
- // Restore active object if there was one
220
- if (activeObject) {
221
- canvasRef.current.setActiveObject(activeObject);
222
- canvasRef.current.renderAll();
223
- }
224
- }
225
- catch (error) {
226
- console.error('Error exporting PNG:', error);
227
- }
228
- };
229
- return (react_1.default.createElement("div", { className: "design-editor" },
230
- react_1.default.createElement("div", { className: "toolbar" },
231
- react_1.default.createElement("button", { onClick: () => addShape('rectangle') }, "Add Rectangle"),
232
- react_1.default.createElement("button", { onClick: () => addShape('circle') }, "Add Circle"),
233
- react_1.default.createElement("button", { onClick: () => addShape('text') }, "Add Text"),
234
- react_1.default.createElement("button", { onClick: exportAsPNG }, "Export PNG")),
235
- react_1.default.createElement("canvas", { id: "design-canvas" }),
236
- react_1.default.createElement("div", { className: "collaborators" },
237
- react_1.default.createElement("h3", null,
238
- "Collaborators (",
239
- collaborators.length,
240
- ")"),
241
- react_1.default.createElement("ul", null, collaborators.map(user => (react_1.default.createElement("li", { key: user.id }, user.name)))))));
242
- });
73
+ }, []);
74
+ return (react_1.default.createElement("div", null,
75
+ react_1.default.createElement("canvas", { ref: canvasRef })));
76
+ };
77
+ exports.DesignEditor = DesignEditor;