@weasel-js/core 1.11.0 → 1.11.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 (365) hide show
  1. package/CHANGELOG.md +427 -0
  2. package/README.md +1 -1
  3. package/dist/animation/index.js +3 -3
  4. package/dist/animation/rig/bindRig.js +1 -1
  5. package/dist/animation/rig/rigNode.js.map +1 -1
  6. package/dist/barrel/canvas.js +7 -3
  7. package/dist/barrel/interactions.js +5 -4
  8. package/dist/barrel/paths.js +3 -3
  9. package/dist/barrel/renderer.js +3 -2
  10. package/dist/barrel/routing.js +6 -11
  11. package/dist/barrel/scene.js +8 -5
  12. package/dist/barrel/viewport.js +4 -3
  13. package/dist/canvas/Canvas.js +3 -1
  14. package/dist/canvas/Canvas.js.map +1 -1
  15. package/dist/canvas/SceneCanvas/SceneCanvasInput.js +17 -3
  16. package/dist/canvas/SceneCanvas/SceneCanvasInput.js.map +1 -1
  17. package/dist/canvas/SceneCanvas/builtinToolSets.js +30 -0
  18. package/dist/canvas/SceneCanvas/builtinToolSets.js.map +1 -0
  19. package/dist/canvas/SceneCanvas/canvasPassThrough.js +1 -0
  20. package/dist/canvas/SceneCanvas/canvasPassThrough.js.map +1 -1
  21. package/dist/canvas/SceneCanvas/coordTrace.js +5 -16
  22. package/dist/canvas/SceneCanvas/coordTrace.js.map +1 -1
  23. package/dist/canvas/SceneCanvas/defaultNodeProperties.js +5 -0
  24. package/dist/canvas/SceneCanvas/defaultNodeProperties.js.map +1 -1
  25. package/dist/canvas/SceneCanvas/features.js +45 -5
  26. package/dist/canvas/SceneCanvas/features.js.map +1 -1
  27. package/dist/canvas/SceneCanvas/props.js +1 -11
  28. package/dist/canvas/SceneCanvas/props.js.map +1 -1
  29. package/dist/canvas/SceneCanvas/toolRegistry.js +8 -4
  30. package/dist/canvas/SceneCanvas/toolRegistry.js.map +1 -1
  31. package/dist/canvas/SceneCanvas/useActionsPropResolver.js +1 -11
  32. package/dist/canvas/SceneCanvas/useActionsPropResolver.js.map +1 -1
  33. package/dist/canvas/SceneCanvas/useBuiltinShapeTools.js.map +1 -1
  34. package/dist/canvas/SceneCanvas/useBuiltinTools.js +2 -9
  35. package/dist/canvas/SceneCanvas/useBuiltinTools.js.map +1 -1
  36. package/dist/canvas/SceneCanvas/useCanvasDevtoolsRoot.js +93 -0
  37. package/dist/canvas/SceneCanvas/useCanvasDevtoolsRoot.js.map +1 -0
  38. package/dist/canvas/SceneCanvas/useCanvasSelection.js +7 -2
  39. package/dist/canvas/SceneCanvas/useCanvasSelection.js.map +1 -1
  40. package/dist/canvas/SceneCanvas/useCanvasTools.js +8 -8
  41. package/dist/canvas/SceneCanvas/useCanvasTools.js.map +1 -1
  42. package/dist/canvas/SceneCanvas/useNodeKinds.js +1 -1
  43. package/dist/canvas/SceneCanvas/useNodeKinds.js.map +1 -1
  44. package/dist/canvas/SceneCanvas/useSceneCanvasLayers.js +13 -2
  45. package/dist/canvas/SceneCanvas/useSceneCanvasLayers.js.map +1 -1
  46. package/dist/canvas/SceneCanvas/useSceneCanvasTools.js +1 -3
  47. package/dist/canvas/SceneCanvas/useSceneCanvasTools.js.map +1 -1
  48. package/dist/canvas/SceneCanvas/useSceneChrome.js +6 -7
  49. package/dist/canvas/SceneCanvas/useSceneChrome.js.map +1 -1
  50. package/dist/canvas/SceneCanvas/useSceneGestureDispatcher.js +5 -3
  51. package/dist/canvas/SceneCanvas/useSceneGestureDispatcher.js.map +1 -1
  52. package/dist/canvas/SceneCanvas/useScenePicking.js +2 -3
  53. package/dist/canvas/SceneCanvas/useScenePicking.js.map +1 -1
  54. package/dist/canvas/SceneCanvas/useSceneSelectTool.js +2 -1
  55. package/dist/canvas/SceneCanvas/useSceneSelectTool.js.map +1 -1
  56. package/dist/canvas/SceneCanvas/useSceneStandardActions.js +3 -4
  57. package/dist/canvas/SceneCanvas/useSceneStandardActions.js.map +1 -1
  58. package/dist/canvas/SceneCanvas.js +16 -14
  59. package/dist/canvas/SceneCanvas.js.map +1 -1
  60. package/dist/canvas/SurfaceCanvas.js +5 -22
  61. package/dist/canvas/SurfaceCanvas.js.map +1 -1
  62. package/dist/canvas/canvasRenderer.js +9 -5
  63. package/dist/canvas/canvasRenderer.js.map +1 -1
  64. package/dist/canvas/contextAttributes.js +14 -0
  65. package/dist/canvas/contextAttributes.js.map +1 -0
  66. package/dist/canvas/deps/editAnchors.js +9 -113
  67. package/dist/canvas/deps/editAnchors.js.map +1 -1
  68. package/dist/canvas/deps/insert.js +4 -2
  69. package/dist/canvas/deps/insert.js.map +1 -1
  70. package/dist/canvas/deps/pathEditCommits.js +193 -0
  71. package/dist/canvas/deps/pathEditCommits.js.map +1 -0
  72. package/dist/canvas/deps/snap.js +12 -9
  73. package/dist/canvas/deps/snap.js.map +1 -1
  74. package/dist/canvas/deps/transformFollowers.js +20 -0
  75. package/dist/canvas/deps/transformFollowers.js.map +1 -0
  76. package/dist/canvas/derivedPath.js +20 -1
  77. package/dist/canvas/derivedPath.js.map +1 -1
  78. package/dist/canvas/drawnBounds.js +29 -3
  79. package/dist/canvas/drawnBounds.js.map +1 -1
  80. package/dist/canvas/nodeShapes/derivedPainter.js +9 -1
  81. package/dist/canvas/nodeShapes/derivedPainter.js.map +1 -1
  82. package/dist/canvas/nodeShapes/pathPainter.js +3 -2
  83. package/dist/canvas/nodeShapes/pathPainter.js.map +1 -1
  84. package/dist/canvas/nodeShapes/shapePainter.js +1 -1
  85. package/dist/canvas/overlayRoleStrokes.js +12 -0
  86. package/dist/canvas/overlayRoleStrokes.js.map +1 -1
  87. package/dist/canvas/pathOverlay.js +27 -7
  88. package/dist/canvas/pathOverlay.js.map +1 -1
  89. package/dist/canvas/renderDebugSnapshot.js +1 -0
  90. package/dist/canvas/renderDebugSnapshot.js.map +1 -1
  91. package/dist/canvas/renderSceneToPixels.js +6 -5
  92. package/dist/canvas/renderSceneToPixels.js.map +1 -1
  93. package/dist/canvas/sceneAdapter.js.map +1 -1
  94. package/dist/canvas/useCanvasPaint.js +2 -1
  95. package/dist/canvas/useCanvasPaint.js.map +1 -1
  96. package/dist/canvas/useInFlightBounds.js +52 -0
  97. package/dist/canvas/useInFlightBounds.js.map +1 -0
  98. package/dist/canvas/useViewHelpers.js +7 -9
  99. package/dist/canvas/useViewHelpers.js.map +1 -1
  100. package/dist/clipboard.d.ts +3 -2
  101. package/dist/{clone-DZDrfIlU.d.ts → clone-C3e0OTuF.d.ts} +8 -21
  102. package/dist/clone.d.ts +4 -3
  103. package/dist/core/geometry/autoPoseDescriptor.js +1 -1
  104. package/dist/core/ops/setDependsOn.js +37 -0
  105. package/dist/core/ops/setDependsOn.js.map +1 -0
  106. package/dist/core/ops/writtenBy.js +53 -0
  107. package/dist/core/ops/writtenBy.js.map +1 -0
  108. package/dist/core/pages/fitViewToPage.js +12 -1
  109. package/dist/core/pages/fitViewToPage.js.map +1 -1
  110. package/dist/core/pages/pageEdits.js +164 -0
  111. package/dist/core/pages/pageEdits.js.map +1 -0
  112. package/dist/core/pages/pages.js +30 -1
  113. package/dist/core/pages/pages.js.map +1 -1
  114. package/dist/core/scene/NodeRouting.js +8 -3
  115. package/dist/core/scene/NodeRouting.js.map +1 -1
  116. package/dist/core/scene/arrivalWindow.js.map +1 -1
  117. package/dist/core/scene/carryDescendants.js +51 -0
  118. package/dist/core/scene/carryDescendants.js.map +1 -0
  119. package/dist/core/scene/docValues.js +57 -0
  120. package/dist/core/scene/docValues.js.map +1 -0
  121. package/dist/core/scene/editPass.js +111 -0
  122. package/dist/core/scene/editPass.js.map +1 -0
  123. package/dist/core/scene/effectivePose.js +7 -1
  124. package/dist/core/scene/effectivePose.js.map +1 -1
  125. package/dist/core/scene/fieldEdits.js +4 -1
  126. package/dist/core/scene/fieldEdits.js.map +1 -1
  127. package/dist/core/scene/historyFacade.js +1 -0
  128. package/dist/core/scene/historyFacade.js.map +1 -1
  129. package/dist/core/scene/layoutPass.js +28 -3
  130. package/dist/core/scene/layoutPass.js.map +1 -1
  131. package/dist/core/scene/recorder.js +28 -19
  132. package/dist/core/scene/recorder.js.map +1 -1
  133. package/dist/core/scene/scene.js +15 -9
  134. package/dist/core/scene/scene.js.map +1 -1
  135. package/dist/core/scene/sceneChanges.js +13 -0
  136. package/dist/core/scene/sceneChanges.js.map +1 -0
  137. package/dist/core/scene/sceneEdits.js +8 -1
  138. package/dist/core/scene/sceneEdits.js.map +1 -1
  139. package/dist/core/scene/sceneMutators.js +1 -0
  140. package/dist/core/scene/sceneMutators.js.map +1 -1
  141. package/dist/core/scene/sceneRecording.js +20 -3
  142. package/dist/core/scene/sceneRecording.js.map +1 -1
  143. package/dist/core/scene/sceneSelection.js +4 -1
  144. package/dist/core/scene/sceneSelection.js.map +1 -1
  145. package/dist/core/scene/sceneState.js +11 -5
  146. package/dist/core/scene/sceneState.js.map +1 -1
  147. package/dist/core/scene/serialization.js +5 -3
  148. package/dist/core/scene/serialization.js.map +1 -1
  149. package/dist/core/scene/types.js.map +1 -1
  150. package/dist/core/scene/unitScopes.js +19 -1
  151. package/dist/core/scene/unitScopes.js.map +1 -1
  152. package/dist/core/selection/usePublishSceneSelection.js +6 -12
  153. package/dist/core/selection/usePublishSceneSelection.js.map +1 -1
  154. package/dist/core/shapeKinds.js +25 -11
  155. package/dist/core/shapeKinds.js.map +1 -1
  156. package/dist/{cornerHandles-Camw_yeu.d.ts → cornerHandles-BHuoMs1o.d.ts} +1 -1
  157. package/dist/debug/createDebugOverlayLayer.js +16 -111
  158. package/dist/debug/createDebugOverlayLayer.js.map +1 -1
  159. package/dist/debug/createDebugSink.js +2 -1
  160. package/dist/debug/createDebugSink.js.map +1 -1
  161. package/dist/debug/defaultTheme.js +4 -2
  162. package/dist/debug/defaultTheme.js.map +1 -1
  163. package/dist/debug/features.js +17 -0
  164. package/dist/debug/features.js.map +1 -0
  165. package/dist/debug/overlayPanels.js +117 -0
  166. package/dist/debug/overlayPanels.js.map +1 -0
  167. package/dist/debug/parseDebugFlags.js +4 -13
  168. package/dist/debug/parseDebugFlags.js.map +1 -1
  169. package/dist/{depSchema-Cgfu_G9s.d.ts → depSchema-BpZNOv7q.d.ts} +114 -892
  170. package/dist/devtools/handlers.js +112 -0
  171. package/dist/devtools/handlers.js.map +1 -0
  172. package/dist/devtools/history.js +71 -0
  173. package/dist/devtools/history.js.map +1 -0
  174. package/dist/devtools/hook.js +74 -0
  175. package/dist/devtools/hook.js.map +1 -0
  176. package/dist/devtools/label.js +25 -0
  177. package/dist/devtools/label.js.map +1 -0
  178. package/dist/devtools/notices.js +58 -0
  179. package/dist/devtools/notices.js.map +1 -0
  180. package/dist/devtools/protocol.js +7 -0
  181. package/dist/devtools/protocol.js.map +1 -0
  182. package/dist/devtools/registry.js +90 -0
  183. package/dist/devtools/registry.js.map +1 -0
  184. package/dist/devtools/root.js +80 -0
  185. package/dist/devtools/root.js.map +1 -0
  186. package/dist/devtools/serialize.js +86 -0
  187. package/dist/devtools/serialize.js.map +1 -0
  188. package/dist/devtools/session.js +111 -0
  189. package/dist/devtools/session.js.map +1 -0
  190. package/dist/devtools/transport.js +67 -0
  191. package/dist/devtools/transport.js.map +1 -0
  192. package/dist/devtools/useDevtoolsRoot.js +81 -0
  193. package/dist/devtools/useDevtoolsRoot.js.map +1 -0
  194. package/dist/devtools-protocol.d.ts +435 -0
  195. package/dist/devtools-protocol.js +7 -0
  196. package/dist/devtools.d.ts +8 -0
  197. package/dist/devtools.js +12 -0
  198. package/dist/devtools.js.map +1 -0
  199. package/dist/features/chrome-caps/useHoverTracking.js +16 -10
  200. package/dist/features/chrome-caps/useHoverTracking.js.map +1 -1
  201. package/dist/features/ingestion/contentHandlers.js +25 -2
  202. package/dist/features/ingestion/contentHandlers.js.map +1 -1
  203. package/dist/features/measure/measureCommands.js +7 -5
  204. package/dist/features/measure/measureCommands.js.map +1 -1
  205. package/dist/features/paths/index.js +2 -2
  206. package/dist/features/paths/pathEditExtension.js.map +1 -1
  207. package/dist/features/paths/pathSnap/pathSnapSource.js +5 -5
  208. package/dist/features/paths/pathSnap/pathSnapSource.js.map +1 -1
  209. package/dist/features/paths/pathSnap/sceneIndex.js +10 -3
  210. package/dist/features/paths/pathSnap/sceneIndex.js.map +1 -1
  211. package/dist/features/selection/selectionPose.js +4 -1
  212. package/dist/features/selection/selectionPose.js.map +1 -1
  213. package/dist/features/snap/gather.js +9 -1
  214. package/dist/features/snap/gather.js.map +1 -1
  215. package/dist/features/snap/lazySession.js +17 -0
  216. package/dist/features/snap/lazySession.js.map +1 -0
  217. package/dist/features/snap/marks.js.map +1 -1
  218. package/dist/features/snap/probes2d.js +27 -19
  219. package/dist/features/snap/probes2d.js.map +1 -1
  220. package/dist/features/snap/readoutLayer.js.map +1 -1
  221. package/dist/features/snap/roles.js +2 -1
  222. package/dist/features/snap/roles.js.map +1 -1
  223. package/dist/features/snap/rotationSource.js +25 -8
  224. package/dist/features/snap/rotationSource.js.map +1 -1
  225. package/dist/features/snap/sceneSession2d.js +6 -4
  226. package/dist/features/snap/sceneSession2d.js.map +1 -1
  227. package/dist/features/snap/session2d.js +37 -23
  228. package/dist/features/snap/session2d.js.map +1 -1
  229. package/dist/features/snap/spanSnap.js +5 -2
  230. package/dist/features/snap/spanSnap.js.map +1 -1
  231. package/dist/icons.table.js +1 -1
  232. package/dist/icons.table.js.map +1 -1
  233. package/dist/icons.table.json +0 -10
  234. package/dist/index.d.ts +701 -696
  235. package/dist/index.js +35 -29
  236. package/dist/interactions/actions/align/action.js +6 -4
  237. package/dist/interactions/actions/align/action.js.map +1 -1
  238. package/dist/interactions/actions/align/align.js.map +1 -1
  239. package/dist/interactions/actions/booleans/action.js +7 -1
  240. package/dist/interactions/actions/booleans/action.js.map +1 -1
  241. package/dist/interactions/actions/clone/action.js +1 -1
  242. package/dist/interactions/actions/clone/behaviors.js +4 -4
  243. package/dist/interactions/actions/clone/behaviors.js.map +1 -1
  244. package/dist/interactions/actions/defaults/bendSegment.js +1 -1
  245. package/dist/interactions/actions/defaults/bendSegment.js.map +1 -1
  246. package/dist/interactions/actions/defaults/createPaintAction.js +1 -1
  247. package/dist/interactions/actions/defaults/delete.js +48 -39
  248. package/dist/interactions/actions/defaults/delete.js.map +1 -1
  249. package/dist/interactions/actions/defaults/duplicate.js +1 -1
  250. package/dist/interactions/actions/defaults/group.js +2 -2
  251. package/dist/interactions/actions/defaults/ingest.js +7 -5
  252. package/dist/interactions/actions/defaults/ingest.js.map +1 -1
  253. package/dist/interactions/actions/defaults/nudge.js +13 -38
  254. package/dist/interactions/actions/defaults/nudge.js.map +1 -1
  255. package/dist/interactions/actions/distribute/action.js +6 -4
  256. package/dist/interactions/actions/distribute/action.js.map +1 -1
  257. package/dist/interactions/actions/drawnBoxes.js +2 -1
  258. package/dist/interactions/actions/drawnBoxes.js.map +1 -1
  259. package/dist/interactions/actions/edit-anchors/action.js +3 -6
  260. package/dist/interactions/actions/edit-anchors/action.js.map +1 -1
  261. package/dist/interactions/actions/edit-anchors/preview.js +41 -8
  262. package/dist/interactions/actions/edit-anchors/preview.js.map +1 -1
  263. package/dist/interactions/actions/flip/action.js +6 -4
  264. package/dist/interactions/actions/flip/action.js.map +1 -1
  265. package/dist/interactions/actions/gestureLifecycle.js +5 -2
  266. package/dist/interactions/actions/gestureLifecycle.js.map +1 -1
  267. package/dist/interactions/actions/insert/action.js +1 -2
  268. package/dist/interactions/actions/insert/action.js.map +1 -1
  269. package/dist/interactions/actions/insert/commit.js +1 -1
  270. package/dist/interactions/actions/insert/parent.js +11 -0
  271. package/dist/interactions/actions/insert/parent.js.map +1 -0
  272. package/dist/interactions/actions/insert/placeAction.js +7 -2
  273. package/dist/interactions/actions/insert/placeAction.js.map +1 -1
  274. package/dist/interactions/actions/insert/session.js +5 -1
  275. package/dist/interactions/actions/insert/session.js.map +1 -1
  276. package/dist/interactions/actions/move/action.js +8 -4
  277. package/dist/interactions/actions/move/action.js.map +1 -1
  278. package/dist/interactions/actions/move/behaviors/layoutDrop.js +0 -1
  279. package/dist/interactions/actions/move/behaviors/layoutDrop.js.map +1 -1
  280. package/dist/interactions/actions/move/behaviors/snapToContainer.js +1 -1
  281. package/dist/interactions/actions/move/capture.js +1 -1
  282. package/dist/interactions/actions/move/commit/index.js +0 -2
  283. package/dist/interactions/actions/move/commit/index.js.map +1 -1
  284. package/dist/interactions/actions/move/commit/layoutDrop.js +2 -2
  285. package/dist/interactions/actions/move/commit/layoutRelease.js +2 -2
  286. package/dist/interactions/actions/move/commit/reparent.js +11 -5
  287. package/dist/interactions/actions/move/commit/reparent.js.map +1 -1
  288. package/dist/interactions/actions/move/frame.js +4 -10
  289. package/dist/interactions/actions/move/frame.js.map +1 -1
  290. package/dist/interactions/actions/move/landedDescendants.js +20 -17
  291. package/dist/interactions/actions/move/landedDescendants.js.map +1 -1
  292. package/dist/interactions/actions/move/layout/container.js +2 -1
  293. package/dist/interactions/actions/move/layout/container.js.map +1 -1
  294. package/dist/interactions/actions/move/layout/dragged.js +1 -1
  295. package/dist/interactions/actions/move/layout/dropPass.js +18 -1
  296. package/dist/interactions/actions/move/layout/dropPass.js.map +1 -1
  297. package/dist/interactions/actions/move/layout/exits.js +5 -5
  298. package/dist/interactions/actions/move/layout/exits.js.map +1 -1
  299. package/dist/interactions/actions/move/session.js +14 -3
  300. package/dist/interactions/actions/move/session.js.map +1 -1
  301. package/dist/interactions/actions/move/translate.js +8 -37
  302. package/dist/interactions/actions/move/translate.js.map +1 -1
  303. package/dist/interactions/actions/moveNodes.js +87 -0
  304. package/dist/interactions/actions/moveNodes.js.map +1 -0
  305. package/dist/interactions/actions/planeInput.js.map +1 -1
  306. package/dist/interactions/actions/resize/action.js +83 -72
  307. package/dist/interactions/actions/resize/action.js.map +1 -1
  308. package/dist/interactions/actions/resize/commit.js +2 -1
  309. package/dist/interactions/actions/resize/commit.js.map +1 -1
  310. package/dist/interactions/actions/resize/session.js +2 -0
  311. package/dist/interactions/actions/resize/session.js.map +1 -1
  312. package/dist/interactions/actions/resolvePreviews.js +3 -3
  313. package/dist/interactions/actions/resolvePreviews.js.map +1 -1
  314. package/dist/interactions/actions/rotate/action.js +7 -4
  315. package/dist/interactions/actions/rotate/action.js.map +1 -1
  316. package/dist/interactions/actions/rotate/commit.js +2 -1
  317. package/dist/interactions/actions/rotate/commit.js.map +1 -1
  318. package/dist/interactions/actions/rotate/session.js +2 -0
  319. package/dist/interactions/actions/rotate/session.js.map +1 -1
  320. package/dist/interactions/actions/selectionSubtree.js +13 -2
  321. package/dist/interactions/actions/selectionSubtree.js.map +1 -1
  322. package/dist/interactions/actions/testUtils.js.map +1 -1
  323. package/dist/interactions/actions/transform-again/action.js +5 -6
  324. package/dist/interactions/actions/transform-again/action.js.map +1 -1
  325. package/dist/interactions/actions/transformFinish.js +106 -0
  326. package/dist/interactions/actions/transformFinish.js.map +1 -0
  327. package/dist/kitSettingsSchema.js +0 -4
  328. package/dist/kitSettingsSchema.js.map +1 -1
  329. package/dist/move.d.ts +5 -4
  330. package/dist/{options-p9GZMXbY.d.ts → options-DBxEryYq.d.ts} +1 -1
  331. package/dist/resize.d.ts +4 -3
  332. package/dist/routing.d.ts +1 -1
  333. package/dist/routing.js +2 -2
  334. package/dist/test-hook/createTestHook.js +1 -1
  335. package/dist/test-hook/createTestHook.js.map +1 -1
  336. package/dist/test-hook/useTestHook.js +2 -1
  337. package/dist/test-hook/useTestHook.js.map +1 -1
  338. package/dist/test-seams.d.ts +9 -5
  339. package/dist/tools/builtin/pen/penHandle.js +3 -5
  340. package/dist/tools/builtin/pen/penHandle.js.map +1 -1
  341. package/dist/tools/index.js +26 -0
  342. package/dist/{types-CHVXGfYm.d.ts → types-7puAuVD2.d.ts} +3 -262
  343. package/dist/types-BN9hbdMI.d.ts +184 -0
  344. package/dist/types-CniVctmk.d.ts +949 -0
  345. package/dist/types-oFeQ5VjV.d.ts +264 -0
  346. package/dist/version.js +1 -1
  347. package/package.json +35 -25
  348. package/dist/canvas/SceneCanvas/useBuiltinRigTools.js +0 -65
  349. package/dist/canvas/SceneCanvas/useBuiltinRigTools.js.map +0 -1
  350. package/dist/tools/builtin/bone/boneActions.js +0 -156
  351. package/dist/tools/builtin/bone/boneActions.js.map +0 -1
  352. package/dist/tools/builtin/bone/boneOverlay.js +0 -71
  353. package/dist/tools/builtin/bone/boneOverlay.js.map +0 -1
  354. package/dist/tools/builtin/bone/placedRig.js +0 -28
  355. package/dist/tools/builtin/bone/placedRig.js.map +0 -1
  356. package/dist/tools/builtin/bone/rigEditState.js +0 -30
  357. package/dist/tools/builtin/bone/rigEditState.js.map +0 -1
  358. package/dist/tools/builtin/bone/useBoneTool.js +0 -125
  359. package/dist/tools/builtin/bone/useBoneTool.js.map +0 -1
  360. package/dist/tools/builtin/weight/useWeightTool.js +0 -101
  361. package/dist/tools/builtin/weight/useWeightTool.js.map +0 -1
  362. package/dist/tools/builtin/weight/weightActions.js +0 -140
  363. package/dist/tools/builtin/weight/weightActions.js.map +0 -1
  364. package/dist/tools/builtin/weight/weightOverlay.js +0 -78
  365. package/dist/tools/builtin/weight/weightOverlay.js.map +0 -1
@@ -0,0 +1,86 @@
1
+ //#region src/devtools/serialize.ts
2
+ var TYPED = [
3
+ Int8Array,
4
+ Uint8Array,
5
+ Uint8ClampedArray,
6
+ Int16Array,
7
+ Uint16Array,
8
+ Int32Array,
9
+ Uint32Array,
10
+ Float32Array,
11
+ Float64Array,
12
+ BigInt64Array,
13
+ BigUint64Array
14
+ ];
15
+ var tagOf = (value) => Object.prototype.toString.call(value).slice(8, -1);
16
+ function isTyped(value) {
17
+ return ArrayBuffer.isView(value) && !(value instanceof DataView) && TYPED.some((T) => tagOf(value) === T.name);
18
+ }
19
+ /** `value` as plain data: functions as `ƒ name`, typed arrays as their type and
20
+ * length, maps and sets tagged, cycles marked, and every size capped. */
21
+ function serialize(value, limits = {}) {
22
+ const depth = limits.depth ?? 6;
23
+ const items = limits.items ?? 100;
24
+ const chars = limits.chars ?? 1e3;
25
+ const open = /* @__PURE__ */ new Set();
26
+ const cut = (count) => `… ${count - items} more`;
27
+ const walk = (v, level) => {
28
+ switch (typeof v) {
29
+ case "string": return v.length > chars ? `${v.slice(0, chars)}…` : v;
30
+ case "number": return Number.isFinite(v) ? v : String(v);
31
+ case "boolean": return v;
32
+ case "undefined": return;
33
+ case "bigint": return `${v}n`;
34
+ case "symbol": return v.toString();
35
+ case "function": return `ƒ ${v.name || "anonymous"}`;
36
+ }
37
+ if (v === null) return null;
38
+ const obj = v;
39
+ if (open.has(obj)) return "[cycle]";
40
+ if (level >= depth) return "…";
41
+ if (isTyped(obj)) return {
42
+ $type: tagOf(obj),
43
+ length: obj.length
44
+ };
45
+ if (obj instanceof Date || tagOf(obj) === "Date") return {
46
+ $type: "Date",
47
+ value: obj.toISOString()
48
+ };
49
+ open.add(obj);
50
+ try {
51
+ if (Array.isArray(obj)) {
52
+ const out = obj.slice(0, items).map((x) => walk(x, level + 1));
53
+ if (obj.length > items) out.push(cut(obj.length));
54
+ return out;
55
+ }
56
+ const tag = tagOf(obj);
57
+ if (tag === "Map" || tag === "Set") {
58
+ const all = tag === "Map" ? [...obj] : [...obj];
59
+ const entries = all.slice(0, items).map((x) => walk(x, level + 1));
60
+ if (all.length > items) entries.push(cut(all.length));
61
+ return {
62
+ $type: tag,
63
+ size: all.length,
64
+ entries
65
+ };
66
+ }
67
+ const out = {};
68
+ const proto = Object.getPrototypeOf(obj);
69
+ if (proto !== null && proto !== Object.prototype && tag === "Object") {
70
+ const name = proto.constructor?.name;
71
+ if (name && name !== "Object") out.$class = name;
72
+ }
73
+ const keys = Object.keys(obj);
74
+ for (const key of keys.slice(0, items)) out[key] = walk(obj[key], level + 1);
75
+ if (keys.length > items) out["…"] = cut(keys.length);
76
+ return out;
77
+ } finally {
78
+ open.delete(obj);
79
+ }
80
+ };
81
+ return walk(value, 0);
82
+ }
83
+
84
+ //#endregion
85
+ export { serialize };
86
+ //# sourceMappingURL=serialize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serialize.js","names":[],"sources":["../../src/devtools/serialize.ts"],"sourcesContent":["/**\n * Turn any value into plain data a panel can display. A node's `data` is the\n * app's own type, so nothing here assumes it is JSON-safe.\n */\n\n/** What {@link serialize} produces: JSON-safe apart from `undefined`, which structured clone carries. */\nexport type SerializedValue =\n | string | number | boolean | null | undefined\n | SerializedValue[]\n | { [key: string]: SerializedValue };\n\n/** How much of a value {@link serialize} writes out. */\nexport interface SerializeLimits {\n /** Nesting below this depth is written as `'…'`. */\n depth?: number;\n /** Array, map, set and object entries past this many are cut, with a note of how many. */\n items?: number;\n /** Strings longer than this are cut. */\n chars?: number;\n}\n\nconst TYPED = [\n Int8Array, Uint8Array, Uint8ClampedArray, Int16Array, Uint16Array,\n Int32Array, Uint32Array, Float32Array, Float64Array, BigInt64Array, BigUint64Array,\n];\n\nconst tagOf = (value: object): string => Object.prototype.toString.call(value).slice(8, -1);\n\nfunction isTyped(value: object): value is ArrayBufferView {\n return ArrayBuffer.isView(value) && !(value instanceof DataView)\n && TYPED.some((T) => tagOf(value) === T.name);\n}\n\n/** `value` as plain data: functions as `ƒ name`, typed arrays as their type and\n * length, maps and sets tagged, cycles marked, and every size capped. */\nexport function serialize(value: unknown, limits: SerializeLimits = {}): SerializedValue {\n const depth = limits.depth ?? 6;\n const items = limits.items ?? 100;\n const chars = limits.chars ?? 1000;\n const open = new Set<object>();\n\n const cut = (count: number): string => `… ${count - items} more`;\n\n const walk = (v: unknown, level: number): SerializedValue => {\n switch (typeof v) {\n case 'string': return v.length > chars ? `${v.slice(0, chars)}…` : v;\n case 'number': return Number.isFinite(v) ? v : String(v);\n case 'boolean': return v;\n case 'undefined': return undefined;\n case 'bigint': return `${v}n`;\n case 'symbol': return v.toString();\n case 'function': return `ƒ ${v.name || 'anonymous'}`;\n }\n if (v === null) return null;\n const obj = v as object;\n if (open.has(obj)) return '[cycle]';\n if (level >= depth) return '…';\n if (isTyped(obj)) return { $type: tagOf(obj), length: (obj as unknown as { length: number }).length };\n if (obj instanceof Date || tagOf(obj) === 'Date') return { $type: 'Date', value: (obj as Date).toISOString() };\n open.add(obj);\n try {\n if (Array.isArray(obj)) {\n const out = obj.slice(0, items).map((x) => walk(x, level + 1));\n if (obj.length > items) out.push(cut(obj.length));\n return out;\n }\n const tag = tagOf(obj);\n if (tag === 'Map' || tag === 'Set') {\n const all = tag === 'Map' ? [...(obj as Map<unknown, unknown>)] : [...(obj as Set<unknown>)];\n const entries = all.slice(0, items).map((x) => walk(x, level + 1));\n if (all.length > items) entries.push(cut(all.length));\n return { $type: tag, size: all.length, entries };\n }\n const out: { [key: string]: SerializedValue } = {};\n const proto = Object.getPrototypeOf(obj) as object | null;\n if (proto !== null && proto !== Object.prototype && tag === 'Object') {\n const name = (proto.constructor as { name?: string } | undefined)?.name;\n if (name && name !== 'Object') out.$class = name;\n }\n const keys = Object.keys(obj);\n for (const key of keys.slice(0, items)) out[key] = walk((obj as Record<string, unknown>)[key], level + 1);\n if (keys.length > items) out['…'] = cut(keys.length);\n return out;\n } finally {\n open.delete(obj);\n }\n };\n\n return walk(value, 0);\n}\n"],"mappings":";AAqBA,IAAM,QAAQ;CACZ;CAAW;CAAY;CAAmB;CAAY;CACtD;CAAY;CAAa;CAAc;CAAc;CAAe;AACtE;AAEA,IAAM,SAAS,UAA0B,OAAO,UAAU,SAAS,KAAK,KAAK,CAAC,CAAC,MAAM,GAAG,EAAE;AAE1F,SAAS,QAAQ,OAAyC;CACxD,OAAO,YAAY,OAAO,KAAK,KAAK,EAAE,iBAAiB,aAClD,MAAM,MAAM,MAAM,MAAM,KAAK,MAAM,EAAE,IAAI;AAChD;;;AAIA,SAAgB,UAAU,OAAgB,SAA0B,CAAC,GAAoB;CACvF,MAAM,QAAQ,OAAO,SAAS;CAC9B,MAAM,QAAQ,OAAO,SAAS;CAC9B,MAAM,QAAQ,OAAO,SAAS;CAC9B,MAAM,uBAAO,IAAI,IAAY;CAE7B,MAAM,OAAO,UAA0B,KAAK,QAAQ,MAAM;CAE1D,MAAM,QAAQ,GAAY,UAAmC;EAC3D,QAAQ,OAAO,GAAf;GACE,KAAK,UAAU,OAAO,EAAE,SAAS,QAAQ,GAAG,EAAE,MAAM,GAAG,KAAK,EAAE,KAAK;GACnE,KAAK,UAAU,OAAO,OAAO,SAAS,CAAC,IAAI,IAAI,OAAO,CAAC;GACvD,KAAK,WAAW,OAAO;GACvB,KAAK,aAAa;GAClB,KAAK,UAAU,OAAO,GAAG,EAAE;GAC3B,KAAK,UAAU,OAAO,EAAE,SAAS;GACjC,KAAK,YAAY,OAAO,KAAK,EAAE,QAAQ;EACzC;EACA,IAAI,MAAM,MAAM,OAAO;EACvB,MAAM,MAAM;EACZ,IAAI,KAAK,IAAI,GAAG,GAAG,OAAO;EAC1B,IAAI,SAAS,OAAO,OAAO;EAC3B,IAAI,QAAQ,GAAG,GAAG,OAAO;GAAE,OAAO,MAAM,GAAG;GAAG,QAAS,IAAsC;EAAO;EACpG,IAAI,eAAe,QAAQ,MAAM,GAAG,MAAM,QAAQ,OAAO;GAAE,OAAO;GAAQ,OAAQ,IAAa,YAAY;EAAE;EAC7G,KAAK,IAAI,GAAG;EACZ,IAAI;GACF,IAAI,MAAM,QAAQ,GAAG,GAAG;IACtB,MAAM,MAAM,IAAI,MAAM,GAAG,KAAK,CAAC,CAAC,KAAK,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC;IAC7D,IAAI,IAAI,SAAS,OAAO,IAAI,KAAK,IAAI,IAAI,MAAM,CAAC;IAChD,OAAO;GACT;GACA,MAAM,MAAM,MAAM,GAAG;GACrB,IAAI,QAAQ,SAAS,QAAQ,OAAO;IAClC,MAAM,MAAM,QAAQ,QAAQ,CAAC,GAAI,GAA6B,IAAI,CAAC,GAAI,GAAoB;IAC3F,MAAM,UAAU,IAAI,MAAM,GAAG,KAAK,CAAC,CAAC,KAAK,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC;IACjE,IAAI,IAAI,SAAS,OAAO,QAAQ,KAAK,IAAI,IAAI,MAAM,CAAC;IACpD,OAAO;KAAE,OAAO;KAAK,MAAM,IAAI;KAAQ;IAAQ;GACjD;GACA,MAAM,MAA0C,CAAC;GACjD,MAAM,QAAQ,OAAO,eAAe,GAAG;GACvC,IAAI,UAAU,QAAQ,UAAU,OAAO,aAAa,QAAQ,UAAU;IACpE,MAAM,OAAQ,MAAM,aAA+C;IACnE,IAAI,QAAQ,SAAS,UAAU,IAAI,SAAS;GAC9C;GACA,MAAM,OAAO,OAAO,KAAK,GAAG;GAC5B,KAAK,MAAM,OAAO,KAAK,MAAM,GAAG,KAAK,GAAG,IAAI,OAAO,KAAM,IAAgC,MAAM,QAAQ,CAAC;GACxG,IAAI,KAAK,SAAS,OAAO,IAAI,OAAO,IAAI,KAAK,MAAM;GACnD,OAAO;EACT,UAAU;GACR,KAAK,OAAO,GAAG;EACjB;CACF;CAEA,OAAO,KAAK,OAAO,CAAC;AACtB"}
@@ -0,0 +1,111 @@
1
+ import { VERSION } from "../version.js";
2
+ import { DEVTOOLS_PROTOCOL } from "./protocol.js";
3
+ import { answer } from "./handlers.js";
4
+ import { createNotices } from "./notices.js";
5
+
6
+ //#region src/devtools/session.ts
7
+ /**
8
+ * One panel's connection to the page: the handshake, every request, the
9
+ * change notices, and the overrides the panel holds, which go when it does.
10
+ */
11
+ function openSession(host, transport) {
12
+ const send = (m) => transport.send(m);
13
+ const fail = (requestId, message) => send({
14
+ type: "error",
15
+ protocol: DEVTOOLS_PROTOCOL,
16
+ requestId,
17
+ message
18
+ });
19
+ let greeted = false;
20
+ let closed = false;
21
+ const notices = createNotices(host.root, host.schedule, (m) => {
22
+ if (!closed) send(m);
23
+ });
24
+ const overrides = /* @__PURE__ */ new Map();
25
+ const dropOverride = (rootId) => {
26
+ if (overrides.delete(rootId)) host.root(rootId)?.source.setOverride(null);
27
+ };
28
+ const steer = (root, change) => {
29
+ const prev = overrides.get(root.id) ?? {
30
+ overlays: {},
31
+ highlight: []
32
+ };
33
+ const next = {
34
+ overlays: change.overlays ? {
35
+ ...prev.overlays,
36
+ ...change.overlays
37
+ } : prev.overlays,
38
+ highlight: change.highlight ?? prev.highlight
39
+ };
40
+ overrides.set(root.id, next);
41
+ root.source.setOverride(next);
42
+ };
43
+ const offRoots = host.onRoots((event) => {
44
+ if (!greeted) return;
45
+ if ("added" in event) {
46
+ notices.follow(event.added);
47
+ send({
48
+ type: "root-added",
49
+ protocol: DEVTOOLS_PROTOCOL,
50
+ root: event.added.info()
51
+ });
52
+ } else {
53
+ notices.unfollow(event.removed);
54
+ dropOverride(event.removed);
55
+ send({
56
+ type: "root-removed",
57
+ protocol: DEVTOOLS_PROTOCOL,
58
+ rootId: event.removed
59
+ });
60
+ }
61
+ });
62
+ const close = () => {
63
+ if (closed) return;
64
+ closed = true;
65
+ offRoots();
66
+ for (const rootId of notices.ids()) notices.unfollow(rootId);
67
+ for (const rootId of [...overrides.keys()]) dropOverride(rootId);
68
+ };
69
+ const greet = () => {
70
+ greeted = true;
71
+ for (const root of host.roots()) notices.follow(root);
72
+ send({
73
+ type: "sup",
74
+ protocol: DEVTOOLS_PROTOCOL,
75
+ kitVersion: VERSION,
76
+ roots: host.roots().map((r) => r.info())
77
+ });
78
+ };
79
+ return {
80
+ receive(message) {
81
+ if (closed) return;
82
+ const requestId = "requestId" in message ? message.requestId : null;
83
+ if (message.protocol !== DEVTOOLS_PROTOCOL) {
84
+ fail(requestId, `protocol mismatch: the page speaks ${DEVTOOLS_PROTOCOL}, the panel ${String(message.protocol)}`);
85
+ return;
86
+ }
87
+ if (message.type === "yo") return greet();
88
+ if (message.type === "bye") return close();
89
+ if (!greeted) return fail(requestId, "send yo before any request");
90
+ const root = host.root(message.rootId);
91
+ if (!root) return fail(requestId, `no root "${message.rootId}"`);
92
+ let result;
93
+ try {
94
+ result = answer(root, message, (change) => steer(root, change));
95
+ } catch (err) {
96
+ return fail(requestId, err.message);
97
+ }
98
+ send({
99
+ type: "result",
100
+ protocol: DEVTOOLS_PROTOCOL,
101
+ requestId: message.requestId,
102
+ result
103
+ });
104
+ },
105
+ close
106
+ };
107
+ }
108
+
109
+ //#endregion
110
+ export { openSession };
111
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","names":[],"sources":["../../src/devtools/session.ts"],"sourcesContent":["/**\n * One panel's connection to the page: the handshake, every request, the\n * change notices, and the overrides the panel holds, which go when it does.\n */\nimport { VERSION } from '../version';\nimport { answer } from './handlers';\nimport { createNotices, type DevtoolsSchedule } from './notices';\nimport {\n DEVTOOLS_PROTOCOL, type DevtoolsOverlays, type DevtoolsResult, type PageMessage, type PanelMessage,\n} from './protocol';\nimport type { DevtoolsRoot } from './root';\nimport type { PageTransport } from './transport';\n\nexport type { DevtoolsSchedule };\n\n/** What a session needs from the hook. */\nexport interface SessionHost {\n roots(): readonly DevtoolsRoot[];\n root(id: string): DevtoolsRoot | undefined;\n /** Hear roots come and go. Returns the unsubscribe. */\n onRoots(listener: (event: { added: DevtoolsRoot } | { removed: string }) => void): () => void;\n schedule: DevtoolsSchedule;\n}\n\nexport interface DevtoolsSession {\n receive(message: PanelMessage): void;\n close(): void;\n}\n\n/** What one panel lays over one canvas. */\nexport interface Override {\n overlays: DevtoolsOverlays;\n highlight: readonly string[];\n}\n\nexport function openSession(host: SessionHost, transport: PageTransport): DevtoolsSession {\n const send = (m: PageMessage): void => transport.send(m);\n const fail = (requestId: number | null, message: string): void =>\n send({ type: 'error', protocol: DEVTOOLS_PROTOCOL, requestId, message });\n\n let greeted = false;\n let closed = false;\n const notices = createNotices(host.root, host.schedule, (m) => { if (!closed) send(m); });\n const overrides = new Map<string, Override>();\n\n const dropOverride = (rootId: string): void => {\n if (overrides.delete(rootId)) host.root(rootId)?.source.setOverride(null);\n };\n\n const steer = (root: DevtoolsRoot, change: Partial<Override>): void => {\n const prev = overrides.get(root.id) ?? { overlays: {}, highlight: [] };\n const next: Override = {\n overlays: change.overlays ? { ...prev.overlays, ...change.overlays } : prev.overlays,\n highlight: change.highlight ?? prev.highlight,\n };\n overrides.set(root.id, next);\n root.source.setOverride(next);\n };\n\n const offRoots = host.onRoots((event) => {\n if (!greeted) return;\n if ('added' in event) {\n notices.follow(event.added);\n send({ type: 'root-added', protocol: DEVTOOLS_PROTOCOL, root: event.added.info() });\n } else {\n notices.unfollow(event.removed);\n dropOverride(event.removed);\n send({ type: 'root-removed', protocol: DEVTOOLS_PROTOCOL, rootId: event.removed });\n }\n });\n\n const close = (): void => {\n if (closed) return;\n closed = true;\n offRoots();\n for (const rootId of notices.ids()) notices.unfollow(rootId);\n for (const rootId of [...overrides.keys()]) dropOverride(rootId);\n };\n\n const greet = (): void => {\n greeted = true;\n for (const root of host.roots()) notices.follow(root);\n send({ type: 'sup', protocol: DEVTOOLS_PROTOCOL, kitVersion: VERSION, roots: host.roots().map((r) => r.info()) });\n };\n\n return {\n receive(message) {\n if (closed) return;\n const requestId = 'requestId' in message ? message.requestId : null;\n if (message.protocol !== DEVTOOLS_PROTOCOL) {\n fail(requestId, `protocol mismatch: the page speaks ${DEVTOOLS_PROTOCOL}, the panel ${String(message.protocol)}`);\n return;\n }\n if (message.type === 'yo') return greet();\n if (message.type === 'bye') return close();\n if (!greeted) return fail(requestId, 'send yo before any request');\n const root = host.root(message.rootId);\n if (!root) return fail(requestId, `no root \"${message.rootId}\"`);\n let result: DevtoolsResult;\n try {\n result = answer(root, message, (change) => steer(root, change));\n } catch (err) {\n return fail(requestId, (err as Error).message);\n }\n send({ type: 'result', protocol: DEVTOOLS_PROTOCOL, requestId: message.requestId, result });\n },\n close,\n };\n}\n"],"mappings":";;;;;;;;;;AAmCA,SAAgB,YAAY,MAAmB,WAA2C;CACxF,MAAM,QAAQ,MAAyB,UAAU,KAAK,CAAC;CACvD,MAAM,QAAQ,WAA0B,YACtC,KAAK;EAAE,MAAM;EAAS,UAAU;EAAmB;EAAW;CAAQ,CAAC;CAEzE,IAAI,UAAU;CACd,IAAI,SAAS;CACb,MAAM,UAAU,cAAc,KAAK,MAAM,KAAK,WAAW,MAAM;EAAE,IAAI,CAAC,QAAQ,KAAK,CAAC;CAAG,CAAC;CACxF,MAAM,4BAAY,IAAI,IAAsB;CAE5C,MAAM,gBAAgB,WAAyB;EAC7C,IAAI,UAAU,OAAO,MAAM,GAAG,KAAK,KAAK,MAAM,CAAC,EAAE,OAAO,YAAY,IAAI;CAC1E;CAEA,MAAM,SAAS,MAAoB,WAAoC;EACrE,MAAM,OAAO,UAAU,IAAI,KAAK,EAAE,KAAK;GAAE,UAAU,CAAC;GAAG,WAAW,CAAC;EAAE;EACrE,MAAM,OAAiB;GACrB,UAAU,OAAO,WAAW;IAAE,GAAG,KAAK;IAAU,GAAG,OAAO;GAAS,IAAI,KAAK;GAC5E,WAAW,OAAO,aAAa,KAAK;EACtC;EACA,UAAU,IAAI,KAAK,IAAI,IAAI;EAC3B,KAAK,OAAO,YAAY,IAAI;CAC9B;CAEA,MAAM,WAAW,KAAK,SAAS,UAAU;EACvC,IAAI,CAAC,SAAS;EACd,IAAI,WAAW,OAAO;GACpB,QAAQ,OAAO,MAAM,KAAK;GAC1B,KAAK;IAAE,MAAM;IAAc,UAAU;IAAmB,MAAM,MAAM,MAAM,KAAK;GAAE,CAAC;EACpF,OAAO;GACL,QAAQ,SAAS,MAAM,OAAO;GAC9B,aAAa,MAAM,OAAO;GAC1B,KAAK;IAAE,MAAM;IAAgB,UAAU;IAAmB,QAAQ,MAAM;GAAQ,CAAC;EACnF;CACF,CAAC;CAED,MAAM,cAAoB;EACxB,IAAI,QAAQ;EACZ,SAAS;EACT,SAAS;EACT,KAAK,MAAM,UAAU,QAAQ,IAAI,GAAG,QAAQ,SAAS,MAAM;EAC3D,KAAK,MAAM,UAAU,CAAC,GAAG,UAAU,KAAK,CAAC,GAAG,aAAa,MAAM;CACjE;CAEA,MAAM,cAAoB;EACxB,UAAU;EACV,KAAK,MAAM,QAAQ,KAAK,MAAM,GAAG,QAAQ,OAAO,IAAI;EACpD,KAAK;GAAE,MAAM;GAAO,UAAU;GAAmB,YAAY;GAAS,OAAO,KAAK,MAAM,CAAC,CAAC,KAAK,MAAM,EAAE,KAAK,CAAC;EAAE,CAAC;CAClH;CAEA,OAAO;EACL,QAAQ,SAAS;GACf,IAAI,QAAQ;GACZ,MAAM,YAAY,eAAe,UAAU,QAAQ,YAAY;GAC/D,IAAI,QAAQ,aAAa,mBAAmB;IAC1C,KAAK,WAAW,sCAAsC,kBAAkB,cAAc,OAAO,QAAQ,QAAQ,GAAG;IAChH;GACF;GACA,IAAI,QAAQ,SAAS,MAAM,OAAO,MAAM;GACxC,IAAI,QAAQ,SAAS,OAAO,OAAO,MAAM;GACzC,IAAI,CAAC,SAAS,OAAO,KAAK,WAAW,4BAA4B;GACjE,MAAM,OAAO,KAAK,KAAK,QAAQ,MAAM;GACrC,IAAI,CAAC,MAAM,OAAO,KAAK,WAAW,YAAY,QAAQ,OAAO,EAAE;GAC/D,IAAI;GACJ,IAAI;IACF,SAAS,OAAO,MAAM,UAAU,WAAW,MAAM,MAAM,MAAM,CAAC;GAChE,SAAS,KAAK;IACZ,OAAO,KAAK,WAAY,IAAc,OAAO;GAC/C;GACA,KAAK;IAAE,MAAM;IAAU,UAAU;IAAmB,WAAW,QAAQ;IAAW;GAAO,CAAC;EAC5F;EACA;CACF;AACF"}
@@ -0,0 +1,67 @@
1
+ //#region src/devtools/transport.ts
2
+ /** Marks devtools traffic among whatever else a page posts to its window. */
3
+ var DEVTOOLS_ENVELOPE = "weasel-devtools";
4
+ /** Whether a posted message's `data` is devtools traffic. */
5
+ function isDevtoolsEnvelope(data) {
6
+ return typeof data === "object" && data !== null && data.source === DEVTOOLS_ENVELOPE;
7
+ }
8
+ function pair() {
9
+ const toA = /* @__PURE__ */ new Set();
10
+ const toB = /* @__PURE__ */ new Set();
11
+ const listen = (set) => (listener) => {
12
+ set.add(listener);
13
+ return () => {
14
+ set.delete(listener);
15
+ };
16
+ };
17
+ return [{
18
+ send: (m) => {
19
+ for (const l of [...toB]) l(m);
20
+ },
21
+ onMessage: listen(toA)
22
+ }, {
23
+ send: (m) => {
24
+ for (const l of [...toA]) l(m);
25
+ },
26
+ onMessage: listen(toB)
27
+ }];
28
+ }
29
+ /** Both ends of a connection within one page: delivery is a direct, synchronous call. */
30
+ function createInPageTransports() {
31
+ const [page, panel] = pair();
32
+ return {
33
+ page,
34
+ panel
35
+ };
36
+ }
37
+ function windowTransport(side, target) {
38
+ return {
39
+ send(message) {
40
+ const envelope = {
41
+ source: DEVTOOLS_ENVELOPE,
42
+ side,
43
+ message
44
+ };
45
+ target.postMessage(envelope, "*");
46
+ },
47
+ onMessage(listener) {
48
+ const onEvent = (e) => {
49
+ if (isDevtoolsEnvelope(e.data) && e.data.side !== side) listener(e.data.message);
50
+ };
51
+ target.addEventListener("message", onEvent);
52
+ return () => target.removeEventListener("message", onEvent);
53
+ }
54
+ };
55
+ }
56
+ /** The page's end over `window.postMessage`, for an extension's content script. */
57
+ function createWindowPageTransport(target = window) {
58
+ return windowTransport("page", target);
59
+ }
60
+ /** The panel's end over `window.postMessage`: what a content script uses to reach the page. */
61
+ function createWindowPanelTransport(target = window) {
62
+ return windowTransport("panel", target);
63
+ }
64
+
65
+ //#endregion
66
+ export { DEVTOOLS_ENVELOPE, createInPageTransports, createWindowPageTransport, createWindowPanelTransport, isDevtoolsEnvelope };
67
+ //# sourceMappingURL=transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.js","names":[],"sources":["../../src/devtools/transport.ts"],"sourcesContent":["/**\n * How devtools messages travel. A transport sends one side's messages and\n * hears the other side's; the session neither knows nor cares which kind it has.\n */\nimport type { PageMessage, PanelMessage } from './protocol';\n\n/** One end of a connection: it sends `Out` and hears `In`. */\nexport interface DevtoolsTransport<Out, In> {\n send(message: Out): void;\n /** Hear the other side. Returns the unsubscribe. */\n onMessage(listener: (message: In) => void): () => void;\n}\n\n/** The page's end of a connection. */\nexport type PageTransport = DevtoolsTransport<PageMessage, PanelMessage>;\n/** The panel's end of a connection. */\nexport type PanelTransport = DevtoolsTransport<PanelMessage, PageMessage>;\n\n/** Marks devtools traffic among whatever else a page posts to its window. */\nexport const DEVTOOLS_ENVELOPE = 'weasel-devtools';\n\n/** A devtools message as posted to a window. */\nexport interface DevtoolsEnvelope {\n source: typeof DEVTOOLS_ENVELOPE;\n side: 'page' | 'panel';\n message: PageMessage | PanelMessage;\n}\n\n/** Whether a posted message's `data` is devtools traffic. */\nexport function isDevtoolsEnvelope(data: unknown): data is DevtoolsEnvelope {\n return typeof data === 'object' && data !== null\n && (data as { source?: unknown }).source === DEVTOOLS_ENVELOPE;\n}\n\nfunction pair<A, B>(): [DevtoolsTransport<A, B>, DevtoolsTransport<B, A>] {\n const toA = new Set<(m: B) => void>();\n const toB = new Set<(m: A) => void>();\n const listen = <M>(set: Set<(m: M) => void>) => (listener: (m: M) => void) => {\n set.add(listener);\n return () => { set.delete(listener); };\n };\n return [\n { send: (m) => { for (const l of [...toB]) l(m); }, onMessage: listen(toA) },\n { send: (m) => { for (const l of [...toA]) l(m); }, onMessage: listen(toB) },\n ];\n}\n\n/** Both ends of a connection within one page: delivery is a direct, synchronous call. */\nexport function createInPageTransports(): { page: PageTransport; panel: PanelTransport } {\n const [page, panel] = pair<PageMessage, PanelMessage>();\n return { page, panel };\n}\n\nfunction windowTransport<Out extends PageMessage | PanelMessage, In>(\n side: 'page' | 'panel',\n target: Window,\n): DevtoolsTransport<Out, In> {\n return {\n send(message) {\n const envelope: DevtoolsEnvelope = { source: DEVTOOLS_ENVELOPE, side, message };\n target.postMessage(envelope, '*');\n },\n onMessage(listener) {\n const onEvent = (e: MessageEvent): void => {\n if (isDevtoolsEnvelope(e.data) && e.data.side !== side) listener(e.data.message as In);\n };\n target.addEventListener('message', onEvent);\n return () => target.removeEventListener('message', onEvent);\n },\n };\n}\n\n/** The page's end over `window.postMessage`, for an extension's content script. */\nexport function createWindowPageTransport(target: Window = window): PageTransport {\n return windowTransport<PageMessage, PanelMessage>('page', target);\n}\n\n/** The panel's end over `window.postMessage`: what a content script uses to reach the page. */\nexport function createWindowPanelTransport(target: Window = window): PanelTransport {\n return windowTransport<PanelMessage, PageMessage>('panel', target);\n}\n"],"mappings":";;AAmBA,IAAa,oBAAoB;;AAUjC,SAAgB,mBAAmB,MAAyC;CAC1E,OAAO,OAAO,SAAS,YAAY,SAAS,QACtC,KAA8B,WAAW;AACjD;AAEA,SAAS,OAAiE;CACxE,MAAM,sBAAM,IAAI,IAAoB;CACpC,MAAM,sBAAM,IAAI,IAAoB;CACpC,MAAM,UAAa,SAA8B,aAA6B;EAC5E,IAAI,IAAI,QAAQ;EAChB,aAAa;GAAE,IAAI,OAAO,QAAQ;EAAG;CACvC;CACA,OAAO,CACL;EAAE,OAAO,MAAM;GAAE,KAAK,MAAM,KAAK,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC;EAAG;EAAG,WAAW,OAAO,GAAG;CAAE,GAC3E;EAAE,OAAO,MAAM;GAAE,KAAK,MAAM,KAAK,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC;EAAG;EAAG,WAAW,OAAO,GAAG;CAAE,CAC7E;AACF;;AAGA,SAAgB,yBAAyE;CACvF,MAAM,CAAC,MAAM,SAAS,KAAgC;CACtD,OAAO;EAAE;EAAM;CAAM;AACvB;AAEA,SAAS,gBACP,MACA,QAC4B;CAC5B,OAAO;EACL,KAAK,SAAS;GACZ,MAAM,WAA6B;IAAE,QAAQ;IAAmB;IAAM;GAAQ;GAC9E,OAAO,YAAY,UAAU,GAAG;EAClC;EACA,UAAU,UAAU;GAClB,MAAM,WAAW,MAA0B;IACzC,IAAI,mBAAmB,EAAE,IAAI,KAAK,EAAE,KAAK,SAAS,MAAM,SAAS,EAAE,KAAK,OAAa;GACvF;GACA,OAAO,iBAAiB,WAAW,OAAO;GAC1C,aAAa,OAAO,oBAAoB,WAAW,OAAO;EAC5D;CACF;AACF;;AAGA,SAAgB,0BAA0B,SAAiB,QAAuB;CAChF,OAAO,gBAA2C,QAAQ,MAAM;AAClE;;AAGA,SAAgB,2BAA2B,SAAiB,QAAwB;CAClF,OAAO,gBAA2C,SAAS,MAAM;AACnE"}
@@ -0,0 +1,81 @@
1
+ import { parseDebugFlags } from "../debug/parseDebugFlags.js";
2
+ import { installDevtoolsHook } from "./hook.js";
3
+ import { createDevtoolsRoot } from "./root.js";
4
+ import { useEffect, useMemo, useState } from "react";
5
+ import { isDev, useLatest } from "@weasel-js/react";
6
+
7
+ //#region src/devtools/useDevtoolsRoot.ts
8
+ /** `debug` as the canvas resolves it, with `override` over it. Absent `debug` reads `?debug=` from the URL. */
9
+ function withOverride(debug, override) {
10
+ if (!override) return debug;
11
+ return {
12
+ ...debug === void 0 ? (typeof window === "undefined" ? null : parseDebugFlags(window.location.search)) ?? {} : debug === false ? {} : debug,
13
+ ...override.overlays,
14
+ ...override.highlight.length ? { highlight: override.highlight } : {}
15
+ };
16
+ }
17
+ /** A canvas's `debug` prop with the override a connected panel holds. */
18
+ function useDevtoolsOverride(debug) {
19
+ const [override, setOverride] = useState(null);
20
+ return {
21
+ debug: useMemo(() => withOverride(debug, override), [debug, override]),
22
+ setOverride
23
+ };
24
+ }
25
+ function dimensionOf(inputs) {
26
+ const scene = inputs.scene();
27
+ const first = scene?.roots[0];
28
+ return typeof (first ? scene?.get(first)?.pose : void 0)?.position?.z === "number" ? "3d" : "2d";
29
+ }
30
+ /**
31
+ * This canvas's root, for the test hook and the devtools hook alike. Registered
32
+ * with the devtools hook in a dev build, which installs it, and in a production
33
+ * build only when the app imported `@weasel-js/core/devtools`.
34
+ */
35
+ function useDevtoolsRoot(inputs, changes) {
36
+ const live = useLatest(inputs);
37
+ const [root] = useState(() => {
38
+ const l = live.current;
39
+ return createDevtoolsRoot({
40
+ label: () => live.current.label(),
41
+ get dimension() {
42
+ return dimensionOf(live.current);
43
+ },
44
+ scene: () => live.current.scene(),
45
+ selection: () => live.current.selection(),
46
+ select: (ids) => live.current.select(ids),
47
+ view: () => live.current.view(),
48
+ activeTool: () => live.current.activeTool(),
49
+ tools: () => live.current.tools(),
50
+ setTool: (id) => live.current.setTool(id),
51
+ trace: l.trace,
52
+ coords: l.coords,
53
+ frame: () => live.current.frame(),
54
+ overlays: () => live.current.overlays(),
55
+ setOverride: (o) => live.current.setOverride(o),
56
+ ...l.registry ? { registry: () => live.current.registry() } : {},
57
+ ...l.subscribeRegistry ? { subscribeRegistry: (fn) => live.current.subscribeRegistry(fn) } : {},
58
+ ...l.history ? { history: l.history } : {}
59
+ });
60
+ });
61
+ useEffect(() => {
62
+ return (typeof window === "undefined" ? null : isDev() ? installDevtoolsHook() : window.__weaselDevtools__ ?? null)?.register(root);
63
+ }, [root]);
64
+ const scene = inputs.scene();
65
+ useEffect(() => {
66
+ root.notify("scene");
67
+ }, [root, scene]);
68
+ useEffect(() => {
69
+ root.notify("selection");
70
+ }, [root, changes.selection]);
71
+ useEffect(() => {
72
+ root.notify("tool");
73
+ }, [root, changes.tool]);
74
+ const { subscribeView } = inputs;
75
+ useEffect(() => subscribeView(() => root.notify("view")), [root, subscribeView]);
76
+ return root;
77
+ }
78
+
79
+ //#endregion
80
+ export { useDevtoolsOverride, useDevtoolsRoot, withOverride };
81
+ //# sourceMappingURL=useDevtoolsRoot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDevtoolsRoot.js","names":[],"sources":["../../src/devtools/useDevtoolsRoot.ts"],"sourcesContent":["import { useEffect, useMemo, useState } from 'react';\nimport { isDev, useLatest } from '@weasel-js/react';\nimport type { View } from 'core/viewport/view';\nimport type { DebugConfig } from '../debug/types';\nimport { parseDebugFlags } from '../debug/parseDebugFlags';\nimport { installDevtoolsHook } from './hook';\nimport { createDevtoolsRoot, type DevtoolsRoot, type DevtoolsRootSource } from './root';\nimport type { DevtoolsOverlays } from './protocol';\n\n/** What a panel lays over a canvas's own `debug` prop. */\nexport interface DevtoolsOverride {\n overlays: DevtoolsOverlays;\n highlight: readonly string[];\n}\n\n/** `debug` as the canvas resolves it, with `override` over it. Absent `debug` reads `?debug=` from the URL. */\nexport function withOverride<D extends DebugConfig>(\n debug: D | false | undefined,\n override: DevtoolsOverride | null,\n): D | DebugConfig | false | undefined {\n if (!override) return debug;\n const base: DebugConfig = debug === undefined\n ? (typeof window === 'undefined' ? null : parseDebugFlags(window.location.search)) ?? {}\n : debug === false ? {} : debug;\n return { ...base, ...override.overlays, ...(override.highlight.length ? { highlight: override.highlight } : {}) };\n}\n\n/** A canvas's `debug` prop with the override a connected panel holds. */\nexport function useDevtoolsOverride<T extends DebugConfig | false | undefined>(debug: T) {\n const [override, setOverride] = useState<DevtoolsOverride | null>(null);\n // An override only adds feature flags, so the canvas's own config type still describes the result.\n const effective = useMemo(() => withOverride(debug, override) as T, [debug, override]);\n return { debug: effective, setOverride };\n}\n\n/** The live values a root reads, re-read from the latest render on every call. */\nexport type DevtoolsRootInputs = Omit<DevtoolsRootSource, 'trace' | 'coords' | 'history' | 'dimension'> & {\n trace: DevtoolsRootSource['trace'];\n coords: DevtoolsRootSource['coords'];\n history?: DevtoolsRootSource['history'];\n /** The view's own change feed: a pan writes the view without a render. */\n subscribeView(listener: (view: View) => void): () => void;\n};\n\nfunction dimensionOf(inputs: DevtoolsRootInputs): '2d' | '3d' {\n const scene = inputs.scene();\n const first = scene?.roots[0];\n const pose = first ? scene?.get(first)?.pose : undefined;\n return typeof (pose as { position?: { z?: unknown } } | undefined)?.position?.z === 'number' ? '3d' : '2d';\n}\n\n/**\n * This canvas's root, for the test hook and the devtools hook alike. Registered\n * with the devtools hook in a dev build, which installs it, and in a production\n * build only when the app imported `@weasel-js/core/devtools`.\n */\nexport function useDevtoolsRoot(\n inputs: DevtoolsRootInputs,\n changes: { selection: readonly string[]; tool: string | null },\n): DevtoolsRoot {\n const live = useLatest(inputs);\n const [root] = useState(() => {\n const l = live.current;\n return createDevtoolsRoot({\n label: () => live.current.label(),\n get dimension() { return dimensionOf(live.current); },\n scene: () => live.current.scene(),\n selection: () => live.current.selection(),\n select: (ids) => live.current.select(ids),\n view: () => live.current.view(),\n activeTool: () => live.current.activeTool(),\n tools: () => live.current.tools(),\n setTool: (id) => live.current.setTool(id),\n trace: l.trace,\n coords: l.coords,\n frame: () => live.current.frame(),\n overlays: () => live.current.overlays(),\n setOverride: (o) => live.current.setOverride(o),\n ...(l.registry ? { registry: () => live.current.registry!() } : {}),\n ...(l.subscribeRegistry ? { subscribeRegistry: (fn: () => void) => live.current.subscribeRegistry!(fn) } : {}),\n ...(l.history ? { history: l.history } : {}),\n });\n });\n\n useEffect(() => {\n const hook = typeof window === 'undefined' ? null\n : isDev() ? installDevtoolsHook() : window.__weaselDevtools__ ?? null;\n return hook?.register(root);\n }, [root]);\n\n const scene = inputs.scene();\n useEffect(() => { root.notify('scene'); }, [root, scene]);\n useEffect(() => { root.notify('selection'); }, [root, changes.selection]);\n useEffect(() => { root.notify('tool'); }, [root, changes.tool]);\n const { subscribeView } = inputs;\n useEffect(() => subscribeView(() => root.notify('view')), [root, subscribeView]);\n return root;\n}\n"],"mappings":";;;;;;;;AAgBA,SAAgB,aACd,OACA,UACqC;CACrC,IAAI,CAAC,UAAU,OAAO;CAItB,OAAO;EAAE,GAHiB,UAAU,UAC/B,OAAO,WAAW,cAAc,OAAO,gBAAgB,OAAO,SAAS,MAAM,MAAM,CAAC,IACrF,UAAU,QAAQ,CAAC,IAAI;EACT,GAAG,SAAS;EAAU,GAAI,SAAS,UAAU,SAAS,EAAE,WAAW,SAAS,UAAU,IAAI,CAAC;CAAG;AAClH;;AAGA,SAAgB,oBAA+D,OAAU;CACvF,MAAM,CAAC,UAAU,eAAe,SAAkC,IAAI;CAGtE,OAAO;EAAE,OADS,cAAc,aAAa,OAAO,QAAQ,GAAQ,CAAC,OAAO,QAAQ,CACpE;EAAW;CAAY;AACzC;AAWA,SAAS,YAAY,QAAyC;CAC5D,MAAM,QAAQ,OAAO,MAAM;CAC3B,MAAM,QAAQ,OAAO,MAAM;CAE3B,OAAO,QADM,QAAQ,OAAO,IAAI,KAAK,CAAC,EAAE,OAAO,OAChC,EAAqD,UAAU,MAAM,WAAW,OAAO;AACxG;;;;;;AAOA,SAAgB,gBACd,QACA,SACc;CACd,MAAM,OAAO,UAAU,MAAM;CAC7B,MAAM,CAAC,QAAQ,eAAe;EAC5B,MAAM,IAAI,KAAK;EACf,OAAO,mBAAmB;GACxB,aAAa,KAAK,QAAQ,MAAM;GAChC,IAAI,YAAY;IAAE,OAAO,YAAY,KAAK,OAAO;GAAG;GACpD,aAAa,KAAK,QAAQ,MAAM;GAChC,iBAAiB,KAAK,QAAQ,UAAU;GACxC,SAAS,QAAQ,KAAK,QAAQ,OAAO,GAAG;GACxC,YAAY,KAAK,QAAQ,KAAK;GAC9B,kBAAkB,KAAK,QAAQ,WAAW;GAC1C,aAAa,KAAK,QAAQ,MAAM;GAChC,UAAU,OAAO,KAAK,QAAQ,QAAQ,EAAE;GACxC,OAAO,EAAE;GACT,QAAQ,EAAE;GACV,aAAa,KAAK,QAAQ,MAAM;GAChC,gBAAgB,KAAK,QAAQ,SAAS;GACtC,cAAc,MAAM,KAAK,QAAQ,YAAY,CAAC;GAC9C,GAAI,EAAE,WAAW,EAAE,gBAAgB,KAAK,QAAQ,SAAU,EAAE,IAAI,CAAC;GACjE,GAAI,EAAE,oBAAoB,EAAE,oBAAoB,OAAmB,KAAK,QAAQ,kBAAmB,EAAE,EAAE,IAAI,CAAC;GAC5G,GAAI,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,IAAI,CAAC;EAC5C,CAAC;CACH,CAAC;CAED,gBAAgB;EAGd,QAFa,OAAO,WAAW,cAAc,OACzC,MAAM,IAAI,oBAAoB,IAAI,OAAO,sBAAsB,KAC5D,EAAM,SAAS,IAAI;CAC5B,GAAG,CAAC,IAAI,CAAC;CAET,MAAM,QAAQ,OAAO,MAAM;CAC3B,gBAAgB;EAAE,KAAK,OAAO,OAAO;CAAG,GAAG,CAAC,MAAM,KAAK,CAAC;CACxD,gBAAgB;EAAE,KAAK,OAAO,WAAW;CAAG,GAAG,CAAC,MAAM,QAAQ,SAAS,CAAC;CACxE,gBAAgB;EAAE,KAAK,OAAO,MAAM;CAAG,GAAG,CAAC,MAAM,QAAQ,IAAI,CAAC;CAC9D,MAAM,EAAE,kBAAkB;CAC1B,gBAAgB,oBAAoB,KAAK,OAAO,MAAM,CAAC,GAAG,CAAC,MAAM,aAAa,CAAC;CAC/E,OAAO;AACT"}