@weasel-js/core 1.7.0 → 1.7.2

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 (1004) hide show
  1. package/CHANGELOG.md +794 -0
  2. package/README.md +14 -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-vCdt55xm.d.ts} +2 -2
  61. package/dist/{builtins-DLn2lCr_.d.ts → builtins-C-gRyVRx.d.ts} +742 -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 +102 -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 +93 -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-BCrDp_mH.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 +39 -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.d.ts +1960 -1891
  601. package/dist/index.js +312 -13
  602. package/dist/input/keyState.js +76 -0
  603. package/dist/input/keyState.js.map +1 -0
  604. package/dist/input/useKeyState.js +22 -0
  605. package/dist/input/useKeyState.js.map +1 -0
  606. package/dist/interactions/actions/actionShortcuts.js +32 -0
  607. package/dist/interactions/actions/actionShortcuts.js.map +1 -0
  608. package/dist/interactions/actions/align/align.js +81 -0
  609. package/dist/interactions/actions/align/align.js.map +1 -0
  610. package/dist/interactions/actions/booleans/booleans.js +120 -0
  611. package/dist/interactions/actions/booleans/booleans.js.map +1 -0
  612. package/dist/interactions/actions/booleans/useBooleans.js +20 -0
  613. package/dist/interactions/actions/booleans/useBooleans.js.map +1 -0
  614. package/dist/interactions/actions/booleans/useBooleansAdapter.js +9 -0
  615. package/dist/interactions/actions/booleans/useBooleansAdapter.js.map +1 -0
  616. package/dist/interactions/actions/clipboard/clipboardOps.js +94 -0
  617. package/dist/interactions/actions/clipboard/clipboardOps.js.map +1 -0
  618. package/dist/interactions/actions/clipboard/materializePaste.js +25 -0
  619. package/dist/interactions/actions/clipboard/materializePaste.js.map +1 -0
  620. package/dist/interactions/actions/clipboard/wireFormat.js +43 -0
  621. package/dist/interactions/actions/clipboard/wireFormat.js.map +1 -0
  622. package/dist/interactions/actions/clone/behaviors/cloneByAltDrag.js +26 -0
  623. package/dist/interactions/actions/clone/behaviors/cloneByAltDrag.js.map +1 -0
  624. package/dist/interactions/actions/defaultCommitAdapter.js +42 -0
  625. package/dist/interactions/actions/defaultCommitAdapter.js.map +1 -0
  626. package/dist/interactions/actions/defaults/align.js +71 -0
  627. package/dist/interactions/actions/defaults/align.js.map +1 -0
  628. package/dist/interactions/actions/defaults/anchorEditing.js +235 -0
  629. package/dist/interactions/actions/defaults/anchorEditing.js.map +1 -0
  630. package/dist/interactions/actions/defaults/areaSelect.js +75 -0
  631. package/dist/interactions/actions/defaults/areaSelect.js.map +1 -0
  632. package/dist/interactions/actions/defaults/booleans.js +52 -0
  633. package/dist/interactions/actions/defaults/booleans.js.map +1 -0
  634. package/dist/interactions/actions/defaults/cancelGesture.js +24 -0
  635. package/dist/interactions/actions/defaults/cancelGesture.js.map +1 -0
  636. package/dist/interactions/actions/defaults/clearSelection.js +19 -0
  637. package/dist/interactions/actions/defaults/clearSelection.js.map +1 -0
  638. package/dist/interactions/actions/defaults/clipboard.js +78 -0
  639. package/dist/interactions/actions/defaults/clipboard.js.map +1 -0
  640. package/dist/interactions/actions/defaults/clone.js +107 -0
  641. package/dist/interactions/actions/defaults/clone.js.map +1 -0
  642. package/dist/interactions/actions/defaults/createOutlines.js +47 -0
  643. package/dist/interactions/actions/defaults/createOutlines.js.map +1 -0
  644. package/dist/interactions/actions/defaults/createPaintAction.js +85 -0
  645. package/dist/interactions/actions/defaults/createPaintAction.js.map +1 -0
  646. package/dist/interactions/actions/defaults/delete.js +61 -0
  647. package/dist/interactions/actions/defaults/delete.js.map +1 -0
  648. package/dist/interactions/actions/defaults/distribute.js +66 -0
  649. package/dist/interactions/actions/defaults/distribute.js.map +1 -0
  650. package/dist/interactions/actions/defaults/duplicate.js +83 -0
  651. package/dist/interactions/actions/defaults/duplicate.js.map +1 -0
  652. package/dist/interactions/actions/defaults/editAnchors.js +100 -0
  653. package/dist/interactions/actions/defaults/editAnchors.js.map +1 -0
  654. package/dist/interactions/actions/defaults/enterPathEdit.js +29 -0
  655. package/dist/interactions/actions/defaults/enterPathEdit.js.map +1 -0
  656. package/dist/interactions/actions/defaults/enterTextEdit.js +20 -0
  657. package/dist/interactions/actions/defaults/enterTextEdit.js.map +1 -0
  658. package/dist/interactions/actions/defaults/escape.js +26 -0
  659. package/dist/interactions/actions/defaults/escape.js.map +1 -0
  660. package/dist/interactions/actions/defaults/exitPathEdit.js +22 -0
  661. package/dist/interactions/actions/defaults/exitPathEdit.js.map +1 -0
  662. package/dist/interactions/actions/defaults/flip.js +119 -0
  663. package/dist/interactions/actions/defaults/flip.js.map +1 -0
  664. package/dist/interactions/actions/defaults/freshNodeId.js +10 -0
  665. package/dist/interactions/actions/defaults/freshNodeId.js.map +1 -0
  666. package/dist/interactions/actions/defaults/group.js +131 -0
  667. package/dist/interactions/actions/defaults/group.js.map +1 -0
  668. package/dist/interactions/actions/defaults/icons/actionGlyphIcons.js +40 -0
  669. package/dist/interactions/actions/defaults/icons/actionGlyphIcons.js.map +1 -0
  670. package/dist/interactions/actions/defaults/icons/actionGlyphs.js +10 -0
  671. package/dist/interactions/actions/defaults/icons/actionGlyphs.js.map +1 -0
  672. package/dist/interactions/actions/defaults/icons/alignIcons.js +173 -0
  673. package/dist/interactions/actions/defaults/icons/alignIcons.js.map +1 -0
  674. package/dist/interactions/actions/defaults/icons/booleanIcons.js +171 -0
  675. package/dist/interactions/actions/defaults/icons/booleanIcons.js.map +1 -0
  676. package/dist/interactions/actions/defaults/icons/distributeIcons.js +63 -0
  677. package/dist/interactions/actions/defaults/icons/distributeIcons.js.map +1 -0
  678. package/dist/interactions/actions/defaults/icons/editIcons.js +280 -0
  679. package/dist/interactions/actions/defaults/icons/editIcons.js.map +1 -0
  680. package/dist/interactions/actions/defaults/icons/outlineIcons.js +53 -0
  681. package/dist/interactions/actions/defaults/icons/outlineIcons.js.map +1 -0
  682. package/dist/interactions/actions/defaults/ingest.js +58 -0
  683. package/dist/interactions/actions/defaults/ingest.js.map +1 -0
  684. package/dist/interactions/actions/defaults/insert.js +288 -0
  685. package/dist/interactions/actions/defaults/insert.js.map +1 -0
  686. package/dist/interactions/actions/defaults/insertPathAnchor.js +50 -0
  687. package/dist/interactions/actions/defaults/insertPathAnchor.js.map +1 -0
  688. package/dist/interactions/actions/defaults/lassoSelect.js +156 -0
  689. package/dist/interactions/actions/defaults/lassoSelect.js.map +1 -0
  690. package/dist/interactions/actions/defaults/move.js +760 -0
  691. package/dist/interactions/actions/defaults/move.js.map +1 -0
  692. package/dist/interactions/actions/defaults/nudge.js +110 -0
  693. package/dist/interactions/actions/defaults/nudge.js.map +1 -0
  694. package/dist/interactions/actions/defaults/pinchZoom.js +63 -0
  695. package/dist/interactions/actions/defaults/pinchZoom.js.map +1 -0
  696. package/dist/interactions/actions/defaults/reorder.js +143 -0
  697. package/dist/interactions/actions/defaults/reorder.js.map +1 -0
  698. package/dist/interactions/actions/defaults/requiresSelection.js +10 -0
  699. package/dist/interactions/actions/defaults/requiresSelection.js.map +1 -0
  700. package/dist/interactions/actions/defaults/resize.js +335 -0
  701. package/dist/interactions/actions/defaults/resize.js.map +1 -0
  702. package/dist/interactions/actions/defaults/rotate.js +184 -0
  703. package/dist/interactions/actions/defaults/rotate.js.map +1 -0
  704. package/dist/interactions/actions/defaults/selectAll.js +27 -0
  705. package/dist/interactions/actions/defaults/selectAll.js.map +1 -0
  706. package/dist/interactions/actions/defaults/setFill.js +27 -0
  707. package/dist/interactions/actions/defaults/setFill.js.map +1 -0
  708. package/dist/interactions/actions/defaults/setFillOpacity.js +15 -0
  709. package/dist/interactions/actions/defaults/setFillOpacity.js.map +1 -0
  710. package/dist/interactions/actions/defaults/setStroke.js +36 -0
  711. package/dist/interactions/actions/defaults/setStroke.js.map +1 -0
  712. package/dist/interactions/actions/defaults/setStrokeOpacity.js +21 -0
  713. package/dist/interactions/actions/defaults/setStrokeOpacity.js.map +1 -0
  714. package/dist/interactions/actions/defaults/slice.js +39 -0
  715. package/dist/interactions/actions/defaults/slice.js.map +1 -0
  716. package/dist/interactions/actions/defaults/sliceOps.js +60 -0
  717. package/dist/interactions/actions/defaults/sliceOps.js.map +1 -0
  718. package/dist/interactions/actions/defaults/toolActivate.js +35 -0
  719. package/dist/interactions/actions/defaults/toolActivate.js.map +1 -0
  720. package/dist/interactions/actions/defaults/toolResetToDefault.js +26 -0
  721. package/dist/interactions/actions/defaults/toolResetToDefault.js.map +1 -0
  722. package/dist/interactions/actions/defaults/undoRedo.js +51 -0
  723. package/dist/interactions/actions/defaults/undoRedo.js.map +1 -0
  724. package/dist/interactions/actions/defaults/viewportDragPan.js +88 -0
  725. package/dist/interactions/actions/defaults/viewportDragPan.js.map +1 -0
  726. package/dist/interactions/actions/defaults/viewportWheelPan.js +57 -0
  727. package/dist/interactions/actions/defaults/viewportWheelPan.js.map +1 -0
  728. package/dist/interactions/actions/defaults/viewportZoom.js +143 -0
  729. package/dist/interactions/actions/defaults/viewportZoom.js.map +1 -0
  730. package/dist/interactions/actions/distribute/distribute.js +42 -0
  731. package/dist/interactions/actions/distribute/distribute.js.map +1 -0
  732. package/dist/interactions/actions/distribute/plan.js +29 -0
  733. package/dist/interactions/actions/distribute/plan.js.map +1 -0
  734. package/dist/interactions/actions/edit-anchors/geometry.js +61 -0
  735. package/dist/interactions/actions/edit-anchors/geometry.js.map +1 -0
  736. package/dist/interactions/actions/edit-anchors/handles.js +43 -0
  737. package/dist/interactions/actions/edit-anchors/handles.js.map +1 -0
  738. package/dist/interactions/actions/flip/helpers.js +35 -0
  739. package/dist/interactions/actions/flip/helpers.js.map +1 -0
  740. package/dist/interactions/actions/geometryProjection.js +18 -0
  741. package/dist/interactions/actions/geometryProjection.js.map +1 -0
  742. package/dist/interactions/actions/gestureLifecycle.js +44 -0
  743. package/dist/interactions/actions/gestureLifecycle.js.map +1 -0
  744. package/dist/interactions/actions/lasso-select/behaviors/selectFromLasso.js +39 -0
  745. package/dist/interactions/actions/lasso-select/behaviors/selectFromLasso.js.map +1 -0
  746. package/dist/interactions/actions/move/behaviors/snapBackOrDelete.js +36 -0
  747. package/dist/interactions/actions/move/behaviors/snapBackOrDelete.js.map +1 -0
  748. package/dist/interactions/actions/move/behaviors/snapToContainer.js +67 -0
  749. package/dist/interactions/actions/move/behaviors/snapToContainer.js.map +1 -0
  750. package/dist/interactions/actions/move/gestureAdapter.js +37 -0
  751. package/dist/interactions/actions/move/gestureAdapter.js.map +1 -0
  752. package/dist/interactions/actions/outlines/createOutlines.js +84 -0
  753. package/dist/interactions/actions/outlines/createOutlines.js.map +1 -0
  754. package/dist/interactions/actions/outlines/useCreateOutlinesAdapter.js +9 -0
  755. package/dist/interactions/actions/outlines/useCreateOutlinesAdapter.js.map +1 -0
  756. package/dist/interactions/actions/planeInput.js +181 -0
  757. package/dist/interactions/actions/planeInput.js.map +1 -0
  758. package/dist/interactions/actions/poseDescriptorDep.js +9 -0
  759. package/dist/interactions/actions/poseDescriptorDep.js.map +1 -0
  760. package/dist/interactions/actions/poseFrame.js +38 -0
  761. package/dist/interactions/actions/poseFrame.js.map +1 -0
  762. package/dist/interactions/actions/previewOverrides.js +25 -0
  763. package/dist/interactions/actions/previewOverrides.js.map +1 -0
  764. package/dist/interactions/actions/resize/autoPoseDescriptor.js +31 -0
  765. package/dist/interactions/actions/resize/autoPoseDescriptor.js.map +1 -0
  766. package/dist/interactions/actions/resize/behaviors/clampMinSize.js +18 -0
  767. package/dist/interactions/actions/resize/behaviors/clampMinSize.js.map +1 -0
  768. package/dist/interactions/actions/resize/behaviors/index.js +8 -0
  769. package/dist/interactions/actions/resize/behaviors/index.js.map +1 -0
  770. package/dist/interactions/actions/resize/behaviors/lockAspect.js +24 -0
  771. package/dist/interactions/actions/resize/behaviors/lockAspect.js.map +1 -0
  772. package/dist/interactions/actions/resize/cornerHandles.js +72 -0
  773. package/dist/interactions/actions/resize/cornerHandles.js.map +1 -0
  774. package/dist/interactions/actions/resolveOverlays.js +60 -0
  775. package/dist/interactions/actions/resolveOverlays.js.map +1 -0
  776. package/dist/interactions/actions/resolvePreviews.js +61 -0
  777. package/dist/interactions/actions/resolvePreviews.js.map +1 -0
  778. package/dist/interactions/actions/rotate/geometry.js +46 -0
  779. package/dist/interactions/actions/rotate/geometry.js.map +1 -0
  780. package/dist/interactions/actions/rotate/handle.js +27 -0
  781. package/dist/interactions/actions/rotate/handle.js.map +1 -0
  782. package/dist/interactions/actions/spatialReference.js +42 -0
  783. package/dist/interactions/actions/spatialReference.js.map +1 -0
  784. package/dist/interactions/actions/useStandardActions.js +142 -0
  785. package/dist/interactions/actions/useStandardActions.js.map +1 -0
  786. package/dist/interactions/gestures/dragGesture/dragGesture.js +111 -0
  787. package/dist/interactions/gestures/dragGesture/dragGesture.js.map +1 -0
  788. package/dist/interactions/gestures/dragRadial/dragRadial.js +117 -0
  789. package/dist/interactions/gestures/dragRadial/dragRadial.js.map +1 -0
  790. package/dist/interactions/gestures/dragRect/dragRect.js +164 -0
  791. package/dist/interactions/gestures/dragRect/dragRect.js.map +1 -0
  792. package/dist/interactions/gestures/handleDrag/handleDrag.js +46 -0
  793. package/dist/interactions/gestures/handleDrag/handleDrag.js.map +1 -0
  794. package/dist/interactions/gestures/pointerDrag/pointerDrag.js +118 -0
  795. package/dist/interactions/gestures/pointerDrag/pointerDrag.js.map +1 -0
  796. package/dist/interactions/gestures/shared/originProjection.js +42 -0
  797. package/dist/interactions/gestures/shared/originProjection.js.map +1 -0
  798. package/dist/interactions/gestures/shared/screenTolerance.js +21 -0
  799. package/dist/interactions/gestures/shared/screenTolerance.js.map +1 -0
  800. package/dist/interactions/gestures/shared/snap.js +24 -0
  801. package/dist/interactions/gestures/shared/snap.js.map +1 -0
  802. package/dist/interactions/gestures/thresholdDrag/thresholdDrag.js +30 -0
  803. package/dist/interactions/gestures/thresholdDrag/thresholdDrag.js.map +1 -0
  804. package/dist/layout/arrivals.js +36 -0
  805. package/dist/layout/arrivals.js.map +1 -0
  806. package/dist/{math-MCQcf_gc.d.ts → math-Drrw4ewZ.d.ts} +8 -116
  807. package/dist/math.d.ts +4 -5
  808. package/dist/math.js +6 -4
  809. package/dist/mesh.d.ts +268 -0
  810. package/dist/mesh.js +7 -0
  811. package/dist/move.d.ts +7 -49
  812. package/dist/move.js +3 -142
  813. package/dist/originProjection-DEklpDc_.d.ts +57 -0
  814. package/dist/patterns-builtin.js +3 -3
  815. package/dist/{poseDescriptor-rZa9W5hJ.d.ts → poseDescriptor-D-OH-tu5.d.ts} +0 -4
  816. package/dist/registerProgram-ateHDGjw.d.ts +193 -0
  817. package/dist/renderer/DrawCommand.js +6 -0
  818. package/dist/renderer/DrawCommand.js.map +1 -0
  819. package/dist/renderer/WeaselRenderer.js +328 -0
  820. package/dist/renderer/WeaselRenderer.js.map +1 -0
  821. package/dist/renderer/cache/GLImageCache.js +64 -0
  822. package/dist/renderer/cache/GLImageCache.js.map +1 -0
  823. package/dist/renderer/cache/GLMeshCache.js +102 -0
  824. package/dist/renderer/cache/GLMeshCache.js.map +1 -0
  825. package/dist/renderer/cache/GLTextureCache.js +51 -0
  826. package/dist/renderer/cache/GLTextureCache.js.map +1 -0
  827. package/dist/renderer/cache/GradientRampAtlas.js +82 -0
  828. package/dist/renderer/cache/GradientRampAtlas.js.map +1 -0
  829. package/dist/renderer/cache/cache.js +13 -0
  830. package/dist/renderer/cache/cache.js.map +1 -0
  831. package/dist/renderer/cache/markerCommandCache.js +59 -0
  832. package/dist/renderer/cache/markerCommandCache.js.map +1 -0
  833. package/dist/renderer/cache/outlineMeshCache.js +15 -0
  834. package/dist/renderer/cache/outlineMeshCache.js.map +1 -0
  835. package/dist/renderer/cache/outlineStrokeMeshCache.js +31 -0
  836. package/dist/renderer/cache/outlineStrokeMeshCache.js.map +1 -0
  837. package/dist/renderer/cache/strokeMeshCache.js +44 -0
  838. package/dist/renderer/cache/strokeMeshCache.js.map +1 -0
  839. package/dist/renderer/cullDrawCommands.js +89 -0
  840. package/dist/renderer/cullDrawCommands.js.map +1 -0
  841. package/dist/renderer/draw.js +1109 -0
  842. package/dist/renderer/draw.js.map +1 -0
  843. package/dist/renderer/drawBatch.js +168 -0
  844. package/dist/renderer/drawBatch.js.map +1 -0
  845. package/dist/renderer/effects/EffectTargets.js +45 -0
  846. package/dist/renderer/effects/EffectTargets.js.map +1 -0
  847. package/dist/renderer/effects/builtins.js +31 -0
  848. package/dist/renderer/effects/builtins.js.map +1 -0
  849. package/dist/renderer/effects/composite.js +9 -0
  850. package/dist/renderer/effects/composite.js.map +1 -0
  851. package/dist/renderer/effects/effectPrelude.js +10 -0
  852. package/dist/renderer/effects/effectPrelude.js.map +1 -0
  853. package/dist/renderer/effects/types.js +10 -0
  854. package/dist/renderer/effects/types.js.map +1 -0
  855. package/dist/renderer/index.js +19 -0
  856. package/dist/renderer/math/color.js +341 -0
  857. package/dist/renderer/math/color.js.map +1 -0
  858. package/dist/renderer/math/mat3.js +71 -0
  859. package/dist/renderer/math/mat3.js.map +1 -0
  860. package/dist/renderer/math/patternSpace.js +22 -0
  861. package/dist/renderer/math/patternSpace.js.map +1 -0
  862. package/dist/renderer/math/viewToMat3.js +19 -0
  863. package/dist/renderer/math/viewToMat3.js.map +1 -0
  864. package/dist/renderer/paintResources.js +18 -0
  865. package/dist/renderer/paintResources.js.map +1 -0
  866. package/dist/renderer/paintScratch.js +37 -0
  867. package/dist/renderer/paintScratch.js.map +1 -0
  868. package/dist/renderer/shaders/ShaderProgram.js +74 -0
  869. package/dist/renderer/shaders/ShaderProgram.js.map +1 -0
  870. package/dist/renderer/shaders/batchFill.js +118 -0
  871. package/dist/renderer/shaders/batchFill.js.map +1 -0
  872. package/dist/renderer/shaders/customPrelude.js +34 -0
  873. package/dist/renderer/shaders/customPrelude.js.map +1 -0
  874. package/dist/renderer/shaders/extractUniformNames.js +184 -0
  875. package/dist/renderer/shaders/extractUniformNames.js.map +1 -0
  876. package/dist/renderer/shaders/glyphPaint.js +61 -0
  877. package/dist/renderer/shaders/glyphPaint.js.map +1 -0
  878. package/dist/renderer/shaders/gradFill.js +30 -0
  879. package/dist/renderer/shaders/gradFill.js.map +1 -0
  880. package/dist/renderer/shaders/imageFill.js +14 -0
  881. package/dist/renderer/shaders/imageFill.js.map +1 -0
  882. package/dist/renderer/shaders/pathFill.js +13 -0
  883. package/dist/renderer/shaders/pathFill.js.map +1 -0
  884. package/dist/renderer/shaders/patternFill.js +24 -0
  885. package/dist/renderer/shaders/patternFill.js.map +1 -0
  886. package/dist/renderer/shaders/registerProgram.js +18 -0
  887. package/dist/renderer/shaders/registerProgram.js.map +1 -0
  888. package/dist/renderer/spriteSheet.js +14 -0
  889. package/dist/renderer/spriteSheet.js.map +1 -0
  890. package/dist/renderer/state/GroupState.js +77 -0
  891. package/dist/renderer/state/GroupState.js.map +1 -0
  892. package/dist/renderer/syntheticItalic.js +6 -0
  893. package/dist/renderer/syntheticItalic.js.map +1 -0
  894. package/dist/renderer/textures/registerTexture.js +14 -0
  895. package/dist/renderer/textures/registerTexture.js.map +1 -0
  896. package/dist/renderer.d.ts +11 -21
  897. package/dist/renderer.js +18 -13
  898. package/dist/resize.d.ts +10 -46
  899. package/dist/resize.js +7 -5
  900. package/dist/routing.js +2 -3
  901. package/dist/scheduling/useVisibleRaf.js +69 -0
  902. package/dist/scheduling/useVisibleRaf.js.map +1 -0
  903. package/dist/style.css +2 -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-A37hYkeR.d.ts} +185 -15
  954. package/dist/{types-qYpyTAiZ.d.ts → types-B_9g6hMM.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 +31 -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 +0 -62
  990. package/dist/index.css.map +0 -1
  991. package/dist/index.js.map +0 -1
  992. package/dist/insert.d.ts +0 -36
  993. package/dist/insert.js +0 -81
  994. package/dist/insert.js.map +0 -1
  995. package/dist/math.js.map +0 -1
  996. package/dist/move.js.map +0 -1
  997. package/dist/path-JEV2c5If.d.ts +0 -48
  998. package/dist/patterns-builtin.js.map +0 -1
  999. package/dist/renderer.css +0 -62
  1000. package/dist/renderer.css.map +0 -1
  1001. package/dist/renderer.js.map +0 -1
  1002. package/dist/resize.js.map +0 -1
  1003. package/dist/routing.js.map +0 -1
  1004. package/dist/types-D2tTKEU0.d.ts +0 -18
@@ -0,0 +1,184 @@
1
+ //#region src/renderer/shaders/extractUniformNames.ts
2
+ var e = /* @__PURE__ */ new Set([
3
+ "lowp",
4
+ "mediump",
5
+ "highp",
6
+ "precise",
7
+ "invariant",
8
+ "centroid",
9
+ "flat",
10
+ "smooth",
11
+ "noperspective"
12
+ ]), t = /^[A-Za-z_]\w*$/, n = 16;
13
+ function r(e) {
14
+ return [...a(e).names];
15
+ }
16
+ function i(e) {
17
+ return a(e).arrays;
18
+ }
19
+ function a(r) {
20
+ let { code: i, defines: a } = o(r), c = s(i), u = /* @__PURE__ */ new Map(), d = /* @__PURE__ */ new Map(), f = /* @__PURE__ */ new Set(), p = /* @__PURE__ */ new Map(), m = (e, t) => {
21
+ if (t > n) return null;
22
+ let r = null;
23
+ for (let n of a.get(e) ?? []) {
24
+ let e = l(s(n), (e) => m(e, t + 1));
25
+ e !== null && (r === null || e > r) && (r = e);
26
+ }
27
+ return r ?? u.get(e) ?? null;
28
+ }, h = (e, t) => l(c.slice(e, t), (e) => m(e, 0)), g = (e) => {
29
+ let t = 0;
30
+ for (let n = e; n < c.length; n++) if (c[n] === "(" || c[n] === "[" || c[n] === "{") t++;
31
+ else if ((c[n] === ")" || c[n] === "]" || c[n] === "}") && --t === 0) return n;
32
+ return c.length;
33
+ }, _ = (e) => {
34
+ if (c[e] !== "[") return [void 0, e];
35
+ let t = g(e);
36
+ return [h(e + 1, t), t + 1];
37
+ }, v = (e, n) => {
38
+ let r = [];
39
+ for (; e < c.length && c[e] !== ";" && c[e] !== "}";) {
40
+ let i = c[e], [a, o] = _(e + 1);
41
+ for (e = o, t.test(i) && r.push({
42
+ name: i,
43
+ size: a === void 0 ? n : a
44
+ }); e < c.length && c[e] !== "," && c[e] !== ";" && c[e] !== "}";) e = c[e] === "(" || c[e] === "[" || c[e] === "{" ? g(e) + 1 : e + 1;
45
+ c[e] === "," && e++;
46
+ }
47
+ return [r, e];
48
+ }, y = (t) => {
49
+ let n = t + 1, r = c[n] === "{" ? void 0 : c[n++], i = [];
50
+ if (c[n] !== "{") return [i, n];
51
+ let a = g(n);
52
+ for (n++; n < a;) {
53
+ for (; e.has(c[n]);) n++;
54
+ let t;
55
+ c[n] === "struct" ? [t, n] = y(n) : t = c[n++];
56
+ let [r, a] = _(n), [o, s] = v(a, r);
57
+ for (let e of o) e.size !== null && i.push({
58
+ type: t,
59
+ name: e.name,
60
+ size: e.size ?? null
61
+ });
62
+ n = s + 1;
63
+ }
64
+ if (r) {
65
+ let e = d.get(r) ?? [];
66
+ for (let t of i) e.some((e) => e.name === t.name) || e.push(t);
67
+ d.set(r, e);
68
+ }
69
+ return [i, a + 1];
70
+ }, b = (e, t, r, i) => {
71
+ if (i > n) return;
72
+ if (r !== null) {
73
+ if (typeof t == "string" && !d.has(t)) {
74
+ let n = p.get(e);
75
+ (!n || r > n.size) && p.set(e, {
76
+ type: t,
77
+ size: r
78
+ });
79
+ }
80
+ for (let n = 0; n < r; n++) b(`${e}[${n}]`, t, null, i + 1);
81
+ return;
82
+ }
83
+ let a = typeof t == "string" ? d.get(t) : t;
84
+ if (!a) {
85
+ f.add(e);
86
+ return;
87
+ }
88
+ for (let t of a) b(`${e}.${t.name}`, t.type, t.size, i + 1);
89
+ }, x = 0;
90
+ for (let n = 0; n < c.length; n++) {
91
+ let r = c[n];
92
+ if (r === "{") x++;
93
+ else if (r === "}") x--;
94
+ else if (r === "struct") n = y(n)[1] - 1;
95
+ else if (x === 0 && r === "const") {
96
+ let r = n + 1;
97
+ for (; e.has(c[r]);) r++;
98
+ if ((c[r] === "int" || c[r] === "uint") && t.test(c[r + 1] ?? "") && c[r + 2] === "=") {
99
+ let e = r + 3;
100
+ for (; e < c.length && c[e] !== ";";) e++;
101
+ let t = h(r + 3, e), n = u.get(c[r + 1]);
102
+ t !== null && (n === void 0 || t > n) && u.set(c[r + 1], t);
103
+ }
104
+ } else if (x === 0 && r === "uniform") {
105
+ let t = n + 1;
106
+ for (; e.has(c[t]);) t++;
107
+ let r;
108
+ if (c[t] === "struct") [r, t] = y(t);
109
+ else if (c[t + 1] === "{") {
110
+ for (t = g(t + 1) + 1; t < c.length && c[t] !== ";";) t++;
111
+ n = t;
112
+ continue;
113
+ } else r = c[t++];
114
+ let [i, a] = _(t), [o, s] = v(a, i);
115
+ for (let e of o) e.size !== null && b(e.name, r, e.size ?? null, 0);
116
+ n = s;
117
+ }
118
+ }
119
+ return {
120
+ names: f,
121
+ arrays: p
122
+ };
123
+ }
124
+ function o(e) {
125
+ let t = e.replace(/\\\r?\n/g, ""), n = "";
126
+ for (let e = 0; e < t.length; e++) if (t[e] === "/" && t[e + 1] === "/") {
127
+ for (; e < t.length && t[e] !== "\n";) e++;
128
+ n += "\n";
129
+ } else if (t[e] === "/" && t[e + 1] === "*") {
130
+ let r = t.indexOf("*/", e + 2);
131
+ e = r < 0 ? t.length : r + 1, n += " ";
132
+ } else n += t[e];
133
+ let r = /* @__PURE__ */ new Map();
134
+ return {
135
+ code: n.split("\n").map((e) => {
136
+ if (!/^\s*#/.test(e)) return e;
137
+ let t = /^\s*#\s*define\s+([A-Za-z_]\w*)(\(?)(.*)$/.exec(e);
138
+ return t && !t[2] && r.set(t[1], [...r.get(t[1]) ?? [], t[3].trim()]), "";
139
+ }).join("\n"),
140
+ defines: r
141
+ };
142
+ }
143
+ function s(e) {
144
+ return e.match(/[A-Za-z_]\w*|\d[\w.]*|\S/g) ?? [];
145
+ }
146
+ function c(e) {
147
+ let t = /^(?:0[xX]([0-9a-fA-F]+)|(0[0-7]*)|([1-9]\d*))[uU]?$/.exec(e);
148
+ return t ? t[1] === void 0 ? t[2] === void 0 ? parseInt(t[3], 10) : parseInt(t[2], 8) : parseInt(t[1], 16) : null;
149
+ }
150
+ function l(e, n) {
151
+ let r = 0, i = () => {
152
+ let a = e[r++];
153
+ if (a === "(") {
154
+ let t = o();
155
+ return e[r++] === ")" ? t : null;
156
+ }
157
+ if (a === "-") {
158
+ let e = i();
159
+ return e === null ? null : -e;
160
+ }
161
+ return a === "+" ? i() : a === void 0 ? null : c(a) ?? (t.test(a) ? n(a) : null);
162
+ }, a = () => {
163
+ let t = i();
164
+ for (; t !== null && (e[r] === "*" || e[r] === "/" || e[r] === "%");) {
165
+ let n = e[r++], a = i();
166
+ if (a === null || n !== "*" && a === 0) return null;
167
+ t = n === "*" ? t * a : n === "/" ? Math.trunc(t / a) : t % a;
168
+ }
169
+ return t;
170
+ }, o = () => {
171
+ let t = a();
172
+ for (; t !== null && (e[r] === "+" || e[r] === "-");) {
173
+ let n = e[r++], i = a();
174
+ if (i === null) return null;
175
+ t = n === "+" ? t + i : t - i;
176
+ }
177
+ return t;
178
+ }, s = o();
179
+ return r === e.length && s !== null && s >= 0 ? s : null;
180
+ }
181
+ //#endregion
182
+ export { i as extractUniformArrays, r as extractUniformNames };
183
+
184
+ //# sourceMappingURL=extractUniformNames.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extractUniformNames.js","names":["QUALIFIERS","IDENT","MAX_DEPTH","extractUniformNames","scanUniforms","glsl","extractUniformArrays","preprocess","toks","tokenize","code","consts","structs","out","arrays","resolveName","depth","best","body","defines","name","v","evalInt","n","evalSize","from","to","closer","k","open","arraySuffix","j","end","declarators","found","size","next","typeSize","structSpecifier","i","members","type","afterType","decls","term","d","prior","m","p","expand","t","spliced","stripped","line","def","src","intLiteral","tok","primary","sum","lookup","product","op","r"],"sources":["../../../src/renderer/shaders/extractUniformNames.ts"],"sourcesContent":["/** Qualifiers GLSL allows between `uniform` and the type name, and before a\n * struct member's type. */\nconst QUALIFIERS = new Set([\n 'lowp', 'mediump', 'highp', 'precise', 'invariant',\n 'centroid', 'flat', 'smooth', 'noperspective',\n]);\n\nconst IDENT = /^[A-Za-z_]\\w*$/;\nconst MAX_DEPTH = 16;\n\ninterface Member {\n readonly type: string | readonly Member[];\n readonly name: string;\n /** `null` for a non-array. */\n readonly size: number | null;\n}\n\n/**\n * The names a program's uniforms answer to in `getUniformLocation`: array\n * uniforms per slot (`u_ripples[0]`), struct uniforms per leaf\n * (`u_lights[1].pos`), nested structs and array members included.\n *\n * A declaration scanner over a token stream, not a GLSL parser. Comments are\n * stripped; interface blocks are skipped, since a UBO's members are bound\n * through a buffer rather than a location. Array sizes resolve through integer\n * literals, `#define`s and top-level `const int`s, with `+ - * / %` between\n * them; a size it cannot resolve drops that declarator, and a later write to\n * it warns.\n */\nexport function extractUniformNames(glsl: string): string[] {\n return [...scanUniforms(glsl).names];\n}\n\n/** An array uniform of a basic type: its element type as spelled (`vec3`,\n * `int`, `mat4`) and its declared length. */\nexport interface UniformArrayDecl {\n readonly type: string;\n readonly size: number;\n}\n\n/**\n * Every array of a basic type a program declares, keyed by the name its slots\n * hang off (`u_ripples` for `u_ripples[0]`). An array inside a struct is keyed\n * by its full path (`u_lights[1].weights`); an array of structs is not an\n * entry, since it has no single element type.\n */\nexport function extractUniformArrays(glsl: string): Map<string, UniformArrayDecl> {\n return scanUniforms(glsl).arrays;\n}\n\nfunction scanUniforms(glsl: string): { names: Set<string>; arrays: Map<string, UniformArrayDecl> } {\n const { code, defines } = preprocess(glsl);\n const toks = tokenize(code);\n const consts = new Map<string, number>();\n const structs = new Map<string, Member[]>();\n const out = new Set<string>();\n const arrays = new Map<string, UniformArrayDecl>();\n\n const resolveName = (name: string, depth: number): number | null => {\n if (depth > MAX_DEPTH) return null;\n let best: number | null = null;\n for (const body of defines.get(name) ?? []) {\n const v = evalInt(tokenize(body), (n) => resolveName(n, depth + 1));\n if (v !== null && (best === null || v > best)) best = v;\n }\n return best ?? consts.get(name) ?? null;\n };\n const evalSize = (from: number, to: number) => evalInt(toks.slice(from, to), (n) => resolveName(n, 0));\n\n /** Index of the token closing the bracket opened at `open`. */\n const closer = (open: number): number => {\n let depth = 0;\n for (let k = open; k < toks.length; k++) {\n if (toks[k] === '(' || toks[k] === '[' || toks[k] === '{') depth++;\n else if (toks[k] === ')' || toks[k] === ']' || toks[k] === '}') {\n if (--depth === 0) return k;\n }\n }\n return toks.length;\n };\n\n /** Parses `[size]` at `j` if present: the size (undefined if absent, null\n * if unresolvable) and where scanning resumes. */\n const arraySuffix = (j: number): [number | null | undefined, number] => {\n if (toks[j] !== '[') return [undefined, j];\n const end = closer(j);\n return [evalSize(j + 1, end), end + 1];\n };\n\n /** Declarators `a, b[2], c` up to the terminating `;` (or `}`), after the\n * type at `j`. Returns them and the index of the terminator. */\n const declarators = (\n j: number,\n typeSize: number | null | undefined,\n ): [{ name: string; size: number | null | undefined }[], number] => {\n const found: { name: string; size: number | null | undefined }[] = [];\n while (j < toks.length && toks[j] !== ';' && toks[j] !== '}') {\n const name = toks[j];\n const [size, next] = arraySuffix(j + 1);\n j = next;\n if (IDENT.test(name)) found.push({ name, size: size === undefined ? typeSize : size });\n // Skip an initializer, or anything else, to the next declarator.\n while (j < toks.length && toks[j] !== ',' && toks[j] !== ';' && toks[j] !== '}') {\n j = toks[j] === '(' || toks[j] === '[' || toks[j] === '{' ? closer(j) + 1 : j + 1;\n }\n if (toks[j] === ',') j++;\n }\n return [found, j];\n };\n\n /** `struct Name? { members }` at `i`; records a named struct. */\n const structSpecifier = (i: number): [Member[], number] => {\n let j = i + 1;\n const name = toks[j] !== '{' ? toks[j++] : undefined;\n const members: Member[] = [];\n if (toks[j] !== '{') return [members, j];\n const end = closer(j);\n j++;\n while (j < end) {\n while (QUALIFIERS.has(toks[j])) j++;\n let type: string | Member[];\n if (toks[j] === 'struct') [type, j] = structSpecifier(j);\n else type = toks[j++];\n const [typeSize, afterType] = arraySuffix(j);\n const [decls, term] = declarators(afterType, typeSize);\n for (const d of decls) if (d.size !== null) members.push({ type, name: d.name, size: d.size ?? null });\n j = term + 1;\n }\n if (name) {\n // A struct redefined in another preprocessor branch keeps both members lists.\n const prior = structs.get(name) ?? [];\n for (const m of members) if (!prior.some((p) => p.name === m.name)) prior.push(m);\n structs.set(name, prior);\n }\n return [members, end + 1];\n };\n\n const expand = (name: string, type: string | readonly Member[], size: number | null, depth: number): void => {\n if (depth > MAX_DEPTH) return;\n if (size !== null) {\n if (typeof type === 'string' && !structs.has(type)) {\n const prior = arrays.get(name);\n if (!prior || size > prior.size) arrays.set(name, { type, size });\n }\n for (let k = 0; k < size; k++) expand(`${name}[${k}]`, type, null, depth + 1);\n return;\n }\n const members = typeof type === 'string' ? structs.get(type) : type;\n if (!members) {\n out.add(name);\n return;\n }\n for (const m of members) expand(`${name}.${m.name}`, m.type, m.size, depth + 1);\n };\n\n let depth = 0;\n for (let i = 0; i < toks.length; i++) {\n const t = toks[i];\n if (t === '{') depth++;\n else if (t === '}') depth--;\n else if (t === 'struct') i = structSpecifier(i)[1] - 1;\n else if (depth === 0 && t === 'const') {\n let j = i + 1;\n while (QUALIFIERS.has(toks[j])) j++;\n if ((toks[j] === 'int' || toks[j] === 'uint') && IDENT.test(toks[j + 1] ?? '') && toks[j + 2] === '=') {\n let end = j + 3;\n while (end < toks.length && toks[end] !== ';') end++;\n const v = evalSize(j + 3, end);\n const prior = consts.get(toks[j + 1]);\n if (v !== null && (prior === undefined || v > prior)) consts.set(toks[j + 1], v);\n }\n } else if (depth === 0 && t === 'uniform') {\n let j = i + 1;\n while (QUALIFIERS.has(toks[j])) j++;\n let type: string | Member[];\n if (toks[j] === 'struct') {\n [type, j] = structSpecifier(j);\n } else if (toks[j + 1] === '{') {\n // An interface block: skip it and its instance name.\n j = closer(j + 1) + 1;\n while (j < toks.length && toks[j] !== ';') j++;\n i = j;\n continue;\n } else {\n type = toks[j++];\n }\n const [typeSize, afterType] = arraySuffix(j);\n const [decls, term] = declarators(afterType, typeSize);\n for (const d of decls) if (d.size !== null) expand(d.name, type, d.size ?? null, 0);\n i = term;\n }\n }\n return { names: out, arrays };\n}\n\n/** Comments stripped and directives removed. Every conditional branch is kept:\n * an extra name only looks up a null location, a missing one drops writes. */\nfunction preprocess(glsl: string): { code: string; defines: Map<string, string[]> } {\n const spliced = glsl.replace(/\\\\\\r?\\n/g, '');\n let stripped = '';\n for (let k = 0; k < spliced.length; k++) {\n if (spliced[k] === '/' && spliced[k + 1] === '/') {\n while (k < spliced.length && spliced[k] !== '\\n') k++;\n stripped += '\\n';\n } else if (spliced[k] === '/' && spliced[k + 1] === '*') {\n const end = spliced.indexOf('*/', k + 2);\n k = end < 0 ? spliced.length : end + 1;\n stripped += ' ';\n } else {\n stripped += spliced[k];\n }\n }\n const defines = new Map<string, string[]>();\n const lines = stripped.split('\\n').map((line) => {\n if (!/^\\s*#/.test(line)) return line;\n const def = /^\\s*#\\s*define\\s+([A-Za-z_]\\w*)(\\(?)(.*)$/.exec(line);\n if (def && !def[2]) defines.set(def[1], [...(defines.get(def[1]) ?? []), def[3].trim()]);\n return '';\n });\n return { code: lines.join('\\n'), defines };\n}\n\nfunction tokenize(src: string): string[] {\n return src.match(/[A-Za-z_]\\w*|\\d[\\w.]*|\\S/g) ?? [];\n}\n\nfunction intLiteral(tok: string): number | null {\n const m = /^(?:0[xX]([0-9a-fA-F]+)|(0[0-7]*)|([1-9]\\d*))[uU]?$/.exec(tok);\n if (!m) return null;\n if (m[1] !== undefined) return parseInt(m[1], 16);\n if (m[2] !== undefined) return parseInt(m[2], 8);\n return parseInt(m[3], 10);\n}\n\n/** Integer constant expression over `+ - * / %` and parentheses. */\nfunction evalInt(toks: readonly string[], lookup: (name: string) => number | null): number | null {\n let p = 0;\n const primary = (): number | null => {\n const t = toks[p++];\n if (t === '(') {\n const v = sum();\n return toks[p++] === ')' ? v : null;\n }\n if (t === '-') {\n const v = primary();\n return v === null ? null : -v;\n }\n if (t === '+') return primary();\n if (t === undefined) return null;\n return intLiteral(t) ?? (IDENT.test(t) ? lookup(t) : null);\n };\n const product = (): number | null => {\n let v = primary();\n while (v !== null && (toks[p] === '*' || toks[p] === '/' || toks[p] === '%')) {\n const op = toks[p++];\n const r = primary();\n if (r === null || (op !== '*' && r === 0)) return null;\n v = op === '*' ? v * r : op === '/' ? Math.trunc(v / r) : v % r;\n }\n return v;\n };\n const sum = (): number | null => {\n let v = product();\n while (v !== null && (toks[p] === '+' || toks[p] === '-')) {\n const op = toks[p++];\n const r = product();\n if (r === null) return null;\n v = op === '+' ? v + r : v - r;\n }\n return v;\n };\n const v = sum();\n return p === toks.length && v !== null && v >= 0 ? v : null;\n}\n"],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ import { BATCH_ATTRIBUTE_LOCATIONS as e, BATCH_TEXTURE_SLOTS as t } from "./batchFill.js";
2
+ import { GRAD_FILL_UNIFORMS as n, GRAD_PAINT_GLSL as r } from "./gradFill.js";
3
+ import { PATTERN_FILL_UNIFORMS as i, PATTERN_PAINT_GLSL as a } from "./patternFill.js";
4
+ import { GLYPH_COVERAGE_GLSL as o } from "@weasel-js/font";
5
+ //#region src/renderer/shaders/glyphPaint.ts
6
+ var s = e, c = `#version 300 es
7
+ layout(location = ${s.a_position}) in vec2 a_position;
8
+ layout(location = ${s.a_uv}) in vec2 a_uv;
9
+ layout(location = ${s.a_texSlot}) in float a_texSlot;
10
+ uniform mat3 u_proj;
11
+ uniform mat3 u_model;
12
+ uniform mat3 u_worldInv;
13
+ out vec2 v_world;
14
+ out vec2 v_uv;
15
+ flat out float v_glyphMode;
16
+ void main() {
17
+ vec3 screen = u_model * vec3(a_position, 1.0);
18
+ vec3 clip = u_proj * vec3(screen.xy, 1.0);
19
+ gl_Position = vec4(clip.xy, 0.0, 1.0);
20
+ v_world = (u_worldInv * vec3(screen.xy, 1.0)).xy;
21
+ v_uv = a_uv;
22
+ v_glyphMode = float(int(a_texSlot + 0.5) / ${t});
23
+ }
24
+ `;
25
+ function l(e) {
26
+ return `#version 300 es
27
+ precision highp float;
28
+ in vec2 v_world;
29
+ in vec2 v_uv;
30
+ flat in float v_glyphMode;
31
+ uniform sampler2D u_atlas;
32
+ uniform float u_synthBold;
33
+ uniform vec2 u_fieldScale;
34
+ ${e}
35
+ ${o}
36
+ out vec4 outColor;
37
+ void main() {
38
+ float coverage = glyphCoverage(texture(u_atlas, v_uv), v_glyphMode, u_synthBold, v_uv, u_fieldScale);
39
+ outColor = shadePaint(v_world) * coverage;
40
+ }
41
+ `;
42
+ }
43
+ var u = "\nuniform sampler2D u_sampler;\nvec4 shadePaint(vec2 uv) {\n return texture(u_sampler, uv);\n}\n", d = l(a), f = l(r), p = l(u), m = [
44
+ "u_atlas",
45
+ "u_synthBold",
46
+ "u_fieldScale"
47
+ ], h = [...i, ...m], g = [...n, ...m], _ = [
48
+ "u_proj",
49
+ "u_model",
50
+ "u_worldInv",
51
+ "u_sampler",
52
+ ...m
53
+ ], v = [
54
+ "a_position",
55
+ "a_uv",
56
+ "a_texSlot"
57
+ ];
58
+ //#endregion
59
+ export { f as GLYPH_GRAD_FRAG_SRC, g as GLYPH_GRAD_UNIFORMS, v as GLYPH_PAINT_ATTRIBUTES, c as GLYPH_PAINT_VERT_SRC, d as GLYPH_PATTERN_FRAG_SRC, h as GLYPH_PATTERN_UNIFORMS, p as GLYPH_TEXTURE_FRAG_SRC, _ as GLYPH_TEXTURE_UNIFORMS };
60
+
61
+ //# sourceMappingURL=glyphPaint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glyphPaint.js","names":["L","BATCH_ATTRIBUTE_LOCATIONS","GLYPH_PAINT_VERT_SRC","BATCH_TEXTURE_SLOTS","fragSrc","paintGlsl","GLYPH_COVERAGE_GLSL","TEXTURE_PAINT_GLSL","GLYPH_PATTERN_FRAG_SRC","PATTERN_PAINT_GLSL","GLYPH_GRAD_FRAG_SRC","GRAD_PAINT_GLSL","GLYPH_TEXTURE_FRAG_SRC","GLYPH_UNIFORMS","GLYPH_PATTERN_UNIFORMS","PATTERN_FILL_UNIFORMS","GLYPH_GRAD_UNIFORMS","GRAD_FILL_UNIFORMS","GLYPH_TEXTURE_UNIFORMS","GLYPH_PAINT_ATTRIBUTES"],"sources":["../../../src/renderer/shaders/glyphPaint.ts"],"sourcesContent":["/**\n * GLSL ES 3.0 sources for atlas glyphs filled by a texture paint — a pattern, a\n * gradient or a registered kind — rather than one color.\n *\n * **The glyph is a mask over the paint.** The fragment takes its coverage from\n * the distance field exactly as the batch program does, and its color from the\n * same `shadePaint` the path program for that paint runs, at the same\n * paint-space point: `u_worldInv` applied to the screen position. An outline\n * glyph is a path, so it goes through that path program — which is what makes\n * a paint read the same on either side of the outline-tier threshold.\n *\n * **The vertices are the batch's.** A glyph run stages into `DrawBatch` as\n * usual and this program draws it in place of the batch program, so the\n * attribute locations are pinned to the batch shader's and one VAO serves\n * both. Positions arrive already in screen space, so `u_model` is identity.\n *\n * Coverage is taken before `shadePaint` runs, and outside any branch: `fwidth`\n * in non-uniform control flow is undefined. The gradient's branches are on a\n * uniform, so they could not make it so, but the order keeps it from mattering.\n *\n * Output: PREMULTIPLIED alpha, the paint's own scaled by coverage.\n */\n\nimport { GLYPH_COVERAGE_GLSL } from '@weasel-js/font';\nimport { BATCH_ATTRIBUTE_LOCATIONS, BATCH_TEXTURE_SLOTS } from './batchFill';\nimport { GRAD_FILL_UNIFORMS, GRAD_PAINT_GLSL } from './gradFill';\nimport { PATTERN_FILL_UNIFORMS, PATTERN_PAINT_GLSL } from './patternFill';\n\nconst L = BATCH_ATTRIBUTE_LOCATIONS;\n\nexport const GLYPH_PAINT_VERT_SRC = /* glsl */ `#version 300 es\nlayout(location = ${L.a_position}) in vec2 a_position;\nlayout(location = ${L.a_uv}) in vec2 a_uv;\nlayout(location = ${L.a_texSlot}) in float a_texSlot;\nuniform mat3 u_proj;\nuniform mat3 u_model;\nuniform mat3 u_worldInv;\nout vec2 v_world;\nout vec2 v_uv;\nflat out float v_glyphMode;\nvoid main() {\n vec3 screen = u_model * vec3(a_position, 1.0);\n vec3 clip = u_proj * vec3(screen.xy, 1.0);\n gl_Position = vec4(clip.xy, 0.0, 1.0);\n v_world = (u_worldInv * vec3(screen.xy, 1.0)).xy;\n v_uv = a_uv;\n v_glyphMode = float(int(a_texSlot + 0.5) / ${BATCH_TEXTURE_SLOTS});\n}\n`;\n\nfunction fragSrc(paintGlsl: string): string {\n return /* glsl */ `#version 300 es\nprecision highp float;\nin vec2 v_world;\nin vec2 v_uv;\nflat in float v_glyphMode;\nuniform sampler2D u_atlas;\nuniform float u_synthBold;\nuniform vec2 u_fieldScale;\n${paintGlsl}\n${GLYPH_COVERAGE_GLSL}\nout vec4 outColor;\nvoid main() {\n float coverage = glyphCoverage(texture(u_atlas, v_uv), v_glyphMode, u_synthBold, v_uv, u_fieldScale);\n outColor = shadePaint(v_world) * coverage;\n}\n`;\n}\n\n/**\n * A registered paint kind binds a whole program of its own, which nothing can\n * wrap in a mask, so it renders into an offscreen buffer first and the glyphs\n * sample that. `u_worldInv` takes the screen position straight to the\n * buffer's texture coordinate, and the texel is already premultiplied and\n * faded — the kind's own program did both.\n */\nconst TEXTURE_PAINT_GLSL = /* glsl */ `\nuniform sampler2D u_sampler;\nvec4 shadePaint(vec2 uv) {\n return texture(u_sampler, uv);\n}\n`;\n\nexport const GLYPH_PATTERN_FRAG_SRC = fragSrc(PATTERN_PAINT_GLSL);\nexport const GLYPH_GRAD_FRAG_SRC = fragSrc(GRAD_PAINT_GLSL);\nexport const GLYPH_TEXTURE_FRAG_SRC = fragSrc(TEXTURE_PAINT_GLSL);\n\nconst GLYPH_UNIFORMS = ['u_atlas', 'u_synthBold', 'u_fieldScale'] as const;\nexport const GLYPH_PATTERN_UNIFORMS = [...PATTERN_FILL_UNIFORMS, ...GLYPH_UNIFORMS] as const;\nexport const GLYPH_GRAD_UNIFORMS = [...GRAD_FILL_UNIFORMS, ...GLYPH_UNIFORMS] as const;\nexport const GLYPH_TEXTURE_UNIFORMS = [\n 'u_proj', 'u_model', 'u_worldInv', 'u_sampler', ...GLYPH_UNIFORMS,\n] as const;\nexport const GLYPH_PAINT_ATTRIBUTES = ['a_position', 'a_uv', 'a_texSlot'] as const;\n"],"mappings":";;;;;AA4BA,IAAMA,IAAIC,GAEGC,IAAkC;oBAC3BF,EAAE,WAAW;oBACbA,EAAE,KAAK;oBACPA,EAAE,UAAU;;;;;;;;;;;;;+CAaeG,EAAoB;;;AAInE,SAASC,EAAQ,GAA2B;CAC1C,OAAkB;;;;;;;;EAQlBC,EAAU;EACVC,EAAoB;;;;;;;AAOtB;AASA,IAAMC,IAAgC,qGAOzBC,IAAyBJ,EAAQK,CAAkB,GACnDC,IAAsBN,EAAQO,CAAe,GAC7CC,IAAyBR,EAAQG,CAAkB,GAE1DM,IAAiB;CAAC;CAAW;CAAe;AAAc,GACnDC,IAAyB,CAAC,GAAGC,GAAuB,GAAGF,CAAc,GACrEG,IAAsB,CAAC,GAAGC,GAAoB,GAAGJ,CAAc,GAC/DK,IAAyB;CACpC;CAAU;CAAW;CAAc;CAAa,GAAGL;AACrD,GACaM,IAAyB;CAAC;CAAc;CAAQ;AAAW"}
@@ -0,0 +1,30 @@
1
+ //#region src/renderer/shaders/gradFill.ts
2
+ var e = "#version 300 es\nin vec2 a_position;\nuniform mat3 u_proj;\nuniform mat3 u_model;\nuniform mat3 u_worldInv;\nout vec2 v_world;\nvoid main() {\n vec3 screen = u_model * vec3(a_position, 1.0);\n vec3 clip = u_proj * vec3(screen.xy, 1.0);\n gl_Position = vec4(clip.xy, 0.0, 1.0);\n vec3 world = u_worldInv * vec3(screen.xy, 1.0);\n v_world = world.xy;\n}\n", t = "\nuniform sampler2D u_ramp;\nuniform float u_rampV;\nuniform float u_alpha;\nuniform mat4 u_colorMatrix;\nuniform vec4 u_colorBias;\nuniform float u_opacity;\nuniform int u_gradKind;\nuniform vec2 u_gradP0;\nuniform vec2 u_gradDir;\nuniform float u_gradLen;\nuniform float u_gradRadius;\nuniform float u_gradAngle;\n\nconst float PI = 3.14159265358979323846;\n\nvec4 shadePaint(vec2 world) {\n float t;\n if (u_gradKind == 0) {\n vec2 d = world - u_gradP0;\n t = dot(d, u_gradDir) / max(u_gradLen, 0.0001);\n } else if (u_gradKind == 1) {\n t = length(world - u_gradP0) / max(u_gradRadius, 0.0001);\n } else {\n float a = atan(world.y - u_gradP0.y, world.x - u_gradP0.x) - u_gradAngle;\n t = fract(a / (2.0 * PI));\n }\n t = clamp(t, 0.0, 1.0);\n vec4 rampColor = texture(u_ramp, vec2(t, u_rampV));\n // Fill opacity into the alpha channel before the matrix, which is where the\n // batch program's vertex alpha sits. The two have to agree, since a linear\n // gradient goes through that one and a radial through this.\n vec4 src = vec4(rampColor.rgb, rampColor.a * u_opacity);\n vec4 mapped = clamp(u_colorMatrix * src + u_colorBias, 0.0, 1.0);\n float a = mapped.a * u_alpha;\n return vec4(mapped.rgb * a, a);\n}\n", n = `#version 300 es
3
+ precision highp float;
4
+ in vec2 v_world;
5
+ ${t}
6
+ out vec4 outColor;
7
+ void main() {
8
+ outColor = shadePaint(v_world);
9
+ }
10
+ `, r = [
11
+ "u_proj",
12
+ "u_model",
13
+ "u_worldInv",
14
+ "u_ramp",
15
+ "u_rampV",
16
+ "u_alpha",
17
+ "u_opacity",
18
+ "u_colorMatrix",
19
+ "u_colorBias",
20
+ "u_gradKind",
21
+ "u_gradP0",
22
+ "u_gradDir",
23
+ "u_gradLen",
24
+ "u_gradRadius",
25
+ "u_gradAngle"
26
+ ], i = ["a_position"];
27
+ //#endregion
28
+ export { i as GRAD_FILL_ATTRIBUTES, r as GRAD_FILL_UNIFORMS, n as GRAD_FRAG_SRC, t as GRAD_PAINT_GLSL, e as GRAD_VERT_SRC };
29
+
30
+ //# sourceMappingURL=gradFill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gradFill.js","names":["GRAD_VERT_SRC","GRAD_PAINT_GLSL","GRAD_FRAG_SRC","GRAD_FILL_UNIFORMS","GRAD_FILL_ATTRIBUTES"],"sources":["../../../src/renderer/shaders/gradFill.ts"],"sourcesContent":["/**\n * GLSL ES 3.0 sources for gradient-fill paths (linear, radial, conic).\n *\n * Three gradient kinds via u_gradKind (0=linear, 1=radial, 2=conic).\n * The branch value is uniform across all fragments in one draw call — GPU\n * branch predictor handles uniform-value branches without warp divergence.\n *\n * Output convention §2: PREMULTIPLIED alpha.\n *\n * `u_ramp` is `GradientRampAtlas`'s texture, which holds every baked ramp in\n * the frame, one per row; `u_rampV` picks this fill's row.\n *\n * Step-4 limitation: u_worldInv is identity in v1 since draw.ts doesn't yet\n * receive a view matrix. Gradient coords therefore render in screen space.\n * Step 7 (port createPathLayer) wires the actual view-inverse through layers.\n */\n\nexport const GRAD_VERT_SRC = /* glsl */ `#version 300 es\nin vec2 a_position;\nuniform mat3 u_proj;\nuniform mat3 u_model;\nuniform mat3 u_worldInv;\nout vec2 v_world;\nvoid main() {\n vec3 screen = u_model * vec3(a_position, 1.0);\n vec3 clip = u_proj * vec3(screen.xy, 1.0);\n gl_Position = vec4(clip.xy, 0.0, 1.0);\n vec3 world = u_worldInv * vec3(screen.xy, 1.0);\n v_world = world.xy;\n}\n`;\n\n/**\n * The gradient's color at a gradient-space point, premultiplied — the whole\n * of the fragment stage but the point it is asked about, so the glyph program\n * can mask the same paint the path program draws.\n */\nexport const GRAD_PAINT_GLSL = /* glsl */ `\nuniform sampler2D u_ramp;\nuniform float u_rampV;\nuniform float u_alpha;\nuniform mat4 u_colorMatrix;\nuniform vec4 u_colorBias;\nuniform float u_opacity;\nuniform int u_gradKind;\nuniform vec2 u_gradP0;\nuniform vec2 u_gradDir;\nuniform float u_gradLen;\nuniform float u_gradRadius;\nuniform float u_gradAngle;\n\nconst float PI = 3.14159265358979323846;\n\nvec4 shadePaint(vec2 world) {\n float t;\n if (u_gradKind == 0) {\n vec2 d = world - u_gradP0;\n t = dot(d, u_gradDir) / max(u_gradLen, 0.0001);\n } else if (u_gradKind == 1) {\n t = length(world - u_gradP0) / max(u_gradRadius, 0.0001);\n } else {\n float a = atan(world.y - u_gradP0.y, world.x - u_gradP0.x) - u_gradAngle;\n t = fract(a / (2.0 * PI));\n }\n t = clamp(t, 0.0, 1.0);\n vec4 rampColor = texture(u_ramp, vec2(t, u_rampV));\n // Fill opacity into the alpha channel before the matrix, which is where the\n // batch program's vertex alpha sits. The two have to agree, since a linear\n // gradient goes through that one and a radial through this.\n vec4 src = vec4(rampColor.rgb, rampColor.a * u_opacity);\n vec4 mapped = clamp(u_colorMatrix * src + u_colorBias, 0.0, 1.0);\n float a = mapped.a * u_alpha;\n return vec4(mapped.rgb * a, a);\n}\n`;\n\nexport const GRAD_FRAG_SRC = /* glsl */ `#version 300 es\nprecision highp float;\nin vec2 v_world;\n${GRAD_PAINT_GLSL}\nout vec4 outColor;\nvoid main() {\n outColor = shadePaint(v_world);\n}\n`;\n\nexport const GRAD_FILL_UNIFORMS = [\n 'u_proj', 'u_model', 'u_worldInv', 'u_ramp', 'u_rampV',\n 'u_alpha', 'u_opacity', 'u_colorMatrix', 'u_colorBias',\n 'u_gradKind', 'u_gradP0', 'u_gradDir', 'u_gradLen', 'u_gradRadius', 'u_gradAngle',\n] as const;\n\nexport const GRAD_FILL_ATTRIBUTES = ['a_position'] as const;\n"],"mappings":";AAiBA,IAAaA,IAA2B,6WAoB3BC,IAA6B,uuCAuC7BC,IAA2B;;;EAGtCD,EAAgB;;;;;GAOLE,IAAqB;CAChC;CAAU;CAAW;CAAc;CAAU;CAC7C;CAAW;CAAa;CAAiB;CACzC;CAAc;CAAY;CAAa;CAAa;CAAgB;AACtE,GAEaC,IAAuB,CAAC,YAAY"}
@@ -0,0 +1,14 @@
1
+ //#region src/renderer/shaders/imageFill.ts
2
+ var e = "#version 300 es\nin vec2 a_position;\nin vec2 a_uv;\nuniform mat3 u_proj;\nuniform mat3 u_model;\nout vec2 v_uv;\nvoid main() {\n vec3 screen = u_model * vec3(a_position, 1.0);\n vec3 clip = u_proj * vec3(screen.xy, 1.0);\n gl_Position = vec4(clip.xy, 0.0, 1.0);\n v_uv = a_uv;\n}\n", t = "#version 300 es\nprecision highp float;\nin vec2 v_uv;\nuniform sampler2D u_sampler;\nuniform float u_opacity;\nuniform float u_alpha;\nuniform mat4 u_colorMatrix;\nuniform vec4 u_colorBias;\nout vec4 outColor;\nvoid main() {\n vec4 texel = texture(u_sampler, v_uv);\n vec4 mapped = clamp(u_colorMatrix * texel + u_colorBias, 0.0, 1.0);\n float a = mapped.a * u_opacity * u_alpha;\n outColor = vec4(mapped.rgb * a, a);\n}\n", n = [
3
+ "u_proj",
4
+ "u_model",
5
+ "u_sampler",
6
+ "u_opacity",
7
+ "u_alpha",
8
+ "u_colorMatrix",
9
+ "u_colorBias"
10
+ ], r = ["a_position", "a_uv"];
11
+ //#endregion
12
+ export { r as IMAGE_FILL_ATTRIBUTES, n as IMAGE_FILL_UNIFORMS, t as IMAGE_FRAG_SRC, e as IMAGE_VERT_SRC };
13
+
14
+ //# sourceMappingURL=imageFill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"imageFill.js","names":["IMAGE_VERT_SRC","IMAGE_FRAG_SRC","IMAGE_FILL_UNIFORMS","IMAGE_FILL_ATTRIBUTES"],"sources":["../../../src/renderer/shaders/imageFill.ts"],"sourcesContent":["/**\n * GLSL ES 3.0 sources for the image / pattern fill shader.\n *\n * Two variants:\n * - Flat: IMAGE_VERT_SRC + IMAGE_FRAG_SRC, one quad under `u_opacity`.\n * - VOpacity: IMAGE_VOPACITY_VERT_SRC + IMAGE_VOPACITY_FRAG_SRC, which reads\n * the same factor off a per-vertex `a_opacity` instead. The batch draws\n * with it so quads differing only in opacity still share one draw.\n *\n * The fold is exact, not an approximation under conditions the way the solid\n * batch's is: `u_opacity` multiplies the alpha *after* the color matrix, so\n * moving it to an attribute cannot interact with the matrix. Group alpha\n * multiplies there too, which is why the batch folds it into the same\n * attribute and leaves `u_alpha` at 1.\n *\n * Inputs:\n * a_position vec2 screen-space x,y of the quad corner\n * a_uv vec2 texture coordinate 0..1\n * a_opacity float VOpacity only — replaces `u_opacity` per vertex\n *\n * Uniforms:\n * u_proj mat3 screen → clip projection\n * u_model mat3 cumulative group transform\n * u_sampler sampler2D image texture (TEXTURE0)\n * u_opacity float flat only — overall opacity, 0..1\n * u_alpha float group alpha, 0..1 (the batch leaves it at 1)\n * u_colorMatrix mat4 color transform applied to sampled texel before premultiply\n * u_colorBias vec4 bias added after the matrix (identity = zero bias)\n *\n * Output convention §2: PREMULTIPLIED alpha — `vec4(rgb * a, a)`.\n * Pattern fills reuse this shader; wrapping is baked into the texture state.\n */\n\nexport const IMAGE_VERT_SRC = /* glsl */ `#version 300 es\nin vec2 a_position;\nin vec2 a_uv;\nuniform mat3 u_proj;\nuniform mat3 u_model;\nout vec2 v_uv;\nvoid main() {\n vec3 screen = u_model * vec3(a_position, 1.0);\n vec3 clip = u_proj * vec3(screen.xy, 1.0);\n gl_Position = vec4(clip.xy, 0.0, 1.0);\n v_uv = a_uv;\n}\n`;\n\nexport const IMAGE_FRAG_SRC = /* glsl */ `#version 300 es\nprecision highp float;\nin vec2 v_uv;\nuniform sampler2D u_sampler;\nuniform float u_opacity;\nuniform float u_alpha;\nuniform mat4 u_colorMatrix;\nuniform vec4 u_colorBias;\nout vec4 outColor;\nvoid main() {\n vec4 texel = texture(u_sampler, v_uv);\n vec4 mapped = clamp(u_colorMatrix * texel + u_colorBias, 0.0, 1.0);\n float a = mapped.a * u_opacity * u_alpha;\n outColor = vec4(mapped.rgb * a, a);\n}\n`;\n\nexport const IMAGE_VOPACITY_VERT_SRC = /* glsl */ `#version 300 es\nin vec2 a_position;\nin vec2 a_uv;\nin float a_opacity;\nuniform mat3 u_proj;\nuniform mat3 u_model;\nout vec2 v_uv;\nout float v_opacity;\nvoid main() {\n vec3 screen = u_model * vec3(a_position, 1.0);\n vec3 clip = u_proj * vec3(screen.xy, 1.0);\n gl_Position = vec4(clip.xy, 0.0, 1.0);\n v_uv = a_uv;\n v_opacity = a_opacity;\n}\n`;\n\nexport const IMAGE_VOPACITY_FRAG_SRC = /* glsl */ `#version 300 es\nprecision highp float;\nin vec2 v_uv;\nin float v_opacity;\nuniform sampler2D u_sampler;\nuniform float u_alpha;\nuniform mat4 u_colorMatrix;\nuniform vec4 u_colorBias;\nout vec4 outColor;\nvoid main() {\n vec4 texel = texture(u_sampler, v_uv);\n vec4 mapped = clamp(u_colorMatrix * texel + u_colorBias, 0.0, 1.0);\n float a = mapped.a * v_opacity * u_alpha;\n outColor = vec4(mapped.rgb * a, a);\n}\n`;\n\nexport const IMAGE_FILL_UNIFORMS = [\n 'u_proj', 'u_model', 'u_sampler', 'u_opacity', 'u_alpha',\n 'u_colorMatrix', 'u_colorBias',\n] as const;\n\nexport const IMAGE_FILL_ATTRIBUTES = ['a_position', 'a_uv'] as const;\n\n/** `u_opacity` is absent: the driver strips a uniform the source never reads,\n * so looking it up here would cache an undefined location under a live name. */\nexport const IMAGE_VOPACITY_UNIFORMS = [\n 'u_proj', 'u_model', 'u_sampler', 'u_alpha',\n 'u_colorMatrix', 'u_colorBias',\n] as const;\n\nexport const IMAGE_VOPACITY_ATTRIBUTES = ['a_position', 'a_uv', 'a_opacity'] as const;\n"],"mappings":";AAiCA,IAAaA,IAA4B,qSAc5BC,IAA4B,+aAmD5BC,IAAsB;CACjC;CAAU;CAAW;CAAa;CAAa;CAC/C;CAAiB;AACnB,GAEaC,IAAwB,CAAC,cAAc,MAAM"}
@@ -0,0 +1,13 @@
1
+ //#region src/renderer/shaders/pathFill.ts
2
+ var e = "#version 300 es\nin vec2 a_position;\nuniform mat3 u_proj;\nuniform mat3 u_model;\nvoid main() {\n vec3 screen = u_model * vec3(a_position, 1.0);\n vec3 clip = u_proj * vec3(screen.xy, 1.0);\n gl_Position = vec4(clip.xy, 0.0, 1.0);\n}\n", t = "#version 300 es\nprecision highp float;\nuniform vec4 u_color;\nuniform float u_alpha;\nuniform mat4 u_colorMatrix;\nuniform vec4 u_colorBias;\nout vec4 outColor;\nvoid main() {\n vec4 mapped = clamp(u_colorMatrix * u_color + u_colorBias, 0.0, 1.0);\n float a = mapped.a * u_alpha;\n outColor = vec4(mapped.rgb * a, a);\n}\n", n = "#version 300 es\nin vec2 a_position;\nin vec4 a_vertexColor;\nuniform mat3 u_proj;\nuniform mat3 u_model;\nout vec4 v_vertexColor;\nvoid main() {\n vec3 screen = u_model * vec3(a_position, 1.0);\n vec3 clip = u_proj * vec3(screen.xy, 1.0);\n gl_Position = vec4(clip.xy, 0.0, 1.0);\n v_vertexColor = a_vertexColor;\n}\n", r = "#version 300 es\nprecision highp float;\nin vec4 v_vertexColor;\nuniform vec4 u_color;\nuniform float u_alpha;\nuniform mat4 u_colorMatrix;\nuniform vec4 u_colorBias;\nout vec4 outColor;\nvoid main() {\n vec4 src = u_color * v_vertexColor;\n vec4 mapped = clamp(u_colorMatrix * src + u_colorBias, 0.0, 1.0);\n float a = mapped.a * u_alpha;\n outColor = vec4(mapped.rgb * a, a);\n}\n", i = [
3
+ "u_proj",
4
+ "u_model",
5
+ "u_color",
6
+ "u_alpha",
7
+ "u_colorMatrix",
8
+ "u_colorBias"
9
+ ], a = ["a_position"], o = ["a_position", "a_vertexColor"];
10
+ //#endregion
11
+ export { t as FRAG_SRC, a as PATH_FILL_ATTRIBUTES, i as PATH_FILL_UNIFORMS, o as PATH_FILL_VCOLOR_ATTRIBUTES, r as VCOLOR_FRAG_SRC, n as VCOLOR_VERT_SRC, e as VERT_SRC };
12
+
13
+ //# sourceMappingURL=pathFill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pathFill.js","names":["VERT_SRC","FRAG_SRC","VCOLOR_VERT_SRC","VCOLOR_FRAG_SRC","PATH_FILL_UNIFORMS","PATH_FILL_ATTRIBUTES","PATH_FILL_VCOLOR_ATTRIBUTES"],"sources":["../../../src/renderer/shaders/pathFill.ts"],"sourcesContent":["/**\n * GLSL ES 3.0 sources for the built-in solid-fill path shader.\n *\n * Two variants:\n * - Flat: VERT_SRC + FRAG_SRC, uses uniform color only.\n * - VColor: VCOLOR_VERT_SRC + VCOLOR_FRAG_SRC, multiplies a per-vertex\n * `a_vertexColor` attribute with `u_color`.\n *\n * Both variants take `u_colorMatrix` (mat4) + `u_colorBias` (vec4); the\n * color transform is applied to the straight-alpha SRC color BEFORE\n * premultiplication. Identity matrix + zero bias = pass-through.\n *\n * Output (both variants): PREMULTIPLIED alpha.\n * Blend: caller sets `gl.blendFunc(ONE, ONE_MINUS_SRC_ALPHA)`.\n */\n\nexport const VERT_SRC = /* glsl */ `#version 300 es\nin vec2 a_position;\nuniform mat3 u_proj;\nuniform mat3 u_model;\nvoid main() {\n vec3 screen = u_model * vec3(a_position, 1.0);\n vec3 clip = u_proj * vec3(screen.xy, 1.0);\n gl_Position = vec4(clip.xy, 0.0, 1.0);\n}\n`;\n\nexport const FRAG_SRC = /* glsl */ `#version 300 es\nprecision highp float;\nuniform vec4 u_color;\nuniform float u_alpha;\nuniform mat4 u_colorMatrix;\nuniform vec4 u_colorBias;\nout vec4 outColor;\nvoid main() {\n vec4 mapped = clamp(u_colorMatrix * u_color + u_colorBias, 0.0, 1.0);\n float a = mapped.a * u_alpha;\n outColor = vec4(mapped.rgb * a, a);\n}\n`;\n\nexport const VCOLOR_VERT_SRC = /* glsl */ `#version 300 es\nin vec2 a_position;\nin vec4 a_vertexColor;\nuniform mat3 u_proj;\nuniform mat3 u_model;\nout vec4 v_vertexColor;\nvoid main() {\n vec3 screen = u_model * vec3(a_position, 1.0);\n vec3 clip = u_proj * vec3(screen.xy, 1.0);\n gl_Position = vec4(clip.xy, 0.0, 1.0);\n v_vertexColor = a_vertexColor;\n}\n`;\n\nexport const VCOLOR_FRAG_SRC = /* glsl */ `#version 300 es\nprecision highp float;\nin vec4 v_vertexColor;\nuniform vec4 u_color;\nuniform float u_alpha;\nuniform mat4 u_colorMatrix;\nuniform vec4 u_colorBias;\nout vec4 outColor;\nvoid main() {\n vec4 src = u_color * v_vertexColor;\n vec4 mapped = clamp(u_colorMatrix * src + u_colorBias, 0.0, 1.0);\n float a = mapped.a * u_alpha;\n outColor = vec4(mapped.rgb * a, a);\n}\n`;\n\n/** Uniforms shared between flat and vertex-color variants. */\nexport const PATH_FILL_UNIFORMS = [\n 'u_proj', 'u_model', 'u_color', 'u_alpha',\n 'u_colorMatrix', 'u_colorBias',\n] as const;\n\n/** Attributes for the flat variant. */\nexport const PATH_FILL_ATTRIBUTES = ['a_position'] as const;\n\n/** Attributes for the vertex-color variant. */\nexport const PATH_FILL_VCOLOR_ATTRIBUTES = ['a_position', 'a_vertexColor'] as const;\n"],"mappings":";AAgBA,IAAaA,IAAsB,mPAWtBC,IAAsB,2UActBC,IAA6B,sUAc7BC,IAA6B,sYAiB7BC,IAAqB;CAChC;CAAU;CAAW;CAAW;CAChC;CAAiB;AACnB,GAGaC,IAAuB,CAAC,YAAY,GAGpCC,IAA8B,CAAC,cAAc,eAAe"}
@@ -0,0 +1,24 @@
1
+ //#region src/renderer/shaders/patternFill.ts
2
+ var e = "#version 300 es\nin vec2 a_position;\nuniform mat3 u_proj;\nuniform mat3 u_model;\nuniform mat3 u_worldInv;\nout vec2 v_world;\nvoid main() {\n vec3 screen = u_model * vec3(a_position, 1.0);\n vec3 clip = u_proj * vec3(screen.xy, 1.0);\n gl_Position = vec4(clip.xy, 0.0, 1.0);\n vec3 world = u_worldInv * vec3(screen.xy, 1.0);\n v_world = world.xy;\n}\n", t = "\nuniform sampler2D u_sampler;\nuniform vec2 u_tileSize;\nuniform float u_opacity;\nuniform float u_alpha;\nuniform mat4 u_colorMatrix;\nuniform vec4 u_colorBias;\nvec4 shadePaint(vec2 world) {\n vec2 uv = world / max(u_tileSize, vec2(0.0001));\n vec4 texel = texture(u_sampler, uv);\n vec4 mapped = clamp(u_colorMatrix * texel + u_colorBias, 0.0, 1.0);\n float a = mapped.a * u_opacity * u_alpha;\n return vec4(mapped.rgb * a, a);\n}\n", n = `#version 300 es
3
+ precision highp float;
4
+ in vec2 v_world;
5
+ ${t}
6
+ out vec4 outColor;
7
+ void main() {
8
+ outColor = shadePaint(v_world);
9
+ }
10
+ `, r = [
11
+ "u_proj",
12
+ "u_model",
13
+ "u_worldInv",
14
+ "u_sampler",
15
+ "u_tileSize",
16
+ "u_opacity",
17
+ "u_alpha",
18
+ "u_colorMatrix",
19
+ "u_colorBias"
20
+ ], i = ["a_position"];
21
+ //#endregion
22
+ export { i as PATTERN_FILL_ATTRIBUTES, r as PATTERN_FILL_UNIFORMS, n as PATTERN_FRAG_SRC, t as PATTERN_PAINT_GLSL, e as PATTERN_VERT_SRC };
23
+
24
+ //# sourceMappingURL=patternFill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patternFill.js","names":["PATTERN_VERT_SRC","PATTERN_PAINT_GLSL","PATTERN_FRAG_SRC","PATTERN_FILL_UNIFORMS","PATTERN_FILL_ATTRIBUTES"],"sources":["../../../src/renderer/shaders/patternFill.ts"],"sourcesContent":["/**\n * GLSL ES 3.0 sources for pattern-fill paths.\n *\n * The vertex stage is `gradFill`'s: a path fill mesh carries `a_position`\n * only, so tile-space coordinates are recovered per fragment from the\n * screen position via `u_worldInv` rather than read from a UV attribute.\n * That matrix also carries the tile's origin and transform\n * (`patternTileSpace`). `u_tileSize` then converts to texture space, and\n * `REPEAT` wrapping (set at upload) tiles the result.\n *\n * Output convention §2: PREMULTIPLIED alpha.\n */\n\nexport const PATTERN_VERT_SRC = /* glsl */ `#version 300 es\nin vec2 a_position;\nuniform mat3 u_proj;\nuniform mat3 u_model;\nuniform mat3 u_worldInv;\nout vec2 v_world;\nvoid main() {\n vec3 screen = u_model * vec3(a_position, 1.0);\n vec3 clip = u_proj * vec3(screen.xy, 1.0);\n gl_Position = vec4(clip.xy, 0.0, 1.0);\n vec3 world = u_worldInv * vec3(screen.xy, 1.0);\n v_world = world.xy;\n}\n`;\n\n/**\n * The pattern's color at a paint-space point, premultiplied — the whole of the\n * fragment stage but the point it is asked about, so the glyph program can\n * mask the same paint the path program draws.\n */\nexport const PATTERN_PAINT_GLSL = /* glsl */ `\nuniform sampler2D u_sampler;\nuniform vec2 u_tileSize;\nuniform float u_opacity;\nuniform float u_alpha;\nuniform mat4 u_colorMatrix;\nuniform vec4 u_colorBias;\nvec4 shadePaint(vec2 world) {\n vec2 uv = world / max(u_tileSize, vec2(0.0001));\n vec4 texel = texture(u_sampler, uv);\n vec4 mapped = clamp(u_colorMatrix * texel + u_colorBias, 0.0, 1.0);\n float a = mapped.a * u_opacity * u_alpha;\n return vec4(mapped.rgb * a, a);\n}\n`;\n\nexport const PATTERN_FRAG_SRC = /* glsl */ `#version 300 es\nprecision highp float;\nin vec2 v_world;\n${PATTERN_PAINT_GLSL}\nout vec4 outColor;\nvoid main() {\n outColor = shadePaint(v_world);\n}\n`;\n\nexport const PATTERN_FILL_UNIFORMS = [\n 'u_proj', 'u_model', 'u_worldInv', 'u_sampler',\n 'u_tileSize', 'u_opacity', 'u_alpha',\n 'u_colorMatrix', 'u_colorBias',\n] as const;\n\nexport const PATTERN_FILL_ATTRIBUTES = ['a_position'] as const;\n"],"mappings":";AAaA,IAAaA,IAA8B,6WAoB9BC,IAAgC,gcAgBhCC,IAA8B;;;EAGzCD,EAAmB;;;;;GAORE,IAAwB;CACnC;CAAU;CAAW;CAAc;CACnC;CAAc;CAAa;CAC3B;CAAiB;AACnB,GAEaC,IAA0B,CAAC,YAAY"}
@@ -0,0 +1,18 @@
1
+ import { createReflectable as e } from "@weasel-js/registry";
2
+ //#region src/renderer/shaders/registerProgram.ts
3
+ var t = e(), n = t.reflection;
4
+ function r(e) {
5
+ return t.get(e) ?? null;
6
+ }
7
+ var i = () => typeof process < "u" ? process.env.NODE_ENV !== "production" : !0;
8
+ function a(e, n, r) {
9
+ if (t.has(e) && !i()) throw Error(`weasel registerProgram: duplicate program id "${e}". In production, re-registration is not allowed. Pass a unique id or call in dev mode.`);
10
+ return t.set(e, {
11
+ vert: n,
12
+ frag: r
13
+ }), { id: e };
14
+ }
15
+ //#endregion
16
+ export { r as getProgramSource, n as programSourceRegistry, a as registerProgram };
17
+
18
+ //# sourceMappingURL=registerProgram.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registerProgram.js","names":["registry","createReflectable","programSourceRegistry","getProgramSource","id","isDev","registerProgram"],"sources":["../../../src/renderer/shaders/registerProgram.ts"],"sourcesContent":["/**\n * registerProgram — public API for registering custom shader programs.\n *\n * Stores raw GLSL source strings in a module-level registry. GL compilation\n * happens on each WeaselRenderer via WeaselRenderer.registerProgram(), which\n * calls getProgramSource() and compiles the result. This keeps registerProgram\n * GL-context-agnostic — identical pattern to registerFont storing ImageBitmap.\n *\n * Module-level state = source strings only; compiled GL\n * programs live on each renderer's programRegistry (Map<id, ShaderProgram>).\n *\n * Lifecycle: program sources live for the module lifetime. No unregister in v1.\n */\n\nimport { createReflectable, type Reflection } from '@weasel-js/registry';\nimport { type TextureHandle } from '../textures/registerTexture';\n\nexport type { TextureHandle };\n\n/** Opaque handle to a compiled custom shader program. */\nexport interface ShaderProgramHandle {\n readonly id: string;\n}\n\n/**\n * A value for one uniform in `ShaderDrawCommand.uniforms`.\n *\n * | TS type | GL call |\n * |-------------------------|--------------------------------------|\n * | number | uniform1f |\n * | [n, n] | uniform2fv |\n * | [n, n, n] | uniform3fv |\n * | [n, n, n, n] | uniform4fv |\n * | Float32Array length 9 | uniformMatrix3fv (column-major) |\n * | Float32Array length 16 | uniformMatrix4fv (column-major) |\n * | TextureHandle | bind to next tex unit + uniform1i |\n *\n * **Array uniforms.** Keyed by an array's bare name (`u_ripples` for\n * `uniform vec3 u_ripples[8]`), a flat `number[]`, `Float32Array`,\n * `Int32Array` or `Uint32Array` fills the array from slot 0 in one\n * `uniform*v` call chosen by the declared element type (`vec3` →\n * `uniform3fv`, `ivec2` → `uniform2iv`, `mat4` → `uniformMatrix4fv`, …).\n * Its length must be a whole number of elements and at most the declared\n * size; a shorter value leaves the remaining slots as they were. Per-slot\n * keys (`u_ripples[2]`) keep working and take the table above.\n */\nexport type ShaderUniform =\n | number\n | [number, number]\n | [number, number, number]\n | [number, number, number, number]\n | readonly number[]\n | Float32Array\n | Int32Array\n | Uint32Array\n | TextureHandle;\n\n/** A registered program's GLSL source. An empty `vert` means the kit's default vertex shader. */\nexport interface ProgramSource {\n vert: string;\n frag: string;\n}\n\nconst registry = createReflectable<ProgramSource>();\n\n/** Every registered program's GLSL source, keyed by program id. */\nexport const programSourceRegistry: Reflection<ProgramSource> = registry.reflection;\n\n/** @internal Test helper — do not call from product code. */\nexport function _resetProgramRegistryForTests(): void {\n registry.clear();\n}\n\nexport function getProgramSource(id: string): ProgramSource | null {\n return registry.get(id) ?? null;\n}\n\nconst isDev = (): boolean =>\n typeof process !== 'undefined' ? process.env.NODE_ENV !== 'production' : true;\n\n/**\n * Register a custom shader program by id.\n *\n * Pass an empty string for `vert` to use the kit's default vertex shader\n * (recommended). The kit's vertex shader exposes `v_uv`, `v_screen`, and\n * `v_world` varyings plus `u_bounds` and `u_view` uniforms.\n *\n * **IMPORTANT — Premultiplied alpha:**\n * Your fragment shader MUST output premultiplied alpha:\n * `outColor = vec4(rgb * a, a);` ← correct\n * `outColor = vec4(rgb, a);` ← WRONG — over-brightens translucent regions\n *\n * The renderer uses `gl.blendFunc(ONE, ONE_MINUS_SRC_ALPHA)` to match.\n * Opaque fragments (a=1) are unaffected; only fragments with a < 1 differ.\n *\n * **Re-registration behavior:**\n * - Dev mode (`NODE_ENV !== 'production'`): calling with an existing id and new\n * source replaces it (hot reload). Every renderer that compiled the old source\n * recompiles on its next frame and deletes the program it replaces; a\n * `<Canvas shaders>` naming the id repaints to show it. If the new source fails\n * to compile, the renderer logs the error once and keeps drawing the old one.\n * - Prod mode: calling with an existing id throws.\n *\n * Actual GL compilation and `ShaderCompileError` throwing happen in\n * `WeaselRenderer.registerProgram()`, not here.\n *\n * @experimental API may break before v2.\n */\nexport function registerProgram(\n id: string,\n vert: string,\n frag: string,\n): ShaderProgramHandle {\n if (registry.has(id) && !isDev()) {\n throw new Error(`weasel registerProgram: duplicate program id \"${id}\". ` +\n `In production, re-registration is not allowed. Pass a unique id or call in dev mode.`);\n }\n registry.set(id, { vert, frag });\n return { id };\n}\n"],"mappings":";;AA+DA,IAAMA,IAAWC,EAAiC,GAGrCC,IAAmDF,EAAS;AAOzE,SAAgBG,EAAiB,GAAkC;CACjE,OAAOH,EAAS,IAAII,CAAE,KAAK;AAC7B;AAEA,IAAMC,UACJ,OAAO,UAAY,MAAA,QAAA,IAAA,aAAuC,eAAe;AA8B3E,SAAgBC,EACd,GACA,GACA,GACqB;CACrB,IAAIN,EAAS,IAAII,CAAE,KAAK,CAACC,EAAM,GAC7B,MAAU,MAAM,iDAAiDD,EAAG,wFACoB;CAG1F,OADAJ,EAAS,IAAII,GAAI;EAAE;EAAM;CAAK,CAAC,GACxB,EAAE,MAAG;AACd"}
@@ -0,0 +1,14 @@
1
+ //#region src/renderer/spriteSheet.ts
2
+ function e(e, t) {
3
+ let { frameWidth: n, frameHeight: r, columns: i } = e, a = e.margin ?? 0, o = e.spacing ?? 0, s = t % i, c = Math.floor(t / i);
4
+ return {
5
+ x: a + s * (n + o),
6
+ y: a + c * (r + o),
7
+ w: n,
8
+ h: r
9
+ };
10
+ }
11
+ //#endregion
12
+ export { e as frameRect };
13
+
14
+ //# sourceMappingURL=spriteSheet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spriteSheet.js","names":["frameRect","sheet","margin","spacing","col","index","columns","row","frameWidth","frameHeight"],"sources":["../../src/renderer/spriteSheet.ts"],"sourcesContent":["/**\n * Uniform-grid sprite sheet layout — frame index to the source rect an\n * `ImageDrawCommand` samples. Pure arithmetic over the grid description; it\n * never touches the bitmap.\n */\n\n/** A sprite sheet's grid. `margin` and `spacing` follow the Tiled / Aseprite\n * tileset convention, so a sheet exported from either describes itself here. */\nexport interface SpriteSheet {\n frameWidth: number;\n frameHeight: number;\n columns: number;\n /** Empty pixels around the whole grid. Default 0. */\n margin?: number;\n /** Empty pixels between adjacent cells — the gutter that keeps linear\n * sampling off the neighboring frame. Default 0. */\n spacing?: number;\n}\n\n/**\n * Row-major source rect for frame `index`, counting from 0 at the top-left.\n *\n * `index` is not range-checked and does not wrap: past the last cell this\n * returns a rect below the sheet, which draws as an edge smear. Wrapping is\n * the animation's business (`frameRect(sheet, tick % count)`) — a sheet does\n * not know how many of its cells are filled.\n */\nexport function frameRect(\n sheet: SpriteSheet,\n index: number,\n): { x: number; y: number; w: number; h: number } {\n const { frameWidth, frameHeight, columns } = sheet;\n const margin = sheet.margin ?? 0;\n const spacing = sheet.spacing ?? 0;\n const col = index % columns;\n const row = Math.floor(index / columns);\n return {\n x: margin + col * (frameWidth + spacing),\n y: margin + row * (frameHeight + spacing),\n w: frameWidth,\n h: frameHeight,\n };\n}\n"],"mappings":";AA2BA,SAAgBA,EACd,GACA,GACgD;CAChD,IAAM,EAAE,eAAY,gBAAa,eAAYC,GACvCC,IAASD,EAAM,UAAU,GACzBE,IAAUF,EAAM,WAAW,GAC3BG,IAAMC,IAAQC,GACdC,IAAM,KAAK,MAAMF,IAAQC,CAAO;CACtC,OAAO;EACL,GAAGJ,IAASE,KAAOI,IAAaL;EAChC,GAAGD,IAASK,KAAOE,IAAcN;EACjC,GAAGK;EACH,GAAGC;CACL;AACF"}
@@ -0,0 +1,77 @@
1
+ import { mat3 as e } from "../math/mat3.js";
2
+ //#region src/renderer/state/GroupState.ts
3
+ var t = new Float32Array([
4
+ 1,
5
+ 0,
6
+ 0,
7
+ 0,
8
+ 0,
9
+ 0,
10
+ 1,
11
+ 0,
12
+ 0,
13
+ 0,
14
+ 0,
15
+ 0,
16
+ 1,
17
+ 0,
18
+ 0,
19
+ 0,
20
+ 0,
21
+ 0,
22
+ 1,
23
+ 0
24
+ ]);
25
+ function n(e, t) {
26
+ let n = /* @__PURE__ */ new Float32Array(20);
27
+ for (let r = 0; r < 4; r++) {
28
+ for (let i = 0; i < 4; i++) {
29
+ let a = 0;
30
+ for (let n = 0; n < 4; n++) a += e[r * 5 + n] * t[n * 5 + i];
31
+ n[r * 5 + i] = a;
32
+ }
33
+ let i = e[r * 5 + 4];
34
+ for (let n = 0; n < 4; n++) i += e[r * 5 + n] * t[n * 5 + 4];
35
+ n[r * 5 + 4] = i;
36
+ }
37
+ return n;
38
+ }
39
+ var r = class {
40
+ transformStack = [e.identity()];
41
+ alphaStack = [1];
42
+ colorMatrixStack = [t];
43
+ get transform() {
44
+ return this.transformStack[this.transformStack.length - 1];
45
+ }
46
+ get alpha() {
47
+ return this.alphaStack[this.alphaStack.length - 1];
48
+ }
49
+ get colorMatrix() {
50
+ return this.colorMatrixStack[this.colorMatrixStack.length - 1];
51
+ }
52
+ push(t) {
53
+ let r = this.transform, i = t.transform ? e.multiply(r, t.transform) : r, a = t.alpha === void 0 ? this.alpha : this.alpha * t.alpha, o = t.colorMatrix ? n(this.colorMatrix, t.colorMatrix instanceof Float32Array ? t.colorMatrix : new Float32Array(t.colorMatrix)) : this.colorMatrix;
54
+ this.transformStack.push(i), this.alphaStack.push(a), this.colorMatrixStack.push(o);
55
+ }
56
+ pushIsolated(n) {
57
+ this.push(n);
58
+ let r = {
59
+ alpha: this.alpha,
60
+ colorMatrix: this.colorMatrix
61
+ };
62
+ this.pop();
63
+ let i = this.transform;
64
+ return this.transformStack.push(n.transform ? e.multiply(i, n.transform) : i), this.alphaStack.push(1), this.colorMatrixStack.push(t), r;
65
+ }
66
+ reset() {
67
+ this.transformStack.length = 1, this.alphaStack.length = 1, this.colorMatrixStack.length = 1;
68
+ }
69
+ pop() {
70
+ if (this.transformStack.length <= 1) throw Error("GroupState.pop: cannot pop root frame");
71
+ this.transformStack.pop(), this.alphaStack.pop(), this.colorMatrixStack.pop();
72
+ }
73
+ };
74
+ //#endregion
75
+ export { r as GroupState, t as IDENTITY_COLOR_MATRIX };
76
+
77
+ //# sourceMappingURL=GroupState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GroupState.js","names":["IDENTITY_COLOR_MATRIX","compose4x5","result","row","col","sum","k","outer","inner","biasSum","GroupState","mat3","current","nextTransform","frame","nextAlpha","nextCM","composited"],"sources":["../../../src/renderer/state/GroupState.ts"],"sourcesContent":["import { mat3, type GlMat3 } from '../math/mat3';\n\n/** Row-major 4×5 color matrix identity. */\nexport const IDENTITY_COLOR_MATRIX = new Float32Array([\n 1, 0, 0, 0, 0,\n 0, 1, 0, 0, 0,\n 0, 0, 1, 0, 0,\n 0, 0, 0, 1, 0,\n]);\n\nexport interface GroupFrame {\n transform?: GlMat3;\n alpha?: number;\n /** Row-major 4×5 color matrix (20 floats). Absent leaves the stack unchanged. */\n colorMatrix?: Float32Array | number[];\n}\n\n/**\n * Compose two 4×5 color matrices: out = outer ∘ inner (inner applied first).\n *\n * composed(x) = M_outer * (M_inner * x + b_inner) + b_outer\n * = (M_outer * M_inner) * x + (M_outer * b_inner + b_outer)\n *\n * Each matrix is row-major. The 4×4 portion occupies indices\n * [0..3, 5..8, 10..13, 15..18]; bias column at [4, 9, 14, 19].\n */\nfunction compose4x5(outer: Float32Array, inner: Float32Array): Float32Array {\n const result = new Float32Array(20);\n for (let row = 0; row < 4; row++) {\n for (let col = 0; col < 4; col++) {\n let sum = 0;\n for (let k = 0; k < 4; k++) {\n sum += outer[row * 5 + k] * inner[k * 5 + col];\n }\n result[row * 5 + col] = sum;\n }\n let biasSum = outer[row * 5 + 4];\n for (let k = 0; k < 4; k++) {\n biasSum += outer[row * 5 + k] * inner[k * 5 + 4];\n }\n result[row * 5 + 4] = biasSum;\n }\n return result;\n}\n\nexport class GroupState {\n private transformStack: GlMat3[] = [mat3.identity()];\n private alphaStack: number[] = [1];\n private colorMatrixStack: Float32Array[] = [IDENTITY_COLOR_MATRIX];\n\n get transform(): GlMat3 {\n return this.transformStack[this.transformStack.length - 1];\n }\n\n get alpha(): number {\n return this.alphaStack[this.alphaStack.length - 1];\n }\n\n get colorMatrix(): Float32Array {\n return this.colorMatrixStack[this.colorMatrixStack.length - 1];\n }\n\n push(frame: GroupFrame): void {\n const current = this.transform;\n const nextTransform = frame.transform ? mat3.multiply(current, frame.transform) : current;\n const nextAlpha = frame.alpha !== undefined ? this.alpha * frame.alpha : this.alpha;\n const nextCM = frame.colorMatrix\n ? compose4x5(\n this.colorMatrix,\n frame.colorMatrix instanceof Float32Array\n ? frame.colorMatrix\n : new Float32Array(frame.colorMatrix),\n )\n : this.colorMatrix;\n this.transformStack.push(nextTransform);\n this.alphaStack.push(nextAlpha);\n this.colorMatrixStack.push(nextCM);\n }\n\n /**\n * Push a frame whose children paint into a surface of their own.\n *\n * The transform still accumulates — the children draw where they would have\n * drawn. Alpha and colour do not: they describe how the finished surface\n * joins the frame, and applying them on the way in as well would fade the\n * pixels an effect is about to read, then fade them again on the way out.\n *\n * Returns the pair the caller must apply at composite time — what `push`\n * would have left on the stack — so the composition rules live here and not\n * in the dispatcher.\n */\n pushIsolated(frame: GroupFrame): { alpha: number; colorMatrix: Float32Array } {\n this.push(frame);\n const composited = { alpha: this.alpha, colorMatrix: this.colorMatrix };\n this.pop();\n const current = this.transform;\n this.transformStack.push(frame.transform ? mat3.multiply(current, frame.transform) : current);\n this.alphaStack.push(1);\n this.colorMatrixStack.push(IDENTITY_COLOR_MATRIX);\n return composited;\n }\n\n /** Drop every pushed frame, leaving the root. A frame that throws part-way\n * down the tree never pops, and the next frame would draw under leftovers. */\n reset(): void {\n this.transformStack.length = 1;\n this.alphaStack.length = 1;\n this.colorMatrixStack.length = 1;\n }\n\n pop(): void {\n if (this.transformStack.length <= 1) {\n throw new Error('GroupState.pop: cannot pop root frame');\n }\n this.transformStack.pop();\n this.alphaStack.pop();\n this.colorMatrixStack.pop();\n }\n}\n"],"mappings":";;AAGA,IAAaA,IAAwB,IAAI,aAAa;CACpD;CAAG;CAAG;CAAG;CAAG;CACZ;CAAG;CAAG;CAAG;CAAG;CACZ;CAAG;CAAG;CAAG;CAAG;CACZ;CAAG;CAAG;CAAG;CAAG;AACd,CAAC;AAkBD,SAASC,EAAW,GAAqB,GAAmC;CAC1E,IAAMC,oBAAS,IAAI,aAAa,EAAE;CAClC,KAAK,IAAIC,IAAM,GAAGA,IAAM,GAAG,KAAO;EAChC,KAAK,IAAIC,IAAM,GAAGA,IAAM,GAAG,KAAO;GAChC,IAAIC,IAAM;GACV,KAAK,IAAIC,IAAI,GAAGA,IAAI,GAAG,KACrB,KAAOC,EAAMJ,IAAM,IAAIG,KAAKE,EAAMF,IAAI,IAAIF;GAE5C,EAAOD,IAAM,IAAIC,KAAOC;EAC1B;EACA,IAAII,IAAUF,EAAMJ,IAAM,IAAI;EAC9B,KAAK,IAAIG,IAAI,GAAGA,IAAI,GAAG,KACrB,KAAWC,EAAMJ,IAAM,IAAIG,KAAKE,EAAMF,IAAI,IAAI;EAEhD,EAAOH,IAAM,IAAI,KAAKM;CACxB;CACA,OAAOP;AACT;AAEA,IAAaQ,IAAb,MAAwB;CACtB,iBAAmC,CAACC,EAAK,SAAS,CAAC;CACnD,aAA+B,CAAC,CAAC;CACjC,mBAA2C,CAACX,CAAqB;CAEjE,IAAI,YAAoB;EACtB,OAAO,KAAK,eAAe,KAAK,eAAe,SAAS;CAC1D;CAEA,IAAI,QAAgB;EAClB,OAAO,KAAK,WAAW,KAAK,WAAW,SAAS;CAClD;CAEA,IAAI,cAA4B;EAC9B,OAAO,KAAK,iBAAiB,KAAK,iBAAiB,SAAS;CAC9D;CAEA,KAAK,GAAyB;EAC5B,IAAMY,IAAU,KAAK,WACfC,IAAgBC,EAAM,YAAYH,EAAK,SAASC,GAASE,EAAM,SAAS,IAAIF,GAC5EG,IAAYD,EAAM,UAAU,KAAA,IAAuC,KAAK,QAAhC,KAAK,QAAQA,EAAM,OAC3DE,IAASF,EAAM,cACjBb,EACE,KAAK,aACLa,EAAM,uBAAuB,eACzBA,EAAM,cACN,IAAI,aAAaA,EAAM,WAAW,CACxC,IACA,KAAK;EAGT,AAFA,KAAK,eAAe,KAAKD,CAAa,GACtC,KAAK,WAAW,KAAKE,CAAS,GAC9B,KAAK,iBAAiB,KAAKC,CAAM;CACnC;CAcA,aAAa,GAAiE;EAC5E,KAAK,KAAKF,CAAK;EACf,IAAMG,IAAa;GAAE,OAAO,KAAK;GAAO,aAAa,KAAK;EAAY;EACtE,KAAK,IAAI;EACT,IAAML,IAAU,KAAK;EAIrB,OAHA,KAAK,eAAe,KAAKE,EAAM,YAAYH,EAAK,SAASC,GAASE,EAAM,SAAS,IAAIF,CAAO,GAC5F,KAAK,WAAW,KAAK,CAAC,GACtB,KAAK,iBAAiB,KAAKZ,CAAqB,GACzCiB;CACT;CAIA,QAAc;EAGZ,AAFA,KAAK,eAAe,SAAS,GAC7B,KAAK,WAAW,SAAS,GACzB,KAAK,iBAAiB,SAAS;CACjC;CAEA,MAAY;EACV,IAAI,KAAK,eAAe,UAAU,GAChC,MAAU,MAAM,uCAAuC;EAIzD,AAFA,KAAK,eAAe,IAAI,GACxB,KAAK,WAAW,IAAI,GACpB,KAAK,iBAAiB,IAAI;CAC5B;AACF"}
@@ -0,0 +1,6 @@
1
+ //#region src/renderer/syntheticItalic.ts
2
+ var e = .2094;
3
+ //#endregion
4
+ export { e as SYNTHETIC_ITALIC_RADIANS };
5
+
6
+ //# sourceMappingURL=syntheticItalic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"syntheticItalic.js","names":["SYNTHETIC_ITALIC_RADIANS"],"sources":["../../src/renderer/syntheticItalic.ts"],"sourcesContent":["/**\n * Synthetic-oblique angle, in radians — 12°, the conventional CSS\n * `font-style: oblique`. Shared by everything that fakes an italic: the SDF\n * tier skews quads by it, the outline tier shears glyph geometry by it, and\n * `textToPath` bakes the same shear into extracted outlines. One constant so a\n * face that falls back to the upright atlas leans the same amount however it\n * ends up being drawn.\n */\nexport const SYNTHETIC_ITALIC_RADIANS = 0.2094;\n"],"mappings":";AAQA,IAAaA,IAA2B"}
@@ -0,0 +1,14 @@
1
+ import { createReflectable as e } from "@weasel-js/registry";
2
+ //#region src/renderer/textures/registerTexture.ts
3
+ var t = 0, n = e(), r = n.reflection;
4
+ function i(e) {
5
+ return n.get(e) ?? null;
6
+ }
7
+ function a(e) {
8
+ let r = `tex_${++t}`;
9
+ return n.set(r, { source: e }), { id: r };
10
+ }
11
+ //#endregion
12
+ export { i as getTexture, a as registerTexture, r as textureRegistry };
13
+
14
+ //# sourceMappingURL=registerTexture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registerTexture.js","names":["counter","registry","createReflectable","textureRegistry","getTexture","id","registerTexture","image"],"sources":["../../../src/renderer/textures/registerTexture.ts"],"sourcesContent":["/**\n * registerTexture — accepts an image source, assigns an opaque id, stores in\n * a module-level registry. Actual GL upload happens lazily at draw time in\n * drawShader() via GLTextureCache.upload (which is idempotent).\n *\n * Lifecycle: textures live for the renderer's lifetime. No unregister in v1.\n *\n * Convention §9: this registry stores image data only — no per-renderer state.\n * Each WeaselRenderer's GLTextureCache does its own dedup via has(id).\n */\n\nimport type { TextureHandle } from '@weasel-js/paint';\nimport { createReflectable, type Reflection } from '@weasel-js/registry';\n\nexport type { TextureHandle };\n\n/** A registered texture's image source, uploaded to GL lazily at first draw. */\nexport interface TextureEntry {\n source: HTMLImageElement | ImageBitmap;\n}\n\nlet counter = 0;\nconst registry = createReflectable<TextureEntry>();\n\n/** Every registered texture, keyed by its handle id. */\nexport const textureRegistry: Reflection<TextureEntry> = registry.reflection;\n\n/** @internal Test helper — do not call from product code. */\nexport function _resetTextureRegistryForTests(): void {\n registry.clear();\n counter = 0;\n}\n\nexport function getTexture(id: string): TextureEntry | null {\n return registry.get(id) ?? null;\n}\n\n/**\n * Register an image for use as a shader texture uniform.\n *\n * Returns a TextureHandle whose `id` can be passed as a ShaderUniform value.\n * The handle is valid for the lifetime of the renderer it will be used with.\n *\n * @param image The image to register. HTMLImageElement must be fully loaded.\n * @returns Opaque TextureHandle.\n */\nexport function registerTexture(\n image: HTMLImageElement | ImageBitmap,\n): TextureHandle {\n const id = `tex_${++counter}`;\n registry.set(id, { source: image });\n return { id };\n}\n"],"mappings":";;AAqBA,IAAIA,IAAU,GACRC,IAAWC,EAAgC,GAGpCC,IAA4CF,EAAS;AAQlE,SAAgBG,EAAW,GAAiC;CAC1D,OAAOH,EAAS,IAAII,CAAE,KAAK;AAC7B;AAWA,SAAgBC,EACd,GACe;CACf,IAAMD,IAAK,OAAO,EAAEL;CAEpB,OADAC,EAAS,IAAII,GAAI,EAAE,QAAQE,EAAM,CAAC,GAC3B,EAAE,MAAG;AACd"}