@open-draw/canvas 0.0.0-stage → 0.2.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 (331) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +77 -2
  3. package/dist/a11y.d.ts +13 -0
  4. package/dist/a11y.d.ts.map +1 -0
  5. package/dist/a11y.js +41 -0
  6. package/dist/a11y.js.map +1 -0
  7. package/dist/camera.d.ts +96 -0
  8. package/dist/camera.d.ts.map +1 -0
  9. package/dist/camera.js +208 -0
  10. package/dist/camera.js.map +1 -0
  11. package/dist/capabilities/clipping/defs.d.ts +7 -0
  12. package/dist/capabilities/clipping/defs.d.ts.map +1 -0
  13. package/dist/capabilities/clipping/defs.js +2 -0
  14. package/dist/capabilities/clipping/defs.js.map +1 -0
  15. package/dist/capabilities/clipping/index.d.ts +3 -0
  16. package/dist/capabilities/clipping/index.d.ts.map +1 -0
  17. package/dist/capabilities/clipping/index.js +3 -0
  18. package/dist/capabilities/clipping/index.js.map +1 -0
  19. package/dist/capabilities/clipping/manager.d.ts +14 -0
  20. package/dist/capabilities/clipping/manager.d.ts.map +1 -0
  21. package/dist/capabilities/clipping/manager.js +75 -0
  22. package/dist/capabilities/clipping/manager.js.map +1 -0
  23. package/dist/capabilities/connector/defs.d.ts +9 -0
  24. package/dist/capabilities/connector/defs.d.ts.map +1 -0
  25. package/dist/capabilities/connector/defs.js +2 -0
  26. package/dist/capabilities/connector/defs.js.map +1 -0
  27. package/dist/capabilities/connector/index.d.ts +3 -0
  28. package/dist/capabilities/connector/index.d.ts.map +1 -0
  29. package/dist/capabilities/connector/index.js +3 -0
  30. package/dist/capabilities/connector/index.js.map +1 -0
  31. package/dist/capabilities/connector/manager.d.ts +19 -0
  32. package/dist/capabilities/connector/manager.d.ts.map +1 -0
  33. package/dist/capabilities/connector/manager.js +108 -0
  34. package/dist/capabilities/connector/manager.js.map +1 -0
  35. package/dist/capabilities/text-editing/defs.d.ts +2 -0
  36. package/dist/capabilities/text-editing/defs.d.ts.map +1 -0
  37. package/dist/capabilities/text-editing/defs.js +2 -0
  38. package/dist/capabilities/text-editing/defs.js.map +1 -0
  39. package/dist/capabilities/text-editing/index.d.ts +3 -0
  40. package/dist/capabilities/text-editing/index.d.ts.map +1 -0
  41. package/dist/capabilities/text-editing/index.js +3 -0
  42. package/dist/capabilities/text-editing/index.js.map +1 -0
  43. package/dist/capabilities/text-editing/manager.d.ts +20 -0
  44. package/dist/capabilities/text-editing/manager.d.ts.map +1 -0
  45. package/dist/capabilities/text-editing/manager.js +153 -0
  46. package/dist/capabilities/text-editing/manager.js.map +1 -0
  47. package/dist/editor.d.ts +94 -0
  48. package/dist/editor.d.ts.map +1 -0
  49. package/dist/editor.js +241 -0
  50. package/dist/editor.js.map +1 -0
  51. package/dist/eraser/eraser.d.ts +21 -0
  52. package/dist/eraser/eraser.d.ts.map +1 -0
  53. package/dist/eraser/eraser.js +147 -0
  54. package/dist/eraser/eraser.js.map +1 -0
  55. package/dist/eraser/index.d.ts +2 -0
  56. package/dist/eraser/index.d.ts.map +1 -0
  57. package/dist/eraser/index.js +2 -0
  58. package/dist/eraser/index.js.map +1 -0
  59. package/dist/export/index.d.ts +2 -0
  60. package/dist/export/index.d.ts.map +1 -0
  61. package/dist/export/index.js +2 -0
  62. package/dist/export/index.js.map +1 -0
  63. package/dist/export/png.d.ts +17 -0
  64. package/dist/export/png.d.ts.map +1 -0
  65. package/dist/export/png.js +130 -0
  66. package/dist/export/png.js.map +1 -0
  67. package/dist/gesture/gesture.d.ts +36 -0
  68. package/dist/gesture/gesture.d.ts.map +1 -0
  69. package/dist/gesture/gesture.js +268 -0
  70. package/dist/gesture/gesture.js.map +1 -0
  71. package/dist/gesture/index.d.ts +2 -0
  72. package/dist/gesture/index.d.ts.map +1 -0
  73. package/dist/gesture/index.js +2 -0
  74. package/dist/gesture/index.js.map +1 -0
  75. package/dist/index.d.ts +36 -0
  76. package/dist/index.d.ts.map +1 -0
  77. package/dist/index.js +37 -0
  78. package/dist/index.js.map +1 -0
  79. package/dist/input/commands.d.ts +12 -0
  80. package/dist/input/commands.d.ts.map +1 -0
  81. package/dist/input/commands.js +195 -0
  82. package/dist/input/commands.js.map +1 -0
  83. package/dist/input/index.d.ts +5 -0
  84. package/dist/input/index.d.ts.map +1 -0
  85. package/dist/input/index.js +5 -0
  86. package/dist/input/index.js.map +1 -0
  87. package/dist/input/keyboard.d.ts +13 -0
  88. package/dist/input/keyboard.d.ts.map +1 -0
  89. package/dist/input/keyboard.js +83 -0
  90. package/dist/input/keyboard.js.map +1 -0
  91. package/dist/input/keymap.d.ts +10 -0
  92. package/dist/input/keymap.d.ts.map +1 -0
  93. package/dist/input/keymap.js +75 -0
  94. package/dist/input/keymap.js.map +1 -0
  95. package/dist/input/utils.d.ts +5 -0
  96. package/dist/input/utils.d.ts.map +1 -0
  97. package/dist/input/utils.js +4 -0
  98. package/dist/input/utils.js.map +1 -0
  99. package/dist/interaction.d.ts +29 -0
  100. package/dist/interaction.d.ts.map +1 -0
  101. package/dist/interaction.js +248 -0
  102. package/dist/interaction.js.map +1 -0
  103. package/dist/perf/index.d.ts +2 -0
  104. package/dist/perf/index.d.ts.map +1 -0
  105. package/dist/perf/index.js +2 -0
  106. package/dist/perf/index.js.map +1 -0
  107. package/dist/perf/telemetry.d.ts +33 -0
  108. package/dist/perf/telemetry.d.ts.map +1 -0
  109. package/dist/perf/telemetry.js +145 -0
  110. package/dist/perf/telemetry.js.map +1 -0
  111. package/dist/registry.d.ts +68 -0
  112. package/dist/registry.d.ts.map +1 -0
  113. package/dist/registry.js +34 -0
  114. package/dist/registry.js.map +1 -0
  115. package/dist/renderer.d.ts +29 -0
  116. package/dist/renderer.d.ts.map +1 -0
  117. package/dist/renderer.js +257 -0
  118. package/dist/renderer.js.map +1 -0
  119. package/dist/selection/defs.d.ts +6 -0
  120. package/dist/selection/defs.d.ts.map +1 -0
  121. package/dist/selection/defs.js +2 -0
  122. package/dist/selection/defs.js.map +1 -0
  123. package/dist/selection/group.d.ts +7 -0
  124. package/dist/selection/group.d.ts.map +1 -0
  125. package/dist/selection/group.js +25 -0
  126. package/dist/selection/group.js.map +1 -0
  127. package/dist/selection/handles.d.ts +9 -0
  128. package/dist/selection/handles.d.ts.map +1 -0
  129. package/dist/selection/handles.js +19 -0
  130. package/dist/selection/handles.js.map +1 -0
  131. package/dist/selection/handlesView.d.ts +4 -0
  132. package/dist/selection/handlesView.d.ts.map +1 -0
  133. package/dist/selection/handlesView.js +98 -0
  134. package/dist/selection/handlesView.js.map +1 -0
  135. package/dist/selection/index.d.ts +10 -0
  136. package/dist/selection/index.d.ts.map +1 -0
  137. package/dist/selection/index.js +10 -0
  138. package/dist/selection/index.js.map +1 -0
  139. package/dist/selection/manager.d.ts +29 -0
  140. package/dist/selection/manager.d.ts.map +1 -0
  141. package/dist/selection/manager.js +195 -0
  142. package/dist/selection/manager.js.map +1 -0
  143. package/dist/selection/marquee.d.ts +11 -0
  144. package/dist/selection/marquee.d.ts.map +1 -0
  145. package/dist/selection/marquee.js +52 -0
  146. package/dist/selection/marquee.js.map +1 -0
  147. package/dist/selection/reparent.d.ts +12 -0
  148. package/dist/selection/reparent.d.ts.map +1 -0
  149. package/dist/selection/reparent.js +57 -0
  150. package/dist/selection/reparent.js.map +1 -0
  151. package/dist/selection/resize.d.ts +10 -0
  152. package/dist/selection/resize.d.ts.map +1 -0
  153. package/dist/selection/resize.js +66 -0
  154. package/dist/selection/resize.js.map +1 -0
  155. package/dist/selection/rotate.d.ts +18 -0
  156. package/dist/selection/rotate.d.ts.map +1 -0
  157. package/dist/selection/rotate.js +39 -0
  158. package/dist/selection/rotate.js.map +1 -0
  159. package/dist/shapes/arrow/defs.d.ts +17 -0
  160. package/dist/shapes/arrow/defs.d.ts.map +1 -0
  161. package/dist/shapes/arrow/defs.js +7 -0
  162. package/dist/shapes/arrow/defs.js.map +1 -0
  163. package/dist/shapes/arrow/geometry.d.ts +11 -0
  164. package/dist/shapes/arrow/geometry.d.ts.map +1 -0
  165. package/dist/shapes/arrow/geometry.js +77 -0
  166. package/dist/shapes/arrow/geometry.js.map +1 -0
  167. package/dist/shapes/arrow/index.d.ts +7 -0
  168. package/dist/shapes/arrow/index.d.ts.map +1 -0
  169. package/dist/shapes/arrow/index.js +23 -0
  170. package/dist/shapes/arrow/index.js.map +1 -0
  171. package/dist/shapes/arrow/render.d.ts +6 -0
  172. package/dist/shapes/arrow/render.d.ts.map +1 -0
  173. package/dist/shapes/arrow/render.js +84 -0
  174. package/dist/shapes/arrow/render.js.map +1 -0
  175. package/dist/shapes/ellipse/defs.d.ts +8 -0
  176. package/dist/shapes/ellipse/defs.d.ts.map +1 -0
  177. package/dist/shapes/ellipse/defs.js +2 -0
  178. package/dist/shapes/ellipse/defs.js.map +1 -0
  179. package/dist/shapes/ellipse/geometry.d.ts +9 -0
  180. package/dist/shapes/ellipse/geometry.d.ts.map +1 -0
  181. package/dist/shapes/ellipse/geometry.js +74 -0
  182. package/dist/shapes/ellipse/geometry.js.map +1 -0
  183. package/dist/shapes/ellipse/index.d.ts +7 -0
  184. package/dist/shapes/ellipse/index.d.ts.map +1 -0
  185. package/dist/shapes/ellipse/index.js +21 -0
  186. package/dist/shapes/ellipse/index.js.map +1 -0
  187. package/dist/shapes/ellipse/render.d.ts +6 -0
  188. package/dist/shapes/ellipse/render.d.ts.map +1 -0
  189. package/dist/shapes/ellipse/render.js +39 -0
  190. package/dist/shapes/ellipse/render.js.map +1 -0
  191. package/dist/shapes/frame/defs.d.ts +9 -0
  192. package/dist/shapes/frame/defs.d.ts.map +1 -0
  193. package/dist/shapes/frame/defs.js +8 -0
  194. package/dist/shapes/frame/defs.js.map +1 -0
  195. package/dist/shapes/frame/geometry.d.ts +4 -0
  196. package/dist/shapes/frame/geometry.d.ts.map +1 -0
  197. package/dist/shapes/frame/geometry.js +66 -0
  198. package/dist/shapes/frame/geometry.js.map +1 -0
  199. package/dist/shapes/frame/index.d.ts +7 -0
  200. package/dist/shapes/frame/index.d.ts.map +1 -0
  201. package/dist/shapes/frame/index.js +20 -0
  202. package/dist/shapes/frame/index.js.map +1 -0
  203. package/dist/shapes/frame/render.d.ts +6 -0
  204. package/dist/shapes/frame/render.d.ts.map +1 -0
  205. package/dist/shapes/frame/render.js +73 -0
  206. package/dist/shapes/frame/render.js.map +1 -0
  207. package/dist/shapes/group/defs.d.ts +6 -0
  208. package/dist/shapes/group/defs.d.ts.map +1 -0
  209. package/dist/shapes/group/defs.js +2 -0
  210. package/dist/shapes/group/defs.js.map +1 -0
  211. package/dist/shapes/group/geometry.d.ts +8 -0
  212. package/dist/shapes/group/geometry.d.ts.map +1 -0
  213. package/dist/shapes/group/geometry.js +19 -0
  214. package/dist/shapes/group/geometry.js.map +1 -0
  215. package/dist/shapes/group/index.d.ts +7 -0
  216. package/dist/shapes/group/index.d.ts.map +1 -0
  217. package/dist/shapes/group/index.js +23 -0
  218. package/dist/shapes/group/index.js.map +1 -0
  219. package/dist/shapes/group/render.d.ts +6 -0
  220. package/dist/shapes/group/render.d.ts.map +1 -0
  221. package/dist/shapes/group/render.js +9 -0
  222. package/dist/shapes/group/render.js.map +1 -0
  223. package/dist/shapes/image/defs.d.ts +10 -0
  224. package/dist/shapes/image/defs.d.ts.map +1 -0
  225. package/dist/shapes/image/defs.js +2 -0
  226. package/dist/shapes/image/defs.js.map +1 -0
  227. package/dist/shapes/image/geometry.d.ts +21 -0
  228. package/dist/shapes/image/geometry.d.ts.map +1 -0
  229. package/dist/shapes/image/geometry.js +79 -0
  230. package/dist/shapes/image/geometry.js.map +1 -0
  231. package/dist/shapes/image/handlers.d.ts +10 -0
  232. package/dist/shapes/image/handlers.d.ts.map +1 -0
  233. package/dist/shapes/image/handlers.js +85 -0
  234. package/dist/shapes/image/handlers.js.map +1 -0
  235. package/dist/shapes/image/index.d.ts +8 -0
  236. package/dist/shapes/image/index.d.ts.map +1 -0
  237. package/dist/shapes/image/index.js +21 -0
  238. package/dist/shapes/image/index.js.map +1 -0
  239. package/dist/shapes/image/render.d.ts +6 -0
  240. package/dist/shapes/image/render.d.ts.map +1 -0
  241. package/dist/shapes/image/render.js +28 -0
  242. package/dist/shapes/image/render.js.map +1 -0
  243. package/dist/shapes/ink/defs.d.ts +10 -0
  244. package/dist/shapes/ink/defs.d.ts.map +1 -0
  245. package/dist/shapes/ink/defs.js +13 -0
  246. package/dist/shapes/ink/defs.js.map +1 -0
  247. package/dist/shapes/ink/geometry.d.ts +4 -0
  248. package/dist/shapes/ink/geometry.d.ts.map +1 -0
  249. package/dist/shapes/ink/geometry.js +67 -0
  250. package/dist/shapes/ink/geometry.js.map +1 -0
  251. package/dist/shapes/ink/index.d.ts +9 -0
  252. package/dist/shapes/ink/index.d.ts.map +1 -0
  253. package/dist/shapes/ink/index.js +22 -0
  254. package/dist/shapes/ink/index.js.map +1 -0
  255. package/dist/shapes/ink/rdp.d.ts +2 -0
  256. package/dist/shapes/ink/rdp.d.ts.map +1 -0
  257. package/dist/shapes/ink/rdp.js +37 -0
  258. package/dist/shapes/ink/rdp.js.map +1 -0
  259. package/dist/shapes/ink/render.d.ts +7 -0
  260. package/dist/shapes/ink/render.d.ts.map +1 -0
  261. package/dist/shapes/ink/render.js +81 -0
  262. package/dist/shapes/ink/render.js.map +1 -0
  263. package/dist/shapes/note/defs.d.ts +7 -0
  264. package/dist/shapes/note/defs.d.ts.map +1 -0
  265. package/dist/shapes/note/defs.js +2 -0
  266. package/dist/shapes/note/defs.js.map +1 -0
  267. package/dist/shapes/note/geometry.d.ts +11 -0
  268. package/dist/shapes/note/geometry.d.ts.map +1 -0
  269. package/dist/shapes/note/geometry.js +70 -0
  270. package/dist/shapes/note/geometry.js.map +1 -0
  271. package/dist/shapes/note/index.d.ts +7 -0
  272. package/dist/shapes/note/index.d.ts.map +1 -0
  273. package/dist/shapes/note/index.js +41 -0
  274. package/dist/shapes/note/index.js.map +1 -0
  275. package/dist/shapes/note/render.d.ts +6 -0
  276. package/dist/shapes/note/render.d.ts.map +1 -0
  277. package/dist/shapes/note/render.js +38 -0
  278. package/dist/shapes/note/render.js.map +1 -0
  279. package/dist/shapes/rect/defs.d.ts +9 -0
  280. package/dist/shapes/rect/defs.d.ts.map +1 -0
  281. package/dist/shapes/rect/defs.js +2 -0
  282. package/dist/shapes/rect/defs.js.map +1 -0
  283. package/dist/shapes/rect/geometry.d.ts +9 -0
  284. package/dist/shapes/rect/geometry.d.ts.map +1 -0
  285. package/dist/shapes/rect/geometry.js +68 -0
  286. package/dist/shapes/rect/geometry.js.map +1 -0
  287. package/dist/shapes/rect/index.d.ts +7 -0
  288. package/dist/shapes/rect/index.d.ts.map +1 -0
  289. package/dist/shapes/rect/index.js +22 -0
  290. package/dist/shapes/rect/index.js.map +1 -0
  291. package/dist/shapes/rect/render.d.ts +6 -0
  292. package/dist/shapes/rect/render.d.ts.map +1 -0
  293. package/dist/shapes/rect/render.js +42 -0
  294. package/dist/shapes/rect/render.js.map +1 -0
  295. package/dist/shapes/text/defs.d.ts +9 -0
  296. package/dist/shapes/text/defs.d.ts.map +1 -0
  297. package/dist/shapes/text/defs.js +2 -0
  298. package/dist/shapes/text/defs.js.map +1 -0
  299. package/dist/shapes/text/geometry.d.ts +9 -0
  300. package/dist/shapes/text/geometry.d.ts.map +1 -0
  301. package/dist/shapes/text/geometry.js +68 -0
  302. package/dist/shapes/text/geometry.js.map +1 -0
  303. package/dist/shapes/text/index.d.ts +7 -0
  304. package/dist/shapes/text/index.d.ts.map +1 -0
  305. package/dist/shapes/text/index.js +43 -0
  306. package/dist/shapes/text/index.js.map +1 -0
  307. package/dist/shapes/text/render.d.ts +6 -0
  308. package/dist/shapes/text/render.d.ts.map +1 -0
  309. package/dist/shapes/text/render.js +23 -0
  310. package/dist/shapes/text/render.js.map +1 -0
  311. package/dist/store/index.d.ts +5 -0
  312. package/dist/store/index.d.ts.map +1 -0
  313. package/dist/store/index.js +5 -0
  314. package/dist/store/index.js.map +1 -0
  315. package/dist/store/snapshot.d.ts +5 -0
  316. package/dist/store/snapshot.d.ts.map +1 -0
  317. package/dist/store/snapshot.js +76 -0
  318. package/dist/store/snapshot.js.map +1 -0
  319. package/dist/store/store.d.ts +52 -0
  320. package/dist/store/store.d.ts.map +1 -0
  321. package/dist/store/store.js +252 -0
  322. package/dist/store/store.js.map +1 -0
  323. package/dist/store/types.d.ts +13 -0
  324. package/dist/store/types.d.ts.map +1 -0
  325. package/dist/store/types.js +2 -0
  326. package/dist/store/types.js.map +1 -0
  327. package/dist/store/zorder.d.ts +4 -0
  328. package/dist/store/zorder.d.ts.map +1 -0
  329. package/dist/store/zorder.js +53 -0
  330. package/dist/store/zorder.js.map +1 -0
  331. package/package.json +29 -4
@@ -0,0 +1,5 @@
1
+ export * from './keymap.js';
2
+ export * from './commands.js';
3
+ export * from './keyboard.js';
4
+ export * from './utils.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/input/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC"}
@@ -0,0 +1,5 @@
1
+ export * from './keymap.js';
2
+ export * from './commands.js';
3
+ export * from './keyboard.js';
4
+ export * from './utils.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/input/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { CanvasEditor } from '../editor.js';
2
+ import { type KeyBinding } from './keymap.js';
3
+ export declare class KeyboardDispatcher {
4
+ private editor;
5
+ private keymap;
6
+ private target;
7
+ constructor(editor: CanvasEditor, customKeymap?: readonly KeyBinding[]);
8
+ attach(target?: HTMLElement | Window): void;
9
+ detach(): void;
10
+ private onKeyDown;
11
+ private matches;
12
+ }
13
+ //# sourceMappingURL=keyboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyboard.d.ts","sourceRoot":"","sources":["../../src/input/keyboard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,EAAkB,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAG9D,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,MAAM,CAAqC;IAEnD,YAAY,MAAM,EAAE,YAAY,EAAE,YAAY,CAAC,EAAE,SAAS,UAAU,EAAE,EAGrE;IAED,MAAM,CAAC,MAAM,GAAE,WAAW,GAAG,MAAe,GAAG,IAAI,CAGlD;IAED,MAAM,IAAI,IAAI,CAKb;IAED,OAAO,CAAC,SAAS,CAkDf;IAEF,OAAO,CAAC,OAAO;CAYhB"}
@@ -0,0 +1,83 @@
1
+ import { executeCommand } from './commands.js';
2
+ import { DEFAULT_KEYMAP } from './keymap.js';
3
+ import { isMod } from './utils.js';
4
+ export class KeyboardDispatcher {
5
+ editor;
6
+ keymap;
7
+ target = null;
8
+ constructor(editor, customKeymap) {
9
+ this.editor = editor;
10
+ this.keymap = customKeymap ?? DEFAULT_KEYMAP;
11
+ }
12
+ attach(target = window) {
13
+ this.target = target;
14
+ target.addEventListener('keydown', this.onKeyDown);
15
+ }
16
+ detach() {
17
+ if (this.target) {
18
+ this.target.removeEventListener('keydown', this.onKeyDown);
19
+ this.target = null;
20
+ }
21
+ }
22
+ onKeyDown = (e) => {
23
+ // 1. Editing mode suspends all canvas shortcuts except Escape
24
+ if (this.editor.mode === 'editing') {
25
+ if (e.key === 'Escape') {
26
+ e.preventDefault();
27
+ this.editor.textEditing.commit();
28
+ }
29
+ return;
30
+ }
31
+ // 2. Ignore canvas shortcuts if an input, textarea, or contenteditable element has focus
32
+ const activeEl = typeof document !== 'undefined' ? document.activeElement : null;
33
+ if (activeEl &&
34
+ (activeEl.tagName === 'INPUT' ||
35
+ activeEl.tagName === 'TEXTAREA' ||
36
+ activeEl.isContentEditable)) {
37
+ return;
38
+ }
39
+ // 3. Enter / Space selects focused shape wrapper (from keyboard navigation)
40
+ if (e.key === 'Enter' || e.key === ' ') {
41
+ const shapeWrapper = activeEl?.classList?.contains('od-shape')
42
+ ? activeEl
43
+ : (activeEl?.closest('.od-shape') ?? null);
44
+ const shapeId = shapeWrapper?.getAttribute('data-id');
45
+ if (shapeId) {
46
+ e.preventDefault();
47
+ this.editor.selectShape(shapeId);
48
+ return;
49
+ }
50
+ }
51
+ // 4. Match against keymap
52
+ const eventMod = isMod(e);
53
+ for (const binding of this.keymap) {
54
+ if (this.matches(binding, e, eventMod)) {
55
+ e.preventDefault();
56
+ executeCommand(binding.command, this.editor);
57
+ if (binding.command === 'cycle-forward' || binding.command === 'cycle-backward') {
58
+ const sel = this.editor.selection;
59
+ if (sel.length > 0) {
60
+ const wrapper = this.editor.getShapeWrapper(sel[sel.length - 1]);
61
+ wrapper?.focus();
62
+ }
63
+ }
64
+ return;
65
+ }
66
+ }
67
+ };
68
+ matches(b, e, eventMod) {
69
+ const keyMatches = b.key.length === 1
70
+ ? e.key.toLowerCase() === b.key.toLowerCase()
71
+ : e.key === b.key;
72
+ if (!keyMatches)
73
+ return false;
74
+ if (b.mod !== undefined && b.mod !== eventMod)
75
+ return false;
76
+ if (b.shift !== undefined && b.shift !== e.shiftKey)
77
+ return false;
78
+ if (b.alt !== undefined && b.alt !== e.altKey)
79
+ return false;
80
+ return true;
81
+ }
82
+ }
83
+ //# sourceMappingURL=keyboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyboard.js","sourceRoot":"","sources":["../../src/input/keyboard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export type CommandId = 'select-all' | 'clear-selection' | 'cycle-forward' | 'cycle-backward' | 'nudge-up' | 'nudge-down' | 'nudge-left' | 'nudge-right' | 'nudge-up-big' | 'nudge-down-big' | 'nudge-left-big' | 'nudge-right-big' | 'delete' | 'duplicate' | 'clipboard-copy' | 'clipboard-cut' | 'clipboard-paste' | 'undo' | 'redo' | 'zoom-reset' | 'zoom-fit' | 'zoom-selection' | 'tool-select' | 'tool-rect' | 'tool-ellipse' | 'tool-text' | 'tool-frame' | 'tool-note' | 'tool-arrow' | 'tool-ink' | 'tool-eraser' | 'tool-pan' | 'tool-image' | 'bring-to-front' | 'send-to-back' | 'bring-forward' | 'send-backward';
2
+ export interface KeyBinding {
3
+ readonly key: string;
4
+ readonly mod?: boolean;
5
+ readonly shift?: boolean;
6
+ readonly alt?: boolean;
7
+ readonly command: CommandId;
8
+ }
9
+ export declare const DEFAULT_KEYMAP: readonly KeyBinding[];
10
+ //# sourceMappingURL=keymap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keymap.d.ts","sourceRoot":"","sources":["../../src/input/keymap.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GACjB,YAAY,GACZ,iBAAiB,GACjB,eAAe,GACf,gBAAgB,GAChB,UAAU,GACV,YAAY,GACZ,YAAY,GACZ,aAAa,GACb,cAAc,GACd,gBAAgB,GAChB,gBAAgB,GAChB,iBAAiB,GACjB,QAAQ,GACR,WAAW,GACX,gBAAgB,GAChB,eAAe,GACf,iBAAiB,GACjB,MAAM,GACN,MAAM,GACN,YAAY,GACZ,UAAU,GACV,gBAAgB,GAChB,aAAa,GACb,WAAW,GACX,cAAc,GACd,WAAW,GACX,YAAY,GACZ,WAAW,GACX,YAAY,GACZ,UAAU,GACV,aAAa,GACb,UAAU,GACV,YAAY,GACZ,gBAAgB,GAChB,cAAc,GACd,eAAe,GACf,eAAe,CAAC;AAEpB,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC;CAC7B;AAED,eAAO,MAAM,cAAc,EAAE,SAAS,UAAU,EAgF/C,CAAC"}
@@ -0,0 +1,75 @@
1
+ export const DEFAULT_KEYMAP = [
2
+ // Selection
3
+ { key: 'Tab', shift: false, command: 'cycle-forward' },
4
+ { key: 'Tab', shift: true, command: 'cycle-backward' },
5
+ { key: 'Escape', command: 'clear-selection' },
6
+ { key: 'a', mod: true, command: 'select-all' },
7
+ { key: 'A', mod: true, command: 'select-all' },
8
+ // Nudge
9
+ { key: 'ArrowUp', shift: false, command: 'nudge-up' },
10
+ { key: 'ArrowDown', shift: false, command: 'nudge-down' },
11
+ { key: 'ArrowLeft', shift: false, command: 'nudge-left' },
12
+ { key: 'ArrowRight', shift: false, command: 'nudge-right' },
13
+ { key: 'ArrowUp', shift: true, command: 'nudge-up-big' },
14
+ { key: 'ArrowDown', shift: true, command: 'nudge-down-big' },
15
+ { key: 'ArrowLeft', shift: true, command: 'nudge-left-big' },
16
+ { key: 'ArrowRight', shift: true, command: 'nudge-right-big' },
17
+ // Edit / Delete / Duplicate
18
+ { key: 'Delete', command: 'delete' },
19
+ { key: 'Backspace', command: 'delete' },
20
+ { key: 'd', mod: true, command: 'duplicate' },
21
+ { key: 'D', mod: true, command: 'duplicate' },
22
+ // Clipboard
23
+ { key: 'c', mod: true, command: 'clipboard-copy' },
24
+ { key: 'C', mod: true, command: 'clipboard-copy' },
25
+ { key: 'x', mod: true, command: 'clipboard-cut' },
26
+ { key: 'X', mod: true, command: 'clipboard-cut' },
27
+ { key: 'v', mod: true, command: 'clipboard-paste' },
28
+ { key: 'V', mod: true, command: 'clipboard-paste' },
29
+ // Undo / Redo
30
+ { key: 'z', mod: true, shift: false, command: 'undo' },
31
+ { key: 'Z', mod: true, shift: false, command: 'undo' },
32
+ { key: 'z', mod: true, shift: true, command: 'redo' },
33
+ { key: 'Z', mod: true, shift: true, command: 'redo' },
34
+ { key: 'y', mod: true, command: 'redo' },
35
+ { key: 'Y', mod: true, command: 'redo' },
36
+ // Zoom
37
+ { key: '0', mod: true, command: 'zoom-reset' },
38
+ { key: '1', shift: true, command: 'zoom-fit' },
39
+ { key: '!', shift: true, command: 'zoom-fit' },
40
+ { key: '2', shift: true, command: 'zoom-selection' },
41
+ { key: '@', shift: true, command: 'zoom-selection' },
42
+ // Tools
43
+ { key: 'v', mod: false, shift: false, alt: false, command: 'tool-select' },
44
+ { key: 'V', mod: false, shift: false, alt: false, command: 'tool-select' },
45
+ { key: 'r', mod: false, shift: false, alt: false, command: 'tool-rect' },
46
+ { key: 'R', mod: false, shift: false, alt: false, command: 'tool-rect' },
47
+ { key: 'o', mod: false, shift: false, alt: false, command: 'tool-ellipse' },
48
+ { key: 'O', mod: false, shift: false, alt: false, command: 'tool-ellipse' },
49
+ { key: 't', mod: false, shift: false, alt: false, command: 'tool-text' },
50
+ { key: 'T', mod: false, shift: false, alt: false, command: 'tool-text' },
51
+ { key: 'f', mod: false, shift: false, alt: false, command: 'tool-frame' },
52
+ { key: 'F', mod: false, shift: false, alt: false, command: 'tool-frame' },
53
+ { key: 'n', mod: false, shift: false, alt: false, command: 'tool-note' },
54
+ { key: 'N', mod: false, shift: false, alt: false, command: 'tool-note' },
55
+ { key: 'a', mod: false, shift: false, alt: false, command: 'tool-arrow' },
56
+ { key: 'A', mod: false, shift: false, alt: false, command: 'tool-arrow' },
57
+ { key: 'd', mod: false, shift: false, alt: false, command: 'tool-ink' },
58
+ { key: 'D', mod: false, shift: false, alt: false, command: 'tool-ink' },
59
+ { key: 'p', mod: false, shift: false, alt: false, command: 'tool-ink' },
60
+ { key: 'P', mod: false, shift: false, alt: false, command: 'tool-ink' },
61
+ { key: 'e', mod: false, shift: false, alt: false, command: 'tool-eraser' },
62
+ { key: 'E', mod: false, shift: false, alt: false, command: 'tool-eraser' },
63
+ { key: 'h', mod: false, shift: false, alt: false, command: 'tool-pan' },
64
+ { key: 'H', mod: false, shift: false, alt: false, command: 'tool-pan' },
65
+ { key: 'i', mod: false, shift: false, alt: false, command: 'tool-image' },
66
+ { key: 'I', mod: false, shift: false, alt: false, command: 'tool-image' },
67
+ // Z-Order
68
+ { key: ']', mod: true, shift: true, command: 'bring-to-front' },
69
+ { key: '}', mod: true, shift: true, command: 'bring-to-front' },
70
+ { key: '[', mod: true, shift: true, command: 'send-to-back' },
71
+ { key: '{', mod: true, shift: true, command: 'send-to-back' },
72
+ { key: ']', alt: true, command: 'bring-forward' },
73
+ { key: '[', alt: true, command: 'send-backward' },
74
+ ];
75
+ //# sourceMappingURL=keymap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keymap.js","sourceRoot":"","sources":["../../src/input/keymap.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare function isMod(e: {
2
+ ctrlKey: boolean;
3
+ metaKey: boolean;
4
+ }): boolean;
5
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/input/utils.ts"],"names":[],"mappings":"AAAA,wBAAgB,KAAK,CAAC,CAAC,EAAE;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAExE"}
@@ -0,0 +1,4 @@
1
+ export function isMod(e) {
2
+ return e.ctrlKey || e.metaKey;
3
+ }
4
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/input/utils.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,KAAK,CAAC,CAAyC;IAC7D,OAAO,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC;AAChC,CAAC"}
@@ -0,0 +1,29 @@
1
+ import type { CanvasEditor } from './editor.js';
2
+ export declare class PointerInteractionController {
3
+ private editor;
4
+ private container;
5
+ private eraser;
6
+ private clickedShapeId;
7
+ private lastPointerDownShift;
8
+ private cachedContainerRect;
9
+ private pendingPointerMove;
10
+ private rafMoveId;
11
+ private isMarquee;
12
+ private marqueeStart;
13
+ private isShiftMarquee;
14
+ private initialSelectionBeforeMarquee;
15
+ private marqueeOverlay;
16
+ private isDrawing;
17
+ private currentInkShapeId;
18
+ private currentInkPts;
19
+ constructor(editor: CanvasEditor);
20
+ attach(container: HTMLElement): void;
21
+ detach(): void;
22
+ private onPointerDown;
23
+ private onSelectPointerDown;
24
+ private onInkPointerDown;
25
+ private onShapeCreatePointerDown;
26
+ private onPointerMove;
27
+ private onPointerUp;
28
+ }
29
+ //# sourceMappingURL=interaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interaction.d.ts","sourceRoot":"","sources":["../src/interaction.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAShD,qBAAa,4BAA4B;IACvC,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,SAAS,CAA4B;IAC7C,OAAO,CAAC,MAAM,CAAyB;IAEvC,OAAO,CAAC,cAAc,CAAwB;IAC9C,OAAO,CAAC,oBAAoB,CAAS;IACrC,OAAO,CAAC,mBAAmB,CAA8C;IACzE,OAAO,CAAC,kBAAkB,CAAuD;IACjF,OAAO,CAAC,SAAS,CAAuB;IAExC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,YAAY,CAAsB;IAC1C,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,6BAA6B,CAA0B;IAC/D,OAAO,CAAC,cAAc,CAAwB;IAE9C,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,iBAAiB,CAAwB;IACjD,OAAO,CAAC,aAAa,CAAgB;IAErC,YAAY,MAAM,EAAE,YAAY,EAG/B;IAED,MAAM,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI,CAKnC;IAED,MAAM,IAAI,IAAI,CAcb;IAED,OAAO,CAAC,aAAa,CAoBnB;IAEF,OAAO,CAAC,mBAAmB;IAkD3B,OAAO,CAAC,gBAAgB;IAkBxB,OAAO,CAAC,wBAAwB;IAqBhC,OAAO,CAAC,aAAa,CAiDnB;IAEF,OAAO,CAAC,WAAW,CA+CjB;CACH"}
@@ -0,0 +1,248 @@
1
+ import { findSuggestedParent } from './capabilities/clipping/index.js';
2
+ import { simplifyRDP } from './shapes/ink/index.js';
3
+ import { isMod } from './input/utils.js';
4
+ import { findGroupForMember } from './selection/group.js';
5
+ import { computeMarqueeBounds, findIntersectingShapes, MarqueeOverlay } from './selection/marquee.js';
6
+ import { StrokeEraserController } from './eraser/index.js';
7
+ export class PointerInteractionController {
8
+ editor;
9
+ container = null;
10
+ eraser;
11
+ clickedShapeId = null;
12
+ lastPointerDownShift = false;
13
+ cachedContainerRect = null;
14
+ pendingPointerMove = null;
15
+ rafMoveId = null;
16
+ isMarquee = false;
17
+ marqueeStart = null;
18
+ isShiftMarquee = false;
19
+ initialSelectionBeforeMarquee = [];
20
+ marqueeOverlay = new MarqueeOverlay();
21
+ isDrawing = false;
22
+ currentInkShapeId = null;
23
+ currentInkPts = [];
24
+ constructor(editor) {
25
+ this.editor = editor;
26
+ this.eraser = new StrokeEraserController(editor);
27
+ }
28
+ attach(container) {
29
+ this.container = container;
30
+ container.addEventListener('pointerdown', this.onPointerDown);
31
+ window.addEventListener('pointermove', this.onPointerMove);
32
+ window.addEventListener('pointerup', this.onPointerUp);
33
+ }
34
+ detach() {
35
+ if (this.container) {
36
+ this.container.removeEventListener('pointerdown', this.onPointerDown);
37
+ this.container = null;
38
+ }
39
+ window.removeEventListener('pointermove', this.onPointerMove);
40
+ window.removeEventListener('pointerup', this.onPointerUp);
41
+ if (this.rafMoveId !== null && typeof cancelAnimationFrame !== 'undefined') {
42
+ cancelAnimationFrame(this.rafMoveId);
43
+ this.rafMoveId = null;
44
+ }
45
+ this.pendingPointerMove = null;
46
+ this.cachedContainerRect = null;
47
+ this.marqueeOverlay.hide();
48
+ }
49
+ onPointerDown = (e) => {
50
+ if (this.editor.mode === 'editing') {
51
+ this.editor.textEditing.commit();
52
+ }
53
+ const r = this.container?.getBoundingClientRect() ?? { left: 0, top: 0 };
54
+ this.cachedContainerRect = { left: r.left, top: r.top };
55
+ const screenPt = { x: e.clientX - r.left, y: e.clientY - r.top };
56
+ const pagePt = this.editor.camera.screenToPage(screenPt);
57
+ const activeTool = this.editor.getTool();
58
+ if (activeTool === 'select') {
59
+ this.onSelectPointerDown(e, pagePt);
60
+ }
61
+ else if (activeTool === 'eraser') {
62
+ this.eraser.start(pagePt);
63
+ }
64
+ else if (activeTool === 'ink' || activeTool === 'draw' || activeTool === 'highlighter') {
65
+ this.onInkPointerDown(activeTool, pagePt);
66
+ }
67
+ else if (this.editor.registry.has(activeTool)) {
68
+ this.onShapeCreatePointerDown(activeTool, pagePt);
69
+ }
70
+ };
71
+ onSelectPointerDown(e, pagePt) {
72
+ this.lastPointerDownShift = e.shiftKey;
73
+ const target = e.target;
74
+ const handleEl = target?.closest('.od-handle');
75
+ if (handleEl && this.editor.selection.length === 1) {
76
+ const handleType = handleEl.getAttribute('data-handle');
77
+ if (handleType) {
78
+ if (handleType === 'rotate') {
79
+ if (this.editor.gesture.startRotate(this.editor.selection[0], pagePt))
80
+ return;
81
+ }
82
+ else {
83
+ if (this.editor.gesture.startResize(handleType, this.editor.selection[0], pagePt))
84
+ return;
85
+ }
86
+ }
87
+ }
88
+ const shapeWrapper = target?.closest('.od-shape');
89
+ const shapeId = shapeWrapper?.getAttribute('data-id');
90
+ if (!shapeId) {
91
+ if (!e.shiftKey) {
92
+ this.editor.clearSelection();
93
+ }
94
+ this.isMarquee = true;
95
+ this.marqueeStart = pagePt;
96
+ this.isShiftMarquee = e.shiftKey;
97
+ this.initialSelectionBeforeMarquee = e.shiftKey ? [...this.editor.selection] : [];
98
+ return;
99
+ }
100
+ let targetId = shapeId;
101
+ if (!isMod(e)) {
102
+ const group = findGroupForMember(shapeId, this.editor.store, this.editor.registry);
103
+ if (group && !e.shiftKey) {
104
+ targetId = group.id;
105
+ }
106
+ }
107
+ this.clickedShapeId = targetId;
108
+ if (e.shiftKey) {
109
+ this.editor.toggleSelection(targetId);
110
+ }
111
+ else if (!this.editor.isSelected(targetId)) {
112
+ this.editor.selectShape(targetId);
113
+ }
114
+ if (this.editor.isSelected(targetId)) {
115
+ this.editor.gesture.startMove(targetId, pagePt);
116
+ }
117
+ }
118
+ onInkPointerDown(tool, pagePt) {
119
+ const shapeType = tool === 'highlighter' ? 'highlighter' : 'ink';
120
+ const def = this.editor.registry.get(shapeType);
121
+ if (!def)
122
+ return;
123
+ this.isDrawing = true;
124
+ this.currentInkPts = [pagePt.x, pagePt.y];
125
+ this.editor.store.beginTransaction();
126
+ const shape = this.editor.createShape({
127
+ type: shapeType,
128
+ x: pagePt.x,
129
+ y: pagePt.y,
130
+ props: { ...def.defaultProps(), pts: [pagePt.x, pagePt.y] },
131
+ });
132
+ this.currentInkShapeId = shape.id;
133
+ this.editor.selectShape(shape.id);
134
+ }
135
+ onShapeCreatePointerDown(tool, pagePt) {
136
+ const def = this.editor.registry.get(tool);
137
+ if (!def)
138
+ return;
139
+ this.editor.store.transact(() => {
140
+ const shape = this.editor.createShape({
141
+ type: tool,
142
+ x: pagePt.x,
143
+ y: pagePt.y,
144
+ props: def.defaultProps(),
145
+ });
146
+ const bounds = def.geometry.bounds(shape);
147
+ const suggested = findSuggestedParent(bounds, this.editor.store.listShapes(), this.editor.registry, shape.id);
148
+ if (suggested) {
149
+ this.editor.store.updateShape(shape.id, { meta: { ...shape.meta, parent: suggested.id } });
150
+ }
151
+ this.editor.selectShape(shape.id);
152
+ });
153
+ this.editor.setTool('select');
154
+ }
155
+ onPointerMove = (e) => {
156
+ this.editor.telemetry.recordInput(e.timeStamp || performance.now());
157
+ const r = this.cachedContainerRect ?? (this.container?.getBoundingClientRect() ?? { left: 0, top: 0 });
158
+ const screenPt = { x: e.clientX - r.left, y: e.clientY - r.top };
159
+ const currentPagePt = this.editor.camera.screenToPage(screenPt);
160
+ if (this.editor.gesture.isActive) {
161
+ this.pendingPointerMove = { pagePt: currentPagePt, event: e };
162
+ if (this.rafMoveId === null && typeof requestAnimationFrame !== 'undefined') {
163
+ this.rafMoveId = requestAnimationFrame(() => {
164
+ this.rafMoveId = null;
165
+ if (this.pendingPointerMove && this.editor.gesture.isActive) {
166
+ const { pagePt, event } = this.pendingPointerMove;
167
+ this.pendingPointerMove = null;
168
+ this.editor.gesture.move(pagePt, event);
169
+ }
170
+ });
171
+ }
172
+ else if (typeof requestAnimationFrame === 'undefined') {
173
+ this.editor.gesture.move(currentPagePt, e);
174
+ }
175
+ return;
176
+ }
177
+ if (this.eraser.isActive) {
178
+ this.eraser.move(currentPagePt);
179
+ return;
180
+ }
181
+ if (this.isDrawing && this.currentInkShapeId) {
182
+ this.currentInkPts.push(currentPagePt.x, currentPagePt.y);
183
+ const shape = this.editor.store.getShape(this.currentInkShapeId);
184
+ if (shape) {
185
+ this.editor.store.updateShape(this.currentInkShapeId, {
186
+ props: { ...shape.props, pts: [...this.currentInkPts] },
187
+ });
188
+ }
189
+ return;
190
+ }
191
+ if (this.isMarquee && this.marqueeStart && this.container) {
192
+ const box = computeMarqueeBounds(this.marqueeStart, currentPagePt);
193
+ this.marqueeOverlay.show(this.container, box);
194
+ const hitIds = findIntersectingShapes(box, this.editor.store, this.editor.registry);
195
+ if (this.isShiftMarquee) {
196
+ this.editor.setSelection(Array.from(new Set([...this.initialSelectionBeforeMarquee, ...hitIds])));
197
+ }
198
+ else {
199
+ this.editor.setSelection(hitIds);
200
+ }
201
+ }
202
+ };
203
+ onPointerUp = () => {
204
+ if (this.rafMoveId !== null && typeof cancelAnimationFrame !== 'undefined') {
205
+ cancelAnimationFrame(this.rafMoveId);
206
+ this.rafMoveId = null;
207
+ }
208
+ if (this.pendingPointerMove && this.editor.gesture.isActive) {
209
+ const { pagePt, event } = this.pendingPointerMove;
210
+ this.pendingPointerMove = null;
211
+ this.editor.gesture.move(pagePt, event);
212
+ }
213
+ this.cachedContainerRect = null;
214
+ if (this.editor.gesture.isActive) {
215
+ const didMove = this.editor.gesture.didMove;
216
+ this.editor.gesture.commit();
217
+ if (!didMove && this.clickedShapeId && !this.lastPointerDownShift) {
218
+ this.editor.selectShape(this.clickedShapeId);
219
+ }
220
+ this.clickedShapeId = null;
221
+ return;
222
+ }
223
+ if (this.eraser.isActive) {
224
+ this.eraser.end();
225
+ return;
226
+ }
227
+ if (this.isDrawing && this.currentInkShapeId) {
228
+ const simplified = simplifyRDP(this.currentInkPts, 1.5);
229
+ const shape = this.editor.store.getShape(this.currentInkShapeId);
230
+ if (shape) {
231
+ this.editor.store.updateShape(this.currentInkShapeId, { props: { ...shape.props, pts: simplified } });
232
+ }
233
+ this.isDrawing = false;
234
+ this.currentInkShapeId = null;
235
+ this.currentInkPts = [];
236
+ this.editor.store.commitTransaction();
237
+ this.editor.setTool('select');
238
+ return;
239
+ }
240
+ if (this.isMarquee) {
241
+ this.marqueeOverlay.hide();
242
+ this.isMarquee = false;
243
+ this.marqueeStart = null;
244
+ return;
245
+ }
246
+ };
247
+ }
248
+ //# sourceMappingURL=interaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interaction.js","sourceRoot":"","sources":["../src/interaction.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { FrameTelemetry, type TelemetryMetrics } from './telemetry.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/perf/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { FrameTelemetry } from './telemetry.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/perf/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAyB,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Performance and Frame-rate Telemetry (§1)
3
+ * Measures input -> paint latency and frame rate over a sliding window.
4
+ */
5
+ export interface TelemetryMetrics {
6
+ readonly fps: number;
7
+ readonly p50LatencyMs: number;
8
+ readonly p95LatencyMs: number;
9
+ readonly p99LatencyMs: number;
10
+ readonly droppedFrames: number;
11
+ readonly sampleCount: number;
12
+ }
13
+ export declare class FrameTelemetry {
14
+ private windowSize;
15
+ private latencies;
16
+ private frameTimestamps;
17
+ private droppedFrames;
18
+ private lastInputTime;
19
+ private rafId;
20
+ private overlayEl;
21
+ private isEnabled;
22
+ constructor(windowSize?: number);
23
+ enable(container?: HTMLElement): void;
24
+ disable(): void;
25
+ reset(): void;
26
+ recordInput(time?: number): void;
27
+ recordPaint(time?: number): void;
28
+ getMetrics(): TelemetryMetrics;
29
+ private _startLoop;
30
+ private _createOverlay;
31
+ private _updateOverlay;
32
+ }
33
+ //# sourceMappingURL=telemetry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../../src/perf/telemetry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,eAAe,CAAgB;IACvC,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,SAAS,CAA4B;IAC7C,OAAO,CAAC,SAAS,CAAS;IAE1B,YAAY,UAAU,SAAK,EAE1B;IAED,MAAM,CAAC,SAAS,CAAC,EAAE,WAAW,GAAG,IAAI,CAQpC;IAED,OAAO,IAAI,IAAI,CAUd;IAED,KAAK,IAAI,IAAI,CAKZ;IAED,WAAW,CAAC,IAAI,GAAE,MAA0B,GAAG,IAAI,CAGlD;IAED,WAAW,CAAC,IAAI,GAAE,MAA0B,GAAG,IAAI,CAyBlD;IAED,UAAU,IAAI,gBAAgB,CAkC7B;IAED,OAAO,CAAC,UAAU;IAUlB,OAAO,CAAC,cAAc;IAsBtB,OAAO,CAAC,cAAc;CAKvB"}