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,83 @@
|
|
|
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 { Localize } from "chili-core";
|
|
5
|
+
import { Collection, type CollectionProps } from "./collection";
|
|
6
|
+
import type { HTMLProps } from "./htmlProps";
|
|
7
|
+
import { setProperties } from "./utils";
|
|
8
|
+
|
|
9
|
+
export function createControl<K extends keyof HTMLElementTagNameMap>(tag: K) {
|
|
10
|
+
return (
|
|
11
|
+
props?: HTMLProps<HTMLElementTagNameMap[K]> | string | Node,
|
|
12
|
+
...children: (Node | string)[]
|
|
13
|
+
): HTMLElementTagNameMap[K] => {
|
|
14
|
+
const e: HTMLElementTagNameMap[K] = document.createElement(tag);
|
|
15
|
+
if (props) {
|
|
16
|
+
if (typeof props === "string" || props instanceof Node) {
|
|
17
|
+
e.append(props);
|
|
18
|
+
} else {
|
|
19
|
+
setProperties(e, props);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
children.forEach((c) => e.append(c));
|
|
23
|
+
return e;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export const div = createControl("div");
|
|
28
|
+
export const span = createControl("span");
|
|
29
|
+
export const input = createControl("input");
|
|
30
|
+
export const button = createControl("button");
|
|
31
|
+
export const label = createControl("label");
|
|
32
|
+
export const textarea = createControl("textarea");
|
|
33
|
+
export const select = createControl("select");
|
|
34
|
+
export const option = createControl("option");
|
|
35
|
+
export const a = createControl("a");
|
|
36
|
+
export const h1 = createControl("h1");
|
|
37
|
+
export const h2 = createControl("h2");
|
|
38
|
+
export const h3 = createControl("h3");
|
|
39
|
+
export const p = createControl("p");
|
|
40
|
+
export const ul = createControl("ul");
|
|
41
|
+
export const li = createControl("li");
|
|
42
|
+
export const img = createControl("img");
|
|
43
|
+
export const dialog = createControl("dialog");
|
|
44
|
+
export const canvas = createControl("canvas");
|
|
45
|
+
export const sup = createControl("sup");
|
|
46
|
+
export const form = createControl("form");
|
|
47
|
+
export const br = createControl("br");
|
|
48
|
+
|
|
49
|
+
export function svg(props: HTMLProps<HTMLElement> & { icon: string }) {
|
|
50
|
+
const ns = "http://www.w3.org/2000/svg";
|
|
51
|
+
const child = document.createElementNS(ns, "use");
|
|
52
|
+
child.setAttributeNS("http://www.w3.org/1999/xlink", "xlink:href", `#${props.icon}`);
|
|
53
|
+
const svg = document.createElementNS(ns, "svg");
|
|
54
|
+
svg.append(child);
|
|
55
|
+
const className = String(props.className);
|
|
56
|
+
delete props.className;
|
|
57
|
+
setProperties(svg, props);
|
|
58
|
+
svg.classList.add(className);
|
|
59
|
+
if (props.title) {
|
|
60
|
+
addTitle(props, svg);
|
|
61
|
+
}
|
|
62
|
+
return svg;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export function setSVGIcon(svg: SVGSVGElement, newIcon: string) {
|
|
66
|
+
const child = svg.firstChild as SVGUseElement;
|
|
67
|
+
child?.setAttributeNS("http://www.w3.org/1999/xlink", "xlink:href", `#${newIcon}`);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
function addTitle(props: HTMLProps<HTMLElement> & { icon: string }, svg: SVGSVGElement) {
|
|
71
|
+
const title = document.createElementNS("http://www.w3.org/2000/svg", "title");
|
|
72
|
+
if (props.title instanceof Localize) {
|
|
73
|
+
props.title.set(title as any, "textContent");
|
|
74
|
+
} else if (typeof props.title === "string") {
|
|
75
|
+
title.textContent = props.title;
|
|
76
|
+
} else {
|
|
77
|
+
props.title?.setBinding(title, "textContent");
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
svg.appendChild(title);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export const collection = <T>(options: CollectionProps<T>) => new Collection(options);
|
|
@@ -0,0 +1,39 @@
|
|
|
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 IConverter, Result } from "chili-core";
|
|
5
|
+
|
|
6
|
+
export class ColorConverter implements IConverter<number | string> {
|
|
7
|
+
convert(value: number | string): Result<string> {
|
|
8
|
+
// Handle undefined, null, or invalid values
|
|
9
|
+
if (value === undefined || value === null) {
|
|
10
|
+
return Result.ok("#808080"); // Default gray color
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
if (typeof value === "string") {
|
|
14
|
+
// If it's already a valid hex string, return it
|
|
15
|
+
if (value.startsWith("#") && /^#[0-9A-Fa-f]{6}$/.test(value)) {
|
|
16
|
+
return Result.ok(value);
|
|
17
|
+
}
|
|
18
|
+
// If it's a hex string without #, add it
|
|
19
|
+
if (/^[0-9A-Fa-f]{6}$/.test(value)) {
|
|
20
|
+
return Result.ok(`#${value}`);
|
|
21
|
+
}
|
|
22
|
+
// If it's an empty string or invalid, use default
|
|
23
|
+
return Result.ok("#808080");
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
if (typeof value === "number" && !isNaN(value)) {
|
|
27
|
+
return Result.ok(`#${value.toString(16).padStart(6, "0")}`);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// Fallback for any other invalid values
|
|
31
|
+
return Result.ok("#808080");
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
convertBack(value: string): Result<number> {
|
|
35
|
+
const hexValue = value.startsWith("#") ? value.substring(1) : value;
|
|
36
|
+
const result = parseInt(hexValue, 16);
|
|
37
|
+
return Number.isNaN(result) ? Result.err(`Invalid hex string: ${value}`) : Result.ok(result);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// Part of the Chili3d Project, under the AGPL-3.0 License.
|
|
2
|
+
// See LICENSE file in the project root for full license information.
|
|
3
|
+
|
|
4
|
+
export * from "./colorConverter";
|
|
5
|
+
export * from "./numberConverter";
|
|
6
|
+
export * from "./stringConverter";
|
|
7
|
+
export * from "./urlConverter";
|
|
8
|
+
export * from "./xyzConverter";
|
|
@@ -0,0 +1,15 @@
|
|
|
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 IConverter, Result } from "chili-core";
|
|
5
|
+
|
|
6
|
+
export class NumberConverter implements IConverter<number> {
|
|
7
|
+
convert(value: number): Result<string> {
|
|
8
|
+
return Number.isNaN(value) ? Result.err("Number is NaN") : Result.ok(String(value));
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
convertBack(value: string): Result<number> {
|
|
12
|
+
const n = Number(value);
|
|
13
|
+
return Number.isNaN(n) ? Result.err(`${value} can not convert to number`) : Result.ok(n);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
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 IConverter, Result } from "chili-core";
|
|
5
|
+
|
|
6
|
+
export class StringConverter implements IConverter<string> {
|
|
7
|
+
convert(value: string): Result<string> {
|
|
8
|
+
return Result.ok(value);
|
|
9
|
+
}
|
|
10
|
+
convertBack(value: string): Result<string> {
|
|
11
|
+
return Result.ok(value);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// Part of the Chili3d Project, under the AGPL-3.0 License.
|
|
2
|
+
// See LICENSE file in the project root for full license information.
|
|
3
|
+
|
|
4
|
+
import { type IConverter, Result } from "chili-core";
|
|
5
|
+
|
|
6
|
+
export class UrlStringConverter implements IConverter<string> {
|
|
7
|
+
convert(value: string): Result<string> {
|
|
8
|
+
return Result.ok(`url('${value}')`);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
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 IConverter, Result, XY, XYZ } from "chili-core";
|
|
5
|
+
|
|
6
|
+
export class XYConverter implements IConverter<XY> {
|
|
7
|
+
convert(value: XY) {
|
|
8
|
+
return Result.ok(`${value.x},${value.y}`);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
convertBack(value: string): Result<XY> {
|
|
12
|
+
const vs = value.split(",").map(Number).filter(isFinite);
|
|
13
|
+
return vs.length === 2 ? Result.ok(new XY(vs[0], vs[1])) : Result.err(`${value} convert to XY error`);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export class XYZConverter implements IConverter<XYZ> {
|
|
18
|
+
convert(value: XYZ) {
|
|
19
|
+
return Result.ok(`${value.x},${value.y},${value.z}`);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
convertBack(value: string): Result<XYZ> {
|
|
23
|
+
const vs = value.split(",").map(Number).filter(isFinite);
|
|
24
|
+
return vs.length === 3
|
|
25
|
+
? Result.ok(new XYZ(vs[0], vs[1], vs[2]))
|
|
26
|
+
: Result.err(`${value} convert to XYZ error`);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
.rootPanel {
|
|
2
|
+
display: flex;
|
|
3
|
+
flex-direction: column;
|
|
4
|
+
border: 1px solid var(--border-color);
|
|
5
|
+
border-radius: 6px;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
.headerPanel {
|
|
9
|
+
display: flex;
|
|
10
|
+
flex-direction: row;
|
|
11
|
+
align-items: center;
|
|
12
|
+
padding: 4px 6px;
|
|
13
|
+
background-color: var(--border-color);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.headerPanel:hover {
|
|
17
|
+
background-color: var(--hover-background-color);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.contextPanel {
|
|
21
|
+
display: flex;
|
|
22
|
+
flex-direction: column;
|
|
23
|
+
padding: 8px 16px;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.expanderIcon {
|
|
27
|
+
width: 12px;
|
|
28
|
+
height: 12px;
|
|
29
|
+
margin-right: 12px;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.headerText {
|
|
33
|
+
font-size: 14px;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.hidden {
|
|
37
|
+
display: none;
|
|
38
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
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 I18nKeys, Localize } from "chili-core";
|
|
5
|
+
import { div, label, setSVGIcon, svg } from "../controls";
|
|
6
|
+
import style from "./expander.module.css";
|
|
7
|
+
|
|
8
|
+
export class Expander extends HTMLElement {
|
|
9
|
+
private _isExpanded = true;
|
|
10
|
+
private readonly expanderIcon: SVGSVGElement;
|
|
11
|
+
private readonly headerPanel = div({ className: style.headerPanel });
|
|
12
|
+
readonly contenxtPanel = div({ className: style.contextPanel });
|
|
13
|
+
|
|
14
|
+
constructor(header: I18nKeys) {
|
|
15
|
+
super();
|
|
16
|
+
this.className = style.rootPanel;
|
|
17
|
+
this.expanderIcon = svg({
|
|
18
|
+
icon: this.getExpanderIcon(),
|
|
19
|
+
className: style.expanderIcon,
|
|
20
|
+
onclick: this._handleExpanderClick,
|
|
21
|
+
});
|
|
22
|
+
const text = label({
|
|
23
|
+
textContent: new Localize(header),
|
|
24
|
+
className: style.headerText,
|
|
25
|
+
});
|
|
26
|
+
this.headerPanel.append(this.expanderIcon, text);
|
|
27
|
+
super.append(this.headerPanel, this.contenxtPanel);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
override appendChild<T extends Node>(node: T): T {
|
|
31
|
+
return this.contenxtPanel.appendChild(node);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
override append(...nodes: Node[]): void {
|
|
35
|
+
this.contenxtPanel.append(...nodes);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
override removeChild<T extends Node>(child: T): T {
|
|
39
|
+
return this.contenxtPanel.removeChild(child);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
addItem(...nodes: Node[]) {
|
|
43
|
+
this.append(...nodes);
|
|
44
|
+
return this;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
private getExpanderIcon() {
|
|
48
|
+
return this._isExpanded ? "icon-angle-down" : "icon-angle-right";
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
private readonly _handleExpanderClick = (e: MouseEvent) => {
|
|
52
|
+
e.stopPropagation();
|
|
53
|
+
this._isExpanded = !this._isExpanded;
|
|
54
|
+
setSVGIcon(this.expanderIcon, this.getExpanderIcon());
|
|
55
|
+
this.contenxtPanel.classList.toggle(style.hidden, !this._isExpanded);
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
customElements.define("chili-expander", Expander);
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// Part of the Chili3d Project, under the AGPL-3.0 License.
|
|
2
|
+
// See LICENSE file in the project root for full license information.
|
|
3
|
+
|
|
4
|
+
import type { IPropertyChanged, Localize, PathBinding } from "chili-core";
|
|
5
|
+
|
|
6
|
+
export type HTMLProps<T> = {
|
|
7
|
+
[P in keyof T]?: T[P] extends object
|
|
8
|
+
? HTMLProps<T[P]>
|
|
9
|
+
: (T[P] | PathBinding<IPropertyChanged>) | (P extends "textContent" | "title" ? Localize : never);
|
|
10
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// Part of the Chili3d Project, under the AGPL-3.0 License.
|
|
2
|
+
// See LICENSE file in the project root for full license information.
|
|
3
|
+
|
|
4
|
+
export * from "./collection";
|
|
5
|
+
export * from "./controls";
|
|
6
|
+
export * from "./converters";
|
|
7
|
+
export * from "./expander";
|
|
8
|
+
export * from "./htmlProps";
|
|
9
|
+
export * from "./radioGroup";
|
|
10
|
+
export * from "./utils";
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
.radioGroup {
|
|
2
|
+
display: flex;
|
|
3
|
+
flex-direction: row;
|
|
4
|
+
align-items: center;
|
|
5
|
+
justify-items: center;
|
|
6
|
+
|
|
7
|
+
input {
|
|
8
|
+
font-size: 1em;
|
|
9
|
+
width: 1.5em;
|
|
10
|
+
height: 1.5em;
|
|
11
|
+
justify-content: center;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
label {
|
|
15
|
+
justify-content: center;
|
|
16
|
+
font-size: 1em;
|
|
17
|
+
margin-left: 2px;
|
|
18
|
+
margin-right: 16px;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
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 { SelectableItems } from "chili-core";
|
|
5
|
+
import { div, input, label } from "./controls";
|
|
6
|
+
import style from "./radioGroup.module.css";
|
|
7
|
+
|
|
8
|
+
export class RadioGroup extends HTMLElement {
|
|
9
|
+
constructor(
|
|
10
|
+
readonly header: string,
|
|
11
|
+
readonly context: SelectableItems<any>,
|
|
12
|
+
) {
|
|
13
|
+
super();
|
|
14
|
+
this.appendChild(this.render());
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
render() {
|
|
18
|
+
return div(
|
|
19
|
+
{ className: style.radioGroup },
|
|
20
|
+
...this.context.items.flatMap((x, i) => [
|
|
21
|
+
input({
|
|
22
|
+
type: "radio",
|
|
23
|
+
value: x,
|
|
24
|
+
checked: this.context.selectedItems.has(x),
|
|
25
|
+
id: `radio-${i}`,
|
|
26
|
+
}),
|
|
27
|
+
label({
|
|
28
|
+
htmlFor: `radio-${i}`,
|
|
29
|
+
textContent: x,
|
|
30
|
+
}),
|
|
31
|
+
]),
|
|
32
|
+
);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
connectedCallback() {
|
|
36
|
+
this.addEventListener("click", this._onClick);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
disconnectedCallback() {
|
|
40
|
+
this.removeEventListener("click", this._onClick);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
private readonly _onClick = (e: MouseEvent) => {
|
|
44
|
+
const target = e.target as HTMLInputElement;
|
|
45
|
+
if (target?.type === "radio") {
|
|
46
|
+
this.querySelectorAll("input").forEach((x) => {
|
|
47
|
+
x.checked = x === target;
|
|
48
|
+
});
|
|
49
|
+
this.context.selectedItems = new Set([target.value]);
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
customElements.define("chili-radios", RadioGroup);
|
|
@@ -0,0 +1,20 @@
|
|
|
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 { Localize, PathBinding } from "chili-core";
|
|
5
|
+
import type { HTMLProps } from "./htmlProps";
|
|
6
|
+
|
|
7
|
+
export function setProperties<T extends { [K: string]: any }>(left: T, prop: HTMLProps<T>) {
|
|
8
|
+
for (const key in prop) {
|
|
9
|
+
const value = prop[key];
|
|
10
|
+
if (value instanceof Localize && (key === "textContent" || key === "title")) {
|
|
11
|
+
value.set(left, key);
|
|
12
|
+
} else if (value instanceof PathBinding) {
|
|
13
|
+
value.setBinding(left, key);
|
|
14
|
+
} else if (typeof value === "object" && typeof left[key] === "object") {
|
|
15
|
+
setProperties(left[key], value);
|
|
16
|
+
} else {
|
|
17
|
+
(left as any)[key] = value;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
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 IConverter, XYZ } from "chili-core";
|
|
5
|
+
import { ColorConverter } from "../src/converters/colorConverter";
|
|
6
|
+
import { NumberConverter } from "../src/converters/numberConverter";
|
|
7
|
+
import { StringConverter } from "../src/converters/stringConverter";
|
|
8
|
+
import { XYZConverter } from "../src/converters/xyzConverter";
|
|
9
|
+
|
|
10
|
+
describe("converter test", () => {
|
|
11
|
+
test("test type", () => {
|
|
12
|
+
const converters = [new XYZConverter(), new NumberConverter()];
|
|
13
|
+
expect(converters.every((x) => (x as IConverter).convert !== undefined)).toBeTruthy();
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
test("test XYZConverter", () => {
|
|
17
|
+
const converter = new XYZConverter();
|
|
18
|
+
const xyz = XYZ.unitX;
|
|
19
|
+
const c = converter.convert(xyz);
|
|
20
|
+
expect(c.value).toStrictEqual("1,0,0");
|
|
21
|
+
expect(converter.convertBack(c.value).value.x).toBe(1);
|
|
22
|
+
expect(converter.convertBack("1").isOk).toBe(false);
|
|
23
|
+
expect(converter.convertBack("1, 1, 1, 1").isOk).toBe(false);
|
|
24
|
+
expect(converter.convertBack("1, 1, 1").value).toStrictEqual(new XYZ(1, 1, 1));
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
test("test NumberConverter", () => {
|
|
28
|
+
const converter = new NumberConverter();
|
|
29
|
+
expect(converter.convert(Number.NaN).isOk).toBe(false);
|
|
30
|
+
expect(converter.convert(-20).value).toBe("-20");
|
|
31
|
+
expect(converter.convert(20).value).toBe("20");
|
|
32
|
+
expect(converter.convert(1e3).value).toBe("1000");
|
|
33
|
+
expect(converter.convertBack("NaN").isOk).toBeFalsy();
|
|
34
|
+
expect(converter.convertBack("1a").isOk).toBeFalsy();
|
|
35
|
+
expect(converter.convertBack("1E-3").value).toBe(0.001);
|
|
36
|
+
expect(converter.convertBack("-3").value).toBe(-3);
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
test("test StringConverter", () => {
|
|
40
|
+
const converter = new StringConverter();
|
|
41
|
+
expect(converter.convert("").value).toBe("");
|
|
42
|
+
expect(converter.convertBack("").value).toBe("");
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
test("test ColorConverter", () => {
|
|
46
|
+
const converter = new ColorConverter();
|
|
47
|
+
|
|
48
|
+
// Test normal number conversion
|
|
49
|
+
expect(converter.convert(0xff0000).value).toBe("#ff0000");
|
|
50
|
+
expect(converter.convert(255).value).toBe("#0000ff");
|
|
51
|
+
expect(converter.convert(0).value).toBe("#000000");
|
|
52
|
+
|
|
53
|
+
// Test string conversion
|
|
54
|
+
expect(converter.convert("#ff0000").value).toBe("#ff0000");
|
|
55
|
+
expect(converter.convert("ff0000").value).toBe("#ff0000");
|
|
56
|
+
expect(converter.convert("#FF0000").value).toBe("#FF0000");
|
|
57
|
+
|
|
58
|
+
// Test undefined and null handling (NEW)
|
|
59
|
+
expect(converter.convert(undefined as any).value).toBe("#808080");
|
|
60
|
+
expect(converter.convert(null as any).value).toBe("#808080");
|
|
61
|
+
expect(converter.convert("" as any).value).toBe("#808080");
|
|
62
|
+
expect(converter.convert("invalid" as any).value).toBe("#808080");
|
|
63
|
+
expect(converter.convert(NaN as any).value).toBe("#808080");
|
|
64
|
+
|
|
65
|
+
// Test convertBack
|
|
66
|
+
expect(converter.convertBack("#ff0000").value).toBe(0xff0000);
|
|
67
|
+
expect(converter.convertBack("ff0000").value).toBe(0xff0000);
|
|
68
|
+
expect(converter.convertBack("invalid").isOk).toBe(false);
|
|
69
|
+
});
|
|
70
|
+
});
|
|
@@ -0,0 +1,38 @@
|
|
|
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 { ICommand } from "./command";
|
|
5
|
+
import type { IDataExchange } from "./dataExchange";
|
|
6
|
+
import type { IDocument } from "./document";
|
|
7
|
+
import type { IStorage, ObservableCollection } from "./foundation";
|
|
8
|
+
import type { Serialized } from "./serialize";
|
|
9
|
+
import type { IService } from "./service";
|
|
10
|
+
import type { IShapeFactory } from "./shape";
|
|
11
|
+
import type { IWindow } from "./ui/window";
|
|
12
|
+
import type { IView, IVisualFactory } from "./visual";
|
|
13
|
+
|
|
14
|
+
export interface IApplication {
|
|
15
|
+
readonly mainWindow?: IWindow;
|
|
16
|
+
readonly dataExchange: IDataExchange;
|
|
17
|
+
readonly visualFactory: IVisualFactory;
|
|
18
|
+
readonly shapeFactory: IShapeFactory;
|
|
19
|
+
readonly services: IService[];
|
|
20
|
+
readonly storage: IStorage;
|
|
21
|
+
readonly views: ObservableCollection<IView>;
|
|
22
|
+
readonly documents: Set<IDocument>;
|
|
23
|
+
executingCommand: ICommand | undefined;
|
|
24
|
+
activeView: IView | undefined;
|
|
25
|
+
newDocument(name: string): Promise<IDocument>;
|
|
26
|
+
openDocument(id: string): Promise<IDocument | undefined>;
|
|
27
|
+
loadDocument(data: Serialized): Promise<IDocument | undefined>;
|
|
28
|
+
loadFileFromUrl(url: string): Promise<void>;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
let currentApplication: IApplication | undefined;
|
|
32
|
+
export function getCurrentApplication() {
|
|
33
|
+
return currentApplication;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export function setCurrentApplication(app: IApplication): void {
|
|
37
|
+
currentApplication = app;
|
|
38
|
+
}
|