chili3d 0.6.1

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 (472) hide show
  1. package/.github/workflows/main.yml +26 -0
  2. package/.vscode/c_cpp_properties.json +30 -0
  3. package/.vscode/launch.json +21 -0
  4. package/.vscode/settings.json +8 -0
  5. package/Dockerfile +7 -0
  6. package/LICENSE +661 -0
  7. package/README.md +184 -0
  8. package/biome.json +67 -0
  9. package/compose.yml +7 -0
  10. package/cpp/CMakeLists.txt +96 -0
  11. package/cpp/CMakePresets.json +43 -0
  12. package/cpp/README.md +21 -0
  13. package/cpp/src/converter.cpp +413 -0
  14. package/cpp/src/factory.cpp +612 -0
  15. package/cpp/src/geometry.cpp +204 -0
  16. package/cpp/src/mesher.cpp +330 -0
  17. package/cpp/src/opencascade.cpp +414 -0
  18. package/cpp/src/shape.cpp +447 -0
  19. package/cpp/src/shared.cpp +83 -0
  20. package/cpp/src/shared.hpp +211 -0
  21. package/cpp/src/transient.cpp +29 -0
  22. package/cpp/src/utils.cpp +114 -0
  23. package/cpp/src/utils.hpp +25 -0
  24. package/cpp/test/index.html +146 -0
  25. package/package.json +49 -0
  26. package/packages/chili/package.json +11 -0
  27. package/packages/chili/src/application.ts +200 -0
  28. package/packages/chili/src/bodys/arc.ts +61 -0
  29. package/packages/chili/src/bodys/boolean.ts +32 -0
  30. package/packages/chili/src/bodys/box.ts +73 -0
  31. package/packages/chili/src/bodys/circle.ts +57 -0
  32. package/packages/chili/src/bodys/cone.ts +64 -0
  33. package/packages/chili/src/bodys/cylinder.ts +69 -0
  34. package/packages/chili/src/bodys/ellipse.ts +85 -0
  35. package/packages/chili/src/bodys/face.ts +72 -0
  36. package/packages/chili/src/bodys/fuse.ts +44 -0
  37. package/packages/chili/src/bodys/index.ts +16 -0
  38. package/packages/chili/src/bodys/line.ts +48 -0
  39. package/packages/chili/src/bodys/polygon.ts +40 -0
  40. package/packages/chili/src/bodys/prism.ts +49 -0
  41. package/packages/chili/src/bodys/pyramid.ts +64 -0
  42. package/packages/chili/src/bodys/rect.ts +69 -0
  43. package/packages/chili/src/bodys/revolve.ts +54 -0
  44. package/packages/chili/src/bodys/sphere.ts +48 -0
  45. package/packages/chili/src/bodys/sweep.ts +67 -0
  46. package/packages/chili/src/bodys/wire.ts +36 -0
  47. package/packages/chili/src/commands/application/index.ts +10 -0
  48. package/packages/chili/src/commands/application/newDocument.ts +17 -0
  49. package/packages/chili/src/commands/application/openDocument.ts +35 -0
  50. package/packages/chili/src/commands/application/performanceTest.ts +64 -0
  51. package/packages/chili/src/commands/application/saveDocument.ts +24 -0
  52. package/packages/chili/src/commands/application/toFile.ts +35 -0
  53. package/packages/chili/src/commands/application/toggleDynamicWorkplane.ts +15 -0
  54. package/packages/chili/src/commands/application/wechatGroup.ts +42 -0
  55. package/packages/chili/src/commands/boolean.ts +109 -0
  56. package/packages/chili/src/commands/create/arc.ts +110 -0
  57. package/packages/chili/src/commands/create/bezier.ts +116 -0
  58. package/packages/chili/src/commands/create/box.ts +59 -0
  59. package/packages/chili/src/commands/create/circle.ts +54 -0
  60. package/packages/chili/src/commands/create/cone.ts +104 -0
  61. package/packages/chili/src/commands/create/converter.ts +159 -0
  62. package/packages/chili/src/commands/create/copySubShape.ts +37 -0
  63. package/packages/chili/src/commands/create/curveProjection.ts +61 -0
  64. package/packages/chili/src/commands/create/cylinder.ts +96 -0
  65. package/packages/chili/src/commands/create/ellipse.ts +95 -0
  66. package/packages/chili/src/commands/create/group.ts +205 -0
  67. package/packages/chili/src/commands/create/index.ts +26 -0
  68. package/packages/chili/src/commands/create/line.ts +61 -0
  69. package/packages/chili/src/commands/create/loft.ts +149 -0
  70. package/packages/chili/src/commands/create/offset.ts +131 -0
  71. package/packages/chili/src/commands/create/polygon.ts +104 -0
  72. package/packages/chili/src/commands/create/prism.ts +52 -0
  73. package/packages/chili/src/commands/create/pyramid.ts +56 -0
  74. package/packages/chili/src/commands/create/rect.ts +105 -0
  75. package/packages/chili/src/commands/create/revolve.ts +62 -0
  76. package/packages/chili/src/commands/create/section.ts +31 -0
  77. package/packages/chili/src/commands/create/sphere.ts +48 -0
  78. package/packages/chili/src/commands/create/sweep.ts +39 -0
  79. package/packages/chili/src/commands/create/thickSolid.ts +50 -0
  80. package/packages/chili/src/commands/createActCommand.ts +26 -0
  81. package/packages/chili/src/commands/createCommand.ts +41 -0
  82. package/packages/chili/src/commands/delete.ts +38 -0
  83. package/packages/chili/src/commands/folder.ts +18 -0
  84. package/packages/chili/src/commands/importExport.ts +97 -0
  85. package/packages/chili/src/commands/index.ts +17 -0
  86. package/packages/chili/src/commands/measure/angle.ts +130 -0
  87. package/packages/chili/src/commands/measure/index.ts +6 -0
  88. package/packages/chili/src/commands/measure/length.ts +57 -0
  89. package/packages/chili/src/commands/measure/select.module.css +68 -0
  90. package/packages/chili/src/commands/measure/select.ts +228 -0
  91. package/packages/chili/src/commands/modify/array.ts +447 -0
  92. package/packages/chili/src/commands/modify/break.ts +78 -0
  93. package/packages/chili/src/commands/modify/brush.ts +100 -0
  94. package/packages/chili/src/commands/modify/chamfer.ts +70 -0
  95. package/packages/chili/src/commands/modify/explode.ts +91 -0
  96. package/packages/chili/src/commands/modify/fillet.ts +69 -0
  97. package/packages/chili/src/commands/modify/index.ts +16 -0
  98. package/packages/chili/src/commands/modify/mirror.ts +49 -0
  99. package/packages/chili/src/commands/modify/move.ts +39 -0
  100. package/packages/chili/src/commands/modify/removeFeature.ts +56 -0
  101. package/packages/chili/src/commands/modify/removeSubShapes.ts +44 -0
  102. package/packages/chili/src/commands/modify/rotate.ts +112 -0
  103. package/packages/chili/src/commands/modify/split.ts +81 -0
  104. package/packages/chili/src/commands/modify/transformedCommand.ts +100 -0
  105. package/packages/chili/src/commands/modify/trim.ts +254 -0
  106. package/packages/chili/src/commands/multistepCommand.ts +125 -0
  107. package/packages/chili/src/commands/redo.ts +16 -0
  108. package/packages/chili/src/commands/undo.ts +16 -0
  109. package/packages/chili/src/commands/workingPlane.ts +150 -0
  110. package/packages/chili/src/comparers/NumberEqualityComparer.ts +12 -0
  111. package/packages/chili/src/comparers/XYZEqualityComparer.ts +12 -0
  112. package/packages/chili/src/comparers/index.ts +5 -0
  113. package/packages/chili/src/document.ts +145 -0
  114. package/packages/chili/src/editEventHandler.ts +20 -0
  115. package/packages/chili/src/index.ts +12 -0
  116. package/packages/chili/src/selection.ts +178 -0
  117. package/packages/chili/src/services/commandService.ts +105 -0
  118. package/packages/chili/src/services/editorService.ts +46 -0
  119. package/packages/chili/src/services/hotkeyService.ts +102 -0
  120. package/packages/chili/src/services/index.ts +6 -0
  121. package/packages/chili/src/snap/dimension.ts +33 -0
  122. package/packages/chili/src/snap/handlers/angleSnapEventHandler.ts +60 -0
  123. package/packages/chili/src/snap/handlers/index.ts +7 -0
  124. package/packages/chili/src/snap/handlers/lengthSnapEventHandler.ts +117 -0
  125. package/packages/chili/src/snap/handlers/pointSnapEventHandler.ts +176 -0
  126. package/packages/chili/src/snap/handlers/snapEventHandler.ts +288 -0
  127. package/packages/chili/src/snap/index.ts +6 -0
  128. package/packages/chili/src/snap/snap.ts +50 -0
  129. package/packages/chili/src/snap/snaps/axisSnap.ts +57 -0
  130. package/packages/chili/src/snap/snaps/baseSnap.ts +69 -0
  131. package/packages/chili/src/snap/snaps/featurePointStrategy.ts +64 -0
  132. package/packages/chili/src/snap/snaps/index.ts +7 -0
  133. package/packages/chili/src/snap/snaps/objectSnap.ts +264 -0
  134. package/packages/chili/src/snap/snaps/planeSnap.ts +55 -0
  135. package/packages/chili/src/snap/snaps/pointOnCurveSnap.ts +24 -0
  136. package/packages/chili/src/snap/tracking/axis.ts +32 -0
  137. package/packages/chili/src/snap/tracking/axisTracking.ts +46 -0
  138. package/packages/chili/src/snap/tracking/index.ts +6 -0
  139. package/packages/chili/src/snap/tracking/objectTracking.ts +90 -0
  140. package/packages/chili/src/snap/tracking/trackingBase.ts +40 -0
  141. package/packages/chili/src/snap/tracking/trackingSnap.ts +201 -0
  142. package/packages/chili/src/step/angleStep.ts +32 -0
  143. package/packages/chili/src/step/index.ts +8 -0
  144. package/packages/chili/src/step/lengthStep.ts +32 -0
  145. package/packages/chili/src/step/pointStep.ts +87 -0
  146. package/packages/chili/src/step/selectStep.ts +130 -0
  147. package/packages/chili/src/step/step.ts +55 -0
  148. package/packages/chili/src/utils.ts +19 -0
  149. package/packages/chili/test/command.test.ts +4 -0
  150. package/packages/chili-builder/package.json +13 -0
  151. package/packages/chili-builder/src/additionalModule.ts +15 -0
  152. package/packages/chili-builder/src/appBuilder.ts +176 -0
  153. package/packages/chili-builder/src/defaultDataExchange.ts +152 -0
  154. package/packages/chili-builder/src/index.ts +5 -0
  155. package/packages/chili-builder/src/ribbon.ts +129 -0
  156. package/packages/chili-controls/package.json +9 -0
  157. package/packages/chili-controls/src/collection.ts +96 -0
  158. package/packages/chili-controls/src/controls.ts +83 -0
  159. package/packages/chili-controls/src/converters/colorConverter.ts +39 -0
  160. package/packages/chili-controls/src/converters/index.ts +8 -0
  161. package/packages/chili-controls/src/converters/numberConverter.ts +15 -0
  162. package/packages/chili-controls/src/converters/stringConverter.ts +13 -0
  163. package/packages/chili-controls/src/converters/urlConverter.ts +10 -0
  164. package/packages/chili-controls/src/converters/xyzConverter.ts +28 -0
  165. package/packages/chili-controls/src/expander/expander.module.css +38 -0
  166. package/packages/chili-controls/src/expander/expander.ts +59 -0
  167. package/packages/chili-controls/src/expander/index.ts +4 -0
  168. package/packages/chili-controls/src/htmlProps.ts +10 -0
  169. package/packages/chili-controls/src/index.ts +10 -0
  170. package/packages/chili-controls/src/radioGroup.module.css +20 -0
  171. package/packages/chili-controls/src/radioGroup.ts +54 -0
  172. package/packages/chili-controls/src/utils.ts +20 -0
  173. package/packages/chili-controls/test/converter.test.ts +70 -0
  174. package/packages/chili-controls/test/styleMock.js +4 -0
  175. package/packages/chili-core/package.json +7 -0
  176. package/packages/chili-core/src/application.ts +38 -0
  177. package/packages/chili-core/src/command/command.ts +154 -0
  178. package/packages/chili-core/src/command/commandKeys.ts +8 -0
  179. package/packages/chili-core/src/command/decarator.ts +43 -0
  180. package/packages/chili-core/src/command/index.ts +6 -0
  181. package/packages/chili-core/src/config.ts +145 -0
  182. package/packages/chili-core/src/constants.ts +8 -0
  183. package/packages/chili-core/src/dataExchange.ts +12 -0
  184. package/packages/chili-core/src/document.ts +25 -0
  185. package/packages/chili-core/src/editor.ts +12 -0
  186. package/packages/chili-core/src/foundation/asyncController.ts +55 -0
  187. package/packages/chili-core/src/foundation/binding.ts +132 -0
  188. package/packages/chili-core/src/foundation/collection.ts +208 -0
  189. package/packages/chili-core/src/foundation/converter.ts +9 -0
  190. package/packages/chili-core/src/foundation/deepObserver.ts +154 -0
  191. package/packages/chili-core/src/foundation/disposable.ts +18 -0
  192. package/packages/chili-core/src/foundation/dto/index.ts +9 -0
  193. package/packages/chili-core/src/foundation/equalityComparer.ts +6 -0
  194. package/packages/chili-core/src/foundation/gc.ts +36 -0
  195. package/packages/chili-core/src/foundation/history.ts +237 -0
  196. package/packages/chili-core/src/foundation/id.ts +25 -0
  197. package/packages/chili-core/src/foundation/index.ts +26 -0
  198. package/packages/chili-core/src/foundation/lazy.ts +18 -0
  199. package/packages/chili-core/src/foundation/linkedList.ts +141 -0
  200. package/packages/chili-core/src/foundation/logger.ts +45 -0
  201. package/packages/chili-core/src/foundation/messageType.ts +8 -0
  202. package/packages/chili-core/src/foundation/objectStorage.ts +50 -0
  203. package/packages/chili-core/src/foundation/observer.ts +147 -0
  204. package/packages/chili-core/src/foundation/precision.ts +8 -0
  205. package/packages/chili-core/src/foundation/pubsub.ts +74 -0
  206. package/packages/chili-core/src/foundation/result.ts +69 -0
  207. package/packages/chili-core/src/foundation/storage.ts +10 -0
  208. package/packages/chili-core/src/foundation/transaction.ts +77 -0
  209. package/packages/chili-core/src/foundation/utils/debounce.ts +15 -0
  210. package/packages/chili-core/src/foundation/utils/download.ts +16 -0
  211. package/packages/chili-core/src/foundation/utils/index.ts +6 -0
  212. package/packages/chili-core/src/foundation/utils/readFileAsync.ts +84 -0
  213. package/packages/chili-core/src/i18n/i18n.ts +107 -0
  214. package/packages/chili-core/src/i18n/index.ts +5 -0
  215. package/packages/chili-core/src/i18n/keys.ts +265 -0
  216. package/packages/chili-core/src/index.ts +26 -0
  217. package/packages/chili-core/src/material.ts +269 -0
  218. package/packages/chili-core/src/math/boundingBox.ts +226 -0
  219. package/packages/chili-core/src/math/index.ts +14 -0
  220. package/packages/chili-core/src/math/line.ts +55 -0
  221. package/packages/chili-core/src/math/lineSegment.ts +166 -0
  222. package/packages/chili-core/src/math/mathUtils.ts +45 -0
  223. package/packages/chili-core/src/math/matrix4.ts +414 -0
  224. package/packages/chili-core/src/math/plane.ts +96 -0
  225. package/packages/chili-core/src/math/planeAngle.ts +53 -0
  226. package/packages/chili-core/src/math/quaternion.ts +131 -0
  227. package/packages/chili-core/src/math/ray.ts +30 -0
  228. package/packages/chili-core/src/math/xy.ts +104 -0
  229. package/packages/chili-core/src/math/xyz.ts +181 -0
  230. package/packages/chili-core/src/model/component.ts +305 -0
  231. package/packages/chili-core/src/model/facebaseNode.ts +17 -0
  232. package/packages/chili-core/src/model/folderNode.ts +289 -0
  233. package/packages/chili-core/src/model/geometryNode.ts +185 -0
  234. package/packages/chili-core/src/model/groupNode.ts +19 -0
  235. package/packages/chili-core/src/model/index.ts +12 -0
  236. package/packages/chili-core/src/model/meshNode.ts +53 -0
  237. package/packages/chili-core/src/model/node.ts +315 -0
  238. package/packages/chili-core/src/model/shapeNode.ts +195 -0
  239. package/packages/chili-core/src/model/visualNode.ts +39 -0
  240. package/packages/chili-core/src/modelManager.ts +147 -0
  241. package/packages/chili-core/src/navigation.ts +58 -0
  242. package/packages/chili-core/src/property.ts +60 -0
  243. package/packages/chili-core/src/selection.ts +33 -0
  244. package/packages/chili-core/src/selectionFilter.ts +28 -0
  245. package/packages/chili-core/src/serialize/index.ts +4 -0
  246. package/packages/chili-core/src/serialize/serializer.ts +231 -0
  247. package/packages/chili-core/src/service.ts +10 -0
  248. package/packages/chili-core/src/shape/curve.ts +174 -0
  249. package/packages/chili-core/src/shape/geometry.ts +17 -0
  250. package/packages/chili-core/src/shape/index.ts +12 -0
  251. package/packages/chili-core/src/shape/lineType.ts +7 -0
  252. package/packages/chili-core/src/shape/meshData.ts +347 -0
  253. package/packages/chili-core/src/shape/shape.ts +104 -0
  254. package/packages/chili-core/src/shape/shapeConverter.ts +17 -0
  255. package/packages/chili-core/src/shape/shapeFactory.ts +58 -0
  256. package/packages/chili-core/src/shape/shapeType.ts +75 -0
  257. package/packages/chili-core/src/shape/surface.ts +154 -0
  258. package/packages/chili-core/src/snapType.ts +32 -0
  259. package/packages/chili-core/src/ui/button.ts +16 -0
  260. package/packages/chili-core/src/ui/combobox.ts +27 -0
  261. package/packages/chili-core/src/ui/dialog.ts +7 -0
  262. package/packages/chili-core/src/ui/index.ts +8 -0
  263. package/packages/chili-core/src/ui/ribbon.ts +15 -0
  264. package/packages/chili-core/src/ui/window.ts +13 -0
  265. package/packages/chili-core/src/visual/act.ts +59 -0
  266. package/packages/chili-core/src/visual/cameraController.ts +22 -0
  267. package/packages/chili-core/src/visual/cursorType.ts +4 -0
  268. package/packages/chili-core/src/visual/detectedData.ts +14 -0
  269. package/packages/chili-core/src/visual/eventHandler.ts +15 -0
  270. package/packages/chili-core/src/visual/highlighter.ts +16 -0
  271. package/packages/chili-core/src/visual/index.ts +20 -0
  272. package/packages/chili-core/src/visual/meshExporter.ts +11 -0
  273. package/packages/chili-core/src/visual/meshUtils.ts +276 -0
  274. package/packages/chili-core/src/visual/textGenerator.ts +8 -0
  275. package/packages/chili-core/src/visual/view.ts +80 -0
  276. package/packages/chili-core/src/visual/viewGizmo.ts +8 -0
  277. package/packages/chili-core/src/visual/viewport.ts +10 -0
  278. package/packages/chili-core/src/visual/visual.ts +24 -0
  279. package/packages/chili-core/src/visual/visualContext.ts +29 -0
  280. package/packages/chili-core/src/visual/visualFactory.ts +10 -0
  281. package/packages/chili-core/src/visual/visualObject.ts +25 -0
  282. package/packages/chili-core/src/visual/visualShape.ts +30 -0
  283. package/packages/chili-core/test/binding.test.ts +95 -0
  284. package/packages/chili-core/test/boundingBox.test.ts +60 -0
  285. package/packages/chili-core/test/collection.test.ts +53 -0
  286. package/packages/chili-core/test/history.test.ts +42 -0
  287. package/packages/chili-core/test/line.test.ts +75 -0
  288. package/packages/chili-core/test/linesegment.test.ts +98 -0
  289. package/packages/chili-core/test/linkedList.test.ts +82 -0
  290. package/packages/chili-core/test/math.test.ts +34 -0
  291. package/packages/chili-core/test/matrix.test.ts +129 -0
  292. package/packages/chili-core/test/node.test.ts +122 -0
  293. package/packages/chili-core/test/nodeList.test.ts +247 -0
  294. package/packages/chili-core/test/observer.test.ts +91 -0
  295. package/packages/chili-core/test/plane.test.ts +31 -0
  296. package/packages/chili-core/test/quaternion.test.ts +14 -0
  297. package/packages/chili-core/test/result.test.ts +24 -0
  298. package/packages/chili-core/test/serializer.test.ts +58 -0
  299. package/packages/chili-core/test/snapType.test.ts +10 -0
  300. package/packages/chili-core/test/task.test.ts +41 -0
  301. package/packages/chili-core/test/testDocument.ts +70 -0
  302. package/packages/chili-core/test/transaction.test.ts +42 -0
  303. package/packages/chili-core/test/visual.test.ts +42 -0
  304. package/packages/chili-core/test/xyz.test.ts +260 -0
  305. package/packages/chili-geo/package.json +9 -0
  306. package/packages/chili-geo/src/index.ts +4 -0
  307. package/packages/chili-geo/src/utils.ts +113 -0
  308. package/packages/chili-i18n/package.json +9 -0
  309. package/packages/chili-i18n/src/en.ts +270 -0
  310. package/packages/chili-i18n/src/index.ts +8 -0
  311. package/packages/chili-i18n/src/pt-br.ts +67 -0
  312. package/packages/chili-i18n/src/zh-cn.ts +269 -0
  313. package/packages/chili-storage/package.json +9 -0
  314. package/packages/chili-storage/src/index.ts +4 -0
  315. package/packages/chili-storage/src/indexedDBStorage.ts +150 -0
  316. package/packages/chili-three/package.json +13 -0
  317. package/packages/chili-three/src/cameraController.ts +335 -0
  318. package/packages/chili-three/src/common.ts +65 -0
  319. package/packages/chili-three/src/constants.ts +12 -0
  320. package/packages/chili-three/src/highlightable.ts +13 -0
  321. package/packages/chili-three/src/index.ts +4 -0
  322. package/packages/chili-three/src/meshExporter.ts +69 -0
  323. package/packages/chili-three/src/outlinePass.js +340 -0
  324. package/packages/chili-three/src/texture_points.jpg +0 -0
  325. package/packages/chili-three/src/threeGeometry.ts +207 -0
  326. package/packages/chili-three/src/threeGeometryFactory.ts +120 -0
  327. package/packages/chili-three/src/threeHelper.ts +174 -0
  328. package/packages/chili-three/src/threeHighlighter.ts +257 -0
  329. package/packages/chili-three/src/threeView.module.css +39 -0
  330. package/packages/chili-three/src/threeView.ts +669 -0
  331. package/packages/chili-three/src/threeViewEventHandler.ts +193 -0
  332. package/packages/chili-three/src/threeVisual.ts +92 -0
  333. package/packages/chili-three/src/threeVisualContext.ts +435 -0
  334. package/packages/chili-three/src/threeVisualFactory.ts +12 -0
  335. package/packages/chili-three/src/threeVisualObject.ts +442 -0
  336. package/packages/chili-three/src/viewGizmo.ts +305 -0
  337. package/packages/chili-three/test/cameraControls.ts +10 -0
  338. package/packages/chili-three/test/testDocument.ts +68 -0
  339. package/packages/chili-three/test/testEdge.ts +171 -0
  340. package/packages/chili-three/test/testView.ts +78 -0
  341. package/packages/chili-three/test/three.test.ts +44 -0
  342. package/packages/chili-three/test/viewGizmo.ts +12 -0
  343. package/packages/chili-ui/package.json +12 -0
  344. package/packages/chili-ui/src/cursor/draw.cur +0 -0
  345. package/packages/chili-ui/src/cursor/index.ts +17 -0
  346. package/packages/chili-ui/src/dialog.module.css +63 -0
  347. package/packages/chili-ui/src/dialog.ts +42 -0
  348. package/packages/chili-ui/src/editor.module.css +83 -0
  349. package/packages/chili-ui/src/editor.ts +142 -0
  350. package/packages/chili-ui/src/home/home.module.css +301 -0
  351. package/packages/chili-ui/src/home/home.ts +243 -0
  352. package/packages/chili-ui/src/home/index.ts +4 -0
  353. package/packages/chili-ui/src/home/languageSelector.ts +27 -0
  354. package/packages/chili-ui/src/home/navigation3DSelector.ts +27 -0
  355. package/packages/chili-ui/src/home/themeSelector.ts +34 -0
  356. package/packages/chili-ui/src/index.ts +5 -0
  357. package/packages/chili-ui/src/mainWindow.module.css +144 -0
  358. package/packages/chili-ui/src/mainWindow.ts +154 -0
  359. package/packages/chili-ui/src/okCancel.module.css +54 -0
  360. package/packages/chili-ui/src/okCancel.ts +58 -0
  361. package/packages/chili-ui/src/permanent.module.css +44 -0
  362. package/packages/chili-ui/src/permanent.ts +31 -0
  363. package/packages/chili-ui/src/project/index.ts +4 -0
  364. package/packages/chili-ui/src/project/projectView.module.css +37 -0
  365. package/packages/chili-ui/src/project/projectView.ts +77 -0
  366. package/packages/chili-ui/src/project/toolBar.module.css +16 -0
  367. package/packages/chili-ui/src/project/toolBar.ts +73 -0
  368. package/packages/chili-ui/src/project/tree/index.ts +5 -0
  369. package/packages/chili-ui/src/project/tree/tree.module.css +16 -0
  370. package/packages/chili-ui/src/project/tree/tree.ts +265 -0
  371. package/packages/chili-ui/src/project/tree/treeItem.module.css +21 -0
  372. package/packages/chili-ui/src/project/tree/treeItem.ts +89 -0
  373. package/packages/chili-ui/src/project/tree/treeItemGroup.module.css +33 -0
  374. package/packages/chili-ui/src/project/tree/treeItemGroup.ts +85 -0
  375. package/packages/chili-ui/src/project/tree/treeModel.module.css +11 -0
  376. package/packages/chili-ui/src/project/tree/treeModel.ts +20 -0
  377. package/packages/chili-ui/src/property/check.ts +39 -0
  378. package/packages/chili-ui/src/property/colorPorperty.module.css +6 -0
  379. package/packages/chili-ui/src/property/colorProperty.ts +63 -0
  380. package/packages/chili-ui/src/property/common.module.css +14 -0
  381. package/packages/chili-ui/src/property/index.ts +4 -0
  382. package/packages/chili-ui/src/property/input.module.css +19 -0
  383. package/packages/chili-ui/src/property/input.ts +140 -0
  384. package/packages/chili-ui/src/property/material/index.ts +5 -0
  385. package/packages/chili-ui/src/property/material/materialDataContent.ts +44 -0
  386. package/packages/chili-ui/src/property/material/materialEditor.module.css +98 -0
  387. package/packages/chili-ui/src/property/material/materialEditor.ts +147 -0
  388. package/packages/chili-ui/src/property/material/textureEditor.module.css +46 -0
  389. package/packages/chili-ui/src/property/material/textureEditor.ts +61 -0
  390. package/packages/chili-ui/src/property/materialProperty.module.css +30 -0
  391. package/packages/chili-ui/src/property/materialProperty.ts +86 -0
  392. package/packages/chili-ui/src/property/matrixProperty.ts +147 -0
  393. package/packages/chili-ui/src/property/propertyBase.module.css +3 -0
  394. package/packages/chili-ui/src/property/propertyBase.ts +14 -0
  395. package/packages/chili-ui/src/property/propertyView.module.css +36 -0
  396. package/packages/chili-ui/src/property/propertyView.ts +115 -0
  397. package/packages/chili-ui/src/property/utils.ts +48 -0
  398. package/packages/chili-ui/src/ribbon/commandContext.module.css +73 -0
  399. package/packages/chili-ui/src/ribbon/commandContext.ts +239 -0
  400. package/packages/chili-ui/src/ribbon/index.ts +4 -0
  401. package/packages/chili-ui/src/ribbon/ribbon.module.css +286 -0
  402. package/packages/chili-ui/src/ribbon/ribbon.ts +288 -0
  403. package/packages/chili-ui/src/ribbon/ribbonButton.module.css +75 -0
  404. package/packages/chili-ui/src/ribbon/ribbonButton.ts +88 -0
  405. package/packages/chili-ui/src/ribbon/ribbonData.ts +66 -0
  406. package/packages/chili-ui/src/ribbon/ribbonStack.module.css +6 -0
  407. package/packages/chili-ui/src/ribbon/ribbonStack.ts +13 -0
  408. package/packages/chili-ui/src/ribbon/ribbonToggleButton.module.css +3 -0
  409. package/packages/chili-ui/src/ribbon/ribbonToggleButton.ts +6 -0
  410. package/packages/chili-ui/src/statusbar/index.ts +4 -0
  411. package/packages/chili-ui/src/statusbar/snapConfig.module.css +25 -0
  412. package/packages/chili-ui/src/statusbar/snapConfig.ts +92 -0
  413. package/packages/chili-ui/src/statusbar/statusbar.module.css +28 -0
  414. package/packages/chili-ui/src/statusbar/statusbar.ts +54 -0
  415. package/packages/chili-ui/src/toast/index.ts +4 -0
  416. package/packages/chili-ui/src/toast/toast.module.css +27 -0
  417. package/packages/chili-ui/src/toast/toast.ts +39 -0
  418. package/packages/chili-ui/src/viewport/flyout/flyout.module.css +9 -0
  419. package/packages/chili-ui/src/viewport/flyout/flyout.ts +77 -0
  420. package/packages/chili-ui/src/viewport/flyout/index.ts +6 -0
  421. package/packages/chili-ui/src/viewport/flyout/input.module.css +21 -0
  422. package/packages/chili-ui/src/viewport/flyout/input.ts +89 -0
  423. package/packages/chili-ui/src/viewport/flyout/tip.module.css +21 -0
  424. package/packages/chili-ui/src/viewport/flyout/tip.ts +45 -0
  425. package/packages/chili-ui/src/viewport/index.ts +4 -0
  426. package/packages/chili-ui/src/viewport/layoutViewport.module.css +21 -0
  427. package/packages/chili-ui/src/viewport/layoutViewport.ts +76 -0
  428. package/packages/chili-ui/src/viewport/viewport.module.css +179 -0
  429. package/packages/chili-ui/src/viewport/viewport.ts +296 -0
  430. package/packages/chili-vis/package.json +9 -0
  431. package/packages/chili-vis/src/index.ts +7 -0
  432. package/packages/chili-vis/src/nodeSelectionEventHandler.ts +122 -0
  433. package/packages/chili-vis/src/selectionEventHandler.ts +145 -0
  434. package/packages/chili-vis/src/shapeSelectionEventHandler.ts +176 -0
  435. package/packages/chili-vis/src/viewUtils.ts +64 -0
  436. package/packages/chili-wasm/lib/chili-wasm.d.ts +827 -0
  437. package/packages/chili-wasm/lib/chili-wasm.js +5275 -0
  438. package/packages/chili-wasm/lib/chili-wasm.wasm +0 -0
  439. package/packages/chili-wasm/package.json +10 -0
  440. package/packages/chili-wasm/src/converter.ts +124 -0
  441. package/packages/chili-wasm/src/curve.ts +589 -0
  442. package/packages/chili-wasm/src/factory.ts +331 -0
  443. package/packages/chili-wasm/src/geometry.ts +51 -0
  444. package/packages/chili-wasm/src/helper.ts +435 -0
  445. package/packages/chili-wasm/src/index.ts +5 -0
  446. package/packages/chili-wasm/src/mesher.ts +114 -0
  447. package/packages/chili-wasm/src/shape.ts +481 -0
  448. package/packages/chili-wasm/src/surface.ts +510 -0
  449. package/packages/chili-wasm/src/wasm.ts +13 -0
  450. package/packages/chili-web/package.json +9 -0
  451. package/packages/chili-web/src/index.ts +33 -0
  452. package/packages/chili-web/src/loading.ts +67 -0
  453. package/packages/global.d.ts +31 -0
  454. package/public/favicon.svg +10 -0
  455. package/public/fonts/fzhei.json +46120 -0
  456. package/public/iconfont.js +1 -0
  457. package/public/images/wechat.jpg +0 -0
  458. package/public/index.css +13 -0
  459. package/public/index.html +24 -0
  460. package/rspack.config.ts +93 -0
  461. package/rstest.config.ts +27 -0
  462. package/screenshots/screenshot.png +0 -0
  463. package/scripts/add_copyright.mjs +59 -0
  464. package/scripts/build-npm.mjs +105 -0
  465. package/scripts/common.mjs +24 -0
  466. package/scripts/release.mjs +92 -0
  467. package/scripts/restore-package-json.mjs +27 -0
  468. package/scripts/setup_wasm_deps.mjs +97 -0
  469. package/scripts/update-package-json.mjs +27 -0
  470. package/tsconfig.build.json +14 -0
  471. package/tsconfig.build.tsbuildinfo +1 -0
  472. package/tsconfig.json +19 -0
@@ -0,0 +1,26 @@
1
+ // Part of the Chili3d Project, under the AGPL-3.0 License.
2
+ // See LICENSE file in the project root for full license information.
3
+
4
+ export * from "./asyncController";
5
+ export * from "./binding";
6
+ export * from "./collection";
7
+ export * from "./converter";
8
+ export * from "./deepObserver";
9
+ export * from "./disposable";
10
+ export * from "./dto";
11
+ export * from "./equalityComparer";
12
+ export * from "./gc";
13
+ export * from "./history";
14
+ export * from "./id";
15
+ export * from "./lazy";
16
+ export * from "./linkedList";
17
+ export * from "./logger";
18
+ export * from "./messageType";
19
+ export * from "./objectStorage";
20
+ export * from "./observer";
21
+ export * from "./precision";
22
+ export * from "./pubsub";
23
+ export * from "./result";
24
+ export * from "./storage";
25
+ export * from "./transaction";
26
+ export * from "./utils";
@@ -0,0 +1,18 @@
1
+ // Part of the Chili3d Project, under the AGPL-3.0 License.
2
+ // See LICENSE file in the project root for full license information.
3
+
4
+ export class Lazy<T> {
5
+ #value?: T;
6
+ readonly #factory: () => T;
7
+
8
+ constructor(factory: () => T) {
9
+ this.#factory = factory;
10
+ }
11
+
12
+ get value(): T {
13
+ if (this.#value === undefined) {
14
+ this.#value = this.#factory();
15
+ }
16
+ return this.#value;
17
+ }
18
+ }
@@ -0,0 +1,141 @@
1
+ // Part of the Chili3d Project, under the AGPL-3.0 License.
2
+ // See LICENSE file in the project root for full license information.
3
+
4
+ interface LinkedListNode<T> {
5
+ data: T;
6
+ next?: LinkedListNode<T>;
7
+ prev?: LinkedListNode<T>;
8
+ }
9
+
10
+ export class LinkedList<T> {
11
+ private _head: LinkedListNode<T> | undefined;
12
+ get head() {
13
+ return this._head?.data;
14
+ }
15
+
16
+ private _tail: LinkedListNode<T> | undefined;
17
+ get tail() {
18
+ return this._tail?.data;
19
+ }
20
+
21
+ private _size: number = 0;
22
+ get size() {
23
+ return this._size;
24
+ }
25
+
26
+ push(...items: T[]) {
27
+ for (const item of items) {
28
+ const node: LinkedListNode<T> = { data: item };
29
+ if (!this._head) {
30
+ this._head = this._tail = node;
31
+ } else {
32
+ node.prev = this._tail;
33
+ this._tail!.next = node;
34
+ this._tail = node;
35
+ }
36
+ this._size++;
37
+ }
38
+ }
39
+
40
+ insert(index: number, item: T) {
41
+ if (index < 0 || index >= this._size) return;
42
+ if (index === 0) {
43
+ const node: LinkedListNode<T> = { data: item, next: this._head };
44
+ if (this._head) this._head.prev = node;
45
+ this._head = node;
46
+ if (!this._tail) this._tail = node;
47
+ this._size++;
48
+ return;
49
+ }
50
+
51
+ const targetNode = this.nodeAt(index);
52
+ if (!targetNode) return;
53
+
54
+ const newNode: LinkedListNode<T> = {
55
+ data: item,
56
+ next: targetNode,
57
+ prev: targetNode.prev,
58
+ };
59
+
60
+ if (targetNode.prev) targetNode.prev.next = newNode;
61
+ targetNode.prev = newNode;
62
+ this._size++;
63
+ }
64
+
65
+ remove(item: T) {
66
+ let current = this._head;
67
+ while (current) {
68
+ if (current.data === item) {
69
+ this.removeNode(current);
70
+ return;
71
+ }
72
+ current = current.next;
73
+ }
74
+ }
75
+
76
+ removeAt(index: number) {
77
+ const node = this.nodeAt(index);
78
+ if (node) this.removeNode(node);
79
+ }
80
+
81
+ private removeNode(node: LinkedListNode<T>) {
82
+ if (node.prev) {
83
+ node.prev.next = node.next;
84
+ } else {
85
+ this._head = node.next;
86
+ }
87
+ if (node.next) {
88
+ node.next.prev = node.prev;
89
+ } else {
90
+ this._tail = node.prev;
91
+ }
92
+ this._size--;
93
+ }
94
+
95
+ private nodeAt(index: number): LinkedListNode<T> | undefined {
96
+ if (index < 0 || index >= this._size) return undefined;
97
+ if (index === 0) return this._head;
98
+ if (index === this._size - 1) return this._tail;
99
+
100
+ let current: LinkedListNode<T> | undefined;
101
+ if (index <= this._size / 2) {
102
+ current = this._head;
103
+ for (let i = 0; i < index; i++) {
104
+ current = current!.next;
105
+ }
106
+ } else {
107
+ current = this._tail;
108
+ for (let i = this._size - 1; i > index; i--) {
109
+ current = current!.prev;
110
+ }
111
+ }
112
+ return current;
113
+ }
114
+
115
+ clear() {
116
+ this._head = undefined;
117
+ this._tail = undefined;
118
+ this._size = 0;
119
+ }
120
+
121
+ reverse() {
122
+ let currentNode = this._head;
123
+ while (currentNode) {
124
+ const next = currentNode.next;
125
+ currentNode.next = currentNode.prev;
126
+ currentNode.prev = next;
127
+ currentNode = currentNode.prev;
128
+ }
129
+ const tail = this._tail;
130
+ this._tail = this._head;
131
+ this._head = tail;
132
+ }
133
+
134
+ *[Symbol.iterator](): IterableIterator<T> {
135
+ let current = this._head;
136
+ while (current) {
137
+ yield current.data;
138
+ current = current.next;
139
+ }
140
+ }
141
+ }
@@ -0,0 +1,45 @@
1
+ // Part of the Chili3d Project, under the AGPL-3.0 License.
2
+ // See LICENSE file in the project root for full license information.
3
+
4
+ export enum LoggerLevel {
5
+ Debug,
6
+ Info,
7
+ Warn,
8
+ Error,
9
+ }
10
+
11
+ export class Logger {
12
+ static level: LoggerLevel = LoggerLevel.Info;
13
+
14
+ static debug(message?: any, ...optionalParams: any[]) {
15
+ if (Logger.level <= LoggerLevel.Debug) {
16
+ console.debug(message, ...optionalParams);
17
+ }
18
+ }
19
+
20
+ static info(message?: any, ...optionalParams: any[]) {
21
+ if (Logger.level <= LoggerLevel.Info) {
22
+ console.log(message, ...optionalParams);
23
+ }
24
+ }
25
+
26
+ static warn(message?: any, ...optionalParams: any[]) {
27
+ if (Logger.level <= LoggerLevel.Warn) {
28
+ console.warn(message, ...optionalParams);
29
+ }
30
+ }
31
+
32
+ static error(message?: any, ...optionalParams: any[]) {
33
+ if (Logger.level <= LoggerLevel.Error) {
34
+ console.error(message, ...optionalParams);
35
+ }
36
+ }
37
+ }
38
+
39
+ // facilitate debugging
40
+ if (!__IS_PRODUCTION__) {
41
+ Logger.debug = console.debug;
42
+ Logger.info = console.log;
43
+ Logger.warn = console.warn;
44
+ Logger.error = console.error;
45
+ }
@@ -0,0 +1,8 @@
1
+ // Part of the Chili3d Project, under the AGPL-3.0 License.
2
+ // See LICENSE file in the project root for full license information.
3
+
4
+ export enum MessageType {
5
+ info,
6
+ warn,
7
+ error,
8
+ }
@@ -0,0 +1,50 @@
1
+ // Part of the Chili3d Project, under the AGPL-3.0 License.
2
+ // See LICENSE file in the project root for full license information.
3
+
4
+ export class ObjectStorage {
5
+ static readonly default = new ObjectStorage("chili3d", "app");
6
+
7
+ private readonly prefix: string;
8
+
9
+ constructor(organization: string, application: string) {
10
+ this.prefix = `${organization}.${application}.`;
11
+ }
12
+
13
+ setValue(key: string, value: object): void {
14
+ const storageKey = this.prefix + key;
15
+ try {
16
+ const stringValue = JSON.stringify(value);
17
+ localStorage.setItem(storageKey, stringValue);
18
+ } catch (error) {
19
+ console.error(`Failed to set setting ${key}:`, error);
20
+ }
21
+ }
22
+
23
+ value<T>(key: string, defaultValue?: T): T | undefined {
24
+ const storageKey = this.prefix + key;
25
+ const item = localStorage.getItem(storageKey);
26
+ if (!item) {
27
+ return defaultValue;
28
+ }
29
+
30
+ try {
31
+ return JSON.parse(item) as T;
32
+ } catch (error) {
33
+ console.error(`Failed to get setting ${key}:`, error);
34
+ return defaultValue;
35
+ }
36
+ }
37
+
38
+ remove(key: string): void {
39
+ const storageKey = this.prefix + key;
40
+ localStorage.removeItem(storageKey);
41
+ }
42
+
43
+ clear(): void {
44
+ Object.keys(localStorage).forEach((key) => {
45
+ if (key.startsWith(this.prefix)) {
46
+ localStorage.removeItem(key);
47
+ }
48
+ });
49
+ }
50
+ }
@@ -0,0 +1,147 @@
1
+ // Part of the Chili3d Project, under the AGPL-3.0 License.
2
+ // See LICENSE file in the project root for full license information.
3
+
4
+ import type { IDocument } from "../document";
5
+ import type { IDisposable } from "./disposable";
6
+ import type { IEqualityComparer } from "./equalityComparer";
7
+ import { PropertyHistoryRecord } from "./history";
8
+ import { Logger } from "./logger";
9
+ import { Transaction } from "./transaction";
10
+
11
+ export type PropertyChangedHandler<T, K extends keyof T> = (property: K, source: T, oldValue: T[K]) => void;
12
+
13
+ export interface IPropertyChanged extends IDisposable {
14
+ onPropertyChanged<K extends keyof this>(handler: PropertyChangedHandler<this, K>): void;
15
+ removePropertyChanged<K extends keyof this>(handler: PropertyChangedHandler<this, K>): void;
16
+ clearPropertyChanged(): void;
17
+ }
18
+
19
+ export function isPropertyChanged(obj: object): obj is IPropertyChanged {
20
+ return (
21
+ obj &&
22
+ typeof (obj as IPropertyChanged).onPropertyChanged === "function" &&
23
+ typeof (obj as IPropertyChanged).removePropertyChanged === "function"
24
+ );
25
+ }
26
+
27
+ export class Observable implements IPropertyChanged {
28
+ protected readonly propertyChangedHandlers = new Set<PropertyChangedHandler<any, any>>();
29
+ protected _isDisposed = false;
30
+
31
+ private getPrivateKey<K extends keyof this>(pubKey: K) {
32
+ return `_${String(pubKey)}`;
33
+ }
34
+
35
+ protected getPrivateValue<K extends keyof this>(pubKey: K, defaultValue?: this[K]): this[K] {
36
+ const privateKey = this.getPrivateKey(pubKey) as keyof this;
37
+ return privateKey in this
38
+ ? (this[privateKey] as this[K])
39
+ : this.initializeDefaultValue(pubKey, defaultValue);
40
+ }
41
+
42
+ private initializeDefaultValue<K extends keyof this>(pubKey: K, defaultValue?: this[K]): this[K] {
43
+ if (defaultValue === undefined) {
44
+ Logger.warn(
45
+ `${this.constructor.name}: The property "${String(pubKey)}" is not initialized, and no default value is provided`,
46
+ );
47
+ return undefined as this[K];
48
+ }
49
+
50
+ const privateKey = this.getPrivateKey(pubKey);
51
+ (this as any)[privateKey] = defaultValue;
52
+ return defaultValue;
53
+ }
54
+
55
+ setPrivateValue<K extends keyof this>(pubKey: K, newValue: this[K]): void {
56
+ (this as any)[this.getPrivateKey(pubKey)] = newValue;
57
+ }
58
+
59
+ /**
60
+ * Set the value of a private property, and if successful, execute emitPropertyChanged.
61
+ *
62
+ * Note: The private property name must be the public property name with the prefix _, i.e., age->_age(private property name).
63
+ */
64
+ protected setProperty<K extends keyof this>(
65
+ property: K,
66
+ newValue: this[K],
67
+ onPropertyChanged?: (property: K, oldValue: this[K]) => void,
68
+ equals?: IEqualityComparer<this[K]>,
69
+ ): boolean {
70
+ const oldValue = this[property];
71
+ if (this.isEuqals(oldValue, newValue, equals)) return false;
72
+
73
+ this.setPrivateValue(property, newValue);
74
+ onPropertyChanged?.(property, oldValue);
75
+ this.emitPropertyChanged(property, oldValue);
76
+ return true;
77
+ }
78
+
79
+ private isEuqals<K extends keyof this>(
80
+ oldValue: this[K],
81
+ newValue: this[K],
82
+ equals?: IEqualityComparer<this[K]>,
83
+ ): boolean {
84
+ return equals ? equals.equals(oldValue, newValue) : oldValue === newValue;
85
+ }
86
+
87
+ protected emitPropertyChanged<K extends keyof this>(property: K, oldValue: this[K]) {
88
+ Array.from(this.propertyChangedHandlers).forEach((cb) => cb(property, this, oldValue));
89
+ }
90
+
91
+ onPropertyChanged<K extends keyof this>(handler: PropertyChangedHandler<this, K>) {
92
+ this.propertyChangedHandlers.add(handler);
93
+ }
94
+
95
+ removePropertyChanged<K extends keyof this>(handler: PropertyChangedHandler<this, K>) {
96
+ this.propertyChangedHandlers.delete(handler);
97
+ }
98
+
99
+ clearPropertyChanged(): void {
100
+ this.propertyChangedHandlers.clear();
101
+ }
102
+
103
+ readonly dispose = () => {
104
+ if (this._isDisposed) return;
105
+ this._isDisposed = true;
106
+ this.disposeInternal();
107
+ };
108
+
109
+ protected disposeInternal() {
110
+ this.propertyChangedHandlers.clear();
111
+ }
112
+ }
113
+
114
+ export abstract class HistoryObservable extends Observable {
115
+ private _document: IDocument;
116
+
117
+ get document(): IDocument {
118
+ return this._document;
119
+ }
120
+
121
+ constructor(document: IDocument) {
122
+ super();
123
+ this._document = document;
124
+ }
125
+
126
+ protected override setProperty<K extends keyof this>(
127
+ property: K,
128
+ newValue: this[K],
129
+ onPropertyChanged?: (property: K, oldValue: this[K]) => void,
130
+ equals?: IEqualityComparer<this[K]>,
131
+ ): boolean {
132
+ return super.setProperty(
133
+ property,
134
+ newValue,
135
+ (property, oldValue) => {
136
+ onPropertyChanged?.(property, oldValue);
137
+ Transaction.add(this.document, new PropertyHistoryRecord(this, property, oldValue, newValue));
138
+ },
139
+ equals,
140
+ );
141
+ }
142
+
143
+ override disposeInternal() {
144
+ super.disposeInternal();
145
+ this._document = null as any;
146
+ }
147
+ }
@@ -0,0 +1,8 @@
1
+ // Part of the Chili3d Project, under the AGPL-3.0 License.
2
+ // See LICENSE file in the project root for full license information.
3
+
4
+ export namespace Precision {
5
+ export const Distance = 1e-7;
6
+ export const Angle = 1e-3;
7
+ export const Float = 1e-7;
8
+ }
@@ -0,0 +1,74 @@
1
+ // Part of the Chili3d Project, under the AGPL-3.0 License.
2
+ // See LICENSE file in the project root for full license information.
3
+
4
+ import type { CommandKeys, ICommand } from "../command";
5
+ import type { IDocument } from "../document";
6
+ import type { I18nKeys } from "../i18n";
7
+ import type { Material } from "../material";
8
+ import type { INode } from "../model";
9
+ import type { DialogResult } from "../ui";
10
+ import type { CursorType, IView } from "../visual";
11
+ import type { AsyncController } from "./asyncController";
12
+ import type { IDisposable } from "./disposable";
13
+ import type { MessageType } from "./messageType";
14
+ import type { Result } from "./result";
15
+
16
+ export interface PubSubEventMap {
17
+ activeViewChanged: (view: IView | undefined) => void;
18
+ clearFloatTip: () => void;
19
+ clearInput: () => void;
20
+ clearSelectionControl: () => void;
21
+ clearStatusBarTip: () => void;
22
+ closeCommandContext: () => void;
23
+ displayError: (message: string) => void;
24
+ displayHome: (show: boolean) => void;
25
+ documentClosed: (document: IDocument) => void;
26
+ editMaterial: (document: IDocument, material: Material, callback: (material: Material) => void) => void;
27
+ executeCommand: (commandName: CommandKeys) => void;
28
+ modelUpdate: (model: INode) => void;
29
+ openCommandContext: (command: ICommand) => void;
30
+ parentVisibleChanged: (model: INode) => void;
31
+ selectionChanged: (document: IDocument, selected: INode[], unselected: INode[]) => void;
32
+ showDialog: (title: I18nKeys, content: HTMLElement, callback?: (result: DialogResult) => void) => void;
33
+ showFloatTip: (dom: HTMLElement | { level: MessageType; msg: string }) => void;
34
+ showInput: (text: string, handler: (text: string) => Result<string, I18nKeys>) => void;
35
+ showPermanent: (action: () => Promise<void>, message: I18nKeys, ...args: any[]) => void;
36
+ showProperties(document: IDocument, nodes: INode[]): void;
37
+ showSelectionControl: (controller: AsyncController) => void;
38
+ showToast: (message: I18nKeys, ...args: any[]) => void;
39
+ statusBarTip: (tip: I18nKeys) => void;
40
+ viewClosed: (view: IView) => void;
41
+ viewCursor: (cursor: CursorType) => void;
42
+ visibleChanged: (model: INode) => void;
43
+ }
44
+
45
+ type EventCallback = (...args: any[]) => void;
46
+ type EventMap = Map<keyof PubSubEventMap, Set<EventCallback>>;
47
+
48
+ export class PubSub implements IDisposable {
49
+ static readonly default = new PubSub();
50
+ private readonly events: EventMap = new Map();
51
+
52
+ dispose(): void {
53
+ this.events.forEach((callbacks) => callbacks.clear());
54
+ this.events.clear();
55
+ }
56
+
57
+ sub<K extends keyof PubSubEventMap>(event: K, callback: PubSubEventMap[K]): void {
58
+ const callbacks = this.events.get(event) ?? new Set<EventCallback>();
59
+ callbacks.add(callback);
60
+ this.events.set(event, callbacks);
61
+ }
62
+
63
+ pub<K extends keyof PubSubEventMap>(event: K, ...args: Parameters<PubSubEventMap[K]>): void {
64
+ this.events.get(event)?.forEach((callback) => callback(...args));
65
+ }
66
+
67
+ remove<K extends keyof PubSubEventMap>(event: K, callback: PubSubEventMap[K]): void {
68
+ this.events.get(event)?.delete(callback);
69
+ }
70
+
71
+ removeAll<K extends keyof PubSubEventMap>(event: K): void {
72
+ this.events.get(event)?.clear();
73
+ }
74
+ }
@@ -0,0 +1,69 @@
1
+ // Part of the Chili3d Project, under the AGPL-3.0 License.
2
+ // See LICENSE file in the project root for full license information.
3
+
4
+ import { Serializer } from "../serialize";
5
+ import type { IEqualityComparer } from "./equalityComparer";
6
+ import { Logger } from "./logger";
7
+
8
+ @Serializer.register(["isOk", "value", "error"])
9
+ export class Result<T, E = string> {
10
+ readonly #isOk: boolean;
11
+ readonly #value: T | undefined;
12
+ readonly #error: E | undefined;
13
+
14
+ @Serializer.serialze()
15
+ get isOk(): boolean {
16
+ return this.#isOk;
17
+ }
18
+
19
+ @Serializer.serialze()
20
+ get value(): T {
21
+ if (!this.#isOk) Logger.warn("Result is error");
22
+ return this.#value!;
23
+ }
24
+
25
+ @Serializer.serialze()
26
+ get error(): E {
27
+ if (this.#isOk) Logger.warn("Result is ok");
28
+ return this.#error!;
29
+ }
30
+
31
+ constructor(isOk: boolean, value: T | undefined, error: E | undefined) {
32
+ this.#isOk = isOk;
33
+ this.#value = value;
34
+ this.#error = error;
35
+ }
36
+
37
+ parse<U>(): Result<U, E> {
38
+ return Result.err(this.#error as E);
39
+ }
40
+
41
+ isOkAnd(predict: (value: T) => boolean): boolean {
42
+ return this.#isOk && predict(this.#value!);
43
+ }
44
+
45
+ isErrorOr(predict: (value: T) => boolean): boolean {
46
+ return !this.#isOk || predict(this.#value!);
47
+ }
48
+
49
+ unchecked(): T | undefined {
50
+ return this.#value;
51
+ }
52
+
53
+ static ok<T>(value: T): Result<T, never> {
54
+ return new Result(true, value, undefined) as any;
55
+ }
56
+
57
+ static err<E>(error: E): Result<any, E> {
58
+ return new Result(false, undefined, error) as any;
59
+ }
60
+ }
61
+
62
+ export class ResultEqualityComparer<T> implements IEqualityComparer<Result<T>> {
63
+ constructor(readonly equal?: (left: T, right: T) => boolean) {}
64
+
65
+ equals(left: Result<T>, right: Result<T>): boolean {
66
+ if (!left.isOk || !right.isOk) return false;
67
+ return this.equal ? this.equal(left.value, right.value) : left.value === right.value;
68
+ }
69
+ }
@@ -0,0 +1,10 @@
1
+ // Part of the Chili3d Project, under the AGPL-3.0 License.
2
+ // See LICENSE file in the project root for full license information.
3
+
4
+ export interface IStorage {
5
+ readonly version: number;
6
+ get(database: string, table: string, id: string): Promise<any>;
7
+ put(database: string, table: string, id: string, value: any): Promise<boolean>;
8
+ delete(database: string, table: string, id: string): Promise<boolean>;
9
+ page(database: string, table: string, page: number): Promise<any[]>;
10
+ }
@@ -0,0 +1,77 @@
1
+ // Part of the Chili3d Project, under the AGPL-3.0 License.
2
+ // See LICENSE file in the project root for full license information.
3
+
4
+ import type { IDocument } from "../document";
5
+ import { ArrayRecord, type IHistoryRecord } from "./history";
6
+ import { Logger } from "./logger";
7
+
8
+ export class Transaction {
9
+ private static readonly _transactionMap: WeakMap<IDocument, ArrayRecord> = new WeakMap();
10
+
11
+ constructor(
12
+ readonly document: IDocument,
13
+ readonly name: string,
14
+ ) {}
15
+
16
+ static add(document: IDocument, record: IHistoryRecord) {
17
+ if (document.history.disabled) return;
18
+ const arrayRecord = Transaction._transactionMap.get(document);
19
+ if (arrayRecord !== undefined) {
20
+ arrayRecord.records.push(record);
21
+ } else {
22
+ Transaction.addToHistory(document, record);
23
+ }
24
+ }
25
+
26
+ static addToHistory(document: IDocument, record: IHistoryRecord) {
27
+ document.history.add(record);
28
+ Logger.info(`history added ${record.name}`);
29
+ }
30
+
31
+ static execute(document: IDocument, name: string, action: () => void) {
32
+ const trans = new Transaction(document, name);
33
+ trans.start();
34
+ try {
35
+ action();
36
+ trans.commit();
37
+ } catch (e) {
38
+ trans.rollback();
39
+ throw e;
40
+ }
41
+ }
42
+
43
+ static async executeAsync(document: IDocument, name: string, action: () => Promise<void>) {
44
+ const trans = new Transaction(document, name);
45
+ trans.start();
46
+
47
+ await Promise.try(async () => {
48
+ await action();
49
+ trans.commit();
50
+ }).catch((e) => {
51
+ trans.rollback();
52
+ throw e;
53
+ });
54
+ }
55
+
56
+ start(name?: string) {
57
+ const transactionName = name ?? this.name;
58
+ if (Transaction._transactionMap.has(this.document)) {
59
+ throw new Error(`The document has started a transaction ${this.name}`);
60
+ }
61
+ Transaction._transactionMap.set(this.document, new ArrayRecord(transactionName));
62
+ }
63
+
64
+ commit() {
65
+ const arrayRecord = Transaction._transactionMap.get(this.document);
66
+ if (!arrayRecord) {
67
+ throw new Error("Transaction has not started");
68
+ }
69
+ if (arrayRecord.records.length > 0) Transaction.addToHistory(this.document, arrayRecord);
70
+ Transaction._transactionMap.delete(this.document);
71
+ }
72
+
73
+ rollback() {
74
+ Transaction._transactionMap.get(this.document)?.undo();
75
+ Transaction._transactionMap.delete(this.document);
76
+ }
77
+ }