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.
- package/.github/workflows/main.yml +26 -0
- package/.vscode/c_cpp_properties.json +30 -0
- package/.vscode/launch.json +21 -0
- package/.vscode/settings.json +8 -0
- package/Dockerfile +7 -0
- package/LICENSE +661 -0
- package/README.md +184 -0
- package/biome.json +67 -0
- package/compose.yml +7 -0
- package/cpp/CMakeLists.txt +96 -0
- package/cpp/CMakePresets.json +43 -0
- package/cpp/README.md +21 -0
- package/cpp/src/converter.cpp +413 -0
- package/cpp/src/factory.cpp +612 -0
- package/cpp/src/geometry.cpp +204 -0
- package/cpp/src/mesher.cpp +330 -0
- package/cpp/src/opencascade.cpp +414 -0
- package/cpp/src/shape.cpp +447 -0
- package/cpp/src/shared.cpp +83 -0
- package/cpp/src/shared.hpp +211 -0
- package/cpp/src/transient.cpp +29 -0
- package/cpp/src/utils.cpp +114 -0
- package/cpp/src/utils.hpp +25 -0
- package/cpp/test/index.html +146 -0
- package/package.json +49 -0
- package/packages/chili/package.json +11 -0
- package/packages/chili/src/application.ts +200 -0
- package/packages/chili/src/bodys/arc.ts +61 -0
- package/packages/chili/src/bodys/boolean.ts +32 -0
- package/packages/chili/src/bodys/box.ts +73 -0
- package/packages/chili/src/bodys/circle.ts +57 -0
- package/packages/chili/src/bodys/cone.ts +64 -0
- package/packages/chili/src/bodys/cylinder.ts +69 -0
- package/packages/chili/src/bodys/ellipse.ts +85 -0
- package/packages/chili/src/bodys/face.ts +72 -0
- package/packages/chili/src/bodys/fuse.ts +44 -0
- package/packages/chili/src/bodys/index.ts +16 -0
- package/packages/chili/src/bodys/line.ts +48 -0
- package/packages/chili/src/bodys/polygon.ts +40 -0
- package/packages/chili/src/bodys/prism.ts +49 -0
- package/packages/chili/src/bodys/pyramid.ts +64 -0
- package/packages/chili/src/bodys/rect.ts +69 -0
- package/packages/chili/src/bodys/revolve.ts +54 -0
- package/packages/chili/src/bodys/sphere.ts +48 -0
- package/packages/chili/src/bodys/sweep.ts +67 -0
- package/packages/chili/src/bodys/wire.ts +36 -0
- package/packages/chili/src/commands/application/index.ts +10 -0
- package/packages/chili/src/commands/application/newDocument.ts +17 -0
- package/packages/chili/src/commands/application/openDocument.ts +35 -0
- package/packages/chili/src/commands/application/performanceTest.ts +64 -0
- package/packages/chili/src/commands/application/saveDocument.ts +24 -0
- package/packages/chili/src/commands/application/toFile.ts +35 -0
- package/packages/chili/src/commands/application/toggleDynamicWorkplane.ts +15 -0
- package/packages/chili/src/commands/application/wechatGroup.ts +42 -0
- package/packages/chili/src/commands/boolean.ts +109 -0
- package/packages/chili/src/commands/create/arc.ts +110 -0
- package/packages/chili/src/commands/create/bezier.ts +116 -0
- package/packages/chili/src/commands/create/box.ts +59 -0
- package/packages/chili/src/commands/create/circle.ts +54 -0
- package/packages/chili/src/commands/create/cone.ts +104 -0
- package/packages/chili/src/commands/create/converter.ts +159 -0
- package/packages/chili/src/commands/create/copySubShape.ts +37 -0
- package/packages/chili/src/commands/create/curveProjection.ts +61 -0
- package/packages/chili/src/commands/create/cylinder.ts +96 -0
- package/packages/chili/src/commands/create/ellipse.ts +95 -0
- package/packages/chili/src/commands/create/group.ts +205 -0
- package/packages/chili/src/commands/create/index.ts +26 -0
- package/packages/chili/src/commands/create/line.ts +61 -0
- package/packages/chili/src/commands/create/loft.ts +149 -0
- package/packages/chili/src/commands/create/offset.ts +131 -0
- package/packages/chili/src/commands/create/polygon.ts +104 -0
- package/packages/chili/src/commands/create/prism.ts +52 -0
- package/packages/chili/src/commands/create/pyramid.ts +56 -0
- package/packages/chili/src/commands/create/rect.ts +105 -0
- package/packages/chili/src/commands/create/revolve.ts +62 -0
- package/packages/chili/src/commands/create/section.ts +31 -0
- package/packages/chili/src/commands/create/sphere.ts +48 -0
- package/packages/chili/src/commands/create/sweep.ts +39 -0
- package/packages/chili/src/commands/create/thickSolid.ts +50 -0
- package/packages/chili/src/commands/createActCommand.ts +26 -0
- package/packages/chili/src/commands/createCommand.ts +41 -0
- package/packages/chili/src/commands/delete.ts +38 -0
- package/packages/chili/src/commands/folder.ts +18 -0
- package/packages/chili/src/commands/importExport.ts +97 -0
- package/packages/chili/src/commands/index.ts +17 -0
- package/packages/chili/src/commands/measure/angle.ts +130 -0
- package/packages/chili/src/commands/measure/index.ts +6 -0
- package/packages/chili/src/commands/measure/length.ts +57 -0
- package/packages/chili/src/commands/measure/select.module.css +68 -0
- package/packages/chili/src/commands/measure/select.ts +228 -0
- package/packages/chili/src/commands/modify/array.ts +447 -0
- package/packages/chili/src/commands/modify/break.ts +78 -0
- package/packages/chili/src/commands/modify/brush.ts +100 -0
- package/packages/chili/src/commands/modify/chamfer.ts +70 -0
- package/packages/chili/src/commands/modify/explode.ts +91 -0
- package/packages/chili/src/commands/modify/fillet.ts +69 -0
- package/packages/chili/src/commands/modify/index.ts +16 -0
- package/packages/chili/src/commands/modify/mirror.ts +49 -0
- package/packages/chili/src/commands/modify/move.ts +39 -0
- package/packages/chili/src/commands/modify/removeFeature.ts +56 -0
- package/packages/chili/src/commands/modify/removeSubShapes.ts +44 -0
- package/packages/chili/src/commands/modify/rotate.ts +112 -0
- package/packages/chili/src/commands/modify/split.ts +81 -0
- package/packages/chili/src/commands/modify/transformedCommand.ts +100 -0
- package/packages/chili/src/commands/modify/trim.ts +254 -0
- package/packages/chili/src/commands/multistepCommand.ts +125 -0
- package/packages/chili/src/commands/redo.ts +16 -0
- package/packages/chili/src/commands/undo.ts +16 -0
- package/packages/chili/src/commands/workingPlane.ts +150 -0
- package/packages/chili/src/comparers/NumberEqualityComparer.ts +12 -0
- package/packages/chili/src/comparers/XYZEqualityComparer.ts +12 -0
- package/packages/chili/src/comparers/index.ts +5 -0
- package/packages/chili/src/document.ts +145 -0
- package/packages/chili/src/editEventHandler.ts +20 -0
- package/packages/chili/src/index.ts +12 -0
- package/packages/chili/src/selection.ts +178 -0
- package/packages/chili/src/services/commandService.ts +105 -0
- package/packages/chili/src/services/editorService.ts +46 -0
- package/packages/chili/src/services/hotkeyService.ts +102 -0
- package/packages/chili/src/services/index.ts +6 -0
- package/packages/chili/src/snap/dimension.ts +33 -0
- package/packages/chili/src/snap/handlers/angleSnapEventHandler.ts +60 -0
- package/packages/chili/src/snap/handlers/index.ts +7 -0
- package/packages/chili/src/snap/handlers/lengthSnapEventHandler.ts +117 -0
- package/packages/chili/src/snap/handlers/pointSnapEventHandler.ts +176 -0
- package/packages/chili/src/snap/handlers/snapEventHandler.ts +288 -0
- package/packages/chili/src/snap/index.ts +6 -0
- package/packages/chili/src/snap/snap.ts +50 -0
- package/packages/chili/src/snap/snaps/axisSnap.ts +57 -0
- package/packages/chili/src/snap/snaps/baseSnap.ts +69 -0
- package/packages/chili/src/snap/snaps/featurePointStrategy.ts +64 -0
- package/packages/chili/src/snap/snaps/index.ts +7 -0
- package/packages/chili/src/snap/snaps/objectSnap.ts +264 -0
- package/packages/chili/src/snap/snaps/planeSnap.ts +55 -0
- package/packages/chili/src/snap/snaps/pointOnCurveSnap.ts +24 -0
- package/packages/chili/src/snap/tracking/axis.ts +32 -0
- package/packages/chili/src/snap/tracking/axisTracking.ts +46 -0
- package/packages/chili/src/snap/tracking/index.ts +6 -0
- package/packages/chili/src/snap/tracking/objectTracking.ts +90 -0
- package/packages/chili/src/snap/tracking/trackingBase.ts +40 -0
- package/packages/chili/src/snap/tracking/trackingSnap.ts +201 -0
- package/packages/chili/src/step/angleStep.ts +32 -0
- package/packages/chili/src/step/index.ts +8 -0
- package/packages/chili/src/step/lengthStep.ts +32 -0
- package/packages/chili/src/step/pointStep.ts +87 -0
- package/packages/chili/src/step/selectStep.ts +130 -0
- package/packages/chili/src/step/step.ts +55 -0
- package/packages/chili/src/utils.ts +19 -0
- package/packages/chili/test/command.test.ts +4 -0
- package/packages/chili-builder/package.json +13 -0
- package/packages/chili-builder/src/additionalModule.ts +15 -0
- package/packages/chili-builder/src/appBuilder.ts +176 -0
- package/packages/chili-builder/src/defaultDataExchange.ts +152 -0
- package/packages/chili-builder/src/index.ts +5 -0
- package/packages/chili-builder/src/ribbon.ts +129 -0
- package/packages/chili-controls/package.json +9 -0
- package/packages/chili-controls/src/collection.ts +96 -0
- package/packages/chili-controls/src/controls.ts +83 -0
- package/packages/chili-controls/src/converters/colorConverter.ts +39 -0
- package/packages/chili-controls/src/converters/index.ts +8 -0
- package/packages/chili-controls/src/converters/numberConverter.ts +15 -0
- package/packages/chili-controls/src/converters/stringConverter.ts +13 -0
- package/packages/chili-controls/src/converters/urlConverter.ts +10 -0
- package/packages/chili-controls/src/converters/xyzConverter.ts +28 -0
- package/packages/chili-controls/src/expander/expander.module.css +38 -0
- package/packages/chili-controls/src/expander/expander.ts +59 -0
- package/packages/chili-controls/src/expander/index.ts +4 -0
- package/packages/chili-controls/src/htmlProps.ts +10 -0
- package/packages/chili-controls/src/index.ts +10 -0
- package/packages/chili-controls/src/radioGroup.module.css +20 -0
- package/packages/chili-controls/src/radioGroup.ts +54 -0
- package/packages/chili-controls/src/utils.ts +20 -0
- package/packages/chili-controls/test/converter.test.ts +70 -0
- package/packages/chili-controls/test/styleMock.js +4 -0
- package/packages/chili-core/package.json +7 -0
- package/packages/chili-core/src/application.ts +38 -0
- package/packages/chili-core/src/command/command.ts +154 -0
- package/packages/chili-core/src/command/commandKeys.ts +8 -0
- package/packages/chili-core/src/command/decarator.ts +43 -0
- package/packages/chili-core/src/command/index.ts +6 -0
- package/packages/chili-core/src/config.ts +145 -0
- package/packages/chili-core/src/constants.ts +8 -0
- package/packages/chili-core/src/dataExchange.ts +12 -0
- package/packages/chili-core/src/document.ts +25 -0
- package/packages/chili-core/src/editor.ts +12 -0
- package/packages/chili-core/src/foundation/asyncController.ts +55 -0
- package/packages/chili-core/src/foundation/binding.ts +132 -0
- package/packages/chili-core/src/foundation/collection.ts +208 -0
- package/packages/chili-core/src/foundation/converter.ts +9 -0
- package/packages/chili-core/src/foundation/deepObserver.ts +154 -0
- package/packages/chili-core/src/foundation/disposable.ts +18 -0
- package/packages/chili-core/src/foundation/dto/index.ts +9 -0
- package/packages/chili-core/src/foundation/equalityComparer.ts +6 -0
- package/packages/chili-core/src/foundation/gc.ts +36 -0
- package/packages/chili-core/src/foundation/history.ts +237 -0
- package/packages/chili-core/src/foundation/id.ts +25 -0
- package/packages/chili-core/src/foundation/index.ts +26 -0
- package/packages/chili-core/src/foundation/lazy.ts +18 -0
- package/packages/chili-core/src/foundation/linkedList.ts +141 -0
- package/packages/chili-core/src/foundation/logger.ts +45 -0
- package/packages/chili-core/src/foundation/messageType.ts +8 -0
- package/packages/chili-core/src/foundation/objectStorage.ts +50 -0
- package/packages/chili-core/src/foundation/observer.ts +147 -0
- package/packages/chili-core/src/foundation/precision.ts +8 -0
- package/packages/chili-core/src/foundation/pubsub.ts +74 -0
- package/packages/chili-core/src/foundation/result.ts +69 -0
- package/packages/chili-core/src/foundation/storage.ts +10 -0
- package/packages/chili-core/src/foundation/transaction.ts +77 -0
- package/packages/chili-core/src/foundation/utils/debounce.ts +15 -0
- package/packages/chili-core/src/foundation/utils/download.ts +16 -0
- package/packages/chili-core/src/foundation/utils/index.ts +6 -0
- package/packages/chili-core/src/foundation/utils/readFileAsync.ts +84 -0
- package/packages/chili-core/src/i18n/i18n.ts +107 -0
- package/packages/chili-core/src/i18n/index.ts +5 -0
- package/packages/chili-core/src/i18n/keys.ts +265 -0
- package/packages/chili-core/src/index.ts +26 -0
- package/packages/chili-core/src/material.ts +269 -0
- package/packages/chili-core/src/math/boundingBox.ts +226 -0
- package/packages/chili-core/src/math/index.ts +14 -0
- package/packages/chili-core/src/math/line.ts +55 -0
- package/packages/chili-core/src/math/lineSegment.ts +166 -0
- package/packages/chili-core/src/math/mathUtils.ts +45 -0
- package/packages/chili-core/src/math/matrix4.ts +414 -0
- package/packages/chili-core/src/math/plane.ts +96 -0
- package/packages/chili-core/src/math/planeAngle.ts +53 -0
- package/packages/chili-core/src/math/quaternion.ts +131 -0
- package/packages/chili-core/src/math/ray.ts +30 -0
- package/packages/chili-core/src/math/xy.ts +104 -0
- package/packages/chili-core/src/math/xyz.ts +181 -0
- package/packages/chili-core/src/model/component.ts +305 -0
- package/packages/chili-core/src/model/facebaseNode.ts +17 -0
- package/packages/chili-core/src/model/folderNode.ts +289 -0
- package/packages/chili-core/src/model/geometryNode.ts +185 -0
- package/packages/chili-core/src/model/groupNode.ts +19 -0
- package/packages/chili-core/src/model/index.ts +12 -0
- package/packages/chili-core/src/model/meshNode.ts +53 -0
- package/packages/chili-core/src/model/node.ts +315 -0
- package/packages/chili-core/src/model/shapeNode.ts +195 -0
- package/packages/chili-core/src/model/visualNode.ts +39 -0
- package/packages/chili-core/src/modelManager.ts +147 -0
- package/packages/chili-core/src/navigation.ts +58 -0
- package/packages/chili-core/src/property.ts +60 -0
- package/packages/chili-core/src/selection.ts +33 -0
- package/packages/chili-core/src/selectionFilter.ts +28 -0
- package/packages/chili-core/src/serialize/index.ts +4 -0
- package/packages/chili-core/src/serialize/serializer.ts +231 -0
- package/packages/chili-core/src/service.ts +10 -0
- package/packages/chili-core/src/shape/curve.ts +174 -0
- package/packages/chili-core/src/shape/geometry.ts +17 -0
- package/packages/chili-core/src/shape/index.ts +12 -0
- package/packages/chili-core/src/shape/lineType.ts +7 -0
- package/packages/chili-core/src/shape/meshData.ts +347 -0
- package/packages/chili-core/src/shape/shape.ts +104 -0
- package/packages/chili-core/src/shape/shapeConverter.ts +17 -0
- package/packages/chili-core/src/shape/shapeFactory.ts +58 -0
- package/packages/chili-core/src/shape/shapeType.ts +75 -0
- package/packages/chili-core/src/shape/surface.ts +154 -0
- package/packages/chili-core/src/snapType.ts +32 -0
- package/packages/chili-core/src/ui/button.ts +16 -0
- package/packages/chili-core/src/ui/combobox.ts +27 -0
- package/packages/chili-core/src/ui/dialog.ts +7 -0
- package/packages/chili-core/src/ui/index.ts +8 -0
- package/packages/chili-core/src/ui/ribbon.ts +15 -0
- package/packages/chili-core/src/ui/window.ts +13 -0
- package/packages/chili-core/src/visual/act.ts +59 -0
- package/packages/chili-core/src/visual/cameraController.ts +22 -0
- package/packages/chili-core/src/visual/cursorType.ts +4 -0
- package/packages/chili-core/src/visual/detectedData.ts +14 -0
- package/packages/chili-core/src/visual/eventHandler.ts +15 -0
- package/packages/chili-core/src/visual/highlighter.ts +16 -0
- package/packages/chili-core/src/visual/index.ts +20 -0
- package/packages/chili-core/src/visual/meshExporter.ts +11 -0
- package/packages/chili-core/src/visual/meshUtils.ts +276 -0
- package/packages/chili-core/src/visual/textGenerator.ts +8 -0
- package/packages/chili-core/src/visual/view.ts +80 -0
- package/packages/chili-core/src/visual/viewGizmo.ts +8 -0
- package/packages/chili-core/src/visual/viewport.ts +10 -0
- package/packages/chili-core/src/visual/visual.ts +24 -0
- package/packages/chili-core/src/visual/visualContext.ts +29 -0
- package/packages/chili-core/src/visual/visualFactory.ts +10 -0
- package/packages/chili-core/src/visual/visualObject.ts +25 -0
- package/packages/chili-core/src/visual/visualShape.ts +30 -0
- package/packages/chili-core/test/binding.test.ts +95 -0
- package/packages/chili-core/test/boundingBox.test.ts +60 -0
- package/packages/chili-core/test/collection.test.ts +53 -0
- package/packages/chili-core/test/history.test.ts +42 -0
- package/packages/chili-core/test/line.test.ts +75 -0
- package/packages/chili-core/test/linesegment.test.ts +98 -0
- package/packages/chili-core/test/linkedList.test.ts +82 -0
- package/packages/chili-core/test/math.test.ts +34 -0
- package/packages/chili-core/test/matrix.test.ts +129 -0
- package/packages/chili-core/test/node.test.ts +122 -0
- package/packages/chili-core/test/nodeList.test.ts +247 -0
- package/packages/chili-core/test/observer.test.ts +91 -0
- package/packages/chili-core/test/plane.test.ts +31 -0
- package/packages/chili-core/test/quaternion.test.ts +14 -0
- package/packages/chili-core/test/result.test.ts +24 -0
- package/packages/chili-core/test/serializer.test.ts +58 -0
- package/packages/chili-core/test/snapType.test.ts +10 -0
- package/packages/chili-core/test/task.test.ts +41 -0
- package/packages/chili-core/test/testDocument.ts +70 -0
- package/packages/chili-core/test/transaction.test.ts +42 -0
- package/packages/chili-core/test/visual.test.ts +42 -0
- package/packages/chili-core/test/xyz.test.ts +260 -0
- package/packages/chili-geo/package.json +9 -0
- package/packages/chili-geo/src/index.ts +4 -0
- package/packages/chili-geo/src/utils.ts +113 -0
- package/packages/chili-i18n/package.json +9 -0
- package/packages/chili-i18n/src/en.ts +270 -0
- package/packages/chili-i18n/src/index.ts +8 -0
- package/packages/chili-i18n/src/pt-br.ts +67 -0
- package/packages/chili-i18n/src/zh-cn.ts +269 -0
- package/packages/chili-storage/package.json +9 -0
- package/packages/chili-storage/src/index.ts +4 -0
- package/packages/chili-storage/src/indexedDBStorage.ts +150 -0
- package/packages/chili-three/package.json +13 -0
- package/packages/chili-three/src/cameraController.ts +335 -0
- package/packages/chili-three/src/common.ts +65 -0
- package/packages/chili-three/src/constants.ts +12 -0
- package/packages/chili-three/src/highlightable.ts +13 -0
- package/packages/chili-three/src/index.ts +4 -0
- package/packages/chili-three/src/meshExporter.ts +69 -0
- package/packages/chili-three/src/outlinePass.js +340 -0
- package/packages/chili-three/src/texture_points.jpg +0 -0
- package/packages/chili-three/src/threeGeometry.ts +207 -0
- package/packages/chili-three/src/threeGeometryFactory.ts +120 -0
- package/packages/chili-three/src/threeHelper.ts +174 -0
- package/packages/chili-three/src/threeHighlighter.ts +257 -0
- package/packages/chili-three/src/threeView.module.css +39 -0
- package/packages/chili-three/src/threeView.ts +669 -0
- package/packages/chili-three/src/threeViewEventHandler.ts +193 -0
- package/packages/chili-three/src/threeVisual.ts +92 -0
- package/packages/chili-three/src/threeVisualContext.ts +435 -0
- package/packages/chili-three/src/threeVisualFactory.ts +12 -0
- package/packages/chili-three/src/threeVisualObject.ts +442 -0
- package/packages/chili-three/src/viewGizmo.ts +305 -0
- package/packages/chili-three/test/cameraControls.ts +10 -0
- package/packages/chili-three/test/testDocument.ts +68 -0
- package/packages/chili-three/test/testEdge.ts +171 -0
- package/packages/chili-three/test/testView.ts +78 -0
- package/packages/chili-three/test/three.test.ts +44 -0
- package/packages/chili-three/test/viewGizmo.ts +12 -0
- package/packages/chili-ui/package.json +12 -0
- package/packages/chili-ui/src/cursor/draw.cur +0 -0
- package/packages/chili-ui/src/cursor/index.ts +17 -0
- package/packages/chili-ui/src/dialog.module.css +63 -0
- package/packages/chili-ui/src/dialog.ts +42 -0
- package/packages/chili-ui/src/editor.module.css +83 -0
- package/packages/chili-ui/src/editor.ts +142 -0
- package/packages/chili-ui/src/home/home.module.css +301 -0
- package/packages/chili-ui/src/home/home.ts +243 -0
- package/packages/chili-ui/src/home/index.ts +4 -0
- package/packages/chili-ui/src/home/languageSelector.ts +27 -0
- package/packages/chili-ui/src/home/navigation3DSelector.ts +27 -0
- package/packages/chili-ui/src/home/themeSelector.ts +34 -0
- package/packages/chili-ui/src/index.ts +5 -0
- package/packages/chili-ui/src/mainWindow.module.css +144 -0
- package/packages/chili-ui/src/mainWindow.ts +154 -0
- package/packages/chili-ui/src/okCancel.module.css +54 -0
- package/packages/chili-ui/src/okCancel.ts +58 -0
- package/packages/chili-ui/src/permanent.module.css +44 -0
- package/packages/chili-ui/src/permanent.ts +31 -0
- package/packages/chili-ui/src/project/index.ts +4 -0
- package/packages/chili-ui/src/project/projectView.module.css +37 -0
- package/packages/chili-ui/src/project/projectView.ts +77 -0
- package/packages/chili-ui/src/project/toolBar.module.css +16 -0
- package/packages/chili-ui/src/project/toolBar.ts +73 -0
- package/packages/chili-ui/src/project/tree/index.ts +5 -0
- package/packages/chili-ui/src/project/tree/tree.module.css +16 -0
- package/packages/chili-ui/src/project/tree/tree.ts +265 -0
- package/packages/chili-ui/src/project/tree/treeItem.module.css +21 -0
- package/packages/chili-ui/src/project/tree/treeItem.ts +89 -0
- package/packages/chili-ui/src/project/tree/treeItemGroup.module.css +33 -0
- package/packages/chili-ui/src/project/tree/treeItemGroup.ts +85 -0
- package/packages/chili-ui/src/project/tree/treeModel.module.css +11 -0
- package/packages/chili-ui/src/project/tree/treeModel.ts +20 -0
- package/packages/chili-ui/src/property/check.ts +39 -0
- package/packages/chili-ui/src/property/colorPorperty.module.css +6 -0
- package/packages/chili-ui/src/property/colorProperty.ts +63 -0
- package/packages/chili-ui/src/property/common.module.css +14 -0
- package/packages/chili-ui/src/property/index.ts +4 -0
- package/packages/chili-ui/src/property/input.module.css +19 -0
- package/packages/chili-ui/src/property/input.ts +140 -0
- package/packages/chili-ui/src/property/material/index.ts +5 -0
- package/packages/chili-ui/src/property/material/materialDataContent.ts +44 -0
- package/packages/chili-ui/src/property/material/materialEditor.module.css +98 -0
- package/packages/chili-ui/src/property/material/materialEditor.ts +147 -0
- package/packages/chili-ui/src/property/material/textureEditor.module.css +46 -0
- package/packages/chili-ui/src/property/material/textureEditor.ts +61 -0
- package/packages/chili-ui/src/property/materialProperty.module.css +30 -0
- package/packages/chili-ui/src/property/materialProperty.ts +86 -0
- package/packages/chili-ui/src/property/matrixProperty.ts +147 -0
- package/packages/chili-ui/src/property/propertyBase.module.css +3 -0
- package/packages/chili-ui/src/property/propertyBase.ts +14 -0
- package/packages/chili-ui/src/property/propertyView.module.css +36 -0
- package/packages/chili-ui/src/property/propertyView.ts +115 -0
- package/packages/chili-ui/src/property/utils.ts +48 -0
- package/packages/chili-ui/src/ribbon/commandContext.module.css +73 -0
- package/packages/chili-ui/src/ribbon/commandContext.ts +239 -0
- package/packages/chili-ui/src/ribbon/index.ts +4 -0
- package/packages/chili-ui/src/ribbon/ribbon.module.css +286 -0
- package/packages/chili-ui/src/ribbon/ribbon.ts +288 -0
- package/packages/chili-ui/src/ribbon/ribbonButton.module.css +75 -0
- package/packages/chili-ui/src/ribbon/ribbonButton.ts +88 -0
- package/packages/chili-ui/src/ribbon/ribbonData.ts +66 -0
- package/packages/chili-ui/src/ribbon/ribbonStack.module.css +6 -0
- package/packages/chili-ui/src/ribbon/ribbonStack.ts +13 -0
- package/packages/chili-ui/src/ribbon/ribbonToggleButton.module.css +3 -0
- package/packages/chili-ui/src/ribbon/ribbonToggleButton.ts +6 -0
- package/packages/chili-ui/src/statusbar/index.ts +4 -0
- package/packages/chili-ui/src/statusbar/snapConfig.module.css +25 -0
- package/packages/chili-ui/src/statusbar/snapConfig.ts +92 -0
- package/packages/chili-ui/src/statusbar/statusbar.module.css +28 -0
- package/packages/chili-ui/src/statusbar/statusbar.ts +54 -0
- package/packages/chili-ui/src/toast/index.ts +4 -0
- package/packages/chili-ui/src/toast/toast.module.css +27 -0
- package/packages/chili-ui/src/toast/toast.ts +39 -0
- package/packages/chili-ui/src/viewport/flyout/flyout.module.css +9 -0
- package/packages/chili-ui/src/viewport/flyout/flyout.ts +77 -0
- package/packages/chili-ui/src/viewport/flyout/index.ts +6 -0
- package/packages/chili-ui/src/viewport/flyout/input.module.css +21 -0
- package/packages/chili-ui/src/viewport/flyout/input.ts +89 -0
- package/packages/chili-ui/src/viewport/flyout/tip.module.css +21 -0
- package/packages/chili-ui/src/viewport/flyout/tip.ts +45 -0
- package/packages/chili-ui/src/viewport/index.ts +4 -0
- package/packages/chili-ui/src/viewport/layoutViewport.module.css +21 -0
- package/packages/chili-ui/src/viewport/layoutViewport.ts +76 -0
- package/packages/chili-ui/src/viewport/viewport.module.css +179 -0
- package/packages/chili-ui/src/viewport/viewport.ts +296 -0
- package/packages/chili-vis/package.json +9 -0
- package/packages/chili-vis/src/index.ts +7 -0
- package/packages/chili-vis/src/nodeSelectionEventHandler.ts +122 -0
- package/packages/chili-vis/src/selectionEventHandler.ts +145 -0
- package/packages/chili-vis/src/shapeSelectionEventHandler.ts +176 -0
- package/packages/chili-vis/src/viewUtils.ts +64 -0
- package/packages/chili-wasm/lib/chili-wasm.d.ts +827 -0
- package/packages/chili-wasm/lib/chili-wasm.js +5275 -0
- package/packages/chili-wasm/lib/chili-wasm.wasm +0 -0
- package/packages/chili-wasm/package.json +10 -0
- package/packages/chili-wasm/src/converter.ts +124 -0
- package/packages/chili-wasm/src/curve.ts +589 -0
- package/packages/chili-wasm/src/factory.ts +331 -0
- package/packages/chili-wasm/src/geometry.ts +51 -0
- package/packages/chili-wasm/src/helper.ts +435 -0
- package/packages/chili-wasm/src/index.ts +5 -0
- package/packages/chili-wasm/src/mesher.ts +114 -0
- package/packages/chili-wasm/src/shape.ts +481 -0
- package/packages/chili-wasm/src/surface.ts +510 -0
- package/packages/chili-wasm/src/wasm.ts +13 -0
- package/packages/chili-web/package.json +9 -0
- package/packages/chili-web/src/index.ts +33 -0
- package/packages/chili-web/src/loading.ts +67 -0
- package/packages/global.d.ts +31 -0
- package/public/favicon.svg +10 -0
- package/public/fonts/fzhei.json +46120 -0
- package/public/iconfont.js +1 -0
- package/public/images/wechat.jpg +0 -0
- package/public/index.css +13 -0
- package/public/index.html +24 -0
- package/rspack.config.ts +93 -0
- package/rstest.config.ts +27 -0
- package/screenshots/screenshot.png +0 -0
- package/scripts/add_copyright.mjs +59 -0
- package/scripts/build-npm.mjs +105 -0
- package/scripts/common.mjs +24 -0
- package/scripts/release.mjs +92 -0
- package/scripts/restore-package-json.mjs +27 -0
- package/scripts/setup_wasm_deps.mjs +97 -0
- package/scripts/update-package-json.mjs +27 -0
- package/tsconfig.build.json +14 -0
- package/tsconfig.build.tsbuildinfo +1 -0
- 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,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,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
|
+
}
|