@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
package/dist/render/icons.js
CHANGED
|
@@ -2,15 +2,21 @@
|
|
|
2
2
|
export const IC = {
|
|
3
3
|
select: '<path d="M6 3.5l12.5 7.2-5.6 1.4-2.6 5.4z"/>',
|
|
4
4
|
line: '<path d="M6.6 17.4L17.4 6.6"/><circle cx="5" cy="19" r="2"/><circle cx="19" cy="5" r="2"/>',
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
// a freehand squiggle beside a pen nib (a stroke made into a shape)
|
|
6
|
+
freehand: '<path d="M3.6 2c1.8 2 2.6 4 2.2 6.2-.4 2.2-2.6 4.4-2.9 6.8-.2 1.8.4 3.2 1.8 4.4"/><path d="M7.2 20.4l1.9-9.9 5.1-.9 4.6 4.4-.9 4.6z"/><path d="M14.2 9.6l2.2-3.3M18.8 14l3.6-2M7.2 20.4l5.2-4.4"/>',
|
|
7
|
+
// a corner rounded off (Figma 2523:101119)
|
|
8
|
+
fillet: '<path d="M2 22V12.91C2 6.88 6.88 2 12.91 2H22"/>',
|
|
9
|
+
// a corner cut off straight, its corners sharp (Figma 2523:101121)
|
|
10
|
+
chamfer: '<path d="M2 22V11.79L9.45 2H22" stroke-linejoin="miter"/>',
|
|
11
|
+
// a corner of wall as drawn in plan: an L-shaped band, hatched (not a box, so it isn't taken for the Rectangle)
|
|
12
|
+
wall: '<path d="M4 20V4h16v5H9v11z"/><path d="M4 16.5l5-5M4 10.5L10.5 4M12.5 9l5-5" stroke-width="1.3"/>',
|
|
7
13
|
rect: '<rect x="4.5" y="6" width="15" height="12" rx="1"/>',
|
|
8
14
|
circle: '<circle cx="12" cy="12" r="7.5"/><circle cx="12" cy="12" r="1" fill="currentColor"/>',
|
|
9
|
-
arc: '<path d="M4.5
|
|
15
|
+
arc: '<path d="M4.5 13.5a8.5 8.5 0 0 1 15 0"/><circle cx="4.5" cy="13.5" r="1.6"/><circle cx="19.5" cy="13.5" r="1.6"/>', // (centred in the box: y 9–15)
|
|
10
16
|
dim: '<path d="M4 7v10M20 7v10M4 12h16M7.5 9.5L4.5 12l3 2.5M16.5 9.5l3 2.5-3 2.5"/>',
|
|
11
17
|
trim: '<circle cx="6.5" cy="7" r="2.6"/><circle cx="6.5" cy="17" r="2.6"/><path d="M8.6 8.6L20 18M8.6 15.4L20 6"/>',
|
|
12
18
|
offset: '<path d="M4 15L15 4M9 20L20 9"/><path d="M11 9l2.5 2.5"/>',
|
|
13
|
-
split: '<path d="M3
|
|
19
|
+
split: '<path d="M3 12H9.5M14.5 12H21"/><path d="M12 14.1969C13.2151 14.1969 14.2 13.2119 14.2 11.9969C14.2 10.7818 13.2151 9.79688 12 9.79688C10.785 9.79688 9.80005 10.7818 9.80005 11.9969C9.80005 13.2119 10.785 14.1969 12 14.1969Z" fill="currentColor"/><path d="M12 4V7M12 17V20"/>',
|
|
14
20
|
opening: '<path d="M5 20V6"/><path d="M5 6a14 14 0 0 1 14 14"/><path d="M3 20h18"/>',
|
|
15
21
|
room: '<path d="M4 5h9v6h7v8H4z"/>',
|
|
16
22
|
constr: '<path d="M5 19L19 5" stroke-dasharray="2.5 3"/>',
|
|
@@ -18,7 +24,13 @@ export const IC = {
|
|
|
18
24
|
redo: '<path d="M15 14l5-5-5-5"/><path d="M20 9H9.5a5.5 5.5 0 0 0 0 11H13"/>',
|
|
19
25
|
pen: '<path d="M4 20l1-4.5L16 4.5l3.5 3.5L8.5 19z"/><path d="M13.5 7l3.5 3.5"/>',
|
|
20
26
|
arrow: '<path d="M5 19L18 6"/><path d="M10 6h8v8"/>',
|
|
21
|
-
|
|
27
|
+
// the markup shapes beside Arrow (its Line drawn as Draft's)
|
|
28
|
+
mline: '<path d="M6.6 17.4L17.4 6.6"/><circle cx="5" cy="19" r="2"/><circle cx="19" cy="5" r="2"/>',
|
|
29
|
+
mrect: '<rect x="4.5" y="6" width="15" height="12" rx="1"/>',
|
|
30
|
+
mtri: '<path d="M12 4.5L20.5 19h-17z" stroke-linejoin="round"/>',
|
|
31
|
+
mcircle: '<circle cx="12" cy="12" r="7.5"/>',
|
|
32
|
+
// BOLDR's annotation editors' Add image (Lucide's image-plus)
|
|
33
|
+
image: '<path d="M16 5h6"/><path d="M19 2v6"/><path d="M21 11.5V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h7.5"/><path d="m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21"/><circle cx="9" cy="9" r="2"/>',
|
|
22
34
|
text: '<path d="M5 6h14M12 6v13M9 19h6"/>',
|
|
23
35
|
cloud: '<path d="M7 18a3 3 0 0 1-.4-6A4.5 4.5 0 0 1 15 9.6 3.5 3.5 0 1 1 17.5 18z"/>',
|
|
24
36
|
calib: '<path d="M3 15l12-12 6 6-12 12z"/><path d="M7 11l2 2M10 8l2 2M13 5l2 2"/>',
|
|
@@ -31,17 +43,27 @@ export const IC = {
|
|
|
31
43
|
eyeoff: '<path d="M2.5 12S6 5.5 12 5.5 21.5 12 21.5 12 18 18.5 12 18.5 2.5 12 2.5 12z"/><circle cx="12" cy="12" r="2.8"/><path d="M4 20L20 4"/>',
|
|
32
44
|
auto: '<path d="M12 3l1.8 4.6L18.5 9l-4.7 1.6L12 15l-1.8-4.4L5.5 9l4.7-1.4z"/><path d="M18 15l.8 2 2 .8-2 .8-.8 2-.8-2-2-.8 2-.8z"/>',
|
|
33
45
|
layers: '<path d="M12 3l9 5-9 5-9-5z"/><path d="M3 13l9 5 9-5"/>',
|
|
46
|
+
// a plan sheet unrolling from its roll, rooms drawn on it (the pages and spaces)
|
|
47
|
+
spaces: '<path d="M10 5.50353H21V20.5035H6.1C5.14522 20.5035 4.22955 20.1242 3.55442 19.4491C2.87928 18.774 2.5 17.8583 2.5 16.9035M2.5 16.9035V5.50353C2.5 5.50353 2.5 3 5 3C7.5 3 7.5 5.00353 7.5 5.00353V16.0035C7.5 16.0035 6.99996 14.5 4.99996 14.5C2.5 14.5 2.5 16.9035 2.5 16.9035Z"/><path stroke-width="1" d="M14.0188 9L14.0188 11.2622M14.0188 14.7405V16.9144M10.2797 13H12.2797M15.758 13H17.7579M10.2797 9H17.7579V17H10.2797V9Z"/>',
|
|
34
48
|
back: '<path d="M15 4.5L7.5 12l7.5 7.5"/>',
|
|
49
|
+
// a turn clockwise (Lucide's rotate-cw): how far an image is turned
|
|
50
|
+
rotate: '<path d="M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8"/><path d="M21 3v5h-5"/>',
|
|
51
|
+
// a circle half filled: how see-through
|
|
52
|
+
opacity: '<circle cx="12" cy="12" r="8"/><path d="M12 4a8 8 0 0 1 0 16z" fill="currentColor" stroke="none"/>',
|
|
53
|
+
// two overlapping sheets: the front one solid (bring to front), or the back one (send to back)
|
|
54
|
+
tofront: '<path d="M13 3.5H5C4.17157 3.5 3.5 4.17157 3.5 5V13C3.5 13.8284 4.17157 14.5 5 14.5H13C13.8284 14.5 14.5 13.8284 14.5 13V5C14.5 4.17157 13.8284 3.5 13 3.5Z" stroke-width="1.5" stroke-dasharray="2.75 2.5"/><path d="M19 9.5H11C10.1716 9.5 9.5 10.1716 9.5 11V19C9.5 19.8284 10.1716 20.5 11 20.5H19C19.8284 20.5 20.5 19.8284 20.5 19V11C20.5 10.1716 19.8284 9.5 19 9.5Z" fill="currentColor" fill-opacity="0.35"/>',
|
|
55
|
+
toback: '<path d="M19 9.5H11C10.1716 9.5 9.5 10.1716 9.5 11V19C9.5 19.8284 10.1716 20.5 11 20.5H19C19.8284 20.5 20.5 19.8284 20.5 19V11C20.5 10.1716 19.8284 9.5 19 9.5Z" stroke-width="1.5" stroke-dasharray="2.75 2.5"/><path d="M13 3.5H5C4.17157 3.5 3.5 4.17157 3.5 5V13C3.5 13.8284 4.17157 14.5 5 14.5H13C13.8284 14.5 14.5 13.8284 14.5 13V5C14.5 4.17157 13.8284 3.5 13 3.5Z" fill="currentColor" fill-opacity="0.35"/>',
|
|
35
56
|
share: '<circle cx="6" cy="12" r="2.4"/><circle cx="18" cy="6" r="2.4"/><circle cx="18" cy="18" r="2.4"/><path d="M8.2 10.9l7.6-3.8M8.2 13.1l7.6 3.8"/>',
|
|
36
57
|
dots: '<circle cx="5" cy="12" r="1.6" fill="currentColor"/><circle cx="12" cy="12" r="1.6" fill="currentColor"/><circle cx="19" cy="12" r="1.6" fill="currentColor"/>',
|
|
37
|
-
save:
|
|
58
|
+
// BOLDR's save (Figma 2247:138414): a filled disk, the full 24 box
|
|
59
|
+
save: '<path transform="translate(-25.5 -12.5)" fill="currentColor" stroke="none" d="M44.0271 12.5H27.374C26.3412 12.5 25.5 13.3412 25.5 14.374V34.626C25.5 35.6588 26.3305 36.5 27.374 36.5H47.626C48.6588 36.5 49.5 35.6695 49.5 34.626V17.9729L44.0271 12.5ZM37.5 33.1886C35.4024 33.1886 33.6988 31.4849 33.6988 29.3873C33.6988 27.2897 35.4024 25.5861 37.5 25.5861C39.5976 25.5861 41.3012 27.2897 41.3012 29.3873C41.3012 31.4849 39.5976 33.1886 37.5 33.1886ZM41.4184 20.2622H29.4503V15.8434H41.4184V20.2622Z"/>',
|
|
38
60
|
bt: '<path d="M7 18H6a5 5 0 0 1-.6-10A7 7 0 0 1 18.5 6.6 5.5 5.5 0 0 1 18.5 18H17"/><path d="M9.5 11l5 4-2.5 2V8.5l2.5 2-5 4"/>',
|
|
39
61
|
h: '<path d="M4 12h16"/><circle cx="4" cy="12" r="1.8" fill="currentColor"/><circle cx="20" cy="12" r="1.8" fill="currentColor"/>',
|
|
40
62
|
v: '<path d="M12 4v16"/><circle cx="12" cy="4" r="1.8" fill="currentColor"/><circle cx="12" cy="20" r="1.8" fill="currentColor"/>',
|
|
41
63
|
par: '<path d="M5 18L13 6M11 18L19 6"/>',
|
|
42
|
-
perp: '<path d="M4
|
|
64
|
+
perp: '<path d="M4 19H20M10 19V5"/><path d="M10 14H15V19"/>',
|
|
43
65
|
tan: '<circle cx="12" cy="14" r="6"/><path d="M3 8h18"/>',
|
|
44
|
-
col: '<path d="M3
|
|
66
|
+
col: '<path d="M3 20L8.5 14.5M15.5 7.5L21 2"/><path d="M10.5 12.5L13.5 9.5" stroke-dasharray="1.5 2"/>',
|
|
45
67
|
eq: '<path d="M5 9h14M5 15h14"/>',
|
|
46
68
|
mid: '<path d="M3.5 17L20.5 7"/><circle cx="12" cy="12" r="2.6" fill="currentColor"/>',
|
|
47
69
|
online: '<path d="M3.5 17L20.5 7"/><circle cx="15.5" cy="9.6" r="2.4"/>',
|
|
@@ -50,11 +72,33 @@ export const IC = {
|
|
|
50
72
|
unlock: '<rect x="5.5" y="10.5" width="13" height="9.5" rx="2"/><path d="M8.5 10.5V8a3.5 3.5 0 0 1 6.8-1.2"/>',
|
|
51
73
|
angle: '<path d="M4 19h16M4 19L15 5"/><path d="M10.5 19a6.5 6.5 0 0 0-2.6-5.2"/>',
|
|
52
74
|
diam: '<circle cx="12" cy="12" r="7.5"/><path d="M6.7 17.3L17.3 6.7"/>',
|
|
53
|
-
merge: '<
|
|
75
|
+
merge: '<path d="M4.2 14.1969C5.41503 14.1969 6.4 13.2119 6.4 11.9969C6.4 10.7818 5.41503 9.79688 4.2 9.79688C2.98497 9.79688 2 10.7818 2 11.9969C2 13.2119 2.98497 14.1969 4.2 14.1969Z"/><path d="M18 14.1969C19.2151 14.1969 20.2 13.2119 20.2 11.9969C20.2 10.7818 19.2151 9.79688 18 9.79688C16.785 9.79688 15.8 10.7818 15.8 11.9969C15.8 13.2119 16.785 14.1969 18 14.1969Z"/><path d="M6.5 12H14.5M12 14.5L14.5 12L12 9.5" stroke-width="1.5"/>',
|
|
54
76
|
chain: '<path d="M9 7H6a5 5 0 0 0 0 10h3M15 7h3a5 5 0 0 1 0 10h-3M8 12h8"/>',
|
|
55
77
|
thick: '<path d="M3 7h18M3 17h18"/><path d="M12 9.5v5M10.3 11l1.7-1.7 1.7 1.7M10.3 13l1.7 1.7 1.7-1.7"/>',
|
|
78
|
+
// a wall's length measured on its face on top, at the bottom, left or right (as the page shows the wall), or along its
|
|
79
|
+
// centerline (a level wall's, a plumb one's): a wall dimension's choices
|
|
80
|
+
faceT: '<path d="M3 16h18" stroke-width="1.3"/><path d="M3 8h18M6 5.5L3 8l3 2.5M18 5.5L21 8l-3 2.5"/>',
|
|
81
|
+
faceB: '<path d="M3 8h18" stroke-width="1.3"/><path d="M3 16h18M6 13.5L3 16l3 2.5M18 13.5L21 16l-3 2.5"/>',
|
|
82
|
+
faceL: '<path d="M16 3v18" stroke-width="1.3"/><path d="M8 3v18M5.5 6L8 3l2.5 3M5.5 18L8 21l2.5-3"/>',
|
|
83
|
+
faceR: '<path d="M8 3v18" stroke-width="1.3"/><path d="M16 3v18M13.5 6L16 3l2.5 3M13.5 18L16 21l2.5-3"/>',
|
|
84
|
+
faceMidH: '<path d="M3 6h18M3 18h18" stroke-width="1.3"/><path d="M3 12h18M6 9.5L3 12l3 2.5M18 9.5L21 12l-3 2.5"/>',
|
|
85
|
+
faceMidV: '<path d="M6 3v18M18 3v18" stroke-width="1.3"/><path d="M12 3v18M9.5 6L12 3l2.5 3M9.5 18L12 21l2.5-3"/>',
|
|
86
|
+
// the distance between two walls (plumb ones; H: level): between their faces toward each other, their centerlines,
|
|
87
|
+
// their far faces
|
|
88
|
+
spanIn: '<path d="M2.5 4v16M7 4v16M17 4v16M21.5 4v16" stroke-width="1.3"/><path d="M7 12h10M9.5 9.5L7 12l2.5 2.5M14.5 9.5L17 12l-2.5 2.5"/>',
|
|
89
|
+
spanMid: '<path d="M2.5 4v16M7 4v16M17 4v16M21.5 4v16" stroke-width="1.3"/><path d="M4.75 4v16M19.25 4v16" stroke-width="1" stroke-dasharray="1.5 2"/><path d="M4.75 12h14.5M7.25 9.5L4.75 12l2.5 2.5M16.75 9.5l2.5 2.5-2.5 2.5"/>',
|
|
90
|
+
spanOut: '<path d="M2.5 3v12M7 3v12M17 3v12M21.5 3v12" stroke-width="1.3"/><path d="M2.5 19.5h19M5 17L2.5 19.5 5 22M19 17l2.5 2.5L19 22"/>',
|
|
91
|
+
spanInH: '<path d="M4 2.5h16M4 7h16M4 17h16M4 21.5h16" stroke-width="1.3"/><path d="M12 7v10M9.5 9.5L12 7l2.5 2.5M9.5 14.5L12 17l2.5-2.5"/>',
|
|
92
|
+
spanMidH: '<path d="M4 2.5h16M4 7h16M4 17h16M4 21.5h16" stroke-width="1.3"/><path d="M4 4.75h16M4 19.25h16" stroke-width="1" stroke-dasharray="1.5 2"/><path d="M12 4.75v14.5M9.5 7.25L12 4.75l2.5 2.5M9.5 16.75l2.5 2.5 2.5-2.5"/>',
|
|
93
|
+
spanOutH: '<path d="M3 2.5h12M3 7h12M3 17h12M3 21.5h12" stroke-width="1.3"/><path d="M19.5 2.5v19M17 5L19.5 2.5 22 5M17 19l2.5 2.5L22 19"/>',
|
|
94
|
+
// a curved wall's diameter across its inner face, its centerline, its outer face
|
|
95
|
+
ringIn: '<circle cx="12" cy="12" r="5.5" stroke-width="1.3"/><circle cx="12" cy="12" r="9.5" stroke-width="1.3"/><path d="M6.5 12h11M9 9.5L6.5 12 9 14.5M15 9.5l2.5 2.5L15 14.5"/>',
|
|
96
|
+
ringMid: '<circle cx="12" cy="12" r="5.5" stroke-width="1.3"/><circle cx="12" cy="12" r="9.5" stroke-width="1.3"/><circle cx="12" cy="12" r="7.5" stroke-width="1" stroke-dasharray="1.5 2"/><path d="M4.5 12h15M7 9.5L4.5 12 7 14.5M17 9.5l2.5 2.5L17 14.5"/>',
|
|
97
|
+
ringOut: '<circle cx="12" cy="12" r="5.5" stroke-width="1.3"/><circle cx="12" cy="12" r="9.5" stroke-width="1.3"/><path d="M2.5 12h19M5 9.5L2.5 12 5 14.5M19 9.5l2.5 2.5L19 14.5"/>',
|
|
56
98
|
flip: '<path d="M12 3v18"/><path d="M8 7L3 12l5 5zM16 7l5 5-5 5z"/>',
|
|
57
99
|
ref: '<path d="M8 4a12 12 0 0 0 0 16M16 4a12 12 0 0 1 0 16"/>',
|
|
100
|
+
hline: '<path d="M3 13h18"/><path d="M3 20h18" stroke-dasharray="2 3"/><path d="M17 4v6M15 8l2 2 2-2"/>',
|
|
101
|
+
cabinet: '<rect x="4" y="6" width="16" height="14" rx="1"/><path d="M12 6v14M10 11v3M14 11v3M3 20h18"/>',
|
|
58
102
|
window: '<path d="M2.5 8.5v7M21.5 8.5v7M2.5 12h3M18.5 12h3"/><path d="M5.5 10h13M5.5 14h13M5.5 8.5v7M18.5 8.5v7"/>',
|
|
59
103
|
door: '<path d="M5 20V6"/><path d="M5 6a14 14 0 0 1 14 14"/><path d="M3 20h18"/>',
|
|
60
104
|
convert: '<path d="M4 17c3-6 4.5 1 7.5-4.5S16 9 20 6"/><path d="M4 21h16" stroke-dasharray="3 2.5"/>',
|
|
@@ -64,9 +108,24 @@ export const IC = {
|
|
|
64
108
|
close: '<path d="M6 6l12 12M18 6L6 18"/>',
|
|
65
109
|
closeShape: '<path d="M5 18V6h12"/><path d="M17 6l2 12H5" stroke-dasharray="2 2.5"/>',
|
|
66
110
|
width: '<path d="M3 8v8M21 8v8M3 12h18M6 9.5L3.5 12 6 14.5M18 9.5l2.5 2.5-2.5 2.5"/>',
|
|
67
|
-
elev: '<path d="
|
|
111
|
+
elev: '<path d="M2 20L22 20"/><path d="M20 5H4V20H20V5Z"/><path d="M11.5 11H7.5V20H11.5V11Z" stroke-width="1"/><path d="M17 9H14V13H17V9Z" stroke-width="1"/>',
|
|
68
112
|
conc: '<circle cx="12" cy="12" r="8"/><circle cx="12" cy="12" r="3.5"/>',
|
|
69
113
|
color: '<circle cx="12" cy="12" r="7" fill="currentColor"/>',
|
|
114
|
+
// links: open what a tile is for (Lucide's external-link); a tile's leader (a card, its line out to an arrowhead);
|
|
115
|
+
// a measurement linked to a dimension, and let go of (Lucide's link and unlink); saved to the drawing's group
|
|
116
|
+
// (Lucide's folder-plus)
|
|
117
|
+
open: '<path d="M15 3h6v6"/><path d="M10 14L21 3"/><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/>',
|
|
118
|
+
leader: '<rect x="3" y="3" width="8.5" height="8.5" rx="2"/><path d="M11.5 11.5L20 20"/><path d="M14.5 20H20v-5.5"/>',
|
|
119
|
+
link: '<path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/>',
|
|
120
|
+
unlink: '<path d="M18.84 12.25l1.72-1.71a5 5 0 0 0-7.07-7.07l-1.72 1.71"/><path d="M5.17 11.75l-1.71 1.71a5 5 0 0 0 7.07 7.07l1.71-1.71"/><path d="M8 2v3M2 8h3M16 19v3M19 16h3"/>',
|
|
121
|
+
// the link tiles' size (Lucide's scaling)
|
|
122
|
+
tilesize: '<path d="M21 3L9 15"/><path d="M12 3H3v18h18v-9"/><path d="M16 3h5v5"/><path d="M14 15H9v-5"/>',
|
|
123
|
+
savegroup: '<path d="M12 10v6M9 13h6"/><path d="M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2z"/>',
|
|
124
|
+
// the 3D tab's rail: the corner view (a block seen from a corner), from above (the block, its top filled in), cut away
|
|
125
|
+
// (a room whose front walls are low)
|
|
126
|
+
home3d: '<path d="M12 3l8 4.5v9L12 21l-8-4.5v-9z"/><path d="M4 7.5L12 12l8-4.5M12 12v9"/>',
|
|
127
|
+
top3d: '<path d="M12 3l8 4.5v9L12 21l-8-4.5v-9z"/><path d="M4 7.5L12 12l8-4.5M12 12v9"/><path d="M12 3l8 4.5-8 4.5-8-4.5z" fill="currentColor" fill-opacity="0.55"/>',
|
|
128
|
+
cutaway: '<path d="M3.5 14.5V6.5L12 2l8.5 4.5v8"/><path d="M12 2v8L3.5 14.5M12 10l8.5 4.5" stroke-width="1.5"/><path d="M3.5 12.5L12 17l8.5-4.5M3.5 14.5L12 19l8.5-4.5M12 17v2"/>',
|
|
70
129
|
};
|
|
71
130
|
export const icon = (k, s = 24) => `<svg width="${s}" height="${s}" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">${IC[k] || ''}</svg>`;
|
|
72
131
|
//# sourceMappingURL=icons.js.map
|
package/dist/render/icons.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"icons.js","sourceRoot":"","sources":["../../src/render/icons.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,MAAM,CAAC,MAAM,EAAE,GAA2B;IACxC,MAAM,EAAE,8CAA8C;IACtD,IAAI,EAAE,4FAA4F;IAClG,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"icons.js","sourceRoot":"","sources":["../../src/render/icons.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { LinkInfo, Note } from '../model/types';
|
|
2
|
+
import type { DrawCtx } from './ctx';
|
|
3
|
+
import { type Xform } from './view';
|
|
4
|
+
export interface LinkDrawOpts {
|
|
5
|
+
selected: boolean;
|
|
6
|
+
alpha: number;
|
|
7
|
+
/** what the host says it is now (none yet: what it was when linked) */
|
|
8
|
+
info?: LinkInfo;
|
|
9
|
+
}
|
|
10
|
+
/** Draw tile `n` and its leader. */
|
|
11
|
+
export declare function drawLink(c: DrawCtx, T: Xform, n: Note, o: LinkDrawOpts): void;
|
|
12
|
+
/** The most of `text` that fits `maxW` at the current font: all of it, or its start and an ellipsis. */
|
|
13
|
+
export declare function fitName(c: DrawCtx, text: string, maxW: number): string;
|
|
14
|
+
/** All of `text` on two lines `maxW` wide, evenly (see splitOf); null if one line takes it, or two can't. */
|
|
15
|
+
export declare function twoLines(c: DrawCtx, text: string, maxW: number): [string, string] | null;
|
|
@@ -0,0 +1,369 @@
|
|
|
1
|
+
import { LINK_PIN_PX, LINK_TILE_PX } from '../model/links';
|
|
2
|
+
import { noteLook } from '../model/markup';
|
|
3
|
+
import { strokeMarkup } from './markup';
|
|
4
|
+
import { smoothRectPath } from './squircle';
|
|
5
|
+
import { FONT, TH } from './theme';
|
|
6
|
+
import { cvs, leaderPath, linkBox, linkThumb } from './view';
|
|
7
|
+
/** Draw tile `n` and its leader. */
|
|
8
|
+
export function drawLink(c, T, n, o) {
|
|
9
|
+
const b = linkBox(T, n), lp = leaderPath(T, n, b);
|
|
10
|
+
c.save();
|
|
11
|
+
c.globalAlpha = o.alpha;
|
|
12
|
+
// (under the card, which covers where it starts)
|
|
13
|
+
if (lp)
|
|
14
|
+
strokeMarkup(c, lp, noteLook(n), o.selected ? 'rgba(255,173,0,.45)' : undefined);
|
|
15
|
+
if (b.lod === 'pin')
|
|
16
|
+
drawPin(c, b, n, o);
|
|
17
|
+
else
|
|
18
|
+
drawCard(c, b, n, o);
|
|
19
|
+
c.restore();
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* A line `px` wide on the screen, in the layout of a card at scale `k` — in steps, four to each doubling of the zoom
|
|
23
|
+
* (within a fifth of `px`): a pinch draws with the same few paints, on a device, not a new one at every step.
|
|
24
|
+
*/
|
|
25
|
+
const screenW = (px, k) => Math.pow(2, Math.round(Math.log2(px / k) * 4) / 4);
|
|
26
|
+
/** The layout's side, and its rounding; how wide a selected tile's ring is outside its edge (pt). */
|
|
27
|
+
const L = LINK_TILE_PX, R = 12, SELECT_W = 3;
|
|
28
|
+
/** A rounded rectangle's path, one shape for each size (as draw.ts's rr: kept by an engine that can). */
|
|
29
|
+
function rr(c, x, y, w, h, r) {
|
|
30
|
+
if (c.shape)
|
|
31
|
+
c.shape('rr ' + w + ' ' + h + ' ' + r, x, y, (cc, X, Y) => smoothRectPath(cc, X, Y, w, h, r));
|
|
32
|
+
else
|
|
33
|
+
smoothRectPath(c, x, y, w, h, r);
|
|
34
|
+
}
|
|
35
|
+
const glyphOf = (n, info) => {
|
|
36
|
+
if (info?.exists === false)
|
|
37
|
+
return 'removed';
|
|
38
|
+
if (n.link.kind === 'measurement')
|
|
39
|
+
return 'tape';
|
|
40
|
+
const t = info?.fileType ?? n.link.fileType;
|
|
41
|
+
return t === 'photo' || t === 'pdf' || t === 'note' || t === 'calculator' || t === 'label' || t === 'drawing' ? t : 'document';
|
|
42
|
+
};
|
|
43
|
+
function drawCard(c, b, n, o) {
|
|
44
|
+
const k = b.k, t = n.link, info = o.info, gone = info?.exists === false, glyph = glyphOf(n, info);
|
|
45
|
+
c.save();
|
|
46
|
+
c.translate(b.x, b.y);
|
|
47
|
+
c.scale(k, k);
|
|
48
|
+
rr(c, 0, 0, L, L, R);
|
|
49
|
+
// selected: a yellow ring round the card's edge, the same 3 pt at any size — stroked twice as wide on the card's own
|
|
50
|
+
// outline before it's filled, so the card covers the inside half (and no new shape is made as it zooms)
|
|
51
|
+
if (o.selected) {
|
|
52
|
+
c.lineWidth = screenW(2 * SELECT_W, k);
|
|
53
|
+
c.strokeStyle = TH.yellow;
|
|
54
|
+
c.stroke();
|
|
55
|
+
}
|
|
56
|
+
c.fillStyle = gone ? TH.chip : TH.badge;
|
|
57
|
+
c.fill();
|
|
58
|
+
if (!o.selected) {
|
|
59
|
+
c.lineWidth = screenW(1, k);
|
|
60
|
+
c.strokeStyle = TH.badgeline;
|
|
61
|
+
c.stroke();
|
|
62
|
+
}
|
|
63
|
+
// (its picture asked for only near the screen: a drawing can link more than are kept)
|
|
64
|
+
const near = b.x < cvs.W * 2 && b.y < cvs.H * 2 && b.x + b.s > -cvs.W && b.y + b.s > -cvs.H;
|
|
65
|
+
const pic = near && !gone && t.kind === 'file' && info?.thumbUrl ? linkThumb(info.thumbUrl) : null, shown = pic && pic.complete && pic.naturalWidth > 0;
|
|
66
|
+
// a photo is its picture, edge to edge — it says what it is (until it's loaded: its icon and name, as any file)
|
|
67
|
+
const photo = shown && glyph === 'photo';
|
|
68
|
+
if (photo)
|
|
69
|
+
cover(c, pic, 0, 0, L, L, R);
|
|
70
|
+
else if (b.lod === 'compact') {
|
|
71
|
+
// the picture or the icon alone
|
|
72
|
+
if (shown)
|
|
73
|
+
cover(c, pic, 6, 6, L - 12, L - 12, R - 4);
|
|
74
|
+
else
|
|
75
|
+
drawGlyph(c, glyph, L / 2, L / 2, 46, TH.ink2);
|
|
76
|
+
}
|
|
77
|
+
else if (t.kind === 'measurement' && !gone) {
|
|
78
|
+
// its value, and its name
|
|
79
|
+
drawGlyph(c, 'tape', 18, 17, 18, TH.ink2);
|
|
80
|
+
const value = info?.text ?? t.text ?? '—';
|
|
81
|
+
c.font = '700 18px ' + FONT;
|
|
82
|
+
c.fillStyle = TH.blue;
|
|
83
|
+
c.textAlign = 'center';
|
|
84
|
+
c.textBaseline = 'middle';
|
|
85
|
+
c.fillText(fit(c, value, L - 12), L / 2, 46);
|
|
86
|
+
drawName(c, k, info?.name ?? t.name ?? 'Measurement', 75, L - 14, TH.ink2, false);
|
|
87
|
+
}
|
|
88
|
+
else if (gone) {
|
|
89
|
+
// the removed mark, and what it was
|
|
90
|
+
drawGlyph(c, glyph, L / 2, 30, 28, TH.ink2);
|
|
91
|
+
c.font = '700 11px ' + FONT;
|
|
92
|
+
c.fillStyle = TH.ink2;
|
|
93
|
+
c.textAlign = 'center';
|
|
94
|
+
c.textBaseline = 'middle';
|
|
95
|
+
c.fillText('Removed', L / 2, 58);
|
|
96
|
+
drawName(c, k, t.name ?? (t.kind === 'file' ? 'File' : 'Measurement'), 79, L - 12, TH.ink2, false);
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
// its picture or icon above, its name below
|
|
100
|
+
if (shown)
|
|
101
|
+
cover(c, pic, 6, 6, L - 12, 62, R - 4);
|
|
102
|
+
else {
|
|
103
|
+
const a = c.globalAlpha;
|
|
104
|
+
rr(c, 6, 6, L - 12, 62, R - 4);
|
|
105
|
+
c.fillStyle = TH.chip;
|
|
106
|
+
c.globalAlpha = a * 0.5;
|
|
107
|
+
c.fill();
|
|
108
|
+
c.globalAlpha = a;
|
|
109
|
+
drawGlyph(c, glyph, L / 2, 37, 34, TH.ink2);
|
|
110
|
+
}
|
|
111
|
+
drawName(c, k, info?.name ?? t.name ?? 'File', 81, L - 12, TH.ink, true);
|
|
112
|
+
}
|
|
113
|
+
c.restore();
|
|
114
|
+
}
|
|
115
|
+
/** Far out, a tile is a pin: a small fixed-size card with its icon. */
|
|
116
|
+
function drawPin(c, b, n, o) {
|
|
117
|
+
const s = LINK_PIN_PX;
|
|
118
|
+
rr(c, b.cx - s / 2, b.cy - s / 2, s, s, 6);
|
|
119
|
+
// (selected: ringed round its edge, as a card is)
|
|
120
|
+
if (o.selected) {
|
|
121
|
+
c.lineWidth = 2 * SELECT_W;
|
|
122
|
+
c.strokeStyle = TH.yellow;
|
|
123
|
+
c.stroke();
|
|
124
|
+
}
|
|
125
|
+
c.fillStyle = o.info?.exists === false ? TH.chip : TH.badge;
|
|
126
|
+
c.fill();
|
|
127
|
+
if (!o.selected) {
|
|
128
|
+
c.lineWidth = 1;
|
|
129
|
+
c.strokeStyle = TH.badgeline;
|
|
130
|
+
c.stroke();
|
|
131
|
+
}
|
|
132
|
+
drawGlyph(c, glyphOf(n, o.info), b.cx, b.cy, 14, TH.ink2);
|
|
133
|
+
}
|
|
134
|
+
/** A picture filling the rounded rectangle x, y, w, h (its middle shown, its sides cut off). */
|
|
135
|
+
function cover(c, im, x, y, w, h, r) {
|
|
136
|
+
const iw = im.naturalWidth, ih = im.naturalHeight || 1, k = Math.max(w / iw, h / ih), dw = iw * k, dh = ih * k;
|
|
137
|
+
c.save();
|
|
138
|
+
rr(c, x, y, w, h, r);
|
|
139
|
+
c.clip();
|
|
140
|
+
c.drawImage(im, x + (w - dw) / 2, y + (h - dh) / 2, dw, dh);
|
|
141
|
+
c.restore();
|
|
142
|
+
}
|
|
143
|
+
/*
|
|
144
|
+
A name grows with its card until it's NAME_MAX_PX on the screen; past that it stays that size, and the card, wider on
|
|
145
|
+
the screen as it's zoomed in, shows more of it — in the end all of it: on two even lines once two show the whole of it
|
|
146
|
+
(the strip under a picture always has the room by then), and on one once one does. Each name is measured once, at
|
|
147
|
+
each of its two sizes: laying it out again at another width, every step of a pinch, measures nothing.
|
|
148
|
+
*/
|
|
149
|
+
const NAME_PX = 11, NAME_MAX_PX = 14, NAME_LINE = 1.25;
|
|
150
|
+
/** A name's prefixes' widths at a font (w[i]: its first i characters), and an ellipsis's. */
|
|
151
|
+
const prefixes = new Map();
|
|
152
|
+
function widthsOf(c, text) {
|
|
153
|
+
const key = c.font + '|' + text;
|
|
154
|
+
let p = prefixes.get(key);
|
|
155
|
+
if (p)
|
|
156
|
+
return p;
|
|
157
|
+
const w = [0];
|
|
158
|
+
for (let i = 1; i <= text.length; i++)
|
|
159
|
+
w.push(c.measureText(text.slice(0, i)).width);
|
|
160
|
+
p = { w, ell: c.measureText('…').width };
|
|
161
|
+
if (prefixes.size > 1000)
|
|
162
|
+
prefixes.clear();
|
|
163
|
+
prefixes.set(key, p);
|
|
164
|
+
return p;
|
|
165
|
+
}
|
|
166
|
+
/** The most of `text` that fits `maxW` at the current font: all of it, or its start and an ellipsis. */
|
|
167
|
+
export function fitName(c, text, maxW) {
|
|
168
|
+
const { w, ell } = widthsOf(c, text), n = text.length;
|
|
169
|
+
if (w[n] <= maxW)
|
|
170
|
+
return text;
|
|
171
|
+
let lo = 0, hi = n;
|
|
172
|
+
while (lo < hi) {
|
|
173
|
+
const mid = (lo + hi + 1) >> 1;
|
|
174
|
+
if (w[mid] + ell <= maxW)
|
|
175
|
+
lo = mid;
|
|
176
|
+
else
|
|
177
|
+
hi = mid - 1;
|
|
178
|
+
}
|
|
179
|
+
return text.slice(0, lo).trimEnd() + '…';
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Where a name breaks onto two lines: at the space nearest half its width (with none, after the _ - . or / nearest it;
|
|
183
|
+
* with none of those, halfway across), so the two are even — and the same however wide its tile, so zooming never
|
|
184
|
+
* moves the break. `width`: the wider of the two lines.
|
|
185
|
+
*/
|
|
186
|
+
const splits = new Map();
|
|
187
|
+
function splitOf(c, text) {
|
|
188
|
+
const key = c.font + '|' + text;
|
|
189
|
+
let sp = splits.get(key);
|
|
190
|
+
if (sp)
|
|
191
|
+
return sp;
|
|
192
|
+
const { w } = widthsOf(c, text), n = text.length, total = w[n];
|
|
193
|
+
sp = { cut: 0, next: 0, width: Infinity };
|
|
194
|
+
for (let i = 1; i < n - 1; i++) {
|
|
195
|
+
if (text[i] !== ' ')
|
|
196
|
+
continue;
|
|
197
|
+
const width = Math.max(w[i], total - w[i + 1]);
|
|
198
|
+
if (width < sp.width)
|
|
199
|
+
sp = { cut: i, next: i + 1, width };
|
|
200
|
+
}
|
|
201
|
+
// (no space, as a file's name often has none: after a _ - . or /, which stays on the first line)
|
|
202
|
+
if (!sp.cut)
|
|
203
|
+
for (let i = 2; i < n - 1; i++) {
|
|
204
|
+
if (!'_-./'.includes(text[i - 1]))
|
|
205
|
+
continue;
|
|
206
|
+
const width = Math.max(w[i], total - w[i]);
|
|
207
|
+
if (width < sp.width)
|
|
208
|
+
sp = { cut: i, next: i, width };
|
|
209
|
+
}
|
|
210
|
+
if (!sp.cut) {
|
|
211
|
+
let i = 1;
|
|
212
|
+
while (i < n - 1 && w[i] < total / 2)
|
|
213
|
+
i++;
|
|
214
|
+
sp = { cut: i, next: i, width: Math.max(w[i], total - w[i]) };
|
|
215
|
+
}
|
|
216
|
+
if (splits.size > 1000)
|
|
217
|
+
splits.clear();
|
|
218
|
+
splits.set(key, sp);
|
|
219
|
+
return sp;
|
|
220
|
+
}
|
|
221
|
+
/** All of `text` on two lines `maxW` wide, evenly (see splitOf); null if one line takes it, or two can't. */
|
|
222
|
+
export function twoLines(c, text, maxW) {
|
|
223
|
+
const n = text.length;
|
|
224
|
+
if (n < 2 || widthsOf(c, text).w[n] <= maxW)
|
|
225
|
+
return null;
|
|
226
|
+
const sp = splitOf(c, text);
|
|
227
|
+
return sp.width <= maxW ? [text.slice(0, sp.cut).trimEnd(), text.slice(sp.next).trimStart()] : null;
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* A name on card `k` (its scale from the layout), centred on `y` and at most `maxW` wide in the layout: the layout's
|
|
231
|
+
* size until that's NAME_MAX_PX on the screen; past it, that size on the screen (drawn at the screen's own scale, so one
|
|
232
|
+
* font does), showing more of the name as the card grows — and with `wrap`, on two lines once two show all of it.
|
|
233
|
+
*/
|
|
234
|
+
function drawName(c, k, text, y, maxW, color, wrap) {
|
|
235
|
+
c.fillStyle = color;
|
|
236
|
+
c.textAlign = 'center';
|
|
237
|
+
c.textBaseline = 'middle';
|
|
238
|
+
if (NAME_PX * k <= NAME_MAX_PX) {
|
|
239
|
+
c.font = '600 ' + NAME_PX + 'px ' + FONT;
|
|
240
|
+
c.fillText(fitName(c, text, maxW), L / 2, y);
|
|
241
|
+
return;
|
|
242
|
+
}
|
|
243
|
+
c.save();
|
|
244
|
+
c.scale(1 / k, 1 / k);
|
|
245
|
+
c.font = '600 ' + NAME_MAX_PX + 'px ' + FONT;
|
|
246
|
+
const W = maxW * k, x = (L / 2) * k, one = fitName(c, text, W);
|
|
247
|
+
const two = wrap && one !== text ? twoLines(c, text, W) : null;
|
|
248
|
+
if (two) {
|
|
249
|
+
// (centred in the strip under the picture: from 68 to the card's foot)
|
|
250
|
+
const h = NAME_MAX_PX * NAME_LINE, mid = 82 * k;
|
|
251
|
+
c.fillText(two[0], x, mid - h / 2);
|
|
252
|
+
c.fillText(two[1], x, mid + h / 2);
|
|
253
|
+
}
|
|
254
|
+
else
|
|
255
|
+
c.fillText(one, x, y * k);
|
|
256
|
+
c.restore();
|
|
257
|
+
}
|
|
258
|
+
/** Names cut to fit, by font, width and text: measured once, not every frame. */
|
|
259
|
+
const fitted = new Map();
|
|
260
|
+
function fit(c, text, maxW) {
|
|
261
|
+
const key = c.font + '|' + maxW + '|' + text;
|
|
262
|
+
let out = fitted.get(key);
|
|
263
|
+
if (out != null)
|
|
264
|
+
return out;
|
|
265
|
+
out = text;
|
|
266
|
+
if (c.measureText(text).width > maxW) {
|
|
267
|
+
let lo = 0, hi = text.length;
|
|
268
|
+
while (lo < hi) {
|
|
269
|
+
const mid = (lo + hi + 1) >> 1;
|
|
270
|
+
if (c.measureText(text.slice(0, mid) + '…').width <= maxW)
|
|
271
|
+
lo = mid;
|
|
272
|
+
else
|
|
273
|
+
hi = mid - 1;
|
|
274
|
+
}
|
|
275
|
+
out = text.slice(0, lo).trimEnd() + '…';
|
|
276
|
+
}
|
|
277
|
+
if (fitted.size > 1000)
|
|
278
|
+
fitted.clear();
|
|
279
|
+
fitted.set(key, out);
|
|
280
|
+
return out;
|
|
281
|
+
}
|
|
282
|
+
const page = (c, fold) => {
|
|
283
|
+
c.moveTo(6, 3);
|
|
284
|
+
c.lineTo(fold ? 14 : 18, 3);
|
|
285
|
+
if (fold)
|
|
286
|
+
c.lineTo(18, 7);
|
|
287
|
+
c.lineTo(18, 21);
|
|
288
|
+
c.lineTo(6, 21);
|
|
289
|
+
c.closePath();
|
|
290
|
+
if (fold) {
|
|
291
|
+
c.moveTo(14, 3);
|
|
292
|
+
c.lineTo(14, 7);
|
|
293
|
+
c.lineTo(18, 7);
|
|
294
|
+
}
|
|
295
|
+
};
|
|
296
|
+
const rules = (c, ys) => { for (const y of ys) {
|
|
297
|
+
c.moveTo(9, y);
|
|
298
|
+
c.lineTo(15, y);
|
|
299
|
+
} };
|
|
300
|
+
const dots = (c, at, r) => { for (const [x, y] of at) {
|
|
301
|
+
c.moveTo(x + r, y);
|
|
302
|
+
c.arc(x, y, r, 0, Math.PI * 2);
|
|
303
|
+
} };
|
|
304
|
+
const GLYPHS = {
|
|
305
|
+
photo: {
|
|
306
|
+
stroke: c => { c.roundRect(3, 5, 18, 14, 2); c.moveTo(5, 17); c.lineTo(10, 11); c.lineTo(13, 14); c.lineTo(15, 12); c.lineTo(19, 17); },
|
|
307
|
+
fill: c => dots(c, [[16, 9]], 1.6),
|
|
308
|
+
},
|
|
309
|
+
pdf: { stroke: c => page(c, true), text: 'PDF' },
|
|
310
|
+
note: { stroke: c => { page(c, false); rules(c, [8, 12, 16]); } },
|
|
311
|
+
calculator: {
|
|
312
|
+
stroke: c => { c.roundRect(5, 3, 14, 18, 2); c.moveTo(8, 7); c.lineTo(16, 7); },
|
|
313
|
+
fill: c => dots(c, [11.5, 15, 18.5].flatMap(y => [8.5, 12, 15.5].map(x => [x, y])), 0.9),
|
|
314
|
+
},
|
|
315
|
+
label: {
|
|
316
|
+
stroke: c => { c.moveTo(4, 8); c.lineTo(14, 8); c.lineTo(20, 12); c.lineTo(14, 16); c.lineTo(4, 16); c.closePath(); },
|
|
317
|
+
fill: c => dots(c, [[14, 12]], 1.2),
|
|
318
|
+
},
|
|
319
|
+
drawing: { stroke: c => { page(c, false); c.moveTo(9, 17); c.lineTo(15.5, 8.5); } },
|
|
320
|
+
tape: { stroke: c => { c.roundRect(2.5, 8, 19, 8, 1.5); for (const x of [6, 9, 12, 15, 18]) {
|
|
321
|
+
c.moveTo(x, 8);
|
|
322
|
+
c.lineTo(x, x === 12 ? 12.5 : 11);
|
|
323
|
+
} } },
|
|
324
|
+
removed: { dashed: c => page(c, false), stroke: c => { c.moveTo(4, 20); c.lineTo(20, 4); } },
|
|
325
|
+
document: { stroke: c => { page(c, true); rules(c, [12, 16]); } },
|
|
326
|
+
};
|
|
327
|
+
/** A glyph part's path: kept as a shape where the engine can (a tile's icon is drawn every frame, the same each time). */
|
|
328
|
+
function part(c, key, draw) {
|
|
329
|
+
if (c.shape)
|
|
330
|
+
c.shape(key, 0, 0, cc => draw(cc));
|
|
331
|
+
else {
|
|
332
|
+
c.beginPath();
|
|
333
|
+
draw(c);
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
/** An icon for kind `g`, `size` across, centred on cx, cy (paths: the canvas can't draw the chrome's SVG icons). */
|
|
337
|
+
function drawGlyph(c, g, cx, cy, size, color) {
|
|
338
|
+
const u = size / 24, d = GLYPHS[g];
|
|
339
|
+
c.save();
|
|
340
|
+
c.translate(cx - size / 2, cy - size / 2);
|
|
341
|
+
c.scale(u, u);
|
|
342
|
+
c.strokeStyle = color;
|
|
343
|
+
c.fillStyle = color;
|
|
344
|
+
c.lineWidth = 1.8;
|
|
345
|
+
c.lineCap = 'round';
|
|
346
|
+
c.lineJoin = 'round';
|
|
347
|
+
if (d.dashed) {
|
|
348
|
+
c.setLineDash([2.2, 2]);
|
|
349
|
+
part(c, 'glyph- ' + g, d.dashed);
|
|
350
|
+
c.stroke();
|
|
351
|
+
c.setLineDash([]);
|
|
352
|
+
}
|
|
353
|
+
if (d.stroke) {
|
|
354
|
+
part(c, 'glyph| ' + g, d.stroke);
|
|
355
|
+
c.stroke();
|
|
356
|
+
}
|
|
357
|
+
if (d.fill) {
|
|
358
|
+
part(c, 'glyph. ' + g, d.fill);
|
|
359
|
+
c.fill();
|
|
360
|
+
}
|
|
361
|
+
if (d.text) {
|
|
362
|
+
c.font = '700 6px ' + FONT;
|
|
363
|
+
c.textAlign = 'center';
|
|
364
|
+
c.textBaseline = 'middle';
|
|
365
|
+
c.fillText(d.text, 12, 15);
|
|
366
|
+
}
|
|
367
|
+
c.restore();
|
|
368
|
+
}
|
|
369
|
+
//# sourceMappingURL=linkTile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linkTile.js","sourceRoot":"","sources":["../../src/render/linkTile.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type NoteLook } from '../model/markup';
|
|
2
|
+
import type { DrawCtx } from './ctx';
|
|
3
|
+
type P = [number, number];
|
|
4
|
+
/**
|
|
5
|
+
* Stroke an open piece of markup (screen points) in its look: width, dashes, and each end's finish (round, flat or an
|
|
6
|
+
* arrowhead). `halo`: a wider stroke under it in that color (the selection glow).
|
|
7
|
+
*/
|
|
8
|
+
export declare function strokeMarkup(c: DrawCtx, pts: P[], look: NoteLook, halo?: string): void;
|
|
9
|
+
/** Stroke a closed shape's outline (screen points) in its look: width and dashes, its corners rounded. `halo` as above. */
|
|
10
|
+
export declare function strokeOutline(c: DrawCtx, pts: P[], look: NoteLook, halo?: string): void;
|
|
11
|
+
export {};
|