@tldraw/editor 4.2.2 → 4.2.3
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/dist-cjs/index.d.ts +155 -498
- package/dist-cjs/index.js +1 -6
- package/dist-cjs/index.js.map +2 -2
- package/dist-cjs/lib/components/ErrorBoundary.js.map +1 -1
- package/dist-cjs/lib/components/GeometryDebuggingView.js +17 -1
- package/dist-cjs/lib/components/GeometryDebuggingView.js.map +2 -2
- package/dist-cjs/lib/components/default-components/DefaultCanvas.js +3 -3
- package/dist-cjs/lib/components/default-components/DefaultCanvas.js.map +2 -2
- package/dist-cjs/lib/constants.js +3 -1
- package/dist-cjs/lib/constants.js.map +2 -2
- package/dist-cjs/lib/editor/Editor.js +286 -292
- package/dist-cjs/lib/editor/Editor.js.map +2 -2
- package/dist-cjs/lib/editor/bindings/BindingUtil.js.map +2 -2
- package/dist-cjs/lib/editor/derivations/bindingsIndex.js.map +2 -2
- package/dist-cjs/lib/editor/derivations/notVisibleShapes.js +17 -18
- package/dist-cjs/lib/editor/derivations/notVisibleShapes.js.map +3 -3
- package/dist-cjs/lib/editor/derivations/parentsToChildren.js +3 -12
- package/dist-cjs/lib/editor/derivations/parentsToChildren.js.map +2 -2
- package/dist-cjs/lib/editor/managers/ClickManager/ClickManager.js +1 -1
- package/dist-cjs/lib/editor/managers/ClickManager/ClickManager.js.map +2 -2
- package/dist-cjs/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.js +6 -5
- package/dist-cjs/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.js.map +2 -2
- package/dist-cjs/lib/editor/managers/SnapManager/SnapManager.js +1 -1
- package/dist-cjs/lib/editor/managers/SnapManager/SnapManager.js.map +2 -2
- package/dist-cjs/lib/editor/managers/TickManager/TickManager.js +22 -1
- package/dist-cjs/lib/editor/managers/TickManager/TickManager.js.map +2 -2
- package/dist-cjs/lib/editor/shapes/BaseBoxShapeUtil.js.map +1 -1
- package/dist-cjs/lib/editor/shapes/ShapeUtil.js +23 -31
- package/dist-cjs/lib/editor/shapes/ShapeUtil.js.map +2 -2
- package/dist-cjs/lib/editor/shapes/group/DashedOutlineBox.js +1 -1
- package/dist-cjs/lib/editor/shapes/group/DashedOutlineBox.js.map +2 -2
- package/dist-cjs/lib/editor/shapes/group/GroupShapeUtil.js.map +2 -2
- package/dist-cjs/lib/editor/tools/BaseBoxShapeTool/BaseBoxShapeTool.js.map +2 -2
- package/dist-cjs/lib/editor/tools/BaseBoxShapeTool/children/Pointing.js +3 -3
- package/dist-cjs/lib/editor/tools/BaseBoxShapeTool/children/Pointing.js.map +2 -2
- package/dist-cjs/lib/editor/types/emit-types.js.map +1 -1
- package/dist-cjs/lib/exports/getSvgJsx.js.map +2 -2
- package/dist-cjs/lib/exports/parseCss.js +1 -1
- package/dist-cjs/lib/exports/parseCss.js.map +2 -2
- package/dist-cjs/lib/globals/environment.js +9 -45
- package/dist-cjs/lib/globals/environment.js.map +2 -2
- package/dist-cjs/lib/globals/menus.js +1 -1
- package/dist-cjs/lib/globals/menus.js.map +2 -2
- package/dist-cjs/lib/hooks/useCanvasEvents.js +3 -4
- package/dist-cjs/lib/hooks/useCanvasEvents.js.map +2 -2
- package/dist-cjs/lib/hooks/useCoarsePointer.js +29 -14
- package/dist-cjs/lib/hooks/useCoarsePointer.js.map +2 -2
- package/dist-cjs/lib/hooks/useEvent.js +1 -1
- package/dist-cjs/lib/hooks/useEvent.js.map +2 -2
- package/dist-cjs/lib/hooks/useFixSafariDoubleTapZoomPencilEvents.js.map +2 -2
- package/dist-cjs/lib/hooks/useGestureEvents.js +1 -1
- package/dist-cjs/lib/hooks/useGestureEvents.js.map +2 -2
- package/dist-cjs/lib/hooks/usePassThroughMouseOverEvents.js.map +2 -2
- package/dist-cjs/lib/hooks/usePassThroughWheelEvents.js.map +2 -2
- package/dist-cjs/lib/hooks/useScreenBounds.js.map +2 -2
- package/dist-cjs/lib/hooks/useStateAttribute.js +1 -4
- package/dist-cjs/lib/hooks/useStateAttribute.js.map +2 -2
- package/dist-cjs/lib/hooks/useTransform.js.map +1 -1
- package/dist-cjs/lib/hooks/useZoomCss.js +8 -4
- package/dist-cjs/lib/hooks/useZoomCss.js.map +2 -2
- package/dist-cjs/lib/options.js +1 -6
- package/dist-cjs/lib/options.js.map +2 -2
- package/dist-cjs/lib/primitives/Box.js +0 -3
- package/dist-cjs/lib/primitives/Box.js.map +2 -2
- package/dist-cjs/lib/primitives/geometry/Geometry2d.js +0 -1
- package/dist-cjs/lib/primitives/geometry/Geometry2d.js.map +2 -2
- package/dist-cjs/lib/utils/reparenting.js.map +2 -2
- package/dist-cjs/lib/utils/rotation.js +1 -1
- package/dist-cjs/lib/utils/rotation.js.map +2 -2
- package/dist-cjs/version.js +3 -3
- package/dist-cjs/version.js.map +1 -1
- package/dist-esm/index.d.mts +155 -498
- package/dist-esm/index.mjs +2 -7
- package/dist-esm/index.mjs.map +2 -2
- package/dist-esm/lib/components/ErrorBoundary.mjs.map +1 -1
- package/dist-esm/lib/components/GeometryDebuggingView.mjs +17 -1
- package/dist-esm/lib/components/GeometryDebuggingView.mjs.map +2 -2
- package/dist-esm/lib/components/default-components/DefaultCanvas.mjs +3 -3
- package/dist-esm/lib/components/default-components/DefaultCanvas.mjs.map +2 -2
- package/dist-esm/lib/constants.mjs +3 -1
- package/dist-esm/lib/constants.mjs.map +2 -2
- package/dist-esm/lib/editor/Editor.mjs +289 -293
- package/dist-esm/lib/editor/Editor.mjs.map +2 -2
- package/dist-esm/lib/editor/bindings/BindingUtil.mjs.map +2 -2
- package/dist-esm/lib/editor/derivations/bindingsIndex.mjs.map +2 -2
- package/dist-esm/lib/editor/derivations/notVisibleShapes.mjs +17 -18
- package/dist-esm/lib/editor/derivations/notVisibleShapes.mjs.map +3 -3
- package/dist-esm/lib/editor/derivations/parentsToChildren.mjs +4 -13
- package/dist-esm/lib/editor/derivations/parentsToChildren.mjs.map +2 -2
- package/dist-esm/lib/editor/managers/ClickManager/ClickManager.mjs +1 -1
- package/dist-esm/lib/editor/managers/ClickManager/ClickManager.mjs.map +2 -2
- package/dist-esm/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.mjs +6 -5
- package/dist-esm/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.mjs.map +2 -2
- package/dist-esm/lib/editor/managers/SnapManager/SnapManager.mjs +1 -1
- package/dist-esm/lib/editor/managers/SnapManager/SnapManager.mjs.map +2 -2
- package/dist-esm/lib/editor/managers/TickManager/TickManager.mjs +22 -1
- package/dist-esm/lib/editor/managers/TickManager/TickManager.mjs.map +2 -2
- package/dist-esm/lib/editor/shapes/BaseBoxShapeUtil.mjs.map +1 -1
- package/dist-esm/lib/editor/shapes/ShapeUtil.mjs +23 -31
- package/dist-esm/lib/editor/shapes/ShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/editor/shapes/group/DashedOutlineBox.mjs +1 -1
- package/dist-esm/lib/editor/shapes/group/DashedOutlineBox.mjs.map +2 -2
- package/dist-esm/lib/editor/shapes/group/GroupShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/editor/tools/BaseBoxShapeTool/BaseBoxShapeTool.mjs.map +2 -2
- package/dist-esm/lib/editor/tools/BaseBoxShapeTool/children/Pointing.mjs +3 -3
- package/dist-esm/lib/editor/tools/BaseBoxShapeTool/children/Pointing.mjs.map +2 -2
- package/dist-esm/lib/exports/getSvgJsx.mjs.map +2 -2
- package/dist-esm/lib/exports/parseCss.mjs +1 -1
- package/dist-esm/lib/exports/parseCss.mjs.map +2 -2
- package/dist-esm/lib/globals/environment.mjs +9 -45
- package/dist-esm/lib/globals/environment.mjs.map +2 -2
- package/dist-esm/lib/globals/menus.mjs +1 -1
- package/dist-esm/lib/globals/menus.mjs.map +2 -2
- package/dist-esm/lib/hooks/useCanvasEvents.mjs +3 -4
- package/dist-esm/lib/hooks/useCanvasEvents.mjs.map +2 -2
- package/dist-esm/lib/hooks/useCoarsePointer.mjs +30 -15
- package/dist-esm/lib/hooks/useCoarsePointer.mjs.map +2 -2
- package/dist-esm/lib/hooks/useEvent.mjs +1 -1
- package/dist-esm/lib/hooks/useEvent.mjs.map +2 -2
- package/dist-esm/lib/hooks/useFixSafariDoubleTapZoomPencilEvents.mjs.map +2 -2
- package/dist-esm/lib/hooks/useGestureEvents.mjs +1 -1
- package/dist-esm/lib/hooks/useGestureEvents.mjs.map +2 -2
- package/dist-esm/lib/hooks/usePassThroughMouseOverEvents.mjs.map +2 -2
- package/dist-esm/lib/hooks/usePassThroughWheelEvents.mjs.map +2 -2
- package/dist-esm/lib/hooks/useScreenBounds.mjs.map +2 -2
- package/dist-esm/lib/hooks/useStateAttribute.mjs +1 -4
- package/dist-esm/lib/hooks/useStateAttribute.mjs.map +2 -2
- package/dist-esm/lib/hooks/useTransform.mjs.map +1 -1
- package/dist-esm/lib/hooks/useZoomCss.mjs +8 -4
- package/dist-esm/lib/hooks/useZoomCss.mjs.map +2 -2
- package/dist-esm/lib/options.mjs +1 -6
- package/dist-esm/lib/options.mjs.map +2 -2
- package/dist-esm/lib/primitives/Box.mjs +0 -3
- package/dist-esm/lib/primitives/Box.mjs.map +2 -2
- package/dist-esm/lib/primitives/geometry/Geometry2d.mjs +0 -1
- package/dist-esm/lib/primitives/geometry/Geometry2d.mjs.map +2 -2
- package/dist-esm/lib/utils/reparenting.mjs.map +2 -2
- package/dist-esm/lib/utils/rotation.mjs +1 -1
- package/dist-esm/lib/utils/rotation.mjs.map +2 -2
- package/dist-esm/version.mjs +3 -3
- package/dist-esm/version.mjs.map +1 -1
- package/editor.css +12 -14
- package/package.json +16 -18
- package/src/index.ts +1 -4
- package/src/lib/components/ErrorBoundary.tsx +1 -1
- package/src/lib/components/GeometryDebuggingView.tsx +19 -1
- package/src/lib/components/default-components/DefaultCanvas.tsx +3 -4
- package/src/lib/constants.ts +2 -0
- package/src/lib/editor/Editor.test.ts +10 -150
- package/src/lib/editor/Editor.ts +379 -459
- package/src/lib/editor/bindings/BindingUtil.ts +9 -15
- package/src/lib/editor/derivations/bindingsIndex.ts +2 -2
- package/src/lib/editor/derivations/notVisibleShapes.ts +23 -37
- package/src/lib/editor/derivations/parentsToChildren.ts +7 -18
- package/src/lib/editor/managers/ClickManager/ClickManager.test.ts +31 -17
- package/src/lib/editor/managers/ClickManager/ClickManager.ts +1 -1
- package/src/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.test.ts +79 -129
- package/src/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.ts +6 -10
- package/src/lib/editor/managers/FontManager/FontManager.test.ts +4 -14
- package/src/lib/editor/managers/ScribbleManager/ScribbleManager.test.ts +4 -0
- package/src/lib/editor/managers/SnapManager/SnapManager.test.ts +0 -12
- package/src/lib/editor/managers/SnapManager/SnapManager.ts +4 -4
- package/src/lib/editor/managers/TickManager/TickManager.test.ts +107 -40
- package/src/lib/editor/managers/TickManager/TickManager.ts +32 -2
- package/src/lib/editor/shapes/BaseBoxShapeUtil.tsx +2 -2
- package/src/lib/editor/shapes/ShapeUtil.ts +32 -72
- package/src/lib/editor/shapes/group/DashedOutlineBox.tsx +1 -1
- package/src/lib/editor/shapes/group/GroupShapeUtil.tsx +3 -1
- package/src/lib/editor/tools/BaseBoxShapeTool/BaseBoxShapeTool.ts +1 -2
- package/src/lib/editor/tools/BaseBoxShapeTool/children/Pointing.ts +6 -6
- package/src/lib/editor/types/emit-types.ts +1 -3
- package/src/lib/exports/getSvgJsx.test.ts +19 -10
- package/src/lib/exports/getSvgJsx.tsx +5 -2
- package/src/lib/exports/parseCss.test.ts +0 -1
- package/src/lib/exports/parseCss.ts +1 -1
- package/src/lib/globals/environment.ts +10 -65
- package/src/lib/globals/menus.ts +1 -1
- package/src/lib/hooks/useCanvasEvents.ts +3 -4
- package/src/lib/hooks/useCoarsePointer.ts +59 -16
- package/src/lib/hooks/useEvent.tsx +1 -1
- package/src/lib/hooks/useFixSafariDoubleTapZoomPencilEvents.ts +1 -1
- package/src/lib/hooks/useGestureEvents.ts +2 -2
- package/src/lib/hooks/usePassThroughMouseOverEvents.ts +1 -1
- package/src/lib/hooks/usePassThroughWheelEvents.ts +1 -1
- package/src/lib/hooks/useScreenBounds.ts +1 -1
- package/src/lib/hooks/useStateAttribute.ts +1 -4
- package/src/lib/hooks/useTransform.ts +1 -1
- package/src/lib/hooks/useZoomCss.ts +8 -3
- package/src/lib/options.ts +0 -32
- package/src/lib/primitives/Box.ts +0 -9
- package/src/lib/primitives/geometry/Geometry2d.ts +0 -1
- package/src/lib/utils/reparenting.ts +5 -5
- package/src/lib/utils/rotation.ts +1 -1
- package/src/version.ts +3 -3
- package/dist-cjs/lib/editor/managers/InputsManager/InputsManager.js +0 -591
- package/dist-cjs/lib/editor/managers/InputsManager/InputsManager.js.map +0 -7
- package/dist-esm/lib/editor/managers/InputsManager/InputsManager.mjs +0 -573
- package/dist-esm/lib/editor/managers/InputsManager/InputsManager.mjs.map +0 -7
- package/src/lib/config/TLUserPreferences.test.ts +0 -40
- package/src/lib/editor/managers/InputsManager/InputsManager.ts +0 -566
package/editor.css
CHANGED
|
@@ -607,6 +607,7 @@ input,
|
|
|
607
607
|
pointer-events: all;
|
|
608
608
|
white-space: pre-wrap;
|
|
609
609
|
overflow-wrap: break-word;
|
|
610
|
+
text-shadow: var(--tl-text-outline);
|
|
610
611
|
}
|
|
611
612
|
|
|
612
613
|
.tl-text-wrapper[data-font='draw'] {
|
|
@@ -708,7 +709,7 @@ input,
|
|
|
708
709
|
resize: none;
|
|
709
710
|
border: none;
|
|
710
711
|
user-select: none;
|
|
711
|
-
contain:
|
|
712
|
+
contain: style paint;
|
|
712
713
|
/* N.B. This property, while discouraged ("intended for Document Type Definition (DTD) designers") is necessary for ensuring correct mixed RTL/LTR behavior when exporting SVGs. */
|
|
713
714
|
unicode-bidi: plaintext;
|
|
714
715
|
-webkit-user-select: none;
|
|
@@ -769,6 +770,7 @@ input,
|
|
|
769
770
|
justify-content: center;
|
|
770
771
|
align-items: center;
|
|
771
772
|
color: var(--tl-color-text);
|
|
773
|
+
text-shadow: var(--tl-text-outline);
|
|
772
774
|
line-height: inherit;
|
|
773
775
|
position: absolute;
|
|
774
776
|
inset: 0px;
|
|
@@ -968,14 +970,6 @@ input,
|
|
|
968
970
|
display: block;
|
|
969
971
|
}
|
|
970
972
|
|
|
971
|
-
.tl-text__outline {
|
|
972
|
-
text-shadow: var(--tl-text-outline);
|
|
973
|
-
}
|
|
974
|
-
|
|
975
|
-
.tl-text__no-outline {
|
|
976
|
-
text-shadow: none;
|
|
977
|
-
}
|
|
978
|
-
|
|
979
973
|
/* --------------------- Loading -------------------- */
|
|
980
974
|
|
|
981
975
|
.tl-loading {
|
|
@@ -1140,12 +1134,14 @@ input,
|
|
|
1140
1134
|
fill: none;
|
|
1141
1135
|
}
|
|
1142
1136
|
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1137
|
+
@media (pointer: coarse) {
|
|
1138
|
+
.tl-handle__bg:active {
|
|
1139
|
+
fill: var(--tl-color-selection-fill);
|
|
1140
|
+
}
|
|
1146
1141
|
|
|
1147
|
-
.tl-
|
|
1148
|
-
|
|
1142
|
+
.tl-handle__create {
|
|
1143
|
+
opacity: 1;
|
|
1144
|
+
}
|
|
1149
1145
|
}
|
|
1150
1146
|
|
|
1151
1147
|
.tl-rotate-corner:not(:hover),
|
|
@@ -1221,6 +1217,7 @@ input,
|
|
|
1221
1217
|
align-items: center;
|
|
1222
1218
|
text-align: center;
|
|
1223
1219
|
color: var(--tl-color-text);
|
|
1220
|
+
text-shadow: var(--tl-text-outline);
|
|
1224
1221
|
}
|
|
1225
1222
|
|
|
1226
1223
|
.tl-shape[data-shape-type='arrow'] .tl-text-label__inner {
|
|
@@ -1449,6 +1446,7 @@ input,
|
|
|
1449
1446
|
}
|
|
1450
1447
|
|
|
1451
1448
|
.tl-note__container > .tl-text-label {
|
|
1449
|
+
text-shadow: none;
|
|
1452
1450
|
color: currentColor;
|
|
1453
1451
|
}
|
|
1454
1452
|
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tldraw/editor",
|
|
3
3
|
"description": "tldraw infinite canvas SDK (editor).",
|
|
4
|
-
"version": "4.2.
|
|
4
|
+
"version": "4.2.3",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "tldraw Inc.",
|
|
7
7
|
"email": "hello@tldraw.com"
|
|
@@ -47,15 +47,15 @@
|
|
|
47
47
|
"context": "yarn run -T tsx ../../internal/scripts/context.ts"
|
|
48
48
|
},
|
|
49
49
|
"dependencies": {
|
|
50
|
-
"@tiptap/core": "
|
|
51
|
-
"@tiptap/pm": "
|
|
52
|
-
"@tiptap/react": "
|
|
53
|
-
"@tldraw/state": "4.2.
|
|
54
|
-
"@tldraw/state-react": "4.2.
|
|
55
|
-
"@tldraw/store": "4.2.
|
|
56
|
-
"@tldraw/tlschema": "4.2.
|
|
57
|
-
"@tldraw/utils": "4.2.
|
|
58
|
-
"@tldraw/validate": "4.2.
|
|
50
|
+
"@tiptap/core": "3.6.2",
|
|
51
|
+
"@tiptap/pm": "3.6.2",
|
|
52
|
+
"@tiptap/react": "3.6.2",
|
|
53
|
+
"@tldraw/state": "4.2.3",
|
|
54
|
+
"@tldraw/state-react": "4.2.3",
|
|
55
|
+
"@tldraw/store": "4.2.3",
|
|
56
|
+
"@tldraw/tlschema": "4.2.3",
|
|
57
|
+
"@tldraw/utils": "4.2.3",
|
|
58
|
+
"@tldraw/validate": "4.2.3",
|
|
59
59
|
"@types/core-js": "^2.5.8",
|
|
60
60
|
"@use-gesture/react": "^10.3.1",
|
|
61
61
|
"classnames": "^2.5.1",
|
|
@@ -65,22 +65,20 @@
|
|
|
65
65
|
"is-plain-object": "^5.0.0"
|
|
66
66
|
},
|
|
67
67
|
"peerDependencies": {
|
|
68
|
-
"react": "^18.2.0 || ^19.
|
|
69
|
-
"react-dom": "^18.2.0 || ^19.
|
|
68
|
+
"react": "^18.2.0 || ^19.0.0",
|
|
69
|
+
"react-dom": "^18.2.0 || ^19.0.0"
|
|
70
70
|
},
|
|
71
71
|
"devDependencies": {
|
|
72
72
|
"@peculiar/webcrypto": "^1.5.0",
|
|
73
|
-
"@testing-library/
|
|
74
|
-
"@testing-library/react": "^16.0.0",
|
|
73
|
+
"@testing-library/react": "^15.0.7",
|
|
75
74
|
"@types/benchmark": "^2.1.5",
|
|
76
|
-
"@types/react": "^
|
|
77
|
-
"@types/react-dom": "^19.2.3",
|
|
75
|
+
"@types/react": "^18.3.18",
|
|
78
76
|
"@types/wicg-file-system-access": "^2020.9.8",
|
|
79
77
|
"benchmark": "^2.1.4",
|
|
80
78
|
"fake-indexeddb": "^4.0.2",
|
|
81
79
|
"lazyrepo": "0.0.0-alpha.27",
|
|
82
|
-
"react": "^
|
|
83
|
-
"react-dom": "^
|
|
80
|
+
"react": "^18.3.1",
|
|
81
|
+
"react-dom": "^18.3.1",
|
|
84
82
|
"resize-observer-polyfill": "^1.5.1",
|
|
85
83
|
"vitest": "^3.2.4"
|
|
86
84
|
},
|
package/src/index.ts
CHANGED
|
@@ -146,7 +146,6 @@ export {
|
|
|
146
146
|
type TLFontFaceSource,
|
|
147
147
|
} from './lib/editor/managers/FontManager/FontManager'
|
|
148
148
|
export { HistoryManager } from './lib/editor/managers/HistoryManager/HistoryManager'
|
|
149
|
-
export { InputsManager } from './lib/editor/managers/InputsManager/InputsManager'
|
|
150
149
|
export {
|
|
151
150
|
ScribbleManager,
|
|
152
151
|
type ScribbleItem,
|
|
@@ -169,7 +168,6 @@ export {
|
|
|
169
168
|
type TLMeasureTextOpts,
|
|
170
169
|
type TLMeasureTextSpanOpts,
|
|
171
170
|
} from './lib/editor/managers/TextManager/TextManager'
|
|
172
|
-
export { TickManager } from './lib/editor/managers/TickManager/TickManager'
|
|
173
171
|
export { UserPreferencesManager } from './lib/editor/managers/UserPreferencesManager/UserPreferencesManager'
|
|
174
172
|
export { BaseBoxShapeUtil, type TLBaseBoxShape } from './lib/editor/shapes/BaseBoxShapeUtil'
|
|
175
173
|
export { GroupShapeUtil } from './lib/editor/shapes/group/GroupShapeUtil'
|
|
@@ -180,7 +178,6 @@ export {
|
|
|
180
178
|
type TLDragShapesOutInfo,
|
|
181
179
|
type TLDragShapesOverInfo,
|
|
182
180
|
type TLDropShapesOverInfo,
|
|
183
|
-
type TLEditStartInfo,
|
|
184
181
|
type TLGeometryOpts,
|
|
185
182
|
type TLHandleDragInfo,
|
|
186
183
|
type TLResizeInfo,
|
|
@@ -285,7 +282,7 @@ export {
|
|
|
285
282
|
type SvgExportDef,
|
|
286
283
|
} from './lib/editor/types/SvgExportContext'
|
|
287
284
|
export { getSvgAsImage } from './lib/exports/getSvgAsImage'
|
|
288
|
-
export { tlenv
|
|
285
|
+
export { tlenv } from './lib/globals/environment'
|
|
289
286
|
export { tlmenus } from './lib/globals/menus'
|
|
290
287
|
export { tltime } from './lib/globals/time'
|
|
291
288
|
export {
|
|
@@ -12,7 +12,7 @@ const initialState = { error: null }
|
|
|
12
12
|
|
|
13
13
|
/** @public */
|
|
14
14
|
export class ErrorBoundary extends React.Component<
|
|
15
|
-
React.PropsWithChildren<TLErrorBoundaryProps
|
|
15
|
+
React.PropsWithRef<React.PropsWithChildren<TLErrorBoundaryProps>>,
|
|
16
16
|
{ error: Error | null }
|
|
17
17
|
> {
|
|
18
18
|
static getDerivedStateFromError(error: Error) {
|
|
@@ -1,9 +1,23 @@
|
|
|
1
1
|
import { track } from '@tldraw/state-react'
|
|
2
2
|
import { modulate } from '@tldraw/utils'
|
|
3
|
+
import { useEffect, useState } from 'react'
|
|
3
4
|
import { useEditor } from '../hooks/useEditor'
|
|
4
5
|
import { Geometry2d } from '../primitives/geometry/Geometry2d'
|
|
5
6
|
import { Group2d } from '../primitives/geometry/Group2d'
|
|
6
7
|
|
|
8
|
+
function useTick(isEnabled = true) {
|
|
9
|
+
const [_, setTick] = useState(0)
|
|
10
|
+
const editor = useEditor()
|
|
11
|
+
useEffect(() => {
|
|
12
|
+
if (!isEnabled) return
|
|
13
|
+
const update = () => setTick((tick) => tick + 1)
|
|
14
|
+
editor.on('tick', update)
|
|
15
|
+
return () => {
|
|
16
|
+
editor.off('tick', update)
|
|
17
|
+
}
|
|
18
|
+
}, [editor, isEnabled])
|
|
19
|
+
}
|
|
20
|
+
|
|
7
21
|
export const GeometryDebuggingView = track(function GeometryDebuggingView({
|
|
8
22
|
showStroke = true,
|
|
9
23
|
showVertices = true,
|
|
@@ -15,9 +29,13 @@ export const GeometryDebuggingView = track(function GeometryDebuggingView({
|
|
|
15
29
|
}) {
|
|
16
30
|
const editor = useEditor()
|
|
17
31
|
|
|
32
|
+
useTick(showClosestPointOnOutline)
|
|
33
|
+
|
|
18
34
|
const zoomLevel = editor.getZoomLevel()
|
|
19
35
|
const renderingShapes = editor.getRenderingShapes()
|
|
20
|
-
const
|
|
36
|
+
const {
|
|
37
|
+
inputs: { currentPagePoint },
|
|
38
|
+
} = editor
|
|
21
39
|
|
|
22
40
|
return (
|
|
23
41
|
<svg
|
|
@@ -86,7 +86,6 @@ export function DefaultCanvas({ className }: TLCanvasComponentProps) {
|
|
|
86
86
|
const transform = `scale(${toDomPrecision(z)}) translate(${toDomPrecision(
|
|
87
87
|
x + offset
|
|
88
88
|
)}px,${toDomPrecision(y + offset)}px)`
|
|
89
|
-
|
|
90
89
|
setStyleProperty(rHtmlLayer.current, 'transform', transform)
|
|
91
90
|
setStyleProperty(rHtmlLayer2.current, 'transform', transform)
|
|
92
91
|
},
|
|
@@ -210,7 +209,7 @@ function GridWrapper() {
|
|
|
210
209
|
function ScribbleWrapper() {
|
|
211
210
|
const editor = useEditor()
|
|
212
211
|
const scribbles = useValue('scribbles', () => editor.getInstanceState().scribbles, [editor])
|
|
213
|
-
const zoomLevel = useValue('zoomLevel', () => editor.
|
|
212
|
+
const zoomLevel = useValue('zoomLevel', () => editor.getZoomLevel(), [editor])
|
|
214
213
|
const { Scribble } = useEditorComponents()
|
|
215
214
|
|
|
216
215
|
if (!(Scribble && scribbles.length)) return null
|
|
@@ -243,7 +242,7 @@ function ZoomBrushWrapper() {
|
|
|
243
242
|
function SnapIndicatorWrapper() {
|
|
244
243
|
const editor = useEditor()
|
|
245
244
|
const lines = useValue('snapLines', () => editor.snaps.getIndicators(), [editor])
|
|
246
|
-
const zoomLevel = useValue('zoomLevel', () => editor.
|
|
245
|
+
const zoomLevel = useValue('zoomLevel', () => editor.getZoomLevel(), [editor])
|
|
247
246
|
const { SnapIndicator } = useEditorComponents()
|
|
248
247
|
|
|
249
248
|
if (!(SnapIndicator && lines.length > 0)) return null
|
|
@@ -284,7 +283,7 @@ function HandlesWrapperInner({ shapeId }: { shapeId: TLShapeId }) {
|
|
|
284
283
|
const editor = useEditor()
|
|
285
284
|
const { Handles } = useEditorComponents()
|
|
286
285
|
|
|
287
|
-
const zoomLevel = useValue('zoomLevel', () => editor.
|
|
286
|
+
const zoomLevel = useValue('zoomLevel', () => editor.getZoomLevel(), [editor])
|
|
288
287
|
|
|
289
288
|
const isCoarse = useValue('coarse pointer', () => editor.getInstanceState().isCoarsePointer, [
|
|
290
289
|
editor,
|
package/src/lib/constants.ts
CHANGED
|
@@ -6,25 +6,25 @@ import {
|
|
|
6
6
|
Rectangle2d,
|
|
7
7
|
ShapeUtil,
|
|
8
8
|
T,
|
|
9
|
-
|
|
9
|
+
TLBaseShape,
|
|
10
10
|
createShapeId,
|
|
11
11
|
createTLStore,
|
|
12
12
|
} from '../..'
|
|
13
13
|
import { Editor } from './Editor'
|
|
14
14
|
import { StateNode } from './tools/StateNode'
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
16
|
+
type ICustomShape = TLBaseShape<
|
|
17
|
+
'my-custom-shape',
|
|
18
|
+
{
|
|
19
|
+
w: number
|
|
20
|
+
h: number
|
|
21
|
+
text: string | undefined
|
|
22
|
+
isFilled: boolean
|
|
21
23
|
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
type ICustomShape = TLShape<typeof MY_CUSTOM_SHAPE_TYPE>
|
|
24
|
+
>
|
|
25
25
|
|
|
26
26
|
class CustomShape extends ShapeUtil<ICustomShape> {
|
|
27
|
-
static override type =
|
|
27
|
+
static override type = 'my-custom-shape' as const
|
|
28
28
|
static override props: RecordProps<ICustomShape> = {
|
|
29
29
|
w: T.number,
|
|
30
30
|
h: T.number,
|
|
@@ -925,146 +925,6 @@ describe('replaceExternalContent', () => {
|
|
|
925
925
|
})
|
|
926
926
|
})
|
|
927
927
|
|
|
928
|
-
describe('dispatch event emission', () => {
|
|
929
|
-
let testEditor: Editor
|
|
930
|
-
|
|
931
|
-
beforeEach(() => {
|
|
932
|
-
testEditor = new Editor({
|
|
933
|
-
shapeUtils: [CustomShape],
|
|
934
|
-
bindingUtils: [],
|
|
935
|
-
tools: [],
|
|
936
|
-
store: createTLStore({ shapeUtils: [CustomShape], bindingUtils: [] }),
|
|
937
|
-
getContainer: () => document.body,
|
|
938
|
-
})
|
|
939
|
-
// Ensure camera is unlocked so events are processed
|
|
940
|
-
testEditor.setCameraOptions({ isLocked: false })
|
|
941
|
-
})
|
|
942
|
-
|
|
943
|
-
it('emits wheel events through the event emitter', () => {
|
|
944
|
-
const eventHandler = vi.fn()
|
|
945
|
-
testEditor.on('event', eventHandler)
|
|
946
|
-
|
|
947
|
-
const wheelEvent = {
|
|
948
|
-
type: 'wheel' as const,
|
|
949
|
-
name: 'wheel' as const,
|
|
950
|
-
delta: { x: 0, y: 10, z: 0 },
|
|
951
|
-
point: { x: 100, y: 100, z: 1 },
|
|
952
|
-
shiftKey: false,
|
|
953
|
-
altKey: false,
|
|
954
|
-
ctrlKey: false,
|
|
955
|
-
metaKey: false,
|
|
956
|
-
accelKey: false,
|
|
957
|
-
}
|
|
958
|
-
|
|
959
|
-
testEditor.dispatch(wheelEvent)
|
|
960
|
-
// Wheel events are batched for the next tick, so emit a tick to flush them
|
|
961
|
-
testEditor.emit('tick', 16)
|
|
962
|
-
|
|
963
|
-
expect(eventHandler).toHaveBeenCalledWith(wheelEvent)
|
|
964
|
-
})
|
|
965
|
-
|
|
966
|
-
it('emits pinch_start events through the event emitter', () => {
|
|
967
|
-
const eventHandler = vi.fn()
|
|
968
|
-
testEditor.on('event', eventHandler)
|
|
969
|
-
|
|
970
|
-
const pinchStartEvent = {
|
|
971
|
-
type: 'pinch' as const,
|
|
972
|
-
name: 'pinch_start' as const,
|
|
973
|
-
point: { x: 100, y: 100, z: 1 },
|
|
974
|
-
delta: { x: 0, y: 0, z: 0 },
|
|
975
|
-
shiftKey: false,
|
|
976
|
-
altKey: false,
|
|
977
|
-
ctrlKey: false,
|
|
978
|
-
metaKey: false,
|
|
979
|
-
accelKey: false,
|
|
980
|
-
}
|
|
981
|
-
|
|
982
|
-
testEditor.dispatch(pinchStartEvent)
|
|
983
|
-
// Pinch events are batched for the next tick, so emit a tick to flush them
|
|
984
|
-
testEditor.emit('tick', 16)
|
|
985
|
-
|
|
986
|
-
expect(eventHandler).toHaveBeenCalledWith(pinchStartEvent)
|
|
987
|
-
})
|
|
988
|
-
|
|
989
|
-
it('emits pinch events through the event emitter', () => {
|
|
990
|
-
const eventHandler = vi.fn()
|
|
991
|
-
testEditor.on('event', eventHandler)
|
|
992
|
-
|
|
993
|
-
// First dispatch pinch_start to set isPinching
|
|
994
|
-
const pinchStartEvent = {
|
|
995
|
-
type: 'pinch' as const,
|
|
996
|
-
name: 'pinch_start' as const,
|
|
997
|
-
point: { x: 100, y: 100, z: 1 },
|
|
998
|
-
delta: { x: 0, y: 0, z: 0 },
|
|
999
|
-
shiftKey: false,
|
|
1000
|
-
altKey: false,
|
|
1001
|
-
ctrlKey: false,
|
|
1002
|
-
metaKey: false,
|
|
1003
|
-
accelKey: false,
|
|
1004
|
-
}
|
|
1005
|
-
testEditor.dispatch(pinchStartEvent)
|
|
1006
|
-
testEditor.emit('tick', 16)
|
|
1007
|
-
|
|
1008
|
-
eventHandler.mockClear()
|
|
1009
|
-
|
|
1010
|
-
const pinchEvent = {
|
|
1011
|
-
type: 'pinch' as const,
|
|
1012
|
-
name: 'pinch' as const,
|
|
1013
|
-
point: { x: 100, y: 100, z: 1.5 },
|
|
1014
|
-
delta: { x: 10, y: 10, z: 0 },
|
|
1015
|
-
shiftKey: false,
|
|
1016
|
-
altKey: false,
|
|
1017
|
-
ctrlKey: false,
|
|
1018
|
-
metaKey: false,
|
|
1019
|
-
accelKey: false,
|
|
1020
|
-
}
|
|
1021
|
-
|
|
1022
|
-
testEditor.dispatch(pinchEvent)
|
|
1023
|
-
testEditor.emit('tick', 16)
|
|
1024
|
-
|
|
1025
|
-
expect(eventHandler).toHaveBeenCalledWith(pinchEvent)
|
|
1026
|
-
})
|
|
1027
|
-
|
|
1028
|
-
it('emits pinch_end events through the event emitter', () => {
|
|
1029
|
-
const eventHandler = vi.fn()
|
|
1030
|
-
testEditor.on('event', eventHandler)
|
|
1031
|
-
|
|
1032
|
-
// First dispatch pinch_start to set isPinching
|
|
1033
|
-
const pinchStartEvent = {
|
|
1034
|
-
type: 'pinch' as const,
|
|
1035
|
-
name: 'pinch_start' as const,
|
|
1036
|
-
point: { x: 100, y: 100, z: 1 },
|
|
1037
|
-
delta: { x: 0, y: 0, z: 0 },
|
|
1038
|
-
shiftKey: false,
|
|
1039
|
-
altKey: false,
|
|
1040
|
-
ctrlKey: false,
|
|
1041
|
-
metaKey: false,
|
|
1042
|
-
accelKey: false,
|
|
1043
|
-
}
|
|
1044
|
-
testEditor.dispatch(pinchStartEvent)
|
|
1045
|
-
testEditor.emit('tick', 16)
|
|
1046
|
-
|
|
1047
|
-
eventHandler.mockClear()
|
|
1048
|
-
|
|
1049
|
-
const pinchEndEvent = {
|
|
1050
|
-
type: 'pinch' as const,
|
|
1051
|
-
name: 'pinch_end' as const,
|
|
1052
|
-
point: { x: 100, y: 100, z: 1.5 },
|
|
1053
|
-
delta: { x: 0, y: 0, z: 0 },
|
|
1054
|
-
shiftKey: false,
|
|
1055
|
-
altKey: false,
|
|
1056
|
-
ctrlKey: false,
|
|
1057
|
-
metaKey: false,
|
|
1058
|
-
accelKey: false,
|
|
1059
|
-
}
|
|
1060
|
-
|
|
1061
|
-
testEditor.dispatch(pinchEndEvent)
|
|
1062
|
-
testEditor.emit('tick', 16)
|
|
1063
|
-
|
|
1064
|
-
expect(eventHandler).toHaveBeenCalledWith(pinchEndEvent)
|
|
1065
|
-
})
|
|
1066
|
-
})
|
|
1067
|
-
|
|
1068
928
|
describe('setTool', () => {
|
|
1069
929
|
class CustomToolA extends StateNode {
|
|
1070
930
|
static override id = 'custom-tool-a'
|