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.
- package/README.md +26 -1
- package/design-editor/DesignEditor.tsx +40 -241
- package/dist/common/design-editor/DesignEditor.js +33 -198
- package/dist/common/src/App.js +158 -16
- package/dist/common/src/PM/PM_WithBuild.js +135 -0
- package/dist/common/src/PM/PM_WithEslintAndTsc.js +79 -67
- package/dist/common/src/PM/PM_WithGit.js +517 -0
- package/dist/common/src/PM/PM_WithProcesses.js +519 -0
- package/dist/common/src/PM/PM_WithWebSocket.js +535 -0
- package/dist/common/src/PM/base.js +62 -0
- package/dist/common/src/PM/main.js +533 -1676
- package/dist/common/src/PM/metafileOutputs.js +78 -0
- package/dist/common/src/PM/node.js +0 -6
- package/dist/common/src/PM/pure.js +0 -8
- package/dist/common/src/PM/types.js +1 -0
- package/dist/common/src/PM/utils.js +210 -0
- package/dist/common/src/PM/web.js +0 -6
- package/dist/common/src/ReportServer.js +0 -10
- package/dist/common/src/ReportServerLib.js +0 -140
- package/dist/common/src/components/pure/AppFrame.js +68 -56
- package/dist/common/src/components/pure/ArtifactTree.js +80 -0
- package/dist/common/src/components/pure/BuildLogViewer.js +106 -0
- package/dist/common/src/components/pure/DebugEnv.js +30 -0
- package/dist/common/src/components/pure/FileTree.js +34 -0
- package/dist/common/src/components/pure/FileTreeItem.js +29 -0
- package/dist/common/src/components/pure/GitHubLoginButton.js +18 -0
- package/dist/common/src/components/pure/GitIntegrationView.js +342 -0
- package/dist/common/src/components/pure/ProcessManager.js +1 -0
- package/dist/common/src/components/pure/ProcessManagerView.js +73 -74
- package/dist/common/src/components/pure/ProjectPageView.js +4 -117
- package/dist/common/src/components/pure/Settings.js +121 -0
- package/dist/common/src/components/pure/Settings.test.js +34 -0
- package/dist/common/src/components/pure/SignIn.js +22 -0
- package/dist/common/src/components/pure/SingleProcessView.js +166 -213
- package/dist/common/src/components/pure/TestPageView.js +113 -368
- package/dist/common/src/components/pure/TestPageView_utils.js +117 -0
- package/dist/common/src/components/pure/TestTable.js +33 -0
- package/dist/common/src/components/pure/ToastNotification.js +14 -0
- package/dist/common/src/components/pure/UserProfile.js +27 -0
- package/dist/common/src/components/stateful/AuthCallbackPage.js +51 -0
- package/dist/common/src/components/stateful/FeaturesReporter.js +2 -1
- package/dist/common/src/components/stateful/FileTree.js +58 -39
- package/dist/common/src/components/stateful/GitIntegrationPage.js +12 -0
- package/dist/common/src/components/stateful/ProcessManagerPage.js +13 -15
- package/dist/common/src/components/stateful/ProjectPage.js +6 -5
- package/dist/common/src/components/stateful/ProjectsPage.js +17 -19
- package/dist/common/src/components/stateful/SingleProcessPage.js +16 -26
- package/dist/common/src/components/stateful/TestPage.js +7 -5
- package/dist/common/src/hooks/useGitMode.js +21 -0
- package/dist/common/src/lib/BaseSuite.test/mock.js +15 -8
- package/dist/common/src/lib/BaseSuite.test/test.js +56 -80
- package/dist/common/src/lib/Tiposkripto.js +24 -0
- package/dist/common/src/lib/Tiposkripto.test/MockTiposkripto.js +154 -10
- package/dist/common/src/lib/Tiposkripto.test/Tiposkripto.adapter.js +6 -12
- package/dist/common/src/lib/Tiposkripto.test/Tiposkripto.implementation.js +63 -23
- package/dist/common/src/lib/Tiposkripto.test/Tiposkripto.specification.js +14 -6
- package/dist/common/src/lib/pmProxy.test/specification.js +167 -52
- package/dist/common/src/services/FileService.js +505 -0
- package/dist/common/src/services/GitHubAuthService.js +184 -0
- package/dist/common/src/testeranto.js +38 -97
- package/dist/common/src/utils/api.js +12 -8
- package/dist/common/src/utils/gitTest.js +27 -0
- package/dist/common/src/utils.js +23 -13
- package/dist/common/testeranto.config.js +21 -17
- package/dist/common/tsconfig.common.tsbuildinfo +1 -1
- package/dist/module/design-editor/DesignEditor.js +33 -199
- package/dist/module/src/App.js +121 -15
- package/dist/module/src/PM/PM_WithBuild.js +128 -0
- package/dist/module/src/PM/PM_WithEslintAndTsc.js +79 -67
- package/dist/module/src/PM/PM_WithGit.js +477 -0
- package/dist/module/src/PM/PM_WithProcesses.js +479 -0
- package/dist/module/src/PM/PM_WithWebSocket.js +528 -0
- package/dist/module/src/PM/base.js +62 -0
- package/dist/module/src/PM/main.js +533 -1676
- package/dist/module/src/PM/metafileOutputs.js +78 -0
- package/dist/module/src/PM/node.js +0 -6
- package/dist/module/src/PM/pure.js +0 -8
- package/dist/module/src/PM/types.js +1 -1
- package/dist/module/src/PM/utils.js +196 -0
- package/dist/module/src/PM/web.js +0 -6
- package/dist/module/src/ReportServer.js +1 -9
- package/dist/module/src/ReportServerLib.js +1 -134
- package/dist/module/src/components/pure/AppFrame.js +66 -24
- package/dist/module/src/components/pure/ArtifactTree.js +80 -0
- package/dist/module/src/components/pure/BuildLogViewer.js +99 -0
- package/dist/module/src/components/pure/DebugEnv.js +23 -0
- package/dist/module/src/components/pure/FileTree.js +27 -0
- package/dist/module/src/components/pure/FileTreeItem.js +22 -0
- package/dist/module/src/components/pure/GitHubLoginButton.js +11 -0
- package/dist/module/src/components/pure/GitIntegrationView.js +305 -0
- package/dist/module/src/components/pure/ProcessManager.js +1 -0
- package/dist/module/src/components/pure/ProcessManagerView.js +74 -75
- package/dist/module/src/components/pure/ProjectPageView.js +5 -118
- package/dist/module/src/components/pure/Settings.js +84 -0
- package/dist/module/src/components/pure/Settings.test.js +29 -0
- package/dist/module/src/components/pure/SignIn.js +15 -0
- package/dist/module/src/components/pure/SingleProcessView.js +130 -214
- package/dist/module/src/components/pure/TestPageView.js +97 -352
- package/dist/module/src/components/pure/TestPageView_utils.js +109 -0
- package/dist/module/src/components/pure/TestTable.js +26 -0
- package/dist/module/src/components/pure/ToastNotification.js +7 -0
- package/dist/module/src/components/pure/UserProfile.js +20 -0
- package/dist/module/src/components/stateful/AuthCallbackPage.js +14 -0
- package/dist/module/src/components/stateful/FeaturesReporter.js +2 -1
- package/dist/module/src/components/stateful/FileTree.js +59 -33
- package/dist/module/src/components/stateful/GitIntegrationPage.js +5 -0
- package/dist/module/src/components/stateful/ProcessManagerPage.js +13 -15
- package/dist/module/src/components/stateful/ProjectPage.js +6 -5
- package/dist/module/src/components/stateful/ProjectsPage.js +16 -18
- package/dist/module/src/components/stateful/SingleProcessPage.js +16 -26
- package/dist/module/src/components/stateful/TestPage.js +8 -6
- package/dist/module/src/hooks/useGitMode.js +17 -0
- package/dist/module/src/lib/BaseSuite.test/mock.js +15 -8
- package/dist/module/src/lib/BaseSuite.test/test.js +56 -80
- package/dist/module/src/lib/Tiposkripto.js +24 -0
- package/dist/module/src/lib/Tiposkripto.test/MockTiposkripto.js +154 -10
- package/dist/module/src/lib/Tiposkripto.test/Tiposkripto.adapter.js +6 -12
- package/dist/module/src/lib/Tiposkripto.test/Tiposkripto.implementation.js +63 -23
- package/dist/module/src/lib/Tiposkripto.test/Tiposkripto.specification.js +14 -6
- package/dist/module/src/lib/pmProxy.test/specification.js +167 -52
- package/dist/module/src/services/FileService.js +468 -0
- package/dist/module/src/services/GitHubAuthService.js +180 -0
- package/dist/module/src/testeranto.js +38 -97
- package/dist/module/src/utils/api.js +10 -7
- package/dist/module/src/utils/gitTest.js +23 -0
- package/dist/module/src/utils.js +21 -12
- package/dist/module/testeranto.config.js +21 -17
- package/dist/module/tsconfig.module.tsbuildinfo +1 -1
- package/dist/prebuild/App.css +94 -121
- package/dist/prebuild/App.js +44601 -11225
- package/dist/prebuild/testeranto.mjs +3113 -2256
- package/dist/types/design-editor/DesignEditor.d.ts +1 -18
- package/dist/types/src/App.d.ts +18 -0
- package/dist/types/src/PM/PM_WithBuild.d.ts +13 -0
- package/dist/types/src/PM/PM_WithEslintAndTsc.d.ts +2 -4
- package/dist/types/src/PM/PM_WithGit.d.ts +27 -0
- package/dist/types/src/PM/PM_WithProcesses.d.ts +29 -0
- package/dist/types/src/PM/PM_WithWebSocket.d.ts +108 -0
- package/dist/types/src/PM/base.d.ts +1 -1
- package/dist/types/src/PM/index.d.ts +0 -2
- package/dist/types/src/PM/main.d.ts +6 -77
- package/dist/types/src/PM/metafileOutputs.d.ts +0 -0
- package/dist/types/src/PM/node.d.ts +0 -2
- package/dist/types/src/PM/pure.d.ts +0 -2
- package/dist/types/src/PM/types.d.ts +118 -0
- package/dist/types/src/PM/utils.d.ts +35 -0
- package/dist/types/src/PM/web.d.ts +0 -2
- package/dist/types/src/Pure.d.ts +6 -1
- package/dist/types/src/ReportServer.d.ts +0 -1
- package/dist/types/src/ReportServerLib.d.ts +0 -1
- package/dist/types/src/Types.d.ts +1 -0
- package/dist/types/src/components/pure/ArtifactTree.d.ts +0 -0
- package/dist/types/src/components/pure/BuildLogViewer.d.ts +7 -0
- package/dist/types/src/components/pure/DebugEnv.d.ts +2 -0
- package/dist/types/src/components/pure/FileTree.d.ts +6 -0
- package/dist/types/src/components/pure/FileTreeItem.d.ts +8 -0
- package/dist/types/src/components/pure/GitHubLoginButton.d.ts +8 -0
- package/dist/types/src/components/pure/GitIntegrationView.d.ts +1 -0
- package/dist/types/src/components/pure/Settings.d.ts +1 -0
- package/dist/types/src/components/pure/Settings.test.d.ts +1 -0
- package/dist/types/src/components/pure/SignIn.d.ts +1 -0
- package/dist/types/src/components/pure/SingleProcessView.d.ts +10 -0
- package/dist/types/src/components/pure/TestPageView.d.ts +2 -1
- package/dist/types/src/components/pure/TestPageView_utils.d.ts +23 -0
- package/dist/types/src/components/pure/TestTable.d.ts +16 -0
- package/dist/types/src/components/pure/ToastNotification.d.ts +6 -0
- package/dist/types/src/components/pure/UserProfile.d.ts +2 -0
- package/dist/types/src/components/stateful/AuthCallbackPage.d.ts +2 -0
- package/dist/types/src/components/stateful/FileTree.d.ts +0 -8
- package/dist/types/src/components/stateful/GitIntegrationPage.d.ts +1 -0
- package/dist/types/src/hooks/useGitMode.d.ts +7 -0
- package/dist/types/src/lib/BaseSuite.test/mock.d.ts +2 -2
- package/dist/types/src/lib/BaseSuite.test/test.d.ts +4 -3
- package/dist/types/src/lib/Tiposkripto.d.ts +2 -0
- package/dist/types/src/lib/Tiposkripto.test/MockTiposkripto.d.ts +3 -0
- package/dist/types/src/lib/Tiposkripto.test/Tiposkripto.types.d.ts +5 -0
- package/dist/types/src/lib/index.d.ts +6 -0
- package/dist/types/src/services/FileService.d.ts +34 -0
- package/dist/types/src/services/GitHubAuthService.d.ts +32 -0
- package/dist/types/src/utils/api.d.ts +1 -0
- package/dist/types/src/utils/gitTest.d.ts +11 -0
- package/dist/types/src/utils.d.ts +3 -3
- package/dist/types/tsconfig.types.tsbuildinfo +1 -1
- package/example/__pycache__/Calculator.cpython-313.pyc +0 -0
- package/example/vendor/github.com/adamwong246/testeranto/src/golingvu/README.md +187 -0
- package/example/vendor/github.com/adamwong246/testeranto/src/golingvu/base_given.go +163 -0
- package/example/vendor/github.com/adamwong246/testeranto/src/golingvu/base_suite.go +85 -0
- package/example/vendor/github.com/adamwong246/testeranto/src/golingvu/base_then.go +21 -0
- package/example/vendor/github.com/adamwong246/testeranto/src/golingvu/base_when.go +21 -0
- package/example/vendor/github.com/adamwong246/testeranto/src/golingvu/golingvu.go +554 -0
- package/example/vendor/github.com/adamwong246/testeranto/src/golingvu/test_adapter.go +33 -0
- package/example/vendor/github.com/adamwong246/testeranto/src/golingvu/types.go +72 -0
- package/example/vendor/modules.txt +5 -0
- package/git-integration-plan.md +395 -0
- package/package.json +26 -14
- package/src/App.tsx +169 -18
- package/src/PM/PM_WithBuild.ts +171 -0
- package/src/PM/PM_WithEslintAndTsc.ts +109 -86
- package/src/PM/PM_WithGit.ts +585 -0
- package/src/PM/PM_WithProcesses.ts +639 -0
- package/src/PM/PM_WithWebSocket.ts +631 -0
- package/src/PM/base.ts +63 -1
- package/src/PM/index.ts +8 -5
- package/src/PM/main.ts +672 -2050
- package/src/PM/metafileOutputs.ts +90 -0
- package/src/PM/node.ts +18 -18
- package/src/PM/pure.ts +5 -13
- package/src/PM/types.ts +145 -0
- package/src/PM/utils.ts +256 -0
- package/src/PM/web.ts +8 -8
- package/src/README.md +122 -0
- package/src/ReportServer.ts +0 -12
- package/src/ReportServerLib.ts +0 -147
- package/src/Types.ts +1 -0
- package/src/app.scss +14 -164
- package/src/components/pure/AppFrame.tsx +237 -71
- package/src/components/pure/ArtifactTree.tsx +82 -0
- package/src/components/pure/BuildLogViewer.tsx +168 -0
- package/src/components/pure/DebugEnv.tsx +30 -0
- package/src/components/pure/FileTree.tsx +58 -0
- package/src/components/pure/FileTreeItem.tsx +49 -0
- package/src/components/pure/GitHubLoginButton.tsx +31 -0
- package/src/components/pure/GitIntegrationView.tsx +443 -0
- package/src/components/pure/ProcessManager.tsx +6 -5
- package/src/components/pure/ProcessManagerView.tsx +162 -166
- package/src/components/pure/ProjectPageView.tsx +6 -224
- package/src/components/pure/Settings.test.tsx +34 -0
- package/src/components/pure/Settings.tsx +163 -0
- package/src/components/pure/SignIn.tsx +33 -0
- package/src/components/pure/SingleProcessView.tsx +231 -235
- package/src/components/pure/TestPageView.test/specification.ts +1 -0
- package/src/components/pure/TestPageView.tsx +317 -826
- package/src/components/pure/TestPageView_utils.tsx +285 -0
- package/src/components/pure/TestTable.tsx +88 -0
- package/src/components/pure/ToastNotification.tsx +19 -0
- package/src/components/pure/UserProfile.tsx +44 -0
- package/src/components/stateful/AuthCallbackPage.tsx +21 -0
- package/src/components/stateful/FeaturesReporter.tsx +3 -1
- package/src/components/stateful/FileTree.tsx +58 -58
- package/src/components/stateful/GitIntegrationPage.tsx +8 -0
- package/src/components/stateful/ProcessManagerPage.tsx +13 -17
- package/src/components/stateful/ProjectPage.tsx +6 -5
- package/src/components/stateful/ProjectsPage.tsx +17 -19
- package/src/components/stateful/SVGEditor/CircleForm.tsx +68 -0
- package/src/components/stateful/SVGEditor/GroupForm.tsx +56 -0
- package/src/components/stateful/SVGEditor/RectForm.tsx +74 -0
- package/src/components/stateful/SVGEditor/SVGAttributeField.tsx +29 -0
- package/src/components/stateful/SVGEditor/SVGAttributesEditor.tsx +73 -0
- package/src/components/stateful/SVGEditor/SVGEditorControls.tsx +45 -0
- package/src/components/stateful/SVGEditor/SVGElementForm.tsx +45 -0
- package/src/components/stateful/SVGEditor/SVGPreview.tsx +225 -0
- package/src/components/stateful/SVGEditor/SVGTextEditor.tsx +166 -0
- package/src/components/stateful/SVGEditor/SVGTree.tsx +159 -0
- package/src/components/stateful/SVGEditor/SVGTypes.ts +36 -0
- package/src/components/stateful/SVGEditor/svg.xsd.xml +3038 -0
- package/src/components/stateful/SVGEditorPage.tsx +503 -0
- package/src/components/stateful/SingleProcessPage.tsx +18 -31
- package/src/components/stateful/TestPage.tsx +25 -22
- package/src/golingvu/golingvu.go +38 -2
- package/src/hooks/useGitMode.ts +20 -0
- package/src/lib/BaseSuite.test/mock.ts +16 -10
- package/src/lib/BaseSuite.test/test.ts +144 -103
- package/src/lib/Tiposkripto.test/MockTiposkripto.ts +178 -14
- package/src/lib/Tiposkripto.test/Tiposkripto.adapter.ts +9 -14
- package/src/lib/Tiposkripto.test/Tiposkripto.implementation.ts +78 -38
- package/src/lib/Tiposkripto.test/Tiposkripto.specification.ts +51 -9
- package/src/lib/Tiposkripto.test/Tiposkripto.types.ts +5 -0
- package/src/lib/Tiposkripto.ts +27 -0
- package/src/lib/index.ts +7 -0
- package/src/lib/pmProxy.test/specification.ts +168 -166
- package/src/pitono/PM/__pycache__/python.cpython-313.pyc +0 -0
- package/src/pitono/__pycache__/Pitono.cpython-313.pyc +0 -0
- package/src/pitono/__pycache__/__init__.cpython-313.pyc +0 -0
- package/src/pitono/__pycache__/base_given.cpython-313.pyc +0 -0
- package/src/pitono/__pycache__/base_suite.cpython-313.pyc +0 -0
- package/src/pitono/__pycache__/base_then.cpython-313.pyc +0 -0
- package/src/pitono/__pycache__/base_when.cpython-313.pyc +0 -0
- package/src/pitono/__pycache__/core_generator.cpython-313.pyc +0 -0
- package/src/pitono/__pycache__/simple_adapter.cpython-313.pyc +0 -0
- package/src/pitono/__pycache__/types.cpython-313.pyc +0 -0
- package/src/services/FileService.ts +542 -0
- package/src/services/GitHubAuthService.ts +240 -0
- package/src/testeranto.ts +62 -140
- package/src/utils/api.ts +15 -13
- package/src/utils/gitTest.ts +29 -0
- package/src/utils.ts +21 -12
- package/testeranto/App.css +94 -121
- package/testeranto/App.js +44601 -11225
- package/testeranto/bundles/golang/core/Calculator.golingvu.go +53 -0
- package/testeranto/bundles/golang/core/Calculator.golingvu.golingvu.go +53 -0
- package/testeranto/bundles/node/core/chunk-RIM6RECA.mjs +1170 -0
- package/testeranto/bundles/node/core/chunk-VXVF7WFO.mjs +4321 -0
- package/testeranto/bundles/node/core/example/Calculator.test.mjs +503 -0
- package/testeranto/bundles/node/core/src/lib/BaseSuite.test/node.test.mjs +94 -1231
- package/testeranto/bundles/node/core/src/lib/TipoSkripto.test/TipoSkripto.mjs +574 -0
- package/testeranto/bundles/node/core/src/lib/pmProxy.test/index.mjs +482 -0
- package/testeranto/bundles/pure/core/chunk-XYOCRDEQ.mjs +1080 -0
- package/testeranto/bundles/pure/core/src/Pure.test.mjs +410 -0
- package/testeranto/bundles/pure/core/src/lib/BaseSuite.test/pure.test.mjs +93 -1146
- package/testeranto/bundles/python/core/Calculator.pitono.test.py +24 -0
- package/testeranto/bundles/python/core/test_example.py +24 -0
- package/testeranto/bundles/web/core/MPLUSRounded1c-Black-O75GP5JI.ttf +0 -0
- package/testeranto/bundles/web/core/MPLUSRounded1c-Bold-R524Q5BH.ttf +0 -0
- package/testeranto/bundles/web/core/MPLUSRounded1c-ExtraBold-C6GRMYVT.ttf +0 -0
- package/testeranto/bundles/web/core/MPLUSRounded1c-Light-WKN65Y2C.ttf +0 -0
- package/testeranto/bundles/web/core/MPLUSRounded1c-Medium-ZC4DWL7C.ttf +0 -0
- package/testeranto/bundles/web/core/MPLUSRounded1c-Regular-DT6EKZ3S.ttf +0 -0
- package/testeranto/bundles/web/core/MPLUSRounded1c-Thin-YWDNVG6M.ttf +0 -0
- package/testeranto/bundles/web/core/chunk-DFRN4SYZ.mjs +2297 -0
- package/testeranto/bundles/web/core/chunk-JMDLMADH.mjs +27996 -0
- package/testeranto/bundles/web/core/chunk-LQMU5NCG.mjs +3082 -0
- package/testeranto/bundles/web/core/chunk-Q5TONB2Z.mjs +6874 -0
- package/testeranto/bundles/web/core/src/components/pure/FeaturesReporterView.test/index.mjs +164 -0
- package/testeranto/bundles/web/core/src/components/pure/ModalContent.test/index.css +11697 -0
- package/testeranto/bundles/web/core/src/components/pure/ModalContent.test/index.mjs +336 -0
- package/testeranto/bundles/web/core/src/components/pure/ProjectPageView.test/index.css +11697 -0
- package/testeranto/bundles/web/core/src/components/pure/ProjectPageView.test/index.mjs +517 -0
- package/testeranto/bundles/web/core/src/lib/BaseSuite.test/web.test.mjs +107 -1134
- package/testeranto/metafiles/golang/core.json +3 -3
- package/testeranto/metafiles/node/core.json +474 -31
- package/testeranto/metafiles/pure/core.json +144 -28
- package/testeranto/metafiles/python/core.json +11 -0
- package/testeranto/metafiles/web/core.json +15829 -45
- package/testeranto/reports/core/config.json +40 -0
- package/testeranto/reports/core/src/Pure.test/pure/exit.log +0 -0
- package/testeranto/reports/core/src/Pure.test/pure/lint_errors.txt +0 -0
- package/testeranto/reports/core/src/Pure.test/pure/prompt.txt +14 -0
- package/testeranto/reports/core/src/Pure.test/pure/type_errors.txt +73 -0
- package/testeranto/reports/core/src/components/pure/FeaturesReporterView.test/index/web/debug.log +0 -0
- package/testeranto/reports/core/src/components/pure/FeaturesReporterView.test/index/web/error.log +91 -0
- package/testeranto/reports/core/src/components/pure/FeaturesReporterView.test/index/web/exit.log +1 -0
- package/testeranto/reports/core/src/components/pure/FeaturesReporterView.test/index/web/info.log +2 -0
- package/testeranto/reports/core/src/components/pure/FeaturesReporterView.test/index/web/tests.json +68 -0
- package/testeranto/reports/core/src/components/pure/FeaturesReporterView.test/index/web/warn.log +0 -0
- package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/debug.log +0 -0
- package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/error.log +30 -0
- package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/exit.log +1 -0
- package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/info.log +2 -0
- package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/tests.json +88 -0
- package/testeranto/reports/core/src/components/pure/ProjectPageView.test/index/web/warn.log +0 -0
- package/testeranto/reports/core/src/lib/BaseSuite.test/node.test/node/lint_errors.txt +0 -6
- package/testeranto/reports/core/src/lib/BaseSuite.test/node.test/node/prompt.txt +0 -11
- package/testeranto/reports/core/src/lib/BaseSuite.test/node.test/node/stdout.log +1 -0
- package/testeranto/reports/core/src/lib/BaseSuite.test/node.test/node/tests.json +1 -1
- package/testeranto/reports/core/src/lib/BaseSuite.test/node.test/node/type_errors.txt +35 -38
- package/testeranto/reports/core/src/lib/BaseSuite.test/pure.test/pure/lint_errors.txt +0 -2
- package/testeranto/reports/core/src/lib/BaseSuite.test/pure.test/pure/prompt.txt +0 -10
- package/testeranto/reports/core/src/lib/BaseSuite.test/pure.test/pure/type_errors.txt +40 -38
- package/testeranto/reports/core/src/lib/BaseSuite.test/web.test/web/tests.json +1 -1
- package/testeranto/reports/core/src/lib/TipoSkripto.test/TipoSkripto/node/exit.log +1 -0
- package/testeranto/reports/core/src/lib/TipoSkripto.test/TipoSkripto/node/lint_errors.txt +0 -0
- package/testeranto/reports/core/src/lib/TipoSkripto.test/TipoSkripto/node/message.txt +17 -0
- package/testeranto/reports/core/src/lib/TipoSkripto.test/TipoSkripto/node/prompt.txt +17 -0
- package/testeranto/reports/core/src/lib/TipoSkripto.test/TipoSkripto/node/stderr.log +55 -0
- package/testeranto/reports/core/src/lib/TipoSkripto.test/TipoSkripto/node/stdout.log +191 -0
- package/testeranto/reports/core/src/lib/TipoSkripto.test/TipoSkripto/node/type_errors.txt +71 -0
- package/testeranto/reports/core/src/lib/pmProxy.test/index/node/exit.log +1 -0
- package/testeranto/reports/core/src/lib/pmProxy.test/index/node/lint_errors.txt +15 -0
- package/testeranto/reports/core/src/lib/pmProxy.test/index/node/message.txt +17 -0
- package/testeranto/reports/core/src/lib/pmProxy.test/index/node/prompt.txt +17 -0
- package/testeranto/reports/core/src/lib/pmProxy.test/index/node/stderr.log +20 -0
- package/testeranto/reports/core/src/lib/pmProxy.test/index/node/stdout.log +4 -0
- package/testeranto/reports/core/src/lib/pmProxy.test/index/node/type_errors.txt +49 -0
- package/testeranto/reports/core/summary.json +34 -6
- package/testeranto.config.ts +26 -20
- package/tsc.log +141 -91
- package/tsconfig.json +6 -2
- package/dist/types/design-editor/server.d.ts +0 -1
- package/testeranto/bundles/web/core/src/lib/BaseSuite.test/web.test.html +0 -15
- package/testeranto/reports/core/src/lib/BaseSuite.test/web.test/web/lint_errors.txt +0 -2
- package/testeranto/reports/core/src/lib/BaseSuite.test/web.test/web/prompt.txt +0 -25
- package/testeranto/reports/core/src/lib/BaseSuite.test/web.test/web/type_errors.txt +0 -56
- /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
|
-
|
|
2
|
-
import
|
|
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
|
-
|
|
7
|
-
|
|
8
|
-
|
|
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
|
-
|
|
41
|
-
|
|
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
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
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
|
-
}, [
|
|
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
|
|
234
|
-
<
|
|
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
|
|
40
|
-
|
|
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
|
-
|
|
52
|
-
|
|
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
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
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
|
-
}, [
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
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;
|