@oh-just-another/state 0.57.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.
Files changed (269) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/LICENSE +21 -0
  3. package/README.md +60 -0
  4. package/dist/.tsbuildinfo +1 -0
  5. package/dist/actions/actionClipboard.d.ts +6 -0
  6. package/dist/actions/actionClipboard.d.ts.map +1 -0
  7. package/dist/actions/actionClipboard.js +26 -0
  8. package/dist/actions/actionClipboard.js.map +1 -0
  9. package/dist/actions/actionGrouping.d.ts +5 -0
  10. package/dist/actions/actionGrouping.d.ts.map +1 -0
  11. package/dist/actions/actionGrouping.js +26 -0
  12. package/dist/actions/actionGrouping.js.map +1 -0
  13. package/dist/actions/actionHistory.d.ts +5 -0
  14. package/dist/actions/actionHistory.d.ts.map +1 -0
  15. package/dist/actions/actionHistory.js +25 -0
  16. package/dist/actions/actionHistory.js.map +1 -0
  17. package/dist/actions/actionKeyboard.d.ts +3 -0
  18. package/dist/actions/actionKeyboard.d.ts.map +1 -0
  19. package/dist/actions/actionKeyboard.js +130 -0
  20. package/dist/actions/actionKeyboard.js.map +1 -0
  21. package/dist/actions/actionLayout.d.ts +3 -0
  22. package/dist/actions/actionLayout.d.ts.map +1 -0
  23. package/dist/actions/actionLayout.js +65 -0
  24. package/dist/actions/actionLayout.js.map +1 -0
  25. package/dist/actions/actionMode.d.ts +13 -0
  26. package/dist/actions/actionMode.d.ts.map +1 -0
  27. package/dist/actions/actionMode.js +116 -0
  28. package/dist/actions/actionMode.js.map +1 -0
  29. package/dist/actions/actionSelection.d.ts +9 -0
  30. package/dist/actions/actionSelection.d.ts.map +1 -0
  31. package/dist/actions/actionSelection.js +57 -0
  32. package/dist/actions/actionSelection.js.map +1 -0
  33. package/dist/actions/actionView.d.ts +7 -0
  34. package/dist/actions/actionView.d.ts.map +1 -0
  35. package/dist/actions/actionView.js +14 -0
  36. package/dist/actions/actionView.js.map +1 -0
  37. package/dist/actions/actionZOrder.d.ts +7 -0
  38. package/dist/actions/actionZOrder.d.ts.map +1 -0
  39. package/dist/actions/actionZOrder.js +42 -0
  40. package/dist/actions/actionZOrder.js.map +1 -0
  41. package/dist/actions/actionZoom.d.ts +8 -0
  42. package/dist/actions/actionZoom.d.ts.map +1 -0
  43. package/dist/actions/actionZoom.js +61 -0
  44. package/dist/actions/actionZoom.js.map +1 -0
  45. package/dist/actions/index.d.ts +12 -0
  46. package/dist/actions/index.d.ts.map +1 -0
  47. package/dist/actions/index.js +11 -0
  48. package/dist/actions/index.js.map +1 -0
  49. package/dist/actions/registry.d.ts +68 -0
  50. package/dist/actions/registry.d.ts.map +1 -0
  51. package/dist/actions/registry.js +300 -0
  52. package/dist/actions/registry.js.map +1 -0
  53. package/dist/actions/types.d.ts +103 -0
  54. package/dist/actions/types.d.ts.map +1 -0
  55. package/dist/actions/types.js +10 -0
  56. package/dist/actions/types.js.map +1 -0
  57. package/dist/animation-tick.d.ts +28 -0
  58. package/dist/animation-tick.d.ts.map +1 -0
  59. package/dist/animation-tick.js +50 -0
  60. package/dist/animation-tick.js.map +1 -0
  61. package/dist/auto-compact.d.ts +27 -0
  62. package/dist/auto-compact.d.ts.map +1 -0
  63. package/dist/auto-compact.js +46 -0
  64. package/dist/auto-compact.js.map +1 -0
  65. package/dist/auto-layout-scheduler.d.ts +50 -0
  66. package/dist/auto-layout-scheduler.d.ts.map +1 -0
  67. package/dist/auto-layout-scheduler.js +94 -0
  68. package/dist/auto-layout-scheduler.js.map +1 -0
  69. package/dist/built-in-handlers.d.ts +24 -0
  70. package/dist/built-in-handlers.d.ts.map +1 -0
  71. package/dist/built-in-handlers.js +210 -0
  72. package/dist/built-in-handlers.js.map +1 -0
  73. package/dist/clipboard.d.ts +51 -0
  74. package/dist/clipboard.d.ts.map +1 -0
  75. package/dist/clipboard.js +105 -0
  76. package/dist/clipboard.js.map +1 -0
  77. package/dist/constants.d.ts +544 -0
  78. package/dist/constants.d.ts.map +1 -0
  79. package/dist/constants.js +537 -0
  80. package/dist/constants.js.map +1 -0
  81. package/dist/dom-events.d.ts +13 -0
  82. package/dist/dom-events.d.ts.map +1 -0
  83. package/dist/dom-events.js +70 -0
  84. package/dist/dom-events.js.map +1 -0
  85. package/dist/editor/anchor-points.d.ts +22 -0
  86. package/dist/editor/anchor-points.d.ts.map +1 -0
  87. package/dist/editor/anchor-points.js +28 -0
  88. package/dist/editor/anchor-points.js.map +1 -0
  89. package/dist/editor/applies/create.d.ts +60 -0
  90. package/dist/editor/applies/create.d.ts.map +1 -0
  91. package/dist/editor/applies/create.js +107 -0
  92. package/dist/editor/applies/create.js.map +1 -0
  93. package/dist/editor/applies/edge.d.ts +32 -0
  94. package/dist/editor/applies/edge.d.ts.map +1 -0
  95. package/dist/editor/applies/edge.js +44 -0
  96. package/dist/editor/applies/edge.js.map +1 -0
  97. package/dist/editor/applies/link-move.d.ts +53 -0
  98. package/dist/editor/applies/link-move.d.ts.map +1 -0
  99. package/dist/editor/applies/link-move.js +160 -0
  100. package/dist/editor/applies/link-move.js.map +1 -0
  101. package/dist/editor/applies/move.d.ts +38 -0
  102. package/dist/editor/applies/move.d.ts.map +1 -0
  103. package/dist/editor/applies/move.js +83 -0
  104. package/dist/editor/applies/move.js.map +1 -0
  105. package/dist/editor/applies/resize.d.ts +68 -0
  106. package/dist/editor/applies/resize.d.ts.map +1 -0
  107. package/dist/editor/applies/resize.js +199 -0
  108. package/dist/editor/applies/resize.js.map +1 -0
  109. package/dist/editor/applies/selection.d.ts +34 -0
  110. package/dist/editor/applies/selection.d.ts.map +1 -0
  111. package/dist/editor/applies/selection.js +65 -0
  112. package/dist/editor/applies/selection.js.map +1 -0
  113. package/dist/editor/applies/snap-grid.d.ts +45 -0
  114. package/dist/editor/applies/snap-grid.d.ts.map +1 -0
  115. package/dist/editor/applies/snap-grid.js +90 -0
  116. package/dist/editor/applies/snap-grid.js.map +1 -0
  117. package/dist/editor/container-ops.d.ts +74 -0
  118. package/dist/editor/container-ops.d.ts.map +1 -0
  119. package/dist/editor/container-ops.js +262 -0
  120. package/dist/editor/container-ops.js.map +1 -0
  121. package/dist/editor/event-fanout.d.ts +48 -0
  122. package/dist/editor/event-fanout.d.ts.map +1 -0
  123. package/dist/editor/event-fanout.js +53 -0
  124. package/dist/editor/event-fanout.js.map +1 -0
  125. package/dist/editor/gesture-tx.d.ts +77 -0
  126. package/dist/editor/gesture-tx.d.ts.map +1 -0
  127. package/dist/editor/gesture-tx.js +93 -0
  128. package/dist/editor/gesture-tx.js.map +1 -0
  129. package/dist/editor/hit-test.d.ts +178 -0
  130. package/dist/editor/hit-test.d.ts.map +1 -0
  131. package/dist/editor/hit-test.js +460 -0
  132. package/dist/editor/hit-test.js.map +1 -0
  133. package/dist/editor/long-press.d.ts +34 -0
  134. package/dist/editor/long-press.d.ts.map +1 -0
  135. package/dist/editor/long-press.js +58 -0
  136. package/dist/editor/long-press.js.map +1 -0
  137. package/dist/editor/pinch.d.ts +37 -0
  138. package/dist/editor/pinch.d.ts.map +1 -0
  139. package/dist/editor/pinch.js +90 -0
  140. package/dist/editor/pinch.js.map +1 -0
  141. package/dist/editor/pointer-binding.d.ts +18 -0
  142. package/dist/editor/pointer-binding.d.ts.map +1 -0
  143. package/dist/editor/pointer-binding.js +1087 -0
  144. package/dist/editor/pointer-binding.js.map +1 -0
  145. package/dist/editor/public/annotations.d.ts +54 -0
  146. package/dist/editor/public/annotations.d.ts.map +1 -0
  147. package/dist/editor/public/annotations.js +106 -0
  148. package/dist/editor/public/annotations.js.map +1 -0
  149. package/dist/editor/public/arrange-group.d.ts +81 -0
  150. package/dist/editor/public/arrange-group.d.ts.map +1 -0
  151. package/dist/editor/public/arrange-group.js +193 -0
  152. package/dist/editor/public/arrange-group.js.map +1 -0
  153. package/dist/editor/public/brush.d.ts +33 -0
  154. package/dist/editor/public/brush.d.ts.map +1 -0
  155. package/dist/editor/public/brush.js +54 -0
  156. package/dist/editor/public/brush.js.map +1 -0
  157. package/dist/editor/public/clipboard.d.ts +31 -0
  158. package/dist/editor/public/clipboard.d.ts.map +1 -0
  159. package/dist/editor/public/clipboard.js +35 -0
  160. package/dist/editor/public/clipboard.js.map +1 -0
  161. package/dist/editor/public/image-insert.d.ts +30 -0
  162. package/dist/editor/public/image-insert.d.ts.map +1 -0
  163. package/dist/editor/public/image-insert.js +57 -0
  164. package/dist/editor/public/image-insert.js.map +1 -0
  165. package/dist/editor/public/layers.d.ts +56 -0
  166. package/dist/editor/public/layers.d.ts.map +1 -0
  167. package/dist/editor/public/layers.js +104 -0
  168. package/dist/editor/public/layers.js.map +1 -0
  169. package/dist/editor/public/link.d.ts +25 -0
  170. package/dist/editor/public/link.d.ts.map +1 -0
  171. package/dist/editor/public/link.js +74 -0
  172. package/dist/editor/public/link.js.map +1 -0
  173. package/dist/editor/public/placement.d.ts +60 -0
  174. package/dist/editor/public/placement.d.ts.map +1 -0
  175. package/dist/editor/public/placement.js +111 -0
  176. package/dist/editor/public/placement.js.map +1 -0
  177. package/dist/editor/public/selection-ops.d.ts +78 -0
  178. package/dist/editor/public/selection-ops.d.ts.map +1 -0
  179. package/dist/editor/public/selection-ops.js +226 -0
  180. package/dist/editor/public/selection-ops.js.map +1 -0
  181. package/dist/editor/public/text-edit.d.ts +17 -0
  182. package/dist/editor/public/text-edit.d.ts.map +1 -0
  183. package/dist/editor/public/text-edit.js +28 -0
  184. package/dist/editor/public/text-edit.js.map +1 -0
  185. package/dist/editor/public/z-order.d.ts +47 -0
  186. package/dist/editor/public/z-order.d.ts.map +1 -0
  187. package/dist/editor/public/z-order.js +151 -0
  188. package/dist/editor/public/z-order.js.map +1 -0
  189. package/dist/editor/public/zoom-pan.d.ts +44 -0
  190. package/dist/editor/public/zoom-pan.d.ts.map +1 -0
  191. package/dist/editor/public/zoom-pan.js +116 -0
  192. package/dist/editor/public/zoom-pan.js.map +1 -0
  193. package/dist/editor/render-orchestrator.d.ts +11 -0
  194. package/dist/editor/render-orchestrator.d.ts.map +1 -0
  195. package/dist/editor/render-orchestrator.js +473 -0
  196. package/dist/editor/render-orchestrator.js.map +1 -0
  197. package/dist/editor/resize-helpers.d.ts +30 -0
  198. package/dist/editor/resize-helpers.d.ts.map +1 -0
  199. package/dist/editor/resize-helpers.js +121 -0
  200. package/dist/editor/resize-helpers.js.map +1 -0
  201. package/dist/editor/shape-filters.d.ts +11 -0
  202. package/dist/editor/shape-filters.d.ts.map +1 -0
  203. package/dist/editor/shape-filters.js +19 -0
  204. package/dist/editor/shape-filters.js.map +1 -0
  205. package/dist/editor/shape-traits.d.ts +16 -0
  206. package/dist/editor/shape-traits.d.ts.map +1 -0
  207. package/dist/editor/shape-traits.js +29 -0
  208. package/dist/editor/shape-traits.js.map +1 -0
  209. package/dist/editor/viewport-helpers.d.ts +24 -0
  210. package/dist/editor/viewport-helpers.d.ts.map +1 -0
  211. package/dist/editor/viewport-helpers.js +63 -0
  212. package/dist/editor/viewport-helpers.js.map +1 -0
  213. package/dist/editor-events.d.ts +33 -0
  214. package/dist/editor-events.d.ts.map +1 -0
  215. package/dist/editor-events.js +2 -0
  216. package/dist/editor-events.js.map +1 -0
  217. package/dist/editor.d.ts +1841 -0
  218. package/dist/editor.d.ts.map +1 -0
  219. package/dist/editor.js +4803 -0
  220. package/dist/editor.js.map +1 -0
  221. package/dist/file-drop.d.ts +99 -0
  222. package/dist/file-drop.d.ts.map +1 -0
  223. package/dist/file-drop.js +198 -0
  224. package/dist/file-drop.js.map +1 -0
  225. package/dist/frame-helpers.d.ts +30 -0
  226. package/dist/frame-helpers.d.ts.map +1 -0
  227. package/dist/frame-helpers.js +105 -0
  228. package/dist/frame-helpers.js.map +1 -0
  229. package/dist/group-helpers.d.ts +39 -0
  230. package/dist/group-helpers.d.ts.map +1 -0
  231. package/dist/group-helpers.js +116 -0
  232. package/dist/group-helpers.js.map +1 -0
  233. package/dist/handle.d.ts +73 -0
  234. package/dist/handle.d.ts.map +1 -0
  235. package/dist/handle.js +184 -0
  236. package/dist/handle.js.map +1 -0
  237. package/dist/index.d.ts +26 -0
  238. package/dist/index.d.ts.map +1 -0
  239. package/dist/index.js +16 -0
  240. package/dist/index.js.map +1 -0
  241. package/dist/interactive.d.ts +21 -0
  242. package/dist/interactive.d.ts.map +1 -0
  243. package/dist/interactive.js +11 -0
  244. package/dist/interactive.js.map +1 -0
  245. package/dist/link-selection.d.ts +21 -0
  246. package/dist/link-selection.d.ts.map +1 -0
  247. package/dist/link-selection.js +37 -0
  248. package/dist/link-selection.js.map +1 -0
  249. package/dist/machine.d.ts +322 -0
  250. package/dist/machine.d.ts.map +1 -0
  251. package/dist/machine.js +568 -0
  252. package/dist/machine.js.map +1 -0
  253. package/dist/modes.d.ts +24 -0
  254. package/dist/modes.d.ts.map +1 -0
  255. package/dist/modes.js +2 -0
  256. package/dist/modes.js.map +1 -0
  257. package/dist/overlay.d.ts +262 -0
  258. package/dist/overlay.d.ts.map +1 -0
  259. package/dist/overlay.js +673 -0
  260. package/dist/overlay.js.map +1 -0
  261. package/dist/platform.d.ts +70 -0
  262. package/dist/platform.d.ts.map +1 -0
  263. package/dist/platform.js +115 -0
  264. package/dist/platform.js.map +1 -0
  265. package/dist/selection.d.ts +18 -0
  266. package/dist/selection.d.ts.map +1 -0
  267. package/dist/selection.js +31 -0
  268. package/dist/selection.js.map +1 -0
  269. package/package.json +59 -0
@@ -0,0 +1,568 @@
1
+ import { assign, enqueueActions, setup } from "xstate";
2
+ import { DEFAULT_MODE } from "./modes.js";
3
+ const initialContext = () => ({
4
+ mode: DEFAULT_MODE,
5
+ pressOrigin: null,
6
+ pressLast: null,
7
+ pressTarget: null,
8
+ drawingType: null,
9
+ pressModifiers: null,
10
+ });
11
+ /** Pixels of pointer travel before a press becomes a drag. */
12
+ export const DRAG_THRESHOLD = 4;
13
+ const dragExceeded = (origin, current) => {
14
+ const dx = current.x - origin.x;
15
+ const dy = current.y - origin.y;
16
+ return dx * dx + dy * dy >= DRAG_THRESHOLD * DRAG_THRESHOLD;
17
+ };
18
+ const boundsFromPoints = (a, b) => {
19
+ const x = Math.min(a.x, b.x);
20
+ const y = Math.min(a.y, b.y);
21
+ return { x, y, width: Math.abs(b.x - a.x), height: Math.abs(b.y - a.y) };
22
+ };
23
+ export const interactionMachine = setup({
24
+ types: {
25
+ context: {},
26
+ events: {},
27
+ emitted: {},
28
+ },
29
+ actions: {
30
+ startPress: assign((_, params) => ({
31
+ pressOrigin: params.point,
32
+ pressLast: params.point,
33
+ pressTarget: params.target,
34
+ pressModifiers: params.modifiers,
35
+ })),
36
+ updateLast: assign((_, params) => ({ pressLast: params.point })),
37
+ setDrawingType: assign((_, params) => ({
38
+ drawingType: params.kind,
39
+ })),
40
+ resetGesture: assign(() => ({
41
+ pressOrigin: null,
42
+ pressLast: null,
43
+ pressTarget: null,
44
+ drawingType: null,
45
+ pressModifiers: null,
46
+ })),
47
+ setMode: assign((_, params) => ({ mode: params.mode })),
48
+ emitMoveElement: enqueueActions(({ context, event, enqueue }) => {
49
+ if (event.type !== "POINTER_MOVE" ||
50
+ !context.pressOrigin ||
51
+ context.pressTarget?.kind !== "element") {
52
+ return;
53
+ }
54
+ enqueue.emit({
55
+ type: "MOVE_SHAPE",
56
+ id: context.pressTarget.id,
57
+ delta: {
58
+ x: event.point.x - context.pressOrigin.x,
59
+ y: event.point.y - context.pressOrigin.y,
60
+ },
61
+ originalBounds: context.pressTarget.bounds,
62
+ });
63
+ }),
64
+ emitMoveAnnotation: enqueueActions(({ context, event, enqueue }) => {
65
+ if (event.type !== "POINTER_MOVE" ||
66
+ !context.pressOrigin ||
67
+ context.pressTarget?.kind !== "annotation") {
68
+ return;
69
+ }
70
+ enqueue.emit({
71
+ type: "MOVE_ANNOTATION",
72
+ id: context.pressTarget.id,
73
+ delta: {
74
+ x: event.point.x - context.pressOrigin.x,
75
+ y: event.point.y - context.pressOrigin.y,
76
+ },
77
+ originalPosition: context.pressTarget.origin,
78
+ });
79
+ }),
80
+ emitCommitAnnotationDrag: enqueueActions(({ context, enqueue }) => {
81
+ if (context.pressTarget?.kind !== "annotation")
82
+ return;
83
+ enqueue.emit({ type: "COMMIT_ANNOTATION_DRAG", id: context.pressTarget.id });
84
+ }),
85
+ emitResizeElement: enqueueActions(({ context, event, enqueue }) => {
86
+ if (event.type !== "POINTER_MOVE" ||
87
+ !context.pressOrigin ||
88
+ context.pressTarget?.kind !== "handle") {
89
+ return;
90
+ }
91
+ enqueue.emit({
92
+ type: "RESIZE_SHAPE",
93
+ id: context.pressTarget.elementId,
94
+ handle: context.pressTarget.handle,
95
+ delta: {
96
+ x: event.point.x - context.pressOrigin.x,
97
+ y: event.point.y - context.pressOrigin.y,
98
+ },
99
+ originalBounds: context.pressTarget.bounds,
100
+ });
101
+ }),
102
+ emitResizeGroup: enqueueActions(({ context, event, enqueue }) => {
103
+ if (event.type !== "POINTER_MOVE" ||
104
+ !context.pressOrigin ||
105
+ context.pressTarget?.kind !== "group-handle") {
106
+ return;
107
+ }
108
+ enqueue.emit({
109
+ type: "RESIZE_GROUP",
110
+ handle: context.pressTarget.handle,
111
+ delta: {
112
+ x: event.point.x - context.pressOrigin.x,
113
+ y: event.point.y - context.pressOrigin.y,
114
+ },
115
+ originalBounds: context.pressTarget.bounds,
116
+ });
117
+ }),
118
+ maybeEmitCreate: enqueueActions(({ context, event, enqueue }) => {
119
+ if (event.type !== "POINTER_UP" || !context.pressOrigin || !context.drawingType) {
120
+ return;
121
+ }
122
+ const bounds = boundsFromPoints(context.pressOrigin, event.point);
123
+ if (bounds.width < 1 || bounds.height < 1)
124
+ return;
125
+ enqueue.emit({ type: "CREATE_SHAPE", shapeType: context.drawingType, bounds });
126
+ }),
127
+ emitLinkPreview: enqueueActions(({ context, event, enqueue }) => {
128
+ if (event.type !== "POINTER_MOVE" || !context.pressOrigin)
129
+ return;
130
+ enqueue.emit({
131
+ type: "DRAW_EDGE_PREVIEW",
132
+ fromElement: context.pressTarget?.kind === "element" ? context.pressTarget.id : null,
133
+ fromPoint: context.pressOrigin,
134
+ toPoint: event.point,
135
+ });
136
+ }),
137
+ emitLinkPreviewClear: enqueueActions(({ enqueue }) => {
138
+ enqueue.emit({ type: "DRAW_EDGE_PREVIEW_CLEAR" });
139
+ }),
140
+ emitLinkEndpointPreview: enqueueActions(({ context, event, enqueue }) => {
141
+ if (event.type !== "POINTER_MOVE" || !context.pressOrigin)
142
+ return;
143
+ if (context.pressTarget?.kind !== "edge-endpoint")
144
+ return;
145
+ enqueue.emit({
146
+ type: "UPDATE_EDGE_ENDPOINT_PREVIEW",
147
+ linkId: context.pressTarget.linkId,
148
+ side: context.pressTarget.side,
149
+ toPoint: event.point,
150
+ });
151
+ }),
152
+ emitLinkEndpointUpdate: enqueueActions(({ context, event, enqueue }) => {
153
+ if (event.type !== "POINTER_UP" || !context.pressOrigin)
154
+ return;
155
+ if (context.pressTarget?.kind !== "edge-endpoint")
156
+ return;
157
+ const upTarget = event.target;
158
+ const toElement = upTarget?.kind === "element" ? upTarget.id : null;
159
+ enqueue.emit({
160
+ type: "UPDATE_EDGE_ENDPOINT",
161
+ linkId: context.pressTarget.linkId,
162
+ side: context.pressTarget.side,
163
+ toPoint: event.point,
164
+ toElement,
165
+ });
166
+ }),
167
+ emitLassoProgress: enqueueActions(({ context, event, enqueue }) => {
168
+ if (event.type !== "POINTER_MOVE" || !context.pressOrigin)
169
+ return;
170
+ const m = context.pressModifiers;
171
+ const additive = Boolean(m && (m.shift || m.meta || m.ctrl));
172
+ enqueue.emit({
173
+ type: "LASSO_PROGRESS",
174
+ bounds: boundsFromPoints(context.pressOrigin, event.point),
175
+ mode: additive ? "add" : "replace",
176
+ });
177
+ }),
178
+ emitLassoCommit: enqueueActions(({ context, event, enqueue }) => {
179
+ if (event.type !== "POINTER_UP" || !context.pressOrigin)
180
+ return;
181
+ const bounds = boundsFromPoints(context.pressOrigin, event.point);
182
+ // Tiny rectangles are click-style noise — ignore.
183
+ if (bounds.width < 1 && bounds.height < 1) {
184
+ enqueue.emit({ type: "LASSO_CLEAR" });
185
+ return;
186
+ }
187
+ const m = context.pressModifiers;
188
+ const additive = Boolean(m && (m.shift || m.meta || m.ctrl));
189
+ enqueue.emit({ type: "SELECT_BY_BOUNDS", bounds, mode: additive ? "add" : "replace" });
190
+ enqueue.emit({ type: "LASSO_CLEAR" });
191
+ }),
192
+ emitCreateLink: enqueueActions(({ context, event, enqueue }) => {
193
+ if (event.type !== "POINTER_UP" || !context.pressOrigin)
194
+ return;
195
+ // `event.target` carries the *up*-side hit-test (host computed it
196
+ // the same way as POINTER_DOWN). Use it to land on a shape if the
197
+ // pointer is still over one.
198
+ const upTarget = event.target;
199
+ const toElement = upTarget?.kind === "element" ? upTarget.id : null;
200
+ const fromElement = context.pressTarget?.kind === "element" ? context.pressTarget.id : null;
201
+ // Reject degenerate (released right back on the source shape without
202
+ // moving — clearly an accidental click).
203
+ const dx = event.point.x - context.pressOrigin.x;
204
+ const dy = event.point.y - context.pressOrigin.y;
205
+ if (dx * dx + dy * dy < DRAG_THRESHOLD * DRAG_THRESHOLD)
206
+ return;
207
+ enqueue.emit({
208
+ type: "CREATE_EDGE",
209
+ fromElement,
210
+ toElement,
211
+ fromPoint: context.pressOrigin,
212
+ toPoint: event.point,
213
+ });
214
+ }),
215
+ },
216
+ guards: {
217
+ movedAndOnElement: ({ context, event }) => {
218
+ if (event.type !== "POINTER_MOVE" || !context.pressOrigin)
219
+ return false;
220
+ if (context.pressTarget?.kind !== "element")
221
+ return false;
222
+ // Dragging-on-shape moves the shape — only valid in `select` mode.
223
+ // In `draw-edge` mode the same gesture starts an edge from the shape.
224
+ if (context.mode !== "select")
225
+ return false;
226
+ return dragExceeded(context.pressOrigin, event.point);
227
+ },
228
+ movedAndOnHandle: ({ context, event }) => {
229
+ if (event.type !== "POINTER_MOVE" || !context.pressOrigin)
230
+ return false;
231
+ if (context.pressTarget?.kind !== "handle")
232
+ return false;
233
+ return dragExceeded(context.pressOrigin, event.point);
234
+ },
235
+ movedAndOnGroupHandle: ({ context, event }) => {
236
+ if (event.type !== "POINTER_MOVE" || !context.pressOrigin)
237
+ return false;
238
+ if (context.pressTarget?.kind !== "group-handle")
239
+ return false;
240
+ return dragExceeded(context.pressOrigin, event.point);
241
+ },
242
+ movedAndDrawing: ({ context, event }) => {
243
+ if (event.type !== "POINTER_MOVE" || !context.pressOrigin)
244
+ return false;
245
+ if (context.mode !== "draw-rect" &&
246
+ context.mode !== "draw-ellipse" &&
247
+ context.mode !== "draw-frame") {
248
+ return false;
249
+ }
250
+ return dragExceeded(context.pressOrigin, event.point);
251
+ },
252
+ movedAndDrawingLink: ({ context, event }) => {
253
+ if (event.type !== "POINTER_MOVE" || !context.pressOrigin)
254
+ return false;
255
+ if (context.mode !== "draw-edge")
256
+ return false;
257
+ return dragExceeded(context.pressOrigin, event.point);
258
+ },
259
+ movedAndOnLinkEndpoint: ({ context, event }) => {
260
+ if (event.type !== "POINTER_MOVE" || !context.pressOrigin)
261
+ return false;
262
+ if (context.pressTarget?.kind !== "edge-endpoint")
263
+ return false;
264
+ return dragExceeded(context.pressOrigin, event.point);
265
+ },
266
+ movedAndOnAnnotation: ({ context, event }) => {
267
+ if (event.type !== "POINTER_MOVE" || !context.pressOrigin)
268
+ return false;
269
+ if (context.pressTarget?.kind !== "annotation")
270
+ return false;
271
+ // Annotation pins live above shapes — drag works in select
272
+ // mode (default) and stays away from drawing modes so a user
273
+ // sketching a new shape doesn't accidentally grab a pin.
274
+ if (context.mode !== "select")
275
+ return false;
276
+ return dragExceeded(context.pressOrigin, event.point);
277
+ },
278
+ movedAndLasso: ({ context, event }) => {
279
+ if (event.type !== "POINTER_MOVE" || !context.pressOrigin)
280
+ return false;
281
+ if (context.mode !== "select")
282
+ return false;
283
+ if (context.pressTarget?.kind !== "empty")
284
+ return false;
285
+ return dragExceeded(context.pressOrigin, event.point);
286
+ },
287
+ },
288
+ }).createMachine({
289
+ id: "interaction",
290
+ initial: "idle",
291
+ context: initialContext(),
292
+ on: {
293
+ SET_MODE: {
294
+ target: ".idle",
295
+ actions: [
296
+ { type: "setMode", params: ({ event }) => ({ mode: event.mode }) },
297
+ { type: "resetGesture" },
298
+ ],
299
+ },
300
+ },
301
+ states: {
302
+ idle: {
303
+ on: {
304
+ POINTER_DOWN: {
305
+ target: "pressing",
306
+ actions: [
307
+ {
308
+ type: "startPress",
309
+ params: ({ event }) => ({
310
+ point: event.point,
311
+ target: event.target,
312
+ modifiers: event.modifiers ?? null,
313
+ }),
314
+ },
315
+ ],
316
+ },
317
+ },
318
+ },
319
+ pressing: {
320
+ on: {
321
+ POINTER_MOVE: [
322
+ {
323
+ guard: "movedAndOnHandle",
324
+ target: "draggingHandle",
325
+ actions: [
326
+ { type: "updateLast", params: ({ event }) => ({ point: event.point }) },
327
+ { type: "emitResizeElement" },
328
+ ],
329
+ },
330
+ {
331
+ guard: "movedAndOnGroupHandle",
332
+ target: "draggingGroupHandle",
333
+ actions: [
334
+ { type: "updateLast", params: ({ event }) => ({ point: event.point }) },
335
+ { type: "emitResizeGroup" },
336
+ ],
337
+ },
338
+ {
339
+ guard: "movedAndOnElement",
340
+ target: "draggingElement",
341
+ actions: [
342
+ { type: "updateLast", params: ({ event }) => ({ point: event.point }) },
343
+ { type: "emitMoveElement" },
344
+ ],
345
+ },
346
+ {
347
+ guard: "movedAndDrawing",
348
+ target: "drawing",
349
+ actions: [
350
+ {
351
+ type: "setDrawingType",
352
+ params: ({ context }) => ({
353
+ kind: context.mode === "draw-rect"
354
+ ? "rect"
355
+ : context.mode === "draw-frame"
356
+ ? "frame"
357
+ : "ellipse",
358
+ }),
359
+ },
360
+ { type: "updateLast", params: ({ event }) => ({ point: event.point }) },
361
+ ],
362
+ },
363
+ {
364
+ guard: "movedAndDrawingLink",
365
+ target: "drawingLink",
366
+ actions: [
367
+ { type: "updateLast", params: ({ event }) => ({ point: event.point }) },
368
+ { type: "emitLinkPreview" },
369
+ ],
370
+ },
371
+ {
372
+ guard: "movedAndOnLinkEndpoint",
373
+ target: "draggingLinkEndpoint",
374
+ actions: [
375
+ { type: "updateLast", params: ({ event }) => ({ point: event.point }) },
376
+ { type: "emitLinkEndpointPreview" },
377
+ ],
378
+ },
379
+ {
380
+ guard: "movedAndOnAnnotation",
381
+ target: "draggingAnnotation",
382
+ actions: [
383
+ { type: "updateLast", params: ({ event }) => ({ point: event.point }) },
384
+ { type: "emitMoveAnnotation" },
385
+ ],
386
+ },
387
+ {
388
+ guard: "movedAndLasso",
389
+ target: "lassoing",
390
+ actions: [
391
+ { type: "updateLast", params: ({ event }) => ({ point: event.point }) },
392
+ { type: "emitLassoProgress" },
393
+ ],
394
+ },
395
+ {
396
+ actions: [{ type: "updateLast", params: ({ event }) => ({ point: event.point }) }],
397
+ },
398
+ ],
399
+ POINTER_UP: { target: "idle", actions: [{ type: "resetGesture" }] },
400
+ POINTER_CANCEL: { target: "idle", actions: [{ type: "resetGesture" }] },
401
+ },
402
+ },
403
+ draggingElement: {
404
+ on: {
405
+ POINTER_MOVE: {
406
+ actions: [
407
+ { type: "updateLast", params: ({ event }) => ({ point: event.point }) },
408
+ { type: "emitMoveElement" },
409
+ ],
410
+ },
411
+ POINTER_UP: { target: "idle", actions: [{ type: "resetGesture" }] },
412
+ POINTER_CANCEL: { target: "idle", actions: [{ type: "resetGesture" }] },
413
+ },
414
+ },
415
+ draggingHandle: {
416
+ on: {
417
+ POINTER_MOVE: {
418
+ actions: [
419
+ { type: "updateLast", params: ({ event }) => ({ point: event.point }) },
420
+ { type: "emitResizeElement" },
421
+ ],
422
+ },
423
+ POINTER_UP: { target: "idle", actions: [{ type: "resetGesture" }] },
424
+ POINTER_CANCEL: { target: "idle", actions: [{ type: "resetGesture" }] },
425
+ },
426
+ },
427
+ draggingGroupHandle: {
428
+ on: {
429
+ POINTER_MOVE: {
430
+ actions: [
431
+ { type: "updateLast", params: ({ event }) => ({ point: event.point }) },
432
+ { type: "emitResizeGroup" },
433
+ ],
434
+ },
435
+ POINTER_UP: { target: "idle", actions: [{ type: "resetGesture" }] },
436
+ POINTER_CANCEL: { target: "idle", actions: [{ type: "resetGesture" }] },
437
+ },
438
+ },
439
+ drawing: {
440
+ on: {
441
+ POINTER_MOVE: {
442
+ actions: [{ type: "updateLast", params: ({ event }) => ({ point: event.point }) }],
443
+ },
444
+ POINTER_UP: {
445
+ target: "idle",
446
+ actions: [{ type: "maybeEmitCreate" }, { type: "resetGesture" }],
447
+ },
448
+ POINTER_CANCEL: { target: "idle", actions: [{ type: "resetGesture" }] },
449
+ },
450
+ },
451
+ drawingLink: {
452
+ on: {
453
+ POINTER_MOVE: {
454
+ actions: [
455
+ { type: "updateLast", params: ({ event }) => ({ point: event.point }) },
456
+ { type: "emitLinkPreview" },
457
+ ],
458
+ },
459
+ POINTER_UP: {
460
+ target: "idle",
461
+ actions: [
462
+ { type: "emitCreateLink" },
463
+ { type: "emitLinkPreviewClear" },
464
+ { type: "resetGesture" },
465
+ ],
466
+ },
467
+ POINTER_CANCEL: {
468
+ target: "idle",
469
+ actions: [{ type: "emitLinkPreviewClear" }, { type: "resetGesture" }],
470
+ },
471
+ },
472
+ },
473
+ draggingLinkEndpoint: {
474
+ on: {
475
+ POINTER_MOVE: {
476
+ actions: [
477
+ { type: "updateLast", params: ({ event }) => ({ point: event.point }) },
478
+ { type: "emitLinkEndpointPreview" },
479
+ ],
480
+ },
481
+ POINTER_UP: {
482
+ target: "idle",
483
+ actions: [{ type: "emitLinkEndpointUpdate" }, { type: "resetGesture" }],
484
+ },
485
+ POINTER_CANCEL: { target: "idle", actions: [{ type: "resetGesture" }] },
486
+ },
487
+ },
488
+ draggingAnnotation: {
489
+ on: {
490
+ POINTER_MOVE: {
491
+ actions: [
492
+ { type: "updateLast", params: ({ event }) => ({ point: event.point }) },
493
+ { type: "emitMoveAnnotation" },
494
+ ],
495
+ },
496
+ POINTER_UP: {
497
+ target: "idle",
498
+ actions: [{ type: "emitCommitAnnotationDrag" }, { type: "resetGesture" }],
499
+ },
500
+ POINTER_CANCEL: { target: "idle", actions: [{ type: "resetGesture" }] },
501
+ },
502
+ },
503
+ lassoing: {
504
+ on: {
505
+ POINTER_MOVE: {
506
+ actions: [
507
+ { type: "updateLast", params: ({ event }) => ({ point: event.point }) },
508
+ { type: "emitLassoProgress" },
509
+ ],
510
+ },
511
+ POINTER_UP: {
512
+ target: "idle",
513
+ actions: [{ type: "emitLassoCommit" }, { type: "resetGesture" }],
514
+ },
515
+ POINTER_CANCEL: {
516
+ target: "idle",
517
+ actions: [
518
+ {
519
+ type: "emitLassoCommit" /* fires LASSO_CLEAR only */,
520
+ },
521
+ { type: "resetGesture" },
522
+ ],
523
+ },
524
+ },
525
+ },
526
+ },
527
+ });
528
+ /**
529
+ * Host-side helper: decide whether POINTER_UP from `pressing` should produce
530
+ * a click-style effect (SELECT_REPLACE / SELECT_CLEAR). The machine emits
531
+ * dragging-effects directly; click effects are handled here because they
532
+ * depend on the up-point relative to the press origin, which the host
533
+ * computes the same way for both branches.
534
+ */
535
+ export const interpretPressEnd = (ctx, upPoint) => {
536
+ if (!ctx.pressOrigin || !ctx.pressTarget)
537
+ return null;
538
+ if (dragExceeded(ctx.pressOrigin, upPoint))
539
+ return null;
540
+ // In draw-edge mode a click without movement shouldn't toggle selection —
541
+ // the user is mid-mode and meant to start an edge.
542
+ if (ctx.mode === "draw-edge")
543
+ return null;
544
+ if (ctx.pressTarget.kind === "element") {
545
+ // Shift / meta click toggles the shape's membership in the current
546
+ // selection — every other modifier combination replaces.
547
+ const m = ctx.pressModifiers;
548
+ if (m && (m.shift || m.meta || m.ctrl)) {
549
+ return { type: "SELECT_TOGGLE", id: ctx.pressTarget.id };
550
+ }
551
+ return { type: "SELECT_REPLACE", id: ctx.pressTarget.id };
552
+ }
553
+ if (ctx.pressTarget.kind === "link") {
554
+ // Shift / meta / ctrl click toggles the link's membership in the
555
+ // combined selection (links + elements coexist); plain click replaces.
556
+ const m = ctx.pressModifiers;
557
+ if (m && (m.shift || m.meta || m.ctrl)) {
558
+ return { type: "SELECT_EDGE_TOGGLE", id: ctx.pressTarget.id };
559
+ }
560
+ return { type: "SELECT_EDGE_REPLACE", id: ctx.pressTarget.id };
561
+ }
562
+ if (ctx.pressTarget.kind === "empty" && ctx.mode === "select") {
563
+ return { type: "SELECT_CLEAR" };
564
+ }
565
+ return null;
566
+ };
567
+ export { boundsFromPoints };
568
+ //# sourceMappingURL=machine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"machine.js","sourceRoot":"","sources":["../src/machine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Editor modes. The active mode dictates how a pointer-down is interpreted —
3
+ *
4
+ * - `select` — click-or-drag-or-handle gesture; default interaction
5
+ * model. Clicks select shapes; drag on empty starts a lasso; drag on
6
+ * a selected shape moves it.
7
+ * - `hand` — dedicated pan mode (standard H tool). Pointer-down +
8
+ * drag pans the viewport regardless of what was hit; cursor reads
9
+ * as "grab" / "grabbing". Useful on touch or for users who don't
10
+ * like Space-modifier panning.
11
+ * - `draw-rect` / `draw-ellipse` — rubber-band shape creation.
12
+ * - `draw-text` — click places an empty text shape and opens its inline
13
+ * editor immediately (standard text tool).
14
+ * - `draw-edge` — edge creation from press-down shape (or empty) to
15
+ * release-shape (or empty).
16
+ * - `brush` — pressure-sensitive freehand stroke.
17
+ *
18
+ * Pan and zoom are STILL available as gestures (middle-mouse drag,
19
+ * Space+drag, mouse wheel zoom) regardless of mode — `hand` is the
20
+ * explicit single-button pan flow on top of that.
21
+ */
22
+ export type Mode = "select" | "hand" | "draw-rect" | "draw-ellipse" | "draw-text" | "draw-edge" | "draw-frame" | "brush";
23
+ export declare const DEFAULT_MODE: Mode;
24
+ //# sourceMappingURL=modes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modes.d.ts","sourceRoot":"","sources":["../src/modes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,MAAM,IAAI,GACZ,QAAQ,GACR,MAAM,GACN,WAAW,GACX,cAAc,GACd,WAAW,GACX,WAAW,GACX,YAAY,GACZ,OAAO,CAAC;AAEZ,eAAO,MAAM,YAAY,EAAE,IAAe,CAAC"}
package/dist/modes.js ADDED
@@ -0,0 +1,2 @@
1
+ export const DEFAULT_MODE = "select";
2
+ //# sourceMappingURL=modes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modes.js","sourceRoot":"","sources":["../src/modes.ts"],"names":[],"mappings":"AA+BA,MAAM,CAAC,MAAM,YAAY,GAAS,QAAQ,CAAC"}