@weasel-js/core 1.7.0 → 1.7.1

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 (1003) hide show
  1. package/CHANGELOG.md +764 -0
  2. package/README.md +7 -8
  3. package/dist/WeaselProvider.js +15 -0
  4. package/dist/WeaselProvider.js.map +1 -0
  5. package/dist/affordances/composeAffordanceLayer.js +224 -0
  6. package/dist/affordances/composeAffordanceLayer.js.map +1 -0
  7. package/dist/affordances/cornerResize.js +69 -0
  8. package/dist/affordances/cornerResize.js.map +1 -0
  9. package/dist/affordances/hitAffordanceRegions.js +138 -0
  10. package/dist/affordances/hitAffordanceRegions.js.map +1 -0
  11. package/dist/affordances/pathAnchors.js +66 -0
  12. package/dist/affordances/pathAnchors.js.map +1 -0
  13. package/dist/affordances/rotationHandle.js +103 -0
  14. package/dist/affordances/rotationHandle.js.map +1 -0
  15. package/dist/animation/behaviors/momentum.js +118 -0
  16. package/dist/animation/behaviors/momentum.js.map +1 -0
  17. package/dist/animation/colorHelpers.js +135 -0
  18. package/dist/animation/colorHelpers.js.map +1 -0
  19. package/dist/animation/colorRegistry.js +37 -0
  20. package/dist/animation/colorRegistry.js.map +1 -0
  21. package/dist/animation/index.js +20 -0
  22. package/dist/animation/loop.js +62 -0
  23. package/dist/animation/loop.js.map +1 -0
  24. package/dist/animation/observe.js +23 -0
  25. package/dist/animation/observe.js.map +1 -0
  26. package/dist/animation/poseHelpers.js +50 -0
  27. package/dist/animation/poseHelpers.js.map +1 -0
  28. package/dist/animation/reflow.js +121 -0
  29. package/dist/animation/reflow.js.map +1 -0
  30. package/dist/animation/rig/bindRig.js +74 -0
  31. package/dist/animation/rig/bindRig.js.map +1 -0
  32. package/dist/animation/rig/blendPoses.js +43 -0
  33. package/dist/animation/rig/blendPoses.js.map +1 -0
  34. package/dist/animation/rig/mirrorPose.js +19 -0
  35. package/dist/animation/rig/mirrorPose.js.map +1 -0
  36. package/dist/animation/rig/resolveSkeleton.js +33 -0
  37. package/dist/animation/rig/resolveSkeleton.js.map +1 -0
  38. package/dist/animation/rig/solveIk.js +103 -0
  39. package/dist/animation/rig/solveIk.js.map +1 -0
  40. package/dist/animation/rig/types.js +12 -0
  41. package/dist/animation/rig/types.js.map +1 -0
  42. package/dist/animation/rig/useRig.js +23 -0
  43. package/dist/animation/rig/useRig.js.map +1 -0
  44. package/dist/animation/slew.js +27 -0
  45. package/dist/animation/slew.js.map +1 -0
  46. package/dist/animation/stagger.js +138 -0
  47. package/dist/animation/stagger.js.map +1 -0
  48. package/dist/animation/timeline/booking.js +106 -0
  49. package/dist/animation/timeline/booking.js.map +1 -0
  50. package/dist/animation/timeline/createTimeline.js +116 -0
  51. package/dist/animation/timeline/createTimeline.js.map +1 -0
  52. package/dist/animation/timeline/sampleTrack.js +29 -0
  53. package/dist/animation/timeline/sampleTrack.js.map +1 -0
  54. package/dist/animation/useAnimator.js +329 -0
  55. package/dist/animation/useAnimator.js.map +1 -0
  56. package/dist/animation/wrappers/animateLifecycle.js +40 -0
  57. package/dist/animation/wrappers/animateLifecycle.js.map +1 -0
  58. package/dist/animation/wrappers/animateOnSetPose.js +44 -0
  59. package/dist/animation/wrappers/animateOnSetPose.js.map +1 -0
  60. package/dist/{autoPoseDescriptor-_XOyF7t4.d.ts → autoPoseDescriptor-BT_vp9FO.d.ts} +2 -2
  61. package/dist/{builtins-DLn2lCr_.d.ts → builtins-BSUfH8nU.d.ts} +738 -513
  62. package/dist/canvas/Canvas.js +608 -0
  63. package/dist/canvas/Canvas.js.map +1 -0
  64. package/dist/canvas/CanvasView.js +255 -0
  65. package/dist/canvas/CanvasView.js.map +1 -0
  66. package/dist/canvas/CursorCoordsHud.js +75 -0
  67. package/dist/canvas/CursorCoordsHud.js.map +1 -0
  68. package/dist/canvas/DrawCanvas.js +67 -0
  69. package/dist/canvas/DrawCanvas.js.map +1 -0
  70. package/dist/canvas/MinimapCanvas.js +139 -0
  71. package/dist/canvas/MinimapCanvas.js.map +1 -0
  72. package/dist/canvas/ModalityHud.js +66 -0
  73. package/dist/canvas/ModalityHud.js.map +1 -0
  74. package/dist/canvas/NodeShape.js +391 -0
  75. package/dist/canvas/NodeShape.js.map +1 -0
  76. package/dist/canvas/PickHud.js +93 -0
  77. package/dist/canvas/PickHud.js.map +1 -0
  78. package/dist/canvas/SceneCanvas/ActionsProviderIfRoot.js +10 -0
  79. package/dist/canvas/SceneCanvas/ActionsProviderIfRoot.js.map +1 -0
  80. package/dist/canvas/SceneCanvas/DepRegistryProviderIfRoot.js +10 -0
  81. package/dist/canvas/SceneCanvas/DepRegistryProviderIfRoot.js.map +1 -0
  82. package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js +51 -0
  83. package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js.map +1 -0
  84. package/dist/canvas/SceneCanvas/contributionFrameHooks.js +42 -0
  85. package/dist/canvas/SceneCanvas/contributionFrameHooks.js.map +1 -0
  86. package/dist/canvas/SceneCanvas/defaultNodeProperties.js +549 -0
  87. package/dist/canvas/SceneCanvas/defaultNodeProperties.js.map +1 -0
  88. package/dist/canvas/SceneCanvas/defaultNodeRouting.js +26 -0
  89. package/dist/canvas/SceneCanvas/defaultNodeRouting.js.map +1 -0
  90. package/dist/canvas/SceneCanvas/dispatcherGestureBounds.js +69 -0
  91. package/dist/canvas/SceneCanvas/dispatcherGestureBounds.js.map +1 -0
  92. package/dist/canvas/SceneCanvas/features.js +97 -0
  93. package/dist/canvas/SceneCanvas/features.js.map +1 -0
  94. package/dist/canvas/SceneCanvas/poseGeometry.js +46 -0
  95. package/dist/canvas/SceneCanvas/poseGeometry.js.map +1 -0
  96. package/dist/canvas/SceneCanvas/useActionsPropResolver.js +48 -0
  97. package/dist/canvas/SceneCanvas/useActionsPropResolver.js.map +1 -0
  98. package/dist/canvas/SceneCanvas/useBuiltinShapeTools.js +70 -0
  99. package/dist/canvas/SceneCanvas/useBuiltinShapeTools.js.map +1 -0
  100. package/dist/canvas/SceneCanvas/useContributionRoles.js +75 -0
  101. package/dist/canvas/SceneCanvas/useContributionRoles.js.map +1 -0
  102. package/dist/canvas/SceneCanvas/useDispatcherOverlayLayer.js +172 -0
  103. package/dist/canvas/SceneCanvas/useDispatcherOverlayLayer.js.map +1 -0
  104. package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js +69 -0
  105. package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js.map +1 -0
  106. package/dist/canvas/SceneCanvas/useSceneSelectTool.js +127 -0
  107. package/dist/canvas/SceneCanvas/useSceneSelectTool.js.map +1 -0
  108. package/dist/canvas/SceneCanvas/useViewportActions.js +30 -0
  109. package/dist/canvas/SceneCanvas/useViewportActions.js.map +1 -0
  110. package/dist/canvas/SceneCanvas.js +992 -0
  111. package/dist/canvas/SceneCanvas.js.map +1 -0
  112. package/dist/canvas/SceneViewCanvas.js +54 -0
  113. package/dist/canvas/SceneViewCanvas.js.map +1 -0
  114. package/dist/canvas/accentColor.js +9 -0
  115. package/dist/canvas/accentColor.js.map +1 -0
  116. package/dist/canvas/affordanceAt.js +63 -0
  117. package/dist/canvas/affordanceAt.js.map +1 -0
  118. package/dist/canvas/buildSceneTree.js +65 -0
  119. package/dist/canvas/buildSceneTree.js.map +1 -0
  120. package/dist/canvas/canvasRenderer.js +89 -0
  121. package/dist/canvas/canvasRenderer.js.map +1 -0
  122. package/dist/canvas/colorOverrides.js +16 -0
  123. package/dist/canvas/colorOverrides.js.map +1 -0
  124. package/dist/canvas/defaultDrawOne.js +43 -0
  125. package/dist/canvas/defaultDrawOne.js.map +1 -0
  126. package/dist/canvas/deps/areaSelect.js +19 -0
  127. package/dist/canvas/deps/areaSelect.js.map +1 -0
  128. package/dist/canvas/deps/debug.js +9 -0
  129. package/dist/canvas/deps/debug.js.map +1 -0
  130. package/dist/canvas/deps/dispatcher.js +11 -0
  131. package/dist/canvas/deps/dispatcher.js.map +1 -0
  132. package/dist/canvas/deps/editAnchors.js +101 -0
  133. package/dist/canvas/deps/editAnchors.js.map +1 -0
  134. package/dist/canvas/deps/geometryProjection.js +11 -0
  135. package/dist/canvas/deps/geometryProjection.js.map +1 -0
  136. package/dist/canvas/deps/hitTestArea.js +51 -0
  137. package/dist/canvas/deps/hitTestArea.js.map +1 -0
  138. package/dist/canvas/deps/ingestion.js +31 -0
  139. package/dist/canvas/deps/ingestion.js.map +1 -0
  140. package/dist/canvas/deps/insert.js +116 -0
  141. package/dist/canvas/deps/insert.js.map +1 -0
  142. package/dist/canvas/deps/lassoSelect.js +20 -0
  143. package/dist/canvas/deps/lassoSelect.js.map +1 -0
  144. package/dist/canvas/deps/layout.js +34 -0
  145. package/dist/canvas/deps/layout.js.map +1 -0
  146. package/dist/canvas/deps/nodeAtPoint.js +19 -0
  147. package/dist/canvas/deps/nodeAtPoint.js.map +1 -0
  148. package/dist/canvas/deps/poseComposition.js +11 -0
  149. package/dist/canvas/deps/poseComposition.js.map +1 -0
  150. package/dist/canvas/deps/poseDescriptor.js +12 -0
  151. package/dist/canvas/deps/poseDescriptor.js.map +1 -0
  152. package/dist/canvas/deps/resizePolicy.js +35 -0
  153. package/dist/canvas/deps/resizePolicy.js.map +1 -0
  154. package/dist/canvas/deps/slice.js +99 -0
  155. package/dist/canvas/deps/slice.js.map +1 -0
  156. package/dist/canvas/deps/snap.js +11 -0
  157. package/dist/canvas/deps/snap.js.map +1 -0
  158. package/dist/canvas/deps/textEdit.js +21 -0
  159. package/dist/canvas/deps/textEdit.js.map +1 -0
  160. package/dist/canvas/deps/view.js +43 -0
  161. package/dist/canvas/deps/view.js.map +1 -0
  162. package/dist/canvas/derivedPath.js +47 -0
  163. package/dist/canvas/derivedPath.js.map +1 -0
  164. package/dist/canvas/drawEnvelope.js +22 -0
  165. package/dist/canvas/drawEnvelope.js.map +1 -0
  166. package/dist/canvas/getNodeAtPoint.js +18 -0
  167. package/dist/canvas/getNodeAtPoint.js.map +1 -0
  168. package/dist/canvas/hostAnchor.js +29 -0
  169. package/dist/canvas/hostAnchor.js.map +1 -0
  170. package/dist/canvas/hud.module.js +18 -0
  171. package/dist/canvas/hud.module.js.map +1 -0
  172. package/dist/canvas/insertPreviewExtent.js +103 -0
  173. package/dist/canvas/insertPreviewExtent.js.map +1 -0
  174. package/dist/canvas/kitRequirements.js +177 -0
  175. package/dist/canvas/kitRequirements.js.map +1 -0
  176. package/dist/canvas/layerOrder.js +66 -0
  177. package/dist/canvas/layerOrder.js.map +1 -0
  178. package/dist/canvas/layerSlots.js +14 -0
  179. package/dist/canvas/layerSlots.js.map +1 -0
  180. package/dist/canvas/minimapMath.js +80 -0
  181. package/dist/canvas/minimapMath.js.map +1 -0
  182. package/dist/canvas/mountedCanvases.js +20 -0
  183. package/dist/canvas/mountedCanvases.js.map +1 -0
  184. package/dist/canvas/overlayRoleStrokes.js +17 -0
  185. package/dist/canvas/overlayRoleStrokes.js.map +1 -0
  186. package/dist/canvas/paintCull.js +20 -0
  187. package/dist/canvas/paintCull.js.map +1 -0
  188. package/dist/canvas/pickWalk.js +158 -0
  189. package/dist/canvas/pickWalk.js.map +1 -0
  190. package/dist/canvas/planeClips.js +30 -0
  191. package/dist/canvas/planeClips.js.map +1 -0
  192. package/dist/canvas/poseRotation.js +35 -0
  193. package/dist/canvas/poseRotation.js.map +1 -0
  194. package/dist/canvas/rasterToPng.js +21 -0
  195. package/dist/canvas/rasterToPng.js.map +1 -0
  196. package/dist/canvas/renderDebugSnapshot.js +32 -0
  197. package/dist/canvas/renderDebugSnapshot.js.map +1 -0
  198. package/dist/canvas/renderNeeds.js +25 -0
  199. package/dist/canvas/renderNeeds.js.map +1 -0
  200. package/dist/canvas/renderSceneToPixels.js +143 -0
  201. package/dist/canvas/renderSceneToPixels.js.map +1 -0
  202. package/dist/canvas/sceneAdapter.js +270 -0
  203. package/dist/canvas/sceneAdapter.js.map +1 -0
  204. package/dist/canvas/sceneLayerPaint.js +37 -0
  205. package/dist/canvas/sceneLayerPaint.js.map +1 -0
  206. package/dist/canvas/sceneSlotWiring.js +20 -0
  207. package/dist/canvas/sceneSlotWiring.js.map +1 -0
  208. package/dist/canvas/sceneViewRender.js +72 -0
  209. package/dist/canvas/sceneViewRender.js.map +1 -0
  210. package/dist/canvas/slopsDebugLayer.js +61 -0
  211. package/dist/canvas/slopsDebugLayer.js.map +1 -0
  212. package/dist/canvas/surfaceContribution.js +15 -0
  213. package/dist/canvas/surfaceContribution.js.map +1 -0
  214. package/dist/canvas/toolPreview.js +39 -0
  215. package/dist/canvas/toolPreview.js.map +1 -0
  216. package/dist/canvas/useCanvasRenderer.js +11 -0
  217. package/dist/canvas/useCanvasRenderer.js.map +1 -0
  218. package/dist/canvas/useFrameLoop.js +60 -0
  219. package/dist/canvas/useFrameLoop.js.map +1 -0
  220. package/dist/canvas/useHostAnchor.js +71 -0
  221. package/dist/canvas/useHostAnchor.js.map +1 -0
  222. package/dist/canvas/useLateContentRedraw.js +21 -0
  223. package/dist/canvas/useLateContentRedraw.js.map +1 -0
  224. package/dist/canvas/useRedrawOn.js +21 -0
  225. package/dist/canvas/useRedrawOn.js.map +1 -0
  226. package/dist/canvas/useViewHelpers.js +120 -0
  227. package/dist/canvas/useViewHelpers.js.map +1 -0
  228. package/dist/canvas/viewInputs.js +17 -0
  229. package/dist/canvas/viewInputs.js.map +1 -0
  230. package/dist/canvas/viewRegistry.js +61 -0
  231. package/dist/canvas/viewRegistry.js.map +1 -0
  232. package/dist/canvas/wrapNodeOutput.js +14 -0
  233. package/dist/canvas/wrapNodeOutput.js.map +1 -0
  234. package/dist/clipboard.d.ts +10 -5
  235. package/dist/clipboard.js +3 -5
  236. package/dist/clone.d.ts +3 -3
  237. package/dist/clone.js +2 -5
  238. package/dist/core/adapters/arrayAdapter.js +85 -0
  239. package/dist/core/adapters/arrayAdapter.js.map +1 -0
  240. package/dist/core/adapters/useArrayAdapter.js +13 -0
  241. package/dist/core/adapters/useArrayAdapter.js.map +1 -0
  242. package/dist/core/applyOps.js +12 -0
  243. package/dist/core/applyOps.js.map +1 -0
  244. package/dist/core/device/index.js +4 -0
  245. package/dist/core/device/targets.js +17 -0
  246. package/dist/core/device/targets.js.map +1 -0
  247. package/dist/core/device/useDeviceProfile.js +75 -0
  248. package/dist/core/device/useDeviceProfile.js.map +1 -0
  249. package/dist/core/fillInPoseFrame.js +102 -0
  250. package/dist/core/fillInPoseFrame.js.map +1 -0
  251. package/dist/core/geometry/poseDescriptor.js +98 -0
  252. package/dist/core/geometry/poseDescriptor.js.map +1 -0
  253. package/dist/core/geometry/poseRotation.js +58 -0
  254. package/dist/core/geometry/poseRotation.js.map +1 -0
  255. package/dist/core/geometry/regionHit.js +102 -0
  256. package/dist/core/geometry/regionHit.js.map +1 -0
  257. package/dist/core/geometry/unionBounds.js +60 -0
  258. package/dist/core/geometry/unionBounds.js.map +1 -0
  259. package/dist/core/gradient.js +136 -0
  260. package/dist/core/gradient.js.map +1 -0
  261. package/dist/core/isPlainObject.js +11 -0
  262. package/dist/core/isPlainObject.js.map +1 -0
  263. package/dist/core/layers/render.js +150 -0
  264. package/dist/core/layers/render.js.map +1 -0
  265. package/dist/core/markerInset.js +24 -0
  266. package/dist/core/markerInset.js.map +1 -0
  267. package/dist/core/mixed.js +6 -0
  268. package/dist/core/mixed.js.map +1 -0
  269. package/dist/core/ops/arrange.js +31 -0
  270. package/dist/core/ops/arrange.js.map +1 -0
  271. package/dist/core/ops/create.js +32 -0
  272. package/dist/core/ops/create.js.map +1 -0
  273. package/dist/core/ops/createHistory.js +20 -0
  274. package/dist/core/ops/createHistory.js.map +1 -0
  275. package/dist/core/ops/delete.js +89 -0
  276. package/dist/core/ops/delete.js.map +1 -0
  277. package/dist/core/ops/registry.js +17 -0
  278. package/dist/core/ops/registry.js.map +1 -0
  279. package/dist/core/ops/reorder/algorithms.js +55 -0
  280. package/dist/core/ops/reorder/algorithms.js.map +1 -0
  281. package/dist/core/ops/reorder/index.js +140 -0
  282. package/dist/core/ops/reorder/index.js.map +1 -0
  283. package/dist/core/ops/reparent.js +52 -0
  284. package/dist/core/ops/reparent.js.map +1 -0
  285. package/dist/core/ops/select.js +34 -0
  286. package/dist/core/ops/select.js.map +1 -0
  287. package/dist/core/ops/setData.js +34 -0
  288. package/dist/core/ops/setData.js.map +1 -0
  289. package/dist/core/ops/setLayer.js +34 -0
  290. package/dist/core/ops/setLayer.js.map +1 -0
  291. package/dist/core/ops/setLayout.js +31 -0
  292. package/dist/core/ops/setLayout.js.map +1 -0
  293. package/dist/core/ops/setPath.js +57 -0
  294. package/dist/core/ops/setPath.js.map +1 -0
  295. package/dist/core/ops/setText.js +34 -0
  296. package/dist/core/ops/setText.js.map +1 -0
  297. package/dist/core/ops/slot.js +37 -0
  298. package/dist/core/ops/slot.js.map +1 -0
  299. package/dist/core/ops/transform.js +42 -0
  300. package/dist/core/ops/transform.js.map +1 -0
  301. package/dist/core/paintKinds.js +156 -0
  302. package/dist/core/paintKinds.js.map +1 -0
  303. package/dist/core/scene/NodeProperties.js +20 -0
  304. package/dist/core/scene/NodeProperties.js.map +1 -0
  305. package/dist/core/scene/NodeRouting.js +24 -0
  306. package/dist/core/scene/NodeRouting.js.map +1 -0
  307. package/dist/core/scene/arrivals.js +12 -0
  308. package/dist/core/scene/arrivals.js.map +1 -0
  309. package/dist/core/scene/composeFrame.js +29 -0
  310. package/dist/core/scene/composeFrame.js.map +1 -0
  311. package/dist/core/scene/depMemo.js +18 -0
  312. package/dist/core/scene/depMemo.js.map +1 -0
  313. package/dist/core/scene/dependents.js +66 -0
  314. package/dist/core/scene/dependents.js.map +1 -0
  315. package/dist/core/scene/derivedPath.js +31 -0
  316. package/dist/core/scene/derivedPath.js.map +1 -0
  317. package/dist/core/scene/effectivePose.js +78 -0
  318. package/dist/core/scene/effectivePose.js.map +1 -0
  319. package/dist/core/scene/kitRegistry.js +33 -0
  320. package/dist/core/scene/kitRegistry.js.map +1 -0
  321. package/dist/core/scene/layoutPass.js +96 -0
  322. package/dist/core/scene/layoutPass.js.map +1 -0
  323. package/dist/core/scene/nodeFnFields.js +83 -0
  324. package/dist/core/scene/nodeFnFields.js.map +1 -0
  325. package/dist/core/scene/nodeMemo.js +28 -0
  326. package/dist/core/scene/nodeMemo.js.map +1 -0
  327. package/dist/core/scene/poseFeed.js +87 -0
  328. package/dist/core/scene/poseFeed.js.map +1 -0
  329. package/dist/core/scene/poseOverrides.js +52 -0
  330. package/dist/core/scene/poseOverrides.js.map +1 -0
  331. package/dist/core/scene/poseSnapshot.js +54 -0
  332. package/dist/core/scene/poseSnapshot.js.map +1 -0
  333. package/dist/core/scene/scene.js +1271 -0
  334. package/dist/core/scene/scene.js.map +1 -0
  335. package/dist/core/scene/types.js +6 -0
  336. package/dist/core/scene/types.js.map +1 -0
  337. package/dist/core/scene/useScene.js +32 -0
  338. package/dist/core/scene/useScene.js.map +1 -0
  339. package/dist/core/selection/chromeState.js +31 -0
  340. package/dist/core/selection/chromeState.js.map +1 -0
  341. package/dist/core/selection/selectionTarget.js +6 -0
  342. package/dist/core/selection/selectionTarget.js.map +1 -0
  343. package/dist/core/selection/useSelection.js +71 -0
  344. package/dist/core/selection/useSelection.js.map +1 -0
  345. package/dist/core/shapeKinds.js +54 -0
  346. package/dist/core/shapeKinds.js.map +1 -0
  347. package/dist/core/strokeMarkerShapes.js +139 -0
  348. package/dist/core/strokeMarkerShapes.js.map +1 -0
  349. package/dist/core/strokeMarkers.js +28 -0
  350. package/dist/core/strokeMarkers.js.map +1 -0
  351. package/dist/core/stylus/stylus.js +39 -0
  352. package/dist/core/stylus/stylus.js.map +1 -0
  353. package/dist/core/stylus/usePointerStylus.js +51 -0
  354. package/dist/core/stylus/usePointerStylus.js.map +1 -0
  355. package/dist/core/usePaintKinds.js +17 -0
  356. package/dist/core/usePaintKinds.js.map +1 -0
  357. package/dist/core/viewport/clampView.js +24 -0
  358. package/dist/core/viewport/clampView.js.map +1 -0
  359. package/dist/core/viewport/clientToWorld.js +8 -0
  360. package/dist/core/viewport/clientToWorld.js.map +1 -0
  361. package/dist/core/viewport/createVelocityTracker.js +39 -0
  362. package/dist/core/viewport/createVelocityTracker.js.map +1 -0
  363. package/dist/core/viewport/fitToBounds.js +18 -0
  364. package/dist/core/viewport/fitToBounds.js.map +1 -0
  365. package/dist/core/viewport/fitViewToBounds.js +36 -0
  366. package/dist/core/viewport/fitViewToBounds.js.map +1 -0
  367. package/dist/core/viewport/interpolateView.js +34 -0
  368. package/dist/core/viewport/interpolateView.js.map +1 -0
  369. package/dist/core/viewport/meanScale.js +8 -0
  370. package/dist/core/viewport/meanScale.js.map +1 -0
  371. package/dist/core/viewport/parallax.js +111 -0
  372. package/dist/core/viewport/parallax.js.map +1 -0
  373. package/dist/core/viewport/pxExtent.js +42 -0
  374. package/dist/core/viewport/pxExtent.js.map +1 -0
  375. package/dist/core/viewport/sceneNodeClientRect.js +18 -0
  376. package/dist/core/viewport/sceneNodeClientRect.js.map +1 -0
  377. package/dist/core/viewport/screenSlop.js +27 -0
  378. package/dist/core/viewport/screenSlop.js.map +1 -0
  379. package/dist/core/viewport/useAutoCenter.js +32 -0
  380. package/dist/core/viewport/useAutoCenter.js.map +1 -0
  381. package/dist/core/viewport/useCanvasSize.js +29 -0
  382. package/dist/core/viewport/useCanvasSize.js.map +1 -0
  383. package/dist/core/viewport/useDecayLoop.js +63 -0
  384. package/dist/core/viewport/useDecayLoop.js.map +1 -0
  385. package/dist/core/viewport/useVelocityTracker.js +10 -0
  386. package/dist/core/viewport/useVelocityTracker.js.map +1 -0
  387. package/dist/core/viewport/useViewAnimation.js +63 -0
  388. package/dist/core/viewport/useViewAnimation.js.map +1 -0
  389. package/dist/core/viewport/view.js +37 -0
  390. package/dist/core/viewport/view.js.map +1 -0
  391. package/dist/core/viewport/viewTransform.js +11 -0
  392. package/dist/core/viewport/viewTransform.js.map +1 -0
  393. package/dist/core/viewport/viewportWorldRect.js +13 -0
  394. package/dist/core/viewport/viewportWorldRect.js.map +1 -0
  395. package/dist/core/viewport/wheelHandler.js +30 -0
  396. package/dist/core/viewport/wheelHandler.js.map +1 -0
  397. package/dist/core/viewport/zoomAt.js +22 -0
  398. package/dist/core/viewport/zoomAt.js.map +1 -0
  399. package/dist/core/viewport/zoomBounds.js +20 -0
  400. package/dist/core/viewport/zoomBounds.js.map +1 -0
  401. package/dist/{pointSnapToGrid-Dp2IxLGb.d.ts → cornerHandles-CDcZOV8h.d.ts} +3 -13
  402. package/dist/debug/createDebugOverlayLayer.js +358 -0
  403. package/dist/debug/createDebugOverlayLayer.js.map +1 -0
  404. package/dist/debug/createDebugSink.js +83 -0
  405. package/dist/debug/createDebugSink.js.map +1 -0
  406. package/dist/debug/defaultTheme.js +31 -0
  407. package/dist/debug/defaultTheme.js.map +1 -0
  408. package/dist/debug/flag.js +41 -0
  409. package/dist/debug/flag.js.map +1 -0
  410. package/dist/debug/frameStats.js +16 -0
  411. package/dist/debug/frameStats.js.map +1 -0
  412. package/dist/debug/parseDebugFlags.js +32 -0
  413. package/dist/debug/parseDebugFlags.js.map +1 -0
  414. package/dist/features/chrome-caps/buildChromeCtx.js +16 -0
  415. package/dist/features/chrome-caps/buildChromeCtx.js.map +1 -0
  416. package/dist/features/chrome-caps/conditions.js +36 -0
  417. package/dist/features/chrome-caps/conditions.js.map +1 -0
  418. package/dist/features/chrome-caps/defaults.js +26 -0
  419. package/dist/features/chrome-caps/defaults.js.map +1 -0
  420. package/dist/features/chrome-caps/index.js +7 -0
  421. package/dist/features/chrome-caps/resolve.js +23 -0
  422. package/dist/features/chrome-caps/resolve.js.map +1 -0
  423. package/dist/features/chrome-caps/useHoverTracking.js +27 -0
  424. package/dist/features/chrome-caps/useHoverTracking.js.map +1 -0
  425. package/dist/features/cursor/paintedCursorLayer.js +60 -0
  426. package/dist/features/cursor/paintedCursorLayer.js.map +1 -0
  427. package/dist/features/focus/gateLayer.js +14 -0
  428. package/dist/features/focus/gateLayer.js.map +1 -0
  429. package/dist/features/focus/useCanvasFocus.js +29 -0
  430. package/dist/features/focus/useCanvasFocus.js.map +1 -0
  431. package/dist/features/groups/children.js +23 -0
  432. package/dist/features/groups/children.js.map +1 -0
  433. package/dist/features/groups/composePose.js +67 -0
  434. package/dist/features/groups/composePose.js.map +1 -0
  435. package/dist/features/groups/nestedHit.js +40 -0
  436. package/dist/features/groups/nestedHit.js.map +1 -0
  437. package/dist/features/groups/unionOfChildren.js +15 -0
  438. package/dist/features/groups/unionOfChildren.js.map +1 -0
  439. package/dist/features/images/imageCache.js +94 -0
  440. package/dist/features/images/imageCache.js.map +1 -0
  441. package/dist/features/ingestion/contentHandlers.js +37 -0
  442. package/dist/features/ingestion/contentHandlers.js.map +1 -0
  443. package/dist/features/ingestion/imageHandler.js +45 -0
  444. package/dist/features/ingestion/imageHandler.js.map +1 -0
  445. package/dist/features/ingestion/index.js +8 -0
  446. package/dist/features/ingestion/openFilePicker.js +15 -0
  447. package/dist/features/ingestion/openFilePicker.js.map +1 -0
  448. package/dist/features/ingestion/registerKitHandlers.js +26 -0
  449. package/dist/features/ingestion/registerKitHandlers.js.map +1 -0
  450. package/dist/features/ingestion/svgHandler.js +58 -0
  451. package/dist/features/ingestion/svgHandler.js.map +1 -0
  452. package/dist/features/ingestion/weaselJsonHandler.js +39 -0
  453. package/dist/features/ingestion/weaselJsonHandler.js.map +1 -0
  454. package/dist/features/longPress/longPressFeedback.js +96 -0
  455. package/dist/features/longPress/longPressFeedback.js.map +1 -0
  456. package/dist/features/meshPaint/bake.js +79 -0
  457. package/dist/features/meshPaint/bake.js.map +1 -0
  458. package/dist/features/meshPaint/bakeCache.js +59 -0
  459. package/dist/features/meshPaint/bakeCache.js.map +1 -0
  460. package/dist/features/meshPaint/handles.js +86 -0
  461. package/dist/features/meshPaint/handles.js.map +1 -0
  462. package/dist/features/meshPaint/lazyKind.js +1298 -0
  463. package/dist/features/meshPaint/lazyKind.js.map +1 -0
  464. package/dist/features/meshPaint/meshPaint.js +236 -0
  465. package/dist/features/meshPaint/meshPaint.js.map +1 -0
  466. package/dist/features/meshPaint/meshShader.js +6 -0
  467. package/dist/features/meshPaint/meshShader.js.map +1 -0
  468. package/dist/features/meshPaint/register.js +7 -0
  469. package/dist/features/meshPaint/register.js.map +1 -0
  470. package/dist/features/meshPaint/surface.js +110 -0
  471. package/dist/features/meshPaint/surface.js.map +1 -0
  472. package/dist/features/minimap/actions.js +53 -0
  473. package/dist/features/minimap/actions.js.map +1 -0
  474. package/dist/features/minimap/createMinimapContribution.js +96 -0
  475. package/dist/features/minimap/createMinimapContribution.js.map +1 -0
  476. package/dist/features/minimap/layers.js +103 -0
  477. package/dist/features/minimap/layers.js.map +1 -0
  478. package/dist/features/modes/modeLayers.js +113 -0
  479. package/dist/features/modes/modeLayers.js.map +1 -0
  480. package/dist/features/overlays/useNodeOverlayFrame.js +103 -0
  481. package/dist/features/overlays/useNodeOverlayFrame.js.map +1 -0
  482. package/dist/features/parallax/createParallaxLayer.js +26 -0
  483. package/dist/features/parallax/createParallaxLayer.js.map +1 -0
  484. package/dist/features/parallax/createParallaxPlane.js +26 -0
  485. package/dist/features/parallax/createParallaxPlane.js.map +1 -0
  486. package/dist/features/paths/anchorEdits.js +156 -0
  487. package/dist/features/paths/anchorEdits.js.map +1 -0
  488. package/dist/features/paths/anchors.js +154 -0
  489. package/dist/features/paths/anchors.js.map +1 -0
  490. package/dist/features/paths/booleans.js +2 -0
  491. package/dist/features/paths/index.js +15 -0
  492. package/dist/features/paths/markerCommands.js +116 -0
  493. package/dist/features/paths/markerCommands.js.map +1 -0
  494. package/dist/features/paths/markerSites.js +59 -0
  495. package/dist/features/paths/markerSites.js.map +1 -0
  496. package/dist/features/paths/markers.js +95 -0
  497. package/dist/features/paths/markers.js.map +1 -0
  498. package/dist/features/paths/nearestAnchor.js +36 -0
  499. package/dist/features/paths/nearestAnchor.js.map +1 -0
  500. package/dist/features/paths/originProjection.js +16 -0
  501. package/dist/features/paths/originProjection.js.map +1 -0
  502. package/dist/features/paths/pathEditingOverlayLayer.js +137 -0
  503. package/dist/features/paths/pathEditingOverlayLayer.js.map +1 -0
  504. package/dist/features/paths/pathInWorld.js +41 -0
  505. package/dist/features/paths/pathInWorld.js.map +1 -0
  506. package/dist/features/paths/pathLayer.js +44 -0
  507. package/dist/features/paths/pathLayer.js.map +1 -0
  508. package/dist/features/paths/penPreviewLayer.js +220 -0
  509. package/dist/features/paths/penPreviewLayer.js.map +1 -0
  510. package/dist/features/paths/poseDescriptor.js +44 -0
  511. package/dist/features/paths/poseDescriptor.js.map +1 -0
  512. package/dist/features/paths/tessellate/stroke.js +230 -0
  513. package/dist/features/paths/tessellate/stroke.js.map +1 -0
  514. package/dist/features/patterns/index.js +23 -0
  515. package/dist/features/patterns/index.js.map +1 -0
  516. package/dist/features/patterns/patterns-builtin.js +38 -0
  517. package/dist/features/patterns/patterns-builtin.js.map +1 -0
  518. package/dist/features/patterns/resolveSpec.js +57 -0
  519. package/dist/features/patterns/resolveSpec.js.map +1 -0
  520. package/dist/features/patterns/tileGeometry.js +158 -0
  521. package/dist/features/patterns/tileGeometry.js.map +1 -0
  522. package/dist/features/pointer/PointerContext.js +45 -0
  523. package/dist/features/pointer/PointerContext.js.map +1 -0
  524. package/dist/features/poseRun/usePoseRun.js +70 -0
  525. package/dist/features/poseRun/usePoseRun.js.map +1 -0
  526. package/dist/features/selection/SelectionContext.js +46 -0
  527. package/dist/features/selection/SelectionContext.js.map +1 -0
  528. package/dist/features/selection/overlay.js +442 -0
  529. package/dist/features/selection/overlay.js.map +1 -0
  530. package/dist/features/simulation/createSimulation.js +61 -0
  531. package/dist/features/simulation/createSimulation.js.map +1 -0
  532. package/dist/features/simulation/types.js +6 -0
  533. package/dist/features/simulation/types.js.map +1 -0
  534. package/dist/features/simulation/useSimulation.js +74 -0
  535. package/dist/features/simulation/useSimulation.js.map +1 -0
  536. package/dist/features/text/domRuns.js +258 -0
  537. package/dist/features/text/domRuns.js.map +1 -0
  538. package/dist/features/text/fitTextPose.js +38 -0
  539. package/dist/features/text/fitTextPose.js.map +1 -0
  540. package/dist/features/text/hitTest.js +45 -0
  541. package/dist/features/text/hitTest.js.map +1 -0
  542. package/dist/features/text/renderLabel.js +14 -0
  543. package/dist/features/text/renderLabel.js.map +1 -0
  544. package/dist/features/text/runs/effectiveRangeStyle.js +66 -0
  545. package/dist/features/text/runs/effectiveRangeStyle.js.map +1 -0
  546. package/dist/features/text/runs/flagRange.js +53 -0
  547. package/dist/features/text/runs/flagRange.js.map +1 -0
  548. package/dist/features/text/runs/rangeStyle.js +135 -0
  549. package/dist/features/text/runs/rangeStyle.js.map +1 -0
  550. package/dist/features/text/textCommand.js +59 -0
  551. package/dist/features/text/textCommand.js.map +1 -0
  552. package/dist/features/text/textLayer.js +35 -0
  553. package/dist/features/text/textLayer.js.map +1 -0
  554. package/dist/features/text/textToPath.js +181 -0
  555. package/dist/features/text/textToPath.js.map +1 -0
  556. package/dist/features/text/useSceneTextEdit.js +138 -0
  557. package/dist/features/text/useSceneTextEdit.js.map +1 -0
  558. package/dist/features/text/useTextEdit.js +465 -0
  559. package/dist/features/text/useTextEdit.js.map +1 -0
  560. package/dist/features/tiling/createTiledLayer.js +63 -0
  561. package/dist/features/tiling/createTiledLayer.js.map +1 -0
  562. package/dist/features/tiling/tiledProject.js +14 -0
  563. package/dist/features/tiling/tiledProject.js.map +1 -0
  564. package/dist/features/viewports/viewResolver.js +59 -0
  565. package/dist/features/viewports/viewResolver.js.map +1 -0
  566. package/dist/features/viewports/viewportLayer.js +58 -0
  567. package/dist/features/viewports/viewportLayer.js.map +1 -0
  568. package/dist/icons/ArrowIcon.js +23 -0
  569. package/dist/icons/ArrowIcon.js.map +1 -0
  570. package/dist/icons/EllipseIcon.js +21 -0
  571. package/dist/icons/EllipseIcon.js.map +1 -0
  572. package/dist/icons/EyedropperIcon.js +49 -0
  573. package/dist/icons/EyedropperIcon.js.map +1 -0
  574. package/dist/icons/HandIcon.js +59 -0
  575. package/dist/icons/HandIcon.js.map +1 -0
  576. package/dist/icons/ImageIcon.js +34 -0
  577. package/dist/icons/ImageIcon.js.map +1 -0
  578. package/dist/icons/LassoIcon.js +22 -0
  579. package/dist/icons/LassoIcon.js.map +1 -0
  580. package/dist/icons/LineIcon.js +22 -0
  581. package/dist/icons/LineIcon.js.map +1 -0
  582. package/dist/icons/PenIcon.js +36 -0
  583. package/dist/icons/PenIcon.js.map +1 -0
  584. package/dist/icons/PencilIcon.js +25 -0
  585. package/dist/icons/PencilIcon.js.map +1 -0
  586. package/dist/icons/PolygonIcon.js +19 -0
  587. package/dist/icons/PolygonIcon.js.map +1 -0
  588. package/dist/icons/RectIcon.js +37 -0
  589. package/dist/icons/RectIcon.js.map +1 -0
  590. package/dist/icons/SelectIcon.js +20 -0
  591. package/dist/icons/SelectIcon.js.map +1 -0
  592. package/dist/icons/StarIcon.js +19 -0
  593. package/dist/icons/StarIcon.js.map +1 -0
  594. package/dist/icons/TextIcon.js +19 -0
  595. package/dist/icons/TextIcon.js.map +1 -0
  596. package/dist/icons/UnknownIcon.js +33 -0
  597. package/dist/icons/UnknownIcon.js.map +1 -0
  598. package/dist/icons/_base.js +12 -0
  599. package/dist/icons/_base.js.map +1 -0
  600. package/dist/index.css +2 -62
  601. package/dist/index.d.ts +1955 -1891
  602. package/dist/index.js +312 -13
  603. package/dist/input/keyState.js +76 -0
  604. package/dist/input/keyState.js.map +1 -0
  605. package/dist/input/useKeyState.js +22 -0
  606. package/dist/input/useKeyState.js.map +1 -0
  607. package/dist/interactions/actions/actionShortcuts.js +32 -0
  608. package/dist/interactions/actions/actionShortcuts.js.map +1 -0
  609. package/dist/interactions/actions/align/align.js +81 -0
  610. package/dist/interactions/actions/align/align.js.map +1 -0
  611. package/dist/interactions/actions/booleans/booleans.js +120 -0
  612. package/dist/interactions/actions/booleans/booleans.js.map +1 -0
  613. package/dist/interactions/actions/booleans/useBooleans.js +20 -0
  614. package/dist/interactions/actions/booleans/useBooleans.js.map +1 -0
  615. package/dist/interactions/actions/booleans/useBooleansAdapter.js +9 -0
  616. package/dist/interactions/actions/booleans/useBooleansAdapter.js.map +1 -0
  617. package/dist/interactions/actions/clipboard/clipboardOps.js +94 -0
  618. package/dist/interactions/actions/clipboard/clipboardOps.js.map +1 -0
  619. package/dist/interactions/actions/clipboard/materializePaste.js +25 -0
  620. package/dist/interactions/actions/clipboard/materializePaste.js.map +1 -0
  621. package/dist/interactions/actions/clipboard/wireFormat.js +43 -0
  622. package/dist/interactions/actions/clipboard/wireFormat.js.map +1 -0
  623. package/dist/interactions/actions/clone/behaviors/cloneByAltDrag.js +26 -0
  624. package/dist/interactions/actions/clone/behaviors/cloneByAltDrag.js.map +1 -0
  625. package/dist/interactions/actions/defaultCommitAdapter.js +42 -0
  626. package/dist/interactions/actions/defaultCommitAdapter.js.map +1 -0
  627. package/dist/interactions/actions/defaults/align.js +71 -0
  628. package/dist/interactions/actions/defaults/align.js.map +1 -0
  629. package/dist/interactions/actions/defaults/anchorEditing.js +235 -0
  630. package/dist/interactions/actions/defaults/anchorEditing.js.map +1 -0
  631. package/dist/interactions/actions/defaults/areaSelect.js +75 -0
  632. package/dist/interactions/actions/defaults/areaSelect.js.map +1 -0
  633. package/dist/interactions/actions/defaults/booleans.js +52 -0
  634. package/dist/interactions/actions/defaults/booleans.js.map +1 -0
  635. package/dist/interactions/actions/defaults/cancelGesture.js +24 -0
  636. package/dist/interactions/actions/defaults/cancelGesture.js.map +1 -0
  637. package/dist/interactions/actions/defaults/clearSelection.js +19 -0
  638. package/dist/interactions/actions/defaults/clearSelection.js.map +1 -0
  639. package/dist/interactions/actions/defaults/clipboard.js +78 -0
  640. package/dist/interactions/actions/defaults/clipboard.js.map +1 -0
  641. package/dist/interactions/actions/defaults/clone.js +96 -0
  642. package/dist/interactions/actions/defaults/clone.js.map +1 -0
  643. package/dist/interactions/actions/defaults/createOutlines.js +47 -0
  644. package/dist/interactions/actions/defaults/createOutlines.js.map +1 -0
  645. package/dist/interactions/actions/defaults/createPaintAction.js +85 -0
  646. package/dist/interactions/actions/defaults/createPaintAction.js.map +1 -0
  647. package/dist/interactions/actions/defaults/delete.js +61 -0
  648. package/dist/interactions/actions/defaults/delete.js.map +1 -0
  649. package/dist/interactions/actions/defaults/distribute.js +66 -0
  650. package/dist/interactions/actions/defaults/distribute.js.map +1 -0
  651. package/dist/interactions/actions/defaults/duplicate.js +83 -0
  652. package/dist/interactions/actions/defaults/duplicate.js.map +1 -0
  653. package/dist/interactions/actions/defaults/editAnchors.js +100 -0
  654. package/dist/interactions/actions/defaults/editAnchors.js.map +1 -0
  655. package/dist/interactions/actions/defaults/enterPathEdit.js +29 -0
  656. package/dist/interactions/actions/defaults/enterPathEdit.js.map +1 -0
  657. package/dist/interactions/actions/defaults/enterTextEdit.js +20 -0
  658. package/dist/interactions/actions/defaults/enterTextEdit.js.map +1 -0
  659. package/dist/interactions/actions/defaults/escape.js +26 -0
  660. package/dist/interactions/actions/defaults/escape.js.map +1 -0
  661. package/dist/interactions/actions/defaults/exitPathEdit.js +22 -0
  662. package/dist/interactions/actions/defaults/exitPathEdit.js.map +1 -0
  663. package/dist/interactions/actions/defaults/flip.js +119 -0
  664. package/dist/interactions/actions/defaults/flip.js.map +1 -0
  665. package/dist/interactions/actions/defaults/freshNodeId.js +10 -0
  666. package/dist/interactions/actions/defaults/freshNodeId.js.map +1 -0
  667. package/dist/interactions/actions/defaults/group.js +131 -0
  668. package/dist/interactions/actions/defaults/group.js.map +1 -0
  669. package/dist/interactions/actions/defaults/icons/actionGlyphIcons.js +40 -0
  670. package/dist/interactions/actions/defaults/icons/actionGlyphIcons.js.map +1 -0
  671. package/dist/interactions/actions/defaults/icons/actionGlyphs.js +10 -0
  672. package/dist/interactions/actions/defaults/icons/actionGlyphs.js.map +1 -0
  673. package/dist/interactions/actions/defaults/icons/alignIcons.js +173 -0
  674. package/dist/interactions/actions/defaults/icons/alignIcons.js.map +1 -0
  675. package/dist/interactions/actions/defaults/icons/booleanIcons.js +171 -0
  676. package/dist/interactions/actions/defaults/icons/booleanIcons.js.map +1 -0
  677. package/dist/interactions/actions/defaults/icons/distributeIcons.js +63 -0
  678. package/dist/interactions/actions/defaults/icons/distributeIcons.js.map +1 -0
  679. package/dist/interactions/actions/defaults/icons/editIcons.js +280 -0
  680. package/dist/interactions/actions/defaults/icons/editIcons.js.map +1 -0
  681. package/dist/interactions/actions/defaults/icons/outlineIcons.js +53 -0
  682. package/dist/interactions/actions/defaults/icons/outlineIcons.js.map +1 -0
  683. package/dist/interactions/actions/defaults/ingest.js +58 -0
  684. package/dist/interactions/actions/defaults/ingest.js.map +1 -0
  685. package/dist/interactions/actions/defaults/insert.js +288 -0
  686. package/dist/interactions/actions/defaults/insert.js.map +1 -0
  687. package/dist/interactions/actions/defaults/insertPathAnchor.js +50 -0
  688. package/dist/interactions/actions/defaults/insertPathAnchor.js.map +1 -0
  689. package/dist/interactions/actions/defaults/lassoSelect.js +156 -0
  690. package/dist/interactions/actions/defaults/lassoSelect.js.map +1 -0
  691. package/dist/interactions/actions/defaults/move.js +656 -0
  692. package/dist/interactions/actions/defaults/move.js.map +1 -0
  693. package/dist/interactions/actions/defaults/nudge.js +110 -0
  694. package/dist/interactions/actions/defaults/nudge.js.map +1 -0
  695. package/dist/interactions/actions/defaults/pinchZoom.js +63 -0
  696. package/dist/interactions/actions/defaults/pinchZoom.js.map +1 -0
  697. package/dist/interactions/actions/defaults/reorder.js +143 -0
  698. package/dist/interactions/actions/defaults/reorder.js.map +1 -0
  699. package/dist/interactions/actions/defaults/requiresSelection.js +10 -0
  700. package/dist/interactions/actions/defaults/requiresSelection.js.map +1 -0
  701. package/dist/interactions/actions/defaults/resize.js +332 -0
  702. package/dist/interactions/actions/defaults/resize.js.map +1 -0
  703. package/dist/interactions/actions/defaults/rotate.js +181 -0
  704. package/dist/interactions/actions/defaults/rotate.js.map +1 -0
  705. package/dist/interactions/actions/defaults/selectAll.js +27 -0
  706. package/dist/interactions/actions/defaults/selectAll.js.map +1 -0
  707. package/dist/interactions/actions/defaults/setFill.js +27 -0
  708. package/dist/interactions/actions/defaults/setFill.js.map +1 -0
  709. package/dist/interactions/actions/defaults/setFillOpacity.js +15 -0
  710. package/dist/interactions/actions/defaults/setFillOpacity.js.map +1 -0
  711. package/dist/interactions/actions/defaults/setStroke.js +36 -0
  712. package/dist/interactions/actions/defaults/setStroke.js.map +1 -0
  713. package/dist/interactions/actions/defaults/setStrokeOpacity.js +21 -0
  714. package/dist/interactions/actions/defaults/setStrokeOpacity.js.map +1 -0
  715. package/dist/interactions/actions/defaults/slice.js +39 -0
  716. package/dist/interactions/actions/defaults/slice.js.map +1 -0
  717. package/dist/interactions/actions/defaults/sliceOps.js +60 -0
  718. package/dist/interactions/actions/defaults/sliceOps.js.map +1 -0
  719. package/dist/interactions/actions/defaults/toolActivate.js +35 -0
  720. package/dist/interactions/actions/defaults/toolActivate.js.map +1 -0
  721. package/dist/interactions/actions/defaults/toolResetToDefault.js +26 -0
  722. package/dist/interactions/actions/defaults/toolResetToDefault.js.map +1 -0
  723. package/dist/interactions/actions/defaults/undoRedo.js +51 -0
  724. package/dist/interactions/actions/defaults/undoRedo.js.map +1 -0
  725. package/dist/interactions/actions/defaults/viewportDragPan.js +88 -0
  726. package/dist/interactions/actions/defaults/viewportDragPan.js.map +1 -0
  727. package/dist/interactions/actions/defaults/viewportWheelPan.js +57 -0
  728. package/dist/interactions/actions/defaults/viewportWheelPan.js.map +1 -0
  729. package/dist/interactions/actions/defaults/viewportZoom.js +143 -0
  730. package/dist/interactions/actions/defaults/viewportZoom.js.map +1 -0
  731. package/dist/interactions/actions/distribute/distribute.js +42 -0
  732. package/dist/interactions/actions/distribute/distribute.js.map +1 -0
  733. package/dist/interactions/actions/distribute/plan.js +29 -0
  734. package/dist/interactions/actions/distribute/plan.js.map +1 -0
  735. package/dist/interactions/actions/edit-anchors/geometry.js +61 -0
  736. package/dist/interactions/actions/edit-anchors/geometry.js.map +1 -0
  737. package/dist/interactions/actions/edit-anchors/handles.js +43 -0
  738. package/dist/interactions/actions/edit-anchors/handles.js.map +1 -0
  739. package/dist/interactions/actions/flip/helpers.js +35 -0
  740. package/dist/interactions/actions/flip/helpers.js.map +1 -0
  741. package/dist/interactions/actions/geometryProjection.js +18 -0
  742. package/dist/interactions/actions/geometryProjection.js.map +1 -0
  743. package/dist/interactions/actions/gestureLifecycle.js +44 -0
  744. package/dist/interactions/actions/gestureLifecycle.js.map +1 -0
  745. package/dist/interactions/actions/lasso-select/behaviors/selectFromLasso.js +39 -0
  746. package/dist/interactions/actions/lasso-select/behaviors/selectFromLasso.js.map +1 -0
  747. package/dist/interactions/actions/move/behaviors/snapBackOrDelete.js +36 -0
  748. package/dist/interactions/actions/move/behaviors/snapBackOrDelete.js.map +1 -0
  749. package/dist/interactions/actions/move/behaviors/snapToContainer.js +67 -0
  750. package/dist/interactions/actions/move/behaviors/snapToContainer.js.map +1 -0
  751. package/dist/interactions/actions/move/gestureAdapter.js +37 -0
  752. package/dist/interactions/actions/move/gestureAdapter.js.map +1 -0
  753. package/dist/interactions/actions/outlines/createOutlines.js +84 -0
  754. package/dist/interactions/actions/outlines/createOutlines.js.map +1 -0
  755. package/dist/interactions/actions/outlines/useCreateOutlinesAdapter.js +9 -0
  756. package/dist/interactions/actions/outlines/useCreateOutlinesAdapter.js.map +1 -0
  757. package/dist/interactions/actions/planeInput.js +168 -0
  758. package/dist/interactions/actions/planeInput.js.map +1 -0
  759. package/dist/interactions/actions/poseDescriptorDep.js +9 -0
  760. package/dist/interactions/actions/poseDescriptorDep.js.map +1 -0
  761. package/dist/interactions/actions/poseFrame.js +38 -0
  762. package/dist/interactions/actions/poseFrame.js.map +1 -0
  763. package/dist/interactions/actions/previewOverrides.js +25 -0
  764. package/dist/interactions/actions/previewOverrides.js.map +1 -0
  765. package/dist/interactions/actions/resize/autoPoseDescriptor.js +32 -0
  766. package/dist/interactions/actions/resize/autoPoseDescriptor.js.map +1 -0
  767. package/dist/interactions/actions/resize/behaviors/clampMinSize.js +18 -0
  768. package/dist/interactions/actions/resize/behaviors/clampMinSize.js.map +1 -0
  769. package/dist/interactions/actions/resize/behaviors/index.js +8 -0
  770. package/dist/interactions/actions/resize/behaviors/index.js.map +1 -0
  771. package/dist/interactions/actions/resize/behaviors/lockAspect.js +24 -0
  772. package/dist/interactions/actions/resize/behaviors/lockAspect.js.map +1 -0
  773. package/dist/interactions/actions/resize/cornerHandles.js +72 -0
  774. package/dist/interactions/actions/resize/cornerHandles.js.map +1 -0
  775. package/dist/interactions/actions/resolveOverlays.js +60 -0
  776. package/dist/interactions/actions/resolveOverlays.js.map +1 -0
  777. package/dist/interactions/actions/resolvePreviews.js +61 -0
  778. package/dist/interactions/actions/resolvePreviews.js.map +1 -0
  779. package/dist/interactions/actions/rotate/geometry.js +46 -0
  780. package/dist/interactions/actions/rotate/geometry.js.map +1 -0
  781. package/dist/interactions/actions/rotate/handle.js +27 -0
  782. package/dist/interactions/actions/rotate/handle.js.map +1 -0
  783. package/dist/interactions/actions/spatialReference.js +42 -0
  784. package/dist/interactions/actions/spatialReference.js.map +1 -0
  785. package/dist/interactions/actions/useStandardActions.js +142 -0
  786. package/dist/interactions/actions/useStandardActions.js.map +1 -0
  787. package/dist/interactions/gestures/dragGesture/dragGesture.js +111 -0
  788. package/dist/interactions/gestures/dragGesture/dragGesture.js.map +1 -0
  789. package/dist/interactions/gestures/dragRadial/dragRadial.js +117 -0
  790. package/dist/interactions/gestures/dragRadial/dragRadial.js.map +1 -0
  791. package/dist/interactions/gestures/dragRect/dragRect.js +164 -0
  792. package/dist/interactions/gestures/dragRect/dragRect.js.map +1 -0
  793. package/dist/interactions/gestures/handleDrag/handleDrag.js +46 -0
  794. package/dist/interactions/gestures/handleDrag/handleDrag.js.map +1 -0
  795. package/dist/interactions/gestures/pointerDrag/pointerDrag.js +118 -0
  796. package/dist/interactions/gestures/pointerDrag/pointerDrag.js.map +1 -0
  797. package/dist/interactions/gestures/shared/originProjection.js +42 -0
  798. package/dist/interactions/gestures/shared/originProjection.js.map +1 -0
  799. package/dist/interactions/gestures/shared/screenTolerance.js +21 -0
  800. package/dist/interactions/gestures/shared/screenTolerance.js.map +1 -0
  801. package/dist/interactions/gestures/shared/snap.js +24 -0
  802. package/dist/interactions/gestures/shared/snap.js.map +1 -0
  803. package/dist/interactions/gestures/thresholdDrag/thresholdDrag.js +30 -0
  804. package/dist/interactions/gestures/thresholdDrag/thresholdDrag.js.map +1 -0
  805. package/dist/layout/arrivals.js +36 -0
  806. package/dist/layout/arrivals.js.map +1 -0
  807. package/dist/{math-MCQcf_gc.d.ts → math-CUMxmZzn.d.ts} +8 -116
  808. package/dist/math.d.ts +4 -5
  809. package/dist/math.js +6 -4
  810. package/dist/mesh.d.ts +268 -0
  811. package/dist/mesh.js +7 -0
  812. package/dist/move.d.ts +7 -49
  813. package/dist/move.js +3 -142
  814. package/dist/originProjection-BSn4xiEy.d.ts +57 -0
  815. package/dist/patterns-builtin.js +3 -3
  816. package/dist/{poseDescriptor-rZa9W5hJ.d.ts → poseDescriptor-CjSXMf8X.d.ts} +3 -3
  817. package/dist/registerProgram-ateHDGjw.d.ts +193 -0
  818. package/dist/renderer/DrawCommand.js +6 -0
  819. package/dist/renderer/DrawCommand.js.map +1 -0
  820. package/dist/renderer/WeaselRenderer.js +328 -0
  821. package/dist/renderer/WeaselRenderer.js.map +1 -0
  822. package/dist/renderer/cache/GLImageCache.js +64 -0
  823. package/dist/renderer/cache/GLImageCache.js.map +1 -0
  824. package/dist/renderer/cache/GLMeshCache.js +102 -0
  825. package/dist/renderer/cache/GLMeshCache.js.map +1 -0
  826. package/dist/renderer/cache/GLTextureCache.js +51 -0
  827. package/dist/renderer/cache/GLTextureCache.js.map +1 -0
  828. package/dist/renderer/cache/GradientRampAtlas.js +82 -0
  829. package/dist/renderer/cache/GradientRampAtlas.js.map +1 -0
  830. package/dist/renderer/cache/cache.js +13 -0
  831. package/dist/renderer/cache/cache.js.map +1 -0
  832. package/dist/renderer/cache/markerCommandCache.js +59 -0
  833. package/dist/renderer/cache/markerCommandCache.js.map +1 -0
  834. package/dist/renderer/cache/outlineMeshCache.js +15 -0
  835. package/dist/renderer/cache/outlineMeshCache.js.map +1 -0
  836. package/dist/renderer/cache/outlineStrokeMeshCache.js +31 -0
  837. package/dist/renderer/cache/outlineStrokeMeshCache.js.map +1 -0
  838. package/dist/renderer/cache/strokeMeshCache.js +44 -0
  839. package/dist/renderer/cache/strokeMeshCache.js.map +1 -0
  840. package/dist/renderer/cullDrawCommands.js +89 -0
  841. package/dist/renderer/cullDrawCommands.js.map +1 -0
  842. package/dist/renderer/draw.js +1109 -0
  843. package/dist/renderer/draw.js.map +1 -0
  844. package/dist/renderer/drawBatch.js +168 -0
  845. package/dist/renderer/drawBatch.js.map +1 -0
  846. package/dist/renderer/effects/EffectTargets.js +45 -0
  847. package/dist/renderer/effects/EffectTargets.js.map +1 -0
  848. package/dist/renderer/effects/builtins.js +31 -0
  849. package/dist/renderer/effects/builtins.js.map +1 -0
  850. package/dist/renderer/effects/composite.js +9 -0
  851. package/dist/renderer/effects/composite.js.map +1 -0
  852. package/dist/renderer/effects/effectPrelude.js +10 -0
  853. package/dist/renderer/effects/effectPrelude.js.map +1 -0
  854. package/dist/renderer/effects/types.js +10 -0
  855. package/dist/renderer/effects/types.js.map +1 -0
  856. package/dist/renderer/index.js +19 -0
  857. package/dist/renderer/math/color.js +341 -0
  858. package/dist/renderer/math/color.js.map +1 -0
  859. package/dist/renderer/math/mat3.js +71 -0
  860. package/dist/renderer/math/mat3.js.map +1 -0
  861. package/dist/renderer/math/patternSpace.js +22 -0
  862. package/dist/renderer/math/patternSpace.js.map +1 -0
  863. package/dist/renderer/math/viewToMat3.js +19 -0
  864. package/dist/renderer/math/viewToMat3.js.map +1 -0
  865. package/dist/renderer/paintResources.js +18 -0
  866. package/dist/renderer/paintResources.js.map +1 -0
  867. package/dist/renderer/paintScratch.js +37 -0
  868. package/dist/renderer/paintScratch.js.map +1 -0
  869. package/dist/renderer/shaders/ShaderProgram.js +74 -0
  870. package/dist/renderer/shaders/ShaderProgram.js.map +1 -0
  871. package/dist/renderer/shaders/batchFill.js +118 -0
  872. package/dist/renderer/shaders/batchFill.js.map +1 -0
  873. package/dist/renderer/shaders/customPrelude.js +34 -0
  874. package/dist/renderer/shaders/customPrelude.js.map +1 -0
  875. package/dist/renderer/shaders/extractUniformNames.js +184 -0
  876. package/dist/renderer/shaders/extractUniformNames.js.map +1 -0
  877. package/dist/renderer/shaders/glyphPaint.js +61 -0
  878. package/dist/renderer/shaders/glyphPaint.js.map +1 -0
  879. package/dist/renderer/shaders/gradFill.js +30 -0
  880. package/dist/renderer/shaders/gradFill.js.map +1 -0
  881. package/dist/renderer/shaders/imageFill.js +14 -0
  882. package/dist/renderer/shaders/imageFill.js.map +1 -0
  883. package/dist/renderer/shaders/pathFill.js +13 -0
  884. package/dist/renderer/shaders/pathFill.js.map +1 -0
  885. package/dist/renderer/shaders/patternFill.js +24 -0
  886. package/dist/renderer/shaders/patternFill.js.map +1 -0
  887. package/dist/renderer/shaders/registerProgram.js +18 -0
  888. package/dist/renderer/shaders/registerProgram.js.map +1 -0
  889. package/dist/renderer/spriteSheet.js +14 -0
  890. package/dist/renderer/spriteSheet.js.map +1 -0
  891. package/dist/renderer/state/GroupState.js +77 -0
  892. package/dist/renderer/state/GroupState.js.map +1 -0
  893. package/dist/renderer/syntheticItalic.js +6 -0
  894. package/dist/renderer/syntheticItalic.js.map +1 -0
  895. package/dist/renderer/textures/registerTexture.js +14 -0
  896. package/dist/renderer/textures/registerTexture.js.map +1 -0
  897. package/dist/renderer.d.ts +11 -21
  898. package/dist/renderer.js +18 -13
  899. package/dist/resize.d.ts +10 -46
  900. package/dist/resize.js +7 -5
  901. package/dist/routing.js +2 -3
  902. package/dist/scheduling/useVisibleRaf.js +69 -0
  903. package/dist/scheduling/useVisibleRaf.js.map +1 -0
  904. package/dist/test-hook/createTestHook.js +39 -0
  905. package/dist/test-hook/createTestHook.js.map +1 -0
  906. package/dist/test-hook/install.js +12 -0
  907. package/dist/test-hook/install.js.map +1 -0
  908. package/dist/test-seams-fYf6m5pu.d.ts +356 -0
  909. package/dist/test-seams.d.ts +6 -0
  910. package/dist/test-seams.js +3 -0
  911. package/dist/tools/builtin/ellipse/useEllipseTool.js +33 -0
  912. package/dist/tools/builtin/ellipse/useEllipseTool.js.map +1 -0
  913. package/dist/tools/builtin/eyedropper/useEyedropperTool.js +55 -0
  914. package/dist/tools/builtin/eyedropper/useEyedropperTool.js.map +1 -0
  915. package/dist/tools/builtin/hand/dragPanContribution.js +17 -0
  916. package/dist/tools/builtin/hand/dragPanContribution.js.map +1 -0
  917. package/dist/tools/builtin/hand/useHandTool.js +31 -0
  918. package/dist/tools/builtin/hand/useHandTool.js.map +1 -0
  919. package/dist/tools/builtin/image/useImageTool.js +41 -0
  920. package/dist/tools/builtin/image/useImageTool.js.map +1 -0
  921. package/dist/tools/builtin/lasso/useLassoTool.js +42 -0
  922. package/dist/tools/builtin/lasso/useLassoTool.js.map +1 -0
  923. package/dist/tools/builtin/line/useLineTool.js +33 -0
  924. package/dist/tools/builtin/line/useLineTool.js.map +1 -0
  925. package/dist/tools/builtin/pen/usePenTool.js +414 -0
  926. package/dist/tools/builtin/pen/usePenTool.js.map +1 -0
  927. package/dist/tools/builtin/pencil/usePencilTool.js +36 -0
  928. package/dist/tools/builtin/pencil/usePencilTool.js.map +1 -0
  929. package/dist/tools/builtin/pickTopMostHit.js +45 -0
  930. package/dist/tools/builtin/pickTopMostHit.js.map +1 -0
  931. package/dist/tools/builtin/polygon/usePolygonTool.js +81 -0
  932. package/dist/tools/builtin/polygon/usePolygonTool.js.map +1 -0
  933. package/dist/tools/builtin/rect/useRectTool.js +32 -0
  934. package/dist/tools/builtin/rect/useRectTool.js.map +1 -0
  935. package/dist/tools/builtin/select/selectionContributions.js +109 -0
  936. package/dist/tools/builtin/select/selectionContributions.js.map +1 -0
  937. package/dist/tools/builtin/select/useSelectTool.js +162 -0
  938. package/dist/tools/builtin/select/useSelectTool.js.map +1 -0
  939. package/dist/tools/builtin/shared/insertToolOptions.js +8 -0
  940. package/dist/tools/builtin/shared/insertToolOptions.js.map +1 -0
  941. package/dist/tools/builtin/slice/useSliceTool.js +263 -0
  942. package/dist/tools/builtin/slice/useSliceTool.js.map +1 -0
  943. package/dist/tools/builtin/star/useStarTool.js +82 -0
  944. package/dist/tools/builtin/star/useStarTool.js.map +1 -0
  945. package/dist/tools/builtin/text/useTextTool.js +177 -0
  946. package/dist/tools/builtin/text/useTextTool.js.map +1 -0
  947. package/dist/tools/overlayBinding.js +8 -0
  948. package/dist/tools/overlayBinding.js.map +1 -0
  949. package/dist/tools/prefs.js +47 -0
  950. package/dist/tools/prefs.js.map +1 -0
  951. package/dist/tools/useKeybindings.js +66 -0
  952. package/dist/tools/useKeybindings.js.map +1 -0
  953. package/dist/{types-D-9QWBy5.d.ts → types-CA54-mAZ.d.ts} +181 -13
  954. package/dist/{types-qYpyTAiZ.d.ts → types-DSjd6W3n.d.ts} +32 -6
  955. package/dist/util/color.js +26 -0
  956. package/dist/util/color.js.map +1 -0
  957. package/dist/util/constrainTo45.js +17 -0
  958. package/dist/util/constrainTo45.js.map +1 -0
  959. package/dist/util/paint.js +72 -0
  960. package/dist/util/paint.js.map +1 -0
  961. package/dist/version.js +6 -0
  962. package/dist/version.js.map +1 -0
  963. package/package.json +29 -19
  964. package/dist/chunk-3TY6FHAF.js +0 -170
  965. package/dist/chunk-3TY6FHAF.js.map +0 -1
  966. package/dist/chunk-DGWNNKGD.js +0 -248
  967. package/dist/chunk-DGWNNKGD.js.map +0 -1
  968. package/dist/chunk-G4ZGQMY7.js +0 -33372
  969. package/dist/chunk-G4ZGQMY7.js.map +0 -1
  970. package/dist/chunk-L5YNZYEG.js +0 -648
  971. package/dist/chunk-L5YNZYEG.js.map +0 -1
  972. package/dist/chunk-LU4IJ52W.js +0 -111
  973. package/dist/chunk-LU4IJ52W.js.map +0 -1
  974. package/dist/chunk-M24CLARN.js +0 -28
  975. package/dist/chunk-M24CLARN.js.map +0 -1
  976. package/dist/chunk-NE27EOLP.js +0 -146
  977. package/dist/chunk-NE27EOLP.js.map +0 -1
  978. package/dist/chunk-PNNZSYRD.js +0 -318
  979. package/dist/chunk-PNNZSYRD.js.map +0 -1
  980. package/dist/chunk-UPZY4ART.js +0 -29
  981. package/dist/chunk-UPZY4ART.js.map +0 -1
  982. package/dist/chunk-WPNA6L5O.js +0 -250
  983. package/dist/chunk-WPNA6L5O.js.map +0 -1
  984. package/dist/chunk-XMAWPGTK.js +0 -128
  985. package/dist/chunk-XMAWPGTK.js.map +0 -1
  986. package/dist/clipboard.js.map +0 -1
  987. package/dist/clone.js.map +0 -1
  988. package/dist/grid-CY5UKlZh.d.ts +0 -98
  989. package/dist/index.css.map +0 -1
  990. package/dist/index.js.map +0 -1
  991. package/dist/insert.d.ts +0 -36
  992. package/dist/insert.js +0 -81
  993. package/dist/insert.js.map +0 -1
  994. package/dist/math.js.map +0 -1
  995. package/dist/move.js.map +0 -1
  996. package/dist/path-JEV2c5If.d.ts +0 -48
  997. package/dist/patterns-builtin.js.map +0 -1
  998. package/dist/renderer.css +0 -62
  999. package/dist/renderer.css.map +0 -1
  1000. package/dist/renderer.js.map +0 -1
  1001. package/dist/resize.js.map +0 -1
  1002. package/dist/routing.js.map +0 -1
  1003. package/dist/types-D2tTKEU0.d.ts +0 -18
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaultNodeProperties.js","names":["rotationDegreesUnit","prefUnit","ANGLE_RADIANS","strokeWidthOf","w","stroke","strokeDashEncoding","strokeDashStyleOf","dash","style","dashForStrokeStyle","markerEncoding","ref","value","italicEncoding","stored","on","alignEncoding","direction","resolveAlign","edge","markerOptions","listMarkers","m","shapeSchema","opts","defaultNodeProperties","KIT_SHAPE_KINDS","name","inferredNodeProperties","inferredNodeRouting"],"sources":["../../../src/canvas/SceneCanvas/defaultNodeProperties.ts"],"sourcesContent":["import { inferredNodeRouting } from './defaultNodeRouting';\nimport { KIT_SHAPE_KINDS } from 'core/shapeKinds';\nimport { listMarkers } from 'core/strokeMarkers';\nimport { dashForStrokeStyle, strokeDashStyleOf } from '@weasel-js/paint';\nimport { resolveAlign, type TextAlign } from '@weasel-js/text';\nimport type { NodePropertiesEntry } from 'core/scene/NodeProperties';\nimport { ANGLE_RADIANS } from '@weasel-js/quantity';\nimport { prefUnit, type ToolPrefBooleanEncoding, type ToolPrefEnumEncoding, type ToolPrefGroup, type ToolPrefNumberUnit } from 'tools/prefs';\n\n/** Radians-stored / degrees-shown conversion for `pose.rotation` leaves.\n * Display rounds to 0.1° so a canonical radian value doesn't render as\n * a 15-digit float. */\nexport const rotationDegreesUnit: ToolPrefNumberUnit = prefUnit(ANGLE_RADIANS, 'deg', {\n precision: 1,\n suffix: '°',\n});\n\n/** `Stroke.width` off a partly-typed stroke object, or `undefined`. */\nfunction strokeWidthOf(stroke: Record<string, unknown> | undefined): number | { px: number } | undefined {\n const w = stroke?.width;\n if (typeof w === 'number') return w;\n if (typeof w === 'object' && w !== null && typeof (w as { px?: unknown }).px === 'number') {\n return w as { px: number };\n }\n return undefined;\n}\n\n/** `Stroke.dash` — a stored array of lengths — read and written as a named\n * style. The presets are multiples of the sibling `width`, which is why the\n * encoding is handed the whole stroke rather than the field. */\nconst strokeDashEncoding: ToolPrefEnumEncoding = {\n read: (dash, stroke) =>\n stroke === undefined\n ? undefined\n : strokeDashStyleOf(Array.isArray(dash) ? (dash as number[]) : undefined, strokeWidthOf(stroke)),\n write: (style, stroke) =>\n style === 'dashed' || style === 'dotted'\n ? dashForStrokeStyle(style, strokeWidthOf(stroke))\n // `solid` is stored as no dash at all. `custom` is reportable, not\n // authorable: it names an imported array, and the array it names is the\n // one already stored.\n : style === 'solid'\n ? undefined\n : stroke?.dash,\n};\n\n/** `Stroke.markerStart` / `markerMid` / `markerEnd` — a `MarkerRef` — read and\n * written as a bare key, with the empty string standing for no marker. */\nconst markerEncoding: ToolPrefEnumEncoding = {\n read: (ref) => {\n if (typeof ref === 'string') return ref;\n if (ref && typeof ref === 'object' && 'key' in ref) return String((ref as { key: string }).key);\n return '';\n },\n write: (value) => (value === '' ? undefined : value),\n};\n\n/** `TextStyle.fontStyle` as an Italic flag. Off removes the field rather than\n * storing `'normal'`, which is what an absent one already means. */\nconst italicEncoding: ToolPrefBooleanEncoding = {\n read: (stored) => stored === 'italic',\n write: (on) => (on ? 'italic' : undefined),\n};\n\n/** `TextStyle.align` read as the edge that paints, or as `justify`. The model\n * also holds the reading-order pair `start` / `end`, which the segments would\n * otherwise leave unlit; they read through `direction`, and a click writes the\n * edge. */\nconst alignEncoding: ToolPrefEnumEncoding = {\n read: (stored, style) => {\n if (stored === undefined || stored === 'justify') return stored;\n const direction = style?.direction === 'rtl' ? 'rtl' : 'ltr';\n return resolveAlign(stored as TextAlign, direction);\n },\n write: (edge) => edge,\n};\n\n/** Options come from the registry, so a consumer's registered entry appears in\n * the picker with no kit edit. A `select` rather than a `toggle`: nine options\n * will not fit a segmented strip. */\nconst markerOptions = () => [\n { value: '', label: 'None' },\n ...listMarkers().map((m) => ({ value: m.id, label: m.id })),\n];\n\n/** Build the standard shape schema — Layout (pose box + rotation) +\n * Appearance (fill / stroke), optionally a Text group. Matches the kit's\n * builtin-shape data template (`{ path, fill, stroke?, text? }`,\n * `useBuiltinShapeTools`). */\nfunction shapeSchema(opts: { text?: boolean } = {}): ToolPrefGroup {\n return {\n name: 'Properties',\n children: {\n layout: {\n name: 'Layout',\n children: {\n 'pose.x': { kind: 'number', name: 'X', description: 'Left edge, world units.', default: 0, pair: 'Position' },\n 'pose.y': { kind: 'number', name: 'Y', description: 'Top edge, world units.', default: 0, pair: 'Position' },\n 'pose.width': { kind: 'number', name: 'W', description: 'Width, world units.', default: 0, min: 0, pair: 'Size' },\n 'pose.height': { kind: 'number', name: 'H', description: 'Height, world units.', default: 0, min: 0, pair: 'Size' },\n 'pose.rotation': { kind: 'number', name: 'Rotation', description: 'Rotation about the box center.', default: 0, step: 1, unit: rotationDegreesUnit },\n },\n },\n // What the node *is* outranks how it is painted: a text node's copy is\n // the first thing an editor reaches for.\n ...(opts.text\n ? {\n content: {\n name: 'Content',\n children: {\n // `block`: the content is the section, so a 64px label column\n // reading \"Text\" inside a section reading \"Text\" is one word\n // twice and a narrower field for the sake of it.\n 'data.text': { kind: 'string', name: 'Text', description: 'Text content.', default: '', block: true },\n },\n },\n }\n : {}),\n appearance: {\n // Headless: `Fill` and `Stroke` head their own blocks, and an\n // `Appearance` rule over them names neither of the two paints a\n // reader is looking at.\n name: '',\n children: {\n // A `paint` leaf, not a `color` one: `data.fill` is the tagged\n // `FillStyle` union, so a color control pointed at it would read\n // `undefined` off a gradient and write a bare string over it.\n // `block` for the same reason every stroke field is: the kind bar\n // and the per-kind editor want the width a 64px label column takes.\n 'data.fill': { kind: 'paint', name: 'Fill', description: 'Fill paint.', default: { fill: 'solid', color: '#000000ff' }, alpha: true, block: true },\n // An object leaf: `data.stroke` is a whole `Stroke`, and its fields\n // belong to one value. Sibling leaves addressing into it would each\n // write one field of a value they can only half see.\n 'data.stroke': {\n kind: 'object',\n name: 'Stroke',\n description: 'Stroke paint and line geometry.',\n default: { paint: { fill: 'solid', color: '#000000ff' }, width: 1 },\n block: true,\n children: {\n // Every row is `block`: under a heading already reading STROKE,\n // a 64px label column spells the section name again and takes\n // the width the controls need. Each field leads with its own\n // glyph instead.\n // Unpaired: the paint field is a whole paint editor — a kind bar\n // over a per-kind body — and cannot share a row with a slider.\n width: { kind: 'number', name: 'Width', description: 'Stroke width, world units.', default: 1, min: 0, max: 20, step: 0.5, control: 'slider', icon: 'strokeWidth', block: true },\n paint: { kind: 'paint', name: 'Paint', description: 'Stroke paint.', default: { fill: 'solid', color: '#000000ff' }, alpha: true, block: true },\n // Three options each: a segmented control shows every one at\n // once where a select shows the current one and hides the rest\n // behind a click.\n cap: { kind: 'enum', name: 'Cap', description: 'How an open end is drawn.', default: 'butt', control: 'toggle', block: true, pair: 'Line', options: [{ value: 'butt', label: 'Butt', icon: 'capButt' }, { value: 'round', label: 'Round', icon: 'capRound' }, { value: 'square', label: 'Square', icon: 'capSquare' }] },\n join: { kind: 'enum', name: 'Join', description: 'How a corner is drawn.', default: 'miter', control: 'toggle', block: true, pair: 'Line', options: [{ value: 'miter', label: 'Miter', icon: 'joinMiter' }, { value: 'round', label: 'Round', icon: 'joinRound' }, { value: 'bevel', label: 'Bevel', icon: 'joinBevel' }] },\n align: { kind: 'enum', name: 'Align', description: 'Where the ribbon sits relative to the edge.', default: 'center', control: 'toggle', block: true, pair: 'Line', options: [{ value: 'inner', label: 'Inner', icon: 'alignInner' }, { value: 'center', label: 'Center', icon: 'alignCenter' }, { value: 'outer', label: 'Outer', icon: 'alignOuter' }] },\n // Its own row: three bars already fill the one above, and the\n // dash pattern is a property of the line rather than of how the\n // ribbon meets the geometry.\n dash: { kind: 'enum', name: 'Style', description: 'Solid, dashed or dotted. Dash lengths are multiples of the stroke width, so a style holds as the width changes.', default: 'solid', control: 'toggle', block: true, encoding: strokeDashEncoding, options: [{ value: 'solid', label: 'Solid', icon: 'dashSolid' }, { value: 'dashed', label: 'Dashed', icon: 'dashDashed' }, { value: 'dotted', label: 'Dotted', icon: 'dashDotted' }, { value: 'custom', label: 'Custom', icon: 'dashCustom', disabled: true }] },\n markerStart: { kind: 'enum', name: 'Start', description: 'Marker at the first vertex of each open subpath.', default: '', control: 'select', block: true, pair: 'Markers', encoding: markerEncoding, options: markerOptions() },\n markerMid: { kind: 'enum', name: 'Mid', description: 'Marker at every interior authored vertex.', default: '', control: 'select', block: true, pair: 'Markers', encoding: markerEncoding, options: markerOptions() },\n markerEnd: { kind: 'enum', name: 'End', description: 'Marker at the last vertex of each open subpath.', default: '', control: 'select', block: true, pair: 'Markers', encoding: markerEncoding, options: markerOptions() },\n },\n },\n },\n },\n ...(opts.text\n ? {\n text: {\n // Headless: `Character` and `Paragraph` carry the labels, and a\n // `Typography` heading over them names nothing a reader can't\n // already see.\n name: '',\n children: {\n // One object leaf, not a row of siblings addressing into it:\n // `data.style` is a `TextStyle`, and its character and\n // paragraph fields are one value that reads as two lists.\n // The groups head those lists and contribute nothing to the\n // path — a field inside one is still a field of the style.\n 'data.style': {\n kind: 'object',\n name: 'Style',\n description: 'Typography for the whole node. Its color is the node\\'s own `data.fill`, in Appearance.',\n default: {},\n block: true,\n children: {\n character: {\n name: 'Character',\n children: {\n fontFamily: { kind: 'font-family', name: 'Font', description: 'Registered font family.', default: 'sans-serif' },\n fontSize: { kind: 'number', name: 'Size', description: 'Font size, world units.', default: 16, min: 1, step: 1, pair: 'Size / weight' },\n fontWeight: { kind: 'font-weight', name: 'Weight', description: 'Font weight, from the faces the family has.', default: 400, pair: 'Size / weight' },\n // One row of segments, the strip every text editor\n // draws: the slant, the three rules, then the two\n // scripts. Italic is a flag here although the field\n // is `fontStyle`, whose only other value is upright.\n fontStyle: { kind: 'boolean', name: 'Italic', description: 'Set the text in its italic face.', default: false, control: 'toggle', icon: 'italic', short: 'I', pair: 'Style', encoding: italicEncoding },\n underline: { kind: 'boolean', name: 'Underline', description: 'Underline the text.', default: false, control: 'toggle', icon: 'underline', short: 'U', pair: 'Style' },\n strikethrough: { kind: 'boolean', name: 'Strikethrough', description: 'Strike through the text.', default: false, control: 'toggle', icon: 'strikethrough', short: 'S', pair: 'Style' },\n overline: { kind: 'boolean', name: 'Overline', description: 'Rule the text above its ascent.', default: false, control: 'toggle', icon: 'overline', short: 'O', pair: 'Style' },\n script: { kind: 'enum', name: 'Script', description: 'Set the text smaller and raised or lowered, on the line it would otherwise hold.', default: undefined, control: 'toggle', clearable: true, pair: 'Style', options: [{ value: 'super', label: 'Superscript', icon: 'superscript' }, { value: 'sub', label: 'Subscript', icon: 'subscript' }] },\n letterSpacing: { kind: 'number', name: 'Tracking', description: 'Extra advance per glyph, world units.', default: 0, step: 0.1 },\n textTransform: { kind: 'enum', name: 'Case', description: 'Draw the text in capitals, lowercase or title case. The text itself is unchanged.', default: 'none', control: 'toggle', options: [{ value: 'none', label: 'None', short: '–' }, { value: 'uppercase', label: 'Uppercase', short: 'AA' }, { value: 'lowercase', label: 'Lowercase', short: 'aa' }, { value: 'capitalize', label: 'Capitalize', short: 'Aa' }] },\n fontVariantCaps: { kind: 'enum', name: 'Small caps', description: 'Draw lowercase letters as smaller capitals. The text itself is unchanged.', default: 'normal', control: 'toggle', options: [{ value: 'normal', label: 'Normal', short: '–' }, { value: 'small-caps', label: 'Small caps', short: 'Sc' }] },\n },\n },\n paragraph: {\n name: 'Paragraph',\n children: {\n lineHeight: { kind: 'number', name: 'Leading', description: 'Line height as a multiple of font size.', default: 1.2, min: 0.5, step: 0.1 },\n wrap: { kind: 'boolean', name: 'Wrap', description: 'Break lines between words at the box width.', default: false, control: 'switch' },\n direction: { kind: 'enum', name: 'Direction', description: 'Reading direction.', default: 'ltr', control: 'toggle', options: [{ value: 'ltr', label: 'Left to right', short: 'LTR' }, { value: 'rtl', label: 'Right to left', short: 'RTL' }] },\n // Last, so the box's vertical alignment — a field of\n // the node rather than of its style — follows it.\n align: { kind: 'enum', name: 'Align', description: 'Horizontal alignment.', default: 'left', control: 'toggle', encoding: alignEncoding, options: [{ value: 'left', label: 'Left', icon: 'textAlignLeft' }, { value: 'center', label: 'Center', icon: 'textAlignCenter' }, { value: 'right', label: 'Right', icon: 'textAlignRight' }, { value: 'justify', label: 'Justify', icon: 'textAlignJustify' }] },\n },\n },\n },\n },\n 'data.verticalAlign': { kind: 'enum', name: 'Vertical', description: 'Where the lines sit in the box\\'s height.', default: 'top', control: 'toggle', options: [{ value: 'top', label: 'Top', icon: 'textAlignTop' }, { value: 'center', label: 'Middle', icon: 'textAlignMiddle' }, { value: 'bottom', label: 'Bottom', icon: 'textAlignBottom' }] },\n },\n },\n }\n : {}),\n },\n };\n}\n\n/**\n * Default properties-trait entries covering the kit's built-in shape\n * kinds (`KIT_SHAPE_KINDS`) — the sibling of `defaultNodeRouting`. Every\n * kind gets the standard box schema; `text` adds a Text group. In\n * lockstep with `KIT_SHAPE_KINDS` by construction (derived via `.map`).\n */\nexport const defaultNodeProperties: readonly NodePropertiesEntry[] =\n KIT_SHAPE_KINDS.map((name) => ({\n name,\n schema: shapeSchema({ text: name === 'text' }),\n }));\n\n/**\n * Properties-trait entries for the *inferred* routing kinds\n * (`inferredNodeRouting`: `text` / `path` / `image`) — the vocabulary\n * consumers produce when they don't tag `data.kind` (e.g. WeaselDraw).\n * In lockstep with `inferredNodeRouting` by construction.\n */\nexport const inferredNodeProperties: readonly NodePropertiesEntry[] =\n inferredNodeRouting.map((e) => ({\n name: e.name,\n schema: shapeSchema({ text: e.name === 'text' }),\n }));\n"],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { KIT_SHAPE_KINDS as e } from "../../core/shapeKinds.js";
2
+ //#region src/canvas/SceneCanvas/defaultNodeRouting.ts
3
+ function t(e) {
4
+ return typeof e == "object" && !!e;
5
+ }
6
+ var n = e.map((e) => ({
7
+ name: e,
8
+ matches: (n) => t(n) && n.kind === e
9
+ })), r = [
10
+ {
11
+ name: "text",
12
+ matches: (e) => t(e) && typeof e.text == "string"
13
+ },
14
+ {
15
+ name: "path",
16
+ matches: (e) => t(e) && e.path != null
17
+ },
18
+ {
19
+ name: "image",
20
+ matches: (e) => t(e) && e.image != null
21
+ }
22
+ ];
23
+ //#endregion
24
+ export { n as defaultNodeRouting, r as inferredNodeRouting };
25
+
26
+ //# sourceMappingURL=defaultNodeRouting.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaultNodeRouting.js","names":["isObj","d","defaultNodeRouting","KIT_SHAPE_KINDS","data","name","inferredNodeRouting"],"sources":["../../../src/canvas/SceneCanvas/defaultNodeRouting.ts"],"sourcesContent":["import { KIT_SHAPE_KINDS } from 'core/shapeKinds';\nimport type { NodeRoutingEntry } from 'core/scene/NodeRouting';\n\nfunction isObj(d: unknown): d is Record<string, unknown> {\n return typeof d === 'object' && d !== null;\n}\n\n/**\n * Default routing-trait classifiers covering the kit's built-in shape\n * tools (`KIT_SHAPE_KINDS`). Each entry matches `data.kind === '<name>'`\n * — the convention demos use when they explicitly tag scene data with a\n * routing-kind string. The routing trait's default values happen to\n * mirror the shape trait's by name; the two traits remain independent\n * — a consumer can register routing kinds that have no matching shape\n * painter (e.g. `'group'`, `'sticky-note'`).\n *\n * Lives in the canvas layer (next to the builtin shape tools it mirrors)\n * rather than `core/scene`: the generic routing machinery (`NodeRouting`)\n * is core, but this default *population* depends on the canvas-layer\n * `KIT_SHAPE_KINDS`, so `core` must not own it.\n *\n * Consumers using the kit's standard data shape spread\n * `defaultNodeRouting` into their `<SceneCanvas routing={...}>` prop;\n * consumers whose data carries no `kind` field but follows the kit's\n * common shapes (`{ path }`, `{ text }`, `{ image }`) should prefer\n * `inferredNodeRouting` below, which SceneCanvas applies automatically\n * when `routing` is unset.\n *\n * In lockstep with `KIT_SHAPE_KINDS` by construction (derived via `.map`).\n */\nexport const defaultNodeRouting: readonly NodeRoutingEntry[] = KIT_SHAPE_KINDS.map(\n (name) => ({\n name,\n matches: (data) =>\n isObj(data) &&\n (data as { kind?: unknown }).kind === name,\n }),\n);\n\n/**\n * Shape-inferred routing-trait classifiers used when a consumer doesn't\n * pass `routing` to `<SceneCanvas>`. Produces semantic kinds based on\n * data-shape hints rather than an explicit `data.kind` tag:\n *\n * - `'text'` when `data.text` is a string (`text-edit` mode entry)\n * - `'path'` when `data.path` is present (`path-edit` mode entry)\n * - `'image'` when `data.image` is present\n *\n * Order matters: `'text'` beats `'path'` so an SVG-imported text node\n * carrying a fallback `path` routes to text-edit. Consumers wanting\n * different precedence pass their own `routing` array.\n *\n * Without this default the kind classifier is undefined when\n * `routing` is unset and every hit comes back as `kind: 'unknown'`,\n * silently breaking `Hit.kind`-based routing (e.g. modality's\n * `dispatchDoubleClickEntry`).\n */\nexport const inferredNodeRouting: readonly NodeRoutingEntry[] = [\n { name: 'text', matches: (d) => isObj(d) && typeof d.text === 'string' },\n { name: 'path', matches: (d) => isObj(d) && d.path != null },\n { name: 'image', matches: (d) => isObj(d) && d.image != null },\n];\n"],"mappings":";;AAGA,SAASA,EAAM,GAA0C;CACvD,OAAO,OAAOC,KAAM,cAAYA;AAClC;AAyBA,IAAaC,IAAkDC,EAAgB,KAC5E,OAAU;CACT;CACA,UAAU,MACRH,EAAMI,CAAI,KACTA,EAA4B,SAASC;AAC1C,EACF,GAoBaC,IAAmD;CAC9D;EAAE,MAAM;EAAQ,UAAU,MAAMN,EAAMC,CAAC,KAAK,OAAOA,EAAE,QAAS;CAAS;CACvE;EAAE,MAAM;EAAQ,UAAU,MAAMD,EAAMC,CAAC,KAAKA,EAAE,QAAQ;CAAK;CAC3D;EAAE,MAAM;EAAS,UAAU,MAAMD,EAAMC,CAAC,KAAKA,EAAE,SAAS;CAAK;AAC/D"}
@@ -0,0 +1,69 @@
1
+ import { insertPreviewExtent as e } from "../insertPreviewExtent.js";
2
+ //#region src/canvas/SceneCanvas/dispatcherGestureBounds.ts
3
+ function t(e) {
4
+ let t = [];
5
+ if (!e) return t;
6
+ for (let n of e.getInFlightHandles()) {
7
+ let e = n.previewIds?.();
8
+ if (e) for (let n of e) t.push(n);
9
+ }
10
+ return t;
11
+ }
12
+ function n(t) {
13
+ let n = [];
14
+ if (!t) return n;
15
+ for (let r of t.getInFlightHandles()) {
16
+ let t = r.overlay?.();
17
+ if (!t || t.kind !== "insertPreview") continue;
18
+ let i = e(t).bounds;
19
+ (i.width !== 0 || i.height !== 0 || t.shape === "pencil") && n.push({
20
+ x: i.x,
21
+ y: i.y,
22
+ width: i.width,
23
+ height: i.height
24
+ });
25
+ }
26
+ return n;
27
+ }
28
+ var r = () => {};
29
+ function i(e) {
30
+ return {
31
+ ids: () => t(e()),
32
+ bounds: () => n(e()),
33
+ subscribe: (t) => e()?.subscribe(t) ?? r,
34
+ getVersion: () => e()?.getVersion() ?? 0,
35
+ previewSources: () => [...e()?.getInFlightHandles() ?? []],
36
+ overlays: () => {
37
+ let t = [];
38
+ for (let n of e()?.getInFlightHandles() ?? []) {
39
+ let e = n.overlay?.();
40
+ e && t.push(e);
41
+ }
42
+ return t;
43
+ }
44
+ };
45
+ }
46
+ function a(e) {
47
+ return {
48
+ previewIdsExtra: () => {
49
+ let t = [];
50
+ for (let n of e()?.getInFlightHandles() ?? []) {
51
+ if (n.previewHidesSource === !1) continue;
52
+ let e = n.previewIds?.();
53
+ if (e) for (let n of e) t.push(n);
54
+ }
55
+ return t;
56
+ },
57
+ previewPoseExtra: (t) => {
58
+ for (let n of e()?.getInFlightHandles() ?? []) {
59
+ let e = n.previewPose?.(t);
60
+ if (e != null) return e;
61
+ }
62
+ return null;
63
+ }
64
+ };
65
+ }
66
+ //#endregion
67
+ export { a as createDispatcherPreviewSources, i as createGestureSource, t as dispatcherGestureIds, n as dispatcherInsertBounds };
68
+
69
+ //# sourceMappingURL=dispatcherGestureBounds.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatcherGestureBounds.js","names":["dispatcherGestureIds","out","dispatcher","handle","ids","id","dispatcherInsertBounds","ov","b","insertPreviewExtent","NO_OP_UNSUBSCRIBE","createGestureSource","getDispatcher","fn","createDispatcherPreviewSources","p"],"sources":["../../../src/canvas/SceneCanvas/dispatcherGestureBounds.ts"],"sourcesContent":["/**\n * The dispatcher side of `<Canvas>`'s {@link GestureSource} seam.\n *\n * `<Canvas>` owns the `CanvasHelpers` gesture surface (`getGestureBounds`,\n * `subscribeGestures`, `getGestureVersion`) but knows nothing about the\n * gesture dispatcher — like `previewIdsExtra` / `previewPoseExtra`, the\n * dispatcher's contribution is wired in from `<SceneCanvas>`. This module is\n * the whole of that contribution:\n *\n * - {@link dispatcherGestureIds} — every id any in-flight handle is\n * previewing, so Canvas can resolve each one's preview bounds;\n * - {@link dispatcherInsertBounds} — the AABBs of gestures that have no\n * scene id at all (a drag-to-insert, pre-commit);\n * - {@link createGestureSource} — those two plus the dispatcher's change\n * signal, its in-flight preview surfaces and its published overlays,\n * bundled into the object `<Canvas>` takes.\n *\n * `useDispatcherOverlayLayer` paints the same `insertPreview` overlays this\n * reads, and both size them through `insertPreviewExtent`, so the reported\n * bounds and the drawn preview can't disagree.\n */\nimport type { Dispatcher } from '@weasel-js/routing';\nimport type { Bounds } from 'core/viewport/fitViewToBounds';\nimport type { GestureSource } from '../gestureBounds';\nimport type { OngoingOverlay } from '@weasel-js/routing';\nimport { insertPreviewExtent } from '../insertPreviewExtent';\n\n/**\n * Ids every in-flight handle is previewing.\n *\n * Deliberately *not* `previewIdsExtra`: that one honors\n * `previewHidesSource: false` because its job is deciding whose committed\n * paint to suppress. A clone ghost hides nothing yet still proposes content\n * at the drag target, so gesture bounds must count it.\n */\nexport function dispatcherGestureIds(dispatcher: Dispatcher | null | undefined): string[] {\n const out: string[] = [];\n if (!dispatcher) return out;\n for (const handle of dispatcher.getInFlightHandles()) {\n const ids = handle.previewIds?.();\n if (!ids) continue;\n for (const id of ids) out.push(id);\n }\n return out;\n}\n\n/**\n * World-space AABBs of in-flight gestures with no scene node yet — the\n * `insertPreview` overlay variant, sized by {@link insertPreviewExtent}.\n *\n * Only `insertPreview`. `marquee` and `lasso` are in-flight gestures with\n * geometry too, but they *select* rather than *propose content*: a consumer\n * sizing itself to the gesture (lbx-editor's live auto-length) must not grow\n * because the user swept a selection rectangle. A `polyline` — a slice's cut\n * line, a connector being routed — proposes no content either.\n */\nexport function dispatcherInsertBounds(dispatcher: Dispatcher | null | undefined): Bounds[] {\n const out: Bounds[] = [];\n if (!dispatcher) return out;\n for (const handle of dispatcher.getInFlightHandles()) {\n const ov = handle.overlay?.();\n if (!ov || ov.kind !== 'insertPreview') continue;\n const b = insertPreviewExtent(ov).bounds;\n // A zero-area extent is the pointerdown frame before the first move.\n // Mirrors `useDispatcherOverlayLayer`'s skip, pencil exception included:\n // a pencil gesture can be meaningful at near-zero AABB (closed loop /\n // sub-threshold), so it reports its point rather than nothing.\n if (b.width === 0 && b.height === 0 && ov.shape !== 'pencil') continue;\n out.push({ x: b.x, y: b.y, width: b.width, height: b.height });\n }\n return out;\n}\n\nconst NO_OP_UNSUBSCRIBE = (): void => {};\n\n/**\n * Bundle a dispatcher into the {@link GestureSource} `<Canvas>` consumes.\n *\n * Reads the dispatcher through a getter rather than closing over it, so the\n * source can be built once and keep pointing at the live dispatcher across\n * re-renders. A `null` dispatcher yields the empty answers — no ids, no\n * bounds, a no-op subscription, version 0.\n */\nexport function createGestureSource(\n getDispatcher: () => Dispatcher | null | undefined,\n): GestureSource {\n return {\n ids: () => dispatcherGestureIds(getDispatcher()),\n bounds: () => dispatcherInsertBounds(getDispatcher()),\n subscribe: (fn) => getDispatcher()?.subscribe(fn) ?? NO_OP_UNSUBSCRIBE,\n getVersion: () => getDispatcher()?.getVersion() ?? 0,\n previewSources: () => [...(getDispatcher()?.getInFlightHandles() ?? [])],\n overlays: () => {\n const out: OngoingOverlay[] = [];\n for (const handle of getDispatcher()?.getInFlightHandles() ?? []) {\n const ov = handle.overlay?.();\n if (ov) out.push(ov);\n }\n return out;\n },\n };\n}\n\n/**\n * The dispatcher's contribution to a view's overlay-aware lookups: which ids\n * an in-flight handle hides behind a ghost, and the pose it proposes for one.\n *\n * Separate from {@link createGestureSource} only because `<Canvas>` takes\n * these as two loose props rather than a bundle.\n */\nexport function createDispatcherPreviewSources(\n getDispatcher: () => Dispatcher | null | undefined,\n): {\n previewIdsExtra: () => string[];\n previewPoseExtra: (id: string) => unknown;\n} {\n return {\n // Handles that set `previewHidesSource: false` (clone, etc.) opt out —\n // their ghost still paints, but the source stays at its committed home.\n previewIdsExtra: () => {\n const out: string[] = [];\n for (const handle of getDispatcher()?.getInFlightHandles() ?? []) {\n if (handle.previewHidesSource === false) continue;\n const ids = handle.previewIds?.();\n if (!ids) continue;\n for (const id of ids) out.push(id);\n }\n return out;\n },\n previewPoseExtra: (id: string) => {\n for (const handle of getDispatcher()?.getInFlightHandles() ?? []) {\n const p = handle.previewPose?.(id);\n if (p != null) return p;\n }\n return null;\n },\n };\n}\n"],"mappings":";;AAmCA,SAAgBA,EAAqB,GAAqD;CACxF,IAAMC,IAAgB,CAAC;CACvB,IAAI,CAACC,GAAY,OAAOD;CACxB,KAAK,IAAME,KAAUD,EAAW,mBAAmB,GAAG;EACpD,IAAME,IAAMD,EAAO,aAAa;EAChC,IAAKC,GACL,KAAK,IAAMC,KAAMD,GAAK,EAAI,KAAKC,CAAE;CACnC;CACA,OAAOJ;AACT;AAYA,SAAgBK,EAAuB,GAAqD;CAC1F,IAAML,IAAgB,CAAC;CACvB,IAAI,CAACC,GAAY,OAAOD;CACxB,KAAK,IAAME,KAAUD,EAAW,mBAAmB,GAAG;EACpD,IAAMK,IAAKJ,EAAO,UAAU;EAC5B,IAAI,CAACI,KAAMA,EAAG,SAAS,iBAAiB;EACxC,IAAMC,IAAIC,EAAoBF,CAAE,CAAC,CAAC;EAKlC,CAAIC,EAAE,UAAU,KAAKA,EAAE,WAAW,KAAKD,EAAG,UAAU,aACpDN,EAAI,KAAK;GAAE,GAAGO,EAAE;GAAG,GAAGA,EAAE;GAAG,OAAOA,EAAE;GAAO,QAAQA,EAAE;EAAO,CAAC;CAC/D;CACA,OAAOP;AACT;AAEA,IAAMS,UAAgC,CAAC;AAUvC,SAAgBC,EACd,GACe;CACf,OAAO;EACL,WAAWX,EAAqBY,EAAc,CAAC;EAC/C,cAAcN,EAAuBM,EAAc,CAAC;EACpD,YAAY,MAAOA,EAAc,CAAC,EAAE,UAAUC,CAAE,KAAKH;EACrD,kBAAkBE,EAAc,CAAC,EAAE,WAAW,KAAK;EACnD,sBAAsB,CAAC,GAAIA,EAAc,CAAC,EAAE,mBAAmB,KAAK,CAAC,CAAE;EACvE,gBAAgB;GACd,IAAMX,IAAwB,CAAC;GAC/B,KAAK,IAAME,KAAUS,EAAc,CAAC,EAAE,mBAAmB,KAAK,CAAC,GAAG;IAChE,IAAML,IAAKJ,EAAO,UAAU;IAC5B,AAAII,KAAIN,EAAI,KAAKM,CAAE;GACrB;GACA,OAAON;EACT;CACF;AACF;AASA,SAAgBa,EACd,GAIA;CACA,OAAO;EAGL,uBAAuB;GACrB,IAAMb,IAAgB,CAAC;GACvB,KAAK,IAAME,KAAUS,EAAc,CAAC,EAAE,mBAAmB,KAAK,CAAC,GAAG;IAChE,IAAIT,EAAO,uBAAuB,IAAO;IACzC,IAAMC,IAAMD,EAAO,aAAa;IAChC,IAAKC,GACL,KAAK,IAAMC,KAAMD,GAAK,EAAI,KAAKC,CAAE;GACnC;GACA,OAAOJ;EACT;EACA,mBAAmB,MAAe;GAChC,KAAK,IAAME,KAAUS,EAAc,CAAC,EAAE,mBAAmB,KAAK,CAAC,GAAG;IAChE,IAAMG,IAAIZ,EAAO,cAAcE,CAAE;IACjC,IAAIU,KAAK,MAAM,OAAOA;GACxB;GACA,OAAO;EACT;CACF;AACF"}
@@ -0,0 +1,97 @@
1
+ //#region src/canvas/SceneCanvas/features.ts
2
+ var e = [
3
+ "view",
4
+ "pick",
5
+ "move",
6
+ "transform",
7
+ "edit",
8
+ "arrange",
9
+ "paths",
10
+ "ingest",
11
+ "draw"
12
+ ], t = e.filter((e) => e !== "draw"), n = {
13
+ view: ["viewport.dragPan", "viewport.pinchZoom"],
14
+ pick: [
15
+ "areaSelect",
16
+ "clearSelection",
17
+ "lassoSelect"
18
+ ],
19
+ move: ["move", "clone"],
20
+ transform: ["resize", "rotate"],
21
+ edit: [
22
+ "escape",
23
+ "cancelGesture",
24
+ "selectAll",
25
+ "duplicate",
26
+ "delete",
27
+ "group",
28
+ "ungroup",
29
+ "undo",
30
+ "redo",
31
+ "nudge.up",
32
+ "nudge.down",
33
+ "nudge.left",
34
+ "nudge.right",
35
+ "clipboard.cut",
36
+ "clipboard.copy",
37
+ "clipboard.paste",
38
+ "setFill",
39
+ "setStroke",
40
+ "setFillOpacity",
41
+ "setStrokeOpacity"
42
+ ],
43
+ arrange: [
44
+ "flip",
45
+ "reorder.forward",
46
+ "reorder.backward",
47
+ "align.left",
48
+ "align.centerX",
49
+ "align.right",
50
+ "align.top",
51
+ "align.centerY",
52
+ "align.bottom",
53
+ "distribute.horizontal",
54
+ "distribute.vertical"
55
+ ],
56
+ paths: [
57
+ "pathfinder.union",
58
+ "pathfinder.subtract",
59
+ "pathfinder.intersect",
60
+ "pathfinder.exclude",
61
+ "pathfinder.divide",
62
+ "pathfinder.crop",
63
+ "createOutlines",
64
+ "editAnchors",
65
+ "enterPathEdit",
66
+ "exitPathEdit",
67
+ "insertPathAnchor",
68
+ "nudgeAnchors.up",
69
+ "nudgeAnchors.down",
70
+ "nudgeAnchors.left",
71
+ "nudgeAnchors.right",
72
+ "deleteAnchors",
73
+ "cutPathAtAnchor",
74
+ "marqueeAnchors",
75
+ "selectAnchor"
76
+ ],
77
+ ingest: ["ingest"]
78
+ }, r = [
79
+ "insert",
80
+ "insert.adjustRotation",
81
+ "enterTextEdit"
82
+ ];
83
+ function i(e, n = {}) {
84
+ let r = /* @__PURE__ */ new Set();
85
+ for (let n of e ?? []) if (n === "draw") for (let e of t) r.add(e);
86
+ else r.add(n);
87
+ return n.viewport && r.add("view"), r;
88
+ }
89
+ function a(e) {
90
+ let t = /* @__PURE__ */ new Set();
91
+ for (let r of e) for (let e of n[r]) t.add(e);
92
+ return t;
93
+ }
94
+ //#endregion
95
+ export { n as FEATURE_ACTION_IDS, e as SCENE_CANVAS_FEATURES, r as TOOL_DRIVEN_ACTION_IDS, a as featureActionIds, i as resolveFeatures };
96
+
97
+ //# sourceMappingURL=features.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features.js","names":["SCENE_CANVAS_FEATURES","BASE_FEATURES","f","FEATURE_ACTION_IDS","TOOL_DRIVEN_ACTION_IDS","resolveFeatures","out","features","b","opts","featureActionIds","ids","id"],"sources":["../../../src/canvas/SceneCanvas/features.ts"],"sourcesContent":["/**\n * The behavior presets `<SceneCanvas features>` composes. A bare canvas renders\n * its scene and keeps a selection nothing sets; every behavior beyond that is\n * turned on by naming a preset here.\n */\n\n/** A behavior preset for `<SceneCanvas features>`. `draw` names every other\n * one. */\nexport type Feature =\n | 'view'\n | 'pick'\n | 'move'\n | 'transform'\n | 'edit'\n | 'arrange'\n | 'paths'\n | 'ingest'\n | 'draw';\n\n/** Every preset except `draw`, which only abbreviates them. */\nexport type BaseFeature = Exclude<Feature, 'draw'>;\n\n/** Every preset `<SceneCanvas features>` accepts, `draw` last. */\nexport const SCENE_CANVAS_FEATURES: readonly Feature[] = [\n 'view', 'pick', 'move', 'transform', 'edit', 'arrange', 'paths', 'ingest', 'draw',\n];\n\nconst BASE_FEATURES: readonly BaseFeature[] =\n SCENE_CANVAS_FEATURES.filter((f): f is BaseFeature => f !== 'draw');\n\n/**\n * The kit-standard actions each preset registers.\n *\n * Every id `useStandardActions` knows appears under exactly one preset, except\n * the ones in {@link TOOL_DRIVEN_ACTION_IDS}. `move` and `transform` also bring\n * the ambient bindings that route drags to their actions, and `pick` brings the\n * select tool; this table is only the registration half.\n */\nexport const FEATURE_ACTION_IDS: Readonly<Record<BaseFeature, readonly string[]>> = {\n view: ['viewport.dragPan', 'viewport.pinchZoom'],\n pick: ['areaSelect', 'clearSelection', 'lassoSelect'],\n move: ['move', 'clone'],\n transform: ['resize', 'rotate'],\n edit: [\n 'escape', 'cancelGesture', 'selectAll', 'duplicate', 'delete',\n 'group', 'ungroup', 'undo', 'redo',\n 'nudge.up', 'nudge.down', 'nudge.left', 'nudge.right',\n 'clipboard.cut', 'clipboard.copy', 'clipboard.paste',\n 'setFill', 'setStroke', 'setFillOpacity', 'setStrokeOpacity',\n ],\n arrange: [\n 'flip',\n 'reorder.forward', 'reorder.backward',\n 'align.left', 'align.centerX', 'align.right',\n 'align.top', 'align.centerY', 'align.bottom',\n 'distribute.horizontal', 'distribute.vertical',\n ],\n paths: [\n 'pathfinder.union', 'pathfinder.subtract', 'pathfinder.intersect',\n 'pathfinder.exclude', 'pathfinder.divide', 'pathfinder.crop', 'createOutlines',\n 'editAnchors', 'enterPathEdit', 'exitPathEdit', 'insertPathAnchor',\n 'nudgeAnchors.up', 'nudgeAnchors.down', 'nudgeAnchors.left', 'nudgeAnchors.right',\n 'deleteAnchors', 'cutPathAtAnchor', 'marqueeAnchors', 'selectAnchor',\n ],\n ingest: ['ingest'],\n};\n\n/**\n * Kit-standard actions no preset registers: they belong to the tools that bind\n * them. A canvas registers each one whenever a tool it carries names it in a\n * binding — `insert` with any shape tool, `enterTextEdit` with the text tool.\n */\nexport const TOOL_DRIVEN_ACTION_IDS: readonly string[] = ['insert', 'insert.adjustRotation', 'enterTextEdit'];\n\n/**\n * The presets a canvas runs with: `features` with `draw` expanded, plus `view`\n * whenever the canvas was handed a `viewport` config, since that prop only\n * configures what `view` turns on.\n */\nexport function resolveFeatures(\n features: readonly Feature[] | undefined,\n opts: { viewport?: boolean } = {},\n): ReadonlySet<BaseFeature> {\n const out = new Set<BaseFeature>();\n for (const f of features ?? []) {\n if (f === 'draw') for (const b of BASE_FEATURES) out.add(b);\n else out.add(f);\n }\n if (opts.viewport) out.add('view');\n return out;\n}\n\n/** The kit-standard action ids the given presets register. */\nexport function featureActionIds(features: ReadonlySet<BaseFeature>): Set<string> {\n const ids = new Set<string>();\n for (const f of features) for (const id of FEATURE_ACTION_IDS[f]) ids.add(id);\n return ids;\n}\n"],"mappings":";AAuBA,IAAaA,IAA4C;CACvD;CAAQ;CAAQ;CAAQ;CAAa;CAAQ;CAAW;CAAS;CAAU;AAC7E,GAEMC,IACJD,EAAsB,QAAQ,MAAwBE,MAAM,MAAM,GAUvDC,IAAuE;CAClF,MAAM,CAAC,oBAAoB,oBAAoB;CAC/C,MAAM;EAAC;EAAc;EAAkB;CAAa;CACpD,MAAM,CAAC,QAAQ,OAAO;CACtB,WAAW,CAAC,UAAU,QAAQ;CAC9B,MAAM;EACJ;EAAU;EAAiB;EAAa;EAAa;EACrD;EAAS;EAAW;EAAQ;EAC5B;EAAY;EAAc;EAAc;EACxC;EAAiB;EAAkB;EACnC;EAAW;EAAa;EAAkB;CAC5C;CACA,SAAS;EACP;EACA;EAAmB;EACnB;EAAc;EAAiB;EAC/B;EAAa;EAAiB;EAC9B;EAAyB;CAC3B;CACA,OAAO;EACL;EAAoB;EAAuB;EAC3C;EAAsB;EAAqB;EAAmB;EAC9D;EAAe;EAAiB;EAAgB;EAChD;EAAmB;EAAqB;EAAqB;EAC7D;EAAiB;EAAmB;EAAkB;CACxD;CACA,QAAQ,CAAC,QAAQ;AACnB,GAOaC,IAA4C;CAAC;CAAU;CAAyB;AAAe;AAO5G,SAAgBC,EACd,GACA,IAA+B,CAAC,GACN;CAC1B,IAAMC,oBAAM,IAAI,IAAiB;CACjC,KAAK,IAAMJ,KAAKK,KAAY,CAAC,GAC3B,IAAIL,MAAM,QAAQ,KAAK,IAAMM,KAAKP,GAAe,EAAI,IAAIO,CAAC;MACrD,EAAI,IAAIN,CAAC;CAGhB,OADIO,EAAK,YAAUH,EAAI,IAAI,MAAM,GAC1BA;AACT;AAGA,SAAgBI,EAAiB,GAAiD;CAChF,IAAMC,oBAAM,IAAI,IAAY;CAC5B,KAAK,IAAMT,KAAKK,GAAU,KAAK,IAAMK,KAAMT,EAAmBD,IAAI,EAAI,IAAIU,CAAE;CAC5E,OAAOD;AACT"}
@@ -0,0 +1,46 @@
1
+ import { poseRotationOf as e } from "../../core/geometry/poseRotation.js";
2
+ import { AUTO_POSE_DESCRIPTOR as t, isPathLike as n } from "../../interactions/actions/resize/autoPoseDescriptor.js";
3
+ import { hasSlop as r, slopForStrokeHit as i } from "../../core/viewport/screenSlop.js";
4
+ import { applyToPoint as a, pointInPath as o, rotateAboutPoint as s, strokeHitTest as c } from "@weasel-js/geom";
5
+ //#region src/canvas/SceneCanvas/poseGeometry.ts
6
+ function l(e, n = t) {
7
+ return n.getBounds(e);
8
+ }
9
+ var u = 4;
10
+ function d(e, n, r, i, a = t) {
11
+ return p(e, n, r, i, a, 0);
12
+ }
13
+ function f(n, r, i, o, c = t) {
14
+ let l = c === t ? e(n) : m(n, c);
15
+ if (l) {
16
+ let [e, t] = a(s(l.cx, l.cy, -l.rotation), r, i);
17
+ return p(n, e, t, o, c, l.rotation);
18
+ }
19
+ return p(n, r, i, o, c, 0);
20
+ }
21
+ function p(e, t, a, s, d, f) {
22
+ let p = n(e), m = s === void 0 ? p ? u : 0 : typeof s == "number" ? s : s.reach ?? 0, h = typeof s == "object" ? s : void 0, { opts: g } = i(h, f);
23
+ if (p) return o(e, t, a) ? !0 : c(e, t, a, m, g);
24
+ let _ = l(e, d), v = {
25
+ kind: "rect",
26
+ x: _.x - m,
27
+ y: _.y - m,
28
+ width: _.width + 2 * m,
29
+ height: _.height + 2 * m
30
+ };
31
+ return o(v, t, a) ? !0 : r(h) && c(v, t, a, 0, g);
32
+ }
33
+ function m(e, t) {
34
+ let n = t.getRotation?.(e) ?? 0;
35
+ if (!n) return null;
36
+ let r = t.getBounds(e);
37
+ return {
38
+ cx: r.x + r.width / 2,
39
+ cy: r.y + r.height / 2,
40
+ rotation: n
41
+ };
42
+ }
43
+ //#endregion
44
+ export { l as aabbOfPose, n as isPathLike, d as poseContains, f as poseContainsRotated };
45
+
46
+ //# sourceMappingURL=poseGeometry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"poseGeometry.js","names":["aabbOfPose","AUTO_POSE_DESCRIPTOR","descriptor","pose","DEFAULT_PATH_STROKE_SLOP","poseContains","containsInFrame","wx","wy","tolerance","poseContainsRotated","r","poseRotationOf","rotationAboutCenter","lx","ly","applyToPoint","rotateAboutPoint","pathLike","isPathLike","reach","screen","slopForStrokeHit","rotation","pointInPath","x","y","strokeHitTest","opts","b","grown","hasSlop"],"sources":["../../../src/canvas/SceneCanvas/poseGeometry.ts"],"sourcesContent":["/**\n * Pose-shape helpers shared by `<SceneCanvas>` internals.\n *\n * Every bounds read goes through a `PoseDescriptor`, defaulting to\n * `AUTO_POSE_DESCRIPTOR` (path descriptor for `{kind:'polygon'|'rect'}` poses,\n * rect descriptor for everything else). Used by hit-test, marquee and bounds\n * extraction, so a consumer-supplied descriptor reaches all three.\n */\nimport type { Bounds } from 'tools/builtin/select';\nimport { applyToPoint, pointInPath, rotateAboutPoint, strokeHitTest } from '@weasel-js/geom';\nimport type { PoseDescriptor } from 'interactions/actions/resize/geometry';\nimport { AUTO_POSE_DESCRIPTOR, isPathLike } from 'interactions/actions/resize/autoPoseDescriptor';\nimport { poseRotationOf } from 'core/geometry/poseRotation';\nimport { hasSlop, slopForStrokeHit, type ScreenSlop } from 'core/viewport/screenSlop';\n\nexport { isPathLike };\n\nexport function aabbOfPose<TPose>(\n pose: TPose,\n descriptor: PoseDescriptor<unknown> = AUTO_POSE_DESCRIPTOR,\n): Bounds {\n return descriptor.getBounds(pose);\n}\n\n/** Screen-px slop applied to the stroke-distance hit-test for paths. Catches\n * fingertip-imprecision around thin lines / curves without depending on the\n * stroke's actual rendered width (which the hit-test layer doesn't know). */\nconst DEFAULT_PATH_STROKE_SLOP = 4;\n\n/** A containment slop: `reach` world units the caller knows the ink extends\n * past the pose (a stroke's outward half-width), then `px`/`scale` of screen\n * slop measured from there. */\nexport interface PoseSlop extends ScreenSlop {\n reach?: number;\n}\n\n/**\n * @param tolerance - Grab slop. A number is **world** units and grows the\n * AABB test and the path stroke-distance test alike; a {@link PoseSlop}\n * is measured on screen, from `reach` world units out. Defaults to\n * {@link DEFAULT_PATH_STROKE_SLOP} for path-like poses (the historical\n * fixed slop) and to `0` for rect poses, whose edges were never fuzzy.\n */\nexport function poseContains<TPose>(\n pose: TPose,\n wx: number,\n wy: number,\n tolerance?: number | PoseSlop,\n descriptor: PoseDescriptor<unknown> = AUTO_POSE_DESCRIPTOR,\n): boolean {\n return containsInFrame(pose, wx, wy, tolerance, descriptor, 0);\n}\n\n/**\n * Containment for `<SceneCanvas>`'s default `pickEvery`. When the pose carries\n * an effective rotation (`poseRotationOf`), inverse-rotates the query point\n * about the AABB center and tests in the pose's own frame — exactly mirroring\n * the renderer's rotation wrap, so the click target matches the rendered shape.\n * This covers both rect-shaped poses and rotated `kind:'rect'`/polygon poses\n * that carry an AABB. Poses with no effective rotation test directly.\n *\n * Rotation comes from the descriptor when one is supplied, and otherwise from\n * `pose.rotation` — the convention the renderer reads.\n */\nexport function poseContainsRotated<TPose>(\n pose: TPose,\n wx: number,\n wy: number,\n tolerance?: number | PoseSlop,\n descriptor: PoseDescriptor<unknown> = AUTO_POSE_DESCRIPTOR,\n): boolean {\n const r = descriptor === AUTO_POSE_DESCRIPTOR\n ? poseRotationOf(pose)\n : rotationAboutCenter(pose, descriptor);\n if (r) {\n // Inverse of `rotateAboutPoint(cx, cy, θ)` is `rotateAboutPoint(cx, cy, -θ)`\n // (same pivot + negated angle). Rotation is rigid, so world reach carries\n // over unchanged; a screen slop does not, and gets the rotation passed on.\n const [lx, ly] = applyToPoint(rotateAboutPoint(r.cx, r.cy, -r.rotation), wx, wy);\n return containsInFrame(pose, lx, ly, tolerance, descriptor, r.rotation);\n }\n return containsInFrame(pose, wx, wy, tolerance, descriptor, 0);\n}\n\n/** `(x, y)` is in the pose's own frame, which reaches world by `rotation`. */\nfunction containsInFrame<TPose>(\n pose: TPose,\n x: number,\n y: number,\n tolerance: number | PoseSlop | undefined,\n descriptor: PoseDescriptor<unknown>,\n rotation: number,\n): boolean {\n const pathLike = isPathLike(pose);\n const reach = tolerance === undefined\n ? (pathLike ? DEFAULT_PATH_STROKE_SLOP : 0)\n : typeof tolerance === 'number' ? tolerance : (tolerance.reach ?? 0);\n const screen = typeof tolerance === 'object' ? tolerance : undefined;\n const { opts } = slopForStrokeHit(screen, rotation);\n if (pathLike) {\n // Precise inside-filled-region OR within-stroke-slop. Replaces the old\n // \"AABB-conservative-fallback\" path that returned true anywhere inside\n // the path's bounding box (which over-picked on open / non-convex paths).\n if (pointInPath(pose, x, y)) return true;\n return strokeHitTest(pose, x, y, reach, opts);\n }\n const b = aabbOfPose(pose, descriptor);\n // `reach` is the caller's budget for being at least as generous as whatever\n // refinement follows: the stroke's outward reach, which this function\n // cannot see. Grown square, so it contains the round band the refinement\n // tests.\n const grown = {\n kind: 'rect' as const,\n x: b.x - reach, y: b.y - reach, width: b.width + 2 * reach, height: b.height + 2 * reach,\n };\n if (pointInPath(grown, x, y)) return true;\n return hasSlop(screen) && strokeHitTest(grown, x, y, 0, opts);\n}\n\nfunction rotationAboutCenter<TPose>(\n pose: TPose,\n descriptor: PoseDescriptor<unknown>,\n): { cx: number; cy: number; rotation: number } | null {\n const rotation = descriptor.getRotation?.(pose) ?? 0;\n if (!rotation) return null;\n const b = descriptor.getBounds(pose);\n return { cx: b.x + b.width / 2, cy: b.y + b.height / 2, rotation };\n}\n"],"mappings":";;;;;AAiBA,SAAgBA,EACd,GACA,IAAsCC,GAC9B;CACR,OAAOC,EAAW,UAAUC,CAAI;AAClC;AAKA,IAAMC,IAA2B;AAgBjC,SAAgBC,EACd,GACA,GACA,GACA,GACA,IAAsCJ,GAC7B;CACT,OAAOK,EAAgBH,GAAMI,GAAIC,GAAIC,GAAWP,GAAY,CAAC;AAC/D;AAaA,SAAgBQ,EACd,GACA,GACA,GACA,GACA,IAAsCT,GAC7B;CACT,IAAMU,IAAIT,MAAeD,IACrBW,EAAeT,CAAI,IACnBU,EAAoBV,GAAMD,CAAU;CACxC,IAAIS,GAAG;EAIL,IAAM,CAACG,GAAIC,KAAMC,EAAaC,EAAiBN,EAAE,IAAIA,EAAE,IAAI,CAACA,EAAE,QAAQ,GAAGJ,GAAIC,CAAE;EAC/E,OAAOF,EAAgBH,GAAMW,GAAIC,GAAIN,GAAWP,GAAYS,EAAE,QAAQ;CACxE;CACA,OAAOL,EAAgBH,GAAMI,GAAIC,GAAIC,GAAWP,GAAY,CAAC;AAC/D;AAGA,SAASI,EACP,GACA,GACA,GACA,GACA,GACA,GACS;CACT,IAAMY,IAAWC,EAAWhB,CAAI,GAC1BiB,IAAQX,MAAc,KAAA,IACvBS,IAAWd,IAA2B,IACvC,OAAOK,KAAc,WAAWA,IAAaA,EAAU,SAAS,GAC9DY,IAAS,OAAOZ,KAAc,WAAWA,IAAY,KAAA,GACrD,EAAE,YAASa,EAAiBD,GAAQE,CAAQ;CAClD,IAAIL,GAKF,OADIM,EAAYrB,GAAMsB,GAAGC,CAAC,IAAU,KAC7BC,EAAcxB,GAAMsB,GAAGC,GAAGN,GAAOQ,CAAI;CAE9C,IAAMC,IAAI7B,EAAWG,GAAMD,CAAU,GAK/B4B,IAAQ;EACZ,MAAM;EACN,GAAGD,EAAE,IAAIT;EAAO,GAAGS,EAAE,IAAIT;EAAO,OAAOS,EAAE,QAAQ,IAAIT;EAAO,QAAQS,EAAE,SAAS,IAAIT;CACrF;CAEA,OADII,EAAYM,GAAOL,GAAGC,CAAC,IAAU,KAC9BK,EAAQV,CAAM,KAAKM,EAAcG,GAAOL,GAAGC,GAAG,GAAGE,CAAI;AAC9D;AAEA,SAASf,EACP,GACA,GACqD;CACrD,IAAMU,IAAWrB,EAAW,cAAcC,CAAI,KAAK;CACnD,IAAI,CAACoB,GAAU,OAAO;CACtB,IAAMM,IAAI3B,EAAW,UAAUC,CAAI;CACnC,OAAO;EAAE,IAAI0B,EAAE,IAAIA,EAAE,QAAQ;EAAG,IAAIA,EAAE,IAAIA,EAAE,SAAS;EAAG;CAAS;AACnE"}
@@ -0,0 +1,48 @@
1
+ import { useEffect as e } from "react";
2
+ import { useLatest as t } from "@weasel-js/react";
3
+ import { useActionsRegistry as n } from "@weasel-js/routing/react";
4
+ //#region src/canvas/SceneCanvas/useActionsPropResolver.ts
5
+ function r(r, i) {
6
+ let a = n(), o = t(r);
7
+ e(() => {
8
+ if (!a) return;
9
+ let e = o.current, t = [];
10
+ if (e === null) {
11
+ for (let e of a.list().map((e) => e.id)) t.push(a.mute(e));
12
+ return () => {
13
+ for (let e of t) e();
14
+ };
15
+ }
16
+ if (!e) return;
17
+ let n = /* @__PURE__ */ new Set();
18
+ for (let [r, i] of Object.entries(e)) {
19
+ if (i === null) {
20
+ t.push(a.mute(r));
21
+ continue;
22
+ }
23
+ let e = (e) => typeof e.id == "string" && typeof e.label == "string" && !!e.invoker, o = a.list().find((e) => e.id === r);
24
+ if (!o) {
25
+ e(i) ? t.push(a.register(i)) : n.has(r) || (n.add(r), console.warn(`weasel actions resolver: actions["${r}"] is a partial Action but no default with this id exists. Pass a complete {id, label, invoker} descriptor.`));
26
+ continue;
27
+ }
28
+ i.id !== void 0 && i.id !== r && !n.has(`mismatch:${r}`) && (n.add(`mismatch:${r}`), console.warn(`weasel actions resolver: actions["${r}"].id="${i.id}" mismatches the slot key. Ignoring the id field; the action remains at id="${r}".`));
29
+ let { id: s, ...c } = i, l = {
30
+ ...o,
31
+ ...c
32
+ };
33
+ t.push(a.register(l));
34
+ }
35
+ return () => {
36
+ for (let e of t) e();
37
+ };
38
+ }, [
39
+ a,
40
+ r,
41
+ o,
42
+ i
43
+ ]);
44
+ }
45
+ //#endregion
46
+ export { r as useActionsPropResolver };
47
+
48
+ //# sourceMappingURL=useActionsPropResolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useActionsPropResolver.js","names":["useActionsPropResolver","reg","useActionsRegistry","actionsRef","useLatest","actions","prop","unregisters","id","a","u","warnedIds","slotId","entry","isFull","existing","_drop","rest","merged","rev"],"sources":["../../../src/canvas/SceneCanvas/useActionsPropResolver.ts"],"sourcesContent":["/**\n * `useActionsPropResolver` — applies the `actions` prop overrides on top of\n * whatever `useStandardActions` registered. Runs after it (caller mounts this\n * hook last). Resolution rules:\n *\n * actions === null → mute every currently-registered action\n * actions[id] === null → mute that id\n * actions[id] = partial → merge onto the existing descriptor (slot wins\n * over entry.id; warns once on mismatch)\n * actions[id] = full (new) → register alongside defaults\n *\n * `null` mutes rather than unregisters: the opt-out belongs to this canvas, so\n * a sibling sharing the registry keeps the action and this canvas's unmount\n * gives it back.\n */\nimport { useEffect } from 'react';\nimport type { ActionsProp } from '@weasel-js/routing';\nimport { useActionsRegistry } from '@weasel-js/routing/react';\nimport { useLatest } from '@weasel-js/react';\nimport type { Action } from '@weasel-js/routing';\n\n/** `rev` re-applies the overrides when it changes — pass whatever changes when\n * the set they sit on is re-registered. */\nexport function useActionsPropResolver(actions: ActionsProp | undefined, rev?: string): void {\n const reg = useActionsRegistry();\n const actionsRef = useLatest(actions);\n\n useEffect(() => {\n if (!reg) return;\n const prop = actionsRef.current;\n\n const unregisters: Array<() => void> = [];\n\n if (prop === null) {\n for (const id of reg.list().map((a) => a.id)) unregisters.push(reg.mute(id));\n return () => { for (const u of unregisters) u(); };\n }\n\n if (!prop) return;\n\n const warnedIds = new Set<string>();\n\n for (const [slotId, entry] of Object.entries(prop)) {\n if (entry === null) {\n unregisters.push(reg.mute(slotId));\n continue;\n }\n\n const isFull = (e: Partial<Action>): e is Action =>\n typeof e.id === 'string' && typeof e.label === 'string' && !!e.invoker;\n const existing = reg.list().find((a) => a.id === slotId);\n\n if (!existing) {\n if (isFull(entry)) {\n unregisters.push(reg.register(entry));\n } else if (!warnedIds.has(slotId)) {\n warnedIds.add(slotId);\n console.warn(\n `weasel actions resolver: actions[\"${slotId}\"] is a partial Action but no default ` +\n `with this id exists. Pass a complete {id, label, invoker} descriptor.`,\n );\n }\n continue;\n }\n\n if (entry.id !== undefined && entry.id !== slotId && !warnedIds.has(`mismatch:${slotId}`)) {\n warnedIds.add(`mismatch:${slotId}`);\n console.warn(\n `weasel actions resolver: actions[\"${slotId}\"].id=\"${entry.id as string}\" mismatches the slot key. ` +\n `Ignoring the id field; the action remains at id=\"${slotId}\".`,\n );\n }\n const { id: _drop, ...rest } = entry;\n void _drop;\n const merged: Action = { ...existing, ...rest };\n // No explicit restore: `register` stacks, so popping `merged` uncovers\n // the descriptor it displaced. Re-registering `existing` here would push\n // a stale snapshot back on top and never take it off again.\n unregisters.push(reg.register(merged));\n }\n\n return () => { for (const u of unregisters) u(); };\n }, [reg, actions, actionsRef, rev]);\n}\n"],"mappings":";;;;AAuBA,SAAgBA,EAAuB,GAAkC,GAAoB;CAC3F,IAAMC,IAAMC,EAAmB,GACzBC,IAAaC,EAAUC,CAAO;CAEpC,QAAgB;EACd,IAAI,CAACJ,GAAK;EACV,IAAMK,IAAOH,EAAW,SAElBI,IAAiC,CAAC;EAExC,IAAID,MAAS,MAAM;GACjB,KAAK,IAAME,KAAMP,EAAI,KAAK,CAAC,CAAC,KAAK,MAAMQ,EAAE,EAAE,GAAG,EAAY,KAAKR,EAAI,KAAKO,CAAE,CAAC;GAC3E,aAAa;IAAE,KAAK,IAAME,KAAKH,GAAa,EAAE;GAAG;EACnD;EAEA,IAAI,CAACD,GAAM;EAEX,IAAMK,oBAAY,IAAI,IAAY;EAElC,KAAK,IAAM,CAACC,GAAQC,MAAU,OAAO,QAAQP,CAAI,GAAG;GAClD,IAAIO,MAAU,MAAM;IAClB,EAAY,KAAKZ,EAAI,KAAKW,CAAM,CAAC;IACjC;GACF;GAEA,IAAME,KAAU,MACd,OAAO,EAAE,MAAO,YAAY,OAAO,EAAE,SAAU,YAAY,CAAC,CAAC,EAAE,SAC3DC,IAAWd,EAAI,KAAK,CAAC,CAAC,MAAM,MAAMQ,EAAE,OAAOG,CAAM;GAEvD,IAAI,CAACG,GAAU;IACb,AAAID,EAAOD,CAAK,IACdN,EAAY,KAAKN,EAAI,SAASY,CAAK,CAAC,IAC1BF,EAAU,IAAIC,CAAM,MAC9BD,EAAU,IAAIC,CAAM,GACpB,QAAQ,KACN,qCAAqCA,EAAO,4GAE9C;IAEF;GACF;GAEA,AAAIC,EAAM,OAAO,KAAA,KAAaA,EAAM,OAAOD,KAAU,CAACD,EAAU,IAAI,YAAYC,GAAQ,MACtFD,EAAU,IAAI,YAAYC,GAAQ,GAClC,QAAQ,KACN,qCAAqCA,EAAO,SAASC,EAAM,GAAa,8EACpBD,EAAO,GAC7D;GAEF,IAAM,EAAE,IAAII,GAAO,GAAGC,MAASJ,GAEzBK,IAAiB;IAAE,GAAGH;IAAU,GAAGE;GAAK;GAI9C,EAAY,KAAKhB,EAAI,SAASiB,CAAM,CAAC;EACvC;EAEA,aAAa;GAAE,KAAK,IAAMR,KAAKH,GAAa,EAAE;EAAG;CACnD,GAAG;EAACN;EAAKI;EAASF;EAAYgB;CAAG,CAAC;AACpC"}
@@ -0,0 +1,70 @@
1
+ import { asNodeId as e } from "../../core/scene/types.js";
2
+ import "../../core/shapeKinds.js";
3
+ import { cycleFill as t, solid as n, strokeOf as r } from "../../util/paint.js";
4
+ import { useTextTool as i } from "../../tools/builtin/text/useTextTool.js";
5
+ import { usePenTool as a } from "../../tools/builtin/pen/usePenTool.js";
6
+ import { useRectTool as o } from "../../tools/builtin/rect/useRectTool.js";
7
+ import { useEllipseTool as s } from "../../tools/builtin/ellipse/useEllipseTool.js";
8
+ import { useLineTool as c } from "../../tools/builtin/line/useLineTool.js";
9
+ import { useLassoTool as l } from "../../tools/builtin/lasso/useLassoTool.js";
10
+ import { usePolygonTool as u } from "../../tools/builtin/polygon/usePolygonTool.js";
11
+ import { useStarTool as d } from "../../tools/builtin/star/useStarTool.js";
12
+ import { usePencilTool as f } from "../../tools/builtin/pencil/usePencilTool.js";
13
+ import { boundsOfPath as p } from "@weasel-js/geom";
14
+ import { useRef as m } from "react";
15
+ //#region src/canvas/SceneCanvas/useBuiltinShapeTools.tsx
16
+ function h(h) {
17
+ let { scene: g, adapter: _, options: v } = h, y = m(0), b = (t) => e(`${t}-${++y.current}`), x = () => t(y.current), S = () => g.layers[0]?.id ?? "default", C = (e, t, n) => ({
18
+ id: e,
19
+ kind: "leaf",
20
+ layer: S(),
21
+ pose: t,
22
+ data: n,
23
+ parent: null
24
+ }), w = v?.snapPoint, T = v?.insert ?? {}, E = o(T), D = s(T), O = c(T), k = u(T), A = d(T), j = f(T), M = (e) => {
25
+ let t = b("pn"), i = x();
26
+ return C(t, e.bounds, {
27
+ path: e.path,
28
+ fill: e.closed ? n(x()) : null,
29
+ stroke: r(i, 2)
30
+ });
31
+ };
32
+ return {
33
+ rect: E,
34
+ ellipse: D,
35
+ line: O,
36
+ polygon: k,
37
+ star: A,
38
+ pen: a({
39
+ snapPoint: w,
40
+ wrapPath: (e, { closed: t }) => {
41
+ let n = p(e);
42
+ return {
43
+ path: e,
44
+ closed: t,
45
+ bounds: {
46
+ x: n.x,
47
+ y: n.y,
48
+ width: n.width,
49
+ height: n.height
50
+ }
51
+ };
52
+ },
53
+ adapter: {
54
+ addNode: (e) => {
55
+ let t = M(e);
56
+ return _.insertNode(t), String(t.id);
57
+ },
58
+ makeNode: (e) => M(e),
59
+ setSelection: (e) => _.setSelection(e)
60
+ }
61
+ }),
62
+ pencil: j,
63
+ lasso: l(_, v?.lasso ?? {}),
64
+ text: i(T)
65
+ };
66
+ }
67
+ //#endregion
68
+ export { h as useBuiltinShapeTools };
69
+
70
+ //# sourceMappingURL=useBuiltinShapeTools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useBuiltinShapeTools.js","names":["useBuiltinShapeTools","args","seqRef","useRef","freshId","asNodeId","prefix","nextFill","cycleFill","layerOf","scene","makeLeaf","snapPoint","options","insert","rect","useRectTool","ellipse","useEllipseTool","line","useLineTool","polygon","usePolygonTool","star","useStarTool","pencil","usePencilTool","makePenLeaf","id","color","carrier","solid","strokeOf","usePenTool","b","boundsOfPath","path","node","adapter","ids","useLassoTool","useTextTool"],"sources":["../../../src/canvas/SceneCanvas/useBuiltinShapeTools.tsx"],"sourcesContent":["/**\n * Shape-tool synthesis for `<SceneCanvas>` — calls the kit's per-shape tool\n * hooks with default `create` callbacks that produce leaf nodes shaped for\n * the kit's PATH_PAINTER (`data: { path, fill }`). Lets consumers opt into\n * a complete drawing toolset via `<SceneCanvas defaultTools={['rect', 'ellipse']}>`\n * without writing per-tool factory code.\n *\n * All hooks are always called (React rules of hooks) — `<SceneCanvas>` only\n * registers the ones requested via `defaultTools`.\n */\nimport { useRef } from 'react';\nimport { asNodeId } from 'core/scene/types';\nimport { boundsOfPath } from '@weasel-js/geom';\nimport { cycleFill, solid, strokeOf } from '../../util/paint';\nimport { useEllipseTool } from 'tools/builtin/ellipse/useEllipseTool';\nimport { useLassoTool } from 'tools/builtin/lasso/useLassoTool';\nimport { useLineTool } from 'tools/builtin/line/useLineTool';\nimport { usePencilTool } from 'tools/builtin/pencil/usePencilTool';\nimport { usePenTool } from 'tools/builtin/pen/usePenTool';\nimport { usePolygonTool } from 'tools/builtin/polygon/usePolygonTool';\nimport { useRectTool } from 'tools/builtin/rect/useRectTool';\nimport { useStarTool } from 'tools/builtin/star/useStarTool';\nimport { useTextTool } from 'tools/builtin/text/useTextTool';\nimport type { AnyTool, FillStyle, InsertToolOptions, LassoHitMode, NodeId, Path, PolygonPath, Scene, SceneNode, Stroke } from '@weasel-js/core';\nimport type { SceneCanvasAdapter } from '../sceneAdapter';\nimport type { BuiltinShapeToolId } from 'core/shapeKinds';\n\n/** Per-tool option overrides for the built-in shape/lasso tools.\n * Each entry is a narrow subset of the underlying hook's options surface\n * — just the knobs that need consumer control under the bundle pattern. */\nexport interface BuiltinToolOptions {\n lasso?: { mode?: LassoHitMode };\n /** Insert-action options for every drag-to-insert tool (rect / ellipse /\n * line / polygon / star / pencil / text): `behaviors` become each insert\n * binding's `opts.behaviors`, the way `selectTool.move.behaviors` do for\n * move. */\n insert?: InsertToolOptions;\n /** Snap world-space points to the active grid (or any other snap target).\n *\n * Registered as the `snap` dep, which `insertAction` applies to the\n * drag start and current point — so the live preview and the committed\n * geometry agree — and which the pen tool reads for its own anchor\n * placement. Covers every drag-to-insert tool (rect / ellipse / line /\n * polygon / star / text); freehand pencil samples are deliberately left\n * unsnapped. */\n snapPoint?: (p: { x: number; y: number }) => { x: number; y: number };\n}\n\n// `BuiltinShapeToolId` / `KIT_SHAPE_KINDS` derive from the `core/shapeKinds`\n// table, a dependency-free module, so barrel-reachable code can reach them\n// without entering this file's `@weasel-js/core` self-import cycle.\n// Re-exported here so existing importers of this module keep working.\nexport { KIT_SHAPE_KINDS } from 'core/shapeKinds';\nexport type { BuiltinShapeToolId } from 'core/shapeKinds';\n\nexport interface UseBuiltinShapeToolsArgs<TData, TLayer extends string, TPose> {\n scene: Scene<TData, TLayer, TPose>;\n adapter: SceneCanvasAdapter<TData, TLayer, TPose>;\n /** Per-tool option overrides (lasso mode, etc.). */\n options?: BuiltinToolOptions;\n}\n\nexport type BuiltinShapeTools = Record<BuiltinShapeToolId, AnyTool>;\n\n/** Synthesize the full shape-tool registry. Hooks always run; consumers\n * decide via `wants(...)` which to register with `useTools`. */\nexport function useBuiltinShapeTools<TData, TLayer extends string, TPose>(\n args: UseBuiltinShapeToolsArgs<TData, TLayer, TPose>,\n): BuiltinShapeTools {\n const { scene, adapter, options } = args;\n\n // Per-canvas counter + fill cycler. Refs survive renders and stay\n // private to the SceneCanvas instance.\n const seqRef = useRef(0);\n const freshId = (prefix: string) => asNodeId(`${prefix}-${++seqRef.current}`);\n const nextFill = () => cycleFill(seqRef.current);\n\n // First system-or-trivial layer is the default insertion layer. Falls back\n // to 'default' when the scene has none yet (rare — useScene synthesizes\n // a 'default' layer when systemLayers is omitted).\n const layerOf = (): TLayer => (scene.layers[0]?.id ?? ('default' as TLayer));\n\n // Helper to build the kit's leaf-node template — `data: { path, fill }`\n // matches PATH_PAINTER's `matches`/`paint` contract. The cast through\n // `unknown` reflects the kit's intentional looseness around TData when\n // synthesized defaults are in play.\n type Pose = { x: number; y: number; width: number; height: number };\n const makeLeaf = (\n id: NodeId,\n pose: Pose,\n data: { path: Path; fill: FillStyle | null; stroke?: Stroke; text?: string },\n ): SceneNode<TData, TLayer, TPose> => ({\n id,\n kind: 'leaf',\n layer: layerOf(),\n pose: pose as unknown as TPose,\n data: data as unknown as TData,\n parent: null,\n });\n\n type LeafNode = SceneNode<TData, TLayer, TPose> & { id: NodeId };\n\n const snapPoint = options?.snapPoint;\n // Every drag-to-insert tool is a declarative shell: the drag is owned by\n // the dispatcher's `insertAction` and the node is minted by the `insert`\n // dep (`useInsertDepSource`). Tool-side `create` factories were removed\n // when the dispatcher took over — consumers wanting custom node\n // factories override the dep, not the tool.\n const insert = options?.insert ?? {};\n const rect = useRectTool(insert);\n const ellipse = useEllipseTool(insert);\n const line = useLineTool(insert);\n const polygon = usePolygonTool(insert);\n const star = useStarTool(insert);\n const pencil = usePencilTool(insert);\n // Pen: takes an opaque \"pose\" carrier (here, the committed PolygonPath +\n // closed flag + AABB) and an addNode/setSelection adapter. We construct\n // the carrier in `wrapPath` and unpack it in `addNode` into a\n // PATH_PAINTER-shaped leaf. (Pen is the one built-in still commiting\n // through its own adapter rather than the `insert` dep — see §4b of the\n // 2026-07-27 inspector handoff.)\n // Editing a committed path is not the pen's job — double-click it to\n // enter anchor-edit mode (see `usePenTool`'s PenScratch docs).\n type PenCarrier = { path: PolygonPath; closed: boolean; bounds: { x: number; y: number; width: number; height: number } };\n const makePenLeaf = (carrier: PenCarrier): LeafNode => {\n const id = freshId('pn');\n const color = nextFill();\n return makeLeaf(id, carrier.bounds, {\n path: carrier.path,\n fill: carrier.closed ? solid(nextFill()) : null,\n stroke: strokeOf(color, 2),\n }) as LeafNode;\n };\n const pen = usePenTool<PenCarrier>({\n snapPoint,\n wrapPath: (path, { closed }): PenCarrier => {\n const b = boundsOfPath(path);\n return { path, closed, bounds: { x: b.x, y: b.y, width: b.width, height: b.height } };\n },\n adapter: {\n addNode: (carrier) => {\n const node = makePenLeaf(carrier);\n adapter.insertNode(node);\n return String(node.id);\n },\n makeNode: (carrier) => makePenLeaf(carrier),\n setSelection: (ids) => adapter.setSelection(ids),\n },\n });\n const lasso = useLassoTool(adapter, options?.lasso ?? {});\n const text = useTextTool(insert);\n return { rect, ellipse, line, polygon, star, pen, pencil, lasso, text };\n}\n"],"mappings":";;;;;;;;;;;;;;;AAkEA,SAAgBA,EACd,GACmB;CACnB,IAAM,EAAE,UAAO,YAAS,eAAYC,GAI9BC,IAASC,EAAO,CAAC,GACjBC,KAAW,MAAmBC,EAAS,GAAGC,EAAO,GAAG,EAAEJ,EAAO,SAAS,GACtEK,UAAiBC,EAAUN,EAAO,OAAO,GAKzCO,UAAyBC,EAAM,OAAO,EAAE,EAAE,MAAO,WAOjDC,KACJ,GACA,GACA,OACqC;EACrC;EACA,MAAM;EACN,OAAOF,EAAQ;EACT;EACA;EACN,QAAQ;CACV,IAIMG,IAAYC,GAAS,WAMrBC,IAASD,GAAS,UAAU,CAAC,GAC7BE,IAAOC,EAAYF,CAAM,GACzBG,IAAUC,EAAeJ,CAAM,GAC/BK,IAAOC,EAAYN,CAAM,GACzBO,IAAUC,EAAeR,CAAM,GAC/BS,IAAOC,EAAYV,CAAM,GACzBW,IAASC,EAAcZ,CAAM,GAU7Ba,KAAe,MAAkC;EACrD,IAAMC,IAAKxB,EAAQ,IAAI,GACjByB,IAAQtB,EAAS;EACvB,OAAOI,EAASiB,GAAIE,EAAQ,QAAQ;GAClC,MAAMA,EAAQ;GACd,MAAMA,EAAQ,SAASC,EAAMxB,EAAS,CAAC,IAAI;GAC3C,QAAQyB,EAASH,GAAO,CAAC;EAC3B,CAAC;CACH;CAmBA,OAAO;EAAE;EAAM;EAAS;EAAM;EAAS;EAAM,KAlBjCI,EAAuB;GACjC;GACA,WAAW,GAAM,EAAE,gBAAyB;IAC1C,IAAMC,IAAIC,EAAaC,CAAI;IAC3B,OAAO;KAAE;KAAM;KAAQ,QAAQ;MAAE,GAAGF,EAAE;MAAG,GAAGA,EAAE;MAAG,OAAOA,EAAE;MAAO,QAAQA,EAAE;KAAO;IAAE;GACtF;GACA,SAAS;IACP,UAAU,MAAY;KACpB,IAAMG,IAAOV,EAAYG,CAAO;KAEhC,OADAQ,EAAQ,WAAWD,CAAI,GAChB,OAAOA,EAAK,EAAE;IACvB;IACA,WAAW,MAAYV,EAAYG,CAAO;IAC1C,eAAe,MAAQQ,EAAQ,aAAaC,CAAG;GACjD;EACF,CAG6C;EAAK;EAAQ,OAF5CC,EAAaF,GAASzB,GAAS,SAAS,CAAC,CAEG;EAAO,MADpD4B,EAAY3B,CACwC;CAAK;AACxE"}
@@ -0,0 +1,75 @@
1
+ import { checkRequirements as e } from "../kitRequirements.js";
2
+ import { useContributionFrameHooks as t } from "./contributionFrameHooks.js";
3
+ import { useEffect as n, useRef as r } from "react";
4
+ import { useActionsRegistry as i, useOffhandAction as a, useOptionalDepRegistry as o } from "@weasel-js/routing/react";
5
+ //#region src/canvas/SceneCanvas/useContributionRoles.ts
6
+ var s = { get: () => void 0 }, c = /* @__PURE__ */ new WeakSet();
7
+ function l(e) {
8
+ switch (e.reason) {
9
+ case "unsatisfied": return `${e.package} ${e.range} (running ${e.running})`;
10
+ case "invalid-range": return `${e.package} "${e.range}", which is not a range this check reads`;
11
+ case "unknown-package": return `${e.package} ${e.range}, but ${e.package} reports no version`;
12
+ }
13
+ }
14
+ function u(t, n) {
15
+ if (n !== "off") for (let r of t) {
16
+ let t = r.requires;
17
+ if (!t || n === "warn" && c.has(t)) continue;
18
+ let i = e(t);
19
+ if (i.length === 0) continue;
20
+ let a = `[weasel] contribution "${r.id}" requires ${i.map(l).join("; ")}.`;
21
+ if (n === "strict") throw Error(a);
22
+ c.add(t), console.warn(a);
23
+ }
24
+ }
25
+ function d(e) {
26
+ return [...Object.values(e.registry), ...e.ambient];
27
+ }
28
+ function f(e) {
29
+ let t = r(/* @__PURE__ */ new Map());
30
+ n(() => {
31
+ for (let [n, r] of t.current) e.has(n) || (r(), t.current.delete(n));
32
+ for (let [n, r] of e) t.current.has(n) || t.current.set(n, r());
33
+ }), n(() => () => {
34
+ for (let e of t.current.values()) e();
35
+ t.current.clear();
36
+ }, []);
37
+ }
38
+ function p(e, r, c = "warn") {
39
+ let l = i(), p = o(), { registry: h, ambient: g } = e;
40
+ n(() => {
41
+ if (!l) return;
42
+ let e = [];
43
+ for (let t of d({
44
+ registry: h,
45
+ ambient: g
46
+ })) for (let n of t.actions ?? []) e.push(l.register(n));
47
+ return () => {
48
+ for (let t of e) t();
49
+ };
50
+ }, [
51
+ l,
52
+ h,
53
+ g
54
+ ]);
55
+ let _ = d(e);
56
+ (c === "strict" || c === "warn" && process.env.NODE_ENV !== "production") && u(_, c);
57
+ let v = p ?? s, y = /* @__PURE__ */ new Map();
58
+ for (let e of _) {
59
+ let t = e.deps;
60
+ t && p && y.set(t, () => m(p, t));
61
+ let n = e.attach;
62
+ n && r && y.set(n, () => n(r, v));
63
+ }
64
+ f(y), t(_, r, v), a(d(e));
65
+ }
66
+ function m(e, t) {
67
+ let n = Object.keys(t).map((n) => e.register(n, t[n]));
68
+ return () => {
69
+ for (let e of n) e();
70
+ };
71
+ }
72
+ //#endregion
73
+ export { d as contributionEntries, p as useContributionRoles };
74
+
75
+ //# sourceMappingURL=useContributionRoles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useContributionRoles.js","names":["NO_DEPS","warnedRequirements","describeMismatch","m","checkEntryRequirements","mode","entry","entries","requires","mismatches","checkRequirements","message","contributionEntries","tools","useKeyedInstall","live","useRef","useEffect","key","teardown","items","install","useContributionRoles","registry","useActionsRegistry","depRegistry","useOptionalDepRegistry","toolRegistry","unregisters","action","u","ambient","versionCheck","reader","installs","deps","registerDeps","attach","api","useContributionFrameHooks","useOffhandAction","name"],"sources":["../../../src/canvas/SceneCanvas/useContributionRoles.ts"],"sourcesContent":["/**\n * `useContributionRoles` — installs the roles of every entry in the tools\n * registry that a surface owns rather than the dispatcher: its actions into the\n * `<ActionsProvider>`, its deps into the dep registry, and its `attach` against\n * the mounted canvas. Views are the fourth such role; `<SceneCanvas>` renders\n * those itself, because a view is a component.\n *\n * Tool hooks run wherever the consumer calls them, which may be outside any\n * registry. Declaring roles on the entry and installing them from in here keeps\n * the tool hook callable from anywhere.\n */\nimport { useEffect, useRef } from 'react';\nimport { useActionsRegistry, useOffhandAction, useOptionalDepRegistry } from '@weasel-js/routing/react';\nimport type { DepRegistry } from '@weasel-js/routing/react';\nimport type { DepName } from 'interactions/actions/depSchema';\nimport type { ToolsApi } from '../../tools/overlayBinding';\nimport type { CanvasExtensionApi } from '../canvasExtension';\nimport type { SurfaceContribution } from '../surfaceContribution';\nimport { checkRequirements, type RequirementMismatch } from '../kitRequirements';\nimport { useContributionFrameHooks } from './contributionFrameHooks';\n\n/** How a surface treats an entry whose `requires` the running kit does not\n * meet: warn in development (the default), throw, or not check. */\nexport type VersionCheck = 'warn' | 'strict' | 'off';\n\nconst NO_DEPS = { get: () => undefined };\nconst warnedRequirements = new WeakSet<object>();\n\nfunction describeMismatch(m: RequirementMismatch): string {\n switch (m.reason) {\n case 'unsatisfied': return `${m.package} ${m.range} (running ${m.running})`;\n case 'invalid-range': return `${m.package} \"${m.range}\", which is not a range this check reads`;\n case 'unknown-package': return `${m.package} ${m.range}, but ${m.package} reports no version`;\n }\n}\n\nfunction checkEntryRequirements(entries: readonly SurfaceContribution[], mode: VersionCheck): void {\n if (mode === 'off') return;\n for (const entry of entries) {\n const requires = entry.requires;\n if (!requires) continue;\n if (mode === 'warn' && warnedRequirements.has(requires)) continue;\n const mismatches = checkRequirements(requires);\n if (mismatches.length === 0) continue;\n const message = `[weasel] contribution \"${entry.id}\" requires ${mismatches.map(describeMismatch).join('; ')}.`;\n if (mode === 'strict') throw new Error(message);\n warnedRequirements.add(requires);\n console.warn(message);\n }\n}\n\n/** Every entry the registry holds, registry and ambient alike. */\nexport function contributionEntries(tools: Pick<ToolsApi, 'registry' | 'ambient'>): SurfaceContribution[] {\n return [...Object.values(tools.registry), ...tools.ambient] as SurfaceContribution[];\n}\n\n/**\n * Keep one installation per key alive: install keys that appeared, tear down\n * keys that went. Keys are role objects the consumer owns, so an entry the\n * host re-wraps every render — `useTools` restates eligibility on a copy —\n * still installs once.\n */\nfunction useKeyedInstall(\n items: ReadonlyMap<object, () => () => void>,\n): void {\n const live = useRef(new Map<object, () => void>());\n useEffect(() => {\n for (const [key, teardown] of live.current) {\n if (items.has(key)) continue;\n teardown();\n live.current.delete(key);\n }\n for (const [key, install] of items) {\n if (live.current.has(key)) continue;\n live.current.set(key, install());\n }\n });\n useEffect(() => () => {\n for (const teardown of live.current.values()) teardown();\n live.current.clear();\n }, []);\n}\n\nexport function useContributionRoles(\n tools: ToolsApi,\n api: CanvasExtensionApi | null,\n versionCheck: VersionCheck = 'warn',\n): void {\n const registry = useActionsRegistry();\n const depRegistry = useOptionalDepRegistry();\n const { registry: toolRegistry, ambient } = tools;\n\n useEffect(() => {\n if (!registry) return;\n const unregisters: Array<() => void> = [];\n // Ambient entries included: an always-on entry owns actions its own\n // bindings reference exactly as a registry tool does, and leaving them out\n // gives the same silent failure this hook exists to prevent — a binding\n // pointing at an id nothing registered.\n for (const entry of contributionEntries({ registry: toolRegistry, ambient })) {\n for (const action of entry.actions ?? []) {\n unregisters.push(registry.register(action));\n }\n }\n return () => { for (const u of unregisters) u(); };\n }, [registry, toolRegistry, ambient]);\n\n const entries = contributionEntries(tools);\n // Development only for a warning; a strict surface asked to be stopped, so\n // it throws in every build.\n if (versionCheck === 'strict' || (versionCheck === 'warn' && process.env.NODE_ENV !== 'production')) {\n checkEntryRequirements(entries, versionCheck);\n }\n\n const reader = depRegistry ?? NO_DEPS;\n const installs = new Map<object, () => () => void>();\n for (const entry of entries) {\n const deps = entry.deps;\n if (deps && depRegistry) installs.set(deps, () => registerDeps(depRegistry, deps));\n const attach = entry.attach;\n if (attach && api) installs.set(attach, () => attach(api, reader));\n }\n useKeyedInstall(installs);\n useContributionFrameHooks(entries, api, reader);\n\n // Tool assembly runs above the provider too, so its own registration of\n // held-key engagement finds no registry unless the consumer mounted one.\n useOffhandAction(contributionEntries(tools));\n}\n\nfunction registerDeps(\n depRegistry: DepRegistry,\n deps: NonNullable<SurfaceContribution['deps']>,\n): () => void {\n const unregisters = (Object.keys(deps) as DepName[]).map((name) =>\n depRegistry.register(name, deps[name] as never));\n return () => { for (const u of unregisters) u(); };\n}\n"],"mappings":"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"}