@tldraw/editor 3.16.0-canary.ffdf566dd0a8 → 3.16.0-internal.a478398270c6

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.
Files changed (179) hide show
  1. package/dist-cjs/index.d.ts +16 -213
  2. package/dist-cjs/index.js +1 -8
  3. package/dist-cjs/index.js.map +2 -2
  4. package/dist-cjs/lib/TldrawEditor.js +0 -2
  5. package/dist-cjs/lib/TldrawEditor.js.map +2 -2
  6. package/dist-cjs/lib/components/SVGContainer.js +1 -1
  7. package/dist-cjs/lib/components/SVGContainer.js.map +2 -2
  8. package/dist-cjs/lib/components/Shape.js +26 -4
  9. package/dist-cjs/lib/components/Shape.js.map +2 -2
  10. package/dist-cjs/lib/components/default-components/DefaultBrush.js +1 -1
  11. package/dist-cjs/lib/components/default-components/DefaultBrush.js.map +2 -2
  12. package/dist-cjs/lib/components/default-components/DefaultCanvas.js +1 -1
  13. package/dist-cjs/lib/components/default-components/DefaultCanvas.js.map +2 -2
  14. package/dist-cjs/lib/components/default-components/DefaultCollaboratorHint.js +1 -1
  15. package/dist-cjs/lib/components/default-components/DefaultCollaboratorHint.js.map +2 -2
  16. package/dist-cjs/lib/components/default-components/DefaultCursor.js +1 -1
  17. package/dist-cjs/lib/components/default-components/DefaultCursor.js.map +2 -2
  18. package/dist-cjs/lib/components/default-components/DefaultGrid.js +1 -1
  19. package/dist-cjs/lib/components/default-components/DefaultGrid.js.map +2 -2
  20. package/dist-cjs/lib/components/default-components/DefaultHandles.js +1 -1
  21. package/dist-cjs/lib/components/default-components/DefaultHandles.js.map +2 -2
  22. package/dist-cjs/lib/components/default-components/DefaultShapeIndicator.js +1 -1
  23. package/dist-cjs/lib/components/default-components/DefaultShapeIndicator.js.map +2 -2
  24. package/dist-cjs/lib/components/default-components/DefaultSnapIndictor.js +1 -1
  25. package/dist-cjs/lib/components/default-components/DefaultSnapIndictor.js.map +2 -2
  26. package/dist-cjs/lib/components/default-components/DefaultSpinner.js +15 -27
  27. package/dist-cjs/lib/components/default-components/DefaultSpinner.js.map +3 -3
  28. package/dist-cjs/lib/config/TLUserPreferences.js +2 -14
  29. package/dist-cjs/lib/config/TLUserPreferences.js.map +2 -2
  30. package/dist-cjs/lib/editor/Editor.js +52 -107
  31. package/dist-cjs/lib/editor/Editor.js.map +2 -2
  32. package/dist-cjs/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.js +3 -13
  33. package/dist-cjs/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.js.map +2 -2
  34. package/dist-cjs/lib/editor/shapes/ShapeUtil.js.map +2 -2
  35. package/dist-cjs/lib/editor/tools/StateNode.js +1 -20
  36. package/dist-cjs/lib/editor/tools/StateNode.js.map +2 -2
  37. package/dist-cjs/lib/editor/types/misc-types.js.map +1 -1
  38. package/dist-cjs/lib/hooks/useEditor.js +4 -1
  39. package/dist-cjs/lib/hooks/useEditor.js.map +2 -2
  40. package/dist-cjs/lib/hooks/useEditorComponents.js +0 -2
  41. package/dist-cjs/lib/hooks/useEditorComponents.js.map +2 -2
  42. package/dist-cjs/lib/license/Watermark.js +2 -2
  43. package/dist-cjs/lib/license/Watermark.js.map +2 -2
  44. package/dist-cjs/lib/options.js +0 -1
  45. package/dist-cjs/lib/options.js.map +2 -2
  46. package/dist-cjs/lib/primitives/geometry/Arc2d.js +1 -1
  47. package/dist-cjs/lib/primitives/geometry/Arc2d.js.map +2 -2
  48. package/dist-cjs/lib/primitives/geometry/Circle2d.js +1 -1
  49. package/dist-cjs/lib/primitives/geometry/Circle2d.js.map +2 -2
  50. package/dist-cjs/lib/primitives/geometry/CubicBezier2d.js +1 -3
  51. package/dist-cjs/lib/primitives/geometry/CubicBezier2d.js.map +2 -2
  52. package/dist-cjs/lib/primitives/geometry/Ellipse2d.js +1 -1
  53. package/dist-cjs/lib/primitives/geometry/Ellipse2d.js.map +2 -2
  54. package/dist-cjs/lib/primitives/geometry/geometry-constants.js +2 -2
  55. package/dist-cjs/lib/primitives/geometry/geometry-constants.js.map +2 -2
  56. package/dist-cjs/lib/primitives/intersect.js +4 -4
  57. package/dist-cjs/lib/primitives/intersect.js.map +2 -2
  58. package/dist-cjs/lib/primitives/utils.js +0 -4
  59. package/dist-cjs/lib/primitives/utils.js.map +2 -2
  60. package/dist-cjs/lib/utils/sync/TLLocalSyncClient.js +1 -0
  61. package/dist-cjs/lib/utils/sync/TLLocalSyncClient.js.map +2 -2
  62. package/dist-cjs/version.js +3 -3
  63. package/dist-cjs/version.js.map +1 -1
  64. package/dist-esm/index.d.mts +16 -213
  65. package/dist-esm/index.mjs +2 -16
  66. package/dist-esm/index.mjs.map +2 -2
  67. package/dist-esm/lib/TldrawEditor.mjs +0 -2
  68. package/dist-esm/lib/TldrawEditor.mjs.map +2 -2
  69. package/dist-esm/lib/components/SVGContainer.mjs +1 -1
  70. package/dist-esm/lib/components/SVGContainer.mjs.map +2 -2
  71. package/dist-esm/lib/components/Shape.mjs +26 -4
  72. package/dist-esm/lib/components/Shape.mjs.map +2 -2
  73. package/dist-esm/lib/components/default-components/DefaultBrush.mjs +1 -1
  74. package/dist-esm/lib/components/default-components/DefaultBrush.mjs.map +2 -2
  75. package/dist-esm/lib/components/default-components/DefaultCanvas.mjs +1 -1
  76. package/dist-esm/lib/components/default-components/DefaultCanvas.mjs.map +2 -2
  77. package/dist-esm/lib/components/default-components/DefaultCollaboratorHint.mjs +1 -1
  78. package/dist-esm/lib/components/default-components/DefaultCollaboratorHint.mjs.map +2 -2
  79. package/dist-esm/lib/components/default-components/DefaultCursor.mjs +1 -1
  80. package/dist-esm/lib/components/default-components/DefaultCursor.mjs.map +2 -2
  81. package/dist-esm/lib/components/default-components/DefaultGrid.mjs +1 -1
  82. package/dist-esm/lib/components/default-components/DefaultGrid.mjs.map +2 -2
  83. package/dist-esm/lib/components/default-components/DefaultHandles.mjs +1 -1
  84. package/dist-esm/lib/components/default-components/DefaultHandles.mjs.map +2 -2
  85. package/dist-esm/lib/components/default-components/DefaultShapeIndicator.mjs +1 -1
  86. package/dist-esm/lib/components/default-components/DefaultShapeIndicator.mjs.map +2 -2
  87. package/dist-esm/lib/components/default-components/DefaultSnapIndictor.mjs +1 -1
  88. package/dist-esm/lib/components/default-components/DefaultSnapIndictor.mjs.map +2 -2
  89. package/dist-esm/lib/components/default-components/DefaultSpinner.mjs +15 -17
  90. package/dist-esm/lib/components/default-components/DefaultSpinner.mjs.map +2 -2
  91. package/dist-esm/lib/config/TLUserPreferences.mjs +2 -14
  92. package/dist-esm/lib/config/TLUserPreferences.mjs.map +2 -2
  93. package/dist-esm/lib/editor/Editor.mjs +52 -107
  94. package/dist-esm/lib/editor/Editor.mjs.map +2 -2
  95. package/dist-esm/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.mjs +3 -13
  96. package/dist-esm/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.mjs.map +2 -2
  97. package/dist-esm/lib/editor/shapes/ShapeUtil.mjs.map +2 -2
  98. package/dist-esm/lib/editor/tools/StateNode.mjs +1 -20
  99. package/dist-esm/lib/editor/tools/StateNode.mjs.map +2 -2
  100. package/dist-esm/lib/hooks/useEditor.mjs +4 -1
  101. package/dist-esm/lib/hooks/useEditor.mjs.map +2 -2
  102. package/dist-esm/lib/hooks/useEditorComponents.mjs +0 -4
  103. package/dist-esm/lib/hooks/useEditorComponents.mjs.map +2 -2
  104. package/dist-esm/lib/license/Watermark.mjs +2 -2
  105. package/dist-esm/lib/license/Watermark.mjs.map +2 -2
  106. package/dist-esm/lib/options.mjs +0 -1
  107. package/dist-esm/lib/options.mjs.map +2 -2
  108. package/dist-esm/lib/primitives/geometry/Arc2d.mjs +2 -2
  109. package/dist-esm/lib/primitives/geometry/Arc2d.mjs.map +2 -2
  110. package/dist-esm/lib/primitives/geometry/Circle2d.mjs +2 -2
  111. package/dist-esm/lib/primitives/geometry/Circle2d.mjs.map +2 -2
  112. package/dist-esm/lib/primitives/geometry/CubicBezier2d.mjs +1 -3
  113. package/dist-esm/lib/primitives/geometry/CubicBezier2d.mjs.map +2 -2
  114. package/dist-esm/lib/primitives/geometry/Ellipse2d.mjs +2 -2
  115. package/dist-esm/lib/primitives/geometry/Ellipse2d.mjs.map +2 -2
  116. package/dist-esm/lib/primitives/geometry/geometry-constants.mjs +2 -2
  117. package/dist-esm/lib/primitives/geometry/geometry-constants.mjs.map +2 -2
  118. package/dist-esm/lib/primitives/intersect.mjs +5 -5
  119. package/dist-esm/lib/primitives/intersect.mjs.map +2 -2
  120. package/dist-esm/lib/primitives/utils.mjs +0 -4
  121. package/dist-esm/lib/primitives/utils.mjs.map +2 -2
  122. package/dist-esm/lib/utils/sync/TLLocalSyncClient.mjs +1 -0
  123. package/dist-esm/lib/utils/sync/TLLocalSyncClient.mjs.map +2 -2
  124. package/dist-esm/version.mjs +3 -3
  125. package/dist-esm/version.mjs.map +1 -1
  126. package/editor.css +27 -23
  127. package/package.json +8 -9
  128. package/src/index.ts +1 -15
  129. package/src/lib/TldrawEditor.tsx +0 -2
  130. package/src/lib/components/SVGContainer.tsx +1 -1
  131. package/src/lib/components/Shape.tsx +21 -6
  132. package/src/lib/components/default-components/DefaultBrush.tsx +1 -1
  133. package/src/lib/components/default-components/DefaultCanvas.tsx +1 -1
  134. package/src/lib/components/default-components/DefaultCollaboratorHint.tsx +1 -1
  135. package/src/lib/components/default-components/DefaultCursor.tsx +1 -1
  136. package/src/lib/components/default-components/DefaultGrid.tsx +1 -1
  137. package/src/lib/components/default-components/DefaultHandles.tsx +1 -5
  138. package/src/lib/components/default-components/DefaultShapeIndicator.tsx +1 -1
  139. package/src/lib/components/default-components/DefaultSnapIndictor.tsx +1 -1
  140. package/src/lib/components/default-components/DefaultSpinner.tsx +12 -12
  141. package/src/lib/config/TLUserPreferences.ts +0 -14
  142. package/src/lib/editor/Editor.test.ts +0 -407
  143. package/src/lib/editor/Editor.ts +72 -140
  144. package/src/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.test.ts +0 -34
  145. package/src/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.ts +0 -13
  146. package/src/lib/editor/shapes/ShapeUtil.ts +0 -57
  147. package/src/lib/editor/tools/StateNode.ts +1 -27
  148. package/src/lib/editor/types/misc-types.ts +1 -73
  149. package/src/lib/hooks/useEditor.tsx +5 -6
  150. package/src/lib/hooks/useEditorComponents.tsx +2 -8
  151. package/src/lib/license/Watermark.tsx +2 -2
  152. package/src/lib/options.ts +0 -2
  153. package/src/lib/primitives/geometry/Arc2d.ts +2 -2
  154. package/src/lib/primitives/geometry/Circle2d.ts +2 -2
  155. package/src/lib/primitives/geometry/CubicBezier2d.ts +1 -4
  156. package/src/lib/primitives/geometry/Ellipse2d.ts +2 -2
  157. package/src/lib/primitives/geometry/geometry-constants.ts +1 -2
  158. package/src/lib/primitives/intersect.ts +5 -12
  159. package/src/lib/primitives/utils.ts +0 -11
  160. package/src/lib/test/currentToolIdMask.test.ts +49 -0
  161. package/src/lib/utils/sync/TLLocalSyncClient.ts +1 -0
  162. package/src/version.ts +3 -3
  163. package/dist-cjs/lib/components/default-components/DefaultShapeWrapper.js +0 -53
  164. package/dist-cjs/lib/components/default-components/DefaultShapeWrapper.js.map +0 -7
  165. package/dist-cjs/lib/hooks/useStateAttribute.js +0 -35
  166. package/dist-cjs/lib/hooks/useStateAttribute.js.map +0 -7
  167. package/dist-cjs/lib/utils/EditorAtom.js +0 -45
  168. package/dist-cjs/lib/utils/EditorAtom.js.map +0 -7
  169. package/dist-esm/lib/components/default-components/DefaultShapeWrapper.mjs +0 -23
  170. package/dist-esm/lib/components/default-components/DefaultShapeWrapper.mjs.map +0 -7
  171. package/dist-esm/lib/hooks/useStateAttribute.mjs +0 -15
  172. package/dist-esm/lib/hooks/useStateAttribute.mjs.map +0 -7
  173. package/dist-esm/lib/utils/EditorAtom.mjs +0 -25
  174. package/dist-esm/lib/utils/EditorAtom.mjs.map +0 -7
  175. package/src/lib/components/default-components/DefaultShapeWrapper.tsx +0 -35
  176. package/src/lib/editor/tools/StateNode.test.ts +0 -285
  177. package/src/lib/hooks/useStateAttribute.ts +0 -15
  178. package/src/lib/primitives/intersect.test.ts +0 -946
  179. package/src/lib/utils/EditorAtom.ts +0 -37
@@ -1,285 +0,0 @@
1
- import { createTLStore } from '../../config/createTLStore'
2
- import { Editor } from '../Editor'
3
- import { StateNode } from './StateNode'
4
-
5
- describe('StateNode.addChild', () => {
6
- // Test state node classes for addChild tests
7
- class ParentState extends StateNode {
8
- static override id = 'parent'
9
- static override initial = 'child1'
10
- static override children() {
11
- return [ChildState1]
12
- }
13
- }
14
-
15
- class ChildState1 extends StateNode {
16
- static override id = 'child1'
17
- }
18
-
19
- class ChildState2 extends StateNode {
20
- static override id = 'child2'
21
- }
22
-
23
- class ChildState3 extends StateNode {
24
- static override id = 'child3'
25
- }
26
-
27
- class LeafState extends StateNode {
28
- static override id = 'leaf'
29
- }
30
-
31
- class RootState extends StateNode {
32
- static override id = 'root'
33
- static override initial = 'child1'
34
- static override children() {
35
- return [ChildState1]
36
- }
37
- }
38
-
39
- class RootStateWithoutChildren extends StateNode {
40
- static override id = 'rootWithoutChildren'
41
- }
42
-
43
- let editor: Editor
44
-
45
- beforeEach(() => {
46
- editor = new Editor({
47
- initialState: 'parent',
48
- shapeUtils: [],
49
- bindingUtils: [],
50
- tools: [
51
- ParentState,
52
- ChildState1,
53
- ChildState2,
54
- ChildState3,
55
- LeafState,
56
- RootState,
57
- RootStateWithoutChildren,
58
- ],
59
- store: createTLStore({ shapeUtils: [], bindingUtils: [] }),
60
- getContainer: () => document.body,
61
- })
62
- })
63
-
64
- it('should add a child to a branch state node', () => {
65
- const parentState = editor.root.children!['parent'] as ParentState
66
-
67
- // Initially should have one child
68
- expect(Object.keys(parentState.children!)).toHaveLength(1)
69
- expect(parentState.children!['child1']).toBeDefined()
70
-
71
- // Add a new child
72
- parentState.addChild(ChildState2)
73
-
74
- // Should now have two children
75
- expect(Object.keys(parentState.children!)).toHaveLength(2)
76
- expect(parentState.children!['child1']).toBeDefined()
77
- expect(parentState.children!['child2']).toBeDefined()
78
- expect(parentState.children!['child2']).toBeInstanceOf(ChildState2)
79
- })
80
-
81
- it('should add a child to a root state node', () => {
82
- const rootState = editor.root.children!['root'] as RootState
83
-
84
- // Initially should have one child
85
- expect(Object.keys(rootState.children!)).toHaveLength(1)
86
- expect(rootState.children!['child1']).toBeDefined()
87
-
88
- // Add a new child
89
- rootState.addChild(ChildState2)
90
-
91
- // Should now have two children
92
- expect(Object.keys(rootState.children!)).toHaveLength(2)
93
- expect(rootState.children!['child1']).toBeDefined()
94
- expect(rootState.children!['child2']).toBeDefined()
95
- expect(rootState.children!['child2']).toBeInstanceOf(ChildState2)
96
- })
97
-
98
- it('should throw an error when trying to add a child to a leaf state node', () => {
99
- const leafState = editor.root.children!['leaf'] as LeafState
100
-
101
- // Leaf state should not have children
102
- expect(leafState.children).toBeUndefined()
103
-
104
- // Should throw an error when trying to add a child
105
- expect(() => {
106
- leafState.addChild(ChildState2)
107
- }).toThrow('StateNode.addChild: cannot add child to a leaf node')
108
- })
109
-
110
- it('should return the parent state node for chaining', () => {
111
- const parentState = editor.root.children!['parent'] as ParentState
112
-
113
- const result = parentState.addChild(ChildState2)
114
-
115
- expect(result).toBe(parentState)
116
- })
117
-
118
- it('should create the child with the correct editor and parent', () => {
119
- const parentState = editor.root.children!['parent'] as ParentState
120
-
121
- parentState.addChild(ChildState2)
122
- const childState = parentState.children!['child2'] as ChildState2
123
-
124
- expect(childState.editor).toBe(editor)
125
- expect(childState.parent).toBe(parentState)
126
- })
127
-
128
- it('should allow adding multiple children', () => {
129
- const parentState = editor.root.children!['parent'] as ParentState
130
-
131
- // Add multiple children
132
- parentState.addChild(ChildState2).addChild(ChildState3)
133
-
134
- // Should have three children
135
- expect(Object.keys(parentState.children!)).toHaveLength(3)
136
- expect(parentState.children!['child1']).toBeDefined()
137
- expect(parentState.children!['child2']).toBeDefined()
138
- expect(parentState.children!['child3']).toBeDefined()
139
- expect(parentState.children!['child2']).toBeInstanceOf(ChildState2)
140
- expect(parentState.children!['child3']).toBeInstanceOf(ChildState3)
141
- })
142
-
143
- it('should allow transitioning to added children', () => {
144
- const parentState = editor.root.children!['parent'] as ParentState
145
-
146
- // Add a new child
147
- parentState.addChild(ChildState2)
148
-
149
- // Should be able to transition to the new child
150
- expect(() => {
151
- parentState.transition('child2')
152
- }).not.toThrow()
153
-
154
- // The current state should be the new child
155
- expect(parentState.getCurrent()?.id).toBe('child2')
156
- })
157
-
158
- it('should maintain existing children when adding new ones', () => {
159
- const parentState = editor.root.children!['parent'] as ParentState
160
- const originalChild = parentState.children!['child1']
161
-
162
- // Add a new child
163
- parentState.addChild(ChildState2)
164
-
165
- // Original child should still exist and be the same instance
166
- expect(parentState.children!['child1']).toBe(originalChild)
167
- expect(parentState.children!['child1']).toBeInstanceOf(ChildState1)
168
- })
169
-
170
- it('should initialize children object for root nodes without static children', () => {
171
- // Create a StateNode directly as a root node (no parent)
172
- const mockEditor = {} as Editor
173
- const rootStateWithoutChildren = new RootStateWithoutChildren(mockEditor, undefined)
174
-
175
- // Root state without static children should not have children initially
176
- expect(rootStateWithoutChildren.children).toBeUndefined()
177
-
178
- // Adding a child should initialize the children object
179
- rootStateWithoutChildren.addChild(ChildState2)
180
-
181
- // Should now have children object with the added child
182
- expect(rootStateWithoutChildren.children).toBeDefined()
183
- expect(Object.keys(rootStateWithoutChildren.children!)).toHaveLength(1)
184
- expect(rootStateWithoutChildren.children!['child2']).toBeDefined()
185
- expect(rootStateWithoutChildren.children!['child2']).toBeInstanceOf(ChildState2)
186
- })
187
-
188
- it('should throw an error when trying to add a child with a duplicate ID', () => {
189
- const parentState = editor.root.children!['parent'] as ParentState
190
-
191
- // Initially should have one child
192
- expect(Object.keys(parentState.children!)).toHaveLength(1)
193
- expect(parentState.children!['child1']).toBeDefined()
194
-
195
- // Should throw an error when trying to add a child with the same ID
196
- expect(() => {
197
- parentState.addChild(ChildState1)
198
- }).toThrow("StateNode.addChild: a child with id 'child1' already exists")
199
-
200
- // Should still have only one child
201
- expect(Object.keys(parentState.children!)).toHaveLength(1)
202
- expect(parentState.children!['child1']).toBeDefined()
203
- })
204
-
205
- it('should throw an error when trying to add a child with a duplicate ID to a root state', () => {
206
- const rootState = editor.root.children!['root'] as RootState
207
-
208
- // Initially should have one child
209
- expect(Object.keys(rootState.children!)).toHaveLength(1)
210
- expect(rootState.children!['child1']).toBeDefined()
211
-
212
- // Should throw an error when trying to add a child with the same ID
213
- expect(() => {
214
- rootState.addChild(ChildState1)
215
- }).toThrow("StateNode.addChild: a child with id 'child1' already exists")
216
-
217
- // Should still have only one child
218
- expect(Object.keys(rootState.children!)).toHaveLength(1)
219
- expect(rootState.children!['child1']).toBeDefined()
220
- })
221
-
222
- it('should throw an error when trying to add a child with a duplicate ID to a root state without static children', () => {
223
- // Create a StateNode directly as a root node (no parent)
224
- const mockEditor = {} as Editor
225
- const rootStateWithoutChildren = new RootStateWithoutChildren(mockEditor, undefined)
226
-
227
- // Add a child first
228
- rootStateWithoutChildren.addChild(ChildState1)
229
-
230
- // Should throw an error when trying to add a child with the same ID
231
- expect(() => {
232
- rootStateWithoutChildren.addChild(ChildState1)
233
- }).toThrow("StateNode.addChild: a child with id 'child1' already exists")
234
-
235
- // Should still have only one child
236
- expect(Object.keys(rootStateWithoutChildren.children!)).toHaveLength(1)
237
- expect(rootStateWithoutChildren.children!['child1']).toBeDefined()
238
- })
239
- })
240
-
241
- describe('current tool id mask', () => {
242
- // Tool mask test classes
243
- class ToolA extends StateNode {
244
- static override id = 'A'
245
- }
246
-
247
- class ToolB extends StateNode {
248
- static override id = 'B'
249
- }
250
-
251
- class ToolC extends StateNode {
252
- static override id = 'C'
253
-
254
- override onEnter() {
255
- this.setCurrentToolIdMask('A')
256
- }
257
- }
258
-
259
- let toolMaskEditor: Editor
260
-
261
- beforeEach(() => {
262
- toolMaskEditor = new Editor({
263
- initialState: 'A',
264
- shapeUtils: [],
265
- bindingUtils: [],
266
- tools: [ToolA, ToolB, ToolC],
267
- store: createTLStore({ shapeUtils: [], bindingUtils: [] }),
268
- getContainer: () => document.body,
269
- })
270
- })
271
-
272
- it('starts with the correct tool id', () => {
273
- expect(toolMaskEditor.getCurrentToolId()).toBe('A')
274
- })
275
-
276
- it('updates the current tool id', () => {
277
- toolMaskEditor.setCurrentTool('B')
278
- expect(toolMaskEditor.getCurrentToolId()).toBe('B')
279
- })
280
-
281
- it('masks the current tool id', () => {
282
- toolMaskEditor.setCurrentTool('C')
283
- expect(toolMaskEditor.getCurrentToolId()).toBe('A')
284
- })
285
- })
@@ -1,15 +0,0 @@
1
- import { react } from '@tldraw/state'
2
- import { useLayoutEffect } from 'react'
3
- import { useEditor } from './useEditor'
4
-
5
- export function useStateAttribute() {
6
- const editor = useEditor()
7
-
8
- // we use a layout effect because we don't want there to be any perceptible delay between the
9
- // editor mounting and this attribute being applied, because styles may depend on it:
10
- useLayoutEffect(() => {
11
- return react('stateAttribute', () => {
12
- editor.getContainer().setAttribute('data-state', editor.getPath())
13
- })
14
- }, [editor])
15
- }