@weasel-js/core 1.10.1 → 1.11.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 (1431) hide show
  1. package/CHANGELOG.md +587 -0
  2. package/README.md +16 -15
  3. package/dist/WeaselProvider.js +25 -9
  4. package/dist/WeaselProvider.js.map +1 -1
  5. package/dist/affordances/composeAffordanceLayer.js +217 -140
  6. package/dist/affordances/composeAffordanceLayer.js.map +1 -1
  7. package/dist/affordances/cornerResize.js +92 -50
  8. package/dist/affordances/cornerResize.js.map +1 -1
  9. package/dist/affordances/hitAffordanceRegions.js +147 -84
  10. package/dist/affordances/hitAffordanceRegions.js.map +1 -1
  11. package/dist/affordances/pathAnchors.js +140 -65
  12. package/dist/affordances/pathAnchors.js.map +1 -1
  13. package/dist/affordances/rotateCursor.js +10 -4
  14. package/dist/affordances/rotateCursor.js.map +1 -1
  15. package/dist/affordances/rotationHandle.js +83 -60
  16. package/dist/affordances/rotationHandle.js.map +1 -1
  17. package/dist/animation/behaviors/coast.js +20 -14
  18. package/dist/animation/behaviors/coast.js.map +1 -1
  19. package/dist/animation/behaviors/coastByWrite.js +98 -70
  20. package/dist/animation/behaviors/coastByWrite.js.map +1 -1
  21. package/dist/animation/behaviors/coastOnTargets.js +115 -67
  22. package/dist/animation/behaviors/coastOnTargets.js.map +1 -1
  23. package/dist/animation/behaviors/momentum.js +88 -53
  24. package/dist/animation/behaviors/momentum.js.map +1 -1
  25. package/dist/animation/clipTargets.js +14 -7
  26. package/dist/animation/clipTargets.js.map +1 -1
  27. package/dist/animation/departures.js +116 -0
  28. package/dist/animation/departures.js.map +1 -0
  29. package/dist/animation/index.js +18 -15
  30. package/dist/animation/poseHelpers.js +147 -107
  31. package/dist/animation/poseHelpers.js.map +1 -1
  32. package/dist/animation/poseTarget.js +158 -85
  33. package/dist/animation/poseTarget.js.map +1 -1
  34. package/dist/animation/poseTransition.js +64 -0
  35. package/dist/animation/poseTransition.js.map +1 -0
  36. package/dist/animation/reflow.js +208 -120
  37. package/dist/animation/reflow.js.map +1 -1
  38. package/dist/animation/rewind.js +76 -45
  39. package/dist/animation/rewind.js.map +1 -1
  40. package/dist/animation/rig/bindRig.js +135 -82
  41. package/dist/animation/rig/bindRig.js.map +1 -1
  42. package/dist/animation/rig/rigNode.js +120 -75
  43. package/dist/animation/rig/rigNode.js.map +1 -1
  44. package/dist/animation/rig/rigSeat.js +61 -41
  45. package/dist/animation/rig/rigSeat.js.map +1 -1
  46. package/dist/animation/rig/skinBinding.js +57 -45
  47. package/dist/animation/rig/skinBinding.js.map +1 -1
  48. package/dist/animation/rig/useRig.js +44 -30
  49. package/dist/animation/rig/useRig.js.map +1 -1
  50. package/dist/animation/wrappers/animateLifecycle.js +51 -35
  51. package/dist/animation/wrappers/animateLifecycle.js.map +1 -1
  52. package/dist/animation/wrappers/animateOnSetPose.js +55 -32
  53. package/dist/animation/wrappers/animateOnSetPose.js.map +1 -1
  54. package/dist/animation/wrappers/instantPose.js +13 -8
  55. package/dist/animation/wrappers/instantPose.js.map +1 -1
  56. package/dist/animation/writtenPoseTarget.js +44 -22
  57. package/dist/animation/writtenPoseTarget.js.map +1 -1
  58. package/dist/{autoPoseDescriptor-DHg5KqaJ.d.ts → autoPoseDescriptor-CZ1eXbzY.d.ts} +1 -1
  59. package/dist/barrel/canvas.js +41 -32
  60. package/dist/barrel/chrome.js +19 -16
  61. package/dist/barrel/icons.js +6 -0
  62. package/dist/barrel/input.js +19 -18
  63. package/dist/barrel/interactions.js +40 -39
  64. package/dist/barrel/paint.js +12 -11
  65. package/dist/barrel/paths.js +39 -13
  66. package/dist/barrel/renderer.js +24 -14
  67. package/dist/barrel/routing.js +69 -58
  68. package/dist/barrel/scene.js +48 -37
  69. package/dist/barrel/text.js +10 -9
  70. package/dist/barrel/viewport.js +47 -45
  71. package/dist/canvas/Canvas.js +189 -306
  72. package/dist/canvas/Canvas.js.map +1 -1
  73. package/dist/canvas/CanvasView.js +273 -199
  74. package/dist/canvas/CanvasView.js.map +1 -1
  75. package/dist/canvas/CursorCoordsHud.js +103 -64
  76. package/dist/canvas/CursorCoordsHud.js.map +1 -1
  77. package/dist/canvas/DrawCanvas.js +68 -41
  78. package/dist/canvas/DrawCanvas.js.map +1 -1
  79. package/dist/canvas/LeanSceneCanvas.js +23 -0
  80. package/dist/canvas/LeanSceneCanvas.js.map +1 -0
  81. package/dist/canvas/ModalityHud.js +58 -43
  82. package/dist/canvas/ModalityHud.js.map +1 -1
  83. package/dist/canvas/NodeShape.js +137 -60
  84. package/dist/canvas/NodeShape.js.map +1 -1
  85. package/dist/canvas/PickHud.js +77 -59
  86. package/dist/canvas/PickHud.js.map +1 -1
  87. package/dist/canvas/SceneCanvas/ActionsProviderIfRoot.js +9 -6
  88. package/dist/canvas/SceneCanvas/ActionsProviderIfRoot.js.map +1 -1
  89. package/dist/canvas/SceneCanvas/CanvasKitProviders.js +25 -0
  90. package/dist/canvas/SceneCanvas/CanvasKitProviders.js.map +1 -0
  91. package/dist/canvas/SceneCanvas/DepRegistryProviderIfRoot.js +10 -6
  92. package/dist/canvas/SceneCanvas/DepRegistryProviderIfRoot.js.map +1 -1
  93. package/dist/canvas/SceneCanvas/DevHuds.js +47 -32
  94. package/dist/canvas/SceneCanvas/DevHuds.js.map +1 -1
  95. package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js +72 -37
  96. package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js.map +1 -1
  97. package/dist/canvas/SceneCanvas/SceneCanvasInput.js +110 -0
  98. package/dist/canvas/SceneCanvas/SceneCanvasInput.js.map +1 -0
  99. package/dist/canvas/SceneCanvas/brushOverlay.js +36 -0
  100. package/dist/canvas/SceneCanvas/brushOverlay.js.map +1 -0
  101. package/dist/canvas/SceneCanvas/canvasPassThrough.js +72 -0
  102. package/dist/canvas/SceneCanvas/canvasPassThrough.js.map +1 -0
  103. package/dist/canvas/SceneCanvas/contributionFrameHooks.js +54 -32
  104. package/dist/canvas/SceneCanvas/contributionFrameHooks.js.map +1 -1
  105. package/dist/canvas/SceneCanvas/coordTrace.js +36 -29
  106. package/dist/canvas/SceneCanvas/coordTrace.js.map +1 -1
  107. package/dist/canvas/SceneCanvas/defaultNodeProperties.js +318 -159
  108. package/dist/canvas/SceneCanvas/defaultNodeProperties.js.map +1 -1
  109. package/dist/canvas/SceneCanvas/defaultNodeRouting.js +39 -13
  110. package/dist/canvas/SceneCanvas/defaultNodeRouting.js.map +1 -1
  111. package/dist/canvas/SceneCanvas/dispatcherGestureBounds.js +83 -47
  112. package/dist/canvas/SceneCanvas/dispatcherGestureBounds.js.map +1 -1
  113. package/dist/canvas/SceneCanvas/features.js +83 -106
  114. package/dist/canvas/SceneCanvas/features.js.map +1 -1
  115. package/dist/canvas/SceneCanvas/insertPreviewCommands.js +80 -62
  116. package/dist/canvas/SceneCanvas/insertPreviewCommands.js.map +1 -1
  117. package/dist/canvas/SceneCanvas/mergeLayers.js +43 -0
  118. package/dist/canvas/SceneCanvas/mergeLayers.js.map +1 -0
  119. package/dist/canvas/SceneCanvas/namedPresets.js +56 -0
  120. package/dist/canvas/SceneCanvas/namedPresets.js.map +1 -0
  121. package/dist/canvas/SceneCanvas/poseGeometry.js +66 -31
  122. package/dist/canvas/SceneCanvas/poseGeometry.js.map +1 -1
  123. package/dist/canvas/SceneCanvas/poseRegistrars.js +18 -8
  124. package/dist/canvas/SceneCanvas/poseRegistrars.js.map +1 -1
  125. package/dist/canvas/SceneCanvas/presets/arrange.js +27 -0
  126. package/dist/canvas/SceneCanvas/presets/arrange.js.map +1 -0
  127. package/dist/canvas/SceneCanvas/presets/chrome.js +14 -0
  128. package/dist/canvas/SceneCanvas/presets/chrome.js.map +1 -0
  129. package/dist/canvas/SceneCanvas/presets/edit.js +59 -0
  130. package/dist/canvas/SceneCanvas/presets/edit.js.map +1 -0
  131. package/dist/canvas/SceneCanvas/presets/ingest.js +13 -0
  132. package/dist/canvas/SceneCanvas/presets/ingest.js.map +1 -0
  133. package/dist/canvas/SceneCanvas/presets/paths.js +67 -0
  134. package/dist/canvas/SceneCanvas/presets/paths.js.map +1 -0
  135. package/dist/canvas/SceneCanvas/presets/select.js +19 -0
  136. package/dist/canvas/SceneCanvas/presets/select.js.map +1 -0
  137. package/dist/canvas/SceneCanvas/presets/toolDriven.js +20 -0
  138. package/dist/canvas/SceneCanvas/presets/toolDriven.js.map +1 -0
  139. package/dist/canvas/SceneCanvas/presets/transform.js +41 -0
  140. package/dist/canvas/SceneCanvas/presets/transform.js.map +1 -0
  141. package/dist/canvas/SceneCanvas/presets/view.js +14 -0
  142. package/dist/canvas/SceneCanvas/presets/view.js.map +1 -0
  143. package/dist/canvas/SceneCanvas/props.js +19 -35
  144. package/dist/canvas/SceneCanvas/props.js.map +1 -1
  145. package/dist/canvas/SceneCanvas/scenePointQuery.js +43 -35
  146. package/dist/canvas/SceneCanvas/scenePointQuery.js.map +1 -1
  147. package/dist/canvas/SceneCanvas/shapeGeneratorProperties.js +22 -15
  148. package/dist/canvas/SceneCanvas/shapeGeneratorProperties.js.map +1 -1
  149. package/dist/canvas/SceneCanvas/toolRegistry.js +30 -15
  150. package/dist/canvas/SceneCanvas/toolRegistry.js.map +1 -1
  151. package/dist/canvas/SceneCanvas/useActionTunings.js +14 -11
  152. package/dist/canvas/SceneCanvas/useActionTunings.js.map +1 -1
  153. package/dist/canvas/SceneCanvas/useActionsPropResolver.js +68 -35
  154. package/dist/canvas/SceneCanvas/useActionsPropResolver.js.map +1 -1
  155. package/dist/canvas/SceneCanvas/useBakedScene.js +17 -0
  156. package/dist/canvas/SceneCanvas/useBakedScene.js.map +1 -0
  157. package/dist/canvas/SceneCanvas/useBuiltinRigTools.js +65 -0
  158. package/dist/canvas/SceneCanvas/useBuiltinRigTools.js.map +1 -0
  159. package/dist/canvas/SceneCanvas/useBuiltinShapeTools.js +47 -23
  160. package/dist/canvas/SceneCanvas/useBuiltinShapeTools.js.map +1 -1
  161. package/dist/canvas/SceneCanvas/useBuiltinTools.js +29 -14
  162. package/dist/canvas/SceneCanvas/useBuiltinTools.js.map +1 -1
  163. package/dist/canvas/SceneCanvas/useCanvasCamera.js +53 -38
  164. package/dist/canvas/SceneCanvas/useCanvasCamera.js.map +1 -1
  165. package/dist/canvas/SceneCanvas/useCanvasDispatcher.js +24 -14
  166. package/dist/canvas/SceneCanvas/useCanvasDispatcher.js.map +1 -1
  167. package/dist/canvas/SceneCanvas/useCanvasSelection.js +30 -12
  168. package/dist/canvas/SceneCanvas/useCanvasSelection.js.map +1 -1
  169. package/dist/canvas/SceneCanvas/useCanvasTools.js +112 -53
  170. package/dist/canvas/SceneCanvas/useCanvasTools.js.map +1 -1
  171. package/dist/canvas/SceneCanvas/useChromeAffordances.js +31 -0
  172. package/dist/canvas/SceneCanvas/useChromeAffordances.js.map +1 -0
  173. package/dist/canvas/SceneCanvas/useContributionRoles.js +107 -56
  174. package/dist/canvas/SceneCanvas/useContributionRoles.js.map +1 -1
  175. package/dist/canvas/SceneCanvas/useDepartureGhostLayer.js +64 -0
  176. package/dist/canvas/SceneCanvas/useDepartureGhostLayer.js.map +1 -0
  177. package/dist/canvas/SceneCanvas/useDispatcherOverlayLayer.js +104 -71
  178. package/dist/canvas/SceneCanvas/useDispatcherOverlayLayer.js.map +1 -1
  179. package/dist/canvas/SceneCanvas/useHeldModifiers.js +21 -14
  180. package/dist/canvas/SceneCanvas/useHeldModifiers.js.map +1 -1
  181. package/dist/canvas/SceneCanvas/useNodeAtPoint.js +21 -19
  182. package/dist/canvas/SceneCanvas/useNodeAtPoint.js.map +1 -1
  183. package/dist/canvas/SceneCanvas/useNodeKinds.js +28 -19
  184. package/dist/canvas/SceneCanvas/useNodeKinds.js.map +1 -1
  185. package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js +91 -59
  186. package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js.map +1 -1
  187. package/dist/canvas/SceneCanvas/useSceneCanvasHandle.js +62 -35
  188. package/dist/canvas/SceneCanvas/useSceneCanvasHandle.js.map +1 -1
  189. package/dist/canvas/SceneCanvas/useSceneCanvasLayers.js +110 -50
  190. package/dist/canvas/SceneCanvas/useSceneCanvasLayers.js.map +1 -1
  191. package/dist/canvas/SceneCanvas/useSceneCanvasPathEdit.js +30 -0
  192. package/dist/canvas/SceneCanvas/useSceneCanvasPathEdit.js.map +1 -0
  193. package/dist/canvas/SceneCanvas/useSceneCanvasTools.js +40 -0
  194. package/dist/canvas/SceneCanvas/useSceneCanvasTools.js.map +1 -0
  195. package/dist/canvas/SceneCanvas/useSceneChrome.js +100 -44
  196. package/dist/canvas/SceneCanvas/useSceneChrome.js.map +1 -1
  197. package/dist/canvas/SceneCanvas/useSceneGestureDispatcher.js +163 -0
  198. package/dist/canvas/SceneCanvas/useSceneGestureDispatcher.js.map +1 -0
  199. package/dist/canvas/SceneCanvas/useScenePicking.js +69 -0
  200. package/dist/canvas/SceneCanvas/useScenePicking.js.map +1 -0
  201. package/dist/canvas/SceneCanvas/useSceneRedrawSources.js +28 -17
  202. package/dist/canvas/SceneCanvas/useSceneRedrawSources.js.map +1 -1
  203. package/dist/canvas/SceneCanvas/useSceneSelectTool.js +159 -80
  204. package/dist/canvas/SceneCanvas/useSceneSelectTool.js.map +1 -1
  205. package/dist/canvas/SceneCanvas/useSceneSlotLayers.js +38 -26
  206. package/dist/canvas/SceneCanvas/useSceneSlotLayers.js.map +1 -1
  207. package/dist/canvas/SceneCanvas/useSceneStandardActions.js +108 -0
  208. package/dist/canvas/SceneCanvas/useSceneStandardActions.js.map +1 -0
  209. package/dist/canvas/SceneCanvas/useSelectionOverlayLayer.js +40 -27
  210. package/dist/canvas/SceneCanvas/useSelectionOverlayLayer.js.map +1 -1
  211. package/dist/canvas/SceneCanvas/useSurfaceRouting.js +29 -0
  212. package/dist/canvas/SceneCanvas/useSurfaceRouting.js.map +1 -0
  213. package/dist/canvas/SceneCanvas/useSurfaceViewInputs.js +44 -0
  214. package/dist/canvas/SceneCanvas/useSurfaceViewInputs.js.map +1 -0
  215. package/dist/canvas/SceneCanvas/useToolKeybindings.js +28 -0
  216. package/dist/canvas/SceneCanvas/useToolKeybindings.js.map +1 -0
  217. package/dist/canvas/SceneCanvas/useViewportActions.js +52 -28
  218. package/dist/canvas/SceneCanvas/useViewportActions.js.map +1 -1
  219. package/dist/canvas/SceneCanvas/worldPointAt.js +10 -4
  220. package/dist/canvas/SceneCanvas/worldPointAt.js.map +1 -1
  221. package/dist/canvas/SceneCanvas.js +274 -312
  222. package/dist/canvas/SceneCanvas.js.map +1 -1
  223. package/dist/canvas/SceneViewCanvas.js +68 -42
  224. package/dist/canvas/SceneViewCanvas.js.map +1 -1
  225. package/dist/canvas/SurfaceCanvas.js +53 -31
  226. package/dist/canvas/SurfaceCanvas.js.map +1 -1
  227. package/dist/canvas/accentColor.js +8 -5
  228. package/dist/canvas/accentColor.js.map +1 -1
  229. package/dist/canvas/adapterDerivedPath.js +33 -18
  230. package/dist/canvas/adapterDerivedPath.js.map +1 -1
  231. package/dist/canvas/adapterPickSource.js +49 -23
  232. package/dist/canvas/adapterPickSource.js.map +1 -1
  233. package/dist/canvas/affordanceAt.js +106 -50
  234. package/dist/canvas/affordanceAt.js.map +1 -1
  235. package/dist/canvas/buildSceneLayer.js +111 -80
  236. package/dist/canvas/buildSceneLayer.js.map +1 -1
  237. package/dist/canvas/buildSceneTree.js +101 -59
  238. package/dist/canvas/buildSceneTree.js.map +1 -1
  239. package/dist/canvas/canvasRenderer.js +156 -71
  240. package/dist/canvas/canvasRenderer.js.map +1 -1
  241. package/dist/canvas/colorOverrides.js +18 -10
  242. package/dist/canvas/colorOverrides.js.map +1 -1
  243. package/dist/canvas/copiesAbove.js +24 -14
  244. package/dist/canvas/copiesAbove.js.map +1 -1
  245. package/dist/canvas/defaultDrawOne.js +55 -31
  246. package/dist/canvas/defaultDrawOne.js.map +1 -1
  247. package/dist/canvas/deps/areaSelect.js +30 -12
  248. package/dist/canvas/deps/areaSelect.js.map +1 -1
  249. package/dist/canvas/deps/booleans.js +104 -0
  250. package/dist/canvas/deps/booleans.js.map +1 -0
  251. package/dist/canvas/deps/changes.js +17 -9
  252. package/dist/canvas/deps/changes.js.map +1 -1
  253. package/dist/canvas/deps/debug.js +12 -5
  254. package/dist/canvas/deps/debug.js.map +1 -1
  255. package/dist/canvas/deps/dispatchSources.js +27 -0
  256. package/dist/canvas/deps/dispatchSources.js.map +1 -0
  257. package/dist/canvas/deps/dispatcher.js +18 -7
  258. package/dist/canvas/deps/dispatcher.js.map +1 -1
  259. package/dist/canvas/deps/editAnchors.js +253 -63
  260. package/dist/canvas/deps/editAnchors.js.map +1 -1
  261. package/dist/canvas/deps/geometryProjection.js +13 -7
  262. package/dist/canvas/deps/geometryProjection.js.map +1 -1
  263. package/dist/canvas/deps/hitTestArea.js +78 -53
  264. package/dist/canvas/deps/hitTestArea.js.map +1 -1
  265. package/dist/canvas/deps/ingestion.js +18 -13
  266. package/dist/canvas/deps/ingestion.js.map +1 -1
  267. package/dist/canvas/deps/insert.js +176 -116
  268. package/dist/canvas/deps/insert.js.map +1 -1
  269. package/dist/canvas/deps/kitSettings.js +16 -0
  270. package/dist/canvas/deps/kitSettings.js.map +1 -0
  271. package/dist/canvas/deps/lassoSelect.js +25 -13
  272. package/dist/canvas/deps/lassoSelect.js.map +1 -1
  273. package/dist/canvas/deps/layout.js +32 -20
  274. package/dist/canvas/deps/layout.js.map +1 -1
  275. package/dist/canvas/deps/nodeAtPoint.js +28 -14
  276. package/dist/canvas/deps/nodeAtPoint.js.map +1 -1
  277. package/dist/canvas/deps/pathLeaf.js +66 -0
  278. package/dist/canvas/deps/pathLeaf.js.map +1 -0
  279. package/dist/canvas/deps/pathLeafDeps.js +13 -0
  280. package/dist/canvas/deps/pathLeafDeps.js.map +1 -0
  281. package/dist/canvas/deps/poseDescriptor.js +10 -8
  282. package/dist/canvas/deps/poseDescriptor.js.map +1 -1
  283. package/dist/canvas/deps/previewPaths.js +44 -0
  284. package/dist/canvas/deps/previewPaths.js.map +1 -0
  285. package/dist/canvas/deps/resizePolicy.js +32 -25
  286. package/dist/canvas/deps/resizePolicy.js.map +1 -1
  287. package/dist/canvas/deps/slice.js +73 -87
  288. package/dist/canvas/deps/slice.js.map +1 -1
  289. package/dist/canvas/deps/snap.js +58 -7
  290. package/dist/canvas/deps/snap.js.map +1 -1
  291. package/dist/canvas/deps/surface.js +30 -0
  292. package/dist/canvas/deps/surface.js.map +1 -0
  293. package/dist/canvas/deps/textEdit.js +21 -13
  294. package/dist/canvas/deps/textEdit.js.map +1 -1
  295. package/dist/canvas/deps/view.js +46 -34
  296. package/dist/canvas/deps/view.js.map +1 -1
  297. package/dist/canvas/derivedPath.js +154 -70
  298. package/dist/canvas/derivedPath.js.map +1 -1
  299. package/dist/canvas/doubleClickTarget.js +20 -0
  300. package/dist/canvas/doubleClickTarget.js.map +1 -0
  301. package/dist/canvas/drawEnvelope.js +26 -17
  302. package/dist/canvas/drawEnvelope.js.map +1 -1
  303. package/dist/canvas/drawnBounds.js +116 -0
  304. package/dist/canvas/drawnBounds.js.map +1 -0
  305. package/dist/canvas/getNodeAtPoint.js +11 -8
  306. package/dist/canvas/getNodeAtPoint.js.map +1 -1
  307. package/dist/canvas/hostAnchor.js +35 -18
  308. package/dist/canvas/hostAnchor.js.map +1 -1
  309. package/dist/canvas/hud.module.js +25 -14
  310. package/dist/canvas/hud.module.js.map +1 -1
  311. package/dist/canvas/insertPreviewExtent.js +82 -61
  312. package/dist/canvas/insertPreviewExtent.js.map +1 -1
  313. package/dist/canvas/kitRequirements.js +154 -115
  314. package/dist/canvas/kitRequirements.js.map +1 -1
  315. package/dist/canvas/layerHover.js +28 -0
  316. package/dist/canvas/layerHover.js.map +1 -0
  317. package/dist/canvas/layerOrder.js +107 -57
  318. package/dist/canvas/layerOrder.js.map +1 -1
  319. package/dist/canvas/layerSlots.js +16 -9
  320. package/dist/canvas/layerSlots.js.map +1 -1
  321. package/dist/canvas/mountedCanvases.js +23 -13
  322. package/dist/canvas/mountedCanvases.js.map +1 -1
  323. package/dist/canvas/nodeShapes/derivedPainter.js +65 -25
  324. package/dist/canvas/nodeShapes/derivedPainter.js.map +1 -1
  325. package/dist/canvas/nodeShapes/imagePainter.js +69 -53
  326. package/dist/canvas/nodeShapes/imagePainter.js.map +1 -1
  327. package/dist/canvas/nodeShapes/measurePainter.js +58 -0
  328. package/dist/canvas/nodeShapes/measurePainter.js.map +1 -0
  329. package/dist/canvas/nodeShapes/memo.js +16 -5
  330. package/dist/canvas/nodeShapes/memo.js.map +1 -1
  331. package/dist/canvas/nodeShapes/nodePaint.js +125 -46
  332. package/dist/canvas/nodeShapes/nodePaint.js.map +1 -1
  333. package/dist/canvas/nodeShapes/pathPainter.js +41 -27
  334. package/dist/canvas/nodeShapes/pathPainter.js.map +1 -1
  335. package/dist/canvas/nodeShapes/poseBox.js +20 -13
  336. package/dist/canvas/nodeShapes/poseBox.js.map +1 -1
  337. package/dist/canvas/nodeShapes/rectFallbackPainter.js +26 -22
  338. package/dist/canvas/nodeShapes/rectFallbackPainter.js.map +1 -1
  339. package/dist/canvas/nodeShapes/shapePainter.js +67 -46
  340. package/dist/canvas/nodeShapes/shapePainter.js.map +1 -1
  341. package/dist/canvas/nodeShapes/strokedBounds.js +177 -0
  342. package/dist/canvas/nodeShapes/strokedBounds.js.map +1 -0
  343. package/dist/canvas/nodeShapes/textPainter.js +170 -37
  344. package/dist/canvas/nodeShapes/textPainter.js.map +1 -1
  345. package/dist/canvas/overChildren.js +29 -18
  346. package/dist/canvas/overChildren.js.map +1 -1
  347. package/dist/canvas/overlayRoleStrokes.js +20 -3
  348. package/dist/canvas/overlayRoleStrokes.js.map +1 -1
  349. package/dist/canvas/paintCull.js +24 -12
  350. package/dist/canvas/paintCull.js.map +1 -1
  351. package/dist/canvas/paintedCursorLayer.js +59 -35
  352. package/dist/canvas/paintedCursorLayer.js.map +1 -1
  353. package/dist/canvas/pathOverlay.js +63 -0
  354. package/dist/canvas/pathOverlay.js.map +1 -0
  355. package/dist/canvas/pickReach.js +34 -17
  356. package/dist/canvas/pickReach.js.map +1 -1
  357. package/dist/canvas/pickWalk.js +151 -102
  358. package/dist/canvas/pickWalk.js.map +1 -1
  359. package/dist/canvas/planeClips.js +39 -22
  360. package/dist/canvas/planeClips.js.map +1 -1
  361. package/dist/canvas/poseCascade.js +51 -27
  362. package/dist/canvas/poseCascade.js.map +1 -1
  363. package/dist/canvas/poseRotation.js +24 -14
  364. package/dist/canvas/poseRotation.js.map +1 -1
  365. package/dist/canvas/rasterReadback.js +23 -15
  366. package/dist/canvas/rasterReadback.js.map +1 -1
  367. package/dist/canvas/rasterToPng.js +21 -15
  368. package/dist/canvas/rasterToPng.js.map +1 -1
  369. package/dist/canvas/renderDebugSnapshot.js +36 -19
  370. package/dist/canvas/renderDebugSnapshot.js.map +1 -1
  371. package/dist/canvas/renderNeeds.js +33 -18
  372. package/dist/canvas/renderNeeds.js.map +1 -1
  373. package/dist/canvas/renderSceneToPixels.js +202 -87
  374. package/dist/canvas/renderSceneToPixels.js.map +1 -1
  375. package/dist/canvas/sceneAdapter.js +96 -75
  376. package/dist/canvas/sceneAdapter.js.map +1 -1
  377. package/dist/canvas/sceneClipboard.js +141 -92
  378. package/dist/canvas/sceneClipboard.js.map +1 -1
  379. package/dist/canvas/sceneLayerPaint.js +56 -27
  380. package/dist/canvas/sceneLayerPaint.js.map +1 -1
  381. package/dist/canvas/sceneSlotWiring.js +24 -14
  382. package/dist/canvas/sceneSlotWiring.js.map +1 -1
  383. package/dist/canvas/sceneViewRender.js +85 -49
  384. package/dist/canvas/sceneViewRender.js.map +1 -1
  385. package/dist/canvas/slopsDebugLayer.js +58 -49
  386. package/dist/canvas/slopsDebugLayer.js.map +1 -1
  387. package/dist/canvas/surfaceContribution.js +22 -10
  388. package/dist/canvas/surfaceContribution.js.map +1 -1
  389. package/dist/canvas/useCanvasElements.js +31 -0
  390. package/dist/canvas/useCanvasElements.js.map +1 -0
  391. package/dist/canvas/useCanvasHandle.js +69 -0
  392. package/dist/canvas/useCanvasHandle.js.map +1 -0
  393. package/dist/canvas/useCanvasPaint.js +91 -0
  394. package/dist/canvas/useCanvasPaint.js.map +1 -0
  395. package/dist/canvas/useCanvasRenderer.js +45 -23
  396. package/dist/canvas/useCanvasRenderer.js.map +1 -1
  397. package/dist/canvas/useCanvasSurface.js +41 -23
  398. package/dist/canvas/useCanvasSurface.js.map +1 -1
  399. package/dist/canvas/useCanvasView.js +80 -48
  400. package/dist/canvas/useCanvasView.js.map +1 -1
  401. package/dist/canvas/useClientToWorld.js +27 -0
  402. package/dist/canvas/useClientToWorld.js.map +1 -0
  403. package/dist/canvas/useExtraLayers.js +45 -0
  404. package/dist/canvas/useExtraLayers.js.map +1 -0
  405. package/dist/canvas/useFrameLoop.js +109 -49
  406. package/dist/canvas/useFrameLoop.js.map +1 -1
  407. package/dist/canvas/useHitObserver.js +22 -15
  408. package/dist/canvas/useHitObserver.js.map +1 -1
  409. package/dist/canvas/useHostAnchor.js +83 -53
  410. package/dist/canvas/useHostAnchor.js.map +1 -1
  411. package/dist/canvas/useLateContentRedraw.js +21 -14
  412. package/dist/canvas/useLateContentRedraw.js.map +1 -1
  413. package/dist/canvas/useLayerStack.js +72 -0
  414. package/dist/canvas/useLayerStack.js.map +1 -0
  415. package/dist/canvas/usePaintedCursor.js +28 -0
  416. package/dist/canvas/usePaintedCursor.js.map +1 -0
  417. package/dist/canvas/useRedrawOn.js +24 -14
  418. package/dist/canvas/useRedrawOn.js.map +1 -1
  419. package/dist/canvas/useSceneAdapter.js +21 -16
  420. package/dist/canvas/useSceneAdapter.js.map +1 -1
  421. package/dist/canvas/useSceneLayerList.js +15 -7
  422. package/dist/canvas/useSceneLayerList.js.map +1 -1
  423. package/dist/canvas/useSurfaceInput.js +46 -27
  424. package/dist/canvas/useSurfaceInput.js.map +1 -1
  425. package/dist/canvas/useSurfaceSize.js +43 -0
  426. package/dist/canvas/useSurfaceSize.js.map +1 -0
  427. package/dist/canvas/useToolCursor.js +30 -21
  428. package/dist/canvas/useToolCursor.js.map +1 -1
  429. package/dist/canvas/useViewHelpers.js +112 -61
  430. package/dist/canvas/useViewHelpers.js.map +1 -1
  431. package/dist/canvas/useViewLayerGate.js +29 -0
  432. package/dist/canvas/useViewLayerGate.js.map +1 -0
  433. package/dist/canvas/useViewNesting.js +104 -0
  434. package/dist/canvas/useViewNesting.js.map +1 -0
  435. package/dist/canvas/useViewRegistrySurface.js +44 -0
  436. package/dist/canvas/useViewRegistrySurface.js.map +1 -0
  437. package/dist/canvas/viewInputs.js +14 -11
  438. package/dist/canvas/viewInputs.js.map +1 -1
  439. package/dist/canvas/viewRegistry.js +140 -42
  440. package/dist/canvas/viewRegistry.js.map +1 -1
  441. package/dist/canvas/watchElementMove.js +71 -33
  442. package/dist/canvas/watchElementMove.js.map +1 -1
  443. package/dist/canvas/wrapNodeOutput.js +20 -13
  444. package/dist/canvas/wrapNodeOutput.js.map +1 -1
  445. package/dist/clipboard.d.ts +7 -3
  446. package/dist/clipboard.js +4 -3
  447. package/dist/{clone-C0eADtS0.d.ts → clone-DZDrfIlU.d.ts} +20 -53
  448. package/dist/clone.d.ts +5 -4
  449. package/dist/core/adapters/testing/rootsTree.js +17 -0
  450. package/dist/core/adapters/testing/rootsTree.js.map +1 -0
  451. package/dist/core/applyOps.js +23 -7
  452. package/dist/core/applyOps.js.map +1 -1
  453. package/dist/core/device/index.js +6 -5
  454. package/dist/core/device/targets.js +29 -8
  455. package/dist/core/device/targets.js.map +1 -1
  456. package/dist/core/device/useDeviceProfile.js +86 -52
  457. package/dist/core/device/useDeviceProfile.js.map +1 -1
  458. package/dist/core/device/useTargetBasePx.js +23 -0
  459. package/dist/core/device/useTargetBasePx.js.map +1 -0
  460. package/dist/core/device/watchDevicePixelRatio.js +27 -10
  461. package/dist/core/device/watchDevicePixelRatio.js.map +1 -1
  462. package/dist/core/geometry/autoPoseDescriptor.js +38 -24
  463. package/dist/core/geometry/autoPoseDescriptor.js.map +1 -1
  464. package/dist/core/geometry/inkExtents.js +60 -0
  465. package/dist/core/geometry/inkExtents.js.map +1 -0
  466. package/dist/core/geometry/pathPoseDescriptor.js +101 -76
  467. package/dist/core/geometry/pathPoseDescriptor.js.map +1 -1
  468. package/dist/core/geometry/poseDescriptor.js +199 -136
  469. package/dist/core/geometry/poseDescriptor.js.map +1 -1
  470. package/dist/core/geometry/regionHit.js +127 -79
  471. package/dist/core/geometry/regionHit.js.map +1 -1
  472. package/dist/core/geometry/targetFrame.js +84 -60
  473. package/dist/core/geometry/targetFrame.js.map +1 -1
  474. package/dist/core/geometry/unionBounds.js +103 -48
  475. package/dist/core/geometry/unionBounds.js.map +1 -1
  476. package/dist/core/isPlainObject.js +3 -2
  477. package/dist/core/layers/backgroundFill.js +23 -15
  478. package/dist/core/layers/backgroundFill.js.map +1 -1
  479. package/dist/core/layers/children.js +16 -13
  480. package/dist/core/layers/children.js.map +1 -1
  481. package/dist/core/layers/gateLayer.js +24 -9
  482. package/dist/core/layers/gateLayer.js.map +1 -1
  483. package/dist/core/layers/layerGroup.js +42 -29
  484. package/dist/core/layers/layerGroup.js.map +1 -1
  485. package/dist/core/layers/redrawSource.js +15 -0
  486. package/dist/core/layers/redrawSource.js.map +1 -0
  487. package/dist/core/layers/render.js +183 -93
  488. package/dist/core/layers/render.js.map +1 -1
  489. package/dist/core/layers/retain.js +38 -0
  490. package/dist/core/layers/retain.js.map +1 -0
  491. package/dist/core/ops/arrange.js +30 -19
  492. package/dist/core/ops/arrange.js.map +1 -1
  493. package/dist/core/ops/create.js +32 -23
  494. package/dist/core/ops/create.js.map +1 -1
  495. package/dist/core/ops/createHistory.js +23 -14
  496. package/dist/core/ops/createHistory.js.map +1 -1
  497. package/dist/core/ops/delete.js +80 -53
  498. package/dist/core/ops/delete.js.map +1 -1
  499. package/dist/core/ops/nodeFlags.js +44 -0
  500. package/dist/core/ops/nodeFlags.js.map +1 -0
  501. package/dist/core/ops/registry.js +26 -11
  502. package/dist/core/ops/registry.js.map +1 -1
  503. package/dist/core/ops/reorder/algorithms.js +62 -38
  504. package/dist/core/ops/reorder/algorithms.js.map +1 -1
  505. package/dist/core/ops/reorder/index.js +124 -84
  506. package/dist/core/ops/reorder/index.js.map +1 -1
  507. package/dist/core/ops/reorder/setChildOrder.js +32 -23
  508. package/dist/core/ops/reorder/setChildOrder.js.map +1 -1
  509. package/dist/core/ops/reparent.js +63 -37
  510. package/dist/core/ops/reparent.js.map +1 -1
  511. package/dist/core/ops/select.js +23 -20
  512. package/dist/core/ops/select.js.map +1 -1
  513. package/dist/core/ops/setData.js +23 -21
  514. package/dist/core/ops/setData.js.map +1 -1
  515. package/dist/core/ops/setLayer.js +26 -21
  516. package/dist/core/ops/setLayer.js.map +1 -1
  517. package/dist/core/ops/setLayout.js +27 -18
  518. package/dist/core/ops/setLayout.js.map +1 -1
  519. package/dist/core/ops/setPath.js +60 -41
  520. package/dist/core/ops/setPath.js.map +1 -1
  521. package/dist/core/ops/setText.js +26 -21
  522. package/dist/core/ops/setText.js.map +1 -1
  523. package/dist/core/ops/slot.js +36 -22
  524. package/dist/core/ops/slot.js.map +1 -1
  525. package/dist/core/ops/transform.js +35 -28
  526. package/dist/core/ops/transform.js.map +1 -1
  527. package/dist/core/pages/fitViewToPage.js +13 -11
  528. package/dist/core/pages/fitViewToPage.js.map +1 -1
  529. package/dist/core/pages/pages.js +73 -42
  530. package/dist/core/pages/pages.js.map +1 -1
  531. package/dist/core/pages/pagesLayer.js +19 -13
  532. package/dist/core/pages/pagesLayer.js.map +1 -1
  533. package/dist/core/paint/meshKind.js +16 -11
  534. package/dist/core/paint/meshKind.js.map +1 -1
  535. package/dist/core/paint/meshKindLazy.js +1 -1
  536. package/dist/core/paint/meshKindLazy.js.map +1 -1
  537. package/dist/core/paint/paintKindEntry.js +13 -4
  538. package/dist/core/paint/paintKindEntry.js.map +1 -1
  539. package/dist/core/paint/paintKinds.js +149 -88
  540. package/dist/core/paint/paintKinds.js.map +1 -1
  541. package/dist/core/paint/registerMesh.js +6 -4
  542. package/dist/core/paint/registerMesh.js.map +1 -1
  543. package/dist/core/scene/NodeProperties.js +15 -10
  544. package/dist/core/scene/NodeProperties.js.map +1 -1
  545. package/dist/core/scene/NodeRouting.js +16 -12
  546. package/dist/core/scene/NodeRouting.js.map +1 -1
  547. package/dist/core/scene/annotation.js +28 -0
  548. package/dist/core/scene/annotation.js.map +1 -0
  549. package/dist/core/scene/appliedLog.js +31 -23
  550. package/dist/core/scene/appliedLog.js.map +1 -1
  551. package/dist/core/scene/arrivalWindow.js +120 -75
  552. package/dist/core/scene/arrivalWindow.js.map +1 -1
  553. package/dist/core/scene/arrivals.js +17 -6
  554. package/dist/core/scene/arrivals.js.map +1 -1
  555. package/dist/core/scene/boundOps.js +42 -23
  556. package/dist/core/scene/boundOps.js.map +1 -1
  557. package/dist/core/scene/composeFrame.js +51 -21
  558. package/dist/core/scene/composeFrame.js.map +1 -1
  559. package/dist/core/scene/composePose.js +114 -62
  560. package/dist/core/scene/composePose.js.map +1 -1
  561. package/dist/core/scene/depFrame.js +94 -0
  562. package/dist/core/scene/depFrame.js.map +1 -0
  563. package/dist/core/scene/depMemo.js +44 -19
  564. package/dist/core/scene/depMemo.js.map +1 -1
  565. package/dist/core/scene/dependents.js +73 -45
  566. package/dist/core/scene/dependents.js.map +1 -1
  567. package/dist/core/scene/derivedParts.js +58 -0
  568. package/dist/core/scene/derivedParts.js.map +1 -0
  569. package/dist/core/scene/derivedPath.js +52 -22
  570. package/dist/core/scene/derivedPath.js.map +1 -1
  571. package/dist/core/scene/editMode.js +11 -11
  572. package/dist/core/scene/editMode.js.map +1 -1
  573. package/dist/core/scene/effectivePose.js +167 -51
  574. package/dist/core/scene/effectivePose.js.map +1 -1
  575. package/dist/core/scene/fieldEdits.js +95 -75
  576. package/dist/core/scene/fieldEdits.js.map +1 -1
  577. package/dist/core/scene/historyFacade.js +126 -87
  578. package/dist/core/scene/historyFacade.js.map +1 -1
  579. package/dist/core/scene/historyForm.js +7 -3
  580. package/dist/core/scene/historyForm.js.map +1 -1
  581. package/dist/core/scene/kitOps.js +203 -131
  582. package/dist/core/scene/kitOps.js.map +1 -1
  583. package/dist/core/scene/kitRegistry.js +49 -22
  584. package/dist/core/scene/kitRegistry.js.map +1 -1
  585. package/dist/core/scene/layerStack.js +123 -92
  586. package/dist/core/scene/layerStack.js.map +1 -1
  587. package/dist/core/scene/layoutPass.js +118 -72
  588. package/dist/core/scene/layoutPass.js.map +1 -1
  589. package/dist/core/scene/lockGuard.js +32 -24
  590. package/dist/core/scene/lockGuard.js.map +1 -1
  591. package/dist/core/scene/minSize.js +17 -0
  592. package/dist/core/scene/minSize.js.map +1 -0
  593. package/dist/core/scene/nestedHit.js +45 -31
  594. package/dist/core/scene/nestedHit.js.map +1 -1
  595. package/dist/core/scene/nodeFlags.js +43 -0
  596. package/dist/core/scene/nodeFlags.js.map +1 -0
  597. package/dist/core/scene/nodeFnFields.js +58 -41
  598. package/dist/core/scene/nodeFnFields.js.map +1 -1
  599. package/dist/core/scene/nodeGates.js +58 -0
  600. package/dist/core/scene/nodeGates.js.map +1 -0
  601. package/dist/core/scene/nodeMemo.js +92 -40
  602. package/dist/core/scene/nodeMemo.js.map +1 -1
  603. package/dist/core/scene/nodeStore.js +179 -99
  604. package/dist/core/scene/nodeStore.js.map +1 -1
  605. package/dist/core/scene/notifier.js +30 -19
  606. package/dist/core/scene/notifier.js.map +1 -1
  607. package/dist/core/scene/opTable.js +42 -36
  608. package/dist/core/scene/opTable.js.map +1 -1
  609. package/dist/core/scene/outerOps.js +49 -43
  610. package/dist/core/scene/outerOps.js.map +1 -1
  611. package/dist/core/scene/pathEffects/blend.js +80 -0
  612. package/dist/core/scene/pathEffects/blend.js.map +1 -0
  613. package/dist/core/scene/pathEffects/derive.js +112 -0
  614. package/dist/core/scene/pathEffects/derive.js.map +1 -0
  615. package/dist/core/scene/pathEffects/effects.js +40 -0
  616. package/dist/core/scene/pathEffects/effects.js.map +1 -0
  617. package/dist/core/scene/poseFeed.js +95 -60
  618. package/dist/core/scene/poseFeed.js.map +1 -1
  619. package/dist/core/scene/poseHold.js +33 -24
  620. package/dist/core/scene/poseHold.js.map +1 -1
  621. package/dist/core/scene/poseOverrides.js +86 -49
  622. package/dist/core/scene/poseOverrides.js.map +1 -1
  623. package/dist/core/scene/poseRemovals.js +58 -0
  624. package/dist/core/scene/poseRemovals.js.map +1 -0
  625. package/dist/core/scene/poseSnapshot.js +62 -41
  626. package/dist/core/scene/poseSnapshot.js.map +1 -1
  627. package/dist/core/scene/poseWrites.js +151 -0
  628. package/dist/core/scene/poseWrites.js.map +1 -0
  629. package/dist/core/scene/reconcileSpecs.js +63 -34
  630. package/dist/core/scene/reconcileSpecs.js.map +1 -1
  631. package/dist/core/scene/recorder.js +90 -57
  632. package/dist/core/scene/recorder.js.map +1 -1
  633. package/dist/core/scene/renderOrder.js +105 -59
  634. package/dist/core/scene/renderOrder.js.map +1 -1
  635. package/dist/core/scene/scene.js +133 -80
  636. package/dist/core/scene/scene.js.map +1 -1
  637. package/dist/core/scene/sceneEdits.js +62 -49
  638. package/dist/core/scene/sceneEdits.js.map +1 -1
  639. package/dist/core/scene/sceneMutators.js +44 -36
  640. package/dist/core/scene/sceneMutators.js.map +1 -1
  641. package/dist/core/scene/scenePoseAdapter.js +13 -9
  642. package/dist/core/scene/scenePoseAdapter.js.map +1 -1
  643. package/dist/core/scene/sceneRecording.js +89 -73
  644. package/dist/core/scene/sceneRecording.js.map +1 -1
  645. package/dist/core/scene/sceneSelection.js +23 -16
  646. package/dist/core/scene/sceneSelection.js.map +1 -1
  647. package/dist/core/scene/sceneState.js +54 -36
  648. package/dist/core/scene/sceneState.js.map +1 -1
  649. package/dist/core/scene/serialization.js +87 -50
  650. package/dist/core/scene/serialization.js.map +1 -1
  651. package/dist/core/scene/staleReplay.js +35 -26
  652. package/dist/core/scene/staleReplay.js.map +1 -1
  653. package/dist/core/scene/statedFields.js +10 -5
  654. package/dist/core/scene/statedFields.js.map +1 -1
  655. package/dist/core/scene/treeEdits.js +129 -98
  656. package/dist/core/scene/treeEdits.js.map +1 -1
  657. package/dist/core/scene/treeOrder.js +13 -8
  658. package/dist/core/scene/treeOrder.js.map +1 -1
  659. package/dist/core/scene/treeReads.js +25 -16
  660. package/dist/core/scene/treeReads.js.map +1 -1
  661. package/dist/core/scene/types.js +4 -3
  662. package/dist/core/scene/types.js.map +1 -1
  663. package/dist/core/scene/unionOfChildren.js +20 -10
  664. package/dist/core/scene/unionOfChildren.js.map +1 -1
  665. package/dist/core/scene/unitScopes.js +15 -8
  666. package/dist/core/scene/unitScopes.js.map +1 -1
  667. package/dist/core/scene/useScene.js +32 -24
  668. package/dist/core/scene/useScene.js.map +1 -1
  669. package/dist/core/selection/chromeState.js +41 -17
  670. package/dist/core/selection/chromeState.js.map +1 -1
  671. package/dist/core/selection/readOnlySelection.js +39 -24
  672. package/dist/core/selection/readOnlySelection.js.map +1 -1
  673. package/dist/core/selection/selectionTarget.js +14 -3
  674. package/dist/core/selection/selectionTarget.js.map +1 -1
  675. package/dist/core/selection/usePublishSceneSelection.js +25 -18
  676. package/dist/core/selection/usePublishSceneSelection.js.map +1 -1
  677. package/dist/core/selection/useSelection.js +90 -57
  678. package/dist/core/selection/useSelection.js.map +1 -1
  679. package/dist/core/shapeKinds.js +43 -28
  680. package/dist/core/shapeKinds.js.map +1 -1
  681. package/dist/core/stableStringify.js +5 -4
  682. package/dist/core/stableStringify.js.map +1 -1
  683. package/dist/core/stylus/stylus.js +49 -25
  684. package/dist/core/stylus/stylus.js.map +1 -1
  685. package/dist/core/stylus/usePointerStylus.js +61 -34
  686. package/dist/core/stylus/usePointerStylus.js.map +1 -1
  687. package/dist/core/usePaintKinds.js +21 -11
  688. package/dist/core/usePaintKinds.js.map +1 -1
  689. package/dist/core/viewport/clampView.js +31 -15
  690. package/dist/core/viewport/clampView.js.map +1 -1
  691. package/dist/core/viewport/clientToWorld.js +15 -4
  692. package/dist/core/viewport/clientToWorld.js.map +1 -1
  693. package/dist/core/viewport/createVelocityTracker.js +23 -19
  694. package/dist/core/viewport/createVelocityTracker.js.map +1 -1
  695. package/dist/core/viewport/fitToBounds.js +28 -11
  696. package/dist/core/viewport/fitToBounds.js.map +1 -1
  697. package/dist/core/viewport/fitViewToBounds.js +45 -19
  698. package/dist/core/viewport/fitViewToBounds.js.map +1 -1
  699. package/dist/core/viewport/interpolateView.js +40 -20
  700. package/dist/core/viewport/interpolateView.js.map +1 -1
  701. package/dist/core/viewport/parallax.js +89 -56
  702. package/dist/core/viewport/parallax.js.map +1 -1
  703. package/dist/core/viewport/sceneNodeClientRect.js +21 -12
  704. package/dist/core/viewport/sceneNodeClientRect.js.map +1 -1
  705. package/dist/core/viewport/screenSlop.js +40 -17
  706. package/dist/core/viewport/screenSlop.js.map +1 -1
  707. package/dist/core/viewport/useAutoCenter.js +36 -22
  708. package/dist/core/viewport/useAutoCenter.js.map +1 -1
  709. package/dist/core/viewport/useCanvasSize.js +43 -22
  710. package/dist/core/viewport/useCanvasSize.js.map +1 -1
  711. package/dist/core/viewport/useDecayLoop.js +120 -48
  712. package/dist/core/viewport/useDecayLoop.js.map +1 -1
  713. package/dist/core/viewport/useNodeOverlayFrame.js +93 -58
  714. package/dist/core/viewport/useNodeOverlayFrame.js.map +1 -1
  715. package/dist/core/viewport/useVelocityTracker.js +9 -6
  716. package/dist/core/viewport/useVelocityTracker.js.map +1 -1
  717. package/dist/core/viewport/useViewAnimation.js +143 -84
  718. package/dist/core/viewport/useViewAnimation.js.map +1 -1
  719. package/dist/core/viewport/view.js +48 -24
  720. package/dist/core/viewport/view.js.map +1 -1
  721. package/dist/core/viewport/viewTransform.js +8 -6
  722. package/dist/core/viewport/viewTransform.js.map +1 -1
  723. package/dist/core/viewport/viewportWorldRect.js +15 -7
  724. package/dist/core/viewport/viewportWorldRect.js.map +1 -1
  725. package/dist/core/viewport/wheelHandler.js +31 -20
  726. package/dist/core/viewport/wheelHandler.js.map +1 -1
  727. package/dist/core/viewport/zoomAt.js +47 -19
  728. package/dist/core/viewport/zoomAt.js.map +1 -1
  729. package/dist/core/viewport/zoomBounds.js +33 -17
  730. package/dist/core/viewport/zoomBounds.js.map +1 -1
  731. package/dist/cornerHandles-Camw_yeu.d.ts +169 -0
  732. package/dist/debug/createDebugOverlayLayer.js +303 -215
  733. package/dist/debug/createDebugOverlayLayer.js.map +1 -1
  734. package/dist/debug/createDebugSink.js +68 -47
  735. package/dist/debug/createDebugSink.js.map +1 -1
  736. package/dist/debug/defaultTheme.js +16 -4
  737. package/dist/debug/defaultTheme.js.map +1 -1
  738. package/dist/debug/flag.js +3 -2
  739. package/dist/debug/frameStats.js +11 -9
  740. package/dist/debug/frameStats.js.map +1 -1
  741. package/dist/debug/parseDebugFlags.js +25 -17
  742. package/dist/debug/parseDebugFlags.js.map +1 -1
  743. package/dist/debug/useDebugSink.js +52 -33
  744. package/dist/debug/useDebugSink.js.map +1 -1
  745. package/dist/depSchema-Cgfu_G9s.d.ts +3581 -0
  746. package/dist/features/chrome-caps/buildChromeCtx.js +12 -10
  747. package/dist/features/chrome-caps/buildChromeCtx.js.map +1 -1
  748. package/dist/features/chrome-caps/conditions.js +103 -25
  749. package/dist/features/chrome-caps/conditions.js.map +1 -1
  750. package/dist/features/chrome-caps/defaults.js +18 -10
  751. package/dist/features/chrome-caps/defaults.js.map +1 -1
  752. package/dist/features/chrome-caps/index.js +8 -7
  753. package/dist/features/chrome-caps/resolve.js +28 -16
  754. package/dist/features/chrome-caps/resolve.js.map +1 -1
  755. package/dist/features/chrome-caps/useChromeCaps.js +52 -44
  756. package/dist/features/chrome-caps/useChromeCaps.js.map +1 -1
  757. package/dist/features/chrome-caps/useHoverTracking.js +52 -26
  758. package/dist/features/chrome-caps/useHoverTracking.js.map +1 -1
  759. package/dist/features/ingestion/contentHandlers.js +80 -34
  760. package/dist/features/ingestion/contentHandlers.js.map +1 -1
  761. package/dist/features/ingestion/imageHandler.js +49 -29
  762. package/dist/features/ingestion/imageHandler.js.map +1 -1
  763. package/dist/features/ingestion/openFilePicker.js +27 -9
  764. package/dist/features/ingestion/openFilePicker.js.map +1 -1
  765. package/dist/features/ingestion/placement.js +20 -11
  766. package/dist/features/ingestion/placement.js.map +1 -1
  767. package/dist/features/ingestion/registerKitHandlers.js +35 -18
  768. package/dist/features/ingestion/registerKitHandlers.js.map +1 -1
  769. package/dist/features/ingestion/svgHandler.js +60 -34
  770. package/dist/features/ingestion/svgHandler.js.map +1 -1
  771. package/dist/features/ingestion/textHandler.js +37 -16
  772. package/dist/features/ingestion/textHandler.js.map +1 -1
  773. package/dist/features/ingestion/useCanvasIngestion.js +57 -39
  774. package/dist/features/ingestion/useCanvasIngestion.js.map +1 -1
  775. package/dist/features/ingestion/weaselJsonHandler.js +38 -28
  776. package/dist/features/ingestion/weaselJsonHandler.js.map +1 -1
  777. package/dist/features/longPress/longPressFeedback.js +110 -81
  778. package/dist/features/longPress/longPressFeedback.js.map +1 -1
  779. package/dist/features/measure/actionIds.js +22 -0
  780. package/dist/features/measure/actionIds.js.map +1 -0
  781. package/dist/features/measure/measureCommands.js +178 -0
  782. package/dist/features/measure/measureCommands.js.map +1 -0
  783. package/dist/features/measure/measureContribution.js +57 -0
  784. package/dist/features/measure/measureContribution.js.map +1 -0
  785. package/dist/features/measure/measureEdits.js +82 -0
  786. package/dist/features/measure/measureEdits.js.map +1 -0
  787. package/dist/features/measure/measureGestures.js +185 -0
  788. package/dist/features/measure/measureGestures.js.map +1 -0
  789. package/dist/features/measure/measureHit.js +80 -0
  790. package/dist/features/measure/measureHit.js.map +1 -0
  791. package/dist/features/measure/measureLayer.js +86 -0
  792. package/dist/features/measure/measureLayer.js.map +1 -0
  793. package/dist/features/measure/measurement.js +79 -0
  794. package/dist/features/measure/measurement.js.map +1 -0
  795. package/dist/features/measure/measurements.js +41 -0
  796. package/dist/features/measure/measurements.js.map +1 -0
  797. package/dist/features/modes/modeLayers.js +81 -55
  798. package/dist/features/modes/modeLayers.js.map +1 -1
  799. package/dist/features/modes/modeTriggers.js +66 -0
  800. package/dist/features/modes/modeTriggers.js.map +1 -0
  801. package/dist/features/pathEffects/index.js +35 -0
  802. package/dist/features/pathEffects/index.js.map +1 -0
  803. package/dist/features/pathEffects/readSource.js +46 -0
  804. package/dist/features/pathEffects/readSource.js.map +1 -0
  805. package/dist/features/paths/anchorData.js +65 -0
  806. package/dist/features/paths/anchorData.js.map +1 -0
  807. package/dist/features/paths/anchorMarkers.js +137 -0
  808. package/dist/features/paths/anchorMarkers.js.map +1 -0
  809. package/dist/features/paths/editablePath.js +149 -46
  810. package/dist/features/paths/editablePath.js.map +1 -1
  811. package/dist/features/paths/index.js +12 -9
  812. package/dist/features/paths/originProjection.js +16 -9
  813. package/dist/features/paths/originProjection.js.map +1 -1
  814. package/dist/features/paths/pathEditExtension.js +26 -0
  815. package/dist/features/paths/pathEditExtension.js.map +1 -0
  816. package/dist/features/paths/pathEditState.js +107 -26
  817. package/dist/features/paths/pathEditState.js.map +1 -1
  818. package/dist/features/paths/pathEditingOverlayLayer.js +58 -110
  819. package/dist/features/paths/pathEditingOverlayLayer.js.map +1 -1
  820. package/dist/features/paths/pathLayer.js +79 -29
  821. package/dist/features/paths/pathLayer.js.map +1 -1
  822. package/dist/features/paths/pathRepresentation.js +27 -0
  823. package/dist/features/paths/pathRepresentation.js.map +1 -0
  824. package/dist/features/paths/pathSnap/glyphs.js +39 -0
  825. package/dist/features/paths/pathSnap/glyphs.js.map +1 -0
  826. package/dist/features/paths/pathSnap/pathSnapSource.js +82 -0
  827. package/dist/features/paths/pathSnap/pathSnapSource.js.map +1 -0
  828. package/dist/features/paths/pathSnap/sceneIndex.js +78 -0
  829. package/dist/features/paths/pathSnap/sceneIndex.js.map +1 -0
  830. package/dist/features/paths/pathSnap/snapGeometry.js +47 -0
  831. package/dist/features/paths/pathSnap/snapGeometry.js.map +1 -0
  832. package/dist/features/paths/penPreviewLayer.js +135 -102
  833. package/dist/features/paths/penPreviewLayer.js.map +1 -1
  834. package/dist/features/paths/shapeGenerator.js +112 -60
  835. package/dist/features/paths/shapeGenerator.js.map +1 -1
  836. package/dist/features/paths/strokeOutline.js +15 -0
  837. package/dist/features/paths/strokeOutline.js.map +1 -0
  838. package/dist/features/paths/useAnchorFields.js +35 -0
  839. package/dist/features/paths/useAnchorFields.js.map +1 -0
  840. package/dist/features/paths/usePathEdit.js +58 -28
  841. package/dist/features/paths/usePathEdit.js.map +1 -1
  842. package/dist/features/poseRun/usePoseRun.js +110 -43
  843. package/dist/features/poseRun/usePoseRun.js.map +1 -1
  844. package/dist/features/selection/handleCommands.js +116 -0
  845. package/dist/features/selection/handleCommands.js.map +1 -0
  846. package/dist/features/selection/overlay.js +288 -328
  847. package/dist/features/selection/overlay.js.map +1 -1
  848. package/dist/features/selection/selectionPose.js +109 -0
  849. package/dist/features/selection/selectionPose.js.map +1 -0
  850. package/dist/features/snap/angle2d.js +158 -0
  851. package/dist/features/snap/angle2d.js.map +1 -0
  852. package/dist/features/snap/debugCandidates.js +27 -0
  853. package/dist/features/snap/debugCandidates.js.map +1 -0
  854. package/dist/features/snap/gather.js +71 -0
  855. package/dist/features/snap/gather.js.map +1 -0
  856. package/dist/features/snap/inputSubspace.js +46 -0
  857. package/dist/features/snap/inputSubspace.js.map +1 -0
  858. package/dist/features/snap/marks.js +29 -0
  859. package/dist/features/snap/marks.js.map +1 -0
  860. package/dist/features/snap/outcomeStore.js +25 -0
  861. package/dist/features/snap/outcomeStore.js.map +1 -0
  862. package/dist/features/snap/pointSnap.js +48 -0
  863. package/dist/features/snap/pointSnap.js.map +1 -0
  864. package/dist/features/snap/probes2d.js +91 -0
  865. package/dist/features/snap/probes2d.js.map +1 -0
  866. package/dist/features/snap/readoutDraw.js +93 -0
  867. package/dist/features/snap/readoutDraw.js.map +1 -0
  868. package/dist/features/snap/readoutLayer.js +49 -0
  869. package/dist/features/snap/readoutLayer.js.map +1 -0
  870. package/dist/features/snap/registry.js +27 -0
  871. package/dist/features/snap/registry.js.map +1 -0
  872. package/dist/features/snap/resizeBox.js +137 -0
  873. package/dist/features/snap/resizeBox.js.map +1 -0
  874. package/dist/features/snap/roles.js +31 -0
  875. package/dist/features/snap/roles.js.map +1 -0
  876. package/dist/features/snap/rotationSource.js +30 -0
  877. package/dist/features/snap/rotationSource.js.map +1 -0
  878. package/dist/features/snap/sceneReads.js +45 -0
  879. package/dist/features/snap/sceneReads.js.map +1 -0
  880. package/dist/features/snap/sceneSession2d.js +79 -0
  881. package/dist/features/snap/sceneSession2d.js.map +1 -0
  882. package/dist/features/snap/screen.js +23 -0
  883. package/dist/features/snap/screen.js.map +1 -0
  884. package/dist/features/snap/session2d.js +129 -0
  885. package/dist/features/snap/session2d.js.map +1 -0
  886. package/dist/features/snap/spanSnap.js +77 -0
  887. package/dist/features/snap/spanSnap.js.map +1 -0
  888. package/dist/features/snap/stepAngles.js +15 -0
  889. package/dist/features/snap/stepAngles.js.map +1 -0
  890. package/dist/features/text/editingDrawOne.js +32 -0
  891. package/dist/features/text/editingDrawOne.js.map +1 -0
  892. package/dist/features/text/index.js +7 -6
  893. package/dist/features/text/textHitAt.js +51 -0
  894. package/dist/features/text/textHitAt.js.map +1 -0
  895. package/dist/features/text/textLayer.js +21 -27
  896. package/dist/features/text/textLayer.js.map +1 -1
  897. package/dist/features/text/useSceneTextEdit.js +190 -128
  898. package/dist/features/text/useSceneTextEdit.js.map +1 -1
  899. package/dist/features/viewports/viewResolver.js +48 -39
  900. package/dist/features/viewports/viewResolver.js.map +1 -1
  901. package/dist/features/viewports/viewportLayer.js +60 -29
  902. package/dist/features/viewports/viewportLayer.js.map +1 -1
  903. package/dist/iconRegistry/IconRegistryProvider.js +73 -0
  904. package/dist/iconRegistry/IconRegistryProvider.js.map +1 -0
  905. package/dist/iconRegistry/useIconGlyph.js +14 -0
  906. package/dist/iconRegistry/useIconGlyph.js.map +1 -0
  907. package/dist/iconRegistry/useIconVariant.js +29 -0
  908. package/dist/iconRegistry/useIconVariant.js.map +1 -0
  909. package/dist/icons.d.ts +6 -0
  910. package/dist/icons.js +3 -0
  911. package/dist/icons.table.js +13 -0
  912. package/dist/icons.table.js.map +1 -0
  913. package/dist/icons.table.json +556 -0
  914. package/dist/icons2.table.js +9 -0
  915. package/dist/icons2.table.js.map +1 -0
  916. package/dist/index.d.ts +4259 -5074
  917. package/dist/index.js +340 -285
  918. package/dist/input/keyState.js +118 -54
  919. package/dist/input/keyState.js.map +1 -1
  920. package/dist/input/useKeyModifiers.js +13 -7
  921. package/dist/input/useKeyModifiers.js.map +1 -1
  922. package/dist/input/useKeyState.js +23 -16
  923. package/dist/input/useKeyState.js.map +1 -1
  924. package/dist/interactions/actions/align/action.js +76 -45
  925. package/dist/interactions/actions/align/action.js.map +1 -1
  926. package/dist/interactions/actions/align/align.js +86 -48
  927. package/dist/interactions/actions/align/align.js.map +1 -1
  928. package/dist/interactions/actions/booleans/action.js +67 -33
  929. package/dist/interactions/actions/booleans/action.js.map +1 -1
  930. package/dist/interactions/actions/booleans/booleans.js +77 -70
  931. package/dist/interactions/actions/booleans/booleans.js.map +1 -1
  932. package/dist/interactions/actions/booleans/commit.js +49 -0
  933. package/dist/interactions/actions/booleans/commit.js.map +1 -0
  934. package/dist/interactions/actions/booleans/custom.js +48 -0
  935. package/dist/interactions/actions/booleans/custom.js.map +1 -0
  936. package/dist/interactions/actions/booleans/operands.js +43 -32
  937. package/dist/interactions/actions/booleans/operands.js.map +1 -1
  938. package/dist/interactions/actions/booleans/pieces.js +29 -23
  939. package/dist/interactions/actions/booleans/pieces.js.map +1 -1
  940. package/dist/interactions/actions/booleans/placement.js +30 -17
  941. package/dist/interactions/actions/booleans/placement.js.map +1 -1
  942. package/dist/interactions/actions/booleans/useBooleans.js +30 -17
  943. package/dist/interactions/actions/booleans/useBooleans.js.map +1 -1
  944. package/dist/interactions/actions/booleans/useBooleansAdapter.js +8 -5
  945. package/dist/interactions/actions/booleans/useBooleansAdapter.js.map +1 -1
  946. package/dist/interactions/actions/clipboard/action.js +81 -40
  947. package/dist/interactions/actions/clipboard/action.js.map +1 -1
  948. package/dist/interactions/actions/clipboard/clipboardOps.js +100 -72
  949. package/dist/interactions/actions/clipboard/clipboardOps.js.map +1 -1
  950. package/dist/interactions/actions/clipboard/materializePaste.js +38 -19
  951. package/dist/interactions/actions/clipboard/materializePaste.js.map +1 -1
  952. package/dist/interactions/actions/clipboard/wireFormat.js +66 -28
  953. package/dist/interactions/actions/clipboard/wireFormat.js.map +1 -1
  954. package/dist/interactions/actions/clone/action.js +102 -70
  955. package/dist/interactions/actions/clone/action.js.map +1 -1
  956. package/dist/interactions/actions/clone/behaviors.js +55 -38
  957. package/dist/interactions/actions/clone/behaviors.js.map +1 -1
  958. package/dist/interactions/actions/defaultCommitAdapter.js +32 -10
  959. package/dist/interactions/actions/defaultCommitAdapter.js.map +1 -1
  960. package/dist/interactions/actions/defaults/anchorEditing.js +252 -111
  961. package/dist/interactions/actions/defaults/anchorEditing.js.map +1 -1
  962. package/dist/interactions/actions/defaults/anchorFields.js +54 -0
  963. package/dist/interactions/actions/defaults/anchorFields.js.map +1 -0
  964. package/dist/interactions/actions/defaults/anchorHandles.js +31 -27
  965. package/dist/interactions/actions/defaults/anchorHandles.js.map +1 -1
  966. package/dist/interactions/actions/defaults/anchorJoin.js +55 -37
  967. package/dist/interactions/actions/defaults/anchorJoin.js.map +1 -1
  968. package/dist/interactions/actions/defaults/areaSelect.js +56 -40
  969. package/dist/interactions/actions/defaults/areaSelect.js.map +1 -1
  970. package/dist/interactions/actions/defaults/bendSegment.js +67 -31
  971. package/dist/interactions/actions/defaults/bendSegment.js.map +1 -1
  972. package/dist/interactions/actions/defaults/cancelGesture.js +12 -5
  973. package/dist/interactions/actions/defaults/cancelGesture.js.map +1 -1
  974. package/dist/interactions/actions/defaults/clearSelection.js +22 -7
  975. package/dist/interactions/actions/defaults/clearSelection.js.map +1 -1
  976. package/dist/interactions/actions/defaults/contextMenu.js +149 -0
  977. package/dist/interactions/actions/defaults/contextMenu.js.map +1 -0
  978. package/dist/interactions/actions/defaults/copySubtree.js +43 -29
  979. package/dist/interactions/actions/defaults/copySubtree.js.map +1 -1
  980. package/dist/interactions/actions/defaults/createPaintAction.js +79 -54
  981. package/dist/interactions/actions/defaults/createPaintAction.js.map +1 -1
  982. package/dist/interactions/actions/defaults/delete.js +61 -33
  983. package/dist/interactions/actions/defaults/delete.js.map +1 -1
  984. package/dist/interactions/actions/defaults/duplicate.js +60 -32
  985. package/dist/interactions/actions/defaults/duplicate.js.map +1 -1
  986. package/dist/interactions/actions/defaults/enterPathEdit.js +22 -18
  987. package/dist/interactions/actions/defaults/enterPathEdit.js.map +1 -1
  988. package/dist/interactions/actions/defaults/enterTextEdit.js +20 -8
  989. package/dist/interactions/actions/defaults/enterTextEdit.js.map +1 -1
  990. package/dist/interactions/actions/defaults/escape.js +16 -7
  991. package/dist/interactions/actions/defaults/escape.js.map +1 -1
  992. package/dist/interactions/actions/defaults/exitPathEdit.js +6 -6
  993. package/dist/interactions/actions/defaults/exitPathEdit.js.map +1 -1
  994. package/dist/interactions/actions/defaults/group.js +122 -73
  995. package/dist/interactions/actions/defaults/group.js.map +1 -1
  996. package/dist/interactions/actions/defaults/ingest.js +52 -35
  997. package/dist/interactions/actions/defaults/ingest.js.map +1 -1
  998. package/dist/interactions/actions/defaults/insertPathAnchor.js +43 -22
  999. package/dist/interactions/actions/defaults/insertPathAnchor.js.map +1 -1
  1000. package/dist/interactions/actions/defaults/nudge.js +79 -52
  1001. package/dist/interactions/actions/defaults/nudge.js.map +1 -1
  1002. package/dist/interactions/actions/defaults/nudgeSteps.js +17 -12
  1003. package/dist/interactions/actions/defaults/nudgeSteps.js.map +1 -1
  1004. package/dist/interactions/actions/defaults/pathEditMarks.js +60 -0
  1005. package/dist/interactions/actions/defaults/pathEditMarks.js.map +1 -0
  1006. package/dist/interactions/actions/defaults/pathEditTools.js +57 -0
  1007. package/dist/interactions/actions/defaults/pathEditTools.js.map +1 -0
  1008. package/dist/interactions/actions/defaults/pinchZoom.js +55 -39
  1009. package/dist/interactions/actions/defaults/pinchZoom.js.map +1 -1
  1010. package/dist/interactions/actions/defaults/reorder.js +71 -40
  1011. package/dist/interactions/actions/defaults/reorder.js.map +1 -1
  1012. package/dist/interactions/actions/defaults/requiresSelection.js +13 -6
  1013. package/dist/interactions/actions/defaults/requiresSelection.js.map +1 -1
  1014. package/dist/interactions/actions/defaults/segmentUnder.js +24 -16
  1015. package/dist/interactions/actions/defaults/segmentUnder.js.map +1 -1
  1016. package/dist/interactions/actions/defaults/selectAll.js +21 -7
  1017. package/dist/interactions/actions/defaults/selectAll.js.map +1 -1
  1018. package/dist/interactions/actions/defaults/setFill.js +37 -21
  1019. package/dist/interactions/actions/defaults/setFill.js.map +1 -1
  1020. package/dist/interactions/actions/defaults/setFillOpacity.js +19 -10
  1021. package/dist/interactions/actions/defaults/setFillOpacity.js.map +1 -1
  1022. package/dist/interactions/actions/defaults/setStroke.js +46 -25
  1023. package/dist/interactions/actions/defaults/setStroke.js.map +1 -1
  1024. package/dist/interactions/actions/defaults/setStrokeOpacity.js +19 -11
  1025. package/dist/interactions/actions/defaults/setStrokeOpacity.js.map +1 -1
  1026. package/dist/interactions/actions/defaults/slice.js +42 -17
  1027. package/dist/interactions/actions/defaults/slice.js.map +1 -1
  1028. package/dist/interactions/actions/defaults/sliceOps.js +63 -42
  1029. package/dist/interactions/actions/defaults/sliceOps.js.map +1 -1
  1030. package/dist/interactions/actions/defaults/toolActivate.js +34 -16
  1031. package/dist/interactions/actions/defaults/toolActivate.js.map +1 -1
  1032. package/dist/interactions/actions/defaults/toolResetToDefault.js +29 -10
  1033. package/dist/interactions/actions/defaults/toolResetToDefault.js.map +1 -1
  1034. package/dist/interactions/actions/defaults/undoRedo.js +26 -20
  1035. package/dist/interactions/actions/defaults/undoRedo.js.map +1 -1
  1036. package/dist/interactions/actions/defaults/viewportDragPan.js +91 -58
  1037. package/dist/interactions/actions/defaults/viewportDragPan.js.map +1 -1
  1038. package/dist/interactions/actions/defaults/viewportWheelPan.js +42 -23
  1039. package/dist/interactions/actions/defaults/viewportWheelPan.js.map +1 -1
  1040. package/dist/interactions/actions/defaults/viewportZoom.js +107 -59
  1041. package/dist/interactions/actions/defaults/viewportZoom.js.map +1 -1
  1042. package/dist/interactions/actions/distribute/action.js +62 -39
  1043. package/dist/interactions/actions/distribute/action.js.map +1 -1
  1044. package/dist/interactions/actions/distribute/distribute.js +53 -34
  1045. package/dist/interactions/actions/distribute/distribute.js.map +1 -1
  1046. package/dist/interactions/actions/distribute/plan.js +40 -22
  1047. package/dist/interactions/actions/distribute/plan.js.map +1 -1
  1048. package/dist/interactions/actions/drawnBoxes.js +31 -0
  1049. package/dist/interactions/actions/drawnBoxes.js.map +1 -0
  1050. package/dist/interactions/actions/edit-anchors/action.js +248 -72
  1051. package/dist/interactions/actions/edit-anchors/action.js.map +1 -1
  1052. package/dist/interactions/actions/edit-anchors/extensionDrags.js +50 -0
  1053. package/dist/interactions/actions/edit-anchors/extensionDrags.js.map +1 -0
  1054. package/dist/interactions/actions/edit-anchors/geometry.js +74 -47
  1055. package/dist/interactions/actions/edit-anchors/geometry.js.map +1 -1
  1056. package/dist/interactions/actions/edit-anchors/handleDrag.js +101 -0
  1057. package/dist/interactions/actions/edit-anchors/handleDrag.js.map +1 -0
  1058. package/dist/interactions/actions/edit-anchors/handles.js +41 -27
  1059. package/dist/interactions/actions/edit-anchors/handles.js.map +1 -1
  1060. package/dist/interactions/actions/edit-anchors/params.js +12 -0
  1061. package/dist/interactions/actions/edit-anchors/params.js.map +1 -0
  1062. package/dist/interactions/actions/edit-anchors/preview.js +61 -19
  1063. package/dist/interactions/actions/edit-anchors/preview.js.map +1 -1
  1064. package/dist/interactions/actions/edit-anchors/symmetry.js +12 -7
  1065. package/dist/interactions/actions/edit-anchors/symmetry.js.map +1 -1
  1066. package/dist/interactions/actions/flip/action.js +119 -61
  1067. package/dist/interactions/actions/flip/action.js.map +1 -1
  1068. package/dist/interactions/actions/flip/helpers.js +69 -36
  1069. package/dist/interactions/actions/flip/helpers.js.map +1 -1
  1070. package/dist/interactions/actions/geometryProjection.js +17 -12
  1071. package/dist/interactions/actions/geometryProjection.js.map +1 -1
  1072. package/dist/interactions/actions/gestureFrames.js +20 -11
  1073. package/dist/interactions/actions/gestureFrames.js.map +1 -1
  1074. package/dist/interactions/actions/gestureLifecycle.js +93 -48
  1075. package/dist/interactions/actions/gestureLifecycle.js.map +1 -1
  1076. package/dist/interactions/actions/hitSelection.js +6 -4
  1077. package/dist/interactions/actions/hitSelection.js.map +1 -1
  1078. package/dist/interactions/actions/insert/action.js +71 -42
  1079. package/dist/interactions/actions/insert/action.js.map +1 -1
  1080. package/dist/interactions/actions/insert/commit.js +44 -22
  1081. package/dist/interactions/actions/insert/commit.js.map +1 -1
  1082. package/dist/interactions/actions/insert/extras.js +60 -38
  1083. package/dist/interactions/actions/insert/extras.js.map +1 -1
  1084. package/dist/interactions/actions/insert/frame.js +58 -39
  1085. package/dist/interactions/actions/insert/frame.js.map +1 -1
  1086. package/dist/interactions/actions/insert/geometry.js +29 -25
  1087. package/dist/interactions/actions/insert/geometry.js.map +1 -1
  1088. package/dist/interactions/actions/insert/placeAction.js +108 -0
  1089. package/dist/interactions/actions/insert/placeAction.js.map +1 -0
  1090. package/dist/interactions/actions/insert/repositionAction.js +26 -11
  1091. package/dist/interactions/actions/insert/repositionAction.js.map +1 -1
  1092. package/dist/interactions/actions/insert/rotateAction.js +19 -8
  1093. package/dist/interactions/actions/insert/rotateAction.js.map +1 -1
  1094. package/dist/interactions/actions/insert/session.js +57 -41
  1095. package/dist/interactions/actions/insert/session.js.map +1 -1
  1096. package/dist/interactions/actions/insert/shape.js +83 -25
  1097. package/dist/interactions/actions/insert/shape.js.map +1 -1
  1098. package/dist/interactions/actions/lasso-select/action.js +160 -100
  1099. package/dist/interactions/actions/lasso-select/action.js.map +1 -1
  1100. package/dist/interactions/actions/lasso-select/behaviors/selectFromLasso.js +44 -25
  1101. package/dist/interactions/actions/lasso-select/behaviors/selectFromLasso.js.map +1 -1
  1102. package/dist/interactions/actions/move/action.js +87 -52
  1103. package/dist/interactions/actions/move/action.js.map +1 -1
  1104. package/dist/interactions/actions/move/behaviors/layoutDrop.js +56 -36
  1105. package/dist/interactions/actions/move/behaviors/layoutDrop.js.map +1 -1
  1106. package/dist/interactions/actions/move/behaviors/reparentOnDrop.js +20 -10
  1107. package/dist/interactions/actions/move/behaviors/reparentOnDrop.js.map +1 -1
  1108. package/dist/interactions/actions/move/behaviors/snapBackOrDelete.js +40 -24
  1109. package/dist/interactions/actions/move/behaviors/snapBackOrDelete.js.map +1 -1
  1110. package/dist/interactions/actions/move/behaviors/snapToContainer.js +102 -64
  1111. package/dist/interactions/actions/move/behaviors/snapToContainer.js.map +1 -1
  1112. package/dist/interactions/actions/move/capture.js +103 -78
  1113. package/dist/interactions/actions/move/capture.js.map +1 -1
  1114. package/dist/interactions/actions/move/commit/index.js +43 -34
  1115. package/dist/interactions/actions/move/commit/index.js.map +1 -1
  1116. package/dist/interactions/actions/move/commit/layoutDrop.js +43 -32
  1117. package/dist/interactions/actions/move/commit/layoutDrop.js.map +1 -1
  1118. package/dist/interactions/actions/move/commit/layoutRelease.js +97 -77
  1119. package/dist/interactions/actions/move/commit/layoutRelease.js.map +1 -1
  1120. package/dist/interactions/actions/move/commit/rebase.js +16 -13
  1121. package/dist/interactions/actions/move/commit/rebase.js.map +1 -1
  1122. package/dist/interactions/actions/move/commit/reparent.js +83 -57
  1123. package/dist/interactions/actions/move/commit/reparent.js.map +1 -1
  1124. package/dist/interactions/actions/move/delta.js +58 -36
  1125. package/dist/interactions/actions/move/delta.js.map +1 -1
  1126. package/dist/interactions/actions/move/frame.js +72 -35
  1127. package/dist/interactions/actions/move/frame.js.map +1 -1
  1128. package/dist/interactions/actions/move/gestureAdapter.js +30 -20
  1129. package/dist/interactions/actions/move/gestureAdapter.js.map +1 -1
  1130. package/dist/interactions/actions/move/landedDescendants.js +40 -25
  1131. package/dist/interactions/actions/move/landedDescendants.js.map +1 -1
  1132. package/dist/interactions/actions/move/layout/container.js +92 -72
  1133. package/dist/interactions/actions/move/layout/container.js.map +1 -1
  1134. package/dist/interactions/actions/move/layout/dragged.js +61 -39
  1135. package/dist/interactions/actions/move/layout/dragged.js.map +1 -1
  1136. package/dist/interactions/actions/move/layout/dropPass.js +136 -94
  1137. package/dist/interactions/actions/move/layout/dropPass.js.map +1 -1
  1138. package/dist/interactions/actions/move/layout/exits.js +58 -30
  1139. package/dist/interactions/actions/move/layout/exits.js.map +1 -1
  1140. package/dist/interactions/actions/move/layout/glide.js +55 -34
  1141. package/dist/interactions/actions/move/layout/glide.js.map +1 -1
  1142. package/dist/interactions/actions/move/session.js +85 -56
  1143. package/dist/interactions/actions/move/session.js.map +1 -1
  1144. package/dist/interactions/actions/move/translate.js +58 -43
  1145. package/dist/interactions/actions/move/translate.js.map +1 -1
  1146. package/dist/interactions/actions/outlines/createOutlines.js +28 -20
  1147. package/dist/interactions/actions/outlines/createOutlines.js.map +1 -1
  1148. package/dist/interactions/actions/outlines/createOutlinesAction.js +43 -31
  1149. package/dist/interactions/actions/outlines/createOutlinesAction.js.map +1 -1
  1150. package/dist/interactions/actions/outlines/outlineStroke.js +68 -45
  1151. package/dist/interactions/actions/outlines/outlineStroke.js.map +1 -1
  1152. package/dist/interactions/actions/outlines/outlineStrokeAction.js +24 -19
  1153. package/dist/interactions/actions/outlines/outlineStrokeAction.js.map +1 -1
  1154. package/dist/interactions/actions/outlines/replaceWithPaths.js +57 -42
  1155. package/dist/interactions/actions/outlines/replaceWithPaths.js.map +1 -1
  1156. package/dist/interactions/actions/outlines/strokeRegion.js +37 -22
  1157. package/dist/interactions/actions/outlines/strokeRegion.js.map +1 -1
  1158. package/dist/interactions/actions/outlines/useCreateOutlinesAdapter.js +8 -5
  1159. package/dist/interactions/actions/outlines/useCreateOutlinesAdapter.js.map +1 -1
  1160. package/dist/interactions/actions/pathCommands/cutJoin.js +119 -72
  1161. package/dist/interactions/actions/pathCommands/cutJoin.js.map +1 -1
  1162. package/dist/interactions/actions/pathCommands/livePathEdit.js +74 -40
  1163. package/dist/interactions/actions/pathCommands/livePathEdit.js.map +1 -1
  1164. package/dist/interactions/actions/pathCommands/pathNodes.js +91 -82
  1165. package/dist/interactions/actions/pathCommands/pathNodes.js.map +1 -1
  1166. package/dist/interactions/actions/pathCommands/simplifyOffset.js +52 -28
  1167. package/dist/interactions/actions/pathCommands/simplifyOffset.js.map +1 -1
  1168. package/dist/interactions/actions/pathGestureTags.js +29 -0
  1169. package/dist/interactions/actions/pathGestureTags.js.map +1 -0
  1170. package/dist/interactions/actions/planeInput.js +198 -123
  1171. package/dist/interactions/actions/planeInput.js.map +1 -1
  1172. package/dist/interactions/actions/pointerState.js +12 -7
  1173. package/dist/interactions/actions/pointerState.js.map +1 -1
  1174. package/dist/interactions/actions/poseDescriptorDep.js +24 -14
  1175. package/dist/interactions/actions/poseDescriptorDep.js.map +1 -1
  1176. package/dist/interactions/actions/poseFrame.js +45 -28
  1177. package/dist/interactions/actions/poseFrame.js.map +1 -1
  1178. package/dist/interactions/actions/resize/action.js +68 -39
  1179. package/dist/interactions/actions/resize/action.js.map +1 -1
  1180. package/dist/interactions/actions/resize/aspect.js +44 -0
  1181. package/dist/interactions/actions/resize/aspect.js.map +1 -0
  1182. package/dist/interactions/actions/resize/behaviors/clampMinSize.js +38 -13
  1183. package/dist/interactions/actions/resize/behaviors/clampMinSize.js.map +1 -1
  1184. package/dist/interactions/actions/resize/boxFrame.js +15 -11
  1185. package/dist/interactions/actions/resize/boxFrame.js.map +1 -1
  1186. package/dist/interactions/actions/resize/capture.js +105 -62
  1187. package/dist/interactions/actions/resize/capture.js.map +1 -1
  1188. package/dist/interactions/actions/resize/commit.js +75 -56
  1189. package/dist/interactions/actions/resize/commit.js.map +1 -1
  1190. package/dist/interactions/actions/resize/cornerHandles.js +154 -17
  1191. package/dist/interactions/actions/resize/cornerHandles.js.map +1 -1
  1192. package/dist/interactions/actions/resize/frame.js +133 -66
  1193. package/dist/interactions/actions/resize/frame.js.map +1 -1
  1194. package/dist/interactions/actions/resize/minimum.js +35 -0
  1195. package/dist/interactions/actions/resize/minimum.js.map +1 -0
  1196. package/dist/interactions/actions/resize/replay.js +40 -30
  1197. package/dist/interactions/actions/resize/replay.js.map +1 -1
  1198. package/dist/interactions/actions/resize/ruleBounds.js +8 -5
  1199. package/dist/interactions/actions/resize/ruleBounds.js.map +1 -1
  1200. package/dist/interactions/actions/resize/session.js +95 -50
  1201. package/dist/interactions/actions/resize/session.js.map +1 -1
  1202. package/dist/interactions/actions/resolveOverlays.js +48 -33
  1203. package/dist/interactions/actions/resolveOverlays.js.map +1 -1
  1204. package/dist/interactions/actions/resolvePreviews.js +63 -46
  1205. package/dist/interactions/actions/resolvePreviews.js.map +1 -1
  1206. package/dist/interactions/actions/rotate/action.js +68 -42
  1207. package/dist/interactions/actions/rotate/action.js.map +1 -1
  1208. package/dist/interactions/actions/rotate/commit.js +39 -31
  1209. package/dist/interactions/actions/rotate/commit.js.map +1 -1
  1210. package/dist/interactions/actions/rotate/frame.js +75 -47
  1211. package/dist/interactions/actions/rotate/frame.js.map +1 -1
  1212. package/dist/interactions/actions/rotate/geometry.js +36 -24
  1213. package/dist/interactions/actions/rotate/geometry.js.map +1 -1
  1214. package/dist/interactions/actions/rotate/handle.js +28 -15
  1215. package/dist/interactions/actions/rotate/handle.js.map +1 -1
  1216. package/dist/interactions/actions/rotate/replay.js +22 -18
  1217. package/dist/interactions/actions/rotate/replay.js.map +1 -1
  1218. package/dist/interactions/actions/rotate/session.js +115 -76
  1219. package/dist/interactions/actions/rotate/session.js.map +1 -1
  1220. package/dist/interactions/actions/selectionSubtree.js +124 -53
  1221. package/dist/interactions/actions/selectionSubtree.js.map +1 -1
  1222. package/dist/interactions/actions/spatialReference.js +33 -26
  1223. package/dist/interactions/actions/spatialReference.js.map +1 -1
  1224. package/dist/interactions/actions/testUtils.js +53 -0
  1225. package/dist/interactions/actions/testUtils.js.map +1 -0
  1226. package/dist/interactions/actions/transform-again/action.js +50 -35
  1227. package/dist/interactions/actions/transform-again/action.js.map +1 -1
  1228. package/dist/interactions/actions/transform-again/memory.js +32 -21
  1229. package/dist/interactions/actions/transform-again/memory.js.map +1 -1
  1230. package/dist/interactions/actions/useActionSet.js +83 -0
  1231. package/dist/interactions/actions/useActionSet.js.map +1 -0
  1232. package/dist/interactions/actions/useStandardActions.js +23 -165
  1233. package/dist/interactions/actions/useStandardActions.js.map +1 -1
  1234. package/dist/interactions/gestures/dragGesture/dragGesture.js +109 -68
  1235. package/dist/interactions/gestures/dragGesture/dragGesture.js.map +1 -1
  1236. package/dist/interactions/gestures/dragGesture/dragPointOf.js +17 -10
  1237. package/dist/interactions/gestures/dragGesture/dragPointOf.js.map +1 -1
  1238. package/dist/interactions/gestures/dragRadial/dragRadial.js +129 -93
  1239. package/dist/interactions/gestures/dragRadial/dragRadial.js.map +1 -1
  1240. package/dist/interactions/gestures/dragRect/dragRect.js +155 -111
  1241. package/dist/interactions/gestures/dragRect/dragRect.js.map +1 -1
  1242. package/dist/interactions/gestures/handleDrag/handleDrag.js +52 -30
  1243. package/dist/interactions/gestures/handleDrag/handleDrag.js.map +1 -1
  1244. package/dist/interactions/gestures/pointerDrag/pointerDrag.js +168 -97
  1245. package/dist/interactions/gestures/pointerDrag/pointerDrag.js.map +1 -1
  1246. package/dist/interactions/gestures/shared/originProjection.js +32 -25
  1247. package/dist/interactions/gestures/shared/originProjection.js.map +1 -1
  1248. package/dist/interactions/gestures/shared/screenTolerance.js +26 -17
  1249. package/dist/interactions/gestures/shared/screenTolerance.js.map +1 -1
  1250. package/dist/interactions/gestures/thresholdDrag/thresholdDrag.js +39 -21
  1251. package/dist/interactions/gestures/thresholdDrag/thresholdDrag.js.map +1 -1
  1252. package/dist/kitSettingsSchema.js +80 -0
  1253. package/dist/kitSettingsSchema.js.map +1 -0
  1254. package/dist/{math-CYUjoyyU.d.ts → math-CrJULaZI.d.ts} +5 -6
  1255. package/dist/math.d.ts +4 -5
  1256. package/dist/math.js +7 -6
  1257. package/dist/mesh.js +3 -2
  1258. package/dist/move.d.ts +7 -6
  1259. package/dist/move.js +4 -3
  1260. package/dist/{originProjection-CoNVpITV.d.ts → options-p9GZMXbY.d.ts} +4 -27
  1261. package/dist/originProjection-gY0jb4Wb.d.ts +24 -0
  1262. package/dist/patterns-builtin.js +3 -2
  1263. package/dist/{poseDescriptor-Bqk-11Rl.d.ts → poseDescriptor-DN2yfnq_.d.ts} +7 -7
  1264. package/dist/renderer.d.ts +1 -1
  1265. package/dist/renderer.js +3 -2
  1266. package/dist/resize.d.ts +10 -28
  1267. package/dist/resize.js +6 -7
  1268. package/dist/routing.js +3 -2
  1269. package/dist/style.css +88 -1
  1270. package/dist/test-hook/createTestHook.js +23 -20
  1271. package/dist/test-hook/createTestHook.js.map +1 -1
  1272. package/dist/test-hook/install.js +32 -13
  1273. package/dist/test-hook/install.js.map +1 -1
  1274. package/dist/test-hook/useTestHook.js +22 -16
  1275. package/dist/test-hook/useTestHook.js.map +1 -1
  1276. package/dist/test-seams.d.ts +164 -1
  1277. package/dist/test-seams.js +8 -3
  1278. package/dist/tools/builtin/bone/boneActions.js +96 -70
  1279. package/dist/tools/builtin/bone/boneActions.js.map +1 -1
  1280. package/dist/tools/builtin/bone/boneOverlay.js +49 -36
  1281. package/dist/tools/builtin/bone/boneOverlay.js.map +1 -1
  1282. package/dist/tools/builtin/bone/placedRig.js +18 -14
  1283. package/dist/tools/builtin/bone/placedRig.js.map +1 -1
  1284. package/dist/tools/builtin/bone/rigEditState.js +22 -13
  1285. package/dist/tools/builtin/bone/rigEditState.js.map +1 -1
  1286. package/dist/tools/builtin/bone/useBoneTool.js +68 -41
  1287. package/dist/tools/builtin/bone/useBoneTool.js.map +1 -1
  1288. package/dist/tools/builtin/ellipse/useEllipseTool.js +22 -17
  1289. package/dist/tools/builtin/ellipse/useEllipseTool.js.map +1 -1
  1290. package/dist/tools/builtin/eyedropper/useEyedropperTool.js +44 -28
  1291. package/dist/tools/builtin/eyedropper/useEyedropperTool.js.map +1 -1
  1292. package/dist/tools/builtin/hand/dragPanContribution.js +12 -7
  1293. package/dist/tools/builtin/hand/dragPanContribution.js.map +1 -1
  1294. package/dist/tools/builtin/hand/useHandTool.js +21 -13
  1295. package/dist/tools/builtin/hand/useHandTool.js.map +1 -1
  1296. package/dist/tools/builtin/image/useImageTool.js +28 -19
  1297. package/dist/tools/builtin/image/useImageTool.js.map +1 -1
  1298. package/dist/tools/builtin/lasso/useLassoTool.js +48 -36
  1299. package/dist/tools/builtin/lasso/useLassoTool.js.map +1 -1
  1300. package/dist/tools/builtin/line/useLineTool.js +24 -17
  1301. package/dist/tools/builtin/line/useLineTool.js.map +1 -1
  1302. package/dist/tools/builtin/measure/useMeasureTool.js +84 -0
  1303. package/dist/tools/builtin/measure/useMeasureTool.js.map +1 -0
  1304. package/dist/tools/builtin/pen/penHandle.js +60 -0
  1305. package/dist/tools/builtin/pen/penHandle.js.map +1 -0
  1306. package/dist/tools/builtin/pen/usePenTool.js +461 -303
  1307. package/dist/tools/builtin/pen/usePenTool.js.map +1 -1
  1308. package/dist/tools/builtin/pencil/usePencilTool.js +20 -15
  1309. package/dist/tools/builtin/pencil/usePencilTool.js.map +1 -1
  1310. package/dist/tools/builtin/pickTopMostHit.js +51 -31
  1311. package/dist/tools/builtin/pickTopMostHit.js.map +1 -1
  1312. package/dist/tools/builtin/polygon/usePolygonTool.js +45 -28
  1313. package/dist/tools/builtin/polygon/usePolygonTool.js.map +1 -1
  1314. package/dist/tools/builtin/rect/useRectTool.js +24 -16
  1315. package/dist/tools/builtin/rect/useRectTool.js.map +1 -1
  1316. package/dist/tools/builtin/select/adapterPointQuery.js +47 -30
  1317. package/dist/tools/builtin/select/adapterPointQuery.js.map +1 -1
  1318. package/dist/tools/builtin/select/selectionContributions.js +94 -56
  1319. package/dist/tools/builtin/select/selectionContributions.js.map +1 -1
  1320. package/dist/tools/builtin/select/useSelectTool.js +155 -108
  1321. package/dist/tools/builtin/select/useSelectTool.js.map +1 -1
  1322. package/dist/tools/builtin/shared/insertToolOptions.js +5 -4
  1323. package/dist/tools/builtin/shared/insertToolOptions.js.map +1 -1
  1324. package/dist/tools/builtin/shared/pointerFollower.js +15 -8
  1325. package/dist/tools/builtin/shared/pointerFollower.js.map +1 -1
  1326. package/dist/tools/builtin/slice/useSliceTool.js +148 -101
  1327. package/dist/tools/builtin/slice/useSliceTool.js.map +1 -1
  1328. package/dist/tools/builtin/star/useStarTool.js +48 -31
  1329. package/dist/tools/builtin/star/useStarTool.js.map +1 -1
  1330. package/dist/tools/builtin/sticky/stickyNode.js +49 -0
  1331. package/dist/tools/builtin/sticky/stickyNode.js.map +1 -0
  1332. package/dist/tools/builtin/sticky/useStickyTool.js +86 -0
  1333. package/dist/tools/builtin/sticky/useStickyTool.js.map +1 -0
  1334. package/dist/tools/builtin/text/useTextTool.js +59 -34
  1335. package/dist/tools/builtin/text/useTextTool.js.map +1 -1
  1336. package/dist/tools/builtin/weight/useWeightTool.js +66 -42
  1337. package/dist/tools/builtin/weight/useWeightTool.js.map +1 -1
  1338. package/dist/tools/builtin/weight/weightActions.js +93 -65
  1339. package/dist/tools/builtin/weight/weightActions.js.map +1 -1
  1340. package/dist/tools/builtin/weight/weightOverlay.js +47 -30
  1341. package/dist/tools/builtin/weight/weightOverlay.js.map +1 -1
  1342. package/dist/tools/overlayBinding.js +7 -5
  1343. package/dist/tools/overlayBinding.js.map +1 -1
  1344. package/dist/tools/useKeybindings.js +62 -46
  1345. package/dist/tools/useKeybindings.js.map +1 -1
  1346. package/dist/{types-DBbbCy0i.d.ts → types-CHVXGfYm.d.ts} +5 -5
  1347. package/dist/util/color.js +39 -18
  1348. package/dist/util/color.js.map +1 -1
  1349. package/dist/util/paint.js +93 -38
  1350. package/dist/util/paint.js.map +1 -1
  1351. package/dist/version.js +11 -3
  1352. package/dist/version.js.map +1 -1
  1353. package/package.json +35 -23
  1354. package/dist/canvas/SceneCanvas/GestureDispatcherMounter.js +0 -126
  1355. package/dist/canvas/SceneCanvas/GestureDispatcherMounter.js.map +0 -1
  1356. package/dist/canvas/SceneCanvas/StandardActionsRegistrar.js +0 -55
  1357. package/dist/canvas/SceneCanvas/StandardActionsRegistrar.js.map +0 -1
  1358. package/dist/canvas/SceneCanvas/ToolKeybindingsMounter.js +0 -16
  1359. package/dist/canvas/SceneCanvas/ToolKeybindingsMounter.js.map +0 -1
  1360. package/dist/canvas/SceneCanvas/isDev.js +0 -12
  1361. package/dist/canvas/SceneCanvas/isDev.js.map +0 -1
  1362. package/dist/canvas/SceneCanvas/useViewLayerGate.js +0 -20
  1363. package/dist/canvas/SceneCanvas/useViewLayerGate.js.map +0 -1
  1364. package/dist/cornerHandles-BSKbyuvQ.d.ts +0 -104
  1365. package/dist/icons/ArrowIcon.js +0 -23
  1366. package/dist/icons/ArrowIcon.js.map +0 -1
  1367. package/dist/icons/EllipseIcon.js +0 -21
  1368. package/dist/icons/EllipseIcon.js.map +0 -1
  1369. package/dist/icons/EyedropperIcon.js +0 -49
  1370. package/dist/icons/EyedropperIcon.js.map +0 -1
  1371. package/dist/icons/HandIcon.js +0 -59
  1372. package/dist/icons/HandIcon.js.map +0 -1
  1373. package/dist/icons/ImageIcon.js +0 -34
  1374. package/dist/icons/ImageIcon.js.map +0 -1
  1375. package/dist/icons/LassoIcon.js +0 -22
  1376. package/dist/icons/LassoIcon.js.map +0 -1
  1377. package/dist/icons/LineIcon.js +0 -22
  1378. package/dist/icons/LineIcon.js.map +0 -1
  1379. package/dist/icons/PenIcon.js +0 -36
  1380. package/dist/icons/PenIcon.js.map +0 -1
  1381. package/dist/icons/PencilIcon.js +0 -25
  1382. package/dist/icons/PencilIcon.js.map +0 -1
  1383. package/dist/icons/PolygonIcon.js +0 -19
  1384. package/dist/icons/PolygonIcon.js.map +0 -1
  1385. package/dist/icons/RectIcon.js +0 -37
  1386. package/dist/icons/RectIcon.js.map +0 -1
  1387. package/dist/icons/SelectIcon.js +0 -20
  1388. package/dist/icons/SelectIcon.js.map +0 -1
  1389. package/dist/icons/SliceIcon.js +0 -24
  1390. package/dist/icons/SliceIcon.js.map +0 -1
  1391. package/dist/icons/StarIcon.js +0 -19
  1392. package/dist/icons/StarIcon.js.map +0 -1
  1393. package/dist/icons/TextIcon.js +0 -19
  1394. package/dist/icons/TextIcon.js.map +0 -1
  1395. package/dist/icons/UnknownIcon.js +0 -33
  1396. package/dist/icons/UnknownIcon.js.map +0 -1
  1397. package/dist/icons/_base.js +0 -12
  1398. package/dist/icons/_base.js.map +0 -1
  1399. package/dist/interactions/actions/actionShortcuts.js +0 -32
  1400. package/dist/interactions/actions/actionShortcuts.js.map +0 -1
  1401. package/dist/interactions/actions/defaults/icons/actionGlyphIcons.js +0 -40
  1402. package/dist/interactions/actions/defaults/icons/actionGlyphIcons.js.map +0 -1
  1403. package/dist/interactions/actions/defaults/icons/actionGlyphs.js +0 -10
  1404. package/dist/interactions/actions/defaults/icons/actionGlyphs.js.map +0 -1
  1405. package/dist/interactions/actions/defaults/icons/alignIcons.js +0 -173
  1406. package/dist/interactions/actions/defaults/icons/alignIcons.js.map +0 -1
  1407. package/dist/interactions/actions/defaults/icons/anchorIcons.js +0 -75
  1408. package/dist/interactions/actions/defaults/icons/anchorIcons.js.map +0 -1
  1409. package/dist/interactions/actions/defaults/icons/booleanIcons.js +0 -194
  1410. package/dist/interactions/actions/defaults/icons/booleanIcons.js.map +0 -1
  1411. package/dist/interactions/actions/defaults/icons/distributeIcons.js +0 -63
  1412. package/dist/interactions/actions/defaults/icons/distributeIcons.js.map +0 -1
  1413. package/dist/interactions/actions/defaults/icons/editIcons.js +0 -307
  1414. package/dist/interactions/actions/defaults/icons/editIcons.js.map +0 -1
  1415. package/dist/interactions/actions/defaults/icons/outlineIcons.js +0 -91
  1416. package/dist/interactions/actions/defaults/icons/outlineIcons.js.map +0 -1
  1417. package/dist/interactions/actions/resize/behaviors/index.js +0 -8
  1418. package/dist/interactions/actions/resize/behaviors/index.js.map +0 -1
  1419. package/dist/interactions/actions/resize/behaviors/lockAspect.js +0 -24
  1420. package/dist/interactions/actions/resize/behaviors/lockAspect.js.map +0 -1
  1421. package/dist/interactions/actions/resize/pointSnap.js +0 -111
  1422. package/dist/interactions/actions/resize/pointSnap.js.map +0 -1
  1423. package/dist/interactions/actions/rotate/behaviors/index.js +0 -7
  1424. package/dist/interactions/actions/rotate/behaviors/index.js.map +0 -1
  1425. package/dist/interactions/actions/rotate/behaviors/snapRotation.js +0 -12
  1426. package/dist/interactions/actions/rotate/behaviors/snapRotation.js.map +0 -1
  1427. package/dist/interactions/gestures/shared/snap.js +0 -24
  1428. package/dist/interactions/gestures/shared/snap.js.map +0 -1
  1429. package/dist/test-seams-D0pyV3pR.d.ts +0 -149
  1430. package/dist/util/constrainTo45.js +0 -17
  1431. package/dist/util/constrainTo45.js.map +0 -1
@@ -1,318 +1,201 @@
1
- import { drawLayers as e, isLayerPainted as t } from "../core/layers/render.js";
2
- import { createBackgroundFillLayer as n } from "../core/layers/backgroundFill.js";
3
- import { clientToWorld as r } from "../core/viewport/clientToWorld.js";
4
- import { AUTO_POSE_DESCRIPTOR as i } from "../core/geometry/autoPoseDescriptor.js";
5
- import { useViewHelpers as a } from "./useViewHelpers.js";
6
- import { useOptionalViewRegistry as o } from "./viewRegistry.js";
7
- import { shaderKeyOf as s } from "./canvasRenderer.js";
8
- import { useCanvasSurface as c } from "./useCanvasSurface.js";
9
- import { SurfaceCanvas as ee } from "./SurfaceCanvas.js";
10
- import { isCustomEntry as l } from "./layerSlots.js";
11
- import { composeOrderedLayers as u, placeToolOverlays as d } from "./layerOrder.js";
12
- import { registerMountedCanvas as f } from "./mountedCanvases.js";
13
- import { useSurfaceInput as te } from "./useSurfaceInput.js";
14
- import { beginDebugFrame as ne, useDebugSink as re } from "../debug/useDebugSink.js";
15
- import { useToolCursor as ie } from "./useToolCursor.js";
16
- import { createPaintedCursorLayer as p } from "./paintedCursorLayer.js";
17
- import { viewToMat3 as ae } from "@weasel-js/renderer";
18
- import { forwardRef as m, useCallback as h, useEffect as g, useImperativeHandle as oe, useInsertionEffect as _, useLayoutEffect as v, useMemo as y, useRef as b, useState as se, useSyncExternalStore as ce } from "react";
19
- import { useLatest as x } from "@weasel-js/react";
20
- import { jsx as le } from "react/jsx-runtime";
21
- import { createCursorSink as ue, createPaintedCursorState as de } from "@weasel-js/cursor";
1
+ import { AUTO_POSE_DESCRIPTOR } from "../core/geometry/autoPoseDescriptor.js";
2
+ import { useViewHelpers } from "./useViewHelpers.js";
3
+ import { useOptionalViewRegistry } from "./viewRegistry.js";
4
+ import { useCanvasSurface } from "./useCanvasSurface.js";
5
+ import { SurfaceCanvas } from "./SurfaceCanvas.js";
6
+ import { useSurfaceSize } from "./useSurfaceSize.js";
7
+ import { registerMountedCanvas } from "./mountedCanvases.js";
8
+ import { useViewLayerGate } from "./useViewLayerGate.js";
9
+ import { useSurfaceInput } from "./useSurfaceInput.js";
10
+ import { useDebugSink } from "../debug/useDebugSink.js";
11
+ import { useToolCursor } from "./useToolCursor.js";
12
+ import { useCanvasElements } from "./useCanvasElements.js";
13
+ import { alwaysVisible, useExtraLayers } from "./useExtraLayers.js";
14
+ import { usePaintedCursor } from "./usePaintedCursor.js";
15
+ import { useCanvasHandle } from "./useCanvasHandle.js";
16
+ import { useComposedLayers, useSlotLayers } from "./useLayerStack.js";
17
+ import { useViewRegistrySurface } from "./useViewRegistrySurface.js";
18
+ import { useCanvasPaint, usePaintedVersion } from "./useCanvasPaint.js";
19
+ import { layerHover } from "./layerHover.js";
20
+ import { useClientToWorld } from "./useClientToWorld.js";
21
+ import { forwardRef, useCallback, useEffect, useInsertionEffect, useLayoutEffect, useRef } from "react";
22
+ import { useLatest } from "@weasel-js/react";
23
+ import { jsx } from "react/jsx-runtime";
24
+
22
25
  //#region src/canvas/Canvas.tsx
23
- var fe = (e) => !0, pe = [], me = {};
24
- function he(m, he) {
25
- let { width: S, height: C, dpr: w, flattenTolerance: ge, contentVersion: _e, syncPaint: ve = !1, redrawOn: ye, adapter: be, layers: T, selection: xe, boundsOf: Se, boundsOfPose: Ce, clientToWorld: we, paintInto: E, inputElement: D, poseDescriptor: Te = i, className: Ee, style: De, tabIndex: Oe = 0, onFocus: ke, onBlur: Ae, autoFocusOnPointerDown: je = !0, helpersRef: Me, tools: O, viewState: Ne, debug: Pe, debugSinkRef: Fe, shaders: k, previewPoseExtra: Ie, gestureSource: Le, backgroundFill: A, decorationLayer: j, getIsVisible: Re, layerVisibility: M, layerOrder: N, layerGroups: ze } = m, { sink: P, overlay: F, frameStats: Be, getDebug: Ve } = re(Pe), I = b(null), L = b(null), He = h((e) => {
26
- L.current = e, I.current = e;
27
- }, []), R = !!E;
28
- _(() => {
29
- R && (I.current = D ?? null);
26
+ /**
27
+ * Low-level WebGL surface + viewport primitive. Composes layers into a single GL render pass,
28
+ * applies a view transform, and delivers hover to the layers that ask for it. It routes no
29
+ * gesture: `<SceneCanvas>` mounts the gesture dispatcher on this same element. Canvas owns NO
30
+ * scene-shaped state — selection, picking, kind registry, scene-aware overlays all live in
31
+ * `<SceneCanvas>`, which wraps it.
32
+ *
33
+ * The `layers` prop is a map keyed by slot name, every slot already a layer. Standard slots
34
+ * render at a canonical position; custom entries (any other key, value carrying `.layer`) insert
35
+ * at `after`/`before` an existing slot, defaulting to the top.
36
+ *
37
+ * @internal
38
+ * @deprecated Bare `<Canvas>` is not a supported consumer surface.
39
+ * Use `<SceneCanvas>` instead.
40
+ */
41
+ var NO_SELECTION = [];
42
+ function CanvasInner(props, ref) {
43
+ const { paintInto, inputElement, tools, viewState, style, getIsVisible, layerVisibility, layerOrder, helpersRef, debugSinkRef, poseDescriptor: geometry = AUTO_POSE_DESCRIPTOR } = props;
44
+ const { sink: debugSink, overlay: debugOverlay, frameStats, getDebug } = useDebugSink(props.debug);
45
+ const elements = useCanvasElements(paintInto, inputElement);
46
+ const { canvasRef, ownCanvasRef, detached } = elements;
47
+ const { width, height } = useSurfaceSize(props, ownCanvasRef);
48
+ const helpersForLayersRef = useRef(null);
49
+ const dimsRef = useLatest({
50
+ width,
51
+ height
52
+ });
53
+ const gateRef = useLatest({
54
+ getIsVisible,
55
+ layerVisibility,
56
+ layerOrder
57
+ });
58
+ const paintRef = useRef(() => false);
59
+ const { lease, requestRedraw, subscribeFrame, subscribeBeforePaint, subscribeResume } = useCanvasSurface(useCallback(() => paintRef.current(), []), {
60
+ syncPaint: props.syncPaint ?? false,
61
+ target: canvasRef,
62
+ dpr: props.dpr,
63
+ redrawOn: props.redrawOn,
64
+ shaders: props.shaders,
65
+ onCommit: "redraw"
30
66
  });
31
- let Ue = R ? E.canvas ?? null : null, We = x(Ue), Ge = R ? {
32
- x: E.x,
33
- y: E.y
34
- } : null, z = x(Ge), B = b(null), V = x({
35
- width: S,
36
- height: C
37
- }), H = x({
38
- getIsVisible: Re,
39
- layerVisibility: M,
40
- layerOrder: N
41
- }), Ke = b(() => !1), { lease: qe, requestRedraw: U, subscribeFrame: Je, subscribeBeforePaint: Ye, subscribeResume: Xe } = c(h(() => Ke.current(), []), {
42
- syncPaint: ve,
43
- target: I,
44
- dpr: w,
45
- redrawOn: ye,
46
- shaders: k
47
- }), Ze = x(_e), Qe = b(0), $e = h(() => Qe.current, []), [et, tt] = se(0), W = b(/* @__PURE__ */ new Set()), nt = h((e) => (W.current.add(e), tt((e) => e + 1), () => {
48
- W.current.delete(e), tt((e) => e + 1);
49
- }), []), G = h((e, n, r, i, a, o) => {
50
- let s = [...W.current].reverse(), c = H.current, ee = c.getIsVisible?.() ?? fe, l = c.layerVisibility ?? me, u = c.layerOrder;
51
- for (let c of s) {
52
- if (!c.hitTest || o && !o.includes(c) || !t(c, l, u)) continue;
53
- let s = c.hitTest(e, n, a, r, i, ee);
54
- if (s) return {
55
- layerId: c.id,
56
- hit: s
57
- };
58
- }
59
- return null;
60
- }, [H]), { viewRef: K, controlled: q, setView: rt, getView: J, subscribeView: it, adoptControlled: at, announceControlled: ot, clearSubscribers: st } = Ne, ct = h((e, t, n) => G(e, t, n?.view ?? K.current, n?.dims ?? V.current, B.current), [
61
- G,
62
- V,
63
- K
64
- ]), lt = x(we), Y = h((e, t) => {
65
- let n = I.current;
66
- if (!n) return [e, t];
67
- let i = lt.current;
68
- return i ? i(n, e, t) : r(e, t, n.getBoundingClientRect(), K.current);
69
- }, [lt, K]);
70
- v(() => {
71
- let e = I.current;
72
- if (e) return f({
73
- element: e,
74
- getView: J
67
+ const { getPaintedVersion, markPainted } = usePaintedVersion(props.contentVersion);
68
+ const { extrasRef, extrasVersion, registerLayer, hitTestExtrasIn } = useExtraLayers(gateRef);
69
+ const { viewRef, setView, getView, subscribeView, adoptControlled, announceControlled, clearSubscribers } = viewState;
70
+ const toWorld = useClientToWorld(canvasRef, props.clientToWorld, viewRef);
71
+ useLayoutEffect(() => {
72
+ const element = canvasRef.current;
73
+ if (!element) return;
74
+ return registerMountedCanvas({
75
+ element,
76
+ getView
75
77
  });
76
78
  }, [
77
- R,
78
- D,
79
- J
79
+ canvasRef,
80
+ detached,
81
+ inputElement,
82
+ getView
80
83
  ]);
81
- let X = y(() => de(), []), ut = y(() => p(X), [X]);
82
- g(() => X.subscribe(() => {
83
- U();
84
- }), [X, U]);
85
- let dt = y(() => ue({
86
- element: () => I.current,
87
- painted: () => X
88
- }), [X]), ft = h(() => {
89
- let e = z.current, { width: t, height: n } = V.current;
90
- return {
91
- x: e?.x ?? 0,
92
- y: e?.y ?? 0,
93
- width: t,
94
- height: n
95
- };
96
- }, [V, z]);
97
- oe(he, () => ({
98
- element: R ? D ?? null : I.current,
99
- surface: R ? E?.canvas ?? null : L.current,
100
- getSurfaceRect: ft,
101
- clientToWorld: Y,
102
- requestRedraw: U,
103
- subscribeFrame: Je,
104
- subscribeBeforePaint: Ye,
105
- subscribeResume: Xe,
106
- registerLayer: nt,
107
- hitTestExtras: ct,
108
- getView: J,
109
- setView: rt,
110
- subscribeView: it,
111
- getPaintedVersion: $e,
112
- paintedCursor: X,
113
- cursorSink: dt,
114
- getDebug: Ve
115
- }), [
116
- I,
117
- L,
118
- R,
119
- D,
120
- E?.canvas,
121
- ft,
122
- Y,
123
- U,
124
- Je,
125
- Ye,
126
- Xe,
127
- nt,
128
- ct,
129
- J,
130
- rt,
131
- it,
132
- $e,
133
- X,
134
- dt,
135
- Ve
136
- ]);
137
- let pt = b(/* @__PURE__ */ new Map()), Z = o(), mt = xe?.current ?? pe, { helpers: ht, chromeState: gt } = a({
138
- adapter: be,
139
- geometry: Te,
140
- boundsOf: Se,
141
- boundsOfPose: Ce,
142
- selection: mt,
143
- gestureSource: Le,
144
- previewPoseExtra: Ie,
145
- getIsVisible: () => H.current.getIsVisible?.() ?? fe
146
- }), _t = { getDebug: () => P }, vt = {
147
- ...ht,
148
- ..._t,
84
+ const { paintedCursor, paintedCursorLayer, cursorSink } = usePaintedCursor(canvasRef, requestRedraw);
85
+ const frame = {
86
+ viewRef,
87
+ dimsRef,
88
+ helpersRef: helpersForLayersRef
89
+ };
90
+ useCanvasHandle(ref, {
91
+ ...elements,
92
+ inputElement,
93
+ paintCanvas: paintInto?.canvas
94
+ }, frame, {
95
+ hitTestExtrasIn,
96
+ clientToWorld: toWorld,
97
+ requestRedraw,
98
+ subscribeFrame,
99
+ subscribeBeforePaint,
100
+ subscribeResume,
101
+ registerLayer,
102
+ getView,
103
+ setView,
104
+ subscribeView,
105
+ getPaintedVersion,
106
+ paintedCursor,
107
+ cursorSink,
108
+ getDebug
109
+ });
110
+ const viewRegistry = useOptionalViewRegistry();
111
+ const layers = useSlotLayers(props.layers, tools, props.backgroundFill, props.decorationLayer);
112
+ const { helpers: viewHelpers } = useViewHelpers({
113
+ adapter: props.adapter,
114
+ geometry,
115
+ boundsOf: props.boundsOf,
116
+ boundsOfPose: props.boundsOfPose,
117
+ nodes: props.nodes,
118
+ gestureSource: props.gestureSource,
119
+ previewPoseExtra: props.previewPoseExtra,
120
+ getScale: () => viewRef.current.scale,
121
+ selection: props.selection?.current ?? NO_SELECTION,
122
+ getIsVisible: () => gateRef.current.getIsVisible?.() ?? alwaysVisible,
123
+ layerIsPainted: useViewLayerGate(layerVisibility, layerOrder, () => layers)
124
+ });
125
+ const helpersForLayers = {
126
+ ...viewHelpers,
127
+ getDebug: () => debugSink,
149
128
  viewId: null
150
- }, yt = y(() => A ? n(A) : void 0, [A]), Q = y(() => {
151
- let e = {};
152
- for (let t of [
153
- "grid",
154
- "cellHighlight",
155
- "selectionOverlay"
156
- ]) {
157
- let n = T[t];
158
- l(n) && (e[t] = n.layer);
159
- }
160
- let t = u(j ? {
161
- ...T,
162
- decorationLayer: { layer: j }
163
- } : T, e, T.scene?.layers, yt);
164
- return O && d(t, e.selectionOverlay, O.getActiveOverlays), t;
165
- }, [
166
- T,
167
- O,
168
- yt,
169
- j
170
- ]), bt = ce(h((e) => Z?.subscribe(e) ?? (() => {}), [Z]), () => Z?.getVersion() ?? 0, () => 0), xt = x(Q);
171
- g(() => Z?.attachSurface({
172
- view: () => K.current,
173
- dims: () => V.current,
174
- layers: () => xt.current,
175
- requestRedraw: U,
176
- chromeState: () => B.current.getChromeState(),
177
- hitTestExtras: G,
178
- clientToWorld: Y,
179
- claimsAbove: (e, t) => {
180
- let n = K.current, r = e / n.scale.x + n.x, i = t / n.scale.y + n.y;
181
- return G(r, i, n, V.current, B.current) !== null;
182
- }
183
- }), [
184
- Z,
185
- I,
186
- U,
187
- G,
188
- V,
189
- xt,
190
- K,
191
- Y
192
- ]);
193
- let $ = y(() => {
194
- let e = Z ? [...Q, ...Z.list().filter((e) => e.paint).map((e) => e.layer)] : Q;
195
- return [
196
- ...F ? [...e, F] : e,
197
- ...W.current,
198
- ut
199
- ];
200
- }, [
201
- Q,
202
- F,
203
- et,
204
- Z,
205
- bt,
206
- ut
207
- ]);
208
- g(() => {
209
- let e = () => {
210
- U();
211
- }, t = [];
212
- for (let n of $) n.subscribe && t.push(n.subscribe(e));
213
- return () => {
214
- for (let e of t) e();
215
- };
216
- }, [$, U]);
217
- let St = s(k), Ct = x({
218
- layers: $,
219
- width: S,
220
- height: C,
221
- debugSink: P,
222
- frameStats: Be,
223
- dpr: w,
224
- layerGroups: ze,
225
- shaders: k,
226
- flattenTolerance: ge
129
+ };
130
+ useViewRegistrySurface(viewRegistry, layers, frame, {
131
+ requestRedraw,
132
+ hitTestExtrasIn,
133
+ clientToWorld: toWorld
227
134
  });
228
- _(() => {
229
- at(), B.current = vt, Me && (Me.current = vt), Fe && (Fe.current = P);
230
- }), v(() => {
231
- ot();
135
+ const layersWithDebug = useComposedLayers(layers, {
136
+ viewRegistry,
137
+ debugOverlay,
138
+ extrasRef,
139
+ extrasVersion,
140
+ cursorLayer: paintedCursorLayer
141
+ }, requestRedraw);
142
+ const paintInputsRef = useLatest({
143
+ layers: layersWithDebug,
144
+ width,
145
+ height,
146
+ debugSink,
147
+ frameStats,
148
+ dpr: props.dpr,
149
+ layerGroups: props.layerGroups,
150
+ shaders: props.shaders,
151
+ flattenTolerance: props.flattenTolerance,
152
+ retain: props.retain
232
153
  });
233
- let wt = h(() => {
234
- let t = We.current ?? L.current;
235
- if (!t) return !1;
236
- let n = z.current, { layers: r, width: i, height: a, debugSink: o, frameStats: s, dpr: c, flattenTolerance: ee, layerGroups: l, shaders: u } = Ct.current, d = ne(o, s, r), f = qe.bind(t, {
237
- width: i,
238
- height: a,
239
- dpr: c
240
- }, {
241
- tile: n,
242
- flattenTolerance: ee,
243
- shaders: u
244
- });
245
- if (!f) return !1;
246
- let te = K.current, { layerVisibility: re, layerOrder: ie } = H.current, p = d?.time(), m = e(r, B.current, re ?? me, ie, te, {
247
- width: i,
248
- height: a
249
- }, pt.current, void 0, l, p);
250
- return f.render(m, ae(te), p ? { spans: p } : void 0), d?.end(f.lastFrameStats()), Qe.current = Ze.current?.() ?? 0, !0;
251
- }, [
252
- Ze,
253
- H,
254
- qe,
255
- Ct,
256
- z,
257
- We,
258
- K
259
- ]);
260
- return _(() => {
261
- Ke.current = wt;
262
- }), v(() => {
263
- U();
264
- }, [
265
- $,
266
- S,
267
- C,
268
- P,
269
- w,
270
- ge,
271
- q?.x,
272
- q?.y,
273
- q?.scale.x,
274
- q?.scale.y,
275
- M,
276
- N,
277
- ze,
278
- St,
279
- ve,
280
- gt,
281
- Re,
282
- Ue,
283
- Ge?.x,
284
- Ge?.y,
285
- U
286
- ]), g(() => {
287
- let e = pt.current;
288
- return () => {
289
- e.clear(), st();
290
- };
291
- }, [st]), ie(dt, O, R ? D : null, De?.cursor), te(I, {
292
- focusOnPress: je,
293
- onFocus: ke,
294
- onBlur: Ae,
295
- onHover: (e, n) => {
296
- let r = K.current, [i, a] = Y(n.clientX, n.clientY), o = M ?? me;
297
- for (let e of $) e.onUncapturedMove && t(e, o, N) && e.onUncapturedMove(i, a, n, r, {
298
- width: S,
299
- height: C
300
- });
301
- },
302
- onLeave: () => {
303
- for (let e of $) e.onUncapturedLeave?.();
304
- }
305
- }), R ? null : /* @__PURE__ */ le(ee, {
306
- ref: He,
307
- width: S,
308
- height: C,
309
- tabIndex: Oe,
310
- className: Ee,
311
- style: De
154
+ useInsertionEffect(() => {
155
+ adoptControlled();
156
+ helpersForLayersRef.current = helpersForLayers;
157
+ if (helpersRef) helpersRef.current = helpersForLayers;
158
+ if (debugSinkRef) debugSinkRef.current = debugSink;
159
+ });
160
+ useLayoutEffect(() => {
161
+ announceControlled();
162
+ });
163
+ useCanvasPaint(paintRef, lease, elements, {
164
+ ...frame,
165
+ inputsRef: paintInputsRef,
166
+ gateRef
167
+ }, markPainted);
168
+ useEffect(() => clearSubscribers, [clearSubscribers]);
169
+ useToolCursor(cursorSink, tools, detached ? inputElement : null, style?.cursor);
170
+ useSurfaceInput(canvasRef, {
171
+ focusOnPress: props.autoFocusOnPointerDown ?? true,
172
+ onFocus: props.onFocus,
173
+ onBlur: props.onBlur,
174
+ ...layerHover(layersWithDebug, {
175
+ viewRef,
176
+ toWorld,
177
+ layerVisibility,
178
+ layerOrder,
179
+ dims: {
180
+ width,
181
+ height
182
+ }
183
+ })
184
+ });
185
+ if (detached) return null;
186
+ return /* @__PURE__ */ jsx(SurfaceCanvas, {
187
+ ref: elements.setOwnCanvas,
188
+ width: props.width,
189
+ height: props.height,
190
+ tabIndex: props.tabIndex ?? 0,
191
+ className: props.className,
192
+ style
312
193
  });
313
194
  }
314
- var S = m(he);
315
- //#endregion
316
- export { S as Canvas };
195
+ /** Forward-ref'd `<canvas>` wrapper. Generic over the pose type, inferred from the
196
+ * `adapter` prop. */
197
+ var Canvas = forwardRef(CanvasInner);
317
198
 
199
+ //#endregion
200
+ export { Canvas };
318
201
  //# sourceMappingURL=Canvas.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Canvas.js","names":["clientToWorld","clientToWorldHelper","alwaysVisible","NO_SELECTION","NO_LAYER_VISIBILITY","CanvasInner","dprProp","layersMap","clientToWorld$1","geometry","AUTO_POSE_DESCRIPTOR","debugProp","props","debugSink","debugOverlay","useDebugSink","canvasRef","useRef","ownCanvasRef","setOwnCanvas","useCallback","el","detached","paintInto","inputElement","paintTarget","paintTargetRef","useLatest","paintRect","paintRectRef","helpersForLayersRef","dimsRef","gateRef","paintRef","useCanvasSurface","contentVersionRef","contentVersion","paintedVersionRef","getPaintedVersion","extrasVersion","setExtrasVersion","useState","extrasRef","registerLayer","layer","n","hitTestExtrasIn","layers","gate","isVisible","visibility","order","only","isLayerPainted","hit","worldX","worldY","data","view","dims","controlledView","viewState","hitTestExtras","frame","viewRef","clientToWorldRef","toWorld","clientX","clientY","override","clientToWorld","element","registerMountedCanvas","getView","paintedCursor","useMemo","createPaintedCursorState","paintedCursorLayer","createPaintedCursorLayer","requestRedraw","cursorSink","createCursorSink","getSurfaceRect","origin","w","h","ref","subscribeFrame","subscribeBeforePaint","subscribeResume","setView","subscribeView","getDebug","layerCacheRef","viewRegistry","useOptionalViewRegistry","selectedIdsForWiring","selection","viewHelpers","viewChromeState","useViewHelpers","surfaceHelpers","helpersForLayers","backgroundLayer","backgroundFill","createBackgroundFillLayer","standardLayers","slot","entry","isCustomEntry","out","composeOrderedLayers","decorationLayer","tools","placeToolOverlays","viewRegistryVersion","useSyncExternalStore","cb","surfaceLayersRef","x","y","layersWithDebug","withViews","r","redraw","offs","off","shaderIdKey","shaderKeyOf","shaders","paintInputsRef","useInsertionEffect","adoptControlled","helpersRef","debugSinkRef","useLayoutEffect","paint","c","rect","paintLayers","sink","timed","dprIn","paintFlattenTolerance","groups","paintShaders","debugFrame","beginDebugFrame","renderer","lease","vis","spans","commands","drawLayers","viewToMat3","width","height","flattenTolerance","layerVisibility","layerOrder","layerGroups","syncPaint","getIsVisible","useEffect","layerCache","clearSubscribers","useToolCursor","style","useSurfaceInput","autoFocusOnPointerDown","e","SurfaceCanvas","Canvas","forwardRef"],"sources":["../../src/canvas/Canvas.tsx"],"sourcesContent":["/**\n * Low-level WebGL surface + viewport primitive. Composes layers into a single GL render pass,\n * applies a view transform, and delivers hover to the layers that ask for it. It routes no\n * gesture: `<SceneCanvas>` mounts the gesture dispatcher on this same element. Canvas owns NO\n * scene-shaped state — selection, picking, kind registry, scene-aware overlays all live in\n * `<SceneCanvas>`, which wraps it.\n *\n * The `layers` prop is a map keyed by slot name, every slot already a layer. Standard slots\n * render at a canonical position; custom entries (any other key, value carrying `.layer`) insert\n * at `after`/`before` an existing slot, defaulting to the top.\n *\n * @internal\n * @deprecated Bare `<Canvas>` is not a supported consumer surface.\n * Use `<SceneCanvas>` instead.\n */\n\nimport { forwardRef, useCallback, useEffect, useImperativeHandle, useInsertionEffect, useLayoutEffect, useMemo, useRef, useState, useSyncExternalStore } from 'react';\nimport type React from 'react';\nimport type { Paint } from '@weasel-js/paint';\nimport { composeOrderedLayers, placeToolOverlays } from './layerOrder';\nimport { STANDARD_SLOTS, isCustomEntry, type CanvasLayers } from './layerSlots';\nimport type { CanvasExtensionApi } from './canvasExtension';\nimport { registerMountedCanvas } from './mountedCanvases';\nimport type { GestureSource } from './gestureBounds';\nimport { useViewHelpers } from './useViewHelpers';\nimport { useSurfaceInput } from './useSurfaceInput';\nimport type { CanvasViewState } from './useCanvasView';\nimport { useOptionalViewRegistry } from './viewRegistry';\nimport { useCanvasSurface } from './useCanvasSurface';\nimport type { CanvasHelpers, CanvasSurfaceHelpers, ViewPoseAdapter } from './useViewHelpers';\n\nimport { useLatest } from '@weasel-js/react';\nimport type { View } from 'core/viewport/view';\nimport { clientToWorld as clientToWorldHelper } from 'core/viewport/clientToWorld';\nimport {\n drawLayers, isLayerPainted,\n type Dims, type LayerCommandCache, type LayerGroup, type RedrawSource, type RenderLayer,\n} from 'core/layers/render';\nimport { viewToMat3, type ShaderProgramHandle } from '@weasel-js/renderer';\nimport { createBackgroundFillLayer } from 'core/layers/backgroundFill';\nimport { shaderKeyOf } from './canvasRenderer';\nimport { SurfaceCanvas } from './SurfaceCanvas';\nimport {\n type SelectionApi,\n} from 'core/selection/useSelection';\nimport { AUTO_POSE_DESCRIPTOR } from 'core/geometry/autoPoseDescriptor';\nimport type { PoseDescriptor } from 'interactions/actions/resize/geometry';\nimport type { CanvasDebugSink, DebugConfig } from '../debug/types';\nimport { beginDebugFrame, useDebugSink } from '../debug/useDebugSink';\n\nconst alwaysVisible = (_id: string): boolean => true;\nimport { createCursorSink, createPaintedCursorState } from '@weasel-js/cursor';\nimport type { PaintedCursorState } from '@weasel-js/cursor';\nimport { useToolCursor } from './useToolCursor';\nimport { createPaintedCursorLayer } from './paintedCursorLayer';\n\nimport type { Bounds } from 'core/viewport/fitViewToBounds';\n\n/**\n * Props for `<Canvas>`. Canvas is scene-agnostic: it owns the GL surface, view state, hover\n * delivery, and slot composition, and not gesture dispatch, selection state, picking logic,\n * kind registries, or scene-aware overlays.\n */\nexport interface CanvasProps<TPose = unknown> {\n /** CSS-pixel width. */\n width: number;\n /** CSS-pixel height. */\n height: number;\n\n /** Drawing-buffer density (device pixels per CSS pixel). When omitted the\n * canvas reads `window.devicePixelRatio` per paint. */\n dpr?: number;\n\n /** Flatness tolerance for curve tessellation, in world units. Forwarded to\n * `WeaselRendererOptions.flattenTolerance`. Leave unset for the cached\n * default (`DEFAULT_FLATTEN_TOLERANCE`, 0.5); a scene whose world unit is\n * not a pixel — feet, inches, millimetres — needs a value scaled to its\n * unit or sub-unit curves flatten to a handful of vertices. */\n flattenTolerance?: number;\n\n /** The version of whatever content this canvas draws, sampled at paint time\n * and reported by {@link CanvasExtensionApi.getPaintedVersion}.\n * `<SceneCanvas>` wires this to `scene.getVersion`. Chrome that must not\n * show DOM ahead of pixels compares the two and defers a frame. */\n contentVersion?: () => number;\n\n /** Paint inside the React commit rather than on the next animation frame.\n * Costs a synchronous paint per commit and per redraw request; buys\n * single-commit consistency between React-rendered DOM and canvas pixels.\n * For consumers with DOM chrome pinned to canvas content that cannot\n * tolerate a frame of skew. Live: toggling it switches modes from the next\n * redraw on. A redraw requested from inside a layer's `draw`, or from a\n * `subscribeFrame` callback, still waits for a frame — painting it in place\n * would recurse. */\n syncPaint?: boolean;\n\n /** External state the paint reads that no layer declares — typically what\n * an `alphaFor` consults. Each source is subscribed while mounted and\n * repaints the canvas when it notifies. A layer that reads outside state\n * declares it on `RenderLayer.subscribe` instead. */\n redrawOn?: readonly RedrawSource[];\n\n /** Adapter the pose and bounds lookups on `helpersRef` read. */\n adapter?: ViewPoseAdapter<TPose>;\n\n /** Layer map. See module docstring for slot semantics. */\n layers: CanvasLayers;\n\n /**\n * Current selection state; Canvas owns none of its own and never writes it. When absent,\n * Canvas behaves as if nothing is selected: no selection chrome.\n */\n selection?: SelectionApi;\n\n\n /**\n * How to read and rewrite a pose. Drives the default `boundsOf` fallback and the\n * selection-overlay bounds. Defaults to the rect identity (`AUTO_POSE_DESCRIPTOR`); supply\n * one for a non-rect pose type.\n */\n poseDescriptor?: PoseDescriptor<TPose>;\n\n /**\n * Override for committed bounds lookup, taking precedence over the `poseDescriptor`-derived\n * fallback. Used by the selection overlay, the multi-select union AABB, and\n * `helpersRef.getEffectiveBounds`.\n */\n boundsOf?: (id: string) => Bounds | null;\n /** Bounds of `id` drawn at an in-flight pose — how chrome boxes a preview.\n * Defaults to the `poseDescriptor`'s box of that pose. */\n boundsOfPose?: (id: string, pose: TPose) => Bounds | null;\n /**\n * Custom pointer-to-world coordinate transform, overriding the default canvas-rect\n * calculation. Useful for consumers that apply an additional CSS transform to the canvas\n * element.\n */\n clientToWorld?: (canvas: HTMLElement, cx: number, cy: number) => [number, number];\n\n /**\n * Paint into a caller-owned canvas at a rect on it, instead of an element\n * this component creates. `x`/`y` are the rect's top-left in that canvas's\n * CSS pixels; the rect's size is the existing `width`/`height` props.\n *\n * Requires `inputElement`: with no element of its own there is nowhere for\n * pointer input, focus or the cursor to live, and nothing renders.\n *\n * N canvases can then share one GL context and one buffer.\n */\n paintInto?: { canvas: HTMLCanvasElement | null; x: number; y: number };\n /**\n * The element pointer input, focus and the cursor come from, and the element\n * every client→world conversion measures. Only read alongside `paintInto`;\n * an attached canvas uses the one it renders.\n */\n inputElement?: HTMLElement | null;\n\n /** Class for the `<canvas>` this component renders. Under `paintInto` it\n * renders none, and the input element is the caller's to style. */\n className?: string;\n /** Inline style for the `<canvas>` this component renders; a tool's cursor\n * is merged over it. Not applied under `paintInto`, where only that cursor\n * is written, onto the input element. */\n style?: React.CSSProperties;\n /** Tab order of the `<canvas>` this component renders. Default 0, so the\n * canvas is focusable. Not applied under `paintInto`: whether the input\n * element can take focus is the caller's to decide. */\n tabIndex?: number;\n /** Fired when the element input comes from gains focus: the canvas, or\n * under `paintInto` the `inputElement`. Called with the DOM event. */\n onFocus?: (event: FocusEvent) => void;\n /** Fired when that element loses focus. */\n onBlur?: (event: FocusEvent) => void;\n /**\n * When `true` (default), the canvas element receives focus on `pointerdown` so keyboard\n * events are captured without a separate click-to-focus step. Set to `false` where\n * auto-focus would steal focus from sibling inputs.\n */\n autoFocusOnPointerDown?: boolean;\n\n /** The tool set. Canvas reads the active tool's cursor and its overlays;\n * it dispatches nothing to a tool. */\n tools?: import('../tools/overlayBinding').ToolsApi;\n\n /** The camera this surface looks through, from `useCanvasView`. Whoever\n * made it holds the view props; the surface adopts and announces a\n * controlled view among its own effects, and repaints when one moves. */\n viewState: CanvasViewState;\n /**\n * Mutable ref Canvas writes overlay-aware pose/bounds lookups to on every render. Custom\n * layers can read it from inside their `draw` closure to reflect in-flight gestures\n * (move/resize/rotate) instead of the committed scene; an id outside the active overlay\n * falls back to the adapter.\n */\n helpersRef?: React.MutableRefObject<CanvasHelpers<TPose> | null>;\n\n /**\n * Debug overlay configuration.\n * - `undefined` (default): read `?debug=…` from the URL.\n * - `false`: force off, ignore URL.\n * - `DebugConfig` object: force on with that config, ignore URL.\n *\n * When enabled, the Canvas appends a screen-space `debug-overlay` layer and builds the\n * sink it paints: each paint records into it, and the layer helpers and the ref handle's\n * `getDebug` hand it to whatever else records.\n */\n debug?: DebugConfig | false;\n\n /** Test-only escape hatch: writes the live debug sink to this ref so tests\n * can call `snapshot()` after a render. No effect when debug is off. */\n debugSinkRef?: React.MutableRefObject<CanvasDebugSink | null>;\n\n /**\n * Shader programs to compile before the frame that first draws them; one\n * not named here compiles on that frame. Each handle comes from a\n * module-level `registerProgram()`. The array is read at each paint and\n * registered again when its ids change, so a handle added after mount is\n * picked up. Re-registering one of these ids with new source repaints the\n * canvas, and the renderer recompiles it for that frame.\n */\n shaders?: ShaderProgramHandle[];\n\n /**\n * Preview-pose lookup, so selection chrome tracks the ghost during dispatcher-driven\n * drags. Returns `null` / `undefined` when no preview is in flight.\n */\n previewPoseExtra?: (id: string) => unknown;\n\n /**\n * In-flight gesture state `<Canvas>` can't see for itself. Backs the `getGestureBounds` /\n * `subscribeGestures` / `getGestureVersion` trio on `helpersRef`. Unwired, those three\n * report \"no gesture in flight\" and never fire.\n */\n gestureSource?: GestureSource;\n\n /**\n * Fill for the full canvas surface, drawn as a screen-space layer beneath every other\n * layer, the grid and anything anchored before it included — independent of pan / zoom.\n */\n backgroundFill?: Paint;\n\n /**\n * Mode-owned decoration layer (e.g. path-edit anchor dots). Composed as a `decorationLayer`\n * entry in `layers` with no anchor, which this prop replaces: it paints above every slot\n * and every other custom layer, and beneath a tool's `'top'` overlays. A tool's\n * selection-anchored overlays sit beneath it too while there is selection chrome to anchor\n * them; with that slot empty they fall to the tail and paint above it.\n */\n decorationLayer?: RenderLayer<unknown>;\n\n /**\n * Chrome-caps visibility resolver. Exposed on `helpersForLayers.getIsVisible` so custom\n * layers (notably `composeAffordanceLayer`) can gate paint by chrome id, and threaded into\n * hit-testing so the same gate applies there. Called fresh per draw / per hitTest. Omit to\n * leave every chrome element visible.\n */\n getIsVisible?: () => (id: string) => boolean;\n\n /**\n * Show or hide whole render layers by id. An id absent from the map falls\n * back to the layer's own `defaultVisible`, and a layer marked `alwaysOn`\n * ignores the map entirely.\n *\n * Hiding a layer also stops it claiming pointer events through\n * `hitTestExtras` — a layer nobody can see must not swallow a click.\n *\n * This is `getIsVisible`'s coarser sibling: that one gates individual\n * chrome elements *within* a layer, this one gates the layer.\n */\n layerVisibility?: Record<string, boolean>;\n\n /**\n * Draw order, by layer id, bottom first. Omit for the order the layers\n * arrive in.\n *\n * **A listed order is the whole list:** any layer whose id is missing from\n * it is not drawn. Reordering two layers means naming all of them.\n */\n layerOrder?: string[];\n\n /**\n * Runs of consecutive layers that composite as one — the surface for blurring the world\n * while the chrome above it stays sharp. Members are named by layer id. See\n * {@link LayerGroup}.\n */\n layerGroups?: readonly LayerGroup[];\n}\n\n\nconst NO_SELECTION: SelectionApi['current'] = [];\n\nconst NO_LAYER_VISIBILITY: Record<string, boolean> = {};\n\nfunction CanvasInner<TPose>(\n props: CanvasProps<TPose>,\n ref: React.ForwardedRef<CanvasExtensionApi>,\n) {\n const {\n width,\n height,\n dpr: dprProp,\n flattenTolerance,\n contentVersion,\n syncPaint = false,\n redrawOn,\n adapter,\n layers: layersMap,\n selection,\n boundsOf,\n boundsOfPose,\n clientToWorld,\n paintInto,\n inputElement,\n poseDescriptor: geometry = AUTO_POSE_DESCRIPTOR as unknown as PoseDescriptor<TPose>,\n className,\n style,\n tabIndex = 0,\n onFocus,\n onBlur,\n autoFocusOnPointerDown = true,\n helpersRef,\n tools,\n viewState,\n debug: debugProp,\n debugSinkRef,\n shaders,\n previewPoseExtra,\n gestureSource,\n backgroundFill,\n decorationLayer,\n getIsVisible,\n layerVisibility,\n layerOrder,\n layerGroups,\n } = props;\n\n const { sink: debugSink, overlay: debugOverlay, frameStats, getDebug } = useDebugSink(debugProp);\n\n // The element input comes from and every client→world conversion measures: the `<canvas>`\n // this component renders, or under `paintInto` the caller's `inputElement`.\n const canvasRef = useRef<HTMLElement | null>(null);\n // The `<canvas>` this component rendered, if it rendered one. `paint` is the\n // only thing that needs a real canvas, for `getContext`.\n const ownCanvasRef = useRef<HTMLCanvasElement | null>(null);\n // Stable, so a commit does not detach the element: an inline ref is nulled\n // until the layout phase reaches it, and a sync paint asked for before that\n // finds no canvas.\n const setOwnCanvas = useCallback((el: HTMLCanvasElement | null) => {\n ownCanvasRef.current = el;\n canvasRef.current = el;\n }, []);\n const detached = !!paintInto;\n // The detached input element reaches `canvasRef` at commit; the own canvas\n // arrives through `setOwnCanvas`, React's ref callback.\n useInsertionEffect(() => {\n if (detached) canvasRef.current = inputElement ?? null;\n });\n // Where pixels go. Split from `canvasRef` only when detached.\n const paintTarget = detached ? (paintInto.canvas ?? null) : null;\n const paintTargetRef = useLatest(paintTarget);\n const paintRect = detached ? { x: paintInto.x, y: paintInto.y } : null;\n const paintRectRef = useLatest(paintRect);\n\n // Read by `hitTestExtras`, which is built once and must see live values.\n const helpersForLayersRef = useRef<CanvasHelpers<TPose> | null>(null);\n const dimsRef = useLatest({ width, height });\n // Which layers reach the screen, and which chrome within them: asked by the\n // paint and by every hit-test.\n const gateRef = useLatest({ getIsVisible, layerVisibility, layerOrder });\n\n // React does not drive the paint; the frame loop does. The thunk defers to\n // `paint` below, which needs inputs this render has not computed yet.\n const paintRef = useRef<() => boolean>(() => false);\n const { lease, requestRedraw, subscribeFrame, subscribeBeforePaint, subscribeResume } = useCanvasSurface(\n useCallback(() => paintRef.current(), []),\n { syncPaint, target: canvasRef, dpr: dprProp, redrawOn, shaders },\n );\n\n const contentVersionRef = useLatest(contentVersion);\n const paintedVersionRef = useRef(0);\n const getPaintedVersion = useCallback(() => paintedVersionRef.current, []);\n\n // The `layersWithDebug` memo reads `extrasRef.current`, so registration has\n // to bump state to re-run it. Rare (a HUD attaching, a loupe mounting).\n const [extrasVersion, setExtrasVersion] = useState(0);\n const extrasRef = useRef<Set<RenderLayer<unknown>>>(new Set());\n const registerLayer = useCallback((layer: RenderLayer<unknown>) => {\n extrasRef.current.add(layer);\n setExtrasVersion(n => n + 1);\n return () => {\n extrasRef.current.delete(layer);\n setExtrasVersion(n => n + 1);\n };\n }, []);\n\n // Hit-test registered layers topmost-first: registration order is draw order, so the\n // last-registered layer gets first refusal. `<SceneCanvas>` folds this into its\n // `affordanceAt` thunk; Canvas has the layers but not the dispatcher.\n const hitTestExtrasIn = useCallback((\n worldX: number,\n worldY: number,\n view: View,\n dims: Dims,\n data: unknown,\n only?: readonly RenderLayer<unknown>[],\n ) => {\n const layers = [...extrasRef.current].reverse();\n const gate = gateRef.current;\n const isVisible = gate.getIsVisible?.() ?? alwaysVisible;\n const visibility = gate.layerVisibility ?? NO_LAYER_VISIBILITY;\n const order = gate.layerOrder;\n for (const layer of layers) {\n if (!layer.hitTest) continue;\n if (only && !only.includes(layer)) continue;\n if (!isLayerPainted(layer, visibility, order)) continue;\n const hit = layer.hitTest(worldX, worldY, data, view, dims, isVisible);\n if (hit) return { layerId: layer.id, hit };\n }\n return null;\n }, [gateRef]);\n\n const {\n viewRef, controlled: controlledView, setView, getView, subscribeView,\n adoptControlled, announceControlled, clearSubscribers,\n } = viewState;\n\n const hitTestExtras = useCallback((\n worldX: number,\n worldY: number,\n frame?: { view: View; dims: Dims },\n ) => hitTestExtrasIn(\n worldX,\n worldY,\n frame?.view ?? viewRef.current,\n frame?.dims ?? dimsRef.current,\n helpersForLayersRef.current,\n ), [hitTestExtrasIn, dimsRef, viewRef]);\n\n // The one client→world conversion: hover, the view registry and both\n // handles answer with it, so a `clientToWorld` override reaches all of them\n // or none.\n const clientToWorldRef = useLatest(clientToWorld);\n const toWorld = useCallback((clientX: number, clientY: number): [number, number] => {\n const el = canvasRef.current;\n if (!el) return [clientX, clientY];\n const override = clientToWorldRef.current;\n if (override) return override(el, clientX, clientY);\n return clientToWorldHelper(clientX, clientY, el.getBoundingClientRect(), viewRef.current);\n }, [clientToWorldRef, viewRef]);\n\n useLayoutEffect(() => {\n const element = canvasRef.current;\n if (!element) return;\n return registerMountedCanvas({ element, getView });\n }, [detached, inputElement, getView]);\n\n // The painted tier's channel. `<Canvas>` owns it because it owns both ends:\n // the tool cursor that feeds it and the frame loop that has to repaint when\n // it changes. The hover pump reaches it through the ref handle below.\n const paintedCursor = useMemo<PaintedCursorState>(() => createPaintedCursorState(), []);\n const paintedCursorLayer = useMemo(\n () => createPaintedCursorLayer(paintedCursor),\n [paintedCursor],\n );\n // An idle pointermove repaints nothing on its own, so a cursor the compositor\n // is not drawing needs its own pump. The store stays quiet unless something\n // painted is actually on screen.\n useEffect(() => paintedCursor.subscribe(() => { requestRedraw(); }), [paintedCursor, requestRedraw]);\n // The one writer of the input element's `cursor` style: the tool's cursor\n // from here, a hover cursor from the pump, which reaches it through the handle.\n const cursorSink = useMemo(\n () => createCursorSink({ element: () => canvasRef.current, painted: () => paintedCursor }),\n [paintedCursor],\n );\n\n const getSurfaceRect = useCallback(() => {\n const origin = paintRectRef.current;\n const { width: w, height: h } = dimsRef.current;\n return { x: origin?.x ?? 0, y: origin?.y ?? 0, width: w, height: h };\n }, [dimsRef, paintRectRef]);\n\n useImperativeHandle(ref, () => ({\n // Named rather than read off `canvasRef` so the handle rebuilds when a\n // detached surface's input element arrives, which is a render later.\n element: detached ? inputElement ?? null : canvasRef.current,\n surface: detached ? paintInto?.canvas ?? null : ownCanvasRef.current,\n getSurfaceRect,\n clientToWorld: toWorld,\n requestRedraw,\n subscribeFrame,\n subscribeBeforePaint,\n subscribeResume,\n registerLayer,\n hitTestExtras,\n getView,\n setView,\n subscribeView,\n getPaintedVersion,\n paintedCursor,\n cursorSink,\n getDebug,\n }), [canvasRef, ownCanvasRef, detached, inputElement, paintInto?.canvas,\n getSurfaceRect, toWorld, requestRedraw, subscribeFrame, subscribeBeforePaint, subscribeResume,\n registerLayer,\n hitTestExtras, getView, setView, subscribeView, getPaintedVersion,\n paintedCursor, cursorSink, getDebug]);\n\n const layerCacheRef = useRef<LayerCommandCache>(new Map());\n\n // Views registered on this surface — declared as `views` descriptors or\n // mounted as `<CanvasView>` children. Null outside a surface that mounts a\n // registry, which is the single-view case.\n const viewRegistry = useOptionalViewRegistry();\n\n const selectedIdsForWiring = selection?.current ?? NO_SELECTION;\n\n // One view's overlay-aware state. A hook, so N views are N components each\n // calling it once — not a loop in this body.\n const { helpers: viewHelpers, chromeState: viewChromeState } = useViewHelpers<TPose>({\n adapter,\n geometry,\n boundsOf,\n boundsOfPose,\n selection: selectedIdsForWiring,\n gestureSource,\n previewPoseExtra,\n getIsVisible: () => gateRef.current.getIsVisible?.() ?? alwaysVisible,\n });\n\n const surfaceHelpers: CanvasSurfaceHelpers = {\n getDebug: () => debugSink,\n };\n const helpersForLayers: CanvasHelpers<TPose> = { ...viewHelpers, ...surfaceHelpers, viewId: null };\n\n const backgroundLayer = useMemo(\n () => (backgroundFill ? createBackgroundFillLayer(backgroundFill) : undefined),\n [backgroundFill],\n );\n\n const layers = useMemo<RenderLayer<unknown>[]>(() => {\n const standardLayers: Partial<\n Record<(typeof STANDARD_SLOTS)[number], RenderLayer<unknown>>\n > = {};\n for (const slot of ['grid', 'cellHighlight', 'selectionOverlay'] as const) {\n const entry = layersMap[slot];\n if (isCustomEntry(entry)) standardLayers[slot] = entry.layer;\n }\n const out: RenderLayer<unknown>[] = composeOrderedLayers(\n decorationLayer ? { ...layersMap, decorationLayer: { layer: decorationLayer } } : layersMap,\n standardLayers, layersMap.scene?.layers, backgroundLayer,\n );\n if (tools) {\n placeToolOverlays(out, standardLayers.selectionOverlay, tools.getActiveOverlays);\n }\n return out;\n }, [layersMap, tools, backgroundLayer, decorationLayer]);\n\n const viewRegistryVersion = useSyncExternalStore(\n useCallback((cb: () => void) => viewRegistry?.subscribe(cb) ?? (() => {}), [viewRegistry]),\n () => viewRegistry?.getVersion() ?? 0,\n () => 0,\n );\n\n // The stack a view paints through its own camera is this canvas's, before\n // the views themselves are folded in — otherwise a view would contain\n // itself. Published by reference and read at draw time.\n const surfaceLayersRef = useLatest<readonly RenderLayer<unknown>[]>(layers);\n useEffect(() => {\n return viewRegistry?.attachSurface({\n view: () => viewRef.current,\n dims: () => dimsRef.current,\n layers: () => surfaceLayersRef.current,\n requestRedraw,\n chromeState: () => helpersForLayersRef.current!.getChromeState(),\n hitTestExtras: hitTestExtrasIn,\n clientToWorld: toWorld,\n claimsAbove: (x, y) => {\n const view = viewRef.current;\n const worldX = x / view.scale.x + view.x;\n const worldY = y / view.scale.y + view.y;\n return hitTestExtrasIn(worldX, worldY, view, dimsRef.current, helpersForLayersRef.current) !== null;\n },\n });\n }, [viewRegistry, canvasRef, requestRedraw, hitTestExtrasIn, dimsRef, surfaceLayersRef, viewRef, toWorld]);\n\n const layersWithDebug = useMemo(() => {\n // Views paint through the surface's own stack, so they sit above it and\n // below both the debug overlay and externally-registered layers.\n const withViews = viewRegistry\n ? [...layers, ...viewRegistry.list().filter((r) => r.paint).map((r) => r.layer as RenderLayer<unknown>)]\n : layers;\n const base = debugOverlay ? [...withViews, debugOverlay] : withViews;\n // The cursor goes last: it is the one thing that is always in front of\n // everything, including a consumer's own registered layers.\n return [...base, ...extrasRef.current, paintedCursorLayer];\n // extrasVersion drives re-reads of extrasRef when layers are registered/detached;\n // viewRegistryVersion does the same for registered views.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [layers, debugOverlay, extrasVersion, viewRegistry, viewRegistryVersion,\n paintedCursorLayer]);\n\n useEffect(() => {\n const redraw = (): void => { requestRedraw(); };\n const offs: (() => void)[] = [];\n for (const layer of layersWithDebug) if (layer.subscribe) offs.push(layer.subscribe(redraw));\n return () => { for (const off of offs) off(); };\n }, [layersWithDebug, requestRedraw]);\n\n const shaderIdKey = shaderKeyOf(shaders);\n\n // Everything the paint, hit-testing and the view registry read that a React\n // render owns. `useLatest` and the insertion effect below publish committed\n // renders only, ahead of every layout effect in the commit, any of which may\n // ask for a sync paint.\n const paintInputs = {\n layers: layersWithDebug, width, height, debugSink, frameStats,\n dpr: dprProp, layerGroups, shaders,\n flattenTolerance,\n };\n const paintInputsRef = useLatest(paintInputs);\n useInsertionEffect(() => {\n adoptControlled();\n helpersForLayersRef.current = helpersForLayers;\n if (helpersRef) helpersRef.current = helpersForLayers;\n if (debugSinkRef) debugSinkRef.current = debugSink;\n });\n useLayoutEffect(() => {\n announceControlled();\n });\n\n const paint = useCallback((): boolean => {\n const c = paintTargetRef.current ?? ownCanvasRef.current;\n if (!c) return false;\n const rect = paintRectRef.current;\n const {\n layers: paintLayers, width: w, height: h, debugSink: sink, frameStats: timed,\n dpr: dprIn,\n flattenTolerance: paintFlattenTolerance,\n layerGroups: groups, shaders: paintShaders,\n } = paintInputsRef.current;\n\n const debugFrame = beginDebugFrame(sink, timed, paintLayers);\n\n const renderer = lease.bind(c, { width: w, height: h, dpr: dprIn }, {\n tile: rect,\n flattenTolerance: paintFlattenTolerance,\n shaders: paintShaders,\n });\n // No WebGL2 (jsdom), or a context that is lost for now: nothing to paint.\n if (!renderer) return false;\n\n const view = viewRef.current;\n const { layerVisibility: vis, layerOrder: order } = gateRef.current;\n const spans = debugFrame?.time();\n const commands = drawLayers(\n paintLayers,\n helpersForLayersRef.current,\n vis ?? NO_LAYER_VISIBILITY,\n order,\n view,\n { width: w, height: h },\n layerCacheRef.current,\n undefined,\n groups,\n spans,\n );\n renderer.render(commands, viewToMat3(view), spans ? { spans } : undefined);\n debugFrame?.end(renderer.lastFrameStats());\n paintedVersionRef.current = contentVersionRef.current?.() ?? 0;\n return true;\n }, [contentVersionRef, gateRef, lease, paintInputsRef, paintRectRef, paintTargetRef, viewRef]);\n useInsertionEffect(() => {\n paintRef.current = paint;\n });\n\n // A tripwire, not a list of values this effect uses: every paint input that\n // arrives on a render must appear here, or changing it paints stale.\n // `viewChromeState` stands in for the whole overlay-aware set the layer\n // helpers expose — it re-memoizes on exactly the selection, bounds and\n // preview inputs they read. What moves between renders instead (a scene\n // write, a gesture pump, a late image decode) pushes its own redraw.\n // Layout, not passive, so a `syncPaint` surface lands its pixels in the same\n // commit as the DOM.\n useLayoutEffect(() => {\n requestRedraw();\n }, [layersWithDebug, width, height, debugSink, dprProp, flattenTolerance,\n controlledView?.x, controlledView?.y, controlledView?.scale.x, controlledView?.scale.y,\n layerVisibility, layerOrder, layerGroups, shaderIdKey, syncPaint,\n viewChromeState, getIsVisible, paintTarget, paintRect?.x, paintRect?.y, requestRedraw]);\n\n useEffect(() => {\n const layerCache = layerCacheRef.current;\n return () => {\n layerCache.clear();\n clearSubscribers();\n };\n }, [clearSubscribers]);\n\n useToolCursor(cursorSink, tools, detached ? inputElement : null, style?.cursor);\n\n useSurfaceInput(canvasRef, {\n focusOnPress: autoFocusOnPointerDown,\n onFocus,\n onBlur,\n onHover: (_el, e) => {\n const view = viewRef.current;\n const [worldX, worldY] = toWorld(e.clientX, e.clientY);\n const visibility = layerVisibility ?? NO_LAYER_VISIBILITY;\n // Same gate as `hitTestExtrasIn`: a layer nobody can see takes no input.\n for (const layer of layersWithDebug) {\n if (!layer.onUncapturedMove || !isLayerPainted(layer, visibility, layerOrder)) continue;\n layer.onUncapturedMove(worldX, worldY, e, view, { width, height });\n }\n },\n onLeave: () => {\n for (const layer of layersWithDebug) layer.onUncapturedLeave?.();\n },\n });\n\n if (detached) return null;\n\n return (\n <SurfaceCanvas\n ref={setOwnCanvas}\n width={width}\n height={height}\n tabIndex={tabIndex}\n className={className} style={style}\n />\n );\n}\n\n/** Forward-ref'd `<canvas>` wrapper. Generic over the pose type, inferred from the\n * `adapter` prop. */\nexport const Canvas = forwardRef(CanvasInner) as <TPose = unknown>(\n props: CanvasProps<TPose> & { ref?: React.ForwardedRef<CanvasExtensionApi> },\n) => ReturnType<typeof CanvasInner>;\n\n"],"mappings":"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"}
1
+ {"version":3,"file":"Canvas.js","names":[],"sources":["../../src/canvas/Canvas.tsx"],"sourcesContent":["/**\n * Low-level WebGL surface + viewport primitive. Composes layers into a single GL render pass,\n * applies a view transform, and delivers hover to the layers that ask for it. It routes no\n * gesture: `<SceneCanvas>` mounts the gesture dispatcher on this same element. Canvas owns NO\n * scene-shaped state — selection, picking, kind registry, scene-aware overlays all live in\n * `<SceneCanvas>`, which wraps it.\n *\n * The `layers` prop is a map keyed by slot name, every slot already a layer. Standard slots\n * render at a canonical position; custom entries (any other key, value carrying `.layer`) insert\n * at `after`/`before` an existing slot, defaulting to the top.\n *\n * @internal\n * @deprecated Bare `<Canvas>` is not a supported consumer surface.\n * Use `<SceneCanvas>` instead.\n */\n\nimport { forwardRef, useCallback, useEffect, useInsertionEffect, useLayoutEffect, useRef } from 'react';\nimport type React from 'react';\nimport type { CanvasExtensionApi } from './canvasExtension';\nimport { registerMountedCanvas } from './mountedCanvases';\nimport { useViewHelpers } from './useViewHelpers';\nimport { useViewLayerGate } from './useViewLayerGate';\nimport { useSurfaceInput } from './useSurfaceInput';\nimport { useOptionalViewRegistry } from './viewRegistry';\nimport { useCanvasSurface } from './useCanvasSurface';\nimport type { CanvasHelpers } from './useViewHelpers';\nimport type { CanvasProps } from './canvasProps';\nimport { useLatest } from '@weasel-js/react';\nimport { SurfaceCanvas } from './SurfaceCanvas';\nimport { useSurfaceSize } from './useSurfaceSize';\nimport type { SelectionApi } from 'core/selection/useSelection';\nimport { AUTO_POSE_DESCRIPTOR } from 'core/geometry/autoPoseDescriptor';\nimport type { PoseDescriptor } from 'interactions/actions/resize/geometry';\nimport { useDebugSink } from '../debug/useDebugSink';\nimport { useToolCursor } from './useToolCursor';\nimport { useCanvasElements } from './useCanvasElements';\nimport { alwaysVisible, useExtraLayers } from './useExtraLayers';\nimport { usePaintedCursor } from './usePaintedCursor';\nimport { useCanvasHandle } from './useCanvasHandle';\nimport { useComposedLayers, useSlotLayers } from './useLayerStack';\nimport { useViewRegistrySurface } from './useViewRegistrySurface';\nimport { useCanvasPaint, usePaintedVersion } from './useCanvasPaint';\nimport { layerHover } from './layerHover';\nimport { useClientToWorld } from './useClientToWorld';\n\nexport type { CanvasProps, CanvasRetainOptions } from './canvasProps';\n\nconst NO_SELECTION: SelectionApi['current'] = [];\n\nfunction CanvasInner<TPose>(\n props: CanvasProps<TPose>,\n ref: React.ForwardedRef<CanvasExtensionApi>,\n) {\n const {\n paintInto, inputElement, tools, viewState, style, getIsVisible, layerVisibility, layerOrder,\n helpersRef, debugSinkRef,\n poseDescriptor: geometry = AUTO_POSE_DESCRIPTOR as unknown as PoseDescriptor<TPose>,\n } = props;\n\n const { sink: debugSink, overlay: debugOverlay, frameStats, getDebug } = useDebugSink(props.debug);\n const elements = useCanvasElements(paintInto, inputElement);\n const { canvasRef, ownCanvasRef, detached } = elements;\n const { width, height } = useSurfaceSize(props, ownCanvasRef);\n\n // Read by `hitTestExtras`, which is built once and must see live values.\n const helpersForLayersRef = useRef<CanvasHelpers<TPose> | null>(null);\n const dimsRef = useLatest({ width, height });\n // Which layers reach the screen, and which chrome within them: asked by the\n // paint and by every hit-test.\n const gateRef = useLatest({ getIsVisible, layerVisibility, layerOrder });\n\n // The frame loop paints; a committed render only marks the surface dirty, so\n // no prop can reach the paint without repainting it. The thunk defers to\n // `useCanvasPaint` below, which needs inputs this render has not computed yet.\n const paintRef = useRef<() => boolean>(() => false);\n const { lease, requestRedraw, subscribeFrame, subscribeBeforePaint, subscribeResume } = useCanvasSurface(\n useCallback(() => paintRef.current(), []),\n { syncPaint: props.syncPaint ?? false, target: canvasRef, dpr: props.dpr, redrawOn: props.redrawOn, shaders: props.shaders, onCommit: 'redraw' },\n );\n const { getPaintedVersion, markPainted } = usePaintedVersion(props.contentVersion);\n const { extrasRef, extrasVersion, registerLayer, hitTestExtrasIn } = useExtraLayers(gateRef);\n\n const {\n viewRef, setView, getView, subscribeView,\n adoptControlled, announceControlled, clearSubscribers,\n } = viewState;\n\n const toWorld = useClientToWorld(canvasRef, props.clientToWorld, viewRef);\n\n useLayoutEffect(() => {\n const element = canvasRef.current;\n if (!element) return;\n return registerMountedCanvas({ element, getView });\n }, [canvasRef, detached, inputElement, getView]);\n\n const { paintedCursor, paintedCursorLayer, cursorSink } = usePaintedCursor(canvasRef, requestRedraw);\n\n const frame = { viewRef, dimsRef, helpersRef: helpersForLayersRef };\n useCanvasHandle(ref, { ...elements, inputElement, paintCanvas: paintInto?.canvas }, frame, {\n hitTestExtrasIn, clientToWorld: toWorld, requestRedraw, subscribeFrame, subscribeBeforePaint,\n subscribeResume, registerLayer, getView, setView, subscribeView,\n getPaintedVersion, paintedCursor, cursorSink, getDebug,\n });\n\n const viewRegistry = useOptionalViewRegistry();\n\n // One view's overlay-aware state. A hook, so N views are N components each\n // calling it once — not a loop in this body.\n const layers = useSlotLayers(props.layers, tools, props.backgroundFill, props.decorationLayer);\n const { helpers: viewHelpers } = useViewHelpers<TPose>({\n adapter: props.adapter, geometry, boundsOf: props.boundsOf, boundsOfPose: props.boundsOfPose,\n nodes: props.nodes, gestureSource: props.gestureSource, previewPoseExtra: props.previewPoseExtra,\n getScale: () => viewRef.current.scale,\n selection: props.selection?.current ?? NO_SELECTION,\n getIsVisible: () => gateRef.current.getIsVisible?.() ?? alwaysVisible,\n layerIsPainted: useViewLayerGate(layerVisibility, layerOrder, () => layers),\n });\n const helpersForLayers: CanvasHelpers<TPose> = { ...viewHelpers, getDebug: () => debugSink, viewId: null };\n\n useViewRegistrySurface(viewRegistry, layers, frame, { requestRedraw, hitTestExtrasIn, clientToWorld: toWorld });\n const layersWithDebug = useComposedLayers(layers, {\n viewRegistry, debugOverlay, extrasRef, extrasVersion, cursorLayer: paintedCursorLayer,\n }, requestRedraw);\n\n // Everything the paint, hit-testing and the view registry read that a React\n // render owns. `useLatest` and the insertion effect below publish committed\n // renders only, ahead of every layout effect in the commit, any of which may\n // ask for a sync paint.\n const paintInputsRef = useLatest({\n layers: layersWithDebug, width, height, debugSink, frameStats,\n dpr: props.dpr, layerGroups: props.layerGroups, shaders: props.shaders,\n flattenTolerance: props.flattenTolerance, retain: props.retain,\n });\n useInsertionEffect(() => {\n adoptControlled();\n helpersForLayersRef.current = helpersForLayers;\n if (helpersRef) helpersRef.current = helpersForLayers;\n if (debugSinkRef) debugSinkRef.current = debugSink;\n });\n useLayoutEffect(() => {\n announceControlled();\n });\n\n useCanvasPaint(paintRef, lease, elements, { ...frame, inputsRef: paintInputsRef, gateRef }, markPainted);\n useEffect(() => clearSubscribers, [clearSubscribers]);\n\n useToolCursor(cursorSink, tools, detached ? inputElement : null, style?.cursor);\n\n useSurfaceInput(canvasRef, {\n focusOnPress: props.autoFocusOnPointerDown ?? true,\n onFocus: props.onFocus,\n onBlur: props.onBlur,\n ...layerHover(layersWithDebug, {\n viewRef, toWorld, layerVisibility, layerOrder, dims: { width, height },\n }),\n });\n\n if (detached) return null;\n\n return (\n <SurfaceCanvas\n ref={elements.setOwnCanvas}\n width={props.width}\n height={props.height}\n tabIndex={props.tabIndex ?? 0}\n className={props.className} style={style}\n />\n );\n}\n\n/** Forward-ref'd `<canvas>` wrapper. Generic over the pose type, inferred from the\n * `adapter` prop. */\nexport const Canvas = forwardRef(CanvasInner) as <TPose = unknown>(\n props: CanvasProps<TPose> & { ref?: React.ForwardedRef<CanvasExtensionApi> },\n) => ReturnType<typeof CanvasInner>;\n\n"],"mappings":"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"}