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,243 @@
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 { a, button, collection, div, img, label, span, svg } from "chili-controls";
5
+ import {
6
+ Constants,
7
+ I18n,
8
+ type I18nKeys,
9
+ type IApplication,
10
+ Localize,
11
+ ObservableCollection,
12
+ PubSub,
13
+ type RecentDocumentDTO,
14
+ } from "chili-core";
15
+ import style from "./home.module.css";
16
+ import { LanguageSelector } from "./languageSelector";
17
+ import { Navigation3DSelector } from "./navigation3DSelector";
18
+ import { ThemeSelector } from "./themeSelector";
19
+
20
+ interface ApplicationCommand {
21
+ display: I18nKeys;
22
+ icon?: string;
23
+ onclick: () => void;
24
+ }
25
+
26
+ const applicationCommands = new ObservableCollection<ApplicationCommand>(
27
+ {
28
+ display: "command.doc.new",
29
+ onclick: () => PubSub.default.pub("executeCommand", "doc.new"),
30
+ },
31
+ {
32
+ display: "command.doc.open",
33
+ onclick: () => PubSub.default.pub("executeCommand", "doc.open"),
34
+ },
35
+ );
36
+
37
+ export class Home extends HTMLElement {
38
+ constructor(readonly app: IApplication) {
39
+ super();
40
+ this.className = style.root;
41
+ }
42
+
43
+ private hasOpen(documentId: string) {
44
+ for (const document of this.app.documents) {
45
+ if (document.id === documentId) return true;
46
+ }
47
+ return false;
48
+ }
49
+
50
+ private async getDocuments() {
51
+ return new ObservableCollection(
52
+ ...(await this.app.storage.page(Constants.DBName, Constants.RecentTable, 0)),
53
+ );
54
+ }
55
+
56
+ async render() {
57
+ const documents = await this.getDocuments();
58
+ this.append(this.leftSection(), this.rightSection(documents));
59
+ this.app.mainWindow?.appendChild(this);
60
+ }
61
+
62
+ private leftSection() {
63
+ return div(
64
+ { className: style.left },
65
+ div(
66
+ { className: style.top },
67
+ this.logoSection(),
68
+ this.applicationCommands(),
69
+ this.currentDocument(),
70
+ ),
71
+
72
+ this.settings(),
73
+ this.links(),
74
+ );
75
+ }
76
+
77
+ private logoSection() {
78
+ return div(
79
+ { className: style.logo },
80
+ svg({ icon: "icon-chili" }),
81
+ span({ textContent: "CHILI3D" }),
82
+ span({ className: style.version, textContent: __APP_VERSION__ }),
83
+ );
84
+ }
85
+
86
+ private applicationCommands() {
87
+ return collection({
88
+ className: style.buttons,
89
+ sources: applicationCommands,
90
+ template: (item) =>
91
+ button({
92
+ className: style.button,
93
+ textContent: new Localize(item.display),
94
+ onclick: item.onclick,
95
+ }),
96
+ });
97
+ }
98
+
99
+ private currentDocument() {
100
+ return this.app.activeView?.document
101
+ ? button({
102
+ className: `${style.button} ${style.back}`,
103
+ textContent: new Localize("common.back"),
104
+ onclick: () => {
105
+ PubSub.default.pub("displayHome", false);
106
+ },
107
+ })
108
+ : "";
109
+ }
110
+
111
+ private settings() {
112
+ return div(
113
+ { className: style.settingsPanel },
114
+ div(
115
+ { className: style.settingItem },
116
+ span({
117
+ className: style.settingLabel,
118
+ textContent: new Localize("common.language"),
119
+ }),
120
+ div({ className: style.settingControl }, LanguageSelector({})),
121
+ ),
122
+ div(
123
+ { className: style.settingItem },
124
+ span({
125
+ className: style.settingLabel,
126
+ textContent: new Localize("common.theme"),
127
+ }),
128
+ div({ className: style.settingControl }, ThemeSelector({})),
129
+ ),
130
+ div(
131
+ { className: style.settingItem },
132
+ span({
133
+ className: style.settingLabel,
134
+ textContent: new Localize("common.3DNavigation"),
135
+ }),
136
+ div({ className: style.settingControl }, Navigation3DSelector({})),
137
+ ),
138
+ );
139
+ }
140
+
141
+ private links() {
142
+ return div(
143
+ { className: style.socialPanel },
144
+ a(
145
+ {
146
+ className: style.socialItem,
147
+ href: "https://github.com/xiangechen/chili3d",
148
+ target: "_blank",
149
+ rel: "noopener noreferrer",
150
+ },
151
+ svg({ icon: "icon-github" }),
152
+ label({ textContent: "GitHub" }),
153
+ ),
154
+ button(
155
+ {
156
+ className: style.socialItem,
157
+ onclick: () => {
158
+ PubSub.default.pub("executeCommand", "wechat.group");
159
+ },
160
+ },
161
+ svg({
162
+ icon: "icon-wechatGroup",
163
+ }),
164
+ label({ textContent: new Localize("command.wechat.group") }),
165
+ ),
166
+ );
167
+ }
168
+
169
+ private rightSection(documents: ObservableCollection<RecentDocumentDTO>) {
170
+ return div(
171
+ { className: style.right },
172
+ label({ className: style.welcome, textContent: new Localize("home.welcome") }),
173
+ div({ className: style.recent, textContent: new Localize("home.recent") }),
174
+ this.documentCollection(documents),
175
+ );
176
+ }
177
+
178
+ private documentCollection(documents: ObservableCollection<RecentDocumentDTO>) {
179
+ return collection({
180
+ className: style.documents,
181
+ sources: documents,
182
+ template: (item) => this.recentDocument(item, documents),
183
+ });
184
+ }
185
+
186
+ private recentDocument(item: RecentDocumentDTO, documents: ObservableCollection<RecentDocumentDTO>) {
187
+ return div(
188
+ {
189
+ className: style.document,
190
+ onclick: () => this.handleDocumentClick(item),
191
+ },
192
+ img({ className: style.img, src: item.image }),
193
+ this.documentDescription(item),
194
+ this.deleteIcon(item, documents),
195
+ );
196
+ }
197
+
198
+ private documentDescription(item: RecentDocumentDTO) {
199
+ return div(
200
+ { className: style.description },
201
+ span({ className: style.title, textContent: item.name }),
202
+ span({
203
+ className: style.date,
204
+ textContent: new Date(item.date).toLocaleDateString(),
205
+ }),
206
+ );
207
+ }
208
+
209
+ private deleteIcon(item: RecentDocumentDTO, documents: ObservableCollection<RecentDocumentDTO>) {
210
+ return svg({
211
+ className: style.delete,
212
+ icon: "icon-times",
213
+ onclick: async (e) => {
214
+ e.stopPropagation();
215
+ if (window.confirm(I18n.translate("prompt.deleteDocument{0}", item.name))) {
216
+ await Promise.all([
217
+ this.app.storage.delete(Constants.DBName, Constants.DocumentTable, item.id),
218
+ this.app.storage.delete(Constants.DBName, Constants.RecentTable, item.id),
219
+ ]);
220
+ documents.remove(item);
221
+ }
222
+ },
223
+ });
224
+ }
225
+
226
+ private handleDocumentClick(item: RecentDocumentDTO) {
227
+ if (this.hasOpen(item.id)) {
228
+ PubSub.default.pub("displayHome", false);
229
+ } else {
230
+ PubSub.default.pub(
231
+ "showPermanent",
232
+ async () => {
233
+ const document = await this.app.openDocument(item.id);
234
+ document?.application.activeView?.cameraController.fitContent();
235
+ },
236
+ "toast.excuting{0}",
237
+ I18n.translate("command.doc.open"),
238
+ );
239
+ }
240
+ }
241
+ }
242
+
243
+ customElements.define("chili-home", Home);
@@ -0,0 +1,4 @@
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 "./home";
@@ -0,0 +1,27 @@
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 HTMLProps, option, select } from "chili-controls";
5
+ import { Config, I18n } from "chili-core";
6
+
7
+ export const LanguageSelector = (props: HTMLProps<HTMLElement>) => {
8
+ const languages: HTMLOptionElement[] = [];
9
+ I18n.getLanguages().forEach((language) => {
10
+ languages.push(
11
+ option({
12
+ selected: language.language === I18n.currentLanguage(),
13
+ textContent: language.display,
14
+ }),
15
+ );
16
+ });
17
+ return select(
18
+ {
19
+ onchange: (e) => {
20
+ const language = (e.target as HTMLSelectElement).selectedIndex;
21
+ Config.instance.language = I18n.getLanguages()[language].language;
22
+ },
23
+ ...props,
24
+ },
25
+ ...languages,
26
+ );
27
+ };
@@ -0,0 +1,27 @@
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 HTMLProps, option, select } from "chili-controls";
5
+ import { Config, Navigation3D } from "chili-core";
6
+
7
+ export const Navigation3DSelector = (props: HTMLProps<HTMLElement>) => {
8
+ const nav3DTypes: HTMLOptionElement[] = [];
9
+ Navigation3D.types.forEach((nav3DType, index) =>
10
+ nav3DTypes.push(
11
+ option({
12
+ selected: index === Config.instance.navigation3DIndex,
13
+ textContent: nav3DType,
14
+ }),
15
+ ),
16
+ );
17
+ return select(
18
+ {
19
+ onchange: (e) => {
20
+ const nav3DType = (e.target as HTMLSelectElement).selectedIndex;
21
+ Config.instance.navigation3DIndex = nav3DType;
22
+ },
23
+ ...props,
24
+ },
25
+ ...nav3DTypes,
26
+ );
27
+ };
@@ -0,0 +1,34 @@
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 HTMLProps, option, select } from "chili-controls";
5
+ import { Config, type I18nKeys, Localize } from "chili-core";
6
+
7
+ export const ThemeSelector = (props: HTMLProps<HTMLElement>) => {
8
+ const themes = [
9
+ { value: "light", key: "common.theme.light" },
10
+ { value: "dark", key: "common.theme.dark" },
11
+ { value: "system", key: "common.theme.system" },
12
+ ];
13
+
14
+ const themeOptions: HTMLOptionElement[] = [];
15
+ themes.forEach((theme) =>
16
+ themeOptions.push(
17
+ option({
18
+ selected: theme.value === Config.instance.themeMode,
19
+ textContent: new Localize(theme.key as I18nKeys),
20
+ value: theme.value,
21
+ }),
22
+ ),
23
+ );
24
+ return select(
25
+ {
26
+ onchange: (e) => {
27
+ const themeMode = (e.target as HTMLSelectElement).value as "light" | "dark" | "system";
28
+ Config.instance.themeMode = themeMode;
29
+ },
30
+ ...props,
31
+ },
32
+ ...themeOptions,
33
+ );
34
+ };
@@ -0,0 +1,5 @@
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 "./dialog";
5
+ export * from "./mainWindow";
@@ -0,0 +1,144 @@
1
+ svg {
2
+ color: inherit;
3
+ fill: currentColor;
4
+ }
5
+
6
+ input,
7
+ textarea,
8
+ select {
9
+ color: var(--input-text-color);
10
+ background-color: var(--input-background-color);
11
+ border: 1px solid var(--input-border-color);
12
+ }
13
+
14
+ button,
15
+ .button {
16
+ color: var(--foreground-color);
17
+ background-color: var(--control-background-color);
18
+ border: 1px solid var(--border-color);
19
+ }
20
+
21
+ a {
22
+ color: var(--foreground-color);
23
+ }
24
+
25
+ h1,
26
+ h2,
27
+ h3,
28
+ h4,
29
+ h5,
30
+ h6 {
31
+ color: var(--foreground-color);
32
+ }
33
+
34
+ p,
35
+ span,
36
+ div {
37
+ color: var(--foreground-color);
38
+ }
39
+
40
+ chili3d-main-window {
41
+ position: absolute;
42
+ top: 0;
43
+ left: 0;
44
+ width: 100%;
45
+ height: 100%;
46
+ overflow: hidden;
47
+ }
48
+
49
+ ::-webkit-scrollbar {
50
+ width: 10px;
51
+ height: 10px;
52
+ }
53
+
54
+ ::-webkit-scrollbar-track {
55
+ background: var(--control-background-colo);
56
+ border-radius: 2em;
57
+ }
58
+
59
+ ::-webkit-scrollbar-thumb {
60
+ background-color: var(--foreground-muted-color);
61
+ border-radius: 2em;
62
+ transition: background-color 0.3s;
63
+ cursor: pointer;
64
+ }
65
+
66
+ ::-webkit-scrollbar-thumb:hover {
67
+ background-color: rgba(144, 147, 153, 0.3);
68
+ }
69
+
70
+ :root[theme="light"] {
71
+ --checked-color: rgba(25, 25, 25, 0.2);
72
+ --control-background-color: #ffffff;
73
+ --primary-color: #0e62d7;
74
+ --secondary-color: #6a9ee6;
75
+ --foreground-color: #333;
76
+ --foreground-secondary-color: #666;
77
+ --foreground-muted-color: #999;
78
+ --border-color: #dddddd;
79
+ --border-hover-color: #bbbbbb;
80
+ --background-color: #eeeeee;
81
+ --panel-background-color: #ffffff;
82
+ --panel-hover-background-color: #f5f5f5;
83
+ --hover-background-color: rgba(25, 25, 25, 0.15);
84
+ --active-background-color: rgba(25, 25, 25, 0.25);
85
+ --titlebar-forground-color: #333;
86
+ --titlebar-background-color: #eeeeee;
87
+ --title-background: rgba(25, 25, 25, 0.08);
88
+ --title-checked: #ffffff;
89
+ --statusbar-foreground-color: #333;
90
+ --statusbar-background-color: #eeeeee;
91
+ --viewport-background-color: #888;
92
+ --input-background-color: #ffffff;
93
+ --input-border-color: #dddddd;
94
+ --input-text-color: #333;
95
+ --button-primary-background: #0e62d7;
96
+ --button-primary-hover: #0d5bc7;
97
+ --button-secondary-background: #ffffff;
98
+ --button-secondary-hover: #f5f5f5;
99
+ --backdrop-color: rgba(0, 0, 0, 0.75);
100
+ --loading-border-color: rgba(0, 0, 0, 0.2);
101
+ --panel-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
102
+ --resizer-gradient: linear-gradient(to right, rgba(0, 0, 0, 0.04), rgba(0, 0, 0, 0.12));
103
+ --resizer-gradient-hover: linear-gradient(to right, rgba(0, 0, 0, 0.12), rgba(0, 0, 0, 0.18));
104
+ --error-color: #ff0000;
105
+ --warning-color: #ffc107;
106
+ }
107
+
108
+ :root[theme="dark"] {
109
+ --checked-color: rgba(255, 255, 255, 0.2);
110
+ --control-background-color: #2a2a2a;
111
+ --primary-color: #4a9eff;
112
+ --secondary-color: #6a9ee6;
113
+ --foreground-color: #ffffff;
114
+ --foreground-secondary-color: #b0b0b0;
115
+ --foreground-muted-color: #808080;
116
+ --border-color: #4e4e4e;
117
+ --border-hover-color: #505050;
118
+ --background-color: #181818;
119
+ --panel-background-color: #1f1f1f;
120
+ --panel-hover-background-color: #323232;
121
+ --hover-background-color: rgba(255, 255, 255, 0.08);
122
+ --active-background-color: rgba(255, 255, 255, 0.15);
123
+ --titlebar-forground-color: #ffffff;
124
+ --titlebar-background-color: #1a1a1a;
125
+ --title-background: rgba(255, 255, 255, 0.08);
126
+ --title-checked: #2a2a2a;
127
+ --statusbar-foreground-color: #ffffff;
128
+ --statusbar-background-color: #1a1a1a;
129
+ --viewport-background-color: #242424;
130
+ --input-background-color: #1e1e1e;
131
+ --input-border-color: #404040;
132
+ --input-text-color: #ffffff;
133
+ --button-primary-background: #4a9eff;
134
+ --button-primary-hover: #3a8eef;
135
+ --button-secondary-background: #2a2a2a;
136
+ --button-secondary-hover: #323232;
137
+ --backdrop-color: rgba(0, 0, 0, 0.75);
138
+ --loading-border-color: rgba(255, 255, 255, 0.2);
139
+ --panel-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
140
+ --resizer-gradient: linear-gradient(to right, rgba(255, 255, 255, 0.04), rgba(255, 255, 255, 0.12));
141
+ --resizer-gradient-hover: linear-gradient(to right, rgba(255, 255, 255, 0.12), rgba(255, 255, 255, 0.18));
142
+ --error-color: #ff6b6b;
143
+ --warning-color: #ffd93d;
144
+ }
@@ -0,0 +1,154 @@
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 {
5
+ type Button,
6
+ type CommandKeys,
7
+ Config,
8
+ debounce,
9
+ I18n,
10
+ type I18nKeys,
11
+ type IApplication,
12
+ type IWindow,
13
+ PubSub,
14
+ type RibbonTab,
15
+ } from "chili-core";
16
+ import { Dialog } from "./dialog";
17
+ import { Editor } from "./editor";
18
+ import { Home } from "./home";
19
+ import { Permanent } from "./permanent";
20
+ import { Toast } from "./toast";
21
+
22
+ export class MainWindow extends HTMLElement implements IWindow {
23
+ private _inited: boolean = false;
24
+ private _home?: Home;
25
+ private _editor?: Editor;
26
+
27
+ constructor(
28
+ readonly tabs: RibbonTab[],
29
+ readonly iconFont: string,
30
+ dom?: HTMLElement,
31
+ ) {
32
+ super();
33
+ this.tabIndex = 0;
34
+ this.ensureDom(dom);
35
+ }
36
+
37
+ protected ensureDom(dom?: HTMLElement) {
38
+ if (dom) {
39
+ dom.append(this);
40
+ } else {
41
+ document.body.appendChild(this);
42
+ }
43
+
44
+ this.oncontextmenu = (e) => {
45
+ e.preventDefault();
46
+ e.stopPropagation();
47
+ };
48
+ this.addEventListener("scroll", (e) => {
49
+ this.scrollTop = 0;
50
+ });
51
+ }
52
+
53
+ async init(app: IApplication): Promise<void> {
54
+ if (this._inited) {
55
+ throw new Error("MainWindow is already inited");
56
+ }
57
+ this._inited = true;
58
+
59
+ I18n.changeLanguage(Config.instance.language);
60
+
61
+ await this.loadCss();
62
+ await this.fetchIconFont();
63
+
64
+ this.applyTheme();
65
+ await this._initHome(app);
66
+ this._initEditor(app);
67
+ this._initEventHandlers(app);
68
+ }
69
+
70
+ protected async loadCss() {
71
+ await import("./mainWindow.module.css");
72
+ }
73
+
74
+ protected async fetchIconFont() {
75
+ const response = await fetch(this.iconFont);
76
+ const text = await response.text();
77
+
78
+ new Function(text)();
79
+ }
80
+
81
+ private _initEventHandlers(app: IApplication) {
82
+ const displayHome = debounce(this.displayHome, 100);
83
+ PubSub.default.sub("showToast", Toast.info);
84
+ PubSub.default.sub("displayError", Toast.error);
85
+ PubSub.default.sub("showDialog", Dialog.show);
86
+ PubSub.default.sub("showPermanent", Permanent.show);
87
+ PubSub.default.sub("activeViewChanged", (view) => displayHome(app, view === undefined));
88
+ PubSub.default.sub("displayHome", (show) => displayHome(app, show));
89
+
90
+ Config.instance.onPropertyChanged(this.handleConfigChanged);
91
+ window.matchMedia?.("(prefers-color-scheme: dark)").addEventListener("change", () => {
92
+ if (Config.instance.themeMode === "system") {
93
+ this.applyTheme();
94
+ }
95
+ });
96
+ }
97
+
98
+ private readonly displayHome = (app: IApplication, displayHome: boolean) => {
99
+ if (this._home) {
100
+ this._home.remove();
101
+ this._home = undefined;
102
+ }
103
+ if (displayHome) {
104
+ this._initHome(app);
105
+ }
106
+ };
107
+
108
+ private async _initHome(app: IApplication) {
109
+ this._home = new Home(app);
110
+ await this._home.render();
111
+ }
112
+
113
+ private async _initEditor(app: IApplication) {
114
+ this._editor = new Editor(app, this.tabs);
115
+ }
116
+
117
+ registerHomeCommand(groupName: I18nKeys, command: CommandKeys | Button): void {
118
+ throw new Error("Method not implemented.");
119
+ }
120
+
121
+ registerRibbonCommand(tabName: I18nKeys, groupName: I18nKeys, command: CommandKeys | Button) {
122
+ this._editor?.registerRibbonCommand(tabName, groupName, command);
123
+ }
124
+
125
+ private applyTheme() {
126
+ const themeMode = Config.instance.themeMode;
127
+ let theme: "light" | "dark";
128
+
129
+ if (themeMode === "system") {
130
+ theme = window.matchMedia?.("(prefers-color-scheme: dark)").matches ? "dark" : "light";
131
+ } else {
132
+ theme = themeMode;
133
+ }
134
+
135
+ document.documentElement.setAttribute("theme", theme);
136
+ }
137
+
138
+ private readonly handleConfigChanged = (prop: keyof Config) => {
139
+ if (prop === "themeMode") {
140
+ this.applyTheme();
141
+ }
142
+
143
+ if (prop === "language") {
144
+ I18n.changeLanguage(Config.instance.language);
145
+ }
146
+
147
+ const shouldSaveProps: (keyof Config)[] = ["themeMode", "language", "navigation3DIndex"];
148
+ if (shouldSaveProps.includes(prop)) {
149
+ Config.instance.saveToStorage();
150
+ }
151
+ };
152
+ }
153
+
154
+ customElements.define("chili3d-main-window", MainWindow);
@@ -0,0 +1,54 @@
1
+ .root {
2
+ position: absolute;
3
+ top: 0;
4
+ left: 0;
5
+ }
6
+
7
+ .container {
8
+ display: flex;
9
+ flex-direction: column;
10
+ align-items: center;
11
+ margin: 16px;
12
+ border-radius: 12px;
13
+ box-shadow: var(--panel-shadow);
14
+ background-color: var(--panel-background-color);
15
+ padding: 6px;
16
+
17
+ .panel {
18
+ display: flex;
19
+ justify-content: center;
20
+ align-items: center;
21
+
22
+ .icon {
23
+ display: flex;
24
+ flex-direction: column;
25
+ justify-content: center;
26
+ align-items: center;
27
+ border-radius: 8px;
28
+ padding: 4px;
29
+
30
+ &:hover {
31
+ background-color: var(--hover-background-color);
32
+ }
33
+
34
+ svg {
35
+ width: 24px;
36
+ height: 24px;
37
+ margin: 4px;
38
+ }
39
+
40
+ span {
41
+ font-size: 12px;
42
+ user-select: none;
43
+ cursor: default;
44
+ }
45
+ }
46
+ }
47
+
48
+ .spacer {
49
+ height: 1px;
50
+ width: 100%;
51
+ background-color: var(--border-color);
52
+ margin: 6px 0px;
53
+ }
54
+ }