@pibbl/core 0.0.1 → 0.0.3-alpha.109.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (683) hide show
  1. package/README.md +1 -1
  2. package/THIRD_PARTY_NOTICES.txt +81 -0
  3. package/dist/features/machines/animation.d.ts +64 -0
  4. package/dist/features/machines/animation.js +55 -0
  5. package/dist/features/machines/animation.js.map +7 -0
  6. package/dist/features/machines/animation.mjs +1 -0
  7. package/dist/features/machines/assign.d.ts +16 -0
  8. package/dist/features/machines/assign.js +15 -0
  9. package/dist/features/machines/assign.js.map +7 -0
  10. package/dist/features/machines/callback.d.ts +9 -0
  11. package/dist/features/machines/callback.js +7 -0
  12. package/dist/features/machines/callback.js.map +7 -0
  13. package/dist/features/machines/hook.d.ts +30 -0
  14. package/dist/features/machines/hook.js +37 -0
  15. package/dist/features/machines/hook.js.map +7 -0
  16. package/dist/features/machines/index.d.ts +6 -0
  17. package/dist/features/machines/index.js +12 -0
  18. package/dist/features/machines/index.js.map +7 -0
  19. package/dist/features/machines/index.mjs +1 -0
  20. package/dist/features/machines/runtime.d.ts +18 -0
  21. package/dist/features/machines/runtime.js +363 -0
  22. package/dist/features/machines/runtime.js.map +7 -0
  23. package/dist/features/machines/types.d.ts +164 -0
  24. package/dist/features/physics/2d-geometry.d.ts +3 -3
  25. package/dist/features/physics/2d-geometry.js.map +1 -1
  26. package/dist/features/physics/2d-testing.d.ts +1 -1
  27. package/dist/features/physics/2d-testing.js +2 -2
  28. package/dist/features/physics/2d-testing.js.map +2 -2
  29. package/dist/features/physics/2d.d.ts +115 -62
  30. package/dist/features/physics/2d.js +59 -28
  31. package/dist/features/physics/2d.js.map +2 -2
  32. package/dist/features/physics/lib/2d/canvas/components.js +25 -21
  33. package/dist/features/physics/lib/2d/canvas/components.js.map +2 -2
  34. package/dist/features/physics/lib/2d/canvas/presentation.js +1 -2
  35. package/dist/features/physics/lib/2d/canvas/presentation.js.map +2 -2
  36. package/dist/features/physics/lib/2d/collision/casts.js +4 -2
  37. package/dist/features/physics/lib/2d/collision/casts.js.map +2 -2
  38. package/dist/features/physics/lib/2d/query-types.d.ts +6 -0
  39. package/dist/features/physics/lib/2d/runtime/controller.d.ts +7 -6
  40. package/dist/features/physics/lib/2d/runtime/controller.js +1 -1
  41. package/dist/features/physics/lib/2d/runtime/controller.js.map +2 -2
  42. package/dist/features/physics/lib/2d/runtime/obstacles.js +9 -11
  43. package/dist/features/physics/lib/2d/runtime/obstacles.js.map +2 -2
  44. package/dist/features/physics/lib/2d/shapes.js +8 -9
  45. package/dist/features/physics/lib/2d/shapes.js.map +2 -2
  46. package/dist/features/physics/lib/2d/types.d.ts +8 -30
  47. package/dist/features/physics/lib/2d/world/queries.d.ts +7 -6
  48. package/dist/features/physics/lib/2d/world/queries.js.map +2 -2
  49. package/dist/features/physics/lib/2d/world/rapier.js +22 -26
  50. package/dist/features/physics/lib/2d/world/rapier.js.map +2 -2
  51. package/dist/features/sprites/formats/aseprite.d.ts +5 -0
  52. package/dist/features/sprites/formats/texture-packer.d.ts +5 -0
  53. package/dist/features/sprites/index.d.ts +6 -0
  54. package/dist/features/sprites/loader.d.ts +25 -0
  55. package/dist/features/sprites/loader.js +6 -3
  56. package/dist/features/sprites/loader.js.map +2 -2
  57. package/dist/features/sprites/model.d.ts +75 -0
  58. package/dist/features/sprites/sprite.d.ts +22 -0
  59. package/dist/features/textures/index.d.ts +12 -2
  60. package/dist/features/textures/index.js +33 -1
  61. package/dist/features/textures/index.js.map +2 -2
  62. package/dist/features/textures/lib/chemical-field.d.ts +56 -0
  63. package/dist/features/textures/lib/chemical-field.js +154 -0
  64. package/dist/features/textures/lib/chemical-field.js.map +7 -0
  65. package/dist/features/textures/lib/chemical-recipes.d.ts +119 -0
  66. package/dist/features/textures/lib/chemical-recipes.js +275 -0
  67. package/dist/features/textures/lib/chemical-recipes.js.map +7 -0
  68. package/dist/features/textures/lib/definitions.d.ts +3 -18
  69. package/dist/features/textures/lib/definitions.js +17 -24
  70. package/dist/features/textures/lib/definitions.js.map +2 -2
  71. package/dist/features/textures/lib/geometric-patterns.d.ts +149 -0
  72. package/dist/features/textures/lib/geometric-patterns.js +305 -0
  73. package/dist/features/textures/lib/geometric-patterns.js.map +7 -0
  74. package/dist/features/textures/lib/gray-scott.d.ts +55 -0
  75. package/dist/features/textures/lib/gray-scott.js +37 -0
  76. package/dist/features/textures/lib/gray-scott.js.map +7 -0
  77. package/dist/features/textures/lib/palette.js +1 -3
  78. package/dist/features/textures/lib/palette.js.map +2 -2
  79. package/dist/features/textures/lib/patterns.d.ts +123 -0
  80. package/dist/features/textures/lib/patterns.js +344 -0
  81. package/dist/features/textures/lib/patterns.js.map +7 -0
  82. package/dist/features/textures/lib/rain-drops.js +2 -1
  83. package/dist/features/textures/lib/rain-drops.js.map +2 -2
  84. package/dist/features/textures/lib/reaction-diffusion.d.ts +3 -2
  85. package/dist/features/textures/lib/reaction-diffusion.js +9 -20
  86. package/dist/features/textures/lib/reaction-diffusion.js.map +2 -2
  87. package/dist/features/textures/lib/simulation.d.ts +10 -4
  88. package/dist/features/textures/lib/simulation.js +23 -13
  89. package/dist/features/textures/lib/simulation.js.map +2 -2
  90. package/dist/features/textures/lib/wasm/electric.js +8 -1
  91. package/dist/features/textures/lib/wasm/electric.js.map +2 -2
  92. package/dist/features/textures/lib/water-surface.js +1 -3
  93. package/dist/features/textures/lib/water-surface.js.map +2 -2
  94. package/dist/features/viz/index.d.ts +92 -5
  95. package/dist/features/viz/index.js +202 -4
  96. package/dist/features/viz/index.js.map +2 -2
  97. package/dist/features/viz/inspection/bar.d.ts +79 -0
  98. package/dist/features/viz/inspection/bar.js +49 -0
  99. package/dist/features/viz/inspection/bar.js.map +7 -0
  100. package/dist/features/viz/inspection/candle.d.ts +156 -0
  101. package/dist/features/viz/inspection/candle.js +120 -0
  102. package/dist/features/viz/inspection/candle.js.map +7 -0
  103. package/dist/features/viz/inspection/capture-types.d.ts +65 -0
  104. package/dist/features/viz/inspection/capture.d.ts +16 -0
  105. package/dist/features/viz/inspection/capture.js +49 -0
  106. package/dist/features/viz/inspection/capture.js.map +7 -0
  107. package/dist/features/viz/inspection/handler.d.ts +36 -0
  108. package/dist/features/viz/inspection/handler.js +91 -0
  109. package/dist/features/viz/inspection/handler.js.map +7 -0
  110. package/dist/features/viz/inspection/ohlc-bar.d.ts +132 -0
  111. package/dist/features/viz/inspection/ohlc-bar.js +118 -0
  112. package/dist/features/viz/inspection/ohlc-bar.js.map +7 -0
  113. package/dist/features/viz/inspection/owned-ref.d.ts +16 -0
  114. package/dist/features/viz/inspection/owned-ref.js +99 -0
  115. package/dist/features/viz/inspection/owned-ref.js.map +7 -0
  116. package/dist/features/viz/inspection/painted-point.d.ts +22 -0
  117. package/dist/features/viz/inspection/painted-point.js +29 -0
  118. package/dist/features/viz/inspection/painted-point.js.map +7 -0
  119. package/dist/features/viz/inspection/queries.d.ts +100 -0
  120. package/dist/features/viz/inspection/queries.js +192 -0
  121. package/dist/features/viz/inspection/queries.js.map +7 -0
  122. package/dist/features/viz/inspection/query-types.d.ts +177 -0
  123. package/dist/features/viz/inspection/volume.d.ts +104 -0
  124. package/dist/features/viz/inspection/volume.js +95 -0
  125. package/dist/features/viz/inspection/volume.js.map +7 -0
  126. package/dist/features/viz/inspection.d.ts +19 -0
  127. package/dist/features/viz/inspection.js +54 -0
  128. package/dist/features/viz/inspection.js.map +7 -0
  129. package/dist/features/viz/inspection.mjs +1 -0
  130. package/dist/features/viz/lib/area-series.d.ts +62 -0
  131. package/dist/features/viz/lib/area-series.js +120 -0
  132. package/dist/features/viz/lib/area-series.js.map +7 -0
  133. package/dist/features/viz/lib/axis-labels.d.ts +2 -0
  134. package/dist/features/viz/lib/axis-labels.js +41 -0
  135. package/dist/features/viz/lib/axis-labels.js.map +7 -0
  136. package/dist/features/viz/lib/axis-title.d.ts +23 -0
  137. package/dist/features/viz/lib/axis-title.js +24 -0
  138. package/dist/features/viz/lib/axis-title.js.map +7 -0
  139. package/dist/features/viz/lib/axis.d.ts +1 -1
  140. package/dist/features/viz/lib/axis.js +50 -50
  141. package/dist/features/viz/lib/axis.js.map +2 -2
  142. package/dist/features/viz/lib/bar-scale.d.ts +7 -0
  143. package/dist/features/viz/lib/bar-scale.js +34 -0
  144. package/dist/features/viz/lib/bar-scale.js.map +7 -0
  145. package/dist/features/viz/lib/bar-series.d.ts +3 -1
  146. package/dist/features/viz/lib/bar-series.js +21 -5
  147. package/dist/features/viz/lib/bar-series.js.map +2 -2
  148. package/dist/features/viz/lib/baseline-series.d.ts +55 -0
  149. package/dist/features/viz/lib/baseline-series.js +136 -0
  150. package/dist/features/viz/lib/baseline-series.js.map +7 -0
  151. package/dist/features/viz/lib/candlestick-series.d.ts +62 -0
  152. package/dist/features/viz/lib/candlestick-series.js +150 -0
  153. package/dist/features/viz/lib/candlestick-series.js.map +7 -0
  154. package/dist/features/viz/lib/censored-point-series.d.ts +71 -0
  155. package/dist/features/viz/lib/censored-point-series.js +129 -0
  156. package/dist/features/viz/lib/censored-point-series.js.map +7 -0
  157. package/dist/features/viz/lib/chart-lines.d.ts +41 -0
  158. package/dist/features/viz/lib/chart-lines.js +32 -0
  159. package/dist/features/viz/lib/chart-lines.js.map +7 -0
  160. package/dist/features/viz/lib/color-context.d.ts +4 -0
  161. package/dist/features/viz/lib/color-context.js +41 -0
  162. package/dist/features/viz/lib/color-context.js.map +7 -0
  163. package/dist/features/viz/lib/color-math.d.ts +4 -0
  164. package/dist/features/viz/lib/color-math.js +31 -0
  165. package/dist/features/viz/lib/color-math.js.map +7 -0
  166. package/dist/features/viz/lib/color-types.d.ts +53 -0
  167. package/dist/features/viz/lib/curve-definition.d.ts +49 -0
  168. package/dist/features/viz/lib/curve-definition.js +142 -0
  169. package/dist/features/viz/lib/curve-definition.js.map +7 -0
  170. package/dist/features/viz/lib/diverging-color-scale.d.ts +11 -0
  171. package/dist/features/viz/lib/diverging-color-scale.js +51 -0
  172. package/dist/features/viz/lib/diverging-color-scale.js.map +7 -0
  173. package/dist/features/viz/lib/domain-navigation.d.ts +40 -0
  174. package/dist/features/viz/lib/domain-navigation.js +77 -0
  175. package/dist/features/viz/lib/domain-navigation.js.map +7 -0
  176. package/dist/features/viz/lib/editable-chart-elements.d.ts +178 -0
  177. package/dist/features/viz/lib/editable-chart-elements.js +733 -0
  178. package/dist/features/viz/lib/editable-chart-elements.js.map +7 -0
  179. package/dist/features/viz/lib/financial-aggregation.d.ts +127 -0
  180. package/dist/features/viz/lib/financial-aggregation.js +116 -0
  181. package/dist/features/viz/lib/financial-aggregation.js.map +7 -0
  182. package/dist/features/viz/lib/financial-autoscale.d.ts +64 -0
  183. package/dist/features/viz/lib/financial-autoscale.js +61 -0
  184. package/dist/features/viz/lib/financial-autoscale.js.map +7 -0
  185. package/dist/features/viz/lib/financial-comparison.d.ts +62 -0
  186. package/dist/features/viz/lib/financial-comparison.js +98 -0
  187. package/dist/features/viz/lib/financial-comparison.js.map +7 -0
  188. package/dist/features/viz/lib/financial-geometry.d.ts +77 -0
  189. package/dist/features/viz/lib/financial-geometry.js +67 -0
  190. package/dist/features/viz/lib/financial-geometry.js.map +7 -0
  191. package/dist/features/viz/lib/financial-indicators.d.ts +114 -0
  192. package/dist/features/viz/lib/financial-indicators.js +135 -0
  193. package/dist/features/viz/lib/financial-indicators.js.map +7 -0
  194. package/dist/features/viz/lib/financial-oscillators.d.ts +171 -0
  195. package/dist/features/viz/lib/financial-oscillators.js +265 -0
  196. package/dist/features/viz/lib/financial-oscillators.js.map +7 -0
  197. package/dist/features/viz/lib/graph/bipartite.d.ts +14 -0
  198. package/dist/features/viz/lib/graph/bipartite.js +250 -0
  199. package/dist/features/viz/lib/graph/bipartite.js.map +7 -0
  200. package/dist/features/viz/lib/graph/chord.d.ts +44 -0
  201. package/dist/features/viz/lib/graph/chord.js +348 -0
  202. package/dist/features/viz/lib/graph/chord.js.map +7 -0
  203. package/dist/features/viz/lib/graph/dependency.d.ts +26 -0
  204. package/dist/features/viz/lib/graph/dependency.js +140 -0
  205. package/dist/features/viz/lib/graph/dependency.js.map +7 -0
  206. package/dist/features/viz/lib/graph/force.d.ts +28 -0
  207. package/dist/features/viz/lib/graph/force.js +580 -0
  208. package/dist/features/viz/lib/graph/force.js.map +7 -0
  209. package/dist/features/viz/lib/graph/hierarchy.d.ts +21 -0
  210. package/dist/features/viz/lib/graph/hierarchy.js +112 -0
  211. package/dist/features/viz/lib/graph/hierarchy.js.map +7 -0
  212. package/dist/features/viz/lib/graph/icicle.d.ts +16 -0
  213. package/dist/features/viz/lib/graph/icicle.js +153 -0
  214. package/dist/features/viz/lib/graph/icicle.js.map +7 -0
  215. package/dist/features/viz/lib/graph/matrix.d.ts +30 -0
  216. package/dist/features/viz/lib/graph/matrix.js +243 -0
  217. package/dist/features/viz/lib/graph/matrix.js.map +7 -0
  218. package/dist/features/viz/lib/graph/neighborhood.d.ts +11 -0
  219. package/dist/features/viz/lib/graph/neighborhood.js +281 -0
  220. package/dist/features/viz/lib/graph/neighborhood.js.map +7 -0
  221. package/dist/features/viz/lib/graph/routes.d.ts +35 -0
  222. package/dist/features/viz/lib/graph/routes.js +101 -0
  223. package/dist/features/viz/lib/graph/routes.js.map +7 -0
  224. package/dist/features/viz/lib/graph/sankey.d.ts +44 -0
  225. package/dist/features/viz/lib/graph/sankey.js +341 -0
  226. package/dist/features/viz/lib/graph/sankey.js.map +7 -0
  227. package/dist/features/viz/lib/graph/shared.d.ts +59 -0
  228. package/dist/features/viz/lib/graph/shared.js +301 -0
  229. package/dist/features/viz/lib/graph/shared.js.map +7 -0
  230. package/dist/features/viz/lib/graph/tree.d.ts +11 -0
  231. package/dist/features/viz/lib/graph/tree.js +232 -0
  232. package/dist/features/viz/lib/graph/tree.js.map +7 -0
  233. package/dist/features/viz/lib/graph/treemap.d.ts +20 -0
  234. package/dist/features/viz/lib/graph/treemap.js +227 -0
  235. package/dist/features/viz/lib/graph/treemap.js.map +7 -0
  236. package/dist/features/viz/lib/graph/types.d.ts +1097 -0
  237. package/dist/features/viz/lib/hover-card.js +8 -9
  238. package/dist/features/viz/lib/hover-card.js.map +2 -2
  239. package/dist/features/viz/lib/hover-data.d.ts +1 -1
  240. package/dist/features/viz/lib/hover-data.js +6 -3
  241. package/dist/features/viz/lib/hover-data.js.map +2 -2
  242. package/dist/features/viz/lib/hover-types.d.ts +5 -5
  243. package/dist/features/viz/lib/interval-band-series.d.ts +49 -0
  244. package/dist/features/viz/lib/interval-band-series.js +136 -0
  245. package/dist/features/viz/lib/interval-band-series.js.map +7 -0
  246. package/dist/features/viz/lib/interval-diamond-series.d.ts +43 -0
  247. package/dist/features/viz/lib/interval-diamond-series.js +122 -0
  248. package/dist/features/viz/lib/interval-diamond-series.js.map +7 -0
  249. package/dist/features/viz/lib/interval-series.d.ts +79 -0
  250. package/dist/features/viz/lib/interval-series.js +158 -0
  251. package/dist/features/viz/lib/interval-series.js.map +7 -0
  252. package/dist/features/viz/lib/layout-pie.js +9 -13
  253. package/dist/features/viz/lib/layout-pie.js.map +2 -2
  254. package/dist/features/viz/lib/line-series.d.ts +1 -1
  255. package/dist/features/viz/lib/line-series.js +47 -28
  256. package/dist/features/viz/lib/line-series.js.map +2 -2
  257. package/dist/features/viz/lib/linear-scale-component.d.ts +7 -0
  258. package/dist/features/viz/lib/linear-scale-component.js +18 -0
  259. package/dist/features/viz/lib/linear-scale-component.js.map +7 -0
  260. package/dist/features/viz/lib/linear-scale.js +1 -1
  261. package/dist/features/viz/lib/linear-scale.js.map +2 -2
  262. package/dist/features/viz/lib/log-scale-component.d.ts +7 -0
  263. package/dist/features/viz/lib/log-scale-component.js +19 -0
  264. package/dist/features/viz/lib/log-scale-component.js.map +7 -0
  265. package/dist/features/viz/lib/log-scale.d.ts +2 -0
  266. package/dist/features/viz/lib/log-scale.js +53 -0
  267. package/dist/features/viz/lib/log-scale.js.map +7 -0
  268. package/dist/features/viz/lib/monotone-curve.d.ts +11 -0
  269. package/dist/features/viz/lib/monotone-curve.js +63 -0
  270. package/dist/features/viz/lib/monotone-curve.js.map +7 -0
  271. package/dist/features/viz/lib/nearest.d.ts +9 -9
  272. package/dist/features/viz/lib/nearest.js.map +1 -1
  273. package/dist/features/viz/lib/numeric-range-interpolation.d.ts +15 -0
  274. package/dist/features/viz/lib/numeric-range-interpolation.js +36 -0
  275. package/dist/features/viz/lib/numeric-range-interpolation.js.map +7 -0
  276. package/dist/features/viz/lib/numeric-ticks.d.ts +38 -0
  277. package/dist/features/viz/lib/numeric-ticks.js +54 -0
  278. package/dist/features/viz/lib/numeric-ticks.js.map +7 -0
  279. package/dist/features/viz/lib/ohlc-bar-series.d.ts +55 -0
  280. package/dist/features/viz/lib/ohlc-bar-series.js +168 -0
  281. package/dist/features/viz/lib/ohlc-bar-series.js.map +7 -0
  282. package/dist/features/viz/lib/paired-series.d.ts +44 -0
  283. package/dist/features/viz/lib/paired-series.js +93 -0
  284. package/dist/features/viz/lib/paired-series.js.map +7 -0
  285. package/dist/features/viz/lib/pie-layout.js +2 -1
  286. package/dist/features/viz/lib/pie-layout.js.map +2 -2
  287. package/dist/features/viz/lib/plot-series.js +11 -6
  288. package/dist/features/viz/lib/plot-series.js.map +2 -2
  289. package/dist/features/viz/lib/plot-types.d.ts +4 -3
  290. package/dist/features/viz/lib/point-scale-component.d.ts +7 -0
  291. package/dist/features/viz/lib/point-scale-component.js +19 -0
  292. package/dist/features/viz/lib/point-scale-component.js.map +7 -0
  293. package/dist/features/viz/lib/point-scale.d.ts +2 -0
  294. package/dist/features/viz/lib/point-scale.js +45 -0
  295. package/dist/features/viz/lib/point-scale.js.map +7 -0
  296. package/dist/features/viz/lib/point-series.d.ts +1 -1
  297. package/dist/features/viz/lib/point-series.js +36 -9
  298. package/dist/features/viz/lib/point-series.js.map +2 -2
  299. package/dist/features/viz/lib/point-types.d.ts +5 -2
  300. package/dist/features/viz/lib/reference-band.d.ts +16 -0
  301. package/dist/features/viz/lib/reference-band.js +30 -0
  302. package/dist/features/viz/lib/reference-band.js.map +7 -0
  303. package/dist/features/viz/lib/scale-adjust.js +9 -4
  304. package/dist/features/viz/lib/scale-adjust.js.map +2 -2
  305. package/dist/features/viz/lib/scale-context.d.ts +5 -4
  306. package/dist/features/viz/lib/scale-context.js +15 -11
  307. package/dist/features/viz/lib/scale-context.js.map +2 -2
  308. package/dist/features/viz/lib/scale-provider.d.ts +2 -0
  309. package/dist/features/viz/lib/scale-provider.js +13 -0
  310. package/dist/features/viz/lib/scale-provider.js.map +7 -0
  311. package/dist/features/viz/lib/scale-ticks.d.ts +5 -0
  312. package/dist/features/viz/lib/scale-ticks.js +64 -0
  313. package/dist/features/viz/lib/scale-ticks.js.map +7 -0
  314. package/dist/features/viz/lib/scale-view.d.ts +4 -0
  315. package/dist/features/viz/lib/scale-view.js +21 -0
  316. package/dist/features/viz/lib/scale-view.js.map +7 -0
  317. package/dist/features/viz/lib/sequential-color-scale.d.ts +11 -0
  318. package/dist/features/viz/lib/sequential-color-scale.js +49 -0
  319. package/dist/features/viz/lib/sequential-color-scale.js.map +7 -0
  320. package/dist/features/viz/lib/series-position.d.ts +12 -0
  321. package/dist/features/viz/lib/series-position.js +44 -0
  322. package/dist/features/viz/lib/series-position.js.map +7 -0
  323. package/dist/features/viz/lib/step-curves.d.ts +19 -0
  324. package/dist/features/viz/lib/step-curves.js +53 -0
  325. package/dist/features/viz/lib/step-curves.js.map +7 -0
  326. package/dist/features/viz/lib/symlog-scale-component.d.ts +7 -0
  327. package/dist/features/viz/lib/symlog-scale-component.js +19 -0
  328. package/dist/features/viz/lib/symlog-scale-component.js.map +7 -0
  329. package/dist/features/viz/lib/symlog-scale.d.ts +2 -0
  330. package/dist/features/viz/lib/symlog-scale.js +38 -0
  331. package/dist/features/viz/lib/symlog-scale.js.map +7 -0
  332. package/dist/features/viz/lib/threshold-color-scale.d.ts +43 -0
  333. package/dist/features/viz/lib/threshold-color-scale.js +59 -0
  334. package/dist/features/viz/lib/threshold-color-scale.js.map +7 -0
  335. package/dist/features/viz/lib/trading-time-mapping.d.ts +32 -0
  336. package/dist/features/viz/lib/trading-time-mapping.js +89 -0
  337. package/dist/features/viz/lib/trading-time-mapping.js.map +7 -0
  338. package/dist/features/viz/lib/trading-time-scale.d.ts +83 -0
  339. package/dist/features/viz/lib/trading-time-scale.js +96 -0
  340. package/dist/features/viz/lib/trading-time-scale.js.map +7 -0
  341. package/dist/features/viz/lib/trajectory-series.d.ts +71 -0
  342. package/dist/features/viz/lib/trajectory-series.js +111 -0
  343. package/dist/features/viz/lib/trajectory-series.js.map +7 -0
  344. package/dist/features/viz/lib/types.d.ts +114 -21
  345. package/dist/features/viz/lib/use-bar-scale.d.ts +8 -0
  346. package/dist/features/viz/lib/use-bar-scale.js +9 -0
  347. package/dist/features/viz/lib/use-bar-scale.js.map +7 -0
  348. package/dist/features/viz/lib/use-continuous-scale.d.ts +8 -0
  349. package/dist/features/viz/lib/use-continuous-scale.js +14 -0
  350. package/dist/features/viz/lib/use-continuous-scale.js.map +7 -0
  351. package/dist/features/viz/lib/use-linear-scale.d.ts +8 -0
  352. package/dist/features/viz/lib/use-linear-scale.js +9 -0
  353. package/dist/features/viz/lib/use-linear-scale.js.map +7 -0
  354. package/dist/features/viz/lib/use-log-scale.d.ts +8 -0
  355. package/dist/features/viz/lib/use-log-scale.js +9 -0
  356. package/dist/features/viz/lib/use-log-scale.js.map +7 -0
  357. package/dist/features/viz/lib/use-point-scale.d.ts +8 -0
  358. package/dist/features/viz/lib/use-point-scale.js +9 -0
  359. package/dist/features/viz/lib/use-point-scale.js.map +7 -0
  360. package/dist/features/viz/lib/use-symlog-scale.d.ts +8 -0
  361. package/dist/features/viz/lib/use-symlog-scale.js +9 -0
  362. package/dist/features/viz/lib/use-symlog-scale.js.map +7 -0
  363. package/dist/features/viz/lib/use-utc-scale.d.ts +8 -0
  364. package/dist/features/viz/lib/use-utc-scale.js +9 -0
  365. package/dist/features/viz/lib/use-utc-scale.js.map +7 -0
  366. package/dist/features/viz/lib/utc-labels.d.ts +12 -0
  367. package/dist/features/viz/lib/utc-labels.js +27 -0
  368. package/dist/features/viz/lib/utc-labels.js.map +7 -0
  369. package/dist/features/viz/lib/utc-scale-component.d.ts +7 -0
  370. package/dist/features/viz/lib/utc-scale-component.js +18 -0
  371. package/dist/features/viz/lib/utc-scale-component.js.map +7 -0
  372. package/dist/features/viz/lib/utc-scale.d.ts +21 -0
  373. package/dist/features/viz/lib/utc-scale.js +124 -0
  374. package/dist/features/viz/lib/utc-scale.js.map +7 -0
  375. package/dist/features/viz/lib/volume-series.d.ts +59 -0
  376. package/dist/features/viz/lib/volume-series.js +117 -0
  377. package/dist/features/viz/lib/volume-series.js.map +7 -0
  378. package/dist/features/viz/lib/weighted-point-series.d.ts +71 -0
  379. package/dist/features/viz/lib/weighted-point-series.js +169 -0
  380. package/dist/features/viz/lib/weighted-point-series.js.map +7 -0
  381. package/dist/filters/backdrop-contrast-gpu.d.ts +5 -0
  382. package/dist/filters/backdrop-contrast-gpu.js +33 -0
  383. package/dist/filters/backdrop-contrast-gpu.js.map +7 -0
  384. package/dist/filters/backdrop-contrast.d.ts +21 -0
  385. package/dist/filters/backdrop-contrast.js +61 -0
  386. package/dist/filters/backdrop-contrast.js.map +7 -0
  387. package/dist/filters/displacement.js +1 -1
  388. package/dist/filters/displacement.js.map +2 -2
  389. package/dist/filters/emboss-gpu.d.ts +4 -0
  390. package/dist/filters/emboss-gpu.js +39 -0
  391. package/dist/filters/emboss-gpu.js.map +7 -0
  392. package/dist/filters/emboss.d.ts +32 -0
  393. package/dist/filters/emboss.js +104 -0
  394. package/dist/filters/emboss.js.map +7 -0
  395. package/dist/filters/filter-executor.d.ts +11 -4
  396. package/dist/filters/filter-executor.js +104 -49
  397. package/dist/filters/filter-executor.js.map +2 -2
  398. package/dist/filters/reflected-light.js +1 -1
  399. package/dist/filters/reflected-light.js.map +2 -2
  400. package/dist/filters/reflection-gpu.d.ts +3 -1
  401. package/dist/filters/reflection-gpu.js +5 -2
  402. package/dist/filters/reflection-gpu.js.map +2 -2
  403. package/dist/filters/render-backdrop-contrast-boundary.d.ts +31 -0
  404. package/dist/filters/render-backdrop-contrast-boundary.js +116 -0
  405. package/dist/filters/render-backdrop-contrast-boundary.js.map +7 -0
  406. package/dist/filters/render-emboss-boundary.d.ts +13 -0
  407. package/dist/filters/render-emboss-boundary.js +131 -0
  408. package/dist/filters/render-emboss-boundary.js.map +7 -0
  409. package/dist/filters.d.ts +9 -5
  410. package/dist/filters.js +4 -0
  411. package/dist/filters.js.map +2 -2
  412. package/dist/index.d.ts +10 -6
  413. package/dist/index.js +18 -2
  414. package/dist/index.js.map +2 -2
  415. package/dist/internal.d.ts +4 -0
  416. package/dist/internal.js +6 -0
  417. package/dist/internal.js.map +2 -2
  418. package/dist/layout-kernel.d.ts +12 -0
  419. package/dist/layout-kernel.js +11 -0
  420. package/dist/layout-kernel.js.map +7 -0
  421. package/dist/layout-kernel.mjs +1 -0
  422. package/dist/lib/animation/definition.d.ts +5 -3
  423. package/dist/lib/animation/definition.js +29 -4
  424. package/dist/lib/animation/definition.js.map +2 -2
  425. package/dist/lib/animation/playback.d.ts +8 -0
  426. package/dist/lib/animation/playback.js +33 -11
  427. package/dist/lib/animation/playback.js.map +2 -2
  428. package/dist/lib/animation/spring.d.ts +3 -1
  429. package/dist/lib/animation/spring.js.map +2 -2
  430. package/dist/lib/animation/types.d.ts +29 -73
  431. package/dist/lib/backend/types.d.ts +13 -1
  432. package/dist/lib/backend/types.js.map +2 -2
  433. package/dist/lib/components/arc-geometry.js +2 -1
  434. package/dist/lib/components/arc-geometry.js.map +2 -2
  435. package/dist/lib/components/g.js +2 -0
  436. package/dist/lib/components/g.js.map +2 -2
  437. package/dist/lib/components/html-box.js +2 -1
  438. package/dist/lib/components/html-box.js.map +2 -2
  439. package/dist/lib/components/img.js +3 -3
  440. package/dist/lib/components/img.js.map +2 -2
  441. package/dist/lib/components/layer.js +98 -16
  442. package/dist/lib/components/layer.js.map +3 -3
  443. package/dist/lib/components/text.d.ts +16 -0
  444. package/dist/lib/components/text.js +131 -24
  445. package/dist/lib/components/text.js.map +2 -2
  446. package/dist/lib/define-primitive.d.ts +4 -2
  447. package/dist/lib/define-primitive.js +3 -1
  448. package/dist/lib/define-primitive.js.map +2 -2
  449. package/dist/lib/element/metadata.d.ts +9 -0
  450. package/dist/lib/element/metadata.js +19 -0
  451. package/dist/lib/element/metadata.js.map +2 -2
  452. package/dist/lib/element/resolve-primitive-inputs.d.ts +2 -0
  453. package/dist/lib/element/resolve-primitive-inputs.js +17 -4
  454. package/dist/lib/element/resolve-primitive-inputs.js.map +2 -2
  455. package/dist/lib/events/event-facade.d.ts +18 -0
  456. package/dist/lib/events/event-facade.js +28 -2
  457. package/dist/lib/events/event-facade.js.map +2 -2
  458. package/dist/lib/events/hit-test.js +2 -1
  459. package/dist/lib/events/hit-test.js.map +2 -2
  460. package/dist/lib/events/propagation.d.ts +2 -1
  461. package/dist/lib/events/propagation.js +22 -16
  462. package/dist/lib/events/propagation.js.map +2 -2
  463. package/dist/lib/events/registrations.d.ts +10 -0
  464. package/dist/lib/events/registrations.js +160 -5
  465. package/dist/lib/events/registrations.js.map +2 -2
  466. package/dist/lib/execute-render.js +25 -1
  467. package/dist/lib/execute-render.js.map +2 -2
  468. package/dist/lib/filter/filter-region.js +3 -10
  469. package/dist/lib/filter/filter-region.js.map +2 -2
  470. package/dist/lib/focus/focus-manager.d.ts +8 -1
  471. package/dist/lib/focus/focus-manager.js +87 -43
  472. package/dist/lib/focus/focus-manager.js.map +2 -2
  473. package/dist/lib/focus/geometry.d.ts +2 -0
  474. package/dist/lib/focus/geometry.js +6 -0
  475. package/dist/lib/focus/geometry.js.map +2 -2
  476. package/dist/lib/geometry/path-bend-guide.js +1 -1
  477. package/dist/lib/geometry/path-bend-guide.js.map +2 -2
  478. package/dist/lib/geometry/path-geometry.js +12 -11
  479. package/dist/lib/geometry/path-geometry.js.map +2 -2
  480. package/dist/lib/geometry/path-transforms.js +17 -21
  481. package/dist/lib/geometry/path-transforms.js.map +2 -2
  482. package/dist/lib/geometry/path-warp-bezier.js +3 -1
  483. package/dist/lib/geometry/path-warp-bezier.js.map +2 -2
  484. package/dist/lib/geometry/path-warp.js +1 -1
  485. package/dist/lib/geometry/path-warp.js.map +2 -2
  486. package/dist/lib/global-state.js +2 -0
  487. package/dist/lib/global-state.js.map +2 -2
  488. package/dist/lib/hooks/use-animated-value.d.ts +11 -21
  489. package/dist/lib/hooks/use-animated-value.js +23 -70
  490. package/dist/lib/hooks/use-animated-value.js.map +3 -3
  491. package/dist/lib/hooks/use-playback.js +1 -0
  492. package/dist/lib/hooks/use-playback.js.map +2 -2
  493. package/dist/lib/html/html-events.d.ts +32 -0
  494. package/dist/lib/html/html-events.js +179 -0
  495. package/dist/lib/html/html-events.js.map +7 -0
  496. package/dist/lib/html/html-service.d.ts +8 -2
  497. package/dist/lib/html/html-service.js +198 -65
  498. package/dist/lib/html/html-service.js.map +2 -2
  499. package/dist/lib/html/overlay-config.js +7 -6
  500. package/dist/lib/html/overlay-config.js.map +2 -2
  501. package/dist/lib/html/types.d.ts +29 -2
  502. package/dist/lib/layout/absolute.d.ts +11 -5
  503. package/dist/lib/layout/absolute.js +329 -55
  504. package/dist/lib/layout/absolute.js.map +3 -3
  505. package/dist/lib/layout/allocation-checkpoint-owner.d.ts +11 -0
  506. package/dist/lib/layout/allocation-checkpoint-owner.js +86 -0
  507. package/dist/lib/layout/allocation-checkpoint-owner.js.map +7 -0
  508. package/dist/lib/layout/allocation-checkpoint.d.ts +53 -0
  509. package/dist/lib/layout/allocation-checkpoint.js +463 -0
  510. package/dist/lib/layout/allocation-checkpoint.js.map +7 -0
  511. package/dist/lib/layout/allocation-dependencies.d.ts +30 -0
  512. package/dist/lib/layout/allocation-dependencies.js +90 -0
  513. package/dist/lib/layout/allocation-dependencies.js.map +7 -0
  514. package/dist/lib/layout/allocation-revision.d.ts +13 -0
  515. package/dist/lib/layout/allocation-revision.js +67 -0
  516. package/dist/lib/layout/allocation-revision.js.map +7 -0
  517. package/dist/lib/layout/box-insets.d.ts +17 -0
  518. package/dist/lib/layout/box-insets.js +138 -0
  519. package/dist/lib/layout/box-insets.js.map +7 -0
  520. package/dist/lib/layout/box-sizing.d.ts +16 -0
  521. package/dist/lib/layout/box-sizing.js +77 -0
  522. package/dist/lib/layout/box-sizing.js.map +7 -0
  523. package/dist/lib/layout/box.js +42 -12
  524. package/dist/lib/layout/box.js.map +2 -2
  525. package/dist/lib/layout/canvas-measurement.d.ts +13 -0
  526. package/dist/lib/layout/canvas-measurement.js +57 -0
  527. package/dist/lib/layout/canvas-measurement.js.map +7 -0
  528. package/dist/lib/layout/context.d.ts +35 -6
  529. package/dist/lib/layout/context.js +72 -3
  530. package/dist/lib/layout/context.js.map +2 -2
  531. package/dist/lib/layout/define-layout-component.d.ts +23 -0
  532. package/dist/lib/layout/define-layout-component.js +84 -0
  533. package/dist/lib/layout/define-layout-component.js.map +7 -0
  534. package/dist/lib/layout/flex-allocation-cache.d.ts +42 -0
  535. package/dist/lib/layout/flex-baseline-mode.d.ts +2 -0
  536. package/dist/lib/layout/flex-baseline-mode.js +7 -0
  537. package/dist/lib/layout/flex-baseline-mode.js.map +7 -0
  538. package/dist/lib/layout/flex.d.ts +50 -15
  539. package/dist/lib/layout/flex.js +2124 -195
  540. package/dist/lib/layout/flex.js.map +3 -3
  541. package/dist/lib/layout/flow.js +225 -49
  542. package/dist/lib/layout/flow.js.map +2 -2
  543. package/dist/lib/layout/geometry-publication.d.ts +53 -0
  544. package/dist/lib/layout/geometry-publication.js +244 -0
  545. package/dist/lib/layout/geometry-publication.js.map +7 -0
  546. package/dist/lib/layout/grid-kernel.d.ts +63 -0
  547. package/dist/lib/layout/grid-kernel.js +168 -0
  548. package/dist/lib/layout/grid-kernel.js.map +7 -0
  549. package/dist/lib/layout/grid.d.ts +63 -4
  550. package/dist/lib/layout/grid.js +767 -171
  551. package/dist/lib/layout/grid.js.map +3 -3
  552. package/dist/lib/layout/measure.d.ts +55 -3
  553. package/dist/lib/layout/measure.js +448 -15
  554. package/dist/lib/layout/measure.js.map +2 -2
  555. package/dist/lib/layout/overlay.js +81 -23
  556. package/dist/lib/layout/overlay.js.map +2 -2
  557. package/dist/lib/layout/participation.d.ts +27 -0
  558. package/dist/lib/layout/participation.js +188 -0
  559. package/dist/lib/layout/participation.js.map +7 -0
  560. package/dist/lib/layout/place-child.js +1 -1
  561. package/dist/lib/layout/place-child.js.map +2 -2
  562. package/dist/lib/layout/positioning-diagnostics.d.ts +1 -1
  563. package/dist/lib/layout/positioning-diagnostics.js +13 -2
  564. package/dist/lib/layout/positioning-diagnostics.js.map +2 -2
  565. package/dist/lib/layout/prepared-root.d.ts +121 -0
  566. package/dist/lib/layout/prepared-root.js +360 -0
  567. package/dist/lib/layout/prepared-root.js.map +7 -0
  568. package/dist/lib/layout/standalone-kernel.d.ts +60 -0
  569. package/dist/lib/layout/standalone-kernel.js +722 -0
  570. package/dist/lib/layout/standalone-kernel.js.map +7 -0
  571. package/dist/lib/layout/topology.d.ts +21 -0
  572. package/dist/lib/layout/topology.js +113 -0
  573. package/dist/lib/layout/topology.js.map +7 -0
  574. package/dist/lib/layout/types.d.ts +5 -0
  575. package/dist/lib/layout/wasm/artifact.d.ts +1 -0
  576. package/dist/lib/layout/wasm/artifact.js +5 -0
  577. package/dist/lib/layout/wasm/artifact.js.map +7 -0
  578. package/dist/lib/layout/wasm/bytes.d.ts +1 -0
  579. package/dist/lib/layout/wasm/bytes.js +5 -0
  580. package/dist/lib/layout/wasm/bytes.js.map +7 -0
  581. package/dist/lib/layout/wasm/embedded.d.ts +2 -0
  582. package/dist/lib/layout/wasm/embedded.js +12 -0
  583. package/dist/lib/layout/wasm/embedded.js.map +7 -0
  584. package/dist/lib/layout/wasm/layout.wasm +0 -0
  585. package/dist/lib/layout/wasm/module.d.ts +8 -0
  586. package/dist/lib/layout/wasm/module.js +70 -0
  587. package/dist/lib/layout/wasm/module.js.map +7 -0
  588. package/dist/lib/layout/wasm/region.d.ts +267 -0
  589. package/dist/lib/layout/wasm/region.js +1018 -0
  590. package/dist/lib/layout/wasm/region.js.map +7 -0
  591. package/dist/lib/manipulation/controller.js +4 -7
  592. package/dist/lib/manipulation/controller.js.map +2 -2
  593. package/dist/lib/manipulation/frame.js +1 -1
  594. package/dist/lib/manipulation/frame.js.map +2 -2
  595. package/dist/lib/manipulation/handles.js +32 -33
  596. package/dist/lib/manipulation/handles.js.map +2 -2
  597. package/dist/lib/manipulation/solve.js +12 -10
  598. package/dist/lib/manipulation/solve.js.map +2 -2
  599. package/dist/lib/mount-pibbl.js +1 -0
  600. package/dist/lib/mount-pibbl.js.map +2 -2
  601. package/dist/lib/mount-prepared-pibbl.d.ts +5 -0
  602. package/dist/lib/mount-prepared-pibbl.js +29 -0
  603. package/dist/lib/mount-prepared-pibbl.js.map +7 -0
  604. package/dist/lib/mount-request.d.ts +8 -0
  605. package/dist/lib/mount-request.js +41 -0
  606. package/dist/lib/mount-request.js.map +7 -0
  607. package/dist/lib/pibbl.d.ts +21 -13
  608. package/dist/lib/pibbl.js +18 -16
  609. package/dist/lib/pibbl.js.map +2 -2
  610. package/dist/lib/recording/recording.d.ts +43 -0
  611. package/dist/lib/recording/recording.js +555 -0
  612. package/dist/lib/recording/recording.js.map +7 -0
  613. package/dist/lib/recording/types.d.ts +118 -0
  614. package/dist/lib/recording/wasm-bytes.d.ts +1 -0
  615. package/dist/lib/recording/wasm-bytes.js +5 -0
  616. package/dist/lib/recording/wasm-bytes.js.map +7 -0
  617. package/dist/lib/recording/worker-source.d.ts +1 -0
  618. package/dist/lib/recording/worker-source.js +5 -0
  619. package/dist/lib/recording/worker-source.js.map +7 -0
  620. package/dist/lib/render-layer/controller.d.ts +9 -3
  621. package/dist/lib/render-layer/controller.js +259 -110
  622. package/dist/lib/render-layer/controller.js.map +2 -2
  623. package/dist/lib/render-transaction.d.ts +12 -2
  624. package/dist/lib/render-transaction.js +69 -1
  625. package/dist/lib/render-transaction.js.map +2 -2
  626. package/dist/lib/render.js +32 -8
  627. package/dist/lib/render.js.map +2 -2
  628. package/dist/lib/scheduler/realm-scheduler.d.ts +2 -0
  629. package/dist/lib/scheduler/realm-scheduler.js +55 -26
  630. package/dist/lib/scheduler/realm-scheduler.js.map +2 -2
  631. package/dist/lib/scheduler/renderer-participant.js +1 -0
  632. package/dist/lib/scheduler/renderer-participant.js.map +2 -2
  633. package/dist/lib/series-inspection-frame.d.ts +18 -0
  634. package/dist/lib/series-inspection-frame.js +70 -0
  635. package/dist/lib/series-inspection-frame.js.map +7 -0
  636. package/dist/lib/signals/edge.d.ts +7 -4
  637. package/dist/lib/signals/edge.js +25 -3
  638. package/dist/lib/signals/edge.js.map +2 -2
  639. package/dist/lib/signals/graph.d.ts +16 -2
  640. package/dist/lib/signals/graph.js +54 -12
  641. package/dist/lib/signals/graph.js.map +2 -2
  642. package/dist/lib/signals/input-provision.d.ts +15 -0
  643. package/dist/lib/signals/input-provision.js +53 -3
  644. package/dist/lib/signals/input-provision.js.map +2 -2
  645. package/dist/lib/signals/render-consumer.d.ts +3 -0
  646. package/dist/lib/signals/render-consumer.js +22 -14
  647. package/dist/lib/signals/render-consumer.js.map +2 -2
  648. package/dist/lib/style/positioning.d.ts +50 -2
  649. package/dist/lib/style/positioning.js +28 -4
  650. package/dist/lib/style/positioning.js.map +2 -2
  651. package/dist/lib/style/resolve-built-in.d.ts +4 -3
  652. package/dist/lib/style/resolve-built-in.js +17 -3
  653. package/dist/lib/style/resolve-built-in.js.map +2 -2
  654. package/dist/lib/style/resolve-dispatch.d.ts +3 -0
  655. package/dist/lib/style/resolve-dispatch.js +77 -4
  656. package/dist/lib/style/resolve-dispatch.js.map +2 -2
  657. package/dist/lib/style/resolve-length.d.ts +2 -0
  658. package/dist/lib/style/resolve-length.js +13 -9
  659. package/dist/lib/style/resolve-length.js.map +2 -2
  660. package/dist/lib/style/sizing-length.d.ts +51 -0
  661. package/dist/lib/style/sizing-length.js +77 -0
  662. package/dist/lib/style/sizing-length.js.map +7 -0
  663. package/dist/lib/style/types.d.ts +63 -25
  664. package/dist/lib/surface/root-surface.js +10 -6
  665. package/dist/lib/surface/root-surface.js.map +2 -2
  666. package/dist/lib/textures/texture.js +10 -8
  667. package/dist/lib/textures/texture.js.map +2 -2
  668. package/dist/lib/transitions/capture.js +4 -1
  669. package/dist/lib/transitions/capture.js.map +2 -2
  670. package/dist/lib/transitions/embers-physics.js +17 -10
  671. package/dist/lib/transitions/embers-physics.js.map +2 -2
  672. package/dist/lib/types.d.ts +110 -1
  673. package/dist/sync.d.ts +16 -0
  674. package/dist/sync.js +13 -0
  675. package/dist/sync.js.map +7 -0
  676. package/dist/sync.mjs +1 -0
  677. package/package.json +43 -6
  678. package/dist/features/viz/lib/scale.d.ts +0 -11
  679. package/dist/features/viz/lib/scale.js +0 -80
  680. package/dist/features/viz/lib/scale.js.map +0 -7
  681. package/dist/features/viz/lib/use-scale.d.ts +0 -20
  682. package/dist/features/viz/lib/use-scale.js +0 -10
  683. package/dist/features/viz/lib/use-scale.js.map +0 -7
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/lib/scheduler/renderer-participant.ts"],
4
- "sourcesContent": ["import type { pibblInternalQueueSimulationBegin } from './simulation-participant.js';\nimport {\n GLOBAL_STATE,\n} from '../global-state.js';\nimport {\n collectSignalReads,\n createSignalRenderConsumer,\n disposeSignalRenderConsumer,\n} from '../signals/render-consumer.js';\nimport {\n assertSignalCommandAllowed,\n} from '../signals/graph.js';\nimport type { WritableSignal } from '../signals/types.js';\nimport { usePaintTarget } from '../hooks/use-paint-target.js';\nimport type {\n PibblEventHandlers,\n PibblEventTargetOptions,\n PibblEventTargetSnapshot,\n PibblPointerEvents,\n} from '../events/types.js';\nimport type { PibblComponentRefs, PibblInstance } from '../types.js';\nimport {\n getCurrentFrameSnapshot,\n queueBeginCommand,\n queueCurrentFrameCommitAcknowledgement,\n queueCurrentFrameCompletion,\n queueRendererParticipantComplete,\n registerAdvanceParticipant,\n removeRendererParticipantOwner,\n requestInstanceRender,\n requestRendererParticipantWork,\n type RendererParticipantOwner,\n} from './realm-scheduler.js';\n\ndeclare const internalRenderOwnerBrand: unique symbol;\n\n/**\n * Opaque ownership identity for renderer scheduling and cleanup.\n *\n * @see {@link pibblInternalCreateSignalConsumer}\n * @see {@link pibblInternalCurrentRenderOwner}\n * @see {@link pibblInternalOnRenderFinish}\n */\nexport interface PibblInternalRenderOwner {\n readonly [internalRenderOwnerBrand]: true;\n}\n\n/**\n * Shared scheduler frame identity, logical timing, and admission context.\n *\n * @see {@link pibblInternalCurrentFrame}\n * @see {@link pibblInternalQueueBegin}\n * @see {@link pibblInternalQueueComplete}\n */\nexport interface PibblInternalFrame {\n /** Identifier of the shared scheduler frame. See {@link PibblInternalFrame}. */\n readonly frameId: number;\n /** Logical scheduler time in milliseconds. See {@link PibblInternalFrame}. */\n readonly logicalTime: number;\n}\n\n/**\n * Staged signal writes published together during scheduler Commit.\n *\n * @see {@link WritableSignal}\n * @see {@link pibblInternalQueueBegin}\n * @see {@link pibblInternalRegisterAdvance}\n * @see {@link pibblInternalQueueSimulationBegin}\n */\nexport interface PibblInternalSignalBatch {\n /**\n * Reads the current committed values required by this integration. See\n * {@link PibblInternalSignalBatch}.\n * @param signal - Signal whose staged or committed value should be read. See\n * {@link WritableSignal} .\n * @returns The current batch value, falling back to the committed signal value.\n */\n read<T>(signal: WritableSignal<T>): T;\n /**\n * Stages a signal write for publication during Commit. See {@link PibblInternalSignalBatch}.\n * @param signal - Signal that will receive the value during Commit. See {@link WritableSignal}.\n * @param value - Value to stage.\n * @param writer - Identity used to attribute and discard staged writes.\n */\n stage<T>(signal: WritableSignal<T>, value: T, writer: object): void;\n /**\n * Discards writes belonging to the specified writer. See {@link PibblInternalSignalBatch}.\n * @param writer - Writer identity whose pending writes should be discarded.\n */\n discardWriter(writer: object): void;\n}\n\n/**\n * Sequence identity and cancellation capability for a queued scheduler command.\n *\n * @see {@link pibblInternalQueueBegin}\n */\nexport interface PibblInternalCommandHandle {\n /**\n * Sequence number assigned when the scheduler command is queued. See\n * {@link PibblInternalCommandHandle}.\n */\n readonly sequence: number;\n /**\n * Cancels this queued command before it is admitted by the scheduler. See\n * {@link PibblInternalCommandHandle}.\n */\n cancel(): void;\n}\n\n/**\n * Ordered renderer stages around one owning Canvas instance traversal.\n * Every active callback in a stage runs in registration order. If one or more\n * callbacks fail, their errors are reported in that order, later dependent\n * stages are skipped, the root transaction fails, the instance revision stays\n * incomplete, and the failed batch plus unexecuted batches later in the same\n * root are retried on the next realm frame. Complete callbacks for those\n * retried owners are deferred until a successful frame. Other owners and roots\n * still complete normally.\n *\n * @see {@link pibblInternalRequestRendererWork}\n */\nexport type PibblInternalRendererWorkKind = 'resource' | 'draw' | 'compose';\n\n/**\n * Dependency tracking and disposal operations for an integration-owned signal consumer.\n *\n * @see {@link pibblInternalCreateSignalConsumer}\n */\nexport interface PibblInternalSignalConsumer {\n /**\n * Evaluates a callback while collecting signal dependencies for this consumer. See\n * {@link PibblInternalSignalConsumer}.\n * @param read - Synchronous computation whose signal dependencies are collected.\n * @returns The computation's return value.\n */\n collect<T>(read: () => T): T;\n /**\n * Acknowledges the consumer's current invalidation as processed. See\n * {@link PibblInternalSignalConsumer}.\n */\n markClean(): void;\n /** Releases resources owned by this mounted object. See {@link PibblInternalSignalConsumer}. */\n dispose(): void;\n}\n\ninterface RenderOwnerState {\n readonly component: PibblComponentRefs<any>;\n readonly instance: PibblInstance;\n readonly schedulerOwner: RendererParticipantOwner;\n readonly consumers: Set<PibblInternalSignalConsumer>;\n readonly beginCommands: Set<PibblInternalCommandHandle>;\n readonly advanceRegistrations: Set<() => void>;\n active: boolean;\n}\n\nconst ownersByComponent = new WeakMap<\n PibblComponentRefs<any>,\n PibblInternalRenderOwner\n>();\nconst ownerStates = new WeakMap<PibblInternalRenderOwner, RenderOwnerState>();\n\n/**\n * Returns the active render owner required by official integration scheduling operations.\n *\n * @returns The render owner for the current runtime context. See {@link PibblInternalRenderOwner}.\n *\n * @see {@link PibblInternalRenderOwner}\n */\nexport function pibblInternalCurrentRenderOwner(): PibblInternalRenderOwner {\n const component = GLOBAL_STATE.componentRefs;\n const instance = GLOBAL_STATE.currentPibblInstance;\n if (!component || !instance) {\n throw new Error(\n 'pibblInternalCurrentRenderOwner() is only available during Pibbl component evaluation.',\n );\n }\n\n const existing = ownersByComponent.get(component);\n if (existing) return existing;\n\n const owner = {} as PibblInternalRenderOwner;\n const state = {} as RenderOwnerState;\n const schedulerOwner: RendererParticipantOwner = {\n instance,\n isActive: () => state.active && isCurrentOwner(state),\n };\n Object.assign(state, {\n component,\n instance,\n schedulerOwner,\n consumers: new Set<PibblInternalSignalConsumer>(),\n beginCommands: new Set<PibblInternalCommandHandle>(),\n advanceRegistrations: new Set<() => void>(),\n active: true,\n });\n ownersByComponent.set(component, owner);\n ownerStates.set(owner, state);\n component.teardowns.add(() => disposeRenderOwner(owner));\n return owner;\n}\n\n/**\n * Creates an owner-scoped dependency consumer for an official renderer integration.\n *\n * @param options - Render owner, optional diagnostic name, and invalidation callback. See\n * {@link PibblInternalRenderOwner} .\n * @returns A consumer that tracks signal dependencies and owns their cleanup. See\n * {@link PibblInternalSignalConsumer} .\n *\n * @see {@link PibblInternalRenderOwner}\n * @see {@link PibblInternalSignalConsumer}\n */\nexport function pibblInternalCreateSignalConsumer(options: {\n owner: PibblInternalRenderOwner;\n debugName?: string;\n invalidate(): void;\n}): PibblInternalSignalConsumer {\n const ownerState = requireActiveOwner(options.owner);\n let disposed = false;\n const signalConsumer = createSignalRenderConsumer({\n debugName: options.debugName ??\n `official renderer (${ownerState.component.id})`,\n invalidate: () => {\n if (!disposed && ownerState.schedulerOwner.isActive()) {\n options.invalidate();\n }\n },\n });\n const consumer: PibblInternalSignalConsumer = {\n collect<T>(read: () => T): T {\n if (disposed) {\n throw new Error('Cannot collect signal reads with a disposed Pibbl renderer consumer.');\n }\n requireActiveOwner(options.owner);\n return collectSignalReads(signalConsumer, () => read());\n },\n markClean(): void {\n if (!disposed) signalConsumer.markClean();\n },\n dispose(): void {\n if (disposed) return;\n disposed = true;\n ownerState.consumers.delete(consumer);\n disposeSignalRenderConsumer(signalConsumer);\n },\n };\n ownerState.consumers.add(consumer);\n return consumer;\n}\n\n/**\n * Requests keyed renderer work in the shared scheduler without creating a second frame loop.\n *\n * @param owner - Owner whose renderer work is being requested. See {@link PibblInternalRenderOwner}.\n * @param request - Work identity, renderer category, and frame callback. See\n * {@link PibblInternalRendererWorkKind} , {@link PibblInternalFrame} .\n *\n * @see {@link PibblInternalRenderOwner}\n * @see {@link PibblInternalRendererWorkKind}\n * @see {@link PibblInternalFrame}\n */\nexport function pibblInternalRequestRendererWork(\n owner: PibblInternalRenderOwner,\n request: {\n key: object;\n kind: PibblInternalRendererWorkKind;\n run(frame: PibblInternalFrame): void;\n },\n): void {\n const state = requireActiveOwner(owner);\n requestRendererParticipantWork(state.schedulerOwner, request);\n}\n\n/**\n * Rejects commands issued from runtime evaluation contexts that forbid mutation.\n *\n * @see {@link pibblInternalQueueBegin}\n */\nexport function pibblInternalAssertCommandAllowed(): void {\n assertSignalCommandAllowed();\n}\n\n/**\n * Queues an owner-scoped Begin command and returns a cancellation handle.\n *\n * @param owner - Owner admitting the command. See {@link PibblInternalRenderOwner}.\n * @param callback - Begin-phase callback receiving frame, staged writes, and command sequence. See\n * {@link PibblInternalFrame} , {@link PibblInternalSignalBatch} .\n * @returns A handle that can cancel the queued command. See {@link PibblInternalCommandHandle}.\n *\n * @see {@link PibblInternalRenderOwner}\n * @see {@link PibblInternalFrame}\n * @see {@link PibblInternalSignalBatch}\n * @see {@link PibblInternalCommandHandle}\n */\nexport function pibblInternalQueueBegin(\n owner: PibblInternalRenderOwner,\n callback: (\n frame: PibblInternalFrame,\n batch: PibblInternalSignalBatch,\n sequence: number,\n ) => void,\n): PibblInternalCommandHandle {\n const state = requireActiveOwner(owner);\n let handle: PibblInternalCommandHandle;\n const schedulerHandle = queueBeginCommand((frame, batch, sequence) => {\n state.beginCommands.delete(handle);\n if (!state.schedulerOwner.isActive()) return;\n callback(frame, batch, sequence);\n });\n handle = Object.freeze({\n sequence: schedulerHandle.sequence,\n cancel(): void {\n state.beginCommands.delete(handle);\n schedulerHandle.cancel();\n },\n });\n state.beginCommands.add(handle);\n return handle;\n}\n\n/**\n * Registers renderer work for shared-frame Advance and returns its unregister callback.\n *\n * @param owner - Owner of the advancing work. See {@link PibblInternalRenderOwner}.\n * @param callback - Advance callback receiving the frame and staged signal writes. See\n * {@link PibblInternalFrame} , {@link PibblInternalSignalBatch} .\n * @returns A function unregistering the Advance callback.\n *\n * @see {@link PibblInternalRenderOwner}\n * @see {@link PibblInternalFrame}\n * @see {@link PibblInternalSignalBatch}\n */\nexport function pibblInternalRegisterAdvance(\n owner: PibblInternalRenderOwner,\n callback: (frame: PibblInternalFrame, batch: PibblInternalSignalBatch) => void,\n): () => void {\n const state = requireActiveOwner(owner);\n let released = false;\n const unregister = registerAdvanceParticipant((frame, batch) => {\n if (!state.schedulerOwner.isActive()) return;\n callback(frame, batch);\n });\n const release = (): void => {\n if (released) return;\n released = true;\n state.advanceRegistrations.delete(release);\n unregister();\n };\n state.advanceRegistrations.add(release);\n return release;\n}\n\n/**\n * Registers acknowledgement of the current frame's committed staged writes.\n *\n * @param owner - Owner of the pending commit. See {@link PibblInternalRenderOwner}.\n * @param callback - Callback receiving the frame and whether the commit was applied. See\n * {@link PibblInternalFrame} .\n *\n * @see {@link PibblInternalRenderOwner}\n * @see {@link PibblInternalFrame}\n */\nexport function pibblInternalQueueCurrentCommit(\n owner: PibblInternalRenderOwner,\n callback: (\n frame: PibblInternalFrame,\n outcome: Readonly<{ applied: boolean }>,\n ) => void,\n): void {\n const state = requireActiveOwner(owner);\n queueCurrentFrameCommitAcknowledgement((frame, outcome) => {\n if (!state.schedulerOwner.isActive()) return;\n callback(frame, outcome);\n });\n}\n\n/**\n * Queues an owner-scoped completion callback in the current scheduler transaction.\n *\n * @param owner - Owner of the completion work. See {@link PibblInternalRenderOwner}.\n * @param callback - Callback invoked during Complete with the shared frame. See\n * {@link PibblInternalFrame} .\n *\n * @see {@link PibblInternalRenderOwner}\n * @see {@link PibblInternalFrame}\n */\nexport function pibblInternalQueueCurrentComplete(\n owner: PibblInternalRenderOwner,\n callback: (frame: PibblInternalFrame) => void,\n): void {\n const state = requireActiveOwner(owner);\n queueCurrentFrameCompletion(frame => {\n if (!state.schedulerOwner.isActive()) return;\n callback(frame);\n });\n}\n\n/**\n * Marks the owning renderer dirty and requests shared scheduler work.\n *\n * @param owner - Owner whose renderer should become dirty. See {@link PibblInternalRenderOwner}.\n *\n * @see {@link PibblInternalRenderOwner}\n */\nexport function pibblInternalRequestRender(owner: PibblInternalRenderOwner): void {\n const state = requireActiveOwner(owner);\n requestInstanceRender(state.instance);\n}\n\n/**\n * Registers a callback reporting the outcome of the owner's render transaction.\n *\n * @param owner - Owner of the rendering transaction. See {@link PibblInternalRenderOwner}.\n * @param callback - Callback receiving whether the transaction succeeded.\n *\n * @see {@link PibblInternalRenderOwner}\n */\nexport function pibblInternalOnRenderFinish(\n owner: PibblInternalRenderOwner,\n callback: (success: boolean) => void,\n): void {\n const state = requireActiveOwner(owner);\n if (\n GLOBAL_STATE.componentRefs !== state.component ||\n GLOBAL_STATE.currentPibblInstance !== state.instance ||\n !GLOBAL_STATE.renderTransaction\n ) {\n throw new Error(\n 'pibblInternalOnRenderFinish() requires its owner to be the currently evaluating Pibbl component.',\n );\n }\n GLOBAL_STATE.renderTransaction.onFinish(success => {\n if (success && !state.schedulerOwner.isActive()) return;\n callback(success);\n });\n}\n\n/**\n * Registers one painted logical target with its handlers, geometry, and participation policy.\n *\n * @param handlers - Handlers for the painted target. See {@link PibblEventHandlers}.\n * @param options - Hit geometry and focus metadata. See {@link PibblEventTargetOptions}.\n * @param pointerEvents - Pointer participation policy; defaults to auto. See\n * {@link PibblPointerEvents} .\n * @returns The painted event target snapshot. See {@link PibblEventTargetSnapshot}.\n *\n * @see {@link PibblEventHandlers}\n * @see {@link PibblEventTargetOptions}\n * @see {@link PibblPointerEvents}\n * @see {@link PibblEventTargetSnapshot}\n */\nexport function pibblInternalPaintTarget(\n handlers: PibblEventHandlers,\n options: PibblEventTargetOptions,\n pointerEvents: PibblPointerEvents = 'auto',\n): PibblEventTargetSnapshot {\n return usePaintTarget(handlers, options, pointerEvents);\n}\n\n/**\n * Returns timing and phase information for the current shared scheduler frame.\n *\n * @returns The shared scheduler frame for the active phase. See {@link PibblInternalFrame}.\n *\n * @see {@link PibblInternalFrame}\n */\nexport function pibblInternalCurrentFrame(): PibblInternalFrame {\n const frame = getCurrentFrameSnapshot();\n if (!frame) {\n throw new Error('pibblInternalCurrentFrame() requires a current Pibbl frame.');\n }\n return frame;\n}\n\n/**\n * Queues an owner-scoped callback for a scheduler Complete phase.\n *\n * @param owner - Owner of the completion work. See {@link PibblInternalRenderOwner}.\n * @param callback - Callback invoked during Complete with the shared frame. See\n * {@link PibblInternalFrame} .\n *\n * @see {@link PibblInternalRenderOwner}\n * @see {@link PibblInternalFrame}\n */\nexport function pibblInternalQueueComplete(\n owner: PibblInternalRenderOwner,\n callback: (frame: PibblInternalFrame) => void,\n): void {\n const state = requireActiveOwner(owner);\n queueRendererParticipantComplete(state.schedulerOwner, callback);\n}\n\nfunction requireActiveOwner(owner: PibblInternalRenderOwner): RenderOwnerState {\n const state = ownerStates.get(owner);\n if (!state || !state.active || !isCurrentOwner(state)) {\n throw new TypeError('Expected an active Pibbl internal render owner.');\n }\n return state;\n}\n\nfunction isCurrentOwner(state: RenderOwnerState): boolean {\n return !state.component.teardowns.closed &&\n !state.instance.mainTeardowns.closed &&\n GLOBAL_STATE.pibblInstances.get(state.instance.canvas) === state.instance &&\n state.instance.refs.get(state.component.id) === state.component;\n}\n\nfunction disposeRenderOwner(owner: PibblInternalRenderOwner): void {\n const state = ownerStates.get(owner);\n if (!state || !state.active) return;\n state.active = false;\n for (const command of Array.from(state.beginCommands)) {\n command.cancel();\n }\n state.beginCommands.clear();\n for (const release of Array.from(state.advanceRegistrations)) {\n release();\n }\n state.advanceRegistrations.clear();\n removeRendererParticipantOwner(state.schedulerOwner);\n for (const consumer of Array.from(state.consumers)) {\n consumer.dispose();\n }\n state.consumers.clear();\n}\n"],
5
- "mappings": "AACA;AAAA,EACE;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,OACK;AAEP,SAAS,sBAAsB;AAQ/B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AA4HP,MAAM,oBAAoB,oBAAI,QAG5B;AACF,MAAM,cAAc,oBAAI,QAAoD;AASrE,SAAS,kCAA4D;AAC1E,QAAM,YAAY,aAAa;AAC/B,QAAM,WAAW,aAAa;AAC9B,MAAI,CAAC,aAAa,CAAC,UAAU;AAC3B,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,QAAM,WAAW,kBAAkB,IAAI,SAAS;AAChD,MAAI,SAAU,QAAO;AAErB,QAAM,QAAQ,CAAC;AACf,QAAM,QAAQ,CAAC;AACf,QAAM,iBAA2C;AAAA,IAC/C;AAAA,IACA,UAAU,MAAM,MAAM,UAAU,eAAe,KAAK;AAAA,EACtD;AACA,SAAO,OAAO,OAAO;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW,oBAAI,IAAiC;AAAA,IAChD,eAAe,oBAAI,IAAgC;AAAA,IACnD,sBAAsB,oBAAI,IAAgB;AAAA,IAC1C,QAAQ;AAAA,EACV,CAAC;AACD,oBAAkB,IAAI,WAAW,KAAK;AACtC,cAAY,IAAI,OAAO,KAAK;AAC5B,YAAU,UAAU,IAAI,MAAM,mBAAmB,KAAK,CAAC;AACvD,SAAO;AACT;AAaO,SAAS,kCAAkC,SAIlB;AAC9B,QAAM,aAAa,mBAAmB,QAAQ,KAAK;AACnD,MAAI,WAAW;AACf,QAAM,iBAAiB,2BAA2B;AAAA,IAChD,WAAW,QAAQ,aACjB,sBAAsB,WAAW,UAAU,EAAE;AAAA,IAC/C,YAAY,MAAM;AAChB,UAAI,CAAC,YAAY,WAAW,eAAe,SAAS,GAAG;AACrD,gBAAQ,WAAW;AAAA,MACrB;AAAA,IACF;AAAA,EACF,CAAC;AACD,QAAM,WAAwC;AAAA,IAC5C,QAAW,MAAkB;AAC3B,UAAI,UAAU;AACZ,cAAM,IAAI,MAAM,sEAAsE;AAAA,MACxF;AACA,yBAAmB,QAAQ,KAAK;AAChC,aAAO,mBAAmB,gBAAgB,MAAM,KAAK,CAAC;AAAA,IACxD;AAAA,IACA,YAAkB;AAChB,UAAI,CAAC,SAAU,gBAAe,UAAU;AAAA,IAC1C;AAAA,IACA,UAAgB;AACd,UAAI,SAAU;AACd,iBAAW;AACX,iBAAW,UAAU,OAAO,QAAQ;AACpC,kCAA4B,cAAc;AAAA,IAC5C;AAAA,EACF;AACA,aAAW,UAAU,IAAI,QAAQ;AACjC,SAAO;AACT;AAaO,SAAS,iCACd,OACA,SAKM;AACN,QAAM,QAAQ,mBAAmB,KAAK;AACtC,iCAA+B,MAAM,gBAAgB,OAAO;AAC9D;AAOO,SAAS,oCAA0C;AACxD,6BAA2B;AAC7B;AAeO,SAAS,wBACd,OACA,UAK4B;AAC5B,QAAM,QAAQ,mBAAmB,KAAK;AACtC,MAAI;AACJ,QAAM,kBAAkB,kBAAkB,CAAC,OAAO,OAAO,aAAa;AACpE,UAAM,cAAc,OAAO,MAAM;AACjC,QAAI,CAAC,MAAM,eAAe,SAAS,EAAG;AACtC,aAAS,OAAO,OAAO,QAAQ;AAAA,EACjC,CAAC;AACD,WAAS,OAAO,OAAO;AAAA,IACrB,UAAU,gBAAgB;AAAA,IAC1B,SAAe;AACb,YAAM,cAAc,OAAO,MAAM;AACjC,sBAAgB,OAAO;AAAA,IACzB;AAAA,EACF,CAAC;AACD,QAAM,cAAc,IAAI,MAAM;AAC9B,SAAO;AACT;AAcO,SAAS,6BACd,OACA,UACY;AACZ,QAAM,QAAQ,mBAAmB,KAAK;AACtC,MAAI,WAAW;AACf,QAAM,aAAa,2BAA2B,CAAC,OAAO,UAAU;AAC9D,QAAI,CAAC,MAAM,eAAe,SAAS,EAAG;AACtC,aAAS,OAAO,KAAK;AAAA,EACvB,CAAC;AACD,QAAM,UAAU,MAAY;AAC1B,QAAI,SAAU;AACd,eAAW;AACX,UAAM,qBAAqB,OAAO,OAAO;AACzC,eAAW;AAAA,EACb;AACA,QAAM,qBAAqB,IAAI,OAAO;AACtC,SAAO;AACT;AAYO,SAAS,gCACd,OACA,UAIM;AACN,QAAM,QAAQ,mBAAmB,KAAK;AACtC,yCAAuC,CAAC,OAAO,YAAY;AACzD,QAAI,CAAC,MAAM,eAAe,SAAS,EAAG;AACtC,aAAS,OAAO,OAAO;AAAA,EACzB,CAAC;AACH;AAYO,SAAS,kCACd,OACA,UACM;AACN,QAAM,QAAQ,mBAAmB,KAAK;AACtC,8BAA4B,WAAS;AACnC,QAAI,CAAC,MAAM,eAAe,SAAS,EAAG;AACtC,aAAS,KAAK;AAAA,EAChB,CAAC;AACH;AASO,SAAS,2BAA2B,OAAuC;AAChF,QAAM,QAAQ,mBAAmB,KAAK;AACtC,wBAAsB,MAAM,QAAQ;AACtC;AAUO,SAAS,4BACd,OACA,UACM;AACN,QAAM,QAAQ,mBAAmB,KAAK;AACtC,MACE,aAAa,kBAAkB,MAAM,aACrC,aAAa,yBAAyB,MAAM,YAC5C,CAAC,aAAa,mBACd;AACA,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACA,eAAa,kBAAkB,SAAS,aAAW;AACjD,QAAI,WAAW,CAAC,MAAM,eAAe,SAAS,EAAG;AACjD,aAAS,OAAO;AAAA,EAClB,CAAC;AACH;AAgBO,SAAS,yBACd,UACA,SACA,gBAAoC,QACV;AAC1B,SAAO,eAAe,UAAU,SAAS,aAAa;AACxD;AASO,SAAS,4BAAgD;AAC9D,QAAM,QAAQ,wBAAwB;AACtC,MAAI,CAAC,OAAO;AACV,UAAM,IAAI,MAAM,6DAA6D;AAAA,EAC/E;AACA,SAAO;AACT;AAYO,SAAS,2BACd,OACA,UACM;AACN,QAAM,QAAQ,mBAAmB,KAAK;AACtC,mCAAiC,MAAM,gBAAgB,QAAQ;AACjE;AAEA,SAAS,mBAAmB,OAAmD;AAC7E,QAAM,QAAQ,YAAY,IAAI,KAAK;AACnC,MAAI,CAAC,SAAS,CAAC,MAAM,UAAU,CAAC,eAAe,KAAK,GAAG;AACrD,UAAM,IAAI,UAAU,iDAAiD;AAAA,EACvE;AACA,SAAO;AACT;AAEA,SAAS,eAAe,OAAkC;AACxD,SAAO,CAAC,MAAM,UAAU,UAAU,UAChC,CAAC,MAAM,SAAS,cAAc,UAC9B,aAAa,eAAe,IAAI,MAAM,SAAS,MAAM,MAAM,MAAM,YACjE,MAAM,SAAS,KAAK,IAAI,MAAM,UAAU,EAAE,MAAM,MAAM;AAC1D;AAEA,SAAS,mBAAmB,OAAuC;AACjE,QAAM,QAAQ,YAAY,IAAI,KAAK;AACnC,MAAI,CAAC,SAAS,CAAC,MAAM,OAAQ;AAC7B,QAAM,SAAS;AACf,aAAW,WAAW,MAAM,KAAK,MAAM,aAAa,GAAG;AACrD,YAAQ,OAAO;AAAA,EACjB;AACA,QAAM,cAAc,MAAM;AAC1B,aAAW,WAAW,MAAM,KAAK,MAAM,oBAAoB,GAAG;AAC5D,YAAQ;AAAA,EACV;AACA,QAAM,qBAAqB,MAAM;AACjC,iCAA+B,MAAM,cAAc;AACnD,aAAW,YAAY,MAAM,KAAK,MAAM,SAAS,GAAG;AAClD,aAAS,QAAQ;AAAA,EACnB;AACA,QAAM,UAAU,MAAM;AACxB;",
4
+ "sourcesContent": ["import type { pibblInternalQueueSimulationBegin } from './simulation-participant.js';\nimport {\n GLOBAL_STATE,\n} from '../global-state.js';\nimport {\n collectSignalReads,\n createSignalRenderConsumer,\n disposeSignalRenderConsumer,\n} from '../signals/render-consumer.js';\nimport {\n assertSignalCommandAllowed,\n} from '../signals/graph.js';\nimport type { WritableSignal } from '../signals/types.js';\nimport { usePaintTarget } from '../hooks/use-paint-target.js';\nimport type {\n PibblEventHandlers,\n PibblEventTargetOptions,\n PibblEventTargetSnapshot,\n PibblPointerEvents,\n} from '../events/types.js';\nimport type { PibblComponentRefs, PibblInstance } from '../types.js';\nimport {\n getCurrentFrameSnapshot,\n queueBeginCommand,\n queueCurrentFrameCommitAcknowledgement,\n queueCurrentFrameCompletion,\n queueRendererParticipantComplete,\n registerAdvanceParticipant,\n removeRendererParticipantOwner,\n requestInstanceRender,\n requestRendererParticipantWork,\n type RendererParticipantOwner,\n} from './realm-scheduler.js';\n\ndeclare const internalRenderOwnerBrand: unique symbol;\n\n/**\n * Opaque ownership identity for renderer scheduling and cleanup.\n *\n * @see {@link pibblInternalCreateSignalConsumer}\n * @see {@link pibblInternalCurrentRenderOwner}\n * @see {@link pibblInternalOnRenderFinish}\n */\nexport interface PibblInternalRenderOwner {\n readonly [internalRenderOwnerBrand]: true;\n}\n\n/**\n * Shared scheduler frame identity, logical timing, and admission context.\n *\n * @see {@link pibblInternalCurrentFrame}\n * @see {@link pibblInternalQueueBegin}\n * @see {@link pibblInternalQueueComplete}\n */\nexport interface PibblInternalFrame {\n /** Identifier of the shared scheduler frame. See {@link PibblInternalFrame}. */\n readonly frameId: number;\n /** Logical scheduler time in milliseconds. See {@link PibblInternalFrame}. */\n readonly logicalTime: number;\n}\n\n/**\n * Staged signal writes published together during scheduler Commit.\n *\n * @see {@link WritableSignal}\n * @see {@link pibblInternalQueueBegin}\n * @see {@link pibblInternalRegisterAdvance}\n * @see {@link pibblInternalQueueSimulationBegin}\n */\nexport interface PibblInternalSignalBatch {\n /**\n * Reads the current committed values required by this integration. See\n * {@link PibblInternalSignalBatch}.\n * @param signal - Signal whose staged or committed value should be read. See\n * {@link WritableSignal} .\n * @returns The current batch value, falling back to the committed signal value.\n */\n read<T>(signal: WritableSignal<T>): T;\n /**\n * Stages a signal write for publication during Commit. See {@link PibblInternalSignalBatch}.\n * @param signal - Signal that will receive the value during Commit. See {@link WritableSignal}.\n * @param value - Value to stage.\n * @param writer - Identity used to attribute and discard staged writes.\n */\n stage<T>(signal: WritableSignal<T>, value: T, writer: object): void;\n /**\n * Discards writes belonging to the specified writer. See {@link PibblInternalSignalBatch}.\n * @param writer - Writer identity whose pending writes should be discarded.\n */\n discardWriter(writer: object): void;\n}\n\n/**\n * Sequence identity and cancellation capability for a queued scheduler command.\n *\n * @see {@link pibblInternalQueueBegin}\n */\nexport interface PibblInternalCommandHandle {\n /**\n * Sequence number assigned when the scheduler command is queued. See\n * {@link PibblInternalCommandHandle}.\n */\n readonly sequence: number;\n /**\n * Cancels this queued command before it is admitted by the scheduler. See\n * {@link PibblInternalCommandHandle}.\n */\n cancel(): void;\n}\n\n/**\n * Ordered renderer stages around one owning Canvas instance traversal.\n * Every active callback in a stage runs in registration order. If one or more\n * callbacks fail, their errors are reported in that order, later dependent\n * stages are skipped, the root transaction fails, the instance revision stays\n * incomplete, and the failed batch plus unexecuted batches later in the same\n * root are retried on the next realm frame. Complete callbacks for those\n * retried owners are deferred until a successful frame. Other owners and roots\n * still complete normally.\n *\n * @see {@link pibblInternalRequestRendererWork}\n */\nexport type PibblInternalRendererWorkKind = 'resource' | 'draw' | 'compose';\n\n/**\n * Dependency tracking and disposal operations for an integration-owned signal consumer.\n *\n * @see {@link pibblInternalCreateSignalConsumer}\n */\nexport interface PibblInternalSignalConsumer {\n /**\n * Evaluates a callback while collecting signal dependencies for this consumer. See\n * {@link PibblInternalSignalConsumer}.\n * @param read - Synchronous computation whose signal dependencies are collected.\n * @returns The computation's return value.\n */\n collect<T>(read: () => T): T;\n /**\n * Acknowledges the consumer's current invalidation as processed. See\n * {@link PibblInternalSignalConsumer}.\n */\n markClean(): void;\n /** Releases resources owned by this mounted object. See {@link PibblInternalSignalConsumer}. */\n dispose(): void;\n}\n\ninterface RenderOwnerState {\n readonly component: PibblComponentRefs<any>;\n readonly instance: PibblInstance;\n readonly schedulerOwner: RendererParticipantOwner;\n readonly consumers: Set<PibblInternalSignalConsumer>;\n readonly beginCommands: Set<PibblInternalCommandHandle>;\n readonly advanceRegistrations: Set<() => void>;\n active: boolean;\n}\n\nconst ownersByComponent = new WeakMap<\n PibblComponentRefs<any>,\n PibblInternalRenderOwner\n>();\nconst ownerStates = new WeakMap<PibblInternalRenderOwner, RenderOwnerState>();\n\n/**\n * Returns the active render owner required by official integration scheduling operations.\n *\n * @returns The render owner for the current runtime context. See {@link PibblInternalRenderOwner}.\n *\n * @see {@link PibblInternalRenderOwner}\n */\nexport function pibblInternalCurrentRenderOwner(): PibblInternalRenderOwner {\n const component = GLOBAL_STATE.componentRefs;\n const instance = GLOBAL_STATE.currentPibblInstance;\n if (!component || !instance) {\n throw new Error(\n 'pibblInternalCurrentRenderOwner() is only available during Pibbl component evaluation.',\n );\n }\n\n const existing = ownersByComponent.get(component);\n if (existing) return existing;\n\n const owner = {} as PibblInternalRenderOwner;\n const state = {} as RenderOwnerState;\n const schedulerOwner: RendererParticipantOwner = {\n instance,\n isActive: () => state.active && isCurrentOwner(state),\n };\n Object.assign(state, {\n component,\n instance,\n schedulerOwner,\n consumers: new Set<PibblInternalSignalConsumer>(),\n beginCommands: new Set<PibblInternalCommandHandle>(),\n advanceRegistrations: new Set<() => void>(),\n active: true,\n });\n ownersByComponent.set(component, owner);\n ownerStates.set(owner, state);\n component.teardowns.add(() => disposeRenderOwner(owner));\n return owner;\n}\n\n/**\n * Creates an owner-scoped dependency consumer for an official renderer integration.\n *\n * @param options - Render owner, optional diagnostic name, and invalidation callback. See\n * {@link PibblInternalRenderOwner} .\n * @returns A consumer that tracks signal dependencies and owns their cleanup. See\n * {@link PibblInternalSignalConsumer} .\n *\n * @see {@link PibblInternalRenderOwner}\n * @see {@link PibblInternalSignalConsumer}\n */\nexport function pibblInternalCreateSignalConsumer(options: {\n owner: PibblInternalRenderOwner;\n debugName?: string;\n invalidate(): void;\n}): PibblInternalSignalConsumer {\n const ownerState = requireActiveOwner(options.owner);\n let disposed = false;\n const signalConsumer = createSignalRenderConsumer({\n layoutOwner: ownerState.instance,\n debugName: options.debugName ??\n `official renderer (${ownerState.component.id})`,\n invalidate: () => {\n if (!disposed && ownerState.schedulerOwner.isActive()) {\n options.invalidate();\n }\n },\n });\n const consumer: PibblInternalSignalConsumer = {\n collect<T>(read: () => T): T {\n if (disposed) {\n throw new Error('Cannot collect signal reads with a disposed Pibbl renderer consumer.');\n }\n requireActiveOwner(options.owner);\n return collectSignalReads(signalConsumer, () => read());\n },\n markClean(): void {\n if (!disposed) signalConsumer.markClean();\n },\n dispose(): void {\n if (disposed) return;\n disposed = true;\n ownerState.consumers.delete(consumer);\n disposeSignalRenderConsumer(signalConsumer);\n },\n };\n ownerState.consumers.add(consumer);\n return consumer;\n}\n\n/**\n * Requests keyed renderer work in the shared scheduler without creating a second frame loop.\n *\n * @param owner - Owner whose renderer work is being requested. See {@link PibblInternalRenderOwner}.\n * @param request - Work identity, renderer category, and frame callback. See\n * {@link PibblInternalRendererWorkKind} , {@link PibblInternalFrame} .\n *\n * @see {@link PibblInternalRenderOwner}\n * @see {@link PibblInternalRendererWorkKind}\n * @see {@link PibblInternalFrame}\n */\nexport function pibblInternalRequestRendererWork(\n owner: PibblInternalRenderOwner,\n request: {\n key: object;\n kind: PibblInternalRendererWorkKind;\n run(frame: PibblInternalFrame): void;\n },\n): void {\n const state = requireActiveOwner(owner);\n requestRendererParticipantWork(state.schedulerOwner, request);\n}\n\n/**\n * Rejects commands issued from runtime evaluation contexts that forbid mutation.\n *\n * @see {@link pibblInternalQueueBegin}\n */\nexport function pibblInternalAssertCommandAllowed(): void {\n assertSignalCommandAllowed();\n}\n\n/**\n * Queues an owner-scoped Begin command and returns a cancellation handle.\n *\n * @param owner - Owner admitting the command. See {@link PibblInternalRenderOwner}.\n * @param callback - Begin-phase callback receiving frame, staged writes, and command sequence. See\n * {@link PibblInternalFrame} , {@link PibblInternalSignalBatch} .\n * @returns A handle that can cancel the queued command. See {@link PibblInternalCommandHandle}.\n *\n * @see {@link PibblInternalRenderOwner}\n * @see {@link PibblInternalFrame}\n * @see {@link PibblInternalSignalBatch}\n * @see {@link PibblInternalCommandHandle}\n */\nexport function pibblInternalQueueBegin(\n owner: PibblInternalRenderOwner,\n callback: (\n frame: PibblInternalFrame,\n batch: PibblInternalSignalBatch,\n sequence: number,\n ) => void,\n): PibblInternalCommandHandle {\n const state = requireActiveOwner(owner);\n let handle: PibblInternalCommandHandle;\n const schedulerHandle = queueBeginCommand((frame, batch, sequence) => {\n state.beginCommands.delete(handle);\n if (!state.schedulerOwner.isActive()) return;\n callback(frame, batch, sequence);\n });\n handle = Object.freeze({\n sequence: schedulerHandle.sequence,\n cancel(): void {\n state.beginCommands.delete(handle);\n schedulerHandle.cancel();\n },\n });\n state.beginCommands.add(handle);\n return handle;\n}\n\n/**\n * Registers renderer work for shared-frame Advance and returns its unregister callback.\n *\n * @param owner - Owner of the advancing work. See {@link PibblInternalRenderOwner}.\n * @param callback - Advance callback receiving the frame and staged signal writes. See\n * {@link PibblInternalFrame} , {@link PibblInternalSignalBatch} .\n * @returns A function unregistering the Advance callback.\n *\n * @see {@link PibblInternalRenderOwner}\n * @see {@link PibblInternalFrame}\n * @see {@link PibblInternalSignalBatch}\n */\nexport function pibblInternalRegisterAdvance(\n owner: PibblInternalRenderOwner,\n callback: (frame: PibblInternalFrame, batch: PibblInternalSignalBatch) => void,\n): () => void {\n const state = requireActiveOwner(owner);\n let released = false;\n const unregister = registerAdvanceParticipant((frame, batch) => {\n if (!state.schedulerOwner.isActive()) return;\n callback(frame, batch);\n });\n const release = (): void => {\n if (released) return;\n released = true;\n state.advanceRegistrations.delete(release);\n unregister();\n };\n state.advanceRegistrations.add(release);\n return release;\n}\n\n/**\n * Registers acknowledgement of the current frame's committed staged writes.\n *\n * @param owner - Owner of the pending commit. See {@link PibblInternalRenderOwner}.\n * @param callback - Callback receiving the frame and whether the commit was applied. See\n * {@link PibblInternalFrame} .\n *\n * @see {@link PibblInternalRenderOwner}\n * @see {@link PibblInternalFrame}\n */\nexport function pibblInternalQueueCurrentCommit(\n owner: PibblInternalRenderOwner,\n callback: (\n frame: PibblInternalFrame,\n outcome: Readonly<{ applied: boolean }>,\n ) => void,\n): void {\n const state = requireActiveOwner(owner);\n queueCurrentFrameCommitAcknowledgement((frame, outcome) => {\n if (!state.schedulerOwner.isActive()) return;\n callback(frame, outcome);\n });\n}\n\n/**\n * Queues an owner-scoped completion callback in the current scheduler transaction.\n *\n * @param owner - Owner of the completion work. See {@link PibblInternalRenderOwner}.\n * @param callback - Callback invoked during Complete with the shared frame. See\n * {@link PibblInternalFrame} .\n *\n * @see {@link PibblInternalRenderOwner}\n * @see {@link PibblInternalFrame}\n */\nexport function pibblInternalQueueCurrentComplete(\n owner: PibblInternalRenderOwner,\n callback: (frame: PibblInternalFrame) => void,\n): void {\n const state = requireActiveOwner(owner);\n queueCurrentFrameCompletion(frame => {\n if (!state.schedulerOwner.isActive()) return;\n callback(frame);\n });\n}\n\n/**\n * Marks the owning renderer dirty and requests shared scheduler work.\n *\n * @param owner - Owner whose renderer should become dirty. See {@link PibblInternalRenderOwner}.\n *\n * @see {@link PibblInternalRenderOwner}\n */\nexport function pibblInternalRequestRender(owner: PibblInternalRenderOwner): void {\n const state = requireActiveOwner(owner);\n requestInstanceRender(state.instance);\n}\n\n/**\n * Registers a callback reporting the outcome of the owner's render transaction.\n *\n * @param owner - Owner of the rendering transaction. See {@link PibblInternalRenderOwner}.\n * @param callback - Callback receiving whether the transaction succeeded.\n *\n * @see {@link PibblInternalRenderOwner}\n */\nexport function pibblInternalOnRenderFinish(\n owner: PibblInternalRenderOwner,\n callback: (success: boolean) => void,\n): void {\n const state = requireActiveOwner(owner);\n if (\n GLOBAL_STATE.componentRefs !== state.component ||\n GLOBAL_STATE.currentPibblInstance !== state.instance ||\n !GLOBAL_STATE.renderTransaction\n ) {\n throw new Error(\n 'pibblInternalOnRenderFinish() requires its owner to be the currently evaluating Pibbl component.',\n );\n }\n GLOBAL_STATE.renderTransaction.onFinish(success => {\n if (success && !state.schedulerOwner.isActive()) return;\n callback(success);\n });\n}\n\n/**\n * Registers one painted logical target with its handlers, geometry, and participation policy.\n *\n * @param handlers - Handlers for the painted target. See {@link PibblEventHandlers}.\n * @param options - Hit geometry and focus metadata. See {@link PibblEventTargetOptions}.\n * @param pointerEvents - Pointer participation policy; defaults to auto. See\n * {@link PibblPointerEvents} .\n * @returns The painted event target snapshot. See {@link PibblEventTargetSnapshot}.\n *\n * @see {@link PibblEventHandlers}\n * @see {@link PibblEventTargetOptions}\n * @see {@link PibblPointerEvents}\n * @see {@link PibblEventTargetSnapshot}\n */\nexport function pibblInternalPaintTarget(\n handlers: PibblEventHandlers,\n options: PibblEventTargetOptions,\n pointerEvents: PibblPointerEvents = 'auto',\n): PibblEventTargetSnapshot {\n return usePaintTarget(handlers, options, pointerEvents);\n}\n\n/**\n * Returns timing and phase information for the current shared scheduler frame.\n *\n * @returns The shared scheduler frame for the active phase. See {@link PibblInternalFrame}.\n *\n * @see {@link PibblInternalFrame}\n */\nexport function pibblInternalCurrentFrame(): PibblInternalFrame {\n const frame = getCurrentFrameSnapshot();\n if (!frame) {\n throw new Error('pibblInternalCurrentFrame() requires a current Pibbl frame.');\n }\n return frame;\n}\n\n/**\n * Queues an owner-scoped callback for a scheduler Complete phase.\n *\n * @param owner - Owner of the completion work. See {@link PibblInternalRenderOwner}.\n * @param callback - Callback invoked during Complete with the shared frame. See\n * {@link PibblInternalFrame} .\n *\n * @see {@link PibblInternalRenderOwner}\n * @see {@link PibblInternalFrame}\n */\nexport function pibblInternalQueueComplete(\n owner: PibblInternalRenderOwner,\n callback: (frame: PibblInternalFrame) => void,\n): void {\n const state = requireActiveOwner(owner);\n queueRendererParticipantComplete(state.schedulerOwner, callback);\n}\n\nfunction requireActiveOwner(owner: PibblInternalRenderOwner): RenderOwnerState {\n const state = ownerStates.get(owner);\n if (!state || !state.active || !isCurrentOwner(state)) {\n throw new TypeError('Expected an active Pibbl internal render owner.');\n }\n return state;\n}\n\nfunction isCurrentOwner(state: RenderOwnerState): boolean {\n return !state.component.teardowns.closed &&\n !state.instance.mainTeardowns.closed &&\n GLOBAL_STATE.pibblInstances.get(state.instance.canvas) === state.instance &&\n state.instance.refs.get(state.component.id) === state.component;\n}\n\nfunction disposeRenderOwner(owner: PibblInternalRenderOwner): void {\n const state = ownerStates.get(owner);\n if (!state || !state.active) return;\n state.active = false;\n for (const command of Array.from(state.beginCommands)) {\n command.cancel();\n }\n state.beginCommands.clear();\n for (const release of Array.from(state.advanceRegistrations)) {\n release();\n }\n state.advanceRegistrations.clear();\n removeRendererParticipantOwner(state.schedulerOwner);\n for (const consumer of Array.from(state.consumers)) {\n consumer.dispose();\n }\n state.consumers.clear();\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,18 @@
1
+ import type { PibblClippingStackEntry } from "./types.js";
2
+ /** Private geometry/ownership seam; no inspection algorithms enter core rendering.
3
+ * @returns Captured receiver ownership and lazily composed root geometry.
4
+ * @see {@link PibblClippingStackEntry}
5
+ */
6
+ export declare function captureSeriesInspectionFrame(): {
7
+ receiver: import("./types.js").PibblComponentRefs<any>;
8
+ onDispose: (callback: () => void) => void;
9
+ onFinish: (callback: (success: boolean) => void) => void;
10
+ alive: () => boolean;
11
+ generation: () => number;
12
+ resolve(): {
13
+ transform: DOMMatrix;
14
+ clips: PibblClippingStackEntry[];
15
+ generation: number;
16
+ canvas: HTMLCanvasElement;
17
+ } | undefined;
18
+ };
@@ -0,0 +1,70 @@
1
+ import { GLOBAL_STATE } from "./global-state.js";
2
+ import { requireHookContext } from "./hooks/hook-slot.js";
3
+ import { getCurrentWorldTransform } from "./render-target.js";
4
+ import { PibblPaintEntryKind } from "./events/paint-entry.js";
5
+ function captureSeriesInspectionFrame() {
6
+ const { componentRefs, pibblInstance } = requireHookContext();
7
+ const localTransform = new DOMMatrix(
8
+ Array.from(getCurrentWorldTransform().toFloat64Array())
9
+ );
10
+ const localClips = GLOBAL_STATE.clippingStack.map((clip) => ({
11
+ ...clip,
12
+ path: new Path2D(clip.path),
13
+ transform: new DOMMatrix(Array.from(clip.transform.toFloat64Array()))
14
+ }));
15
+ const transaction = GLOBAL_STATE.renderTransaction;
16
+ return {
17
+ receiver: componentRefs,
18
+ onDispose: (callback) => componentRefs.teardowns.add(callback),
19
+ onFinish: (callback) => transaction.onFinish(callback),
20
+ alive: () => !componentRefs.teardowns.closed && !pibblInstance.mainTeardowns.closed,
21
+ generation: () => pibblInstance.eventRoot.rootInstance?.committedRenderGeneration ?? 0,
22
+ resolve() {
23
+ let owner = pibblInstance;
24
+ let transform = new DOMMatrix(
25
+ Array.from(localTransform.toFloat64Array())
26
+ );
27
+ let clips = localClips.slice();
28
+ while (owner !== owner.eventRoot.rootInstance) {
29
+ const parent = owner.parent && GLOBAL_STATE.pibblInstances.get(owner.parent);
30
+ if (!parent) return void 0;
31
+ const bridge = [...parent.paintEntries].find(
32
+ (entry) => entry.paintKind !== PibblPaintEntryKind.Path && entry.instance === owner
33
+ );
34
+ if (!bridge || bridge.paintKind === PibblPaintEntryKind.Path)
35
+ return void 0;
36
+ const outer = bridge.transform;
37
+ clips = clips.map((clip) => ({
38
+ ...clip,
39
+ transform: outer.multiply(clip.transform)
40
+ }));
41
+ clips.push(
42
+ ...bridge.clippingStack.map((clip) => ({
43
+ ...clip,
44
+ path: new Path2D(clip.path),
45
+ transform: new DOMMatrix(
46
+ Array.from(clip.transform.toFloat64Array())
47
+ )
48
+ }))
49
+ );
50
+ clips.push({
51
+ path: new Path2D(bridge.bounds),
52
+ transform: new DOMMatrix(Array.from(outer.toFloat64Array())),
53
+ fillRule: "nonzero"
54
+ });
55
+ transform = outer.multiply(transform);
56
+ owner = parent;
57
+ }
58
+ return {
59
+ transform,
60
+ clips,
61
+ generation: owner.committedRenderGeneration ?? 0,
62
+ canvas: owner.canvas
63
+ };
64
+ }
65
+ };
66
+ }
67
+ export {
68
+ captureSeriesInspectionFrame
69
+ };
70
+ //# sourceMappingURL=series-inspection-frame.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/lib/series-inspection-frame.ts"],
4
+ "sourcesContent": ["import { GLOBAL_STATE } from \"./global-state.js\";\nimport { requireHookContext } from \"./hooks/hook-slot.js\";\nimport { getCurrentWorldTransform } from \"./render-target.js\";\nimport { PibblPaintEntryKind } from \"./events/paint-entry.js\";\nimport type { PibblClippingStackEntry } from \"./types.js\";\n\n/** Private geometry/ownership seam; no inspection algorithms enter core rendering.\n * @returns Captured receiver ownership and lazily composed root geometry.\n * @see {@link PibblClippingStackEntry}\n */\nexport function captureSeriesInspectionFrame() {\n const { componentRefs, pibblInstance } = requireHookContext();\n const localTransform = new DOMMatrix(\n Array.from(getCurrentWorldTransform().toFloat64Array()),\n );\n const localClips = GLOBAL_STATE.clippingStack.map((clip) => ({\n ...clip,\n path: new Path2D(clip.path),\n transform: new DOMMatrix(Array.from(clip.transform.toFloat64Array())),\n }));\n const transaction = GLOBAL_STATE.renderTransaction!;\n return {\n receiver: componentRefs,\n onDispose: (callback: () => void) => componentRefs.teardowns.add(callback),\n onFinish: (callback: (success: boolean) => void) =>\n transaction.onFinish(callback),\n alive: () =>\n !componentRefs.teardowns.closed && !pibblInstance.mainTeardowns.closed,\n generation: () =>\n pibblInstance.eventRoot.rootInstance?.committedRenderGeneration ?? 0,\n resolve() {\n let owner = pibblInstance;\n let transform = new DOMMatrix(\n Array.from(localTransform.toFloat64Array()),\n );\n let clips: PibblClippingStackEntry[] = localClips.slice();\n while (owner !== owner.eventRoot.rootInstance) {\n const parent =\n owner.parent && GLOBAL_STATE.pibblInstances.get(owner.parent);\n if (!parent) return undefined;\n const bridge = [...parent.paintEntries].find(\n (entry) =>\n entry.paintKind !== PibblPaintEntryKind.Path &&\n entry.instance === owner,\n );\n if (!bridge || bridge.paintKind === PibblPaintEntryKind.Path)\n return undefined;\n const outer = bridge.transform;\n clips = clips.map((clip) => ({\n ...clip,\n transform: outer.multiply(clip.transform),\n }));\n clips.push(\n ...bridge.clippingStack.map((clip) => ({\n ...clip,\n path: new Path2D(clip.path),\n transform: new DOMMatrix(\n Array.from(clip.transform.toFloat64Array()),\n ),\n })),\n );\n clips.push({\n path: new Path2D(bridge.bounds),\n transform: new DOMMatrix(Array.from(outer.toFloat64Array())),\n fillRule: \"nonzero\",\n });\n transform = outer.multiply(transform);\n owner = parent;\n }\n return {\n transform,\n clips,\n generation: owner.committedRenderGeneration ?? 0,\n canvas: owner.canvas as HTMLCanvasElement,\n };\n },\n };\n}\n"],
5
+ "mappings": "AAAA,SAAS,oBAAoB;AAC7B,SAAS,0BAA0B;AACnC,SAAS,gCAAgC;AACzC,SAAS,2BAA2B;AAO7B,SAAS,+BAA+B;AAC7C,QAAM,EAAE,eAAe,cAAc,IAAI,mBAAmB;AAC5D,QAAM,iBAAiB,IAAI;AAAA,IACzB,MAAM,KAAK,yBAAyB,EAAE,eAAe,CAAC;AAAA,EACxD;AACA,QAAM,aAAa,aAAa,cAAc,IAAI,CAAC,UAAU;AAAA,IAC3D,GAAG;AAAA,IACH,MAAM,IAAI,OAAO,KAAK,IAAI;AAAA,IAC1B,WAAW,IAAI,UAAU,MAAM,KAAK,KAAK,UAAU,eAAe,CAAC,CAAC;AAAA,EACtE,EAAE;AACF,QAAM,cAAc,aAAa;AACjC,SAAO;AAAA,IACL,UAAU;AAAA,IACV,WAAW,CAAC,aAAyB,cAAc,UAAU,IAAI,QAAQ;AAAA,IACzE,UAAU,CAAC,aACT,YAAY,SAAS,QAAQ;AAAA,IAC/B,OAAO,MACL,CAAC,cAAc,UAAU,UAAU,CAAC,cAAc,cAAc;AAAA,IAClE,YAAY,MACV,cAAc,UAAU,cAAc,6BAA6B;AAAA,IACrE,UAAU;AACR,UAAI,QAAQ;AACZ,UAAI,YAAY,IAAI;AAAA,QAClB,MAAM,KAAK,eAAe,eAAe,CAAC;AAAA,MAC5C;AACA,UAAI,QAAmC,WAAW,MAAM;AACxD,aAAO,UAAU,MAAM,UAAU,cAAc;AAC7C,cAAM,SACJ,MAAM,UAAU,aAAa,eAAe,IAAI,MAAM,MAAM;AAC9D,YAAI,CAAC,OAAQ,QAAO;AACpB,cAAM,SAAS,CAAC,GAAG,OAAO,YAAY,EAAE;AAAA,UACtC,CAAC,UACC,MAAM,cAAc,oBAAoB,QACxC,MAAM,aAAa;AAAA,QACvB;AACA,YAAI,CAAC,UAAU,OAAO,cAAc,oBAAoB;AACtD,iBAAO;AACT,cAAM,QAAQ,OAAO;AACrB,gBAAQ,MAAM,IAAI,CAAC,UAAU;AAAA,UAC3B,GAAG;AAAA,UACH,WAAW,MAAM,SAAS,KAAK,SAAS;AAAA,QAC1C,EAAE;AACF,cAAM;AAAA,UACJ,GAAG,OAAO,cAAc,IAAI,CAAC,UAAU;AAAA,YACrC,GAAG;AAAA,YACH,MAAM,IAAI,OAAO,KAAK,IAAI;AAAA,YAC1B,WAAW,IAAI;AAAA,cACb,MAAM,KAAK,KAAK,UAAU,eAAe,CAAC;AAAA,YAC5C;AAAA,UACF,EAAE;AAAA,QACJ;AACA,cAAM,KAAK;AAAA,UACT,MAAM,IAAI,OAAO,OAAO,MAAM;AAAA,UAC9B,WAAW,IAAI,UAAU,MAAM,KAAK,MAAM,eAAe,CAAC,CAAC;AAAA,UAC3D,UAAU;AAAA,QACZ,CAAC;AACD,oBAAY,MAAM,SAAS,SAAS;AACpC,gBAAQ;AAAA,MACV;AACA,aAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA,YAAY,MAAM,6BAA6B;AAAA,QAC/C,QAAQ,MAAM;AAAA,MAChB;AAAA,IACF;AAAA,EACF;AACF;",
6
+ "names": []
7
+ }
@@ -1,4 +1,5 @@
1
- import type { SignalNode } from './graph.js';
1
+ import type { SignalDependencyRoleInput, SignalNode } from './graph.js';
2
+ export declare function signalDependencyRoleMask(role: SignalDependencyRoleInput | undefined): number;
2
3
  export interface ReactiveEdge {
3
4
  source: SignalNode<unknown> | undefined;
4
5
  consumer: SignalDependencyConsumer;
@@ -13,6 +14,8 @@ export interface ReactiveEdge {
13
14
  sourceLinked: boolean;
14
15
  collectionKind: 'new' | 'reused' | undefined;
15
16
  releaseObservation: (() => void) | undefined;
17
+ dependencyRoles: number;
18
+ collectedDependencyRoles: number;
16
19
  }
17
20
  export interface ReactiveNotificationCursor {
18
21
  next: ReactiveEdge | undefined;
@@ -27,13 +30,13 @@ export interface SignalDependencyConsumer {
27
30
  dependencyHighWater: number;
28
31
  collectionCursor: ReactiveEdge | undefined;
29
32
  collectionGeneration: number;
30
- addDependency(node: SignalNode<unknown>): void;
31
- notify(node: SignalNode<unknown>): void;
33
+ addDependency(node: SignalNode<unknown>, role?: SignalDependencyRoleInput): void;
34
+ notify(node: SignalNode<unknown>, dependencyRoles?: number): void;
32
35
  propagateInvalidation?: boolean;
33
36
  renderInvalidation?: boolean;
34
37
  }
35
38
  export declare function beginReactiveCollection(consumer: SignalDependencyConsumer): number;
36
- export declare function collectReactiveDependency(consumer: SignalDependencyConsumer, source: SignalNode<unknown>): ReactiveEdge;
39
+ export declare function collectReactiveDependency(consumer: SignalDependencyConsumer, source: SignalNode<unknown>, role?: SignalDependencyRoleInput): ReactiveEdge;
37
40
  export declare function finishReactiveCollection(consumer: SignalDependencyConsumer, publish: (edge: ReactiveEdge) => void, release: (edge: ReactiveEdge) => void): void;
38
41
  export declare function rollbackReactiveCollection(consumer: SignalDependencyConsumer): void;
39
42
  export declare function linkReactiveEdgeToSource(edge: ReactiveEdge, releaseObservation?: () => void): void;
@@ -1,14 +1,28 @@
1
+ const dependencyRoleMasks = {
2
+ structure: 1,
3
+ layout: 2,
4
+ measurement: 4,
5
+ paint: 8,
6
+ transform: 16,
7
+ interaction: 32,
8
+ unknown: 64
9
+ };
10
+ function signalDependencyRoleMask(role) {
11
+ return typeof role === "number" ? role : dependencyRoleMasks[role ?? "unknown"];
12
+ }
1
13
  function beginReactiveCollection(consumer) {
2
14
  consumer.collectionGeneration++;
3
15
  consumer.collectionCursor = consumer.dependencyHead;
4
16
  return consumer.collectionGeneration;
5
17
  }
6
- function collectReactiveDependency(consumer, source) {
18
+ function collectReactiveDependency(consumer, source, role) {
7
19
  const generation = consumer.collectionGeneration;
20
+ const roleMask = signalDependencyRoleMask(role);
8
21
  let edge = consumer.collectionCursor;
9
22
  if (edge?.source === source && edge.collectionGeneration !== generation) {
10
23
  edge.collectionGeneration = generation;
11
24
  edge.collectionKind = "reused";
25
+ edge.collectedDependencyRoles = roleMask;
12
26
  consumer.collectionCursor = edge.consumerNext;
13
27
  return edge;
14
28
  }
@@ -17,7 +31,10 @@ function collectReactiveDependency(consumer, source) {
17
31
  if (edge.collectionGeneration !== generation) {
18
32
  edge.collectionGeneration = generation;
19
33
  edge.collectionKind = "reused";
34
+ edge.collectedDependencyRoles = roleMask;
20
35
  consumer.collectionCursor = edge.consumerNext;
36
+ } else {
37
+ edge.collectedDependencyRoles |= roleMask;
21
38
  }
22
39
  return edge;
23
40
  }
@@ -25,6 +42,7 @@ function collectReactiveDependency(consumer, source) {
25
42
  edge.source = source;
26
43
  edge.collectionGeneration = generation;
27
44
  edge.collectionKind = edge.everPublished ? "reused" : "new";
45
+ edge.collectedDependencyRoles = roleMask;
28
46
  edge.observedVersion = source.version;
29
47
  linkReactiveEdgeToConsumer(edge);
30
48
  consumer.collectionCursor = edge.consumerNext;
@@ -35,6 +53,7 @@ function finishReactiveCollection(consumer, publish, release) {
35
53
  while (edge !== void 0) {
36
54
  const next = edge.consumerNext;
37
55
  if (edge.collectionGeneration === consumer.collectionGeneration) {
56
+ edge.dependencyRoles = edge.collectedDependencyRoles;
38
57
  publish(edge);
39
58
  } else {
40
59
  release(edge);
@@ -150,7 +169,7 @@ function notifyReactiveEdges(source, accepts = () => true) {
150
169
  if (!edge.sourceLinked || edge.source !== source) continue;
151
170
  if (!accepts(edge.consumer)) continue;
152
171
  try {
153
- edge.consumer.notify(source);
172
+ edge.consumer.notify(source, edge.dependencyRoles);
154
173
  } catch (error) {
155
174
  failures.push(error);
156
175
  }
@@ -182,7 +201,9 @@ function createReactiveEdge(consumer) {
182
201
  everPublished: false,
183
202
  sourceLinked: false,
184
203
  collectionKind: void 0,
185
- releaseObservation: void 0
204
+ releaseObservation: void 0,
205
+ dependencyRoles: signalDependencyRoleMask(void 0),
206
+ collectedDependencyRoles: 0
186
207
  };
187
208
  }
188
209
  function linkReactiveEdgeToConsumer(edge) {
@@ -239,6 +260,7 @@ export {
239
260
  linkReactiveEdgeToSource,
240
261
  notifyReactiveEdges,
241
262
  rollbackReactiveCollection,
263
+ signalDependencyRoleMask,
242
264
  unlinkReactiveEdgeFromConsumer,
243
265
  unlinkReactiveEdgeFromSource
244
266
  };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/lib/signals/edge.ts"],
4
- "sourcesContent": ["import type { SignalNode } from './graph.js';\n\nexport interface ReactiveEdge {\n source: SignalNode<unknown> | undefined;\n consumer: SignalDependencyConsumer;\n sourcePrevious: ReactiveEdge | undefined;\n sourceNext: ReactiveEdge | undefined;\n consumerPrevious: ReactiveEdge | undefined;\n consumerNext: ReactiveEdge | undefined;\n freeNext: ReactiveEdge | undefined;\n collectionGeneration: number;\n observedVersion: number;\n everPublished: boolean;\n sourceLinked: boolean;\n collectionKind: 'new' | 'reused' | undefined;\n releaseObservation: (() => void) | undefined;\n}\n\nexport interface ReactiveNotificationCursor {\n next: ReactiveEdge | undefined;\n previous: ReactiveNotificationCursor | undefined;\n}\n\nexport interface SignalDependencyConsumer {\n dependencyHead: ReactiveEdge | undefined;\n dependencyTail: ReactiveEdge | undefined;\n dependencyFreeHead: ReactiveEdge | undefined;\n dependencyFreeCount: number;\n dependencyCount: number;\n dependencyHighWater: number;\n collectionCursor: ReactiveEdge | undefined;\n collectionGeneration: number;\n addDependency(node: SignalNode<unknown>): void;\n notify(node: SignalNode<unknown>): void;\n propagateInvalidation?: boolean;\n renderInvalidation?: boolean;\n}\n\nexport function beginReactiveCollection(\n consumer: SignalDependencyConsumer,\n): number {\n consumer.collectionGeneration++;\n consumer.collectionCursor = consumer.dependencyHead;\n return consumer.collectionGeneration;\n}\n\nexport function collectReactiveDependency(\n consumer: SignalDependencyConsumer,\n source: SignalNode<unknown>,\n): ReactiveEdge {\n const generation = consumer.collectionGeneration;\n let edge = consumer.collectionCursor;\n if (\n edge?.source === source &&\n edge.collectionGeneration !== generation\n ) {\n edge.collectionGeneration = generation;\n edge.collectionKind = 'reused';\n consumer.collectionCursor = edge.consumerNext;\n return edge;\n }\n\n for (edge = consumer.dependencyHead; edge !== undefined; edge = edge.consumerNext) {\n if (edge.source !== source) continue;\n if (edge.collectionGeneration !== generation) {\n edge.collectionGeneration = generation;\n edge.collectionKind = 'reused';\n consumer.collectionCursor = edge.consumerNext;\n }\n return edge;\n }\n\n edge = takeFreeReactiveEdge(consumer) ?? createReactiveEdge(consumer);\n edge.source = source;\n edge.collectionGeneration = generation;\n edge.collectionKind = edge.everPublished ? 'reused' : 'new';\n edge.observedVersion = source.version;\n linkReactiveEdgeToConsumer(edge);\n consumer.collectionCursor = edge.consumerNext;\n return edge;\n}\n\nexport function finishReactiveCollection(\n consumer: SignalDependencyConsumer,\n publish: (edge: ReactiveEdge) => void,\n release: (edge: ReactiveEdge) => void,\n): void {\n let edge = consumer.dependencyHead;\n while (edge !== undefined) {\n const next = edge.consumerNext;\n if (edge.collectionGeneration === consumer.collectionGeneration) {\n publish(edge);\n } else {\n release(edge);\n unlinkReactiveEdgeFromConsumer(edge);\n poolReactiveEdge(consumer, edge);\n }\n edge = next;\n }\n consumer.dependencyHighWater = Math.max(\n consumer.dependencyHighWater,\n consumer.dependencyCount,\n );\n trimReactiveEdgePool(consumer);\n consumer.collectionCursor = undefined;\n}\n\nexport function rollbackReactiveCollection(\n consumer: SignalDependencyConsumer,\n): void {\n let edge = consumer.dependencyHead;\n while (edge !== undefined) {\n const next = edge.consumerNext;\n if (\n edge.collectionGeneration === consumer.collectionGeneration &&\n !edge.sourceLinked\n ) {\n unlinkReactiveEdgeFromConsumer(edge);\n poolReactiveEdge(consumer, edge);\n }\n edge = next;\n }\n trimReactiveEdgePool(consumer);\n consumer.collectionCursor = undefined;\n}\n\nexport function linkReactiveEdgeToSource(\n edge: ReactiveEdge,\n releaseObservation?: () => void,\n): void {\n if (edge.sourceLinked) return;\n const source = edge.source;\n if (source === undefined) {\n throw new Error('Cannot link a reactive edge without a source.');\n }\n edge.sourcePrevious = source.observerTail;\n edge.sourceNext = undefined;\n if (source.observerTail === undefined) {\n source.observerHead = edge;\n } else {\n source.observerTail.sourceNext = edge;\n }\n source.observerTail = edge;\n source.observerCount++;\n edge.sourceLinked = true;\n edge.releaseObservation = releaseObservation;\n}\n\nexport function unlinkReactiveEdgeFromSource(edge: ReactiveEdge): void {\n if (!edge.sourceLinked) return;\n const source = edge.source!;\n for (\n let cursor = source.activeObserverCursor;\n cursor !== undefined;\n cursor = cursor.previous\n ) {\n if (cursor.next === edge) cursor.next = edge.sourceNext;\n }\n if (edge.sourcePrevious === undefined) {\n source.observerHead = edge.sourceNext;\n } else {\n edge.sourcePrevious.sourceNext = edge.sourceNext;\n }\n if (edge.sourceNext === undefined) {\n source.observerTail = edge.sourcePrevious;\n } else {\n edge.sourceNext.sourcePrevious = edge.sourcePrevious;\n }\n source.observerCount--;\n edge.sourceLinked = false;\n edge.sourcePrevious = undefined;\n edge.sourceNext = undefined;\n const releaseObservation = edge.releaseObservation;\n edge.releaseObservation = undefined;\n releaseObservation?.();\n}\n\nexport function unlinkReactiveEdgeFromConsumer(edge: ReactiveEdge): void {\n const consumer = edge.consumer;\n if (edge.consumerPrevious === undefined) {\n if (consumer.dependencyHead !== edge) return;\n consumer.dependencyHead = edge.consumerNext;\n } else {\n edge.consumerPrevious.consumerNext = edge.consumerNext;\n }\n if (edge.consumerNext === undefined) {\n consumer.dependencyTail = edge.consumerPrevious;\n } else {\n edge.consumerNext.consumerPrevious = edge.consumerPrevious;\n }\n consumer.dependencyCount--;\n edge.consumerPrevious = undefined;\n edge.consumerNext = undefined;\n}\n\nexport function disposeReactiveConsumer(\n consumer: SignalDependencyConsumer,\n release: (edge: ReactiveEdge) => void,\n): void {\n let edge = consumer.dependencyHead;\n while (edge !== undefined) {\n const next = edge.consumerNext;\n release(edge);\n unlinkReactiveEdgeFromConsumer(edge);\n edge.source = undefined;\n edge.freeNext = undefined;\n edge = next;\n }\n consumer.dependencyFreeHead = undefined;\n consumer.dependencyFreeCount = 0;\n consumer.collectionCursor = undefined;\n}\n\nexport function notifyReactiveEdges(\n source: SignalNode<unknown>,\n accepts: (consumer: SignalDependencyConsumer) => boolean = () => true,\n): unknown[] {\n const failures: unknown[] = [];\n const cursor: ReactiveNotificationCursor = {\n next: source.observerHead,\n previous: source.activeObserverCursor,\n };\n source.activeObserverCursor = cursor;\n try {\n while (cursor.next !== undefined) {\n const edge = cursor.next;\n cursor.next = edge.sourceNext;\n if (!edge.sourceLinked || edge.source !== source) continue;\n if (!accepts(edge.consumer)) continue;\n try {\n edge.consumer.notify(source);\n } catch (error) {\n failures.push(error);\n }\n }\n } finally {\n source.activeObserverCursor = cursor.previous;\n }\n return failures;\n}\n\nexport function createDetachedReactiveEdge(\n consumer: SignalDependencyConsumer,\n source: SignalNode<unknown>,\n): ReactiveEdge {\n const edge = createReactiveEdge(consumer);\n edge.source = source;\n edge.collectionGeneration = consumer.collectionGeneration;\n edge.observedVersion = source.version;\n linkReactiveEdgeToConsumer(edge);\n return edge;\n}\n\nfunction createReactiveEdge(\n consumer: SignalDependencyConsumer,\n): ReactiveEdge {\n return {\n source: undefined,\n consumer,\n sourcePrevious: undefined,\n sourceNext: undefined,\n consumerPrevious: undefined,\n consumerNext: undefined,\n freeNext: undefined,\n collectionGeneration: 0,\n observedVersion: -1,\n everPublished: false,\n sourceLinked: false,\n collectionKind: undefined,\n releaseObservation: undefined,\n };\n}\n\nfunction linkReactiveEdgeToConsumer(edge: ReactiveEdge): void {\n const consumer = edge.consumer;\n edge.consumerPrevious = consumer.dependencyTail;\n edge.consumerNext = undefined;\n if (consumer.dependencyTail === undefined) {\n consumer.dependencyHead = edge;\n } else {\n consumer.dependencyTail.consumerNext = edge;\n }\n consumer.dependencyTail = edge;\n consumer.dependencyCount++;\n}\n\nfunction takeFreeReactiveEdge(\n consumer: SignalDependencyConsumer,\n): ReactiveEdge | undefined {\n const edge = consumer.dependencyFreeHead;\n if (edge === undefined) return undefined;\n consumer.dependencyFreeHead = edge.freeNext;\n consumer.dependencyFreeCount--;\n edge.freeNext = undefined;\n return edge;\n}\n\nfunction poolReactiveEdge(\n consumer: SignalDependencyConsumer,\n edge: ReactiveEdge,\n): void {\n edge.source = undefined;\n edge.collectionKind = undefined;\n edge.observedVersion = Math.max(edge.observedVersion, 0);\n edge.freeNext = consumer.dependencyFreeHead;\n consumer.dependencyFreeHead = edge;\n consumer.dependencyFreeCount++;\n}\n\nfunction trimReactiveEdgePool(consumer: SignalDependencyConsumer): void {\n if (consumer.dependencyFreeCount <= consumer.dependencyHighWater) return;\n let retained = 0;\n let edge = consumer.dependencyFreeHead;\n let previous: ReactiveEdge | undefined;\n while (edge !== undefined) {\n retained++;\n if (retained > consumer.dependencyHighWater) {\n if (previous === undefined) consumer.dependencyFreeHead = undefined;\n else previous.freeNext = undefined;\n consumer.dependencyFreeCount = consumer.dependencyHighWater;\n return;\n }\n previous = edge;\n edge = edge.freeNext;\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import type { SignalDependencyRole, SignalDependencyRoleInput, SignalNode } from './graph.js';\n\nconst dependencyRoleMasks: Record<SignalDependencyRole, number> = {\n structure: 1,\n layout: 2,\n measurement: 4,\n paint: 8,\n transform: 16,\n interaction: 32,\n unknown: 64,\n};\n\nexport function signalDependencyRoleMask(role: SignalDependencyRoleInput | undefined): number {\n return typeof role === 'number' ? role : dependencyRoleMasks[role ?? 'unknown'];\n}\n\nexport interface ReactiveEdge {\n source: SignalNode<unknown> | undefined;\n consumer: SignalDependencyConsumer;\n sourcePrevious: ReactiveEdge | undefined;\n sourceNext: ReactiveEdge | undefined;\n consumerPrevious: ReactiveEdge | undefined;\n consumerNext: ReactiveEdge | undefined;\n freeNext: ReactiveEdge | undefined;\n collectionGeneration: number;\n observedVersion: number;\n everPublished: boolean;\n sourceLinked: boolean;\n collectionKind: 'new' | 'reused' | undefined;\n releaseObservation: (() => void) | undefined;\n dependencyRoles: number;\n collectedDependencyRoles: number;\n}\n\nexport interface ReactiveNotificationCursor {\n next: ReactiveEdge | undefined;\n previous: ReactiveNotificationCursor | undefined;\n}\n\nexport interface SignalDependencyConsumer {\n dependencyHead: ReactiveEdge | undefined;\n dependencyTail: ReactiveEdge | undefined;\n dependencyFreeHead: ReactiveEdge | undefined;\n dependencyFreeCount: number;\n dependencyCount: number;\n dependencyHighWater: number;\n collectionCursor: ReactiveEdge | undefined;\n collectionGeneration: number;\n addDependency(node: SignalNode<unknown>, role?: SignalDependencyRoleInput): void;\n notify(node: SignalNode<unknown>, dependencyRoles?: number): void;\n propagateInvalidation?: boolean;\n renderInvalidation?: boolean;\n}\n\nexport function beginReactiveCollection(\n consumer: SignalDependencyConsumer,\n): number {\n consumer.collectionGeneration++;\n consumer.collectionCursor = consumer.dependencyHead;\n return consumer.collectionGeneration;\n}\n\nexport function collectReactiveDependency(\n consumer: SignalDependencyConsumer,\n source: SignalNode<unknown>,\n role?: SignalDependencyRoleInput,\n): ReactiveEdge {\n const generation = consumer.collectionGeneration;\n const roleMask = signalDependencyRoleMask(role);\n let edge = consumer.collectionCursor;\n if (\n edge?.source === source &&\n edge.collectionGeneration !== generation\n ) {\n edge.collectionGeneration = generation;\n edge.collectionKind = 'reused';\n edge.collectedDependencyRoles = roleMask;\n consumer.collectionCursor = edge.consumerNext;\n return edge;\n }\n\n for (edge = consumer.dependencyHead; edge !== undefined; edge = edge.consumerNext) {\n if (edge.source !== source) continue;\n if (edge.collectionGeneration !== generation) {\n edge.collectionGeneration = generation;\n edge.collectionKind = 'reused';\n edge.collectedDependencyRoles = roleMask;\n consumer.collectionCursor = edge.consumerNext;\n } else {\n edge.collectedDependencyRoles |= roleMask;\n }\n return edge;\n }\n\n edge = takeFreeReactiveEdge(consumer) ?? createReactiveEdge(consumer);\n edge.source = source;\n edge.collectionGeneration = generation;\n edge.collectionKind = edge.everPublished ? 'reused' : 'new';\n edge.collectedDependencyRoles = roleMask;\n edge.observedVersion = source.version;\n linkReactiveEdgeToConsumer(edge);\n consumer.collectionCursor = edge.consumerNext;\n return edge;\n}\n\nexport function finishReactiveCollection(\n consumer: SignalDependencyConsumer,\n publish: (edge: ReactiveEdge) => void,\n release: (edge: ReactiveEdge) => void,\n): void {\n let edge = consumer.dependencyHead;\n while (edge !== undefined) {\n const next = edge.consumerNext;\n if (edge.collectionGeneration === consumer.collectionGeneration) {\n edge.dependencyRoles = edge.collectedDependencyRoles;\n publish(edge);\n } else {\n release(edge);\n unlinkReactiveEdgeFromConsumer(edge);\n poolReactiveEdge(consumer, edge);\n }\n edge = next;\n }\n consumer.dependencyHighWater = Math.max(\n consumer.dependencyHighWater,\n consumer.dependencyCount,\n );\n trimReactiveEdgePool(consumer);\n consumer.collectionCursor = undefined;\n}\n\nexport function rollbackReactiveCollection(\n consumer: SignalDependencyConsumer,\n): void {\n let edge = consumer.dependencyHead;\n while (edge !== undefined) {\n const next = edge.consumerNext;\n if (\n edge.collectionGeneration === consumer.collectionGeneration &&\n !edge.sourceLinked\n ) {\n unlinkReactiveEdgeFromConsumer(edge);\n poolReactiveEdge(consumer, edge);\n }\n edge = next;\n }\n trimReactiveEdgePool(consumer);\n consumer.collectionCursor = undefined;\n}\n\nexport function linkReactiveEdgeToSource(\n edge: ReactiveEdge,\n releaseObservation?: () => void,\n): void {\n if (edge.sourceLinked) return;\n const source = edge.source;\n if (source === undefined) {\n throw new Error('Cannot link a reactive edge without a source.');\n }\n edge.sourcePrevious = source.observerTail;\n edge.sourceNext = undefined;\n if (source.observerTail === undefined) {\n source.observerHead = edge;\n } else {\n source.observerTail.sourceNext = edge;\n }\n source.observerTail = edge;\n source.observerCount++;\n edge.sourceLinked = true;\n edge.releaseObservation = releaseObservation;\n}\n\nexport function unlinkReactiveEdgeFromSource(edge: ReactiveEdge): void {\n if (!edge.sourceLinked) return;\n const source = edge.source!;\n for (\n let cursor = source.activeObserverCursor;\n cursor !== undefined;\n cursor = cursor.previous\n ) {\n if (cursor.next === edge) cursor.next = edge.sourceNext;\n }\n if (edge.sourcePrevious === undefined) {\n source.observerHead = edge.sourceNext;\n } else {\n edge.sourcePrevious.sourceNext = edge.sourceNext;\n }\n if (edge.sourceNext === undefined) {\n source.observerTail = edge.sourcePrevious;\n } else {\n edge.sourceNext.sourcePrevious = edge.sourcePrevious;\n }\n source.observerCount--;\n edge.sourceLinked = false;\n edge.sourcePrevious = undefined;\n edge.sourceNext = undefined;\n const releaseObservation = edge.releaseObservation;\n edge.releaseObservation = undefined;\n releaseObservation?.();\n}\n\nexport function unlinkReactiveEdgeFromConsumer(edge: ReactiveEdge): void {\n const consumer = edge.consumer;\n if (edge.consumerPrevious === undefined) {\n if (consumer.dependencyHead !== edge) return;\n consumer.dependencyHead = edge.consumerNext;\n } else {\n edge.consumerPrevious.consumerNext = edge.consumerNext;\n }\n if (edge.consumerNext === undefined) {\n consumer.dependencyTail = edge.consumerPrevious;\n } else {\n edge.consumerNext.consumerPrevious = edge.consumerPrevious;\n }\n consumer.dependencyCount--;\n edge.consumerPrevious = undefined;\n edge.consumerNext = undefined;\n}\n\nexport function disposeReactiveConsumer(\n consumer: SignalDependencyConsumer,\n release: (edge: ReactiveEdge) => void,\n): void {\n let edge = consumer.dependencyHead;\n while (edge !== undefined) {\n const next = edge.consumerNext;\n release(edge);\n unlinkReactiveEdgeFromConsumer(edge);\n edge.source = undefined;\n edge.freeNext = undefined;\n edge = next;\n }\n consumer.dependencyFreeHead = undefined;\n consumer.dependencyFreeCount = 0;\n consumer.collectionCursor = undefined;\n}\n\nexport function notifyReactiveEdges(\n source: SignalNode<unknown>,\n accepts: (consumer: SignalDependencyConsumer) => boolean = () => true,\n): unknown[] {\n const failures: unknown[] = [];\n const cursor: ReactiveNotificationCursor = {\n next: source.observerHead,\n previous: source.activeObserverCursor,\n };\n source.activeObserverCursor = cursor;\n try {\n while (cursor.next !== undefined) {\n const edge = cursor.next;\n cursor.next = edge.sourceNext;\n if (!edge.sourceLinked || edge.source !== source) continue;\n if (!accepts(edge.consumer)) continue;\n try {\n edge.consumer.notify(source, edge.dependencyRoles);\n } catch (error) {\n failures.push(error);\n }\n }\n } finally {\n source.activeObserverCursor = cursor.previous;\n }\n return failures;\n}\n\nexport function createDetachedReactiveEdge(\n consumer: SignalDependencyConsumer,\n source: SignalNode<unknown>,\n): ReactiveEdge {\n const edge = createReactiveEdge(consumer);\n edge.source = source;\n edge.collectionGeneration = consumer.collectionGeneration;\n edge.observedVersion = source.version;\n linkReactiveEdgeToConsumer(edge);\n return edge;\n}\n\nfunction createReactiveEdge(\n consumer: SignalDependencyConsumer,\n): ReactiveEdge {\n return {\n source: undefined,\n consumer,\n sourcePrevious: undefined,\n sourceNext: undefined,\n consumerPrevious: undefined,\n consumerNext: undefined,\n freeNext: undefined,\n collectionGeneration: 0,\n observedVersion: -1,\n everPublished: false,\n sourceLinked: false,\n collectionKind: undefined,\n releaseObservation: undefined,\n dependencyRoles: signalDependencyRoleMask(undefined),\n collectedDependencyRoles: 0,\n };\n}\n\nfunction linkReactiveEdgeToConsumer(edge: ReactiveEdge): void {\n const consumer = edge.consumer;\n edge.consumerPrevious = consumer.dependencyTail;\n edge.consumerNext = undefined;\n if (consumer.dependencyTail === undefined) {\n consumer.dependencyHead = edge;\n } else {\n consumer.dependencyTail.consumerNext = edge;\n }\n consumer.dependencyTail = edge;\n consumer.dependencyCount++;\n}\n\nfunction takeFreeReactiveEdge(\n consumer: SignalDependencyConsumer,\n): ReactiveEdge | undefined {\n const edge = consumer.dependencyFreeHead;\n if (edge === undefined) return undefined;\n consumer.dependencyFreeHead = edge.freeNext;\n consumer.dependencyFreeCount--;\n edge.freeNext = undefined;\n return edge;\n}\n\nfunction poolReactiveEdge(\n consumer: SignalDependencyConsumer,\n edge: ReactiveEdge,\n): void {\n edge.source = undefined;\n edge.collectionKind = undefined;\n edge.observedVersion = Math.max(edge.observedVersion, 0);\n edge.freeNext = consumer.dependencyFreeHead;\n consumer.dependencyFreeHead = edge;\n consumer.dependencyFreeCount++;\n}\n\nfunction trimReactiveEdgePool(consumer: SignalDependencyConsumer): void {\n if (consumer.dependencyFreeCount <= consumer.dependencyHighWater) return;\n let retained = 0;\n let edge = consumer.dependencyFreeHead;\n let previous: ReactiveEdge | undefined;\n while (edge !== undefined) {\n retained++;\n if (retained > consumer.dependencyHighWater) {\n if (previous === undefined) consumer.dependencyFreeHead = undefined;\n else previous.freeNext = undefined;\n consumer.dependencyFreeCount = consumer.dependencyHighWater;\n return;\n }\n previous = edge;\n edge = edge.freeNext;\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -21,8 +21,11 @@ export interface SignalNode<T> {
21
21
  observe?(): () => void;
22
22
  validate?(): void;
23
23
  }
24
+ /** @internal The declared effect of one receiver-owned signal input. */
25
+ export type SignalDependencyRole = 'structure' | 'layout' | 'measurement' | 'paint' | 'transform' | 'interaction' | 'unknown';
26
+ export type SignalDependencyRoleInput = SignalDependencyRole | number;
24
27
  export interface SignalDependencyCollector {
25
- addDependency(node: SignalNode<unknown>): void;
28
+ addDependency(node: SignalNode<unknown>, role?: SignalDependencyRoleInput): void;
26
29
  }
27
30
  export type SignalWriteOperation = 'direct' | 'staged';
28
31
  export type SignalWritePolicy = (node: SignalNode<unknown>, operation: SignalWriteOperation) => void;
@@ -54,6 +57,13 @@ export interface SignalGraphSnapshot {
54
57
  readonly adoptedReceiverInputProvisions: number;
55
58
  readonly rolledBackReceiverInputProvisions: number;
56
59
  readonly batchedObserverInvalidations: number;
60
+ readonly structureInputInvalidations: number;
61
+ readonly layoutInputInvalidations: number;
62
+ readonly measurementInputInvalidations: number;
63
+ readonly paintInputInvalidations: number;
64
+ readonly transformInputInvalidations: number;
65
+ readonly interactionInputInvalidations: number;
66
+ readonly unknownInputInvalidations: number;
57
67
  readonly reactionConsumers: number;
58
68
  readonly reactionEdges: number;
59
69
  readonly reactionRuns: number;
@@ -62,6 +72,8 @@ export interface SignalGraphSnapshot {
62
72
  }
63
73
  /** @internal Deterministic ownership and structural evidence for tests. */
64
74
  export declare function signalGraphSnapshot(): SignalGraphSnapshot;
75
+ /** @internal Records roles carried by a receiver edge when its source changes. */
76
+ export declare function recordSignalInputInvalidation(roles: number): void;
65
77
  /** @internal Records one component consumer materialized by its first read. */
66
78
  export declare function recordLazyRendererConsumerCreated(): void;
67
79
  /** @internal Records one render edge reused by recollection or restoration. */
@@ -79,7 +91,9 @@ export declare function recordReceiverInputProvisionAdopted(): void;
79
91
  /** @internal Records one provision discarded without publication. */
80
92
  export declare function recordReceiverInputProvisionRolledBack(): void;
81
93
  /** @internal Adds one already-read source to the active dependency collector. */
82
- export declare function trackSignalDependency(node: SignalNode<unknown>): void;
94
+ export declare function trackSignalDependency(node: SignalNode<unknown>, role?: SignalDependencyRoleInput): void;
95
+ /** @internal Tags reads while a declared receiver input is resolved. */
96
+ export declare function withSignalDependencyRole<T>(role: SignalDependencyRole, callback: () => T): T;
83
97
  /** @internal Records one observer invalidation deduplicated by a public batch. */
84
98
  export declare function recordBatchedObserverInvalidation(): void;
85
99
  /** @internal Records one live component-owned reaction consumer. */
@@ -9,6 +9,7 @@ import {
9
9
  const signalNodes = /* @__PURE__ */ new WeakMap();
10
10
  const signalValues = /* @__PURE__ */ new WeakSet();
11
11
  let activeSignalDependencyCollector;
12
+ let activeSignalDependencyRole;
12
13
  const writePolicyStack = [];
13
14
  const computedStack = [];
14
15
  function createSignalNodeState(value, equals, debugName) {
@@ -51,6 +52,13 @@ let receiverInputProvisions = 0;
51
52
  let adoptedReceiverInputProvisions = 0;
52
53
  let rolledBackReceiverInputProvisions = 0;
53
54
  let batchedObserverInvalidations = 0;
55
+ let structureInputInvalidations = 0;
56
+ let layoutInputInvalidations = 0;
57
+ let measurementInputInvalidations = 0;
58
+ let paintInputInvalidations = 0;
59
+ let transformInputInvalidations = 0;
60
+ let interactionInputInvalidations = 0;
61
+ let unknownInputInvalidations = 0;
54
62
  let reactionConsumers = 0;
55
63
  let reactionEdges = 0;
56
64
  let reactionRuns = 0;
@@ -82,6 +90,13 @@ function signalGraphSnapshot() {
82
90
  adoptedReceiverInputProvisions,
83
91
  rolledBackReceiverInputProvisions,
84
92
  batchedObserverInvalidations,
93
+ structureInputInvalidations,
94
+ layoutInputInvalidations,
95
+ measurementInputInvalidations,
96
+ paintInputInvalidations,
97
+ transformInputInvalidations,
98
+ interactionInputInvalidations,
99
+ unknownInputInvalidations,
85
100
  reactionConsumers,
86
101
  reactionEdges,
87
102
  reactionRuns,
@@ -89,6 +104,15 @@ function signalGraphSnapshot() {
89
104
  reactionFailures
90
105
  });
91
106
  }
107
+ function recordSignalInputInvalidation(roles) {
108
+ if (roles & 1) structureInputInvalidations++;
109
+ if (roles & 2) layoutInputInvalidations++;
110
+ if (roles & 4) measurementInputInvalidations++;
111
+ if (roles & 8) paintInputInvalidations++;
112
+ if (roles & 16) transformInputInvalidations++;
113
+ if (roles & 32) interactionInputInvalidations++;
114
+ if (roles & 64) unknownInputInvalidations++;
115
+ }
92
116
  function recordLazyRendererConsumerCreated() {
93
117
  lazyRendererConsumers++;
94
118
  }
@@ -116,8 +140,20 @@ function recordReceiverInputProvisionRolledBack() {
116
140
  receiverInputProvisions--;
117
141
  rolledBackReceiverInputProvisions++;
118
142
  }
119
- function trackSignalDependency(node) {
120
- activeSignalDependencyCollector?.addDependency(node);
143
+ function trackSignalDependency(node, role) {
144
+ activeSignalDependencyCollector?.addDependency(
145
+ node,
146
+ role ?? activeSignalDependencyRole
147
+ );
148
+ }
149
+ function withSignalDependencyRole(role, callback) {
150
+ const previous = activeSignalDependencyRole;
151
+ activeSignalDependencyRole = role;
152
+ try {
153
+ return callback();
154
+ } finally {
155
+ activeSignalDependencyRole = previous;
156
+ }
121
157
  }
122
158
  function recordBatchedObserverInvalidation() {
123
159
  batchedObserverInvalidations++;
@@ -206,8 +242,7 @@ function flushPublicSignalBatch(state) {
206
242
  state.failures.push(error);
207
243
  }
208
244
  }
209
- const seen = /* @__PURE__ */ new Set();
210
- const consumers = [];
245
+ const consumers = /* @__PURE__ */ new Map();
211
246
  for (const [source, entry] of state.entries) {
212
247
  let unchanged = false;
213
248
  try {
@@ -220,18 +255,19 @@ function flushPublicSignalBatch(state) {
220
255
  for (let edge = source.observerHead; edge !== void 0; edge = edge.sourceNext) {
221
256
  const consumer = edge.consumer;
222
257
  if (consumer.propagateInvalidation === true) continue;
223
- if (seen.has(consumer)) {
258
+ const existing = consumers.get(consumer);
259
+ if (existing !== void 0) {
260
+ existing.roles |= edge.dependencyRoles;
224
261
  recordBatchedObserverInvalidation();
225
262
  continue;
226
263
  }
227
- seen.add(consumer);
228
- consumers.push({ consumer, source });
264
+ consumers.set(consumer, { consumer, source, roles: edge.dependencyRoles });
229
265
  }
230
266
  }
231
267
  activePublicSignalBatch = void 0;
232
- for (const { consumer, source } of consumers) {
268
+ for (const { consumer, source, roles } of consumers.values()) {
233
269
  try {
234
- consumer.notify(source);
270
+ consumer.notify(source, roles);
235
271
  } catch (error) {
236
272
  state.failures.push(error);
237
273
  }
@@ -280,7 +316,10 @@ function signal(initialValue, options = {}) {
280
316
  const node = createSignalNodeState(initialValue, equals, debugName);
281
317
  let readonlySignal;
282
318
  const read = () => {
283
- activeSignalDependencyCollector?.addDependency(node);
319
+ activeSignalDependencyCollector?.addDependency(
320
+ node,
321
+ activeSignalDependencyRole
322
+ );
284
323
  return node.value;
285
324
  };
286
325
  const assertWriteAllowed = () => {
@@ -624,7 +663,8 @@ function computed(compute, options = {}) {
624
663
  const readonly = {
625
664
  get() {
626
665
  activeSignalDependencyCollector?.addDependency(
627
- node
666
+ node,
667
+ activeSignalDependencyRole
628
668
  );
629
669
  validate();
630
670
  removePendingValidation();
@@ -661,7 +701,7 @@ function createComputedFormulaCandidate(target, compute) {
661
701
  function readComputedFormulaCandidate(target, candidate) {
662
702
  const node = requireComputedSignalNode(target);
663
703
  const reader = activeSignalDependencyCollector;
664
- reader?.addDependency(node);
704
+ reader?.addDependency(node, activeSignalDependencyRole);
665
705
  if (reader !== void 0) candidate.readers.add(reader);
666
706
  if (!candidate.evaluated) {
667
707
  const value = untracked(() => candidate.signal.get());
@@ -1019,6 +1059,7 @@ export {
1019
1059
  recordRendererEdgeReleased,
1020
1060
  recordRendererEdgeReused,
1021
1061
  recordShallowInputCopy,
1062
+ recordSignalInputInvalidation,
1022
1063
  recordSignalInputResolution,
1023
1064
  replaceComputedFormula,
1024
1065
  setSignalGraphPlanWorkNotifier,
@@ -1028,6 +1069,7 @@ export {
1028
1069
  trackSignalDependency,
1029
1070
  untracked,
1030
1071
  withDirectSignalWriteForbidden,
1072
+ withSignalDependencyRole,
1031
1073
  withSignalTracking,
1032
1074
  withSignalWriteForbidden,
1033
1075
  withSignalWritePolicy