@reekon-tools/boldr-cad 0.1.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +81 -9
- package/dist/app/edit.d.ts +12 -1
- package/dist/app/edit.js +96 -11
- package/dist/app/edit.js.map +1 -1
- package/dist/app/state.d.ts +31 -4
- package/dist/app/state.js +31 -2
- package/dist/app/state.js.map +1 -1
- package/dist/data/memory.d.ts +5 -0
- package/dist/data/memory.js +2 -2
- package/dist/data/memory.js.map +1 -1
- package/dist/data/provider.d.ts +19 -7
- package/dist/data/sync.d.ts +7 -2
- package/dist/data/sync.js +115 -64
- package/dist/data/sync.js.map +1 -1
- package/dist/editor/actions.d.ts +1 -2
- package/dist/editor/actions.js +391 -113
- package/dist/editor/actions.js.map +1 -1
- package/dist/editor/confirm.d.ts +23 -0
- package/dist/editor/confirm.js +35 -0
- package/dist/editor/confirm.js.map +1 -0
- package/dist/editor/elevation.d.ts +191 -90
- package/dist/editor/elevation.js +812 -616
- package/dist/editor/elevation.js.map +1 -1
- package/dist/editor/face.d.ts +73 -0
- package/dist/editor/face.js +269 -0
- package/dist/editor/face.js.map +1 -0
- package/dist/editor/files.d.ts +6 -0
- package/dist/editor/files.js +50 -4
- package/dist/editor/files.js.map +1 -1
- package/dist/editor/gestures.d.ts +18 -3
- package/dist/editor/gestures.js +145 -30
- package/dist/editor/gestures.js.map +1 -1
- package/dist/editor/keypad.d.ts +19 -4
- package/dist/editor/keypad.js +39 -9
- package/dist/editor/keypad.js.map +1 -1
- package/dist/editor/keys.js +36 -4
- package/dist/editor/keys.js.map +1 -1
- package/dist/editor/laser.d.ts +20 -4
- package/dist/editor/laser.js +104 -21
- package/dist/editor/laser.js.map +1 -1
- package/dist/editor/linkActions.d.ts +49 -0
- package/dist/editor/linkActions.js +210 -0
- package/dist/editor/linkActions.js.map +1 -0
- package/dist/editor/linkFollow.d.ts +2 -0
- package/dist/editor/linkFollow.js +53 -0
- package/dist/editor/linkFollow.js.map +1 -0
- package/dist/editor/linkWrite.d.ts +13 -0
- package/dist/editor/linkWrite.js +84 -0
- package/dist/editor/linkWrite.js.map +1 -0
- package/dist/editor/links.d.ts +84 -0
- package/dist/editor/links.js +130 -0
- package/dist/editor/links.js.map +1 -0
- package/dist/editor/markup.d.ts +29 -3
- package/dist/editor/markup.js +95 -10
- package/dist/editor/markup.js.map +1 -1
- package/dist/editor/mode.d.ts +40 -2
- package/dist/editor/mode.js +71 -4
- package/dist/editor/mode.js.map +1 -1
- package/dist/editor/ports.d.ts +36 -6
- package/dist/editor/ports.js +10 -1
- package/dist/editor/ports.js.map +1 -1
- package/dist/editor/project.d.ts +38 -6
- package/dist/editor/project.js +167 -27
- package/dist/editor/project.js.map +1 -1
- package/dist/editor/selection.d.ts +10 -0
- package/dist/editor/selection.js +62 -8
- package/dist/editor/selection.js.map +1 -1
- package/dist/editor/status.js +3 -0
- package/dist/editor/status.js.map +1 -1
- package/dist/editor/tooltips.d.ts +5 -0
- package/dist/editor/tooltips.js +48 -0
- package/dist/editor/tooltips.js.map +1 -0
- package/dist/editor/view3d.d.ts +17 -0
- package/dist/editor/view3d.js +135 -0
- package/dist/editor/view3d.js.map +1 -0
- package/dist/editor/view3dState.d.ts +39 -0
- package/dist/editor/view3dState.js +44 -0
- package/dist/editor/view3dState.js.map +1 -0
- package/dist/export/dxf.js +1 -1
- package/dist/export/dxf.js.map +1 -1
- package/dist/export/pdf.js +17 -12
- package/dist/export/pdf.js.map +1 -1
- package/dist/export/plan.d.ts +23 -6
- package/dist/export/plan.js +127 -44
- package/dist/export/plan.js.map +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/model/constraints.js +15 -4
- package/dist/model/constraints.js.map +1 -1
- package/dist/model/demo.js +3 -3
- package/dist/model/demo.js.map +1 -1
- package/dist/model/elevation.d.ts +6 -9
- package/dist/model/elevation.js +5 -13
- package/dist/model/elevation.js.map +1 -1
- package/dist/model/faces.d.ts +58 -0
- package/dist/model/faces.js +197 -0
- package/dist/model/faces.js.map +1 -0
- package/dist/model/facesolve.d.ts +72 -0
- package/dist/model/facesolve.js +369 -0
- package/dist/model/facesolve.js.map +1 -0
- package/dist/model/history.d.ts +3 -2
- package/dist/model/history.js +17 -11
- package/dist/model/history.js.map +1 -1
- package/dist/model/images.d.ts +18 -0
- package/dist/model/images.js +26 -0
- package/dist/model/images.js.map +1 -0
- package/dist/model/links.d.ts +46 -0
- package/dist/model/links.js +73 -0
- package/dist/model/links.js.map +1 -0
- package/dist/model/markup.d.ts +46 -0
- package/dist/model/markup.js +71 -0
- package/dist/model/markup.js.map +1 -0
- package/dist/model/measurement.d.ts +11 -0
- package/dist/model/measurement.js +24 -0
- package/dist/model/measurement.js.map +1 -0
- package/dist/model/openings.d.ts +4 -0
- package/dist/model/openings.js +4 -0
- package/dist/model/openings.js.map +1 -1
- package/dist/model/planGeom.d.ts +72 -2
- package/dist/model/planGeom.js +184 -10
- package/dist/model/planGeom.js.map +1 -1
- package/dist/model/project.js +3 -2
- package/dist/model/project.js.map +1 -1
- package/dist/model/projectfile.js +2 -1
- package/dist/model/projectfile.js.map +1 -1
- package/dist/model/rooms.js +2 -2
- package/dist/model/rooms.js.map +1 -1
- package/dist/model/settings.d.ts +6 -0
- package/dist/model/settings.js +2 -2
- package/dist/model/settings.js.map +1 -1
- package/dist/model/sketch.d.ts +14 -0
- package/dist/model/sketch.js +143 -24
- package/dist/model/sketch.js.map +1 -1
- package/dist/model/smooth.d.ts +6 -0
- package/dist/model/smooth.js +52 -0
- package/dist/model/smooth.js.map +1 -0
- package/dist/model/store.d.ts +12 -0
- package/dist/model/store.js +35 -3
- package/dist/model/store.js.map +1 -1
- package/dist/model/types.d.ts +173 -8
- package/dist/model/wallfaces.d.ts +32 -0
- package/dist/model/wallfaces.js +133 -20
- package/dist/model/wallfaces.js.map +1 -1
- package/dist/model/wallshape.d.ts +15 -0
- package/dist/model/wallshape.js +89 -0
- package/dist/model/wallshape.js.map +1 -0
- package/dist/react/BottomBar.d.ts +9 -5
- package/dist/react/BottomBar.js +213 -24
- package/dist/react/BottomBar.js.map +1 -1
- package/dist/react/Buttons.d.ts +13 -2
- package/dist/react/Buttons.js +37 -5
- package/dist/react/Buttons.js.map +1 -1
- package/dist/react/CadEditor.d.ts +46 -3
- package/dist/react/CadEditor.js +77 -20
- package/dist/react/CadEditor.js.map +1 -1
- package/dist/react/ConfirmSheet.d.ts +4 -0
- package/dist/react/ConfirmSheet.js +31 -0
- package/dist/react/ConfirmSheet.js.map +1 -0
- package/dist/react/ConflictSheet.d.ts +2 -1
- package/dist/react/ConflictSheet.js +16 -8
- package/dist/react/ConflictSheet.js.map +1 -1
- package/dist/react/Drawer.d.ts +8 -2
- package/dist/react/Drawer.js +167 -38
- package/dist/react/Drawer.js.map +1 -1
- package/dist/react/Duck.d.ts +13 -0
- package/dist/react/Duck.js +45 -0
- package/dist/react/Duck.js.map +1 -0
- package/dist/react/Empty3D.d.ts +2 -0
- package/dist/react/Empty3D.js +39 -0
- package/dist/react/Empty3D.js.map +1 -0
- package/dist/react/FitScroll.d.ts +6 -0
- package/dist/react/FitScroll.js +14 -0
- package/dist/react/FitScroll.js.map +1 -0
- package/dist/react/Icon.native.d.ts +6 -0
- package/dist/react/Icon.native.js +4 -0
- package/dist/react/Icon.native.js.map +1 -1
- package/dist/react/Icon.web.d.ts +6 -0
- package/dist/react/Icon.web.js +4 -0
- package/dist/react/Icon.web.js.map +1 -1
- package/dist/react/KeypadSheet.d.ts +9 -2
- package/dist/react/KeypadSheet.js +174 -42
- package/dist/react/KeypadSheet.js.map +1 -1
- package/dist/react/LaserTray.js +8 -5
- package/dist/react/LaserTray.js.map +1 -1
- package/dist/react/MarkupPanel.d.ts +8 -0
- package/dist/react/MarkupPanel.js +67 -0
- package/dist/react/MarkupPanel.js.map +1 -0
- package/dist/react/PageThumb.native.d.ts +7 -2
- package/dist/react/PageThumb.native.js +19 -7
- package/dist/react/PageThumb.native.js.map +1 -1
- package/dist/react/PageThumb.web.d.ts +3 -2
- package/dist/react/PageThumb.web.js +4 -4
- package/dist/react/PageThumb.web.js.map +1 -1
- package/dist/react/PlanCanvas.native.d.ts +1 -1
- package/dist/react/PlanCanvas.native.js +134 -36
- package/dist/react/PlanCanvas.native.js.map +1 -1
- package/dist/react/PlanCanvas.web.js +16 -5
- package/dist/react/PlanCanvas.web.js.map +1 -1
- package/dist/react/Popovers.d.ts +12 -6
- package/dist/react/Popovers.js +53 -26
- package/dist/react/Popovers.js.map +1 -1
- package/dist/react/Rail.d.ts +24 -0
- package/dist/react/Rail.js +324 -34
- package/dist/react/Rail.js.map +1 -1
- package/dist/react/ShapeMenu.d.ts +7 -0
- package/dist/react/ShapeMenu.js +58 -0
- package/dist/react/ShapeMenu.js.map +1 -0
- package/dist/react/Sheet.d.ts +14 -4
- package/dist/react/Sheet.js +54 -9
- package/dist/react/Sheet.js.map +1 -1
- package/dist/react/Slider.d.ts +18 -0
- package/dist/react/Slider.js +27 -0
- package/dist/react/Slider.js.map +1 -0
- package/dist/react/Toast.js +14 -6
- package/dist/react/Toast.js.map +1 -1
- package/dist/react/ToolTip.d.ts +7 -0
- package/dist/react/ToolTip.js +43 -0
- package/dist/react/ToolTip.js.map +1 -0
- package/dist/react/TopBar.d.ts +6 -3
- package/dist/react/TopBar.js +48 -17
- package/dist/react/TopBar.js.map +1 -1
- package/dist/react/Tween.d.ts +7 -0
- package/dist/react/Tween.js +26 -0
- package/dist/react/Tween.js.map +1 -0
- package/dist/react/Tween.native.d.ts +6 -0
- package/dist/react/Tween.native.js +43 -0
- package/dist/react/Tween.native.js.map +1 -0
- package/dist/react/View3D.native.d.ts +4 -0
- package/dist/react/View3D.native.js +103 -0
- package/dist/react/View3D.native.js.map +1 -0
- package/dist/react/View3D.web.d.ts +4 -0
- package/dist/react/View3D.web.js +151 -0
- package/dist/react/View3D.web.js.map +1 -0
- package/dist/react/View3DHost.d.ts +143 -0
- package/dist/react/View3DHost.js +377 -0
- package/dist/react/View3DHost.js.map +1 -0
- package/dist/react/corners.d.ts +7 -0
- package/dist/react/corners.js +51 -0
- package/dist/react/corners.js.map +1 -0
- package/dist/react/easing.d.ts +15 -0
- package/dist/react/easing.js +10 -0
- package/dist/react/easing.js.map +1 -0
- package/dist/react/host.d.ts +7 -2
- package/dist/react/host.js +8 -3
- package/dist/react/host.js.map +1 -1
- package/dist/react/hostKeypad.d.ts +56 -0
- package/dist/react/hostKeypad.js +5 -0
- package/dist/react/hostKeypad.js.map +1 -0
- package/dist/react/motion.d.ts +77 -0
- package/dist/react/motion.js +173 -0
- package/dist/react/motion.js.map +1 -0
- package/dist/react/ports.js +90 -8
- package/dist/react/ports.js.map +1 -1
- package/dist/react/saving.d.ts +15 -0
- package/dist/react/saving.js +76 -0
- package/dist/react/saving.js.map +1 -0
- package/dist/react/store.d.ts +38 -1
- package/dist/react/store.js +31 -1
- package/dist/react/store.js.map +1 -1
- package/dist/react/theme.d.ts +10 -0
- package/dist/react/theme.js +8 -0
- package/dist/react/theme.js.map +1 -1
- package/dist/react/topRow.d.ts +22 -0
- package/dist/react/topRow.js +61 -0
- package/dist/react/topRow.js.map +1 -0
- package/dist/react/touch.d.ts +6 -0
- package/dist/react/touch.js +9 -0
- package/dist/react/touch.js.map +1 -0
- package/dist/render/ctx.d.ts +8 -0
- package/dist/render/draw.d.ts +33 -1
- package/dist/render/draw.js +593 -215
- package/dist/render/draw.js.map +1 -1
- package/dist/render/elevation.d.ts +65 -43
- package/dist/render/elevation.js +414 -140
- package/dist/render/elevation.js.map +1 -1
- package/dist/render/figmaIcons.d.ts +12 -0
- package/dist/render/figmaIcons.js +21 -0
- package/dist/render/figmaIcons.js.map +1 -0
- package/dist/render/hit.d.ts +22 -2
- package/dist/render/hit.js +168 -25
- package/dist/render/hit.js.map +1 -1
- package/dist/render/icons.js +69 -10
- package/dist/render/icons.js.map +1 -1
- package/dist/render/linkTile.d.ts +15 -0
- package/dist/render/linkTile.js +369 -0
- package/dist/render/linkTile.js.map +1 -0
- package/dist/render/markup.d.ts +11 -0
- package/dist/render/markup.js +112 -0
- package/dist/render/markup.js.map +1 -0
- package/dist/render/navigate.d.ts +88 -0
- package/dist/render/navigate.js +100 -0
- package/dist/render/navigate.js.map +1 -0
- package/dist/render/snap.d.ts +20 -1
- package/dist/render/snap.js +118 -25
- package/dist/render/snap.js.map +1 -1
- package/dist/render/squircle.d.ts +8 -0
- package/dist/render/squircle.js +71 -0
- package/dist/render/squircle.js.map +1 -0
- package/dist/render/view.d.ts +115 -2
- package/dist/render/view.js +244 -19
- package/dist/render/view.js.map +1 -1
- package/dist/skia/SkiaDrawCtx.d.ts +30 -2
- package/dist/skia/SkiaDrawCtx.js +198 -43
- package/dist/skia/SkiaDrawCtx.js.map +1 -1
- package/dist/skia/host.d.ts +18 -2
- package/dist/skia/host.js +46 -1
- package/dist/skia/host.js.map +1 -1
- package/dist/solver/equations.js +37 -2
- package/dist/solver/equations.js.map +1 -1
- package/dist/solver/gauss-newton.d.ts +17 -0
- package/dist/solver/gauss-newton.js +144 -36
- package/dist/solver/gauss-newton.js.map +1 -1
- package/dist/solver/linalg.d.ts +45 -2
- package/dist/solver/linalg.js +164 -10
- package/dist/solver/linalg.js.map +1 -1
- package/dist/solver/types.d.ts +5 -0
- package/dist/tools/annotate.d.ts +57 -1
- package/dist/tools/annotate.js +64 -43
- package/dist/tools/annotate.js.map +1 -1
- package/dist/tools/chamfer.d.ts +12 -0
- package/dist/tools/chamfer.js +114 -0
- package/dist/tools/chamfer.js.map +1 -0
- package/dist/tools/corner.d.ts +38 -0
- package/dist/tools/corner.js +99 -0
- package/dist/tools/corner.js.map +1 -0
- package/dist/tools/dim.d.ts +86 -9
- package/dist/tools/dim.js +581 -96
- package/dist/tools/dim.js.map +1 -1
- package/dist/tools/elevation.js +1 -1
- package/dist/tools/elevation.js.map +1 -1
- package/dist/tools/fillet.d.ts +9 -0
- package/dist/tools/fillet.js +86 -0
- package/dist/tools/fillet.js.map +1 -0
- package/dist/tools/freehand.d.ts +3 -2
- package/dist/tools/freehand.js +19 -12
- package/dist/tools/freehand.js.map +1 -1
- package/dist/tools/index.js +14 -4
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/line.d.ts +8 -3
- package/dist/tools/line.js +66 -30
- package/dist/tools/line.js.map +1 -1
- package/dist/tools/modify.d.ts +13 -0
- package/dist/tools/modify.js +105 -25
- package/dist/tools/modify.js.map +1 -1
- package/dist/tools/openings.js +22 -15
- package/dist/tools/openings.js.map +1 -1
- package/dist/tools/registry.d.ts +8 -0
- package/dist/tools/registry.js +42 -2
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/select.d.ts +77 -3
- package/dist/tools/select.js +560 -74
- package/dist/tools/select.js.map +1 -1
- package/dist/tools/shapes.d.ts +14 -0
- package/dist/tools/shapes.js +154 -75
- package/dist/tools/shapes.js.map +1 -1
- package/dist/units/format.d.ts +10 -2
- package/dist/units/format.js +18 -3
- package/dist/units/format.js.map +1 -1
- package/dist/view3d/build.d.ts +35 -0
- package/dist/view3d/build.js +630 -0
- package/dist/view3d/build.js.map +1 -0
- package/dist/view3d/camera.d.ts +60 -0
- package/dist/view3d/camera.js +84 -0
- package/dist/view3d/camera.js.map +1 -0
- package/dist/view3d/fatLines.d.ts +11 -0
- package/dist/view3d/fatLines.js +83 -0
- package/dist/view3d/fatLines.js.map +1 -0
- package/dist/view3d/lines.d.ts +17 -0
- package/dist/view3d/lines.js +271 -0
- package/dist/view3d/lines.js.map +1 -0
- package/dist/view3d/mesh.d.ts +51 -0
- package/dist/view3d/mesh.js +101 -0
- package/dist/view3d/mesh.js.map +1 -0
- package/dist/view3d/poly.d.ts +16 -0
- package/dist/view3d/poly.js +109 -0
- package/dist/view3d/poly.js.map +1 -0
- package/dist/view3d/viewer.d.ts +86 -0
- package/dist/view3d/viewer.js +350 -0
- package/dist/view3d/viewer.js.map +1 -0
- package/package.json +15 -2
- package/src/app/edit.ts +83 -12
- package/src/app/main.ts +11 -5
- package/src/app/state.ts +38 -5
- package/src/data/memory.ts +2 -2
- package/src/data/provider.ts +15 -7
- package/src/data/sync.ts +87 -50
- package/src/editor/actions.ts +292 -83
- package/src/editor/confirm.ts +58 -0
- package/src/editor/elevation.ts +698 -478
- package/src/editor/face.ts +227 -0
- package/src/editor/files.ts +40 -4
- package/src/editor/gestures.ts +147 -31
- package/src/editor/keypad.ts +43 -11
- package/src/editor/keys.ts +25 -5
- package/src/editor/laser.ts +98 -20
- package/src/editor/linkActions.ts +194 -0
- package/src/editor/linkFollow.ts +43 -0
- package/src/editor/linkWrite.ts +77 -0
- package/src/editor/links.ts +181 -0
- package/src/editor/markup.ts +92 -8
- package/src/editor/mode.ts +83 -7
- package/src/editor/ports.ts +37 -6
- package/src/editor/project.ts +155 -26
- package/src/editor/selection.ts +54 -8
- package/src/editor/status.ts +2 -0
- package/src/editor/tooltips.ts +47 -0
- package/src/editor/view3d.ts +119 -0
- package/src/editor/view3dState.ts +61 -0
- package/src/export/dxf.ts +1 -1
- package/src/export/pdf.ts +15 -7
- package/src/export/plan.ts +119 -35
- package/src/index.ts +5 -0
- package/src/input/keyboard.ts +2 -4
- package/src/model/constraints.ts +13 -4
- package/src/model/demo.ts +3 -3
- package/src/model/elevation.ts +6 -16
- package/src/model/faces.ts +153 -0
- package/src/model/facesolve.ts +322 -0
- package/src/model/history.ts +19 -11
- package/src/model/images.ts +35 -0
- package/src/model/links.ts +77 -0
- package/src/model/markup.ts +80 -0
- package/src/model/measurement.ts +26 -0
- package/src/model/openings.ts +6 -0
- package/src/model/planGeom.ts +174 -8
- package/src/model/project.ts +3 -2
- package/src/model/projectfile.ts +2 -1
- package/src/model/rooms.ts +1 -1
- package/src/model/settings.ts +8 -2
- package/src/model/sketch.ts +101 -14
- package/src/model/smooth.ts +51 -0
- package/src/model/store.ts +35 -4
- package/src/model/types.ts +170 -8
- package/src/model/wallfaces.ts +126 -17
- package/src/model/wallshape.ts +97 -0
- package/src/react/BottomBar.tsx +263 -46
- package/src/react/Buttons.tsx +50 -9
- package/src/react/CadEditor.tsx +133 -30
- package/src/react/ConfirmSheet.tsx +38 -0
- package/src/react/ConflictSheet.tsx +19 -12
- package/src/react/Drawer.tsx +213 -110
- package/src/react/Duck.tsx +50 -0
- package/src/react/Empty3D.tsx +32 -0
- package/src/react/FitScroll.tsx +19 -0
- package/src/react/Icon.native.tsx +5 -0
- package/src/react/Icon.web.tsx +5 -0
- package/src/react/KeypadSheet.tsx +253 -60
- package/src/react/LaserTray.tsx +12 -8
- package/src/react/MarkupPanel.tsx +150 -0
- package/src/react/PageThumb.native.tsx +18 -7
- package/src/react/PageThumb.web.tsx +4 -4
- package/src/react/PlanCanvas.native.tsx +151 -34
- package/src/react/PlanCanvas.web.tsx +15 -5
- package/src/react/Popovers.tsx +116 -51
- package/src/react/Rail.tsx +360 -27
- package/src/react/ShapeMenu.tsx +66 -0
- package/src/react/Sheet.tsx +56 -11
- package/src/react/Slider.tsx +48 -0
- package/src/react/Toast.tsx +16 -9
- package/src/react/ToolTip.tsx +49 -0
- package/src/react/TopBar.tsx +97 -39
- package/src/react/Tween.native.tsx +36 -0
- package/src/react/Tween.tsx +24 -0
- package/src/react/View3D.native.tsx +131 -0
- package/src/react/View3D.web.tsx +131 -0
- package/src/react/View3DHost.ts +367 -0
- package/src/react/corners.ts +52 -0
- package/src/react/easing.ts +14 -0
- package/src/react/host.ts +8 -3
- package/src/react/hostKeypad.ts +66 -0
- package/src/react/motion.tsx +239 -0
- package/src/react/ports.ts +78 -9
- package/src/react/saving.ts +80 -0
- package/src/react/store.ts +35 -3
- package/src/react/theme.ts +8 -0
- package/src/react/topRow.ts +71 -0
- package/src/react/touch.ts +10 -0
- package/src/render/ctx.ts +8 -0
- package/src/render/draw.ts +437 -175
- package/src/render/elevation.ts +349 -143
- package/src/render/figmaIcons.ts +22 -0
- package/src/render/hit.ts +140 -21
- package/src/render/icons.ts +69 -10
- package/src/render/linkTile.ts +297 -0
- package/src/render/markup.ts +91 -0
- package/src/render/navigate.ts +114 -0
- package/src/render/snap.ts +105 -22
- package/src/render/squircle.ts +73 -0
- package/src/render/view.ts +255 -19
- package/src/skia/SkiaDrawCtx.ts +163 -41
- package/src/skia/host.ts +46 -1
- package/src/solver/equations.ts +37 -2
- package/src/solver/gauss-newton.ts +125 -28
- package/src/solver/linalg.ts +141 -5
- package/src/solver/types.ts +5 -0
- package/src/styles.css +91 -42
- package/src/tools/annotate.ts +58 -29
- package/src/tools/chamfer.ts +103 -0
- package/src/tools/corner.ts +99 -0
- package/src/tools/dim.ts +524 -92
- package/src/tools/elevation.ts +1 -1
- package/src/tools/fillet.ts +82 -0
- package/src/tools/freehand.ts +20 -16
- package/src/tools/index.ts +17 -4
- package/src/tools/line.ts +59 -23
- package/src/tools/modify.ts +86 -24
- package/src/tools/openings.ts +8 -13
- package/src/tools/registry.ts +27 -2
- package/src/tools/select.ts +424 -75
- package/src/tools/shapes.ts +119 -58
- package/src/ui/ctx.ts +2 -1
- package/src/ui/domPorts.ts +23 -4
- package/src/ui/drawer.ts +6 -26
- package/src/ui/elevation.ts +10 -101
- package/src/ui/keypad.ts +8 -14
- package/src/ui/laser.ts +2 -2
- package/src/ui/menu.ts +63 -17
- package/src/ui/noteinput.ts +3 -3
- package/src/ui/opacity.ts +108 -0
- package/src/ui/palette.ts +67 -12
- package/src/ui/rail.ts +21 -7
- package/src/ui/topbar.ts +4 -14
- package/src/units/format.ts +18 -3
- package/src/view3d/build.ts +607 -0
- package/src/view3d/camera.ts +113 -0
- package/src/view3d/fatLines.ts +83 -0
- package/src/view3d/lines.ts +258 -0
- package/src/view3d/mesh.ts +111 -0
- package/src/view3d/poly.ts +104 -0
- package/src/view3d/viewer.ts +348 -0
- package/dist/react/ElevCanvas.native.d.ts +0 -3
- package/dist/react/ElevCanvas.native.js +0 -58
- package/dist/react/ElevCanvas.native.js.map +0 -1
- package/dist/react/ElevCanvas.web.d.ts +0 -4
- package/dist/react/ElevCanvas.web.js +0 -44
- package/dist/react/ElevCanvas.web.js.map +0 -1
- package/dist/react/ElevationSheet.d.ts +0 -2
- package/dist/react/ElevationSheet.js +0 -38
- package/dist/react/ElevationSheet.js.map +0 -1
- package/dist/render/elevationView.d.ts +0 -3
- package/dist/render/elevationView.js +0 -100
- package/dist/render/elevationView.js.map +0 -1
- package/src/react/ElevCanvas.native.tsx +0 -68
- package/src/react/ElevCanvas.web.tsx +0 -42
- package/src/react/ElevationSheet.tsx +0 -88
- package/src/render/elevationView.ts +0 -73
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
import { Animated, type PressableProps, type StyleProp, type TextStyle, type ViewStyle } from 'react-native';
|
|
3
|
+
import { DURATION, EASE } from './easing';
|
|
4
|
+
export { DURATION, EASE };
|
|
5
|
+
export declare const POP_IN = 140, POP_OUT = 100, POP_EASE_OUT: import("react-native").EasingFunction;
|
|
6
|
+
/** Reduce Motion is on: things that move only fade. */
|
|
7
|
+
export declare const reducedMotion: () => boolean;
|
|
8
|
+
/**
|
|
9
|
+
* A popup's coming and going: whether it's on screen (`present` — open, or still going), and the style that moves it.
|
|
10
|
+
* `from`: where it comes from, points (toward the button that opened it: a menu under a button at the top comes down
|
|
11
|
+
* from it, `{ y: -6 }`); `origin`: the point it grows from, as CSS transform-origin ('top right', 'left center'…).
|
|
12
|
+
*
|
|
13
|
+
* `keep`: once it's been open, it stays built between times — hidden (`display: none`: not laid out, not tapped, not
|
|
14
|
+
* read out) rather than taken down — so a menu with a lot in it opens at once, not after it's been built again (on a
|
|
15
|
+
* device, the wait before it moved). `mounted` says whether to draw it at all; the style hides it when it's away.
|
|
16
|
+
*/
|
|
17
|
+
export declare function usePopup(open: boolean, from: {
|
|
18
|
+
x?: number;
|
|
19
|
+
y?: number;
|
|
20
|
+
}, origin: string, keep?: boolean): {
|
|
21
|
+
present: boolean;
|
|
22
|
+
mounted: boolean;
|
|
23
|
+
style: Animated.WithAnimatedObject<ViewStyle>;
|
|
24
|
+
};
|
|
25
|
+
/** An animated value that eases to 1 when `on`, to 0 when not (starting where it is). */
|
|
26
|
+
export declare function useEased(on: boolean): Animated.Value;
|
|
27
|
+
/**
|
|
28
|
+
* A press as an animated value: to 1 as it goes down, back to 0 as it lets go. Spread the handlers on a Pressable.
|
|
29
|
+
* `full`: a quick tap still shows the whole press — let go before it's all the way in, it finishes going in, then
|
|
30
|
+
* comes back (within `outMs` all told).
|
|
31
|
+
*/
|
|
32
|
+
export declare function usePress(inMs?: number, outMs?: number, easing?: import("react-native").EasingFunction, full?: boolean): {
|
|
33
|
+
v: Animated.Value;
|
|
34
|
+
onPressIn: () => void;
|
|
35
|
+
onPressOut: () => void;
|
|
36
|
+
};
|
|
37
|
+
/** The toggle's own pace: a smooth ease in and out, slower than a button press, so its knob's travel reads as one glide. */
|
|
38
|
+
export declare const TOGGLE_EASE: import("react-native").EasingFunction;
|
|
39
|
+
export declare const TOGGLE_MS = 200, TOGGLE_PRESS_MS = 90;
|
|
40
|
+
/**
|
|
41
|
+
* A toggle's glide, started by the tap itself rather than once the setting it flips has been applied: on a device that
|
|
42
|
+
* meant waiting for the menu to render again and, for a layer or a snap, the drawing to be redrawn — the knob sat
|
|
43
|
+
* stretched for a moment before it moved. `go` starts the glide now; a change of `on` from elsewhere (the setting
|
|
44
|
+
* changed another way, or put back) glides it too.
|
|
45
|
+
*/
|
|
46
|
+
export declare function useToggleEased(on: boolean): {
|
|
47
|
+
v: Animated.Value;
|
|
48
|
+
go: (to: boolean, change: () => void) => void;
|
|
49
|
+
};
|
|
50
|
+
type TapState = {
|
|
51
|
+
pressed: boolean;
|
|
52
|
+
hovered: boolean;
|
|
53
|
+
};
|
|
54
|
+
export type TapProps = Omit<PressableProps, 'style' | 'children'> & {
|
|
55
|
+
style?: StyleProp<ViewStyle> | ((s: TapState) => StyleProp<ViewStyle>);
|
|
56
|
+
children?: ReactNode;
|
|
57
|
+
/** scale: sinks and dims (buttons, keys); dim: only dims (wide rows); none: no press feedback */
|
|
58
|
+
feel?: 'scale' | 'dim' | 'none';
|
|
59
|
+
};
|
|
60
|
+
/** A Pressable with the chrome's press feel. `style` may be a function of { pressed, hovered }, as a Pressable's. */
|
|
61
|
+
export declare function Tap({ style, feel, onPressIn, onPressOut, onHoverIn, onHoverOut, ...rest }: TapProps): import("react").JSX.Element;
|
|
62
|
+
/**
|
|
63
|
+
* A segmented control (Units, Precision, Draft / Annotate, Pages / Spaces): the chosen option's highlight slides to
|
|
64
|
+
* the one picked as the labels fade. `style` is the track, `optionStyle` each option, `onColor` the highlight.
|
|
65
|
+
*/
|
|
66
|
+
export declare function Segmented<T extends string | number>({ value, options, onPick, style, optionStyle, textStyle, onColor, onText, offText, role }: {
|
|
67
|
+
value: T;
|
|
68
|
+
options: [T, string][];
|
|
69
|
+
onPick: (v: T) => void;
|
|
70
|
+
style?: StyleProp<ViewStyle>;
|
|
71
|
+
optionStyle?: StyleProp<ViewStyle>;
|
|
72
|
+
textStyle?: StyleProp<TextStyle>;
|
|
73
|
+
onColor?: string;
|
|
74
|
+
onText: string;
|
|
75
|
+
offText: string;
|
|
76
|
+
role?: 'button' | 'tab';
|
|
77
|
+
}): import("react").JSX.Element;
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
3
|
+
import { AccessibilityInfo, Animated, Easing, Pressable, StyleSheet, View, } from 'react-native';
|
|
4
|
+
import { DURATION, EASE, NATIVE } from './easing';
|
|
5
|
+
import { TweenView } from './Tween';
|
|
6
|
+
/*
|
|
7
|
+
How the chrome moves: one set of rules, everywhere.
|
|
8
|
+
- A change of state (a toggle, a choice in a segmented control, the selected tool) moves over 150 ms: off at once,
|
|
9
|
+
settling softly at the end — quick to answer, nothing springy.
|
|
10
|
+
- A press sinks a touch (to 96 %, a little dimmer) in 70 ms and comes back over 150 ms with the same easing; wide
|
|
11
|
+
rows (menu items) only dim.
|
|
12
|
+
On a device all of it runs on the native driver — opacity, transforms and colours only (what moves a view's size or
|
|
13
|
+
place goes through TweenView) — so a press or a change of state plays smoothly however busy the JavaScript thread is,
|
|
14
|
+
as it is just after a tap (the editor answers, the plan is drawn again). Interpolations are made once, not on every
|
|
15
|
+
render: each one made anew has to be sent to the UI thread again.
|
|
16
|
+
*/
|
|
17
|
+
export { DURATION, EASE };
|
|
18
|
+
const PRESS_IN = 70;
|
|
19
|
+
const ease = (v, to, duration = DURATION) => Animated.timing(v, { toValue: to, duration, easing: EASE, useNativeDriver: NATIVE }).start();
|
|
20
|
+
/*
|
|
21
|
+
Popups — the ••• and Layers menus, the shapes menu, the markup panel, an image's slider, a toast — come and go the
|
|
22
|
+
same way: in about 140 ms they fade in and grow from just under their size, easing to a stop, moving out a few
|
|
23
|
+
points from the button that opened them; going, in about 100 ms they fade and shrink back, gathering pace, and stay
|
|
24
|
+
on screen until they've gone. Opacity and a transform only, on the native driver: the UI thread plays them, so a
|
|
25
|
+
busy JavaScript thread (a redraw, a save) can't make them stutter. With Reduce Motion on, they only fade.
|
|
26
|
+
*/
|
|
27
|
+
export const POP_IN = 140, POP_OUT = 100, POP_EASE_OUT = Easing.bezier(0.4, 0, 1, 1);
|
|
28
|
+
let reduceMotion = false;
|
|
29
|
+
try {
|
|
30
|
+
AccessibilityInfo.isReduceMotionEnabled?.().then(v => { reduceMotion = !!v; }, () => { });
|
|
31
|
+
AccessibilityInfo.addEventListener?.('reduceMotionChanged', (v) => { reduceMotion = !!v; });
|
|
32
|
+
}
|
|
33
|
+
catch { /* (no accessibility settings to read: full motion) */ }
|
|
34
|
+
/** Reduce Motion is on: things that move only fade. */
|
|
35
|
+
export const reducedMotion = () => reduceMotion;
|
|
36
|
+
/**
|
|
37
|
+
* A popup's coming and going: whether it's on screen (`present` — open, or still going), and the style that moves it.
|
|
38
|
+
* `from`: where it comes from, points (toward the button that opened it: a menu under a button at the top comes down
|
|
39
|
+
* from it, `{ y: -6 }`); `origin`: the point it grows from, as CSS transform-origin ('top right', 'left center'…).
|
|
40
|
+
*
|
|
41
|
+
* `keep`: once it's been open, it stays built between times — hidden (`display: none`: not laid out, not tapped, not
|
|
42
|
+
* read out) rather than taken down — so a menu with a lot in it opens at once, not after it's been built again (on a
|
|
43
|
+
* device, the wait before it moved). `mounted` says whether to draw it at all; the style hides it when it's away.
|
|
44
|
+
*/
|
|
45
|
+
export function usePopup(open, from, origin, keep = false) {
|
|
46
|
+
const v = useRef(new Animated.Value(open ? 1 : 0)).current, [present, setPresent] = useState(open), been = useRef(open);
|
|
47
|
+
if (open)
|
|
48
|
+
been.current = true;
|
|
49
|
+
useEffect(() => {
|
|
50
|
+
if (open)
|
|
51
|
+
setPresent(true);
|
|
52
|
+
// (on the next frame: a popup just put on screen is mounted twice by React's strict mode, and its animation would
|
|
53
|
+
// stop when the first goes)
|
|
54
|
+
const frame = requestAnimationFrame(() => {
|
|
55
|
+
Animated.timing(v, open
|
|
56
|
+
? { toValue: 1, duration: POP_IN, easing: EASE, useNativeDriver: NATIVE }
|
|
57
|
+
: { toValue: 0, duration: POP_OUT, easing: POP_EASE_OUT, useNativeDriver: NATIVE })
|
|
58
|
+
.start(({ finished }) => { if (finished && !open)
|
|
59
|
+
setPresent(false); });
|
|
60
|
+
});
|
|
61
|
+
return () => cancelAnimationFrame(frame);
|
|
62
|
+
}, [open, v]);
|
|
63
|
+
const fx = from.x ?? 0, fy = from.y ?? 0;
|
|
64
|
+
const style = useMemo(() => (reduceMotion
|
|
65
|
+
? { opacity: v }
|
|
66
|
+
: {
|
|
67
|
+
opacity: v, transformOrigin: origin,
|
|
68
|
+
transform: [
|
|
69
|
+
{ translateX: v.interpolate({ inputRange: [0, 1], outputRange: [fx, 0] }) },
|
|
70
|
+
{ translateY: v.interpolate({ inputRange: [0, 1], outputRange: [fy, 0] }) },
|
|
71
|
+
{ scale: v.interpolate({ inputRange: [0, 1], outputRange: [0.96, 1] }) },
|
|
72
|
+
],
|
|
73
|
+
}), [v, fx, fy, origin]);
|
|
74
|
+
const shown = open || present;
|
|
75
|
+
const hidden = useMemo(() => [style, { display: 'none' }], [style]);
|
|
76
|
+
return { present: shown, mounted: shown || (keep && been.current), style: shown ? style : hidden };
|
|
77
|
+
}
|
|
78
|
+
/** An animated value that eases to 1 when `on`, to 0 when not (starting where it is). */
|
|
79
|
+
export function useEased(on) {
|
|
80
|
+
const v = useRef(new Animated.Value(on ? 1 : 0)).current;
|
|
81
|
+
useEffect(() => { ease(v, on ? 1 : 0); }, [on, v]);
|
|
82
|
+
return v;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* A press as an animated value: to 1 as it goes down, back to 0 as it lets go. Spread the handlers on a Pressable.
|
|
86
|
+
* `full`: a quick tap still shows the whole press — let go before it's all the way in, it finishes going in, then
|
|
87
|
+
* comes back (within `outMs` all told).
|
|
88
|
+
*/
|
|
89
|
+
export function usePress(inMs = PRESS_IN, outMs = DURATION, easing = EASE, full = false) {
|
|
90
|
+
const v = useRef(new Animated.Value(0)).current;
|
|
91
|
+
const timing = (x, ms) => Animated.timing(v, { toValue: x, duration: ms, easing, useNativeDriver: NATIVE });
|
|
92
|
+
return {
|
|
93
|
+
v,
|
|
94
|
+
onPressIn: () => timing(1, inMs).start(),
|
|
95
|
+
onPressOut: () => v.stopAnimation(now => {
|
|
96
|
+
if (!full || now >= 0.99) {
|
|
97
|
+
timing(0, outMs).start();
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
const rest = Math.round((1 - now) * inMs * 0.6);
|
|
101
|
+
Animated.sequence([timing(1, rest), timing(0, Math.max(60, outMs - rest))]).start();
|
|
102
|
+
}),
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
/** The toggle's own pace: a smooth ease in and out, slower than a button press, so its knob's travel reads as one glide. */
|
|
106
|
+
export const TOGGLE_EASE = Easing.bezier(0.4, 0, 0.2, 1);
|
|
107
|
+
export const TOGGLE_MS = 200, TOGGLE_PRESS_MS = 90;
|
|
108
|
+
/**
|
|
109
|
+
* A toggle's glide, started by the tap itself rather than once the setting it flips has been applied: on a device that
|
|
110
|
+
* meant waiting for the menu to render again and, for a layer or a snap, the drawing to be redrawn — the knob sat
|
|
111
|
+
* stretched for a moment before it moved. `go` starts the glide now; a change of `on` from elsewhere (the setting
|
|
112
|
+
* changed another way, or put back) glides it too.
|
|
113
|
+
*/
|
|
114
|
+
export function useToggleEased(on) {
|
|
115
|
+
const v = useRef(new Animated.Value(on ? 1 : 0)).current, at = useRef(on), pending = useRef(false);
|
|
116
|
+
const glide = useCallback((to) => {
|
|
117
|
+
at.current = to;
|
|
118
|
+
Animated.timing(v, { toValue: to ? 1 : 0, duration: TOGGLE_MS, easing: TOGGLE_EASE, useNativeDriver: NATIVE }).start();
|
|
119
|
+
}, [v]);
|
|
120
|
+
/** Glide to `to` now, and make the change a frame later (once the glide is with the native driver). */
|
|
121
|
+
const go = useCallback((to, change) => {
|
|
122
|
+
glide(to);
|
|
123
|
+
pending.current = true;
|
|
124
|
+
requestAnimationFrame(() => { pending.current = false; change(); });
|
|
125
|
+
}, [glide]);
|
|
126
|
+
// after every render: where the setting really is wins (changed another way, or refused) — not while a tap's own
|
|
127
|
+
// change is still on its way
|
|
128
|
+
useEffect(() => { if (!pending.current && on !== at.current)
|
|
129
|
+
glide(on); });
|
|
130
|
+
return { v, go };
|
|
131
|
+
}
|
|
132
|
+
const AnimatedPressable = Animated.createAnimatedComponent(Pressable);
|
|
133
|
+
/** A Pressable with the chrome's press feel. `style` may be a function of { pressed, hovered }, as a Pressable's. */
|
|
134
|
+
export function Tap({ style, feel = 'scale', onPressIn, onPressOut, onHoverIn, onHoverOut, ...rest }) {
|
|
135
|
+
const v = useRef(new Animated.Value(0)).current;
|
|
136
|
+
const [st, setSt] = useState({ pressed: false, hovered: false });
|
|
137
|
+
const resolved = typeof style === 'function' ? style(st) : style;
|
|
138
|
+
const base = StyleSheet.flatten(resolved)?.opacity ?? 1;
|
|
139
|
+
const anim = useMemo(() => (feel === 'none' ? null : {
|
|
140
|
+
opacity: v.interpolate({ inputRange: [0, 1], outputRange: [base, base * (feel === 'dim' ? 0.7 : 0.82)] }),
|
|
141
|
+
...(feel === 'scale' ? { transform: [{ scale: v.interpolate({ inputRange: [0, 1], outputRange: [1, 0.96] }) }] } : {}),
|
|
142
|
+
}), [v, base, feel]);
|
|
143
|
+
return (_jsx(AnimatedPressable, { ...rest, onPressIn: (e) => { setSt(s => ({ ...s, pressed: true })); ease(v, 1, PRESS_IN); onPressIn?.(e); }, onPressOut: (e) => { setSt(s => ({ ...s, pressed: false })); ease(v, 0); onPressOut?.(e); }, onHoverIn: (e) => { setSt(s => ({ ...s, hovered: true })); onHoverIn?.(e); }, onHoverOut: (e) => { setSt(s => ({ ...s, hovered: false })); onHoverOut?.(e); }, style: [resolved, anim] }));
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* One option of a segmented control: its label fades between the two colours as it's chosen. On a device that's two
|
|
147
|
+
* labels, one over the other, crossfaded on the native driver (it animates a fade smoothly, not a text colour); in a
|
|
148
|
+
* browser, one label whose colour is eased.
|
|
149
|
+
*/
|
|
150
|
+
function SegOption({ label, on, onPress, onLayout, style, textStyle, onText, offText, role }) {
|
|
151
|
+
const t = useEased(on);
|
|
152
|
+
const ink = useMemo(() => (NATIVE ? t.interpolate({ inputRange: [0, 1], outputRange: [1, 0] }) : t.interpolate({ inputRange: [0, 1], outputRange: [offText, onText] })), [t, offText, onText]);
|
|
153
|
+
return (_jsx(Tap, { feel: "dim", accessibilityRole: role, accessibilityLabel: label, accessibilityState: { selected: on }, onPress: onPress, onLayout: e => onLayout(e.nativeEvent.layout), style: [segCenter, style, { backgroundColor: 'transparent' }], children: NATIVE ? (_jsxs(_Fragment, { children: [_jsx(Animated.Text, { style: [textStyle, { color: offText, opacity: ink }], children: label }), _jsx(View, { pointerEvents: "none", style: segOver, children: _jsx(Animated.Text, { accessible: false, style: [textStyle, { color: onText, opacity: t }], children: label }) })] })) : _jsx(Animated.Text, { style: [textStyle, { color: ink }], children: label }) }));
|
|
154
|
+
}
|
|
155
|
+
// (no grow: a device's layout grows a row with a growing child to all the room it's given — the control then ran the
|
|
156
|
+
// width of its menu row, squeezing the row's own label out)
|
|
157
|
+
const segRow = { flexDirection: 'row', alignSelf: 'stretch' };
|
|
158
|
+
/** An option's label sits in its middle, both ways, whatever its padding. */
|
|
159
|
+
const segCenter = { alignItems: 'center', justifyContent: 'center' };
|
|
160
|
+
// (spelt out: React Native 0.86 dropped StyleSheet.absoluteFillObject, and spreading it gave nothing — the label then sat
|
|
161
|
+
// under the other one, each option centring the pair)
|
|
162
|
+
const segOver = { position: 'absolute', top: 0, right: 0, bottom: 0, left: 0, alignItems: 'center', justifyContent: 'center' };
|
|
163
|
+
/**
|
|
164
|
+
* A segmented control (Units, Precision, Draft / Annotate, Pages / Spaces): the chosen option's highlight slides to
|
|
165
|
+
* the one picked as the labels fade. `style` is the track, `optionStyle` each option, `onColor` the highlight.
|
|
166
|
+
*/
|
|
167
|
+
export function Segmented({ value, options, onPick, style, optionStyle, textStyle, onColor = '#fff', onText, offText, role = 'button' }) {
|
|
168
|
+
const [boxes, setBoxes] = useState({});
|
|
169
|
+
const box = boxes[String(value)];
|
|
170
|
+
const radius = StyleSheet.flatten(optionStyle)?.borderRadius ?? 999;
|
|
171
|
+
return (_jsx(View, { style: style, accessibilityRole: role === 'tab' ? 'tablist' : undefined, children: _jsxs(View, { style: segRow, children: [box && (_jsx(TweenView, { pointerEvents: "none", to: { left: box.x, width: box.width }, style: { position: 'absolute', top: 0, bottom: 0, borderRadius: radius, backgroundColor: onColor } })), options.map(([v, label]) => (_jsx(SegOption, { label: label, on: v === value, onPress: () => onPick(v), role: role, onLayout: r => setBoxes(b => (b[String(v)] && b[String(v)].x === r.x && b[String(v)].width === r.width ? b : { ...b, [String(v)]: r })), style: optionStyle, textStyle: textStyle, onText: onText, offText: offText }, String(v))))] }) }));
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=motion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"motion.js","sourceRoot":"","sources":["../../src/react/motion.tsx"],"names":[],"mappings":"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"}
|
package/dist/react/ports.js
CHANGED
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
import { conflictEnd, conflictOpen, conflictStart } from '../editor/conflict';
|
|
2
2
|
import { elevSyncFrame } from '../editor/elevation';
|
|
3
|
-
import { keypadEnd, keypadOpen, keypadStart, keypadTyped } from '../editor/keypad';
|
|
3
|
+
import { keypadEnd, keypadOnHost, keypadOpen, keypadSpec, keypadStart, keypadSubmit, keypadTyped } from '../editor/keypad';
|
|
4
|
+
import { hostKeypad } from './hostKeypad';
|
|
5
|
+
import { offersJobMeasurements } from '../editor/links';
|
|
4
6
|
import { onSessionReset } from '../model/session';
|
|
5
7
|
import { saveNow } from '../model/store';
|
|
6
|
-
import {
|
|
8
|
+
import { manualSave, noteEdits, saveDrawing } from './saving';
|
|
9
|
+
import { requestDraw, requestOverlayDraw } from '../render/view';
|
|
7
10
|
import { notify, ui } from './store';
|
|
11
|
+
import { setInteracting } from './Duck';
|
|
8
12
|
/* The editor's ports for the React Native interface: each request updates the interface's state and re-renders. */
|
|
9
13
|
let toastTimer, toastId = 0;
|
|
10
14
|
onSessionReset(() => clearTimeout(toastTimer));
|
|
@@ -31,15 +35,68 @@ function downloadInBrowser(name, mime, data) {
|
|
|
31
35
|
a.remove();
|
|
32
36
|
setTimeout(() => URL.revokeObjectURL(a.href), 2000);
|
|
33
37
|
}
|
|
38
|
+
/** What the host's keypad is asked for (see hostKeypad.ts): its answer goes to this keypad, if it's still the one open. */
|
|
39
|
+
function hostRequest(spec) {
|
|
40
|
+
const mine = () => keypadSpec() === spec;
|
|
41
|
+
return {
|
|
42
|
+
title: spec.title,
|
|
43
|
+
sub: spec.sub,
|
|
44
|
+
kind: spec.numeric ? 'angle' : 'length',
|
|
45
|
+
current: spec.initial || undefined,
|
|
46
|
+
extras: () => (spec.extras?.() ?? []).map(x => ({ label: x.label, ariaLabel: x.ariaLabel, on: x.on, danger: x.danger, press: () => { if (mine()) {
|
|
47
|
+
x.onPress();
|
|
48
|
+
notify();
|
|
49
|
+
} } })),
|
|
50
|
+
apply: v => { if (mine())
|
|
51
|
+
keypadSubmit(v); },
|
|
52
|
+
cancel: () => { if (mine())
|
|
53
|
+
reactPorts.closeKeypad(); },
|
|
54
|
+
...(spec.measurements && offersJobMeasurements() ? {
|
|
55
|
+
measurementKind: spec.measurements.kind,
|
|
56
|
+
pickMeasurement: (t) => { if (mine()) {
|
|
57
|
+
spec.measurements.pick(t);
|
|
58
|
+
notify();
|
|
59
|
+
} },
|
|
60
|
+
} : {}),
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
/** A slider above the bar (an image's opacity or rotation, the tiles' size): opened, swapped for another, or closed by its button again. */
|
|
64
|
+
function toggleImagePop(kind) {
|
|
65
|
+
ui.imgPop = ui.imgPop === kind ? null : kind;
|
|
66
|
+
ui.menu = false;
|
|
67
|
+
// (a toast would sit over the slider: it's done with once the slider opens)
|
|
68
|
+
if (ui.imgPop)
|
|
69
|
+
ui.toast = null;
|
|
70
|
+
notify();
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* One re-render for all an edit refreshes: an edit alone refreshes the bar, the status, the drawer and the wall view,
|
|
74
|
+
* and each refresh had every component on screen work out again what it shows — four to seven times for one tap.
|
|
75
|
+
* React draws once at the end of the task anyway; this has them look once too.
|
|
76
|
+
*/
|
|
77
|
+
let refreshQueued = false;
|
|
78
|
+
function notifySoon() {
|
|
79
|
+
if (refreshQueued)
|
|
80
|
+
return;
|
|
81
|
+
refreshQueued = true;
|
|
82
|
+
queueMicrotask(() => { refreshQueued = false; notify(); });
|
|
83
|
+
}
|
|
84
|
+
onSessionReset(() => { refreshQueued = false; });
|
|
34
85
|
export const reactPorts = {
|
|
35
86
|
refresh(part) {
|
|
87
|
+
// canvas previews follow the typed value: they're drawn with the moving parts, not the whole drawing again
|
|
36
88
|
if (part === 'keypad')
|
|
37
|
-
|
|
89
|
+
requestOverlayDraw();
|
|
38
90
|
if (part === 'elevation')
|
|
39
91
|
elevSyncFrame(); // the open wall's frame from the live drawing (closes the view if the wall is gone)
|
|
40
|
-
|
|
92
|
+
noteEdits();
|
|
93
|
+
notifySoon();
|
|
41
94
|
},
|
|
95
|
+
// only what needs attention: something asked for that couldn't be done, and why. What did happen shows on the
|
|
96
|
+
// drawing itself — no status messages ("Deleted", "Undone", "Points joined"…)
|
|
42
97
|
toast(msg, o = {}) {
|
|
98
|
+
if (!o.warn)
|
|
99
|
+
return;
|
|
43
100
|
ui.toast = { id: ++toastId, msg, warn: o.warn, action: o.action };
|
|
44
101
|
clearTimeout(toastTimer);
|
|
45
102
|
toastTimer = setTimeout(() => { ui.toast = null; notify(); }, o.warn ? 5200 : 3200);
|
|
@@ -47,6 +104,18 @@ export const reactPorts = {
|
|
|
47
104
|
},
|
|
48
105
|
openKeypad(spec) {
|
|
49
106
|
reactPorts.dismissConflict();
|
|
107
|
+
// a phone's host asks with its own keypad: the editor keeps the request (a laser reading, Delete, another tool can
|
|
108
|
+
// still close it) but draws nothing of its own
|
|
109
|
+
const host = hostKeypad();
|
|
110
|
+
if (host) {
|
|
111
|
+
if (keypadOpen())
|
|
112
|
+
reactPorts.closeKeypad();
|
|
113
|
+
keypadStart(spec, true);
|
|
114
|
+
host(hostRequest(spec));
|
|
115
|
+
notify();
|
|
116
|
+
requestDraw();
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
50
119
|
// the keypad has no text field: let typed keys reach the editor, not the button that opened it (Enter would press it again)
|
|
51
120
|
if (typeof document !== 'undefined')
|
|
52
121
|
document.activeElement?.blur?.();
|
|
@@ -57,7 +126,9 @@ export const reactPorts = {
|
|
|
57
126
|
requestDraw();
|
|
58
127
|
},
|
|
59
128
|
closeKeypad() {
|
|
60
|
-
const spec = keypadEnd();
|
|
129
|
+
const onHost = keypadOnHost(), spec = keypadEnd();
|
|
130
|
+
if (onHost)
|
|
131
|
+
hostKeypad()?.(null);
|
|
61
132
|
ui.keypad = false;
|
|
62
133
|
notify();
|
|
63
134
|
requestDraw();
|
|
@@ -81,25 +152,36 @@ export const reactPorts = {
|
|
|
81
152
|
return true;
|
|
82
153
|
},
|
|
83
154
|
openDrawer(tab) { ui.drawer = tab ?? 'pages'; notify(); },
|
|
84
|
-
showNoteInput(x, y, cb) { ui.note = { x, y, cb }; notify(); },
|
|
155
|
+
showNoteInput(x, y, cb, initial) { ui.note = { x, y, cb, initial }; notify(); },
|
|
85
156
|
hideNoteInput() { if (ui.note) {
|
|
86
157
|
ui.note = null;
|
|
87
158
|
notify();
|
|
88
159
|
} },
|
|
89
|
-
|
|
160
|
+
// (its button again closes it)
|
|
161
|
+
openPalette() { ui.palette = !ui.palette; ui.menu = false; ui.shapeMenu = null; notify(); },
|
|
162
|
+
toggleImageOpacity() { toggleImagePop('opacity'); },
|
|
163
|
+
toggleImageRotation() { toggleImagePop('rotate'); },
|
|
164
|
+
toggleTileSize() { toggleImagePop('tilesize'); },
|
|
90
165
|
editRoomName(roomId) { ui.drawer = 'rooms'; ui.renameRoom = roomId; notify(); },
|
|
91
166
|
setCursor(cursor, where = 'plan') { cursorTargets[where]?.(cursor); },
|
|
167
|
+
interacting: setInteracting,
|
|
92
168
|
dismissPopovers() {
|
|
93
|
-
const was = ui.palette || ui.menu;
|
|
169
|
+
const was = ui.palette || !!ui.menu || !!ui.imgPop || !!ui.shapeMenu;
|
|
94
170
|
if (was) {
|
|
95
171
|
ui.palette = false;
|
|
96
172
|
ui.menu = false;
|
|
173
|
+
ui.imgPop = null;
|
|
174
|
+
ui.shapeMenu = null;
|
|
97
175
|
notify();
|
|
98
176
|
}
|
|
99
177
|
return was;
|
|
100
178
|
},
|
|
101
179
|
saveFile(name, mime, data) { (fileSaver ?? downloadInBrowser)(name, mime, data); },
|
|
102
180
|
save() {
|
|
181
|
+
if (manualSave()) {
|
|
182
|
+
void saveDrawing();
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
103
185
|
const ok = saveNow();
|
|
104
186
|
reactPorts.toast(ok ? 'Saved on this device' : 'Saved, but the image was too large to keep offline.', { warn: !ok });
|
|
105
187
|
},
|
package/dist/react/ports.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ports.js","sourceRoot":"","sources":["../../src/react/ports.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"ports.js","sourceRoot":"","sources":["../../src/react/ports.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { CadSync } from '../data/sync';
|
|
2
|
+
export type CadSaveState = 'saved' | 'dirty' | 'saving' | 'error';
|
|
3
|
+
export declare const manualSave: () => boolean;
|
|
4
|
+
export declare const saveState: () => CadSaveState;
|
|
5
|
+
/** Start manual saving for the drawing open in `sync`; `listener` hears each change of state. */
|
|
6
|
+
export declare function startManualSave(sync: CadSync, listener: ((s: CadSaveState) => void) | null): void;
|
|
7
|
+
export declare function stopManualSave(): void;
|
|
8
|
+
/** An edit was made: unsaved from now on (cheap, so it runs with every refresh of the editor). */
|
|
9
|
+
export declare function noteEdits(): void;
|
|
10
|
+
/** Compare the drawing with what's saved (an undo back to the saved drawing is clean again). */
|
|
11
|
+
export declare function checkChanges(): void;
|
|
12
|
+
/** Whether the drawing has edits that aren't saved (or a save that failed or is still going). */
|
|
13
|
+
export declare function hasUnsavedChanges(): boolean;
|
|
14
|
+
/** Save: write the drawing, its preview and its measurements. Resolves true once written, false if that failed. */
|
|
15
|
+
export declare function saveDrawing(): Promise<boolean>;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { ed } from '../app/state';
|
|
2
|
+
import { sessionState } from '../model/session';
|
|
3
|
+
import { store } from '../model/store';
|
|
4
|
+
import { notify } from './store';
|
|
5
|
+
import { renderThumbnail } from './thumbnail';
|
|
6
|
+
const sv = sessionState(() => ({
|
|
7
|
+
manual: false,
|
|
8
|
+
state: 'saved',
|
|
9
|
+
/** the edit count when the drawing last matched what's saved */
|
|
10
|
+
cleanSeq: 0,
|
|
11
|
+
sync: null,
|
|
12
|
+
listener: null,
|
|
13
|
+
}));
|
|
14
|
+
export const manualSave = () => sv.manual;
|
|
15
|
+
export const saveState = () => sv.state;
|
|
16
|
+
function setState(s) {
|
|
17
|
+
if (sv.state === s)
|
|
18
|
+
return;
|
|
19
|
+
sv.state = s;
|
|
20
|
+
sv.listener?.(s);
|
|
21
|
+
notify();
|
|
22
|
+
}
|
|
23
|
+
/** Start manual saving for the drawing open in `sync`; `listener` hears each change of state. */
|
|
24
|
+
export function startManualSave(sync, listener) {
|
|
25
|
+
Object.assign(sv, { manual: true, state: 'saved', cleanSeq: ed.editSeq, sync, listener });
|
|
26
|
+
listener?.('saved');
|
|
27
|
+
}
|
|
28
|
+
export function stopManualSave() {
|
|
29
|
+
Object.assign(sv, { manual: false, sync: null, listener: null });
|
|
30
|
+
}
|
|
31
|
+
/** An edit was made: unsaved from now on (cheap, so it runs with every refresh of the editor). */
|
|
32
|
+
export function noteEdits() {
|
|
33
|
+
if (sv.manual && sv.state !== 'saving' && ed.editSeq !== sv.cleanSeq)
|
|
34
|
+
setState('dirty');
|
|
35
|
+
}
|
|
36
|
+
/** Compare the drawing with what's saved (an undo back to the saved drawing is clean again). */
|
|
37
|
+
export function checkChanges() {
|
|
38
|
+
if (!sv.manual || !sv.sync || sv.state === 'saving')
|
|
39
|
+
return;
|
|
40
|
+
if (sv.sync.hasChanges())
|
|
41
|
+
setState('dirty');
|
|
42
|
+
else {
|
|
43
|
+
sv.cleanSeq = ed.editSeq;
|
|
44
|
+
setState('saved');
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/** Whether the drawing has edits that aren't saved (or a save that failed or is still going). */
|
|
48
|
+
export function hasUnsavedChanges() {
|
|
49
|
+
checkChanges();
|
|
50
|
+
return sv.manual && sv.state !== 'saved';
|
|
51
|
+
}
|
|
52
|
+
/** Save: write the drawing, its preview and its measurements. Resolves true once written, false if that failed. */
|
|
53
|
+
export async function saveDrawing() {
|
|
54
|
+
const sync = sv.sync;
|
|
55
|
+
if (!sv.manual || !sync || !store.project)
|
|
56
|
+
return true;
|
|
57
|
+
setState('saving');
|
|
58
|
+
const before = sync.failures();
|
|
59
|
+
sync.persistence.save();
|
|
60
|
+
const thumb = renderThumbnail(store.project.pages[0]);
|
|
61
|
+
if (thumb)
|
|
62
|
+
sync.saveThumbnail(thumb);
|
|
63
|
+
await sync.idle();
|
|
64
|
+
await sync.idle(); // the measurement ids the save stamped on the pages
|
|
65
|
+
if (sync.failures() !== before) {
|
|
66
|
+
setState('error');
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
// edited while it saved: still unsaved
|
|
70
|
+
const dirty = sync.hasChanges();
|
|
71
|
+
if (!dirty)
|
|
72
|
+
sv.cleanSeq = ed.editSeq;
|
|
73
|
+
setState(dirty ? 'dirty' : 'saved');
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=saving.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"saving.js","sourceRoot":"","sources":["../../src/react/saving.ts"],"names":[],"mappings":"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"}
|
package/dist/react/store.d.ts
CHANGED
|
@@ -3,6 +3,15 @@ import type { ConflictSpec, DrawerTab, ToastOpts } from '../editor/ports';
|
|
|
3
3
|
export declare function notify(): void;
|
|
4
4
|
/** Re-render this component whenever the editor changes. */
|
|
5
5
|
export declare const useEditorVersion: () => number;
|
|
6
|
+
/** The editor's change count (for a key that should change with every change: see useEditorKey). */
|
|
7
|
+
export declare const editorVersion: () => number;
|
|
8
|
+
/**
|
|
9
|
+
* Re-render this component only when what it shows changes, not on every change to the editor: `key` sums up all it
|
|
10
|
+
* reads, as one string, worked out again after each change — the same string, and it isn't rendered again. Keep it
|
|
11
|
+
* cheap and free of side effects; a component that's only briefly on screen can key on editorVersion() instead.
|
|
12
|
+
* (Re-rendering the whole interface on every change was most of the time an interaction took on a phone.)
|
|
13
|
+
*/
|
|
14
|
+
export declare function useEditorKey(key: () => string): string;
|
|
6
15
|
export interface ToastState {
|
|
7
16
|
id: number;
|
|
8
17
|
msg: string;
|
|
@@ -13,6 +22,7 @@ export interface NoteInputState {
|
|
|
13
22
|
x: number;
|
|
14
23
|
y: number;
|
|
15
24
|
cb: (text: string) => void;
|
|
25
|
+
initial?: string;
|
|
16
26
|
}
|
|
17
27
|
export declare const ui: {
|
|
18
28
|
toast: ToastState | null;
|
|
@@ -32,7 +42,34 @@ export declare const ui: {
|
|
|
32
42
|
renameRoom: string | null;
|
|
33
43
|
note: NoteInputState | null;
|
|
34
44
|
palette: boolean;
|
|
35
|
-
|
|
45
|
+
/** what the tool just picked from the rail does (a note under the tabs that goes by itself); seq tells one pick from the next */
|
|
46
|
+
toolTip: {
|
|
47
|
+
text: string;
|
|
48
|
+
seq: number;
|
|
49
|
+
} | null;
|
|
50
|
+
/** the slider open above the bar: the selected image's opacity, or how far it's turned; or the link tiles' size */
|
|
51
|
+
imgPop: null | 'opacity' | 'rotate' | 'tilesize';
|
|
52
|
+
/** the tool each shared place on the rail draws with (the last picked; editor/mode.ts TOOL_GROUPS), and the menu of
|
|
53
|
+
a group's tools, open beside its place at x, y */
|
|
54
|
+
picked: Record<string, string>;
|
|
55
|
+
shapeMenu: {
|
|
56
|
+
x: number;
|
|
57
|
+
y: number;
|
|
58
|
+
group: string;
|
|
59
|
+
} | null;
|
|
60
|
+
/** the top bar's open menu: ••• (exports, files and settings) or Layers (the stack) */
|
|
61
|
+
menu: false | 'more' | 'layers';
|
|
36
62
|
/** when a sheet opened (taps on the backdrop right after are the opening tap's ghost click) */
|
|
37
63
|
sheetOpenedAt: number;
|
|
64
|
+
/**
|
|
65
|
+
* How wide the top row's mode tabs and right-hand buttons laid out (0: not yet), and whether those buttons were
|
|
66
|
+
* measured in 3D, which has no Layers (see topRow.ts)
|
|
67
|
+
*/
|
|
68
|
+
topRoom: {
|
|
69
|
+
tabs: number;
|
|
70
|
+
right: number;
|
|
71
|
+
right3d: boolean;
|
|
72
|
+
};
|
|
73
|
+
/** Annotate's + floats in the corner (as a phone's) on a screen too short for it under the rail (see Rail) */
|
|
74
|
+
linkFab: boolean;
|
|
38
75
|
};
|