@pibbl/core 0.0.2 → 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 (549) hide show
  1. package/THIRD_PARTY_NOTICES.txt +81 -0
  2. package/dist/features/physics/2d-testing.d.ts +1 -1
  3. package/dist/features/physics/2d-testing.js +2 -2
  4. package/dist/features/physics/2d-testing.js.map +2 -2
  5. package/dist/features/physics/lib/2d/canvas/components.js +25 -21
  6. package/dist/features/physics/lib/2d/canvas/components.js.map +2 -2
  7. package/dist/features/physics/lib/2d/canvas/presentation.js +1 -2
  8. package/dist/features/physics/lib/2d/canvas/presentation.js.map +2 -2
  9. package/dist/features/physics/lib/2d/collision/casts.js +4 -2
  10. package/dist/features/physics/lib/2d/collision/casts.js.map +2 -2
  11. package/dist/features/physics/lib/2d/runtime/controller.js +1 -1
  12. package/dist/features/physics/lib/2d/runtime/controller.js.map +2 -2
  13. package/dist/features/physics/lib/2d/runtime/obstacles.js +9 -11
  14. package/dist/features/physics/lib/2d/runtime/obstacles.js.map +2 -2
  15. package/dist/features/physics/lib/2d/shapes.js +8 -9
  16. package/dist/features/physics/lib/2d/shapes.js.map +2 -2
  17. package/dist/features/physics/lib/2d/world/rapier.js +22 -26
  18. package/dist/features/physics/lib/2d/world/rapier.js.map +2 -2
  19. package/dist/features/sprites/loader.js +6 -3
  20. package/dist/features/sprites/loader.js.map +2 -2
  21. package/dist/features/textures/index.d.ts +12 -2
  22. package/dist/features/textures/index.js +33 -1
  23. package/dist/features/textures/index.js.map +2 -2
  24. package/dist/features/textures/lib/chemical-field.d.ts +56 -0
  25. package/dist/features/textures/lib/chemical-field.js +154 -0
  26. package/dist/features/textures/lib/chemical-field.js.map +7 -0
  27. package/dist/features/textures/lib/chemical-recipes.d.ts +119 -0
  28. package/dist/features/textures/lib/chemical-recipes.js +275 -0
  29. package/dist/features/textures/lib/chemical-recipes.js.map +7 -0
  30. package/dist/features/textures/lib/definitions.d.ts +3 -18
  31. package/dist/features/textures/lib/definitions.js +17 -24
  32. package/dist/features/textures/lib/definitions.js.map +2 -2
  33. package/dist/features/textures/lib/geometric-patterns.d.ts +149 -0
  34. package/dist/features/textures/lib/geometric-patterns.js +305 -0
  35. package/dist/features/textures/lib/geometric-patterns.js.map +7 -0
  36. package/dist/features/textures/lib/gray-scott.d.ts +55 -0
  37. package/dist/features/textures/lib/gray-scott.js +37 -0
  38. package/dist/features/textures/lib/gray-scott.js.map +7 -0
  39. package/dist/features/textures/lib/palette.js +1 -3
  40. package/dist/features/textures/lib/palette.js.map +2 -2
  41. package/dist/features/textures/lib/patterns.d.ts +123 -0
  42. package/dist/features/textures/lib/patterns.js +344 -0
  43. package/dist/features/textures/lib/patterns.js.map +7 -0
  44. package/dist/features/textures/lib/rain-drops.js +2 -1
  45. package/dist/features/textures/lib/rain-drops.js.map +2 -2
  46. package/dist/features/textures/lib/reaction-diffusion.d.ts +3 -2
  47. package/dist/features/textures/lib/reaction-diffusion.js +9 -20
  48. package/dist/features/textures/lib/reaction-diffusion.js.map +2 -2
  49. package/dist/features/textures/lib/simulation.d.ts +10 -4
  50. package/dist/features/textures/lib/simulation.js +23 -13
  51. package/dist/features/textures/lib/simulation.js.map +2 -2
  52. package/dist/features/textures/lib/wasm/electric.js +8 -1
  53. package/dist/features/textures/lib/wasm/electric.js.map +2 -2
  54. package/dist/features/textures/lib/water-surface.js +1 -3
  55. package/dist/features/textures/lib/water-surface.js.map +2 -2
  56. package/dist/features/viz/index.d.ts +68 -6
  57. package/dist/features/viz/index.js +164 -2
  58. package/dist/features/viz/index.js.map +2 -2
  59. package/dist/features/viz/inspection/bar.d.ts +79 -0
  60. package/dist/features/viz/inspection/bar.js +49 -0
  61. package/dist/features/viz/inspection/bar.js.map +7 -0
  62. package/dist/features/viz/inspection/candle.d.ts +156 -0
  63. package/dist/features/viz/inspection/candle.js +120 -0
  64. package/dist/features/viz/inspection/candle.js.map +7 -0
  65. package/dist/features/viz/inspection/capture-types.d.ts +65 -0
  66. package/dist/features/viz/inspection/capture.d.ts +16 -0
  67. package/dist/features/viz/inspection/capture.js +49 -0
  68. package/dist/features/viz/inspection/capture.js.map +7 -0
  69. package/dist/features/viz/inspection/handler.d.ts +36 -0
  70. package/dist/features/viz/inspection/handler.js +91 -0
  71. package/dist/features/viz/inspection/handler.js.map +7 -0
  72. package/dist/features/viz/inspection/ohlc-bar.d.ts +132 -0
  73. package/dist/features/viz/inspection/ohlc-bar.js +118 -0
  74. package/dist/features/viz/inspection/ohlc-bar.js.map +7 -0
  75. package/dist/features/viz/inspection/owned-ref.d.ts +16 -0
  76. package/dist/features/viz/inspection/owned-ref.js +99 -0
  77. package/dist/features/viz/inspection/owned-ref.js.map +7 -0
  78. package/dist/features/viz/inspection/painted-point.d.ts +22 -0
  79. package/dist/features/viz/inspection/painted-point.js +29 -0
  80. package/dist/features/viz/inspection/painted-point.js.map +7 -0
  81. package/dist/features/viz/inspection/queries.d.ts +100 -0
  82. package/dist/features/viz/inspection/queries.js +192 -0
  83. package/dist/features/viz/inspection/queries.js.map +7 -0
  84. package/dist/features/viz/inspection/query-types.d.ts +177 -0
  85. package/dist/features/viz/inspection/volume.d.ts +104 -0
  86. package/dist/features/viz/inspection/volume.js +95 -0
  87. package/dist/features/viz/inspection/volume.js.map +7 -0
  88. package/dist/features/viz/inspection.d.ts +19 -0
  89. package/dist/features/viz/inspection.js +54 -0
  90. package/dist/features/viz/inspection.js.map +7 -0
  91. package/dist/features/viz/inspection.mjs +1 -0
  92. package/dist/features/viz/lib/area-series.d.ts +62 -0
  93. package/dist/features/viz/lib/area-series.js +120 -0
  94. package/dist/features/viz/lib/area-series.js.map +7 -0
  95. package/dist/features/viz/lib/axis-title.js +2 -1
  96. package/dist/features/viz/lib/axis-title.js.map +2 -2
  97. package/dist/features/viz/lib/axis.js +1 -1
  98. package/dist/features/viz/lib/axis.js.map +2 -2
  99. package/dist/features/viz/lib/bar-series.d.ts +3 -1
  100. package/dist/features/viz/lib/bar-series.js +16 -1
  101. package/dist/features/viz/lib/bar-series.js.map +2 -2
  102. package/dist/features/viz/lib/baseline-series.d.ts +55 -0
  103. package/dist/features/viz/lib/baseline-series.js +136 -0
  104. package/dist/features/viz/lib/baseline-series.js.map +7 -0
  105. package/dist/features/viz/lib/candlestick-series.d.ts +62 -0
  106. package/dist/features/viz/lib/candlestick-series.js +150 -0
  107. package/dist/features/viz/lib/candlestick-series.js.map +7 -0
  108. package/dist/features/viz/lib/censored-point-series.d.ts +71 -0
  109. package/dist/features/viz/lib/censored-point-series.js +129 -0
  110. package/dist/features/viz/lib/censored-point-series.js.map +7 -0
  111. package/dist/features/viz/lib/color-context.d.ts +4 -0
  112. package/dist/features/viz/lib/color-context.js +41 -0
  113. package/dist/features/viz/lib/color-context.js.map +7 -0
  114. package/dist/features/viz/lib/color-math.d.ts +4 -0
  115. package/dist/features/viz/lib/color-math.js +31 -0
  116. package/dist/features/viz/lib/color-math.js.map +7 -0
  117. package/dist/features/viz/lib/color-types.d.ts +53 -0
  118. package/dist/features/viz/lib/curve-definition.d.ts +49 -0
  119. package/dist/features/viz/lib/curve-definition.js +142 -0
  120. package/dist/features/viz/lib/curve-definition.js.map +7 -0
  121. package/dist/features/viz/lib/diverging-color-scale.d.ts +11 -0
  122. package/dist/features/viz/lib/diverging-color-scale.js +51 -0
  123. package/dist/features/viz/lib/diverging-color-scale.js.map +7 -0
  124. package/dist/features/viz/lib/domain-navigation.d.ts +40 -0
  125. package/dist/features/viz/lib/domain-navigation.js +77 -0
  126. package/dist/features/viz/lib/domain-navigation.js.map +7 -0
  127. package/dist/features/viz/lib/editable-chart-elements.d.ts +178 -0
  128. package/dist/features/viz/lib/editable-chart-elements.js +733 -0
  129. package/dist/features/viz/lib/editable-chart-elements.js.map +7 -0
  130. package/dist/features/viz/lib/financial-aggregation.d.ts +127 -0
  131. package/dist/features/viz/lib/financial-aggregation.js +116 -0
  132. package/dist/features/viz/lib/financial-aggregation.js.map +7 -0
  133. package/dist/features/viz/lib/financial-autoscale.d.ts +64 -0
  134. package/dist/features/viz/lib/financial-autoscale.js +61 -0
  135. package/dist/features/viz/lib/financial-autoscale.js.map +7 -0
  136. package/dist/features/viz/lib/financial-comparison.d.ts +62 -0
  137. package/dist/features/viz/lib/financial-comparison.js +98 -0
  138. package/dist/features/viz/lib/financial-comparison.js.map +7 -0
  139. package/dist/features/viz/lib/financial-geometry.d.ts +77 -0
  140. package/dist/features/viz/lib/financial-geometry.js +67 -0
  141. package/dist/features/viz/lib/financial-geometry.js.map +7 -0
  142. package/dist/features/viz/lib/financial-indicators.d.ts +114 -0
  143. package/dist/features/viz/lib/financial-indicators.js +135 -0
  144. package/dist/features/viz/lib/financial-indicators.js.map +7 -0
  145. package/dist/features/viz/lib/financial-oscillators.d.ts +171 -0
  146. package/dist/features/viz/lib/financial-oscillators.js +265 -0
  147. package/dist/features/viz/lib/financial-oscillators.js.map +7 -0
  148. package/dist/features/viz/lib/graph/bipartite.d.ts +14 -0
  149. package/dist/features/viz/lib/graph/bipartite.js +250 -0
  150. package/dist/features/viz/lib/graph/bipartite.js.map +7 -0
  151. package/dist/features/viz/lib/graph/chord.d.ts +44 -0
  152. package/dist/features/viz/lib/graph/chord.js +348 -0
  153. package/dist/features/viz/lib/graph/chord.js.map +7 -0
  154. package/dist/features/viz/lib/graph/dependency.d.ts +26 -0
  155. package/dist/features/viz/lib/graph/dependency.js +140 -0
  156. package/dist/features/viz/lib/graph/dependency.js.map +7 -0
  157. package/dist/features/viz/lib/graph/force.d.ts +28 -0
  158. package/dist/features/viz/lib/graph/force.js +580 -0
  159. package/dist/features/viz/lib/graph/force.js.map +7 -0
  160. package/dist/features/viz/lib/graph/hierarchy.d.ts +21 -0
  161. package/dist/features/viz/lib/graph/hierarchy.js +112 -0
  162. package/dist/features/viz/lib/graph/hierarchy.js.map +7 -0
  163. package/dist/features/viz/lib/graph/icicle.d.ts +16 -0
  164. package/dist/features/viz/lib/graph/icicle.js +153 -0
  165. package/dist/features/viz/lib/graph/icicle.js.map +7 -0
  166. package/dist/features/viz/lib/graph/matrix.d.ts +30 -0
  167. package/dist/features/viz/lib/graph/matrix.js +243 -0
  168. package/dist/features/viz/lib/graph/matrix.js.map +7 -0
  169. package/dist/features/viz/lib/graph/neighborhood.d.ts +11 -0
  170. package/dist/features/viz/lib/graph/neighborhood.js +281 -0
  171. package/dist/features/viz/lib/graph/neighborhood.js.map +7 -0
  172. package/dist/features/viz/lib/graph/routes.d.ts +35 -0
  173. package/dist/features/viz/lib/graph/routes.js +101 -0
  174. package/dist/features/viz/lib/graph/routes.js.map +7 -0
  175. package/dist/features/viz/lib/graph/sankey.d.ts +44 -0
  176. package/dist/features/viz/lib/graph/sankey.js +341 -0
  177. package/dist/features/viz/lib/graph/sankey.js.map +7 -0
  178. package/dist/features/viz/lib/graph/shared.d.ts +59 -0
  179. package/dist/features/viz/lib/graph/shared.js +301 -0
  180. package/dist/features/viz/lib/graph/shared.js.map +7 -0
  181. package/dist/features/viz/lib/graph/tree.d.ts +11 -0
  182. package/dist/features/viz/lib/graph/tree.js +232 -0
  183. package/dist/features/viz/lib/graph/tree.js.map +7 -0
  184. package/dist/features/viz/lib/graph/treemap.d.ts +20 -0
  185. package/dist/features/viz/lib/graph/treemap.js +227 -0
  186. package/dist/features/viz/lib/graph/treemap.js.map +7 -0
  187. package/dist/features/viz/lib/graph/types.d.ts +1097 -0
  188. package/dist/features/viz/lib/hover-card.js +8 -9
  189. package/dist/features/viz/lib/hover-card.js.map +2 -2
  190. package/dist/features/viz/lib/hover-data.d.ts +1 -1
  191. package/dist/features/viz/lib/hover-data.js +5 -2
  192. package/dist/features/viz/lib/hover-data.js.map +2 -2
  193. package/dist/features/viz/lib/interval-band-series.d.ts +49 -0
  194. package/dist/features/viz/lib/interval-band-series.js +136 -0
  195. package/dist/features/viz/lib/interval-band-series.js.map +7 -0
  196. package/dist/features/viz/lib/interval-diamond-series.d.ts +43 -0
  197. package/dist/features/viz/lib/interval-diamond-series.js +122 -0
  198. package/dist/features/viz/lib/interval-diamond-series.js.map +7 -0
  199. package/dist/features/viz/lib/interval-series.d.ts +79 -0
  200. package/dist/features/viz/lib/interval-series.js +158 -0
  201. package/dist/features/viz/lib/interval-series.js.map +7 -0
  202. package/dist/features/viz/lib/layout-pie.js +9 -13
  203. package/dist/features/viz/lib/layout-pie.js.map +2 -2
  204. package/dist/features/viz/lib/line-series.d.ts +1 -1
  205. package/dist/features/viz/lib/line-series.js +47 -28
  206. package/dist/features/viz/lib/line-series.js.map +2 -2
  207. package/dist/features/viz/lib/linear-scale.js +1 -1
  208. package/dist/features/viz/lib/linear-scale.js.map +2 -2
  209. package/dist/features/viz/lib/monotone-curve.d.ts +11 -0
  210. package/dist/features/viz/lib/monotone-curve.js +63 -0
  211. package/dist/features/viz/lib/monotone-curve.js.map +7 -0
  212. package/dist/features/viz/lib/numeric-range-interpolation.d.ts +15 -0
  213. package/dist/features/viz/lib/numeric-range-interpolation.js +36 -0
  214. package/dist/features/viz/lib/numeric-range-interpolation.js.map +7 -0
  215. package/dist/features/viz/lib/ohlc-bar-series.d.ts +55 -0
  216. package/dist/features/viz/lib/ohlc-bar-series.js +168 -0
  217. package/dist/features/viz/lib/ohlc-bar-series.js.map +7 -0
  218. package/dist/features/viz/lib/paired-series.d.ts +44 -0
  219. package/dist/features/viz/lib/paired-series.js +93 -0
  220. package/dist/features/viz/lib/paired-series.js.map +7 -0
  221. package/dist/features/viz/lib/pie-layout.js +2 -1
  222. package/dist/features/viz/lib/pie-layout.js.map +2 -2
  223. package/dist/features/viz/lib/plot-series.js +11 -6
  224. package/dist/features/viz/lib/plot-series.js.map +2 -2
  225. package/dist/features/viz/lib/plot-types.d.ts +4 -3
  226. package/dist/features/viz/lib/point-series.d.ts +1 -1
  227. package/dist/features/viz/lib/point-series.js +36 -9
  228. package/dist/features/viz/lib/point-series.js.map +2 -2
  229. package/dist/features/viz/lib/point-types.d.ts +5 -2
  230. package/dist/features/viz/lib/reference-band.js +4 -1
  231. package/dist/features/viz/lib/reference-band.js.map +2 -2
  232. package/dist/features/viz/lib/scale-context.d.ts +1 -1
  233. package/dist/features/viz/lib/scale-ticks.js +21 -6
  234. package/dist/features/viz/lib/scale-ticks.js.map +2 -2
  235. package/dist/features/viz/lib/sequential-color-scale.d.ts +11 -0
  236. package/dist/features/viz/lib/sequential-color-scale.js +49 -0
  237. package/dist/features/viz/lib/sequential-color-scale.js.map +7 -0
  238. package/dist/features/viz/lib/series-position.d.ts +12 -0
  239. package/dist/features/viz/lib/series-position.js +44 -0
  240. package/dist/features/viz/lib/series-position.js.map +7 -0
  241. package/dist/features/viz/lib/step-curves.d.ts +19 -0
  242. package/dist/features/viz/lib/step-curves.js +53 -0
  243. package/dist/features/viz/lib/step-curves.js.map +7 -0
  244. package/dist/features/viz/lib/threshold-color-scale.d.ts +43 -0
  245. package/dist/features/viz/lib/threshold-color-scale.js +59 -0
  246. package/dist/features/viz/lib/threshold-color-scale.js.map +7 -0
  247. package/dist/features/viz/lib/trading-time-mapping.d.ts +32 -0
  248. package/dist/features/viz/lib/trading-time-mapping.js +89 -0
  249. package/dist/features/viz/lib/trading-time-mapping.js.map +7 -0
  250. package/dist/features/viz/lib/trading-time-scale.d.ts +83 -0
  251. package/dist/features/viz/lib/trading-time-scale.js +96 -0
  252. package/dist/features/viz/lib/trading-time-scale.js.map +7 -0
  253. package/dist/features/viz/lib/trajectory-series.d.ts +71 -0
  254. package/dist/features/viz/lib/trajectory-series.js +111 -0
  255. package/dist/features/viz/lib/trajectory-series.js.map +7 -0
  256. package/dist/features/viz/lib/types.d.ts +20 -4
  257. package/dist/features/viz/lib/use-continuous-scale.js +6 -1
  258. package/dist/features/viz/lib/use-continuous-scale.js.map +2 -2
  259. package/dist/features/viz/lib/utc-scale.js +11 -10
  260. package/dist/features/viz/lib/utc-scale.js.map +2 -2
  261. package/dist/features/viz/lib/volume-series.d.ts +59 -0
  262. package/dist/features/viz/lib/volume-series.js +117 -0
  263. package/dist/features/viz/lib/volume-series.js.map +7 -0
  264. package/dist/features/viz/lib/weighted-point-series.d.ts +71 -0
  265. package/dist/features/viz/lib/weighted-point-series.js +169 -0
  266. package/dist/features/viz/lib/weighted-point-series.js.map +7 -0
  267. package/dist/filters/backdrop-contrast-gpu.d.ts +5 -0
  268. package/dist/filters/backdrop-contrast-gpu.js +33 -0
  269. package/dist/filters/backdrop-contrast-gpu.js.map +7 -0
  270. package/dist/filters/backdrop-contrast.d.ts +21 -0
  271. package/dist/filters/backdrop-contrast.js +61 -0
  272. package/dist/filters/backdrop-contrast.js.map +7 -0
  273. package/dist/filters/displacement.js +1 -1
  274. package/dist/filters/displacement.js.map +2 -2
  275. package/dist/filters/emboss-gpu.d.ts +4 -0
  276. package/dist/filters/emboss-gpu.js +39 -0
  277. package/dist/filters/emboss-gpu.js.map +7 -0
  278. package/dist/filters/emboss.d.ts +32 -0
  279. package/dist/filters/emboss.js +104 -0
  280. package/dist/filters/emboss.js.map +7 -0
  281. package/dist/filters/filter-executor.d.ts +11 -4
  282. package/dist/filters/filter-executor.js +104 -49
  283. package/dist/filters/filter-executor.js.map +2 -2
  284. package/dist/filters/reflected-light.js +1 -1
  285. package/dist/filters/reflected-light.js.map +2 -2
  286. package/dist/filters/reflection-gpu.d.ts +3 -1
  287. package/dist/filters/reflection-gpu.js +5 -2
  288. package/dist/filters/reflection-gpu.js.map +2 -2
  289. package/dist/filters/render-backdrop-contrast-boundary.d.ts +31 -0
  290. package/dist/filters/render-backdrop-contrast-boundary.js +116 -0
  291. package/dist/filters/render-backdrop-contrast-boundary.js.map +7 -0
  292. package/dist/filters/render-emboss-boundary.d.ts +13 -0
  293. package/dist/filters/render-emboss-boundary.js +131 -0
  294. package/dist/filters/render-emboss-boundary.js.map +7 -0
  295. package/dist/filters.d.ts +9 -5
  296. package/dist/filters.js +4 -0
  297. package/dist/filters.js.map +2 -2
  298. package/dist/index.d.ts +9 -5
  299. package/dist/index.js +18 -2
  300. package/dist/index.js.map +2 -2
  301. package/dist/internal.d.ts +4 -0
  302. package/dist/internal.js +6 -0
  303. package/dist/internal.js.map +2 -2
  304. package/dist/layout-kernel.d.ts +12 -0
  305. package/dist/layout-kernel.js +11 -0
  306. package/dist/layout-kernel.js.map +7 -0
  307. package/dist/layout-kernel.mjs +1 -0
  308. package/dist/lib/backend/types.d.ts +13 -1
  309. package/dist/lib/backend/types.js.map +2 -2
  310. package/dist/lib/components/arc-geometry.js +2 -1
  311. package/dist/lib/components/arc-geometry.js.map +2 -2
  312. package/dist/lib/components/g.js +2 -0
  313. package/dist/lib/components/g.js.map +2 -2
  314. package/dist/lib/components/html-box.js +2 -1
  315. package/dist/lib/components/html-box.js.map +2 -2
  316. package/dist/lib/components/img.js +3 -3
  317. package/dist/lib/components/img.js.map +2 -2
  318. package/dist/lib/components/layer.js +98 -16
  319. package/dist/lib/components/layer.js.map +3 -3
  320. package/dist/lib/components/text.d.ts +16 -0
  321. package/dist/lib/components/text.js +131 -24
  322. package/dist/lib/components/text.js.map +2 -2
  323. package/dist/lib/define-primitive.d.ts +4 -2
  324. package/dist/lib/define-primitive.js +3 -1
  325. package/dist/lib/define-primitive.js.map +2 -2
  326. package/dist/lib/element/metadata.d.ts +9 -0
  327. package/dist/lib/element/metadata.js +19 -0
  328. package/dist/lib/element/metadata.js.map +2 -2
  329. package/dist/lib/element/resolve-primitive-inputs.d.ts +2 -0
  330. package/dist/lib/element/resolve-primitive-inputs.js +17 -4
  331. package/dist/lib/element/resolve-primitive-inputs.js.map +2 -2
  332. package/dist/lib/events/event-facade.d.ts +18 -0
  333. package/dist/lib/events/event-facade.js +28 -2
  334. package/dist/lib/events/event-facade.js.map +2 -2
  335. package/dist/lib/events/hit-test.js +2 -1
  336. package/dist/lib/events/hit-test.js.map +2 -2
  337. package/dist/lib/events/propagation.d.ts +2 -1
  338. package/dist/lib/events/propagation.js +22 -16
  339. package/dist/lib/events/propagation.js.map +2 -2
  340. package/dist/lib/events/registrations.d.ts +10 -0
  341. package/dist/lib/events/registrations.js +160 -5
  342. package/dist/lib/events/registrations.js.map +2 -2
  343. package/dist/lib/execute-render.js +25 -1
  344. package/dist/lib/execute-render.js.map +2 -2
  345. package/dist/lib/filter/filter-region.js +3 -10
  346. package/dist/lib/filter/filter-region.js.map +2 -2
  347. package/dist/lib/focus/focus-manager.d.ts +8 -1
  348. package/dist/lib/focus/focus-manager.js +87 -43
  349. package/dist/lib/focus/focus-manager.js.map +2 -2
  350. package/dist/lib/focus/geometry.d.ts +2 -0
  351. package/dist/lib/focus/geometry.js +6 -0
  352. package/dist/lib/focus/geometry.js.map +2 -2
  353. package/dist/lib/geometry/path-bend-guide.js +1 -1
  354. package/dist/lib/geometry/path-bend-guide.js.map +2 -2
  355. package/dist/lib/geometry/path-geometry.js +12 -11
  356. package/dist/lib/geometry/path-geometry.js.map +2 -2
  357. package/dist/lib/geometry/path-transforms.js +17 -21
  358. package/dist/lib/geometry/path-transforms.js.map +2 -2
  359. package/dist/lib/geometry/path-warp-bezier.js +3 -1
  360. package/dist/lib/geometry/path-warp-bezier.js.map +2 -2
  361. package/dist/lib/geometry/path-warp.js +1 -1
  362. package/dist/lib/geometry/path-warp.js.map +2 -2
  363. package/dist/lib/global-state.js +2 -0
  364. package/dist/lib/global-state.js.map +2 -2
  365. package/dist/lib/html/html-events.d.ts +32 -0
  366. package/dist/lib/html/html-events.js +179 -0
  367. package/dist/lib/html/html-events.js.map +7 -0
  368. package/dist/lib/html/html-service.d.ts +8 -2
  369. package/dist/lib/html/html-service.js +198 -65
  370. package/dist/lib/html/html-service.js.map +2 -2
  371. package/dist/lib/html/overlay-config.js +7 -6
  372. package/dist/lib/html/overlay-config.js.map +2 -2
  373. package/dist/lib/html/types.d.ts +29 -2
  374. package/dist/lib/layout/absolute.d.ts +11 -5
  375. package/dist/lib/layout/absolute.js +329 -55
  376. package/dist/lib/layout/absolute.js.map +3 -3
  377. package/dist/lib/layout/allocation-checkpoint-owner.d.ts +11 -0
  378. package/dist/lib/layout/allocation-checkpoint-owner.js +86 -0
  379. package/dist/lib/layout/allocation-checkpoint-owner.js.map +7 -0
  380. package/dist/lib/layout/allocation-checkpoint.d.ts +53 -0
  381. package/dist/lib/layout/allocation-checkpoint.js +463 -0
  382. package/dist/lib/layout/allocation-checkpoint.js.map +7 -0
  383. package/dist/lib/layout/allocation-dependencies.d.ts +30 -0
  384. package/dist/lib/layout/allocation-dependencies.js +90 -0
  385. package/dist/lib/layout/allocation-dependencies.js.map +7 -0
  386. package/dist/lib/layout/allocation-revision.d.ts +13 -0
  387. package/dist/lib/layout/allocation-revision.js +67 -0
  388. package/dist/lib/layout/allocation-revision.js.map +7 -0
  389. package/dist/lib/layout/box-insets.d.ts +17 -0
  390. package/dist/lib/layout/box-insets.js +138 -0
  391. package/dist/lib/layout/box-insets.js.map +7 -0
  392. package/dist/lib/layout/box-sizing.d.ts +16 -0
  393. package/dist/lib/layout/box-sizing.js +77 -0
  394. package/dist/lib/layout/box-sizing.js.map +7 -0
  395. package/dist/lib/layout/box.js +42 -12
  396. package/dist/lib/layout/box.js.map +2 -2
  397. package/dist/lib/layout/canvas-measurement.d.ts +13 -0
  398. package/dist/lib/layout/canvas-measurement.js +57 -0
  399. package/dist/lib/layout/canvas-measurement.js.map +7 -0
  400. package/dist/lib/layout/context.d.ts +35 -6
  401. package/dist/lib/layout/context.js +72 -3
  402. package/dist/lib/layout/context.js.map +2 -2
  403. package/dist/lib/layout/define-layout-component.d.ts +23 -0
  404. package/dist/lib/layout/define-layout-component.js +84 -0
  405. package/dist/lib/layout/define-layout-component.js.map +7 -0
  406. package/dist/lib/layout/flex-allocation-cache.d.ts +42 -0
  407. package/dist/lib/layout/flex-baseline-mode.d.ts +2 -0
  408. package/dist/lib/layout/flex-baseline-mode.js +7 -0
  409. package/dist/lib/layout/flex-baseline-mode.js.map +7 -0
  410. package/dist/lib/layout/flex.d.ts +50 -15
  411. package/dist/lib/layout/flex.js +2124 -195
  412. package/dist/lib/layout/flex.js.map +3 -3
  413. package/dist/lib/layout/flow.js +225 -49
  414. package/dist/lib/layout/flow.js.map +2 -2
  415. package/dist/lib/layout/geometry-publication.d.ts +53 -0
  416. package/dist/lib/layout/geometry-publication.js +244 -0
  417. package/dist/lib/layout/geometry-publication.js.map +7 -0
  418. package/dist/lib/layout/grid-kernel.d.ts +63 -0
  419. package/dist/lib/layout/grid-kernel.js +168 -0
  420. package/dist/lib/layout/grid-kernel.js.map +7 -0
  421. package/dist/lib/layout/grid.d.ts +63 -4
  422. package/dist/lib/layout/grid.js +767 -171
  423. package/dist/lib/layout/grid.js.map +3 -3
  424. package/dist/lib/layout/measure.d.ts +55 -3
  425. package/dist/lib/layout/measure.js +448 -15
  426. package/dist/lib/layout/measure.js.map +2 -2
  427. package/dist/lib/layout/overlay.js +81 -23
  428. package/dist/lib/layout/overlay.js.map +2 -2
  429. package/dist/lib/layout/participation.d.ts +27 -0
  430. package/dist/lib/layout/participation.js +188 -0
  431. package/dist/lib/layout/participation.js.map +7 -0
  432. package/dist/lib/layout/place-child.js +1 -1
  433. package/dist/lib/layout/place-child.js.map +2 -2
  434. package/dist/lib/layout/positioning-diagnostics.d.ts +1 -1
  435. package/dist/lib/layout/positioning-diagnostics.js +13 -2
  436. package/dist/lib/layout/positioning-diagnostics.js.map +2 -2
  437. package/dist/lib/layout/prepared-root.d.ts +121 -0
  438. package/dist/lib/layout/prepared-root.js +360 -0
  439. package/dist/lib/layout/prepared-root.js.map +7 -0
  440. package/dist/lib/layout/standalone-kernel.d.ts +60 -0
  441. package/dist/lib/layout/standalone-kernel.js +722 -0
  442. package/dist/lib/layout/standalone-kernel.js.map +7 -0
  443. package/dist/lib/layout/topology.d.ts +21 -0
  444. package/dist/lib/layout/topology.js +113 -0
  445. package/dist/lib/layout/topology.js.map +7 -0
  446. package/dist/lib/layout/types.d.ts +5 -0
  447. package/dist/lib/layout/wasm/artifact.d.ts +1 -0
  448. package/dist/lib/layout/wasm/artifact.js +5 -0
  449. package/dist/lib/layout/wasm/artifact.js.map +7 -0
  450. package/dist/lib/layout/wasm/bytes.d.ts +1 -0
  451. package/dist/lib/layout/wasm/bytes.js +5 -0
  452. package/dist/lib/layout/wasm/bytes.js.map +7 -0
  453. package/dist/lib/layout/wasm/embedded.d.ts +2 -0
  454. package/dist/lib/layout/wasm/embedded.js +12 -0
  455. package/dist/lib/layout/wasm/embedded.js.map +7 -0
  456. package/dist/lib/layout/wasm/layout.wasm +0 -0
  457. package/dist/lib/layout/wasm/module.d.ts +8 -0
  458. package/dist/lib/layout/wasm/module.js +70 -0
  459. package/dist/lib/layout/wasm/module.js.map +7 -0
  460. package/dist/lib/layout/wasm/region.d.ts +267 -0
  461. package/dist/lib/layout/wasm/region.js +1018 -0
  462. package/dist/lib/layout/wasm/region.js.map +7 -0
  463. package/dist/lib/manipulation/controller.js +4 -7
  464. package/dist/lib/manipulation/controller.js.map +2 -2
  465. package/dist/lib/manipulation/frame.js +1 -1
  466. package/dist/lib/manipulation/frame.js.map +2 -2
  467. package/dist/lib/manipulation/handles.js +32 -33
  468. package/dist/lib/manipulation/handles.js.map +2 -2
  469. package/dist/lib/manipulation/solve.js +12 -10
  470. package/dist/lib/manipulation/solve.js.map +2 -2
  471. package/dist/lib/mount-pibbl.js +1 -0
  472. package/dist/lib/mount-pibbl.js.map +2 -2
  473. package/dist/lib/mount-prepared-pibbl.d.ts +5 -0
  474. package/dist/lib/mount-prepared-pibbl.js +29 -0
  475. package/dist/lib/mount-prepared-pibbl.js.map +7 -0
  476. package/dist/lib/mount-request.d.ts +8 -0
  477. package/dist/lib/mount-request.js +41 -0
  478. package/dist/lib/mount-request.js.map +7 -0
  479. package/dist/lib/pibbl.d.ts +21 -13
  480. package/dist/lib/pibbl.js +18 -16
  481. package/dist/lib/pibbl.js.map +2 -2
  482. package/dist/lib/recording/recording.d.ts +43 -0
  483. package/dist/lib/recording/recording.js +555 -0
  484. package/dist/lib/recording/recording.js.map +7 -0
  485. package/dist/lib/recording/types.d.ts +118 -0
  486. package/dist/lib/recording/wasm-bytes.d.ts +1 -0
  487. package/dist/lib/recording/wasm-bytes.js +5 -0
  488. package/dist/lib/recording/wasm-bytes.js.map +7 -0
  489. package/dist/lib/recording/worker-source.d.ts +1 -0
  490. package/dist/lib/recording/worker-source.js +5 -0
  491. package/dist/lib/recording/worker-source.js.map +7 -0
  492. package/dist/lib/render-layer/controller.d.ts +9 -3
  493. package/dist/lib/render-layer/controller.js +259 -110
  494. package/dist/lib/render-layer/controller.js.map +2 -2
  495. package/dist/lib/render-transaction.d.ts +12 -2
  496. package/dist/lib/render-transaction.js +69 -1
  497. package/dist/lib/render-transaction.js.map +2 -2
  498. package/dist/lib/render.js +32 -8
  499. package/dist/lib/render.js.map +2 -2
  500. package/dist/lib/scheduler/realm-scheduler.d.ts +2 -0
  501. package/dist/lib/scheduler/realm-scheduler.js +55 -26
  502. package/dist/lib/scheduler/realm-scheduler.js.map +2 -2
  503. package/dist/lib/scheduler/renderer-participant.js +1 -0
  504. package/dist/lib/scheduler/renderer-participant.js.map +2 -2
  505. package/dist/lib/series-inspection-frame.d.ts +18 -0
  506. package/dist/lib/series-inspection-frame.js +70 -0
  507. package/dist/lib/series-inspection-frame.js.map +7 -0
  508. package/dist/lib/signals/edge.d.ts +7 -4
  509. package/dist/lib/signals/edge.js +25 -3
  510. package/dist/lib/signals/edge.js.map +2 -2
  511. package/dist/lib/signals/graph.d.ts +16 -2
  512. package/dist/lib/signals/graph.js +54 -12
  513. package/dist/lib/signals/graph.js.map +2 -2
  514. package/dist/lib/signals/input-provision.d.ts +15 -0
  515. package/dist/lib/signals/input-provision.js +53 -3
  516. package/dist/lib/signals/input-provision.js.map +2 -2
  517. package/dist/lib/signals/render-consumer.d.ts +3 -0
  518. package/dist/lib/signals/render-consumer.js +22 -14
  519. package/dist/lib/signals/render-consumer.js.map +2 -2
  520. package/dist/lib/style/positioning.d.ts +50 -2
  521. package/dist/lib/style/positioning.js +28 -4
  522. package/dist/lib/style/positioning.js.map +2 -2
  523. package/dist/lib/style/resolve-built-in.d.ts +4 -3
  524. package/dist/lib/style/resolve-built-in.js +17 -3
  525. package/dist/lib/style/resolve-built-in.js.map +2 -2
  526. package/dist/lib/style/resolve-dispatch.d.ts +3 -0
  527. package/dist/lib/style/resolve-dispatch.js +77 -4
  528. package/dist/lib/style/resolve-dispatch.js.map +2 -2
  529. package/dist/lib/style/resolve-length.d.ts +2 -0
  530. package/dist/lib/style/resolve-length.js +13 -9
  531. package/dist/lib/style/resolve-length.js.map +2 -2
  532. package/dist/lib/style/sizing-length.d.ts +51 -0
  533. package/dist/lib/style/sizing-length.js +77 -0
  534. package/dist/lib/style/sizing-length.js.map +7 -0
  535. package/dist/lib/style/types.d.ts +63 -25
  536. package/dist/lib/surface/root-surface.js +10 -6
  537. package/dist/lib/surface/root-surface.js.map +2 -2
  538. package/dist/lib/textures/texture.js +10 -8
  539. package/dist/lib/textures/texture.js.map +2 -2
  540. package/dist/lib/transitions/capture.js +4 -1
  541. package/dist/lib/transitions/capture.js.map +2 -2
  542. package/dist/lib/transitions/embers-physics.js +17 -10
  543. package/dist/lib/transitions/embers-physics.js.map +2 -2
  544. package/dist/lib/types.d.ts +110 -1
  545. package/dist/sync.d.ts +16 -0
  546. package/dist/sync.js +13 -0
  547. package/dist/sync.js.map +7 -0
  548. package/dist/sync.mjs +1 -0
  549. package/package.json +26 -3
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/lib/signals/graph.ts"],
4
- "sourcesContent": ["import type {\n Signal,\n SignalEquals,\n SignalOptions,\n WritableSignal,\n} from './types.js';\nimport type { PibblRenderTransaction } from '../types.js';\nimport {\n beginReactiveCollection,\n collectReactiveDependency,\n finishReactiveCollection,\n linkReactiveEdgeToSource,\n notifyReactiveEdges,\n unlinkReactiveEdgeFromSource,\n type ReactiveEdge,\n type ReactiveNotificationCursor,\n type SignalDependencyConsumer,\n} from './edge.js';\n\nconst signalNodes = new WeakMap<object, SignalNode<unknown>>();\nconst signalValues = new WeakSet<object>();\n\ntype ComputedState = 'clean' | 'check' | 'evaluating';\n\ninterface ComputedSignalNode<T>\n extends SignalNode<T>, SignalDependencyConsumer {\n readonly kind: 'computed';\n compute(): T;\n state: ComputedState;\n hasValue: boolean;\n hasError: boolean;\n error: unknown;\n invalidate(): void;\n validate(): void;\n observedCount: number;\n pendingValidation: boolean;\n observe(): () => void;\n adoptCandidate(\n candidate: ComputedSignalNode<T>,\n compute: () => T,\n changed: boolean,\n readers: ReadonlySet<SignalDependencyCollector>,\n ): void;\n replaceCompute(compute: () => T, invalidate: boolean): void;\n}\n\n/** @internal One isolated formula generation owned by a render transaction. */\nexport interface ComputedFormulaCandidate<T> {\n readonly signal: Signal<T>;\n readonly readers: Set<SignalDependencyCollector>;\n changed: boolean;\n evaluated: boolean;\n value: T | undefined;\n}\n\nexport interface SignalNode<T> {\n value: T;\n equals: SignalEquals<T>;\n debugName: string | undefined;\n version: number;\n observerHead: ReactiveEdge | undefined;\n observerTail: ReactiveEdge | undefined;\n observerCount: number;\n activeObserverCursor: ReactiveNotificationCursor | undefined;\n observe?(): () => void;\n validate?(): void;\n}\n\ntype SignalRenderProvisionStatus = 'pending' | 'success' | 'failure';\n\ninterface SignalRenderProvisionEntry {\n readonly transaction: PibblRenderTransaction;\n value: unknown;\n status: SignalRenderProvisionStatus;\n}\n\ninterface SignalRenderProvisionState {\n baseValue: unknown;\n readonly entries: SignalRenderProvisionEntry[];\n readonly entriesByTransaction: Map<\n PibblRenderTransaction,\n SignalRenderProvisionEntry\n >;\n}\n\nexport interface SignalDependencyCollector {\n addDependency(node: SignalNode<unknown>): void;\n}\n\nexport type SignalWriteOperation = 'direct' | 'staged';\n\nexport type SignalWritePolicy = (\n node: SignalNode<unknown>,\n operation: SignalWriteOperation,\n) => void;\n\n/** @internal Authorization seam owned by the animation writer-lease registry. */\nexport interface SignalWriterLeasePolicy {\n assertDirectWriteAllowed(node: SignalNode<unknown>): void;\n captureStagedWrite(\n node: SignalNode<unknown>,\n writer: object,\n ): unknown;\n assertStagedWriteAllowed(\n node: SignalNode<unknown>,\n writer: object,\n authorization: unknown,\n ): void;\n}\n\nlet activeSignalDependencyCollector: SignalDependencyCollector | undefined;\nconst writePolicyStack: SignalWritePolicy[] = [];\nconst computedStack: ComputedSignalNode<unknown>[] = [];\nfunction createSignalNodeState<T>(\n value: T,\n equals: SignalEquals<T>,\n debugName: string | undefined,\n): SignalNode<T> {\n return {\n value,\n equals,\n debugName,\n version: 0,\n observerHead: undefined,\n observerTail: undefined,\n observerCount: 0,\n activeObserverCursor: undefined,\n };\n}\n\nconst commandAssertionNode = createSignalNodeState<unknown>(\n undefined,\n Object.is,\n undefined,\n);\nconst activeSignalRenderProvisions = new WeakMap<\n SignalNode<unknown>,\n SignalRenderProvisionState\n>();\nconst pendingComputedValidations = new Set<ComputedSignalNode<unknown>>();\nlet flushingPendingComputedValidations = false;\nlet rendererConsumers = 0;\nlet rendererEdges = 0;\nlet createdRendererConsumers = 0;\nlet releasedRendererConsumers = 0;\nlet createdRendererEdges = 0;\nlet releasedRendererEdges = 0;\nlet signalCommitNotifications = 0;\nlet planComputedValidations = 0;\nlet computedSourceEdges = 0;\nlet createdComputedSourceEdges = 0;\nlet releasedComputedSourceEdges = 0;\nlet lazyRendererConsumers = 0;\nlet reusedRendererEdges = 0;\nlet plainInputResolutions = 0;\nlet signalInputResolutions = 0;\nlet shallowInputCopies = 0;\nlet receiverInputProvisions = 0;\nlet adoptedReceiverInputProvisions = 0;\nlet rolledBackReceiverInputProvisions = 0;\nlet batchedObserverInvalidations = 0;\nlet reactionConsumers = 0;\nlet reactionEdges = 0;\nlet reactionRuns = 0;\nlet reactionCleanups = 0;\nlet reactionFailures = 0;\nlet signalGraphPlanWorkNotifier: (() => void) | undefined;\nlet signalWriterLeasePolicy: SignalWriterLeasePolicy | undefined;\n\ninterface PublicSignalBatchEntry {\n readonly value: unknown;\n readonly computedHasError: boolean | undefined;\n readonly computedError: unknown;\n}\n\ninterface PublicSignalBatchState {\n readonly entries: Map<SignalNode<unknown>, PublicSignalBatchEntry>;\n readonly failures: unknown[];\n}\n\nlet activePublicSignalBatch: PublicSignalBatchState | undefined;\n\nexport interface SignalGraphSnapshot {\n readonly rendererConsumers: number;\n readonly rendererEdges: number;\n readonly computedSourceEdges: number;\n readonly pendingComputedValidations: number;\n readonly createdRendererConsumers: number;\n readonly releasedRendererConsumers: number;\n readonly createdRendererEdges: number;\n readonly releasedRendererEdges: number;\n readonly signalCommitNotifications: number;\n readonly planComputedValidations: number;\n readonly createdComputedSourceEdges: number;\n readonly releasedComputedSourceEdges: number;\n readonly lazyRendererConsumers: number;\n readonly reusedRendererEdges: number;\n readonly plainInputResolutions: number;\n readonly signalInputResolutions: number;\n readonly shallowInputCopies: number;\n readonly receiverInputProvisions: number;\n readonly adoptedReceiverInputProvisions: number;\n readonly rolledBackReceiverInputProvisions: number;\n readonly batchedObserverInvalidations: number;\n readonly reactionConsumers: number;\n readonly reactionEdges: number;\n readonly reactionRuns: number;\n readonly reactionCleanups: number;\n readonly reactionFailures: number;\n}\n\n/** @internal Deterministic ownership and structural evidence for tests. */\nexport function signalGraphSnapshot(): SignalGraphSnapshot {\n return Object.freeze({\n rendererConsumers,\n rendererEdges,\n computedSourceEdges,\n pendingComputedValidations: pendingComputedValidations.size,\n createdRendererConsumers,\n releasedRendererConsumers,\n createdRendererEdges,\n releasedRendererEdges,\n signalCommitNotifications,\n planComputedValidations,\n createdComputedSourceEdges,\n releasedComputedSourceEdges,\n lazyRendererConsumers,\n reusedRendererEdges,\n plainInputResolutions,\n signalInputResolutions,\n shallowInputCopies,\n receiverInputProvisions,\n adoptedReceiverInputProvisions,\n rolledBackReceiverInputProvisions,\n batchedObserverInvalidations,\n reactionConsumers,\n reactionEdges,\n reactionRuns,\n reactionCleanups,\n reactionFailures,\n });\n}\n\n/** @internal Records one component consumer materialized by its first read. */\nexport function recordLazyRendererConsumerCreated(): void {\n lazyRendererConsumers++;\n}\n\n/** @internal Records one render edge reused by recollection or restoration. */\nexport function recordRendererEdgeReused(restored = false): void {\n if (restored) rendererEdges++;\n reusedRendererEdges++;\n}\n\n/** @internal Records one declared plain input that took the identity path. */\nexport function recordPlainInputResolution(): void {\n plainInputResolutions++;\n}\n\n/** @internal Records one declared signal-valued input read. */\nexport function recordSignalInputResolution(): void {\n signalInputResolutions++;\n}\n\n/** @internal Records one copy-on-signal props or style object. */\nexport function recordShallowInputCopy(): void {\n shallowInputCopies++;\n}\n\n/** @internal Records one pre-evaluation receiver input provision. */\nexport function recordReceiverInputProvisionCreated(): void {\n receiverInputProvisions++;\n}\n\n/** @internal Records one provision adopted by its receiver generation. */\nexport function recordReceiverInputProvisionAdopted(): void {\n receiverInputProvisions--;\n adoptedReceiverInputProvisions++;\n}\n\n/** @internal Records one provision discarded without publication. */\nexport function recordReceiverInputProvisionRolledBack(): void {\n receiverInputProvisions--;\n rolledBackReceiverInputProvisions++;\n}\n\n/** @internal Adds one already-read source to the active dependency collector. */\nexport function trackSignalDependency(node: SignalNode<unknown>): void {\n activeSignalDependencyCollector?.addDependency(node);\n}\n\n/** @internal Records one observer invalidation deduplicated by a public batch. */\nexport function recordBatchedObserverInvalidation(): void {\n batchedObserverInvalidations++;\n}\n\n/** @internal Records one live component-owned reaction consumer. */\nexport function recordReactionConsumerCreated(): void {\n reactionConsumers++;\n}\n\n/** @internal Records final release of one reaction consumer. */\nexport function recordReactionConsumerReleased(): void {\n reactionConsumers--;\n}\n\n/** @internal Records one live reaction source edge. */\nexport function recordReactionEdgeCreated(): void {\n reactionEdges++;\n}\n\n/** @internal Records release of one reaction source edge. */\nexport function recordReactionEdgeReleased(): void {\n reactionEdges--;\n}\n\n/** @internal Records one reaction setup attempt. */\nexport function recordReactionRun(): void {\n reactionRuns++;\n}\n\n/** @internal Records one exact cleanup generation execution. */\nexport function recordReactionCleanup(): void {\n reactionCleanups++;\n}\n\n/** @internal Records one setup or cleanup failure. */\nexport function recordReactionFailure(): void {\n reactionFailures++;\n}\n\n/** @internal Records one live renderer consumer for test diagnostics. */\nexport function recordRendererConsumerCreated(): void {\n rendererConsumers++;\n createdRendererConsumers++;\n}\n\n/** @internal Records release of one renderer consumer for test diagnostics. */\nexport function recordRendererConsumerReleased(): void {\n rendererConsumers--;\n releasedRendererConsumers++;\n}\n\n/** @internal Records one live renderer dependency edge for test diagnostics. */\nexport function recordRendererEdgeCreated(): void {\n rendererEdges++;\n createdRendererEdges++;\n}\n\n/** @internal Records release of one renderer dependency edge for tests. */\nexport function recordRendererEdgeReleased(): void {\n rendererEdges--;\n releasedRendererEdges++;\n}\n\n/**\n * Runs a synchronous callback while coalescing signal notifications until the outer batch\n * completes.\n *\n * @param callback - Synchronous work whose signal notifications are grouped.\n * @returns The callback's return value.\n *\n * @see {@link signal}\n * @see {@link computed}\n * @see {@link WritableSignal}\n */\nexport function batch<T>(callback: () => T): T {\n if (activePublicSignalBatch !== undefined) return callback();\n\n const state: PublicSignalBatchState = {\n entries: new Map(),\n failures: [],\n };\n activePublicSignalBatch = state;\n let result!: T;\n let callbackFailure: unknown;\n let callbackFailed = false;\n try {\n result = callback();\n } catch (error) {\n callbackFailed = true;\n callbackFailure = error;\n }\n\n const notificationFailures = flushPublicSignalBatch(state);\n if (callbackFailed) {\n if (notificationFailures.length === 0) throw callbackFailure;\n throw new AggregateError(\n [callbackFailure, ...notificationFailures],\n 'Pibbl signal batch callback and observer notifications failed.',\n );\n }\n throwSignalObserverFailures(notificationFailures);\n return result;\n}\n\nfunction recordPublicBatchEntry(node: SignalNode<unknown>): void {\n const state = activePublicSignalBatch;\n if (state === undefined || state.entries.has(node)) return;\n const computedNode = isComputedSignalNode(node) ? node : undefined;\n state.entries.set(node, {\n value: node.value,\n computedHasError: computedNode?.hasError,\n computedError: computedNode?.error,\n });\n}\n\nfunction flushPublicSignalBatch(state: PublicSignalBatchState): unknown[] {\n try {\n flushPendingComputedValidations();\n } catch (error) {\n if (\n error instanceof AggregateError &&\n error.message === 'Pibbl signal observer notifications failed.'\n ) {\n state.failures.push(...error.errors);\n } else {\n state.failures.push(error);\n }\n }\n\n const seen = new Set<SignalDependencyConsumer>();\n const consumers: Array<{\n readonly consumer: SignalDependencyConsumer;\n readonly source: SignalNode<unknown>;\n }> = [];\n for (const [source, entry] of state.entries) {\n let unchanged = false;\n try {\n unchanged = publicBatchEntryEquals(source, entry);\n } catch (error) {\n state.failures.push(error);\n }\n if (unchanged) continue;\n signalCommitNotifications++;\n for (\n let edge = source.observerHead;\n edge !== undefined;\n edge = edge.sourceNext\n ) {\n const consumer = edge.consumer;\n if (consumer.propagateInvalidation === true) continue;\n if (seen.has(consumer)) {\n recordBatchedObserverInvalidation();\n continue;\n }\n seen.add(consumer);\n consumers.push({ consumer, source });\n }\n }\n\n activePublicSignalBatch = undefined;\n for (const { consumer, source } of consumers) {\n try {\n consumer.notify(source);\n } catch (error) {\n state.failures.push(error);\n }\n }\n return state.failures;\n}\n\nfunction publicBatchEntryEquals(\n node: SignalNode<unknown>,\n entry: PublicSignalBatchEntry,\n): boolean {\n if (isComputedSignalNode(node)) {\n if (node.hasError !== entry.computedHasError) return false;\n if (node.hasError && node.error !== entry.computedError) return false;\n }\n return node.equals(entry.value, node.value);\n}\n\nfunction computedWriteErrorLabel(node: SignalNode<unknown>): string {\n return node.debugName === undefined ?\n 'Cannot write to a signal while evaluating a computed signal.' :\n `Cannot write to a signal while evaluating computed signal \"${node.debugName}\".`;\n}\n\nfunction notifySignalObservers(node: SignalNode<unknown>): unknown[] {\n const batchState = activePublicSignalBatch;\n if (batchState !== undefined) {\n batchState.failures.push(...notifyComputedInvalidationObservers(node));\n return [];\n }\n signalCommitNotifications++;\n return notifyReactiveEdges(node);\n}\n\nfunction notifyComputedInvalidationObservers(node: SignalNode<unknown>): unknown[] {\n return notifyReactiveEdges(\n node,\n consumer => consumer.propagateInvalidation === true,\n );\n}\n\nfunction notifyRendererInvalidationObservers(node: SignalNode<unknown>): unknown[] {\n return notifyReactiveEdges(\n node,\n consumer => consumer.renderInvalidation === true,\n );\n}\n\nfunction throwSignalObserverFailures(failures: readonly unknown[]): void {\n if (failures.length > 0) {\n throw new AggregateError(failures, 'Pibbl signal observer notifications failed.');\n }\n}\n\n/**\n * Creates a synchronous writable signal with configurable equality and an optional diagnostic\n * name.\n *\n * @param initialValue - Value stored before the first write.\n * @param options - Equality comparison and optional diagnostic name. See {@link SignalOptions}.\n * @returns A writable signal holding the initial value. See {@link WritableSignal}.\n *\n * @see {@link SignalOptions}\n * @see {@link WritableSignal}\n */\nexport function signal<T>(\n initialValue: T,\n options: SignalOptions<T> = {},\n): WritableSignal<T> {\n const equals = options.equals ?? Object.is;\n const debugName = options.debugName;\n const node = createSignalNodeState(initialValue, equals, debugName);\n\n let readonlySignal: Signal<T> | undefined;\n const read = (): T => {\n activeSignalDependencyCollector?.addDependency(node as SignalNode<unknown>);\n return node.value;\n };\n const assertWriteAllowed = (): void => {\n writePolicyStack[writePolicyStack.length - 1]?.(\n node as SignalNode<unknown>,\n 'direct',\n );\n signalWriterLeasePolicy?.assertDirectWriteAllowed(node as SignalNode<unknown>);\n };\n const commit = (nextValue: T): void => {\n if (node.equals(node.value, nextValue)) {\n return;\n }\n\n recordPublicBatchEntry(node as SignalNode<unknown>);\n node.value = nextValue;\n node.version++;\n throwSignalObserverFailures(notifySignalObservers(node as SignalNode<unknown>));\n };\n const writable = {\n get: read,\n set(nextValue: T): void {\n assertWriteAllowed();\n commit(nextValue);\n },\n update(updateValue: (current: T) => T): void {\n assertWriteAllowed();\n commit(updateValue(node.value));\n },\n asReadonly(): Signal<T> {\n if (readonlySignal === undefined) {\n readonlySignal = { get: read } as Signal<T>;\n signalValues.add(readonlySignal);\n signalNodes.set(readonlySignal, node as SignalNode<unknown>);\n }\n return readonlySignal;\n },\n } as WritableSignal<T>;\n\n signalValues.add(writable);\n signalNodes.set(writable, node as SignalNode<unknown>);\n return writable;\n}\n\n/**\n * @internal Presents a provisional value to reads and computed dependencies\n * during one render without publishing an ordinary signal notification.\n * This is reserved for a not-yet-successfully-mounted owner whose render\n * transaction owns acceptance or restoration of every overlapping preview.\n */\nexport function provisionSignalValueForRender<T>(\n value: WritableSignal<T>,\n nextValue: T,\n transaction: PibblRenderTransaction,\n): void {\n const node = getSignalNode(value) as SignalNode<unknown>;\n const publishComputedVersion = (next: unknown): void => {\n node.value = next;\n node.version++;\n throwSignalObserverFailures(\n notifyComputedInvalidationObservers(node),\n );\n };\n let state = activeSignalRenderProvisions.get(node);\n if (state === undefined) {\n state = {\n baseValue: node.value,\n entries: [],\n entriesByTransaction: new Map(),\n };\n activeSignalRenderProvisions.set(node, state);\n }\n\n const effectiveEntry = (): SignalRenderProvisionEntry | undefined => {\n for (let index = state.entries.length - 1; index >= 0; index--) {\n const entry = state.entries[index];\n if (entry.status !== 'failure') return entry;\n }\n return undefined;\n };\n const publishEffectiveValue = (\n forceEntry?: SignalRenderProvisionEntry,\n ): boolean => {\n const entry = effectiveEntry();\n const effectiveValue = entry?.value ?? state.baseValue;\n if (\n (forceEntry !== undefined && entry === forceEntry) ||\n !Object.is(node.value, effectiveValue)\n ) {\n publishComputedVersion(effectiveValue);\n return true;\n }\n return false;\n };\n\n let entry = state.entriesByTransaction.get(transaction);\n if (entry === undefined) {\n entry = { transaction, value: nextValue, status: 'pending' };\n state.entries.push(entry);\n state.entriesByTransaction.set(transaction, entry);\n const provisionState = state;\n const provisionEntry = entry;\n transaction.onFinish(success => {\n if (provisionEntry.status !== 'pending') return;\n provisionEntry.status = success ? 'success' : 'failure';\n\n while (\n provisionState.entries[0]?.status !== 'pending' &&\n provisionState.entries.length > 0\n ) {\n const settled = provisionState.entries.shift()!;\n provisionState.entriesByTransaction.delete(settled.transaction);\n if (settled.status === 'success') {\n provisionState.baseValue = settled.value;\n }\n }\n\n const effectiveValueChanged = publishEffectiveValue();\n if (!success && effectiveValueChanged) {\n throwSignalObserverFailures(notifyRendererInvalidationObservers(node));\n }\n if (provisionState.entries.length === 0) {\n activeSignalRenderProvisions.delete(node);\n }\n });\n }\n entry.value = nextValue;\n publishEffectiveValue(entry);\n}\n\n/**\n * Creates a lazy, cached readonly signal whose dependencies are tracked during evaluation.\n *\n * @param compute - Synchronous calculation whose signal reads become dependencies.\n * @param options - Equality comparison and optional diagnostic name. See {@link SignalOptions}.\n * @returns A readonly, lazy, cached signal that recomputes when its dependencies change. See\n * {@link Signal} .\n *\n * @see {@link SignalOptions}\n * @see {@link Signal}\n */\nexport function computed<T>(\n compute: () => T,\n options: SignalOptions<T> = {},\n): Signal<T> {\n const node = Object.assign(\n createSignalNodeState(\n undefined as T,\n options.equals ?? Object.is,\n options.debugName,\n ),\n {\n kind: 'computed',\n compute,\n state: 'check',\n hasValue: false,\n hasError: false,\n error: undefined,\n dependencyHead: undefined,\n dependencyTail: undefined,\n dependencyFreeHead: undefined,\n dependencyFreeCount: 0,\n dependencyCount: 0,\n dependencyHighWater: 0,\n collectionCursor: undefined,\n collectionGeneration: 0,\n observedCount: 0,\n pendingValidation: false,\n propagateInvalidation: true,\n addDependency(dependency: SignalNode<unknown>): void {\n if (\n !isComputedSignalNode(dependency) ||\n dependency.state !== 'evaluating'\n ) {\n collectReactiveDependency(node, dependency);\n }\n },\n notify: () => {},\n observe: () => () => {},\n invalidate: () => {},\n validate: () => {},\n adoptCandidate: () => {},\n replaceCompute: () => {},\n },\n ) as ComputedSignalNode<T>;\n\n const notifyObservers = (): unknown[] => {\n return notifySignalObservers(node as SignalNode<unknown>);\n };\n\n const enqueueValidation = (): void => {\n if (node.observedCount === 0 || node.pendingValidation) {\n return;\n }\n node.pendingValidation = true;\n const wasEmpty = pendingComputedValidations.size === 0;\n pendingComputedValidations.add(node as ComputedSignalNode<unknown>);\n if (wasEmpty) signalGraphPlanWorkNotifier?.();\n };\n\n const removePendingValidation = (): void => {\n if (!node.pendingValidation) return;\n node.pendingValidation = false;\n pendingComputedValidations.delete(node as ComputedSignalNode<unknown>);\n if (pendingComputedValidations.size === 0) signalGraphPlanWorkNotifier?.();\n };\n\n const invalidate = (): void => {\n if (node.state !== 'clean') {\n return;\n }\n node.state = 'check';\n enqueueValidation();\n throwSignalObserverFailures(\n notifyComputedInvalidationObservers(node as SignalNode<unknown>),\n );\n };\n node.notify = invalidate;\n\n const acquireDependency = (edge: ReactiveEdge): void => {\n if (edge.sourceLinked) return;\n const dependency = edge.source!;\n linkReactiveEdgeToSource(edge, dependency.observe?.());\n computedSourceEdges++;\n createdComputedSourceEdges++;\n };\n\n const releaseDependency = (edge: ReactiveEdge): void => {\n if (!edge.sourceLinked) return;\n unlinkReactiveEdgeFromSource(edge);\n computedSourceEdges--;\n releasedComputedSourceEdges++;\n };\n\n const acquireDependencies = (): void => {\n for (\n let edge = node.dependencyHead;\n edge !== undefined;\n edge = edge.consumerNext\n ) {\n acquireDependency(edge);\n }\n };\n\n const releaseDependencies = (): void => {\n for (\n let edge = node.dependencyHead;\n edge !== undefined;\n edge = edge.consumerNext\n ) {\n releaseDependency(edge);\n }\n };\n\n const finishDependencies = (): void => {\n finishReactiveCollection(\n node,\n edge => {\n if (node.observedCount > 0) acquireDependency(edge);\n edge.observedVersion = edge.source!.version;\n edge.collectionKind = undefined;\n },\n releaseDependency,\n );\n };\n\n const cycleError = (): Error => {\n const start = computedStack.indexOf(node as ComputedSignalNode<unknown>);\n const cycle = [...computedStack.slice(start), node as ComputedSignalNode<unknown>]\n .map(computedNode => computedNode.debugName ?? '<computed>')\n .join(' -> ');\n return new Error(`Pibbl computed cycle: ${cycle}`);\n };\n\n const evaluate = (): void => {\n if (node.state === 'evaluating') {\n throw cycleError();\n }\n\n beginReactiveCollection(node);\n node.state = 'evaluating';\n computedStack.push(node as ComputedSignalNode<unknown>);\n let changed: boolean;\n try {\n const result = withSignalWriteForbidden(\n computedWriteErrorLabel(node as SignalNode<unknown>),\n () => {\n const nextValue = withSignalTracking(node, node.compute);\n return {\n nextValue,\n changed: !node.hasValue || node.hasError ||\n !node.equals(node.value, nextValue),\n };\n },\n );\n\n changed = result.changed;\n if (changed) {\n recordPublicBatchEntry(node as SignalNode<unknown>);\n node.value = result.nextValue;\n node.version++;\n }\n node.hasValue = true;\n node.hasError = false;\n node.error = undefined;\n } catch (error) {\n changed = !node.hasError || node.error !== error;\n if (changed) recordPublicBatchEntry(node as SignalNode<unknown>);\n node.hasError = true;\n node.error = error;\n } finally {\n computedStack.pop();\n finishDependencies();\n node.state = 'clean';\n }\n if (changed) {\n if (node.hasError) node.version++;\n throwSignalObserverFailures(notifyObservers());\n }\n };\n\n const validate = (): void => {\n if (node.state === 'evaluating') {\n throw cycleError();\n }\n\n let dependencyChanged = false;\n if (node.state === 'clean' && node.observedCount > 0) return;\n for (\n let edge = node.dependencyHead;\n edge !== undefined;\n edge = edge.consumerNext\n ) {\n const dependency = edge.source!;\n dependency.validate?.();\n if (dependency.version !== edge.observedVersion) {\n dependencyChanged = true;\n }\n }\n if (node.state === 'clean' && !dependencyChanged) return;\n if (dependencyChanged || node.dependencyCount === 0 || !node.hasValue) {\n evaluate();\n } else {\n node.state = 'clean';\n }\n };\n\n const hasChangedDependencyVersion = (): boolean => {\n for (\n let edge = node.dependencyHead;\n edge !== undefined;\n edge = edge.consumerNext\n ) {\n if (edge.source!.version !== edge.observedVersion) return true;\n }\n return false;\n };\n\n node.invalidate = invalidate;\n node.validate = validate;\n\n node.replaceCompute = (nextCompute, shouldInvalidate): void => {\n node.compute = nextCompute;\n if (shouldInvalidate) invalidate();\n };\n\n node.adoptCandidate = (\n candidate,\n nextCompute,\n changed,\n readers,\n ): void => {\n if (!candidate.hasValue || candidate.hasError) {\n throw new Error('Cannot adopt an unevaluated computed formula candidate.');\n }\n node.compute = nextCompute;\n beginReactiveCollection(node);\n for (\n let edge = candidate.dependencyHead;\n edge !== undefined;\n edge = edge.consumerNext\n ) {\n collectReactiveDependency(node, edge.source!);\n }\n finishDependencies();\n removePendingValidation();\n node.state = 'clean';\n node.hasValue = true;\n node.hasError = false;\n node.error = undefined;\n if (!changed) return;\n\n recordPublicBatchEntry(node as SignalNode<unknown>);\n node.value = candidate.value;\n node.version++;\n signalCommitNotifications++;\n throwSignalObserverFailures(notifyReactiveEdges(\n node as SignalNode<unknown>,\n consumer => !readers.has(consumer),\n ));\n };\n\n node.observe = (): (() => void) => {\n node.observedCount++;\n if (node.observedCount === 1) {\n acquireDependencies();\n if (\n node.state === 'clean' &&\n hasChangedDependencyVersion()\n ) {\n node.state = 'check';\n }\n }\n if (node.state === 'check') {\n enqueueValidation();\n }\n\n let detached = false;\n return () => {\n if (detached) {\n return;\n }\n detached = true;\n node.observedCount--;\n if (node.observedCount === 0) {\n removePendingValidation();\n releaseDependencies();\n }\n };\n };\n\n const readonly: Signal<T> = {\n get(): T {\n activeSignalDependencyCollector?.addDependency(\n node as SignalNode<unknown>,\n );\n validate();\n removePendingValidation();\n if (node.hasError) {\n throw node.error;\n }\n return node.value;\n },\n } as Signal<T>;\n\n signalValues.add(readonly);\n signalNodes.set(readonly, node as SignalNode<unknown>);\n return readonly;\n}\n\n/** @internal Creates a nominal alias that retains one computed graph identity. */\nexport function createComputedSignalAlias<T>(\n target: Signal<T>,\n read: () => T,\n): Signal<T> {\n const node = requireComputedSignalNode(target);\n const alias = { get: read } as Signal<T>;\n signalValues.add(alias);\n signalNodes.set(alias, node as SignalNode<unknown>);\n return alias;\n}\n\n/** @internal Creates one unobserved formula generation for transactional render. */\nexport function createComputedFormulaCandidate<T>(\n target: Signal<T>,\n compute: () => T,\n): ComputedFormulaCandidate<T> {\n const node = requireComputedSignalNode(target);\n return {\n signal: computed(compute, {\n equals: node.equals,\n debugName: node.debugName,\n }),\n readers: new Set(),\n changed: false,\n evaluated: false,\n value: undefined,\n };\n}\n\n/** @internal Reads a provisional formula while attributing the stable node. */\nexport function readComputedFormulaCandidate<T>(\n target: Signal<T>,\n candidate: ComputedFormulaCandidate<T>,\n): T {\n const node = requireComputedSignalNode(target);\n const reader = activeSignalDependencyCollector;\n reader?.addDependency(node as SignalNode<unknown>);\n if (reader !== undefined) candidate.readers.add(reader);\n if (!candidate.evaluated) {\n const value = untracked(() => candidate.signal.get());\n candidate.changed = !node.hasValue || node.hasError ||\n !node.equals(node.value, value);\n candidate.value = value;\n candidate.evaluated = true;\n }\n return candidate.value as T;\n}\n\n/** @internal Publishes an evaluated formula generation after render success. */\nexport function adoptComputedFormulaCandidate<T>(\n target: Signal<T>,\n candidate: ComputedFormulaCandidate<T>,\n compute: () => T,\n): void {\n const node = requireComputedSignalNode(target);\n const candidateNode = requireComputedSignalNode(candidate.signal);\n node.adoptCandidate(\n candidateNode,\n compute,\n candidate.changed,\n candidate.readers,\n );\n}\n\n/** @internal Refreshes a committed formula and optionally invalidates its cache. */\nexport function replaceComputedFormula<T>(\n target: Signal<T>,\n compute: () => T,\n invalidate: boolean,\n): void {\n requireComputedSignalNode(target).replaceCompute(compute, invalidate);\n}\n\nfunction requireComputedSignalNode<T>(\n value: Signal<T>,\n): ComputedSignalNode<T> {\n const node = getSignalNode(value);\n if (!isComputedSignalNode(node as SignalNode<unknown>)) {\n throw new TypeError('Expected a computed signal.');\n }\n return node as ComputedSignalNode<T>;\n}\n\n/** @internal Called during the scheduler Plan phase. */\nexport function flushPendingComputedValidations(): void {\n if (flushingPendingComputedValidations) {\n return;\n }\n\n flushingPendingComputedValidations = true;\n const attempted = new Set<ComputedSignalNode<unknown>>();\n const failures: unknown[] = [];\n try {\n while (pendingComputedValidations.size > 0) {\n const node = Array.from(pendingComputedValidations)\n .find(candidate => !attempted.has(candidate));\n if (node === undefined) {\n break;\n }\n attempted.add(node);\n node.pendingValidation = false;\n pendingComputedValidations.delete(node);\n if (pendingComputedValidations.size === 0) signalGraphPlanWorkNotifier?.();\n if (node.observedCount > 0) {\n planComputedValidations++;\n try {\n node.validate();\n } catch (error) {\n if (\n error instanceof AggregateError &&\n error.message === 'Pibbl signal observer notifications failed.'\n ) {\n failures.push(...error.errors);\n } else {\n failures.push(error);\n }\n if (node.state === 'check') enqueueComputedValidation(node);\n }\n }\n }\n } finally {\n flushingPendingComputedValidations = false;\n }\n throwSignalObserverFailures(failures);\n}\n\n/** @internal Whether the realm scheduler has graph Plan work to service. */\nexport function hasPendingComputedValidations(): boolean {\n return pendingComputedValidations.size > 0;\n}\n\n/** @internal Connects graph liveness to its host-agnostic scheduler owner. */\nexport function setSignalGraphPlanWorkNotifier(notifier: () => void): void {\n signalGraphPlanWorkNotifier = notifier;\n if (pendingComputedValidations.size > 0) notifier();\n}\n\n/**\n * Runs a callback without recording its signal reads as dependencies of the current consumer.\n *\n * @param callback - Synchronous work whose reads should not register dependencies.\n * @returns The callback's return value.\n *\n * @see {@link Signal}\n * @see {@link computed}\n */\nexport function untracked<T>(callback: () => T): T {\n const previous = activeSignalDependencyCollector;\n activeSignalDependencyCollector = undefined;\n try {\n return callback();\n } finally {\n activeSignalDependencyCollector = previous;\n }\n}\n\n/**\n * Checks the nominal Pibbl signal identity rather than accepting objects that merely have a get\n * method.\n *\n * @param value - Value to check for Pibbl's nominal signal brand.\n * @returns True if the value is a Pibbl signal, narrowing its type accordingly. See {@link Signal}.\n *\n * @see {@link Signal}\n */\nexport function isSignal(value: unknown): value is Signal<unknown> {\n return typeof value === 'object' && value !== null && signalValues.has(value);\n}\n\nexport function getSignalNode<T>(value: Signal<T>): SignalNode<T> {\n const node =\n typeof value === 'object' && value !== null ? signalNodes.get(value) :\n undefined;\n if (node === undefined) {\n throw new TypeError('Expected a signal created by signal().');\n }\n return node as SignalNode<T>;\n}\n\ninterface StagedSignalValue {\n readonly node: SignalNode<unknown>;\n value: unknown;\n writer: object;\n authorization: unknown;\n provenance: object | undefined;\n previous: StagedSignalValue | undefined;\n}\n\ninterface SignalCommitBatchState {\n readonly staged: Map<SignalNode<unknown>, StagedSignalValue>;\n readonly lifecycles: Map<object, SignalCommitLifecycle>;\n}\n\n/** @internal Couples a non-signal resource publication to a staged writer. */\nexport interface SignalCommitLifecycle {\n /** Runs after all fallible commit validation and before signal observers. */\n apply(): void;\n /** Restores a completed apply if a later writer cannot publish. */\n rollback?(): void;\n /** Releases a candidate when its writer never reaches Commit. */\n abort(): void;\n}\n\nconst signalCommitBatchStates = new WeakMap<\n SignalCommitBatch,\n SignalCommitBatchState\n>();\n\nexport interface SignalCommitBatch {\n read<T>(signal: WritableSignal<T>): T;\n stage<T>(signal: WritableSignal<T>, value: T, writer: object): void;\n registerLifecycle(writer: object, lifecycle: SignalCommitLifecycle): void;\n discardWriter(writer: object): void;\n commit(onApplied?: () => void): void;\n clear(): void;\n}\n\nexport function createSignalCommitBatch(): SignalCommitBatch {\n const staged = new Map<SignalNode<unknown>, StagedSignalValue>();\n\n const batch: SignalCommitBatch = {\n read<T>(value: WritableSignal<T>): T {\n const node = getSignalNode(value) as SignalNode<T>;\n const candidate = staged.get(node as SignalNode<unknown>);\n return candidate === undefined ? node.value : candidate.value as T;\n },\n stage<T>(value: WritableSignal<T>, nextValue: T, writer: object): void {\n stageSignalCommitBatchCandidate(\n staged,\n value,\n nextValue,\n writer,\n undefined,\n );\n },\n registerLifecycle(writer: object, lifecycle: SignalCommitLifecycle): void {\n const prior = state.lifecycles.get(writer);\n if (prior) abortLifecycle(prior);\n state.lifecycles.set(writer, lifecycle);\n },\n discardWriter(writer: object): void {\n for (const [node, candidate] of staged) {\n if (candidate.writer === writer) {\n staged.delete(node);\n }\n }\n const lifecycle = state.lifecycles.get(writer);\n state.lifecycles.delete(writer);\n if (lifecycle) abortLifecycle(lifecycle);\n },\n commit(onApplied?: () => void): void {\n const candidates = [...staged.values()];\n staged.clear();\n try {\n for (const candidate of candidates) {\n signalWriterLeasePolicy?.assertStagedWriteAllowed(\n candidate.node,\n candidate.writer,\n candidate.authorization,\n );\n }\n\n const changed: StagedSignalValue[] = [];\n for (const candidate of candidates) {\n const node = candidate.node;\n if (!node.equals(node.value, candidate.value)) {\n changed.push(candidate);\n }\n }\n\n const changedWriters = new Set(changed.map(candidate => candidate.writer));\n const applied: SignalCommitLifecycle[] = [];\n for (const candidate of candidates) {\n const lifecycle = state.lifecycles.get(candidate.writer);\n state.lifecycles.delete(candidate.writer);\n if (!lifecycle) continue;\n if (!changedWriters.has(candidate.writer)) {\n abortLifecycle(lifecycle);\n continue;\n }\n try {\n lifecycle.apply();\n applied.push(lifecycle);\n } catch (error) {\n abortLifecycle(lifecycle);\n for (const appliedLifecycle of applied.reverse()) {\n try { appliedLifecycle.rollback?.(); } catch {}\n abortLifecycle(appliedLifecycle);\n }\n throw error;\n }\n }\n for (const candidate of changed) {\n const node = candidate.node;\n recordPublicBatchEntry(node);\n node.value = candidate.value;\n node.version++;\n }\n onApplied?.();\n const failures: unknown[] = [];\n for (const candidate of changed) {\n failures.push(...notifySignalObservers(candidate.node));\n }\n for (const lifecycle of state.lifecycles.values()) abortLifecycle(lifecycle);\n state.lifecycles.clear();\n throwSignalObserverFailures(failures);\n } catch (error) {\n for (const lifecycle of state.lifecycles.values()) abortLifecycle(lifecycle);\n state.lifecycles.clear();\n throw error;\n }\n },\n clear(): void {\n staged.clear();\n for (const lifecycle of state.lifecycles.values()) abortLifecycle(lifecycle);\n state.lifecycles.clear();\n },\n };\n const state: SignalCommitBatchState = { staged, lifecycles: new Map() };\n signalCommitBatchStates.set(batch, state);\n return batch;\n}\n\nfunction abortLifecycle(lifecycle: SignalCommitLifecycle): void {\n try {\n lifecycle.abort();\n } catch {\n // Abort is cleanup for an already failing or discarded transaction. It must\n // not replace the originating scheduler/commit failure.\n }\n}\n\n/** @internal Stages a candidate with rollback provenance for one owner. */\nexport function stageSignalCommitBatchWithProvenance<T>(\n batch: SignalCommitBatch,\n provenance: object,\n signal: WritableSignal<T>,\n value: T,\n writer: object,\n): void {\n stageSignalCommitBatchCandidate(\n requireSignalCommitBatchState(batch).staged,\n signal,\n value,\n writer,\n provenance,\n );\n}\n\n/** @internal Discards only candidates staged with one owner's provenance. */\nexport function discardSignalCommitBatchProvenance(\n batch: SignalCommitBatch,\n provenance: object,\n): void {\n discardSignalCommitBatchCandidates(\n requireSignalCommitBatchState(batch).staged,\n candidate => candidate.provenance === provenance,\n );\n}\n\n/** @internal Applies friend discardWriter semantics inside one owner provenance. */\nexport function discardSignalCommitBatchWriterForProvenance(\n batch: SignalCommitBatch,\n provenance: object,\n writer: object,\n): void {\n discardSignalCommitBatchCandidates(\n requireSignalCommitBatchState(batch).staged,\n candidate =>\n candidate.provenance === provenance && candidate.writer === writer,\n );\n}\n\nfunction stageSignalCommitBatchCandidate<T>(\n staged: Map<SignalNode<unknown>, StagedSignalValue>,\n value: WritableSignal<T>,\n nextValue: T,\n writer: object,\n provenance: object | undefined,\n): void {\n const node = getSignalNode(value) as SignalNode<T>;\n const unknownNode = node as SignalNode<unknown>;\n writePolicyStack[writePolicyStack.length - 1]?.(unknownNode, 'staged');\n staged.set(unknownNode, {\n node: unknownNode,\n value: nextValue,\n writer,\n authorization: signalWriterLeasePolicy?.captureStagedWrite(\n unknownNode,\n writer,\n ),\n provenance,\n previous: staged.get(unknownNode),\n });\n}\n\nfunction requireSignalCommitBatchState(\n batch: SignalCommitBatch,\n): SignalCommitBatchState {\n const state = signalCommitBatchStates.get(batch);\n if (!state) throw new TypeError('Expected a Pibbl signal Commit batch.');\n return state;\n}\n\nfunction discardSignalCommitBatchCandidates(\n staged: Map<SignalNode<unknown>, StagedSignalValue>,\n discard: (candidate: StagedSignalValue) => boolean,\n): void {\n for (const [node, candidate] of staged) {\n const retained = discardStagedSignalCandidates(candidate, discard);\n if (retained === undefined) staged.delete(node);\n else staged.set(node, retained);\n }\n}\n\nfunction discardStagedSignalCandidates(\n candidate: StagedSignalValue | undefined,\n discard: (candidate: StagedSignalValue) => boolean,\n): StagedSignalValue | undefined {\n const retained: StagedSignalValue[] = [];\n let current = candidate;\n while (current !== undefined) {\n if (!discard(current)) retained.push(current);\n current = current.previous;\n }\n let previous: StagedSignalValue | undefined;\n for (let index = retained.length - 1; index >= 0; index--) {\n retained[index].previous = previous;\n previous = retained[index];\n }\n return previous;\n}\n\nexport function withSignalTracking<T>(\n collector: SignalDependencyCollector,\n callback: () => T,\n): T {\n const previous = activeSignalDependencyCollector;\n activeSignalDependencyCollector = collector;\n try {\n return callback();\n } finally {\n activeSignalDependencyCollector = previous;\n }\n}\n\nexport function withSignalWritePolicy<T>(\n policy: SignalWritePolicy,\n callback: () => T,\n): T {\n writePolicyStack.push(policy);\n try {\n return callback();\n } finally {\n writePolicyStack.pop();\n }\n}\n\nexport function withSignalWriteForbidden<T>(\n reason: string,\n callback: () => T,\n): T {\n return withSignalWritePolicy(() => {\n throw new Error(reason);\n }, callback);\n}\n\nexport function withDirectSignalWriteForbidden<T>(\n reason: string,\n callback: () => T,\n): T {\n return withSignalWritePolicy((_node, operation) => {\n if (operation === 'direct') throw new Error(reason);\n }, callback);\n}\n\n/** @internal Checks the active direct-write policy without mutating a signal. */\nexport function assertSignalCommandAllowed(): void {\n writePolicyStack[writePolicyStack.length - 1]?.(\n commandAssertionNode,\n 'direct',\n );\n}\n\n/** @internal Preflight a direct signal writer without changing values or versions. */\nexport function assertDirectSignalWriteAllowed(value: Signal<unknown>): void {\n const node = getSignalNode(value);\n writePolicyStack[writePolicyStack.length - 1]?.(node, 'direct');\n signalWriterLeasePolicy?.assertDirectWriteAllowed(node);\n}\n\n/** @internal Installs the singleton policy that validates active writer leases. */\nexport function installSignalWriterLeasePolicy(\n policy: SignalWriterLeasePolicy,\n): void {\n if (signalWriterLeasePolicy !== undefined && signalWriterLeasePolicy !== policy) {\n throw new Error('Pibbl signal writer-lease policy is already installed.');\n }\n signalWriterLeasePolicy = policy;\n}\n\nfunction isComputedSignalNode(\n node: SignalNode<unknown>,\n): node is ComputedSignalNode<unknown> {\n return 'kind' in node && node.kind === 'computed';\n}\n\nfunction enqueueComputedValidation(node: ComputedSignalNode<unknown>): void {\n if (node.observedCount === 0 || node.pendingValidation) return;\n node.pendingValidation = true;\n const wasEmpty = pendingComputedValidations.size === 0;\n pendingComputedValidations.add(node);\n if (wasEmpty) signalGraphPlanWorkNotifier?.();\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import type {\n Signal,\n SignalEquals,\n SignalOptions,\n WritableSignal,\n} from './types.js';\nimport type { PibblRenderTransaction } from '../types.js';\nimport {\n beginReactiveCollection,\n collectReactiveDependency,\n finishReactiveCollection,\n linkReactiveEdgeToSource,\n notifyReactiveEdges,\n unlinkReactiveEdgeFromSource,\n type ReactiveEdge,\n type ReactiveNotificationCursor,\n type SignalDependencyConsumer,\n} from './edge.js';\n\nconst signalNodes = new WeakMap<object, SignalNode<unknown>>();\nconst signalValues = new WeakSet<object>();\n\ntype ComputedState = 'clean' | 'check' | 'evaluating';\n\ninterface ComputedSignalNode<T>\n extends SignalNode<T>, SignalDependencyConsumer {\n readonly kind: 'computed';\n compute(): T;\n state: ComputedState;\n hasValue: boolean;\n hasError: boolean;\n error: unknown;\n invalidate(): void;\n validate(): void;\n observedCount: number;\n pendingValidation: boolean;\n observe(): () => void;\n adoptCandidate(\n candidate: ComputedSignalNode<T>,\n compute: () => T,\n changed: boolean,\n readers: ReadonlySet<SignalDependencyCollector>,\n ): void;\n replaceCompute(compute: () => T, invalidate: boolean): void;\n}\n\n/** @internal One isolated formula generation owned by a render transaction. */\nexport interface ComputedFormulaCandidate<T> {\n readonly signal: Signal<T>;\n readonly readers: Set<SignalDependencyCollector>;\n changed: boolean;\n evaluated: boolean;\n value: T | undefined;\n}\n\nexport interface SignalNode<T> {\n value: T;\n equals: SignalEquals<T>;\n debugName: string | undefined;\n version: number;\n observerHead: ReactiveEdge | undefined;\n observerTail: ReactiveEdge | undefined;\n observerCount: number;\n activeObserverCursor: ReactiveNotificationCursor | undefined;\n observe?(): () => void;\n validate?(): void;\n}\n\ntype SignalRenderProvisionStatus = 'pending' | 'success' | 'failure';\n\ninterface SignalRenderProvisionEntry {\n readonly transaction: PibblRenderTransaction;\n value: unknown;\n status: SignalRenderProvisionStatus;\n}\n\ninterface SignalRenderProvisionState {\n baseValue: unknown;\n readonly entries: SignalRenderProvisionEntry[];\n readonly entriesByTransaction: Map<\n PibblRenderTransaction,\n SignalRenderProvisionEntry\n >;\n}\n\n/** @internal The declared effect of one receiver-owned signal input. */\nexport type SignalDependencyRole =\n | 'structure'\n | 'layout'\n | 'measurement'\n | 'paint'\n | 'transform'\n | 'interaction'\n | 'unknown';\nexport type SignalDependencyRoleInput = SignalDependencyRole | number;\n\nexport interface SignalDependencyCollector {\n addDependency(node: SignalNode<unknown>, role?: SignalDependencyRoleInput): void;\n}\n\nexport type SignalWriteOperation = 'direct' | 'staged';\n\nexport type SignalWritePolicy = (\n node: SignalNode<unknown>,\n operation: SignalWriteOperation,\n) => void;\n\n/** @internal Authorization seam owned by the animation writer-lease registry. */\nexport interface SignalWriterLeasePolicy {\n assertDirectWriteAllowed(node: SignalNode<unknown>): void;\n captureStagedWrite(\n node: SignalNode<unknown>,\n writer: object,\n ): unknown;\n assertStagedWriteAllowed(\n node: SignalNode<unknown>,\n writer: object,\n authorization: unknown,\n ): void;\n}\n\nlet activeSignalDependencyCollector: SignalDependencyCollector | undefined;\nlet activeSignalDependencyRole: SignalDependencyRole | undefined;\nconst writePolicyStack: SignalWritePolicy[] = [];\nconst computedStack: ComputedSignalNode<unknown>[] = [];\nfunction createSignalNodeState<T>(\n value: T,\n equals: SignalEquals<T>,\n debugName: string | undefined,\n): SignalNode<T> {\n return {\n value,\n equals,\n debugName,\n version: 0,\n observerHead: undefined,\n observerTail: undefined,\n observerCount: 0,\n activeObserverCursor: undefined,\n };\n}\n\nconst commandAssertionNode = createSignalNodeState<unknown>(\n undefined,\n Object.is,\n undefined,\n);\nconst activeSignalRenderProvisions = new WeakMap<\n SignalNode<unknown>,\n SignalRenderProvisionState\n>();\nconst pendingComputedValidations = new Set<ComputedSignalNode<unknown>>();\nlet flushingPendingComputedValidations = false;\nlet rendererConsumers = 0;\nlet rendererEdges = 0;\nlet createdRendererConsumers = 0;\nlet releasedRendererConsumers = 0;\nlet createdRendererEdges = 0;\nlet releasedRendererEdges = 0;\nlet signalCommitNotifications = 0;\nlet planComputedValidations = 0;\nlet computedSourceEdges = 0;\nlet createdComputedSourceEdges = 0;\nlet releasedComputedSourceEdges = 0;\nlet lazyRendererConsumers = 0;\nlet reusedRendererEdges = 0;\nlet plainInputResolutions = 0;\nlet signalInputResolutions = 0;\nlet shallowInputCopies = 0;\nlet receiverInputProvisions = 0;\nlet adoptedReceiverInputProvisions = 0;\nlet rolledBackReceiverInputProvisions = 0;\nlet batchedObserverInvalidations = 0;\nlet structureInputInvalidations = 0;\nlet layoutInputInvalidations = 0;\nlet measurementInputInvalidations = 0;\nlet paintInputInvalidations = 0;\nlet transformInputInvalidations = 0;\nlet interactionInputInvalidations = 0;\nlet unknownInputInvalidations = 0;\nlet reactionConsumers = 0;\nlet reactionEdges = 0;\nlet reactionRuns = 0;\nlet reactionCleanups = 0;\nlet reactionFailures = 0;\nlet signalGraphPlanWorkNotifier: (() => void) | undefined;\nlet signalWriterLeasePolicy: SignalWriterLeasePolicy | undefined;\n\ninterface PublicSignalBatchEntry {\n readonly value: unknown;\n readonly computedHasError: boolean | undefined;\n readonly computedError: unknown;\n}\n\ninterface PublicSignalBatchState {\n readonly entries: Map<SignalNode<unknown>, PublicSignalBatchEntry>;\n readonly failures: unknown[];\n}\n\nlet activePublicSignalBatch: PublicSignalBatchState | undefined;\n\nexport interface SignalGraphSnapshot {\n readonly rendererConsumers: number;\n readonly rendererEdges: number;\n readonly computedSourceEdges: number;\n readonly pendingComputedValidations: number;\n readonly createdRendererConsumers: number;\n readonly releasedRendererConsumers: number;\n readonly createdRendererEdges: number;\n readonly releasedRendererEdges: number;\n readonly signalCommitNotifications: number;\n readonly planComputedValidations: number;\n readonly createdComputedSourceEdges: number;\n readonly releasedComputedSourceEdges: number;\n readonly lazyRendererConsumers: number;\n readonly reusedRendererEdges: number;\n readonly plainInputResolutions: number;\n readonly signalInputResolutions: number;\n readonly shallowInputCopies: number;\n readonly receiverInputProvisions: number;\n readonly adoptedReceiverInputProvisions: number;\n readonly rolledBackReceiverInputProvisions: number;\n readonly batchedObserverInvalidations: number;\n readonly structureInputInvalidations: number;\n readonly layoutInputInvalidations: number;\n readonly measurementInputInvalidations: number;\n readonly paintInputInvalidations: number;\n readonly transformInputInvalidations: number;\n readonly interactionInputInvalidations: number;\n readonly unknownInputInvalidations: number;\n readonly reactionConsumers: number;\n readonly reactionEdges: number;\n readonly reactionRuns: number;\n readonly reactionCleanups: number;\n readonly reactionFailures: number;\n}\n\n/** @internal Deterministic ownership and structural evidence for tests. */\nexport function signalGraphSnapshot(): SignalGraphSnapshot {\n return Object.freeze({\n rendererConsumers,\n rendererEdges,\n computedSourceEdges,\n pendingComputedValidations: pendingComputedValidations.size,\n createdRendererConsumers,\n releasedRendererConsumers,\n createdRendererEdges,\n releasedRendererEdges,\n signalCommitNotifications,\n planComputedValidations,\n createdComputedSourceEdges,\n releasedComputedSourceEdges,\n lazyRendererConsumers,\n reusedRendererEdges,\n plainInputResolutions,\n signalInputResolutions,\n shallowInputCopies,\n receiverInputProvisions,\n adoptedReceiverInputProvisions,\n rolledBackReceiverInputProvisions,\n batchedObserverInvalidations,\n structureInputInvalidations,\n layoutInputInvalidations,\n measurementInputInvalidations,\n paintInputInvalidations,\n transformInputInvalidations,\n interactionInputInvalidations,\n unknownInputInvalidations,\n reactionConsumers,\n reactionEdges,\n reactionRuns,\n reactionCleanups,\n reactionFailures,\n });\n}\n\n/** @internal Records roles carried by a receiver edge when its source changes. */\nexport function recordSignalInputInvalidation(roles: number): void {\n if (roles & 1) structureInputInvalidations++;\n if (roles & 2) layoutInputInvalidations++;\n if (roles & 4) measurementInputInvalidations++;\n if (roles & 8) paintInputInvalidations++;\n if (roles & 16) transformInputInvalidations++;\n if (roles & 32) interactionInputInvalidations++;\n if (roles & 64) unknownInputInvalidations++;\n}\n\n/** @internal Records one component consumer materialized by its first read. */\nexport function recordLazyRendererConsumerCreated(): void {\n lazyRendererConsumers++;\n}\n\n/** @internal Records one render edge reused by recollection or restoration. */\nexport function recordRendererEdgeReused(restored = false): void {\n if (restored) rendererEdges++;\n reusedRendererEdges++;\n}\n\n/** @internal Records one declared plain input that took the identity path. */\nexport function recordPlainInputResolution(): void {\n plainInputResolutions++;\n}\n\n/** @internal Records one declared signal-valued input read. */\nexport function recordSignalInputResolution(): void {\n signalInputResolutions++;\n}\n\n/** @internal Records one copy-on-signal props or style object. */\nexport function recordShallowInputCopy(): void {\n shallowInputCopies++;\n}\n\n/** @internal Records one pre-evaluation receiver input provision. */\nexport function recordReceiverInputProvisionCreated(): void {\n receiverInputProvisions++;\n}\n\n/** @internal Records one provision adopted by its receiver generation. */\nexport function recordReceiverInputProvisionAdopted(): void {\n receiverInputProvisions--;\n adoptedReceiverInputProvisions++;\n}\n\n/** @internal Records one provision discarded without publication. */\nexport function recordReceiverInputProvisionRolledBack(): void {\n receiverInputProvisions--;\n rolledBackReceiverInputProvisions++;\n}\n\n/** @internal Adds one already-read source to the active dependency collector. */\nexport function trackSignalDependency(\n node: SignalNode<unknown>,\n role?: SignalDependencyRoleInput,\n): void {\n activeSignalDependencyCollector?.addDependency(\n node,\n role ?? activeSignalDependencyRole,\n );\n}\n\n/** @internal Tags reads while a declared receiver input is resolved. */\nexport function withSignalDependencyRole<T>(\n role: SignalDependencyRole,\n callback: () => T,\n): T {\n const previous = activeSignalDependencyRole;\n activeSignalDependencyRole = role;\n try {\n return callback();\n } finally {\n activeSignalDependencyRole = previous;\n }\n}\n\n/** @internal Records one observer invalidation deduplicated by a public batch. */\nexport function recordBatchedObserverInvalidation(): void {\n batchedObserverInvalidations++;\n}\n\n/** @internal Records one live component-owned reaction consumer. */\nexport function recordReactionConsumerCreated(): void {\n reactionConsumers++;\n}\n\n/** @internal Records final release of one reaction consumer. */\nexport function recordReactionConsumerReleased(): void {\n reactionConsumers--;\n}\n\n/** @internal Records one live reaction source edge. */\nexport function recordReactionEdgeCreated(): void {\n reactionEdges++;\n}\n\n/** @internal Records release of one reaction source edge. */\nexport function recordReactionEdgeReleased(): void {\n reactionEdges--;\n}\n\n/** @internal Records one reaction setup attempt. */\nexport function recordReactionRun(): void {\n reactionRuns++;\n}\n\n/** @internal Records one exact cleanup generation execution. */\nexport function recordReactionCleanup(): void {\n reactionCleanups++;\n}\n\n/** @internal Records one setup or cleanup failure. */\nexport function recordReactionFailure(): void {\n reactionFailures++;\n}\n\n/** @internal Records one live renderer consumer for test diagnostics. */\nexport function recordRendererConsumerCreated(): void {\n rendererConsumers++;\n createdRendererConsumers++;\n}\n\n/** @internal Records release of one renderer consumer for test diagnostics. */\nexport function recordRendererConsumerReleased(): void {\n rendererConsumers--;\n releasedRendererConsumers++;\n}\n\n/** @internal Records one live renderer dependency edge for test diagnostics. */\nexport function recordRendererEdgeCreated(): void {\n rendererEdges++;\n createdRendererEdges++;\n}\n\n/** @internal Records release of one renderer dependency edge for tests. */\nexport function recordRendererEdgeReleased(): void {\n rendererEdges--;\n releasedRendererEdges++;\n}\n\n/**\n * Runs a synchronous callback while coalescing signal notifications until the outer batch\n * completes.\n *\n * @param callback - Synchronous work whose signal notifications are grouped.\n * @returns The callback's return value.\n *\n * @see {@link signal}\n * @see {@link computed}\n * @see {@link WritableSignal}\n */\nexport function batch<T>(callback: () => T): T {\n if (activePublicSignalBatch !== undefined) return callback();\n\n const state: PublicSignalBatchState = {\n entries: new Map(),\n failures: [],\n };\n activePublicSignalBatch = state;\n let result!: T;\n let callbackFailure: unknown;\n let callbackFailed = false;\n try {\n result = callback();\n } catch (error) {\n callbackFailed = true;\n callbackFailure = error;\n }\n\n const notificationFailures = flushPublicSignalBatch(state);\n if (callbackFailed) {\n if (notificationFailures.length === 0) throw callbackFailure;\n throw new AggregateError(\n [callbackFailure, ...notificationFailures],\n 'Pibbl signal batch callback and observer notifications failed.',\n );\n }\n throwSignalObserverFailures(notificationFailures);\n return result;\n}\n\nfunction recordPublicBatchEntry(node: SignalNode<unknown>): void {\n const state = activePublicSignalBatch;\n if (state === undefined || state.entries.has(node)) return;\n const computedNode = isComputedSignalNode(node) ? node : undefined;\n state.entries.set(node, {\n value: node.value,\n computedHasError: computedNode?.hasError,\n computedError: computedNode?.error,\n });\n}\n\nfunction flushPublicSignalBatch(state: PublicSignalBatchState): unknown[] {\n try {\n flushPendingComputedValidations();\n } catch (error) {\n if (\n error instanceof AggregateError &&\n error.message === 'Pibbl signal observer notifications failed.'\n ) {\n state.failures.push(...error.errors);\n } else {\n state.failures.push(error);\n }\n }\n\n const consumers = new Map<SignalDependencyConsumer, {\n readonly consumer: SignalDependencyConsumer;\n readonly source: SignalNode<unknown>;\n roles: number;\n }>();\n for (const [source, entry] of state.entries) {\n let unchanged = false;\n try {\n unchanged = publicBatchEntryEquals(source, entry);\n } catch (error) {\n state.failures.push(error);\n }\n if (unchanged) continue;\n signalCommitNotifications++;\n for (\n let edge = source.observerHead;\n edge !== undefined;\n edge = edge.sourceNext\n ) {\n const consumer = edge.consumer;\n if (consumer.propagateInvalidation === true) continue;\n const existing = consumers.get(consumer);\n if (existing !== undefined) {\n existing.roles |= edge.dependencyRoles;\n recordBatchedObserverInvalidation();\n continue;\n }\n consumers.set(consumer, { consumer, source, roles: edge.dependencyRoles });\n }\n }\n\n activePublicSignalBatch = undefined;\n for (const { consumer, source, roles } of consumers.values()) {\n try {\n consumer.notify(source, roles);\n } catch (error) {\n state.failures.push(error);\n }\n }\n return state.failures;\n}\n\nfunction publicBatchEntryEquals(\n node: SignalNode<unknown>,\n entry: PublicSignalBatchEntry,\n): boolean {\n if (isComputedSignalNode(node)) {\n if (node.hasError !== entry.computedHasError) return false;\n if (node.hasError && node.error !== entry.computedError) return false;\n }\n return node.equals(entry.value, node.value);\n}\n\nfunction computedWriteErrorLabel(node: SignalNode<unknown>): string {\n return node.debugName === undefined ?\n 'Cannot write to a signal while evaluating a computed signal.' :\n `Cannot write to a signal while evaluating computed signal \"${node.debugName}\".`;\n}\n\nfunction notifySignalObservers(node: SignalNode<unknown>): unknown[] {\n const batchState = activePublicSignalBatch;\n if (batchState !== undefined) {\n batchState.failures.push(...notifyComputedInvalidationObservers(node));\n return [];\n }\n signalCommitNotifications++;\n return notifyReactiveEdges(node);\n}\n\nfunction notifyComputedInvalidationObservers(node: SignalNode<unknown>): unknown[] {\n return notifyReactiveEdges(\n node,\n consumer => consumer.propagateInvalidation === true,\n );\n}\n\nfunction notifyRendererInvalidationObservers(node: SignalNode<unknown>): unknown[] {\n return notifyReactiveEdges(\n node,\n consumer => consumer.renderInvalidation === true,\n );\n}\n\nfunction throwSignalObserverFailures(failures: readonly unknown[]): void {\n if (failures.length > 0) {\n throw new AggregateError(failures, 'Pibbl signal observer notifications failed.');\n }\n}\n\n/**\n * Creates a synchronous writable signal with configurable equality and an optional diagnostic\n * name.\n *\n * @param initialValue - Value stored before the first write.\n * @param options - Equality comparison and optional diagnostic name. See {@link SignalOptions}.\n * @returns A writable signal holding the initial value. See {@link WritableSignal}.\n *\n * @see {@link SignalOptions}\n * @see {@link WritableSignal}\n */\nexport function signal<T>(\n initialValue: T,\n options: SignalOptions<T> = {},\n): WritableSignal<T> {\n const equals = options.equals ?? Object.is;\n const debugName = options.debugName;\n const node = createSignalNodeState(initialValue, equals, debugName);\n\n let readonlySignal: Signal<T> | undefined;\n const read = (): T => {\n activeSignalDependencyCollector?.addDependency(\n node as SignalNode<unknown>,\n activeSignalDependencyRole,\n );\n return node.value;\n };\n const assertWriteAllowed = (): void => {\n writePolicyStack[writePolicyStack.length - 1]?.(\n node as SignalNode<unknown>,\n 'direct',\n );\n signalWriterLeasePolicy?.assertDirectWriteAllowed(node as SignalNode<unknown>);\n };\n const commit = (nextValue: T): void => {\n if (node.equals(node.value, nextValue)) {\n return;\n }\n\n recordPublicBatchEntry(node as SignalNode<unknown>);\n node.value = nextValue;\n node.version++;\n throwSignalObserverFailures(notifySignalObservers(node as SignalNode<unknown>));\n };\n const writable = {\n get: read,\n set(nextValue: T): void {\n assertWriteAllowed();\n commit(nextValue);\n },\n update(updateValue: (current: T) => T): void {\n assertWriteAllowed();\n commit(updateValue(node.value));\n },\n asReadonly(): Signal<T> {\n if (readonlySignal === undefined) {\n readonlySignal = { get: read } as Signal<T>;\n signalValues.add(readonlySignal);\n signalNodes.set(readonlySignal, node as SignalNode<unknown>);\n }\n return readonlySignal;\n },\n } as WritableSignal<T>;\n\n signalValues.add(writable);\n signalNodes.set(writable, node as SignalNode<unknown>);\n return writable;\n}\n\n/**\n * @internal Presents a provisional value to reads and computed dependencies\n * during one render without publishing an ordinary signal notification.\n * This is reserved for a not-yet-successfully-mounted owner whose render\n * transaction owns acceptance or restoration of every overlapping preview.\n */\nexport function provisionSignalValueForRender<T>(\n value: WritableSignal<T>,\n nextValue: T,\n transaction: PibblRenderTransaction,\n): void {\n const node = getSignalNode(value) as SignalNode<unknown>;\n const publishComputedVersion = (next: unknown): void => {\n node.value = next;\n node.version++;\n throwSignalObserverFailures(\n notifyComputedInvalidationObservers(node),\n );\n };\n let state = activeSignalRenderProvisions.get(node);\n if (state === undefined) {\n state = {\n baseValue: node.value,\n entries: [],\n entriesByTransaction: new Map(),\n };\n activeSignalRenderProvisions.set(node, state);\n }\n\n const effectiveEntry = (): SignalRenderProvisionEntry | undefined => {\n for (let index = state.entries.length - 1; index >= 0; index--) {\n const entry = state.entries[index];\n if (entry.status !== 'failure') return entry;\n }\n return undefined;\n };\n const publishEffectiveValue = (\n forceEntry?: SignalRenderProvisionEntry,\n ): boolean => {\n const entry = effectiveEntry();\n const effectiveValue = entry?.value ?? state.baseValue;\n if (\n (forceEntry !== undefined && entry === forceEntry) ||\n !Object.is(node.value, effectiveValue)\n ) {\n publishComputedVersion(effectiveValue);\n return true;\n }\n return false;\n };\n\n let entry = state.entriesByTransaction.get(transaction);\n if (entry === undefined) {\n entry = { transaction, value: nextValue, status: 'pending' };\n state.entries.push(entry);\n state.entriesByTransaction.set(transaction, entry);\n const provisionState = state;\n const provisionEntry = entry;\n transaction.onFinish(success => {\n if (provisionEntry.status !== 'pending') return;\n provisionEntry.status = success ? 'success' : 'failure';\n\n while (\n provisionState.entries[0]?.status !== 'pending' &&\n provisionState.entries.length > 0\n ) {\n const settled = provisionState.entries.shift()!;\n provisionState.entriesByTransaction.delete(settled.transaction);\n if (settled.status === 'success') {\n provisionState.baseValue = settled.value;\n }\n }\n\n const effectiveValueChanged = publishEffectiveValue();\n if (!success && effectiveValueChanged) {\n throwSignalObserverFailures(notifyRendererInvalidationObservers(node));\n }\n if (provisionState.entries.length === 0) {\n activeSignalRenderProvisions.delete(node);\n }\n });\n }\n entry.value = nextValue;\n publishEffectiveValue(entry);\n}\n\n/**\n * Creates a lazy, cached readonly signal whose dependencies are tracked during evaluation.\n *\n * @param compute - Synchronous calculation whose signal reads become dependencies.\n * @param options - Equality comparison and optional diagnostic name. See {@link SignalOptions}.\n * @returns A readonly, lazy, cached signal that recomputes when its dependencies change. See\n * {@link Signal} .\n *\n * @see {@link SignalOptions}\n * @see {@link Signal}\n */\nexport function computed<T>(\n compute: () => T,\n options: SignalOptions<T> = {},\n): Signal<T> {\n const node = Object.assign(\n createSignalNodeState(\n undefined as T,\n options.equals ?? Object.is,\n options.debugName,\n ),\n {\n kind: 'computed',\n compute,\n state: 'check',\n hasValue: false,\n hasError: false,\n error: undefined,\n dependencyHead: undefined,\n dependencyTail: undefined,\n dependencyFreeHead: undefined,\n dependencyFreeCount: 0,\n dependencyCount: 0,\n dependencyHighWater: 0,\n collectionCursor: undefined,\n collectionGeneration: 0,\n observedCount: 0,\n pendingValidation: false,\n propagateInvalidation: true,\n addDependency(dependency: SignalNode<unknown>): void {\n if (\n !isComputedSignalNode(dependency) ||\n dependency.state !== 'evaluating'\n ) {\n collectReactiveDependency(node, dependency);\n }\n },\n notify: () => {},\n observe: () => () => {},\n invalidate: () => {},\n validate: () => {},\n adoptCandidate: () => {},\n replaceCompute: () => {},\n },\n ) as ComputedSignalNode<T>;\n\n const notifyObservers = (): unknown[] => {\n return notifySignalObservers(node as SignalNode<unknown>);\n };\n\n const enqueueValidation = (): void => {\n if (node.observedCount === 0 || node.pendingValidation) {\n return;\n }\n node.pendingValidation = true;\n const wasEmpty = pendingComputedValidations.size === 0;\n pendingComputedValidations.add(node as ComputedSignalNode<unknown>);\n if (wasEmpty) signalGraphPlanWorkNotifier?.();\n };\n\n const removePendingValidation = (): void => {\n if (!node.pendingValidation) return;\n node.pendingValidation = false;\n pendingComputedValidations.delete(node as ComputedSignalNode<unknown>);\n if (pendingComputedValidations.size === 0) signalGraphPlanWorkNotifier?.();\n };\n\n const invalidate = (): void => {\n if (node.state !== 'clean') {\n return;\n }\n node.state = 'check';\n enqueueValidation();\n throwSignalObserverFailures(\n notifyComputedInvalidationObservers(node as SignalNode<unknown>),\n );\n };\n node.notify = invalidate;\n\n const acquireDependency = (edge: ReactiveEdge): void => {\n if (edge.sourceLinked) return;\n const dependency = edge.source!;\n linkReactiveEdgeToSource(edge, dependency.observe?.());\n computedSourceEdges++;\n createdComputedSourceEdges++;\n };\n\n const releaseDependency = (edge: ReactiveEdge): void => {\n if (!edge.sourceLinked) return;\n unlinkReactiveEdgeFromSource(edge);\n computedSourceEdges--;\n releasedComputedSourceEdges++;\n };\n\n const acquireDependencies = (): void => {\n for (\n let edge = node.dependencyHead;\n edge !== undefined;\n edge = edge.consumerNext\n ) {\n acquireDependency(edge);\n }\n };\n\n const releaseDependencies = (): void => {\n for (\n let edge = node.dependencyHead;\n edge !== undefined;\n edge = edge.consumerNext\n ) {\n releaseDependency(edge);\n }\n };\n\n const finishDependencies = (): void => {\n finishReactiveCollection(\n node,\n edge => {\n if (node.observedCount > 0) acquireDependency(edge);\n edge.observedVersion = edge.source!.version;\n edge.collectionKind = undefined;\n },\n releaseDependency,\n );\n };\n\n const cycleError = (): Error => {\n const start = computedStack.indexOf(node as ComputedSignalNode<unknown>);\n const cycle = [...computedStack.slice(start), node as ComputedSignalNode<unknown>]\n .map(computedNode => computedNode.debugName ?? '<computed>')\n .join(' -> ');\n return new Error(`Pibbl computed cycle: ${cycle}`);\n };\n\n const evaluate = (): void => {\n if (node.state === 'evaluating') {\n throw cycleError();\n }\n\n beginReactiveCollection(node);\n node.state = 'evaluating';\n computedStack.push(node as ComputedSignalNode<unknown>);\n let changed: boolean;\n try {\n const result = withSignalWriteForbidden(\n computedWriteErrorLabel(node as SignalNode<unknown>),\n () => {\n const nextValue = withSignalTracking(node, node.compute);\n return {\n nextValue,\n changed: !node.hasValue || node.hasError ||\n !node.equals(node.value, nextValue),\n };\n },\n );\n\n changed = result.changed;\n if (changed) {\n recordPublicBatchEntry(node as SignalNode<unknown>);\n node.value = result.nextValue;\n node.version++;\n }\n node.hasValue = true;\n node.hasError = false;\n node.error = undefined;\n } catch (error) {\n changed = !node.hasError || node.error !== error;\n if (changed) recordPublicBatchEntry(node as SignalNode<unknown>);\n node.hasError = true;\n node.error = error;\n } finally {\n computedStack.pop();\n finishDependencies();\n node.state = 'clean';\n }\n if (changed) {\n if (node.hasError) node.version++;\n throwSignalObserverFailures(notifyObservers());\n }\n };\n\n const validate = (): void => {\n if (node.state === 'evaluating') {\n throw cycleError();\n }\n\n let dependencyChanged = false;\n if (node.state === 'clean' && node.observedCount > 0) return;\n for (\n let edge = node.dependencyHead;\n edge !== undefined;\n edge = edge.consumerNext\n ) {\n const dependency = edge.source!;\n dependency.validate?.();\n if (dependency.version !== edge.observedVersion) {\n dependencyChanged = true;\n }\n }\n if (node.state === 'clean' && !dependencyChanged) return;\n if (dependencyChanged || node.dependencyCount === 0 || !node.hasValue) {\n evaluate();\n } else {\n node.state = 'clean';\n }\n };\n\n const hasChangedDependencyVersion = (): boolean => {\n for (\n let edge = node.dependencyHead;\n edge !== undefined;\n edge = edge.consumerNext\n ) {\n if (edge.source!.version !== edge.observedVersion) return true;\n }\n return false;\n };\n\n node.invalidate = invalidate;\n node.validate = validate;\n\n node.replaceCompute = (nextCompute, shouldInvalidate): void => {\n node.compute = nextCompute;\n if (shouldInvalidate) invalidate();\n };\n\n node.adoptCandidate = (\n candidate,\n nextCompute,\n changed,\n readers,\n ): void => {\n if (!candidate.hasValue || candidate.hasError) {\n throw new Error('Cannot adopt an unevaluated computed formula candidate.');\n }\n node.compute = nextCompute;\n beginReactiveCollection(node);\n for (\n let edge = candidate.dependencyHead;\n edge !== undefined;\n edge = edge.consumerNext\n ) {\n collectReactiveDependency(node, edge.source!);\n }\n finishDependencies();\n removePendingValidation();\n node.state = 'clean';\n node.hasValue = true;\n node.hasError = false;\n node.error = undefined;\n if (!changed) return;\n\n recordPublicBatchEntry(node as SignalNode<unknown>);\n node.value = candidate.value;\n node.version++;\n signalCommitNotifications++;\n throwSignalObserverFailures(notifyReactiveEdges(\n node as SignalNode<unknown>,\n consumer => !readers.has(consumer),\n ));\n };\n\n node.observe = (): (() => void) => {\n node.observedCount++;\n if (node.observedCount === 1) {\n acquireDependencies();\n if (\n node.state === 'clean' &&\n hasChangedDependencyVersion()\n ) {\n node.state = 'check';\n }\n }\n if (node.state === 'check') {\n enqueueValidation();\n }\n\n let detached = false;\n return () => {\n if (detached) {\n return;\n }\n detached = true;\n node.observedCount--;\n if (node.observedCount === 0) {\n removePendingValidation();\n releaseDependencies();\n }\n };\n };\n\n const readonly: Signal<T> = {\n get(): T {\n activeSignalDependencyCollector?.addDependency(\n node as SignalNode<unknown>,\n activeSignalDependencyRole,\n );\n validate();\n removePendingValidation();\n if (node.hasError) {\n throw node.error;\n }\n return node.value;\n },\n } as Signal<T>;\n\n signalValues.add(readonly);\n signalNodes.set(readonly, node as SignalNode<unknown>);\n return readonly;\n}\n\n/** @internal Creates a nominal alias that retains one computed graph identity. */\nexport function createComputedSignalAlias<T>(\n target: Signal<T>,\n read: () => T,\n): Signal<T> {\n const node = requireComputedSignalNode(target);\n const alias = { get: read } as Signal<T>;\n signalValues.add(alias);\n signalNodes.set(alias, node as SignalNode<unknown>);\n return alias;\n}\n\n/** @internal Creates one unobserved formula generation for transactional render. */\nexport function createComputedFormulaCandidate<T>(\n target: Signal<T>,\n compute: () => T,\n): ComputedFormulaCandidate<T> {\n const node = requireComputedSignalNode(target);\n return {\n signal: computed(compute, {\n equals: node.equals,\n debugName: node.debugName,\n }),\n readers: new Set(),\n changed: false,\n evaluated: false,\n value: undefined,\n };\n}\n\n/** @internal Reads a provisional formula while attributing the stable node. */\nexport function readComputedFormulaCandidate<T>(\n target: Signal<T>,\n candidate: ComputedFormulaCandidate<T>,\n): T {\n const node = requireComputedSignalNode(target);\n const reader = activeSignalDependencyCollector;\n reader?.addDependency(node as SignalNode<unknown>, activeSignalDependencyRole);\n if (reader !== undefined) candidate.readers.add(reader);\n if (!candidate.evaluated) {\n const value = untracked(() => candidate.signal.get());\n candidate.changed = !node.hasValue || node.hasError ||\n !node.equals(node.value, value);\n candidate.value = value;\n candidate.evaluated = true;\n }\n return candidate.value as T;\n}\n\n/** @internal Publishes an evaluated formula generation after render success. */\nexport function adoptComputedFormulaCandidate<T>(\n target: Signal<T>,\n candidate: ComputedFormulaCandidate<T>,\n compute: () => T,\n): void {\n const node = requireComputedSignalNode(target);\n const candidateNode = requireComputedSignalNode(candidate.signal);\n node.adoptCandidate(\n candidateNode,\n compute,\n candidate.changed,\n candidate.readers,\n );\n}\n\n/** @internal Refreshes a committed formula and optionally invalidates its cache. */\nexport function replaceComputedFormula<T>(\n target: Signal<T>,\n compute: () => T,\n invalidate: boolean,\n): void {\n requireComputedSignalNode(target).replaceCompute(compute, invalidate);\n}\n\nfunction requireComputedSignalNode<T>(\n value: Signal<T>,\n): ComputedSignalNode<T> {\n const node = getSignalNode(value);\n if (!isComputedSignalNode(node as SignalNode<unknown>)) {\n throw new TypeError('Expected a computed signal.');\n }\n return node as ComputedSignalNode<T>;\n}\n\n/** @internal Called during the scheduler Plan phase. */\nexport function flushPendingComputedValidations(): void {\n if (flushingPendingComputedValidations) {\n return;\n }\n\n flushingPendingComputedValidations = true;\n const attempted = new Set<ComputedSignalNode<unknown>>();\n const failures: unknown[] = [];\n try {\n while (pendingComputedValidations.size > 0) {\n const node = Array.from(pendingComputedValidations)\n .find(candidate => !attempted.has(candidate));\n if (node === undefined) {\n break;\n }\n attempted.add(node);\n node.pendingValidation = false;\n pendingComputedValidations.delete(node);\n if (pendingComputedValidations.size === 0) signalGraphPlanWorkNotifier?.();\n if (node.observedCount > 0) {\n planComputedValidations++;\n try {\n node.validate();\n } catch (error) {\n if (\n error instanceof AggregateError &&\n error.message === 'Pibbl signal observer notifications failed.'\n ) {\n failures.push(...error.errors);\n } else {\n failures.push(error);\n }\n if (node.state === 'check') enqueueComputedValidation(node);\n }\n }\n }\n } finally {\n flushingPendingComputedValidations = false;\n }\n throwSignalObserverFailures(failures);\n}\n\n/** @internal Whether the realm scheduler has graph Plan work to service. */\nexport function hasPendingComputedValidations(): boolean {\n return pendingComputedValidations.size > 0;\n}\n\n/** @internal Connects graph liveness to its host-agnostic scheduler owner. */\nexport function setSignalGraphPlanWorkNotifier(notifier: () => void): void {\n signalGraphPlanWorkNotifier = notifier;\n if (pendingComputedValidations.size > 0) notifier();\n}\n\n/**\n * Runs a callback without recording its signal reads as dependencies of the current consumer.\n *\n * @param callback - Synchronous work whose reads should not register dependencies.\n * @returns The callback's return value.\n *\n * @see {@link Signal}\n * @see {@link computed}\n */\nexport function untracked<T>(callback: () => T): T {\n const previous = activeSignalDependencyCollector;\n activeSignalDependencyCollector = undefined;\n try {\n return callback();\n } finally {\n activeSignalDependencyCollector = previous;\n }\n}\n\n/**\n * Checks the nominal Pibbl signal identity rather than accepting objects that merely have a get\n * method.\n *\n * @param value - Value to check for Pibbl's nominal signal brand.\n * @returns True if the value is a Pibbl signal, narrowing its type accordingly. See {@link Signal}.\n *\n * @see {@link Signal}\n */\nexport function isSignal(value: unknown): value is Signal<unknown> {\n return typeof value === 'object' && value !== null && signalValues.has(value);\n}\n\nexport function getSignalNode<T>(value: Signal<T>): SignalNode<T> {\n const node =\n typeof value === 'object' && value !== null ? signalNodes.get(value) :\n undefined;\n if (node === undefined) {\n throw new TypeError('Expected a signal created by signal().');\n }\n return node as SignalNode<T>;\n}\n\ninterface StagedSignalValue {\n readonly node: SignalNode<unknown>;\n value: unknown;\n writer: object;\n authorization: unknown;\n provenance: object | undefined;\n previous: StagedSignalValue | undefined;\n}\n\ninterface SignalCommitBatchState {\n readonly staged: Map<SignalNode<unknown>, StagedSignalValue>;\n readonly lifecycles: Map<object, SignalCommitLifecycle>;\n}\n\n/** @internal Couples a non-signal resource publication to a staged writer. */\nexport interface SignalCommitLifecycle {\n /** Runs after all fallible commit validation and before signal observers. */\n apply(): void;\n /** Restores a completed apply if a later writer cannot publish. */\n rollback?(): void;\n /** Releases a candidate when its writer never reaches Commit. */\n abort(): void;\n}\n\nconst signalCommitBatchStates = new WeakMap<\n SignalCommitBatch,\n SignalCommitBatchState\n>();\n\nexport interface SignalCommitBatch {\n read<T>(signal: WritableSignal<T>): T;\n stage<T>(signal: WritableSignal<T>, value: T, writer: object): void;\n registerLifecycle(writer: object, lifecycle: SignalCommitLifecycle): void;\n discardWriter(writer: object): void;\n commit(onApplied?: () => void): void;\n clear(): void;\n}\n\nexport function createSignalCommitBatch(): SignalCommitBatch {\n const staged = new Map<SignalNode<unknown>, StagedSignalValue>();\n\n const batch: SignalCommitBatch = {\n read<T>(value: WritableSignal<T>): T {\n const node = getSignalNode(value) as SignalNode<T>;\n const candidate = staged.get(node as SignalNode<unknown>);\n return candidate === undefined ? node.value : candidate.value as T;\n },\n stage<T>(value: WritableSignal<T>, nextValue: T, writer: object): void {\n stageSignalCommitBatchCandidate(\n staged,\n value,\n nextValue,\n writer,\n undefined,\n );\n },\n registerLifecycle(writer: object, lifecycle: SignalCommitLifecycle): void {\n const prior = state.lifecycles.get(writer);\n if (prior) abortLifecycle(prior);\n state.lifecycles.set(writer, lifecycle);\n },\n discardWriter(writer: object): void {\n for (const [node, candidate] of staged) {\n if (candidate.writer === writer) {\n staged.delete(node);\n }\n }\n const lifecycle = state.lifecycles.get(writer);\n state.lifecycles.delete(writer);\n if (lifecycle) abortLifecycle(lifecycle);\n },\n commit(onApplied?: () => void): void {\n const candidates = [...staged.values()];\n staged.clear();\n try {\n for (const candidate of candidates) {\n signalWriterLeasePolicy?.assertStagedWriteAllowed(\n candidate.node,\n candidate.writer,\n candidate.authorization,\n );\n }\n\n const changed: StagedSignalValue[] = [];\n for (const candidate of candidates) {\n const node = candidate.node;\n if (!node.equals(node.value, candidate.value)) {\n changed.push(candidate);\n }\n }\n\n const changedWriters = new Set(changed.map(candidate => candidate.writer));\n const applied: SignalCommitLifecycle[] = [];\n for (const candidate of candidates) {\n const lifecycle = state.lifecycles.get(candidate.writer);\n state.lifecycles.delete(candidate.writer);\n if (!lifecycle) continue;\n if (!changedWriters.has(candidate.writer)) {\n abortLifecycle(lifecycle);\n continue;\n }\n try {\n lifecycle.apply();\n applied.push(lifecycle);\n } catch (error) {\n abortLifecycle(lifecycle);\n for (const appliedLifecycle of applied.reverse()) {\n try { appliedLifecycle.rollback?.(); } catch {}\n abortLifecycle(appliedLifecycle);\n }\n throw error;\n }\n }\n for (const candidate of changed) {\n const node = candidate.node;\n recordPublicBatchEntry(node);\n node.value = candidate.value;\n node.version++;\n }\n onApplied?.();\n const failures: unknown[] = [];\n for (const candidate of changed) {\n failures.push(...notifySignalObservers(candidate.node));\n }\n for (const lifecycle of state.lifecycles.values()) abortLifecycle(lifecycle);\n state.lifecycles.clear();\n throwSignalObserverFailures(failures);\n } catch (error) {\n for (const lifecycle of state.lifecycles.values()) abortLifecycle(lifecycle);\n state.lifecycles.clear();\n throw error;\n }\n },\n clear(): void {\n staged.clear();\n for (const lifecycle of state.lifecycles.values()) abortLifecycle(lifecycle);\n state.lifecycles.clear();\n },\n };\n const state: SignalCommitBatchState = { staged, lifecycles: new Map() };\n signalCommitBatchStates.set(batch, state);\n return batch;\n}\n\nfunction abortLifecycle(lifecycle: SignalCommitLifecycle): void {\n try {\n lifecycle.abort();\n } catch {\n // Abort is cleanup for an already failing or discarded transaction. It must\n // not replace the originating scheduler/commit failure.\n }\n}\n\n/** @internal Stages a candidate with rollback provenance for one owner. */\nexport function stageSignalCommitBatchWithProvenance<T>(\n batch: SignalCommitBatch,\n provenance: object,\n signal: WritableSignal<T>,\n value: T,\n writer: object,\n): void {\n stageSignalCommitBatchCandidate(\n requireSignalCommitBatchState(batch).staged,\n signal,\n value,\n writer,\n provenance,\n );\n}\n\n/** @internal Discards only candidates staged with one owner's provenance. */\nexport function discardSignalCommitBatchProvenance(\n batch: SignalCommitBatch,\n provenance: object,\n): void {\n discardSignalCommitBatchCandidates(\n requireSignalCommitBatchState(batch).staged,\n candidate => candidate.provenance === provenance,\n );\n}\n\n/** @internal Applies friend discardWriter semantics inside one owner provenance. */\nexport function discardSignalCommitBatchWriterForProvenance(\n batch: SignalCommitBatch,\n provenance: object,\n writer: object,\n): void {\n discardSignalCommitBatchCandidates(\n requireSignalCommitBatchState(batch).staged,\n candidate =>\n candidate.provenance === provenance && candidate.writer === writer,\n );\n}\n\nfunction stageSignalCommitBatchCandidate<T>(\n staged: Map<SignalNode<unknown>, StagedSignalValue>,\n value: WritableSignal<T>,\n nextValue: T,\n writer: object,\n provenance: object | undefined,\n): void {\n const node = getSignalNode(value) as SignalNode<T>;\n const unknownNode = node as SignalNode<unknown>;\n writePolicyStack[writePolicyStack.length - 1]?.(unknownNode, 'staged');\n staged.set(unknownNode, {\n node: unknownNode,\n value: nextValue,\n writer,\n authorization: signalWriterLeasePolicy?.captureStagedWrite(\n unknownNode,\n writer,\n ),\n provenance,\n previous: staged.get(unknownNode),\n });\n}\n\nfunction requireSignalCommitBatchState(\n batch: SignalCommitBatch,\n): SignalCommitBatchState {\n const state = signalCommitBatchStates.get(batch);\n if (!state) throw new TypeError('Expected a Pibbl signal Commit batch.');\n return state;\n}\n\nfunction discardSignalCommitBatchCandidates(\n staged: Map<SignalNode<unknown>, StagedSignalValue>,\n discard: (candidate: StagedSignalValue) => boolean,\n): void {\n for (const [node, candidate] of staged) {\n const retained = discardStagedSignalCandidates(candidate, discard);\n if (retained === undefined) staged.delete(node);\n else staged.set(node, retained);\n }\n}\n\nfunction discardStagedSignalCandidates(\n candidate: StagedSignalValue | undefined,\n discard: (candidate: StagedSignalValue) => boolean,\n): StagedSignalValue | undefined {\n const retained: StagedSignalValue[] = [];\n let current = candidate;\n while (current !== undefined) {\n if (!discard(current)) retained.push(current);\n current = current.previous;\n }\n let previous: StagedSignalValue | undefined;\n for (let index = retained.length - 1; index >= 0; index--) {\n retained[index].previous = previous;\n previous = retained[index];\n }\n return previous;\n}\n\nexport function withSignalTracking<T>(\n collector: SignalDependencyCollector,\n callback: () => T,\n): T {\n const previous = activeSignalDependencyCollector;\n activeSignalDependencyCollector = collector;\n try {\n return callback();\n } finally {\n activeSignalDependencyCollector = previous;\n }\n}\n\nexport function withSignalWritePolicy<T>(\n policy: SignalWritePolicy,\n callback: () => T,\n): T {\n writePolicyStack.push(policy);\n try {\n return callback();\n } finally {\n writePolicyStack.pop();\n }\n}\n\nexport function withSignalWriteForbidden<T>(\n reason: string,\n callback: () => T,\n): T {\n return withSignalWritePolicy(() => {\n throw new Error(reason);\n }, callback);\n}\n\nexport function withDirectSignalWriteForbidden<T>(\n reason: string,\n callback: () => T,\n): T {\n return withSignalWritePolicy((_node, operation) => {\n if (operation === 'direct') throw new Error(reason);\n }, callback);\n}\n\n/** @internal Checks the active direct-write policy without mutating a signal. */\nexport function assertSignalCommandAllowed(): void {\n writePolicyStack[writePolicyStack.length - 1]?.(\n commandAssertionNode,\n 'direct',\n );\n}\n\n/** @internal Preflight a direct signal writer without changing values or versions. */\nexport function assertDirectSignalWriteAllowed(value: Signal<unknown>): void {\n const node = getSignalNode(value);\n writePolicyStack[writePolicyStack.length - 1]?.(node, 'direct');\n signalWriterLeasePolicy?.assertDirectWriteAllowed(node);\n}\n\n/** @internal Installs the singleton policy that validates active writer leases. */\nexport function installSignalWriterLeasePolicy(\n policy: SignalWriterLeasePolicy,\n): void {\n if (signalWriterLeasePolicy !== undefined && signalWriterLeasePolicy !== policy) {\n throw new Error('Pibbl signal writer-lease policy is already installed.');\n }\n signalWriterLeasePolicy = policy;\n}\n\nfunction isComputedSignalNode(\n node: SignalNode<unknown>,\n): node is ComputedSignalNode<unknown> {\n return 'kind' in node && node.kind === 'computed';\n}\n\nfunction enqueueComputedValidation(node: ComputedSignalNode<unknown>): void {\n if (node.observedCount === 0 || node.pendingValidation) return;\n node.pendingValidation = true;\n const wasEmpty = pendingComputedValidations.size === 0;\n pendingComputedValidations.add(node);\n if (wasEmpty) signalGraphPlanWorkNotifier?.();\n}\n"],
5
+ "mappings": "AAOA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAIK;AAEP,MAAM,cAAc,oBAAI,QAAqC;AAC7D,MAAM,eAAe,oBAAI,QAAgB;AAqGzC,IAAI;AACJ,IAAI;AACJ,MAAM,mBAAwC,CAAC;AAC/C,MAAM,gBAA+C,CAAC;AACtD,SAAS,sBACP,OACA,QACA,WACe;AACf,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS;AAAA,IACT,cAAc;AAAA,IACd,cAAc;AAAA,IACd,eAAe;AAAA,IACf,sBAAsB;AAAA,EACxB;AACF;AAEA,MAAM,uBAAuB;AAAA,EAC3B;AAAA,EACA,OAAO;AAAA,EACP;AACF;AACA,MAAM,+BAA+B,oBAAI,QAGvC;AACF,MAAM,6BAA6B,oBAAI,IAAiC;AACxE,IAAI,qCAAqC;AACzC,IAAI,oBAAoB;AACxB,IAAI,gBAAgB;AACpB,IAAI,2BAA2B;AAC/B,IAAI,4BAA4B;AAChC,IAAI,uBAAuB;AAC3B,IAAI,wBAAwB;AAC5B,IAAI,4BAA4B;AAChC,IAAI,0BAA0B;AAC9B,IAAI,sBAAsB;AAC1B,IAAI,6BAA6B;AACjC,IAAI,8BAA8B;AAClC,IAAI,wBAAwB;AAC5B,IAAI,sBAAsB;AAC1B,IAAI,wBAAwB;AAC5B,IAAI,yBAAyB;AAC7B,IAAI,qBAAqB;AACzB,IAAI,0BAA0B;AAC9B,IAAI,iCAAiC;AACrC,IAAI,oCAAoC;AACxC,IAAI,+BAA+B;AACnC,IAAI,8BAA8B;AAClC,IAAI,2BAA2B;AAC/B,IAAI,gCAAgC;AACpC,IAAI,0BAA0B;AAC9B,IAAI,8BAA8B;AAClC,IAAI,gCAAgC;AACpC,IAAI,4BAA4B;AAChC,IAAI,oBAAoB;AACxB,IAAI,gBAAgB;AACpB,IAAI,eAAe;AACnB,IAAI,mBAAmB;AACvB,IAAI,mBAAmB;AACvB,IAAI;AACJ,IAAI;AAaJ,IAAI;AAuCG,SAAS,sBAA2C;AACzD,SAAO,OAAO,OAAO;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,IACA,4BAA4B,2BAA2B;AAAA,IACvD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACH;AAGO,SAAS,8BAA8B,OAAqB;AACjE,MAAI,QAAQ,EAAG;AACf,MAAI,QAAQ,EAAG;AACf,MAAI,QAAQ,EAAG;AACf,MAAI,QAAQ,EAAG;AACf,MAAI,QAAQ,GAAI;AAChB,MAAI,QAAQ,GAAI;AAChB,MAAI,QAAQ,GAAI;AAClB;AAGO,SAAS,oCAA0C;AACxD;AACF;AAGO,SAAS,yBAAyB,WAAW,OAAa;AAC/D,MAAI,SAAU;AACd;AACF;AAGO,SAAS,6BAAmC;AACjD;AACF;AAGO,SAAS,8BAAoC;AAClD;AACF;AAGO,SAAS,yBAA+B;AAC7C;AACF;AAGO,SAAS,sCAA4C;AAC1D;AACF;AAGO,SAAS,sCAA4C;AAC1D;AACA;AACF;AAGO,SAAS,yCAA+C;AAC7D;AACA;AACF;AAGO,SAAS,sBACd,MACA,MACM;AACN,mCAAiC;AAAA,IAC/B;AAAA,IACA,QAAQ;AAAA,EACV;AACF;AAGO,SAAS,yBACd,MACA,UACG;AACH,QAAM,WAAW;AACjB,+BAA6B;AAC7B,MAAI;AACF,WAAO,SAAS;AAAA,EAClB,UAAE;AACA,iCAA6B;AAAA,EAC/B;AACF;AAGO,SAAS,oCAA0C;AACxD;AACF;AAGO,SAAS,gCAAsC;AACpD;AACF;AAGO,SAAS,iCAAuC;AACrD;AACF;AAGO,SAAS,4BAAkC;AAChD;AACF;AAGO,SAAS,6BAAmC;AACjD;AACF;AAGO,SAAS,oBAA0B;AACxC;AACF;AAGO,SAAS,wBAA8B;AAC5C;AACF;AAGO,SAAS,wBAA8B;AAC5C;AACF;AAGO,SAAS,gCAAsC;AACpD;AACA;AACF;AAGO,SAAS,iCAAuC;AACrD;AACA;AACF;AAGO,SAAS,4BAAkC;AAChD;AACA;AACF;AAGO,SAAS,6BAAmC;AACjD;AACA;AACF;AAaO,SAAS,MAAS,UAAsB;AAC7C,MAAI,4BAA4B,OAAW,QAAO,SAAS;AAE3D,QAAM,QAAgC;AAAA,IACpC,SAAS,oBAAI,IAAI;AAAA,IACjB,UAAU,CAAC;AAAA,EACb;AACA,4BAA0B;AAC1B,MAAI;AACJ,MAAI;AACJ,MAAI,iBAAiB;AACrB,MAAI;AACF,aAAS,SAAS;AAAA,EACpB,SAAS,OAAO;AACd,qBAAiB;AACjB,sBAAkB;AAAA,EACpB;AAEA,QAAM,uBAAuB,uBAAuB,KAAK;AACzD,MAAI,gBAAgB;AAClB,QAAI,qBAAqB,WAAW,EAAG,OAAM;AAC7C,UAAM,IAAI;AAAA,MACR,CAAC,iBAAiB,GAAG,oBAAoB;AAAA,MACzC;AAAA,IACF;AAAA,EACF;AACA,8BAA4B,oBAAoB;AAChD,SAAO;AACT;AAEA,SAAS,uBAAuB,MAAiC;AAC/D,QAAM,QAAQ;AACd,MAAI,UAAU,UAAa,MAAM,QAAQ,IAAI,IAAI,EAAG;AACpD,QAAM,eAAe,qBAAqB,IAAI,IAAI,OAAO;AACzD,QAAM,QAAQ,IAAI,MAAM;AAAA,IACtB,OAAO,KAAK;AAAA,IACZ,kBAAkB,cAAc;AAAA,IAChC,eAAe,cAAc;AAAA,EAC/B,CAAC;AACH;AAEA,SAAS,uBAAuB,OAA0C;AACxE,MAAI;AACF,oCAAgC;AAAA,EAClC,SAAS,OAAO;AACd,QACE,iBAAiB,kBACjB,MAAM,YAAY,+CAClB;AACA,YAAM,SAAS,KAAK,GAAG,MAAM,MAAM;AAAA,IACrC,OAAO;AACL,YAAM,SAAS,KAAK,KAAK;AAAA,IAC3B;AAAA,EACF;AAEA,QAAM,YAAY,oBAAI,IAInB;AACH,aAAW,CAAC,QAAQ,KAAK,KAAK,MAAM,SAAS;AAC3C,QAAI,YAAY;AAChB,QAAI;AACF,kBAAY,uBAAuB,QAAQ,KAAK;AAAA,IAClD,SAAS,OAAO;AACd,YAAM,SAAS,KAAK,KAAK;AAAA,IAC3B;AACA,QAAI,UAAW;AACf;AACA,aACM,OAAO,OAAO,cAClB,SAAS,QACT,OAAO,KAAK,YACZ;AACA,YAAM,WAAW,KAAK;AACtB,UAAI,SAAS,0BAA0B,KAAM;AAC7C,YAAM,WAAW,UAAU,IAAI,QAAQ;AACvC,UAAI,aAAa,QAAW;AAC1B,iBAAS,SAAS,KAAK;AACvB,0CAAkC;AAClC;AAAA,MACF;AACA,gBAAU,IAAI,UAAU,EAAE,UAAU,QAAQ,OAAO,KAAK,gBAAgB,CAAC;AAAA,IAC3E;AAAA,EACF;AAEA,4BAA0B;AAC1B,aAAW,EAAE,UAAU,QAAQ,MAAM,KAAK,UAAU,OAAO,GAAG;AAC5D,QAAI;AACF,eAAS,OAAO,QAAQ,KAAK;AAAA,IAC/B,SAAS,OAAO;AACd,YAAM,SAAS,KAAK,KAAK;AAAA,IAC3B;AAAA,EACF;AACA,SAAO,MAAM;AACf;AAEA,SAAS,uBACP,MACA,OACS;AACT,MAAI,qBAAqB,IAAI,GAAG;AAC9B,QAAI,KAAK,aAAa,MAAM,iBAAkB,QAAO;AACrD,QAAI,KAAK,YAAY,KAAK,UAAU,MAAM,cAAe,QAAO;AAAA,EAClE;AACA,SAAO,KAAK,OAAO,MAAM,OAAO,KAAK,KAAK;AAC5C;AAEA,SAAS,wBAAwB,MAAmC;AAClE,SAAO,KAAK,cAAc,SACxB,iEACA,8DAA8D,KAAK,SAAS;AAChF;AAEA,SAAS,sBAAsB,MAAsC;AACnE,QAAM,aAAa;AACnB,MAAI,eAAe,QAAW;AAC5B,eAAW,SAAS,KAAK,GAAG,oCAAoC,IAAI,CAAC;AACrE,WAAO,CAAC;AAAA,EACV;AACA;AACA,SAAO,oBAAoB,IAAI;AACjC;AAEA,SAAS,oCAAoC,MAAsC;AACjF,SAAO;AAAA,IACL;AAAA,IACA,cAAY,SAAS,0BAA0B;AAAA,EACjD;AACF;AAEA,SAAS,oCAAoC,MAAsC;AACjF,SAAO;AAAA,IACL;AAAA,IACA,cAAY,SAAS,uBAAuB;AAAA,EAC9C;AACF;AAEA,SAAS,4BAA4B,UAAoC;AACvE,MAAI,SAAS,SAAS,GAAG;AACvB,UAAM,IAAI,eAAe,UAAU,6CAA6C;AAAA,EAClF;AACF;AAaO,SAAS,OACd,cACA,UAA4B,CAAC,GACV;AACnB,QAAM,SAAS,QAAQ,UAAU,OAAO;AACxC,QAAM,YAAY,QAAQ;AAC1B,QAAM,OAAO,sBAAsB,cAAc,QAAQ,SAAS;AAElE,MAAI;AACJ,QAAM,OAAO,MAAS;AACpB,qCAAiC;AAAA,MAC/B;AAAA,MACA;AAAA,IACF;AACA,WAAO,KAAK;AAAA,EACd;AACA,QAAM,qBAAqB,MAAY;AACrC,qBAAiB,iBAAiB,SAAS,CAAC;AAAA,MAC1C;AAAA,MACA;AAAA,IACF;AACA,6BAAyB,yBAAyB,IAA2B;AAAA,EAC/E;AACA,QAAM,SAAS,CAAC,cAAuB;AACrC,QAAI,KAAK,OAAO,KAAK,OAAO,SAAS,GAAG;AACtC;AAAA,IACF;AAEA,2BAAuB,IAA2B;AAClD,SAAK,QAAQ;AACb,SAAK;AACL,gCAA4B,sBAAsB,IAA2B,CAAC;AAAA,EAChF;AACA,QAAM,WAAW;AAAA,IACf,KAAK;AAAA,IACL,IAAI,WAAoB;AACtB,yBAAmB;AACnB,aAAO,SAAS;AAAA,IAClB;AAAA,IACA,OAAO,aAAsC;AAC3C,yBAAmB;AACnB,aAAO,YAAY,KAAK,KAAK,CAAC;AAAA,IAChC;AAAA,IACA,aAAwB;AACtB,UAAI,mBAAmB,QAAW;AAChC,yBAAiB,EAAE,KAAK,KAAK;AAC7B,qBAAa,IAAI,cAAc;AAC/B,oBAAY,IAAI,gBAAgB,IAA2B;AAAA,MAC7D;AACA,aAAO;AAAA,IACT;AAAA,EACF;AAEA,eAAa,IAAI,QAAQ;AACzB,cAAY,IAAI,UAAU,IAA2B;AACrD,SAAO;AACT;AAQO,SAAS,8BACd,OACA,WACA,aACM;AACN,QAAM,OAAO,cAAc,KAAK;AAChC,QAAM,yBAAyB,CAAC,SAAwB;AACtD,SAAK,QAAQ;AACb,SAAK;AACL;AAAA,MACE,oCAAoC,IAAI;AAAA,IAC1C;AAAA,EACF;AACA,MAAI,QAAQ,6BAA6B,IAAI,IAAI;AACjD,MAAI,UAAU,QAAW;AACvB,YAAQ;AAAA,MACN,WAAW,KAAK;AAAA,MAChB,SAAS,CAAC;AAAA,MACV,sBAAsB,oBAAI,IAAI;AAAA,IAChC;AACA,iCAA6B,IAAI,MAAM,KAAK;AAAA,EAC9C;AAEA,QAAM,iBAAiB,MAA8C;AACnE,aAAS,QAAQ,MAAM,QAAQ,SAAS,GAAG,SAAS,GAAG,SAAS;AAC9D,YAAMA,SAAQ,MAAM,QAAQ,KAAK;AACjC,UAAIA,OAAM,WAAW,UAAW,QAAOA;AAAA,IACzC;AACA,WAAO;AAAA,EACT;AACA,QAAM,wBAAwB,CAC5B,eACY;AACZ,UAAMA,SAAQ,eAAe;AAC7B,UAAM,iBAAiBA,QAAO,SAAS,MAAM;AAC7C,QACG,eAAe,UAAaA,WAAU,cACvC,CAAC,OAAO,GAAG,KAAK,OAAO,cAAc,GACrC;AACA,6BAAuB,cAAc;AACrC,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT;AAEA,MAAI,QAAQ,MAAM,qBAAqB,IAAI,WAAW;AACtD,MAAI,UAAU,QAAW;AACvB,YAAQ,EAAE,aAAa,OAAO,WAAW,QAAQ,UAAU;AAC3D,UAAM,QAAQ,KAAK,KAAK;AACxB,UAAM,qBAAqB,IAAI,aAAa,KAAK;AACjD,UAAM,iBAAiB;AACvB,UAAM,iBAAiB;AACvB,gBAAY,SAAS,aAAW;AAC9B,UAAI,eAAe,WAAW,UAAW;AACzC,qBAAe,SAAS,UAAU,YAAY;AAE9C,aACE,eAAe,QAAQ,CAAC,GAAG,WAAW,aACtC,eAAe,QAAQ,SAAS,GAChC;AACA,cAAM,UAAU,eAAe,QAAQ,MAAM;AAC7C,uBAAe,qBAAqB,OAAO,QAAQ,WAAW;AAC9D,YAAI,QAAQ,WAAW,WAAW;AAChC,yBAAe,YAAY,QAAQ;AAAA,QACrC;AAAA,MACF;AAEA,YAAM,wBAAwB,sBAAsB;AACpD,UAAI,CAAC,WAAW,uBAAuB;AACrC,oCAA4B,oCAAoC,IAAI,CAAC;AAAA,MACvE;AACA,UAAI,eAAe,QAAQ,WAAW,GAAG;AACvC,qCAA6B,OAAO,IAAI;AAAA,MAC1C;AAAA,IACF,CAAC;AAAA,EACH;AACA,QAAM,QAAQ;AACd,wBAAsB,KAAK;AAC7B;AAaO,SAAS,SACd,SACA,UAA4B,CAAC,GAClB;AACX,QAAM,OAAO,OAAO;AAAA,IAClB;AAAA,MACE;AAAA,MACA,QAAQ,UAAU,OAAO;AAAA,MACzB,QAAQ;AAAA,IACV;AAAA,IACA;AAAA,MACA,MAAM;AAAA,MACN;AAAA,MACA,OAAO;AAAA,MACP,UAAU;AAAA,MACV,UAAU;AAAA,MACV,OAAO;AAAA,MACP,gBAAgB;AAAA,MAChB,gBAAgB;AAAA,MAChB,oBAAoB;AAAA,MACpB,qBAAqB;AAAA,MACrB,iBAAiB;AAAA,MACjB,qBAAqB;AAAA,MACrB,kBAAkB;AAAA,MAClB,sBAAsB;AAAA,MACtB,eAAe;AAAA,MACf,mBAAmB;AAAA,MACnB,uBAAuB;AAAA,MACvB,cAAc,YAAuC;AACnD,YACE,CAAC,qBAAqB,UAAU,KAChC,WAAW,UAAU,cACrB;AACA,oCAA0B,MAAM,UAAU;AAAA,QAC5C;AAAA,MACF;AAAA,MACA,QAAQ,MAAM;AAAA,MAAC;AAAA,MACf,SAAS,MAAM,MAAM;AAAA,MAAC;AAAA,MACtB,YAAY,MAAM;AAAA,MAAC;AAAA,MACnB,UAAU,MAAM;AAAA,MAAC;AAAA,MACjB,gBAAgB,MAAM;AAAA,MAAC;AAAA,MACvB,gBAAgB,MAAM;AAAA,MAAC;AAAA,IACvB;AAAA,EACF;AAEA,QAAM,kBAAkB,MAAiB;AACvC,WAAO,sBAAsB,IAA2B;AAAA,EAC1D;AAEA,QAAM,oBAAoB,MAAY;AACpC,QAAI,KAAK,kBAAkB,KAAK,KAAK,mBAAmB;AACtD;AAAA,IACF;AACA,SAAK,oBAAoB;AACzB,UAAM,WAAW,2BAA2B,SAAS;AACrD,+BAA2B,IAAI,IAAmC;AAClE,QAAI,SAAU,+BAA8B;AAAA,EAC9C;AAEA,QAAM,0BAA0B,MAAY;AAC1C,QAAI,CAAC,KAAK,kBAAmB;AAC7B,SAAK,oBAAoB;AACzB,+BAA2B,OAAO,IAAmC;AACrE,QAAI,2BAA2B,SAAS,EAAG,+BAA8B;AAAA,EAC3E;AAEA,QAAM,aAAa,MAAY;AAC7B,QAAI,KAAK,UAAU,SAAS;AAC1B;AAAA,IACF;AACA,SAAK,QAAQ;AACb,sBAAkB;AAClB;AAAA,MACE,oCAAoC,IAA2B;AAAA,IACjE;AAAA,EACF;AACA,OAAK,SAAS;AAEd,QAAM,oBAAoB,CAAC,SAA6B;AACtD,QAAI,KAAK,aAAc;AACvB,UAAM,aAAa,KAAK;AACxB,6BAAyB,MAAM,WAAW,UAAU,CAAC;AACrD;AACA;AAAA,EACF;AAEA,QAAM,oBAAoB,CAAC,SAA6B;AACtD,QAAI,CAAC,KAAK,aAAc;AACxB,iCAA6B,IAAI;AACjC;AACA;AAAA,EACF;AAEA,QAAM,sBAAsB,MAAY;AACtC,aACM,OAAO,KAAK,gBAChB,SAAS,QACT,OAAO,KAAK,cACZ;AACA,wBAAkB,IAAI;AAAA,IACxB;AAAA,EACF;AAEA,QAAM,sBAAsB,MAAY;AACtC,aACM,OAAO,KAAK,gBAChB,SAAS,QACT,OAAO,KAAK,cACZ;AACA,wBAAkB,IAAI;AAAA,IACxB;AAAA,EACF;AAEA,QAAM,qBAAqB,MAAY;AACrC;AAAA,MACE;AAAA,MACA,UAAQ;AACN,YAAI,KAAK,gBAAgB,EAAG,mBAAkB,IAAI;AAClD,aAAK,kBAAkB,KAAK,OAAQ;AACpC,aAAK,iBAAiB;AAAA,MACxB;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,QAAM,aAAa,MAAa;AAC9B,UAAM,QAAQ,cAAc,QAAQ,IAAmC;AACvE,UAAM,QAAQ,CAAC,GAAG,cAAc,MAAM,KAAK,GAAG,IAAmC,EAC9E,IAAI,kBAAgB,aAAa,aAAa,YAAY,EAC1D,KAAK,MAAM;AACd,WAAO,IAAI,MAAM,yBAAyB,KAAK,EAAE;AAAA,EACnD;AAEA,QAAM,WAAW,MAAY;AAC3B,QAAI,KAAK,UAAU,cAAc;AAC/B,YAAM,WAAW;AAAA,IACnB;AAEA,4BAAwB,IAAI;AAC5B,SAAK,QAAQ;AACb,kBAAc,KAAK,IAAmC;AACtD,QAAI;AACJ,QAAI;AACF,YAAM,SAAS;AAAA,QACb,wBAAwB,IAA2B;AAAA,QACnD,MAAM;AACJ,gBAAM,YAAY,mBAAmB,MAAM,KAAK,OAAO;AACvD,iBAAO;AAAA,YACL;AAAA,YACA,SAAS,CAAC,KAAK,YAAY,KAAK,YAC9B,CAAC,KAAK,OAAO,KAAK,OAAO,SAAS;AAAA,UACtC;AAAA,QACF;AAAA,MACF;AAEA,gBAAU,OAAO;AACjB,UAAI,SAAS;AACX,+BAAuB,IAA2B;AAClD,aAAK,QAAQ,OAAO;AACpB,aAAK;AAAA,MACP;AACA,WAAK,WAAW;AAChB,WAAK,WAAW;AAChB,WAAK,QAAQ;AAAA,IACf,SAAS,OAAO;AACd,gBAAU,CAAC,KAAK,YAAY,KAAK,UAAU;AAC3C,UAAI,QAAS,wBAAuB,IAA2B;AAC/D,WAAK,WAAW;AAChB,WAAK,QAAQ;AAAA,IACf,UAAE;AACA,oBAAc,IAAI;AAClB,yBAAmB;AACnB,WAAK,QAAQ;AAAA,IACf;AACA,QAAI,SAAS;AACX,UAAI,KAAK,SAAU,MAAK;AACxB,kCAA4B,gBAAgB,CAAC;AAAA,IAC/C;AAAA,EACF;AAEA,QAAM,WAAW,MAAY;AAC3B,QAAI,KAAK,UAAU,cAAc;AAC/B,YAAM,WAAW;AAAA,IACnB;AAEA,QAAI,oBAAoB;AACxB,QAAI,KAAK,UAAU,WAAW,KAAK,gBAAgB,EAAG;AACtD,aACM,OAAO,KAAK,gBAChB,SAAS,QACT,OAAO,KAAK,cACZ;AACA,YAAM,aAAa,KAAK;AACxB,iBAAW,WAAW;AACtB,UAAI,WAAW,YAAY,KAAK,iBAAiB;AAC/C,4BAAoB;AAAA,MACtB;AAAA,IACF;AACA,QAAI,KAAK,UAAU,WAAW,CAAC,kBAAmB;AAClD,QAAI,qBAAqB,KAAK,oBAAoB,KAAK,CAAC,KAAK,UAAU;AACrE,eAAS;AAAA,IACX,OAAO;AACL,WAAK,QAAQ;AAAA,IACf;AAAA,EACF;AAEA,QAAM,8BAA8B,MAAe;AACjD,aACM,OAAO,KAAK,gBAChB,SAAS,QACT,OAAO,KAAK,cACZ;AACA,UAAI,KAAK,OAAQ,YAAY,KAAK,gBAAiB,QAAO;AAAA,IAC5D;AACA,WAAO;AAAA,EACT;AAEA,OAAK,aAAa;AAClB,OAAK,WAAW;AAEhB,OAAK,iBAAiB,CAAC,aAAa,qBAA2B;AAC7D,SAAK,UAAU;AACf,QAAI,iBAAkB,YAAW;AAAA,EACnC;AAEA,OAAK,iBAAiB,CACpB,WACA,aACA,SACA,YACS;AACT,QAAI,CAAC,UAAU,YAAY,UAAU,UAAU;AAC7C,YAAM,IAAI,MAAM,yDAAyD;AAAA,IAC3E;AACA,SAAK,UAAU;AACf,4BAAwB,IAAI;AAC5B,aACM,OAAO,UAAU,gBACrB,SAAS,QACT,OAAO,KAAK,cACZ;AACA,gCAA0B,MAAM,KAAK,MAAO;AAAA,IAC9C;AACA,uBAAmB;AACnB,4BAAwB;AACxB,SAAK,QAAQ;AACb,SAAK,WAAW;AAChB,SAAK,WAAW;AAChB,SAAK,QAAQ;AACb,QAAI,CAAC,QAAS;AAEd,2BAAuB,IAA2B;AAClD,SAAK,QAAQ,UAAU;AACvB,SAAK;AACL;AACA,gCAA4B;AAAA,MAC1B;AAAA,MACA,cAAY,CAAC,QAAQ,IAAI,QAAQ;AAAA,IACnC,CAAC;AAAA,EACH;AAEA,OAAK,UAAU,MAAoB;AACjC,SAAK;AACL,QAAI,KAAK,kBAAkB,GAAG;AAC5B,0BAAoB;AACpB,UACE,KAAK,UAAU,WACf,4BAA4B,GAC5B;AACA,aAAK,QAAQ;AAAA,MACf;AAAA,IACF;AACA,QAAI,KAAK,UAAU,SAAS;AAC1B,wBAAkB;AAAA,IACpB;AAEA,QAAI,WAAW;AACf,WAAO,MAAM;AACX,UAAI,UAAU;AACZ;AAAA,MACF;AACA,iBAAW;AACX,WAAK;AACL,UAAI,KAAK,kBAAkB,GAAG;AAC5B,gCAAwB;AACxB,4BAAoB;AAAA,MACtB;AAAA,IACF;AAAA,EACF;AAEA,QAAM,WAAsB;AAAA,IAC1B,MAAS;AACP,uCAAiC;AAAA,QAC/B;AAAA,QACA;AAAA,MACF;AACA,eAAS;AACT,8BAAwB;AACxB,UAAI,KAAK,UAAU;AACjB,cAAM,KAAK;AAAA,MACb;AACA,aAAO,KAAK;AAAA,IACd;AAAA,EACF;AAEA,eAAa,IAAI,QAAQ;AACzB,cAAY,IAAI,UAAU,IAA2B;AACrD,SAAO;AACT;AAGO,SAAS,0BACd,QACA,MACW;AACX,QAAM,OAAO,0BAA0B,MAAM;AAC7C,QAAM,QAAQ,EAAE,KAAK,KAAK;AAC1B,eAAa,IAAI,KAAK;AACtB,cAAY,IAAI,OAAO,IAA2B;AAClD,SAAO;AACT;AAGO,SAAS,+BACd,QACA,SAC6B;AAC7B,QAAM,OAAO,0BAA0B,MAAM;AAC7C,SAAO;AAAA,IACL,QAAQ,SAAS,SAAS;AAAA,MACxB,QAAQ,KAAK;AAAA,MACb,WAAW,KAAK;AAAA,IAClB,CAAC;AAAA,IACD,SAAS,oBAAI,IAAI;AAAA,IACjB,SAAS;AAAA,IACT,WAAW;AAAA,IACX,OAAO;AAAA,EACT;AACF;AAGO,SAAS,6BACd,QACA,WACG;AACH,QAAM,OAAO,0BAA0B,MAAM;AAC7C,QAAM,SAAS;AACf,UAAQ,cAAc,MAA6B,0BAA0B;AAC7E,MAAI,WAAW,OAAW,WAAU,QAAQ,IAAI,MAAM;AACtD,MAAI,CAAC,UAAU,WAAW;AACxB,UAAM,QAAQ,UAAU,MAAM,UAAU,OAAO,IAAI,CAAC;AACpD,cAAU,UAAU,CAAC,KAAK,YAAY,KAAK,YACzC,CAAC,KAAK,OAAO,KAAK,OAAO,KAAK;AAChC,cAAU,QAAQ;AAClB,cAAU,YAAY;AAAA,EACxB;AACA,SAAO,UAAU;AACnB;AAGO,SAAS,8BACd,QACA,WACA,SACM;AACN,QAAM,OAAO,0BAA0B,MAAM;AAC7C,QAAM,gBAAgB,0BAA0B,UAAU,MAAM;AAChE,OAAK;AAAA,IACH;AAAA,IACA;AAAA,IACA,UAAU;AAAA,IACV,UAAU;AAAA,EACZ;AACF;AAGO,SAAS,uBACd,QACA,SACA,YACM;AACN,4BAA0B,MAAM,EAAE,eAAe,SAAS,UAAU;AACtE;AAEA,SAAS,0BACP,OACuB;AACvB,QAAM,OAAO,cAAc,KAAK;AAChC,MAAI,CAAC,qBAAqB,IAA2B,GAAG;AACtD,UAAM,IAAI,UAAU,6BAA6B;AAAA,EACnD;AACA,SAAO;AACT;AAGO,SAAS,kCAAwC;AACtD,MAAI,oCAAoC;AACtC;AAAA,EACF;AAEA,uCAAqC;AACrC,QAAM,YAAY,oBAAI,IAAiC;AACvD,QAAM,WAAsB,CAAC;AAC7B,MAAI;AACF,WAAO,2BAA2B,OAAO,GAAG;AAC1C,YAAM,OAAO,MAAM,KAAK,0BAA0B,EAC/C,KAAK,eAAa,CAAC,UAAU,IAAI,SAAS,CAAC;AAC9C,UAAI,SAAS,QAAW;AACtB;AAAA,MACF;AACA,gBAAU,IAAI,IAAI;AAClB,WAAK,oBAAoB;AACzB,iCAA2B,OAAO,IAAI;AACtC,UAAI,2BAA2B,SAAS,EAAG,+BAA8B;AACzE,UAAI,KAAK,gBAAgB,GAAG;AAC1B;AACA,YAAI;AACF,eAAK,SAAS;AAAA,QAChB,SAAS,OAAO;AACd,cACE,iBAAiB,kBACjB,MAAM,YAAY,+CAClB;AACA,qBAAS,KAAK,GAAG,MAAM,MAAM;AAAA,UAC/B,OAAO;AACL,qBAAS,KAAK,KAAK;AAAA,UACrB;AACA,cAAI,KAAK,UAAU,QAAS,2BAA0B,IAAI;AAAA,QAC5D;AAAA,MACF;AAAA,IACF;AAAA,EACF,UAAE;AACA,yCAAqC;AAAA,EACvC;AACA,8BAA4B,QAAQ;AACtC;AAGO,SAAS,gCAAyC;AACvD,SAAO,2BAA2B,OAAO;AAC3C;AAGO,SAAS,+BAA+B,UAA4B;AACzE,gCAA8B;AAC9B,MAAI,2BAA2B,OAAO,EAAG,UAAS;AACpD;AAWO,SAAS,UAAa,UAAsB;AACjD,QAAM,WAAW;AACjB,oCAAkC;AAClC,MAAI;AACF,WAAO,SAAS;AAAA,EAClB,UAAE;AACA,sCAAkC;AAAA,EACpC;AACF;AAWO,SAAS,SAAS,OAA0C;AACjE,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,aAAa,IAAI,KAAK;AAC9E;AAEO,SAAS,cAAiB,OAAiC;AAChE,QAAM,OACJ,OAAO,UAAU,YAAY,UAAU,OAAO,YAAY,IAAI,KAAK,IACjE;AACJ,MAAI,SAAS,QAAW;AACtB,UAAM,IAAI,UAAU,wCAAwC;AAAA,EAC9D;AACA,SAAO;AACT;AA0BA,MAAM,0BAA0B,oBAAI,QAGlC;AAWK,SAAS,0BAA6C;AAC3D,QAAM,SAAS,oBAAI,IAA4C;AAE/D,QAAMC,SAA2B;AAAA,IAC/B,KAAQ,OAA6B;AACnC,YAAM,OAAO,cAAc,KAAK;AAChC,YAAM,YAAY,OAAO,IAAI,IAA2B;AACxD,aAAO,cAAc,SAAY,KAAK,QAAQ,UAAU;AAAA,IAC1D;AAAA,IACA,MAAS,OAA0B,WAAc,QAAsB;AACrE;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA,kBAAkB,QAAgB,WAAwC;AACxE,YAAM,QAAQ,MAAM,WAAW,IAAI,MAAM;AACzC,UAAI,MAAO,gBAAe,KAAK;AAC/B,YAAM,WAAW,IAAI,QAAQ,SAAS;AAAA,IACxC;AAAA,IACA,cAAc,QAAsB;AAClC,iBAAW,CAAC,MAAM,SAAS,KAAK,QAAQ;AACtC,YAAI,UAAU,WAAW,QAAQ;AAC/B,iBAAO,OAAO,IAAI;AAAA,QACpB;AAAA,MACF;AACA,YAAM,YAAY,MAAM,WAAW,IAAI,MAAM;AAC7C,YAAM,WAAW,OAAO,MAAM;AAC9B,UAAI,UAAW,gBAAe,SAAS;AAAA,IACzC;AAAA,IACA,OAAO,WAA8B;AACnC,YAAM,aAAa,CAAC,GAAG,OAAO,OAAO,CAAC;AACtC,aAAO,MAAM;AACb,UAAI;AACF,mBAAW,aAAa,YAAY;AAClC,mCAAyB;AAAA,YACvB,UAAU;AAAA,YACV,UAAU;AAAA,YACV,UAAU;AAAA,UACZ;AAAA,QACF;AAEA,cAAM,UAA+B,CAAC;AACtC,mBAAW,aAAa,YAAY;AAClC,gBAAM,OAAO,UAAU;AACvB,cAAI,CAAC,KAAK,OAAO,KAAK,OAAO,UAAU,KAAK,GAAG;AAC7C,oBAAQ,KAAK,SAAS;AAAA,UACxB;AAAA,QACF;AAEA,cAAM,iBAAiB,IAAI,IAAI,QAAQ,IAAI,eAAa,UAAU,MAAM,CAAC;AACzE,cAAM,UAAmC,CAAC;AAC1C,mBAAW,aAAa,YAAY;AAClC,gBAAM,YAAY,MAAM,WAAW,IAAI,UAAU,MAAM;AACvD,gBAAM,WAAW,OAAO,UAAU,MAAM;AACxC,cAAI,CAAC,UAAW;AAChB,cAAI,CAAC,eAAe,IAAI,UAAU,MAAM,GAAG;AACzC,2BAAe,SAAS;AACxB;AAAA,UACF;AACA,cAAI;AACF,sBAAU,MAAM;AAChB,oBAAQ,KAAK,SAAS;AAAA,UACxB,SAAS,OAAO;AACd,2BAAe,SAAS;AACxB,uBAAW,oBAAoB,QAAQ,QAAQ,GAAG;AAChD,kBAAI;AAAE,iCAAiB,WAAW;AAAA,cAAG,QAAQ;AAAA,cAAC;AAC9C,6BAAe,gBAAgB;AAAA,YACjC;AACA,kBAAM;AAAA,UACR;AAAA,QACF;AACA,mBAAW,aAAa,SAAS;AAC/B,gBAAM,OAAO,UAAU;AACvB,iCAAuB,IAAI;AAC3B,eAAK,QAAQ,UAAU;AACvB,eAAK;AAAA,QACP;AACA,oBAAY;AACZ,cAAM,WAAsB,CAAC;AAC7B,mBAAW,aAAa,SAAS;AAC/B,mBAAS,KAAK,GAAG,sBAAsB,UAAU,IAAI,CAAC;AAAA,QACxD;AACA,mBAAW,aAAa,MAAM,WAAW,OAAO,EAAG,gBAAe,SAAS;AAC3E,cAAM,WAAW,MAAM;AACvB,oCAA4B,QAAQ;AAAA,MACtC,SAAS,OAAO;AACd,mBAAW,aAAa,MAAM,WAAW,OAAO,EAAG,gBAAe,SAAS;AAC3E,cAAM,WAAW,MAAM;AACvB,cAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,QAAc;AACZ,aAAO,MAAM;AACb,iBAAW,aAAa,MAAM,WAAW,OAAO,EAAG,gBAAe,SAAS;AAC3E,YAAM,WAAW,MAAM;AAAA,IACzB;AAAA,EACF;AACA,QAAM,QAAgC,EAAE,QAAQ,YAAY,oBAAI,IAAI,EAAE;AACtE,0BAAwB,IAAIA,QAAO,KAAK;AACxC,SAAOA;AACT;AAEA,SAAS,eAAe,WAAwC;AAC9D,MAAI;AACF,cAAU,MAAM;AAAA,EAClB,QAAQ;AAAA,EAGR;AACF;AAGO,SAAS,qCACdA,QACA,YACAC,SACA,OACA,QACM;AACN;AAAA,IACE,8BAA8BD,MAAK,EAAE;AAAA,IACrCC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAGO,SAAS,mCACdD,QACA,YACM;AACN;AAAA,IACE,8BAA8BA,MAAK,EAAE;AAAA,IACrC,eAAa,UAAU,eAAe;AAAA,EACxC;AACF;AAGO,SAAS,4CACdA,QACA,YACA,QACM;AACN;AAAA,IACE,8BAA8BA,MAAK,EAAE;AAAA,IACrC,eACE,UAAU,eAAe,cAAc,UAAU,WAAW;AAAA,EAChE;AACF;AAEA,SAAS,gCACP,QACA,OACA,WACA,QACA,YACM;AACN,QAAM,OAAO,cAAc,KAAK;AAChC,QAAM,cAAc;AACpB,mBAAiB,iBAAiB,SAAS,CAAC,IAAI,aAAa,QAAQ;AACrE,SAAO,IAAI,aAAa;AAAA,IACtB,MAAM;AAAA,IACN,OAAO;AAAA,IACP;AAAA,IACA,eAAe,yBAAyB;AAAA,MACtC;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,IACA,UAAU,OAAO,IAAI,WAAW;AAAA,EAClC,CAAC;AACH;AAEA,SAAS,8BACPA,QACwB;AACxB,QAAM,QAAQ,wBAAwB,IAAIA,MAAK;AAC/C,MAAI,CAAC,MAAO,OAAM,IAAI,UAAU,uCAAuC;AACvE,SAAO;AACT;AAEA,SAAS,mCACP,QACA,SACM;AACN,aAAW,CAAC,MAAM,SAAS,KAAK,QAAQ;AACtC,UAAM,WAAW,8BAA8B,WAAW,OAAO;AACjE,QAAI,aAAa,OAAW,QAAO,OAAO,IAAI;AAAA,QACzC,QAAO,IAAI,MAAM,QAAQ;AAAA,EAChC;AACF;AAEA,SAAS,8BACP,WACA,SAC+B;AAC/B,QAAM,WAAgC,CAAC;AACvC,MAAI,UAAU;AACd,SAAO,YAAY,QAAW;AAC5B,QAAI,CAAC,QAAQ,OAAO,EAAG,UAAS,KAAK,OAAO;AAC5C,cAAU,QAAQ;AAAA,EACpB;AACA,MAAI;AACJ,WAAS,QAAQ,SAAS,SAAS,GAAG,SAAS,GAAG,SAAS;AACzD,aAAS,KAAK,EAAE,WAAW;AAC3B,eAAW,SAAS,KAAK;AAAA,EAC3B;AACA,SAAO;AACT;AAEO,SAAS,mBACd,WACA,UACG;AACH,QAAM,WAAW;AACjB,oCAAkC;AAClC,MAAI;AACF,WAAO,SAAS;AAAA,EAClB,UAAE;AACA,sCAAkC;AAAA,EACpC;AACF;AAEO,SAAS,sBACd,QACA,UACG;AACH,mBAAiB,KAAK,MAAM;AAC5B,MAAI;AACF,WAAO,SAAS;AAAA,EAClB,UAAE;AACA,qBAAiB,IAAI;AAAA,EACvB;AACF;AAEO,SAAS,yBACd,QACA,UACG;AACH,SAAO,sBAAsB,MAAM;AACjC,UAAM,IAAI,MAAM,MAAM;AAAA,EACxB,GAAG,QAAQ;AACb;AAEO,SAAS,+BACd,QACA,UACG;AACH,SAAO,sBAAsB,CAAC,OAAO,cAAc;AACjD,QAAI,cAAc,SAAU,OAAM,IAAI,MAAM,MAAM;AAAA,EACpD,GAAG,QAAQ;AACb;AAGO,SAAS,6BAAmC;AACjD,mBAAiB,iBAAiB,SAAS,CAAC;AAAA,IAC1C;AAAA,IACA;AAAA,EACF;AACF;AAGO,SAAS,+BAA+B,OAA8B;AAC3E,QAAM,OAAO,cAAc,KAAK;AAChC,mBAAiB,iBAAiB,SAAS,CAAC,IAAI,MAAM,QAAQ;AAC9D,2BAAyB,yBAAyB,IAAI;AACxD;AAGO,SAAS,+BACd,QACM;AACN,MAAI,4BAA4B,UAAa,4BAA4B,QAAQ;AAC/E,UAAM,IAAI,MAAM,wDAAwD;AAAA,EAC1E;AACA,4BAA0B;AAC5B;AAEA,SAAS,qBACP,MACqC;AACrC,SAAO,UAAU,QAAQ,KAAK,SAAS;AACzC;AAEA,SAAS,0BAA0B,MAAyC;AAC1E,MAAI,KAAK,kBAAkB,KAAK,KAAK,kBAAmB;AACxD,OAAK,oBAAoB;AACzB,QAAM,WAAW,2BAA2B,SAAS;AACrD,6BAA2B,IAAI,IAAI;AACnC,MAAI,SAAU,+BAA8B;AAC9C;",
6
6
  "names": ["entry", "batch", "signal"]
7
7
  }
@@ -1,3 +1,18 @@
1
1
  import type { PibblRenderTransaction } from '../types.js';
2
+ import { type SignalNode } from './graph.js';
3
+ /** @internal Immutable input reads captured for replay into a current receiver. */
4
+ export type ReceiverInputProvisionReceipt = readonly {
5
+ readonly node: SignalNode<unknown>;
6
+ readonly roles: number;
7
+ }[];
8
+ /** Observe provisioned reads for cache validation without acquiring receiver edges. */
9
+ export declare function observeReceiverInputReads<T>(read: (node: SignalNode<unknown>, roles: number, receiver: object) => void, callback: () => T): T;
2
10
  export declare function withReceiverInputProvision<T>(transaction: PibblRenderTransaction | undefined, receiver: object | undefined, callback: () => T): T;
11
+ /** @internal Captures every callback read, including roles already provisioned earlier. */
12
+ export declare function captureReceiverInputProvision<T>(transaction: PibblRenderTransaction | undefined, receiver: object | undefined, callback: () => T): {
13
+ value: T;
14
+ receipt: ReceiverInputProvisionReceipt | undefined;
15
+ };
16
+ /** @internal Replays reads into the current transaction, never an old receiver token. */
17
+ export declare function replayReceiverInputProvision(transaction: PibblRenderTransaction | undefined, receiver: object | undefined, receipt: ReceiverInputProvisionReceipt): void;
3
18
  export declare function adoptReceiverInputProvision(transaction: PibblRenderTransaction | undefined, receiver: object): void;
@@ -1,3 +1,4 @@
1
+ import { adoptAllocationReceiver } from "../layout/allocation-dependencies.js";
1
2
  import { GLOBAL_STATE } from "../global-state.js";
2
3
  import { getPrimitiveReceiverToken } from "../element/metadata.js";
3
4
  import {
@@ -8,29 +9,75 @@ import {
8
9
  untracked,
9
10
  withSignalTracking
10
11
  } from "./graph.js";
12
+ import { signalDependencyRoleMask } from "./edge.js";
11
13
  const transactionProvisions = /* @__PURE__ */ new WeakMap();
14
+ let receiverReadObserver;
15
+ function observeReceiverInputReads(read, callback) {
16
+ const previous = receiverReadObserver;
17
+ receiverReadObserver = { read, parent: previous };
18
+ try {
19
+ return callback();
20
+ } finally {
21
+ receiverReadObserver = previous;
22
+ }
23
+ }
12
24
  function withReceiverInputProvision(transaction, receiver, callback) {
25
+ return runReceiverInputProvision(transaction, receiver, callback);
26
+ }
27
+ function captureReceiverInputProvision(transaction, receiver, callback) {
28
+ if (!transaction || !receiver || currentComponentOwnsReceiver(receiver)) {
29
+ return { value: runReceiverInputProvision(transaction, receiver, callback), receipt: void 0 };
30
+ }
31
+ const receipt = [];
32
+ const value = runReceiverInputProvision(transaction, receiver, callback, receipt);
33
+ return { value, receipt };
34
+ }
35
+ function replayReceiverInputProvision(transaction, receiver, receipt) {
36
+ withReceiverInputProvision(transaction, receiver, () => {
37
+ for (let index = 0; index < receipt.length; index++) {
38
+ const entry = receipt[index];
39
+ trackSignalDependency(entry.node, entry.roles);
40
+ }
41
+ });
42
+ }
43
+ function runReceiverInputProvision(transaction, receiver, callback, receipt) {
13
44
  if (!transaction || !receiver) return untracked(callback);
14
45
  if (currentComponentOwnsReceiver(receiver)) return callback();
15
46
  let provision;
16
47
  const collector = {
17
- addDependency(node) {
48
+ addDependency(node, role = "unknown") {
49
+ for (let observer = receiverReadObserver; observer; observer = observer.parent) observer.read(node, signalDependencyRoleMask(role), receiver);
18
50
  if (provision === void 0) {
19
51
  provision = createProvision(transaction, receiver);
20
52
  }
21
- if (!provision.nodes.includes(node)) provision.nodes.push(node);
53
+ const existing = provision.nodes.find((entry) => entry.node === node);
54
+ if (existing === void 0) provision.nodes.push({ node, roles: signalDependencyRoleMask(role) });
55
+ else existing.roles |= signalDependencyRoleMask(role);
56
+ if (receipt) {
57
+ const roles = signalDependencyRoleMask(role);
58
+ let captured = false;
59
+ for (let index = 0; index < receipt.length; index++) {
60
+ if (receipt[index].node !== node) continue;
61
+ receipt[index].roles |= roles;
62
+ captured = true;
63
+ break;
64
+ }
65
+ if (!captured) receipt.push({ node, roles });
66
+ }
22
67
  }
23
68
  };
24
69
  return withSignalTracking(collector, callback);
25
70
  }
26
71
  function adoptReceiverInputProvision(transaction, receiver) {
27
72
  if (!transaction) return;
73
+ const owner = GLOBAL_STATE.componentRefs;
74
+ if (owner) adoptAllocationReceiver(transaction, receiver, owner);
28
75
  const receivers = transactionProvisions.get(transaction);
29
76
  const provision = receivers?.get(receiver);
30
77
  if (!provision || provision.settled) return;
31
78
  provision.settled = true;
32
79
  receivers.delete(receiver);
33
- for (const node of provision.nodes) trackSignalDependency(node);
80
+ for (const { node, roles } of provision.nodes) trackSignalDependency(node, roles);
34
81
  provision.nodes.length = 0;
35
82
  recordReceiverInputProvisionAdopted();
36
83
  }
@@ -62,6 +109,9 @@ function currentComponentOwnsReceiver(receiver) {
62
109
  }
63
110
  export {
64
111
  adoptReceiverInputProvision,
112
+ captureReceiverInputProvision,
113
+ observeReceiverInputReads,
114
+ replayReceiverInputProvision,
65
115
  withReceiverInputProvision
66
116
  };
67
117
  //# sourceMappingURL=input-provision.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/lib/signals/input-provision.ts"],
4
- "sourcesContent": ["import type { PibblRenderTransaction } from '../types.js';\nimport { GLOBAL_STATE } from '../global-state.js';\nimport { getPrimitiveReceiverToken } from '../element/metadata.js';\nimport {\n recordReceiverInputProvisionAdopted,\n recordReceiverInputProvisionCreated,\n recordReceiverInputProvisionRolledBack,\n trackSignalDependency,\n untracked,\n withSignalTracking,\n type SignalDependencyCollector,\n type SignalNode,\n} from './graph.js';\n\ninterface ReceiverInputProvision {\n readonly nodes: SignalNode<unknown>[];\n settled: boolean;\n}\n\nconst transactionProvisions = new WeakMap<\n PibblRenderTransaction,\n WeakMap<object, ReceiverInputProvision>\n>();\n\nexport function withReceiverInputProvision<T>(\n transaction: PibblRenderTransaction | undefined,\n receiver: object | undefined,\n callback: () => T,\n): T {\n if (!transaction || !receiver) return untracked(callback);\n if (currentComponentOwnsReceiver(receiver)) return callback();\n\n let provision: ReceiverInputProvision | undefined;\n const collector: SignalDependencyCollector = {\n addDependency(node): void {\n if (provision === undefined) {\n provision = createProvision(transaction, receiver);\n }\n if (!provision.nodes.includes(node)) provision.nodes.push(node);\n },\n };\n return withSignalTracking(collector, callback);\n}\n\nexport function adoptReceiverInputProvision(\n transaction: PibblRenderTransaction | undefined,\n receiver: object,\n): void {\n if (!transaction) return;\n const receivers = transactionProvisions.get(transaction);\n const provision = receivers?.get(receiver);\n if (!provision || provision.settled) return;\n\n provision.settled = true;\n receivers!.delete(receiver);\n for (const node of provision.nodes) trackSignalDependency(node);\n provision.nodes.length = 0;\n recordReceiverInputProvisionAdopted();\n}\n\nfunction createProvision(\n transaction: PibblRenderTransaction,\n receiver: object,\n): ReceiverInputProvision {\n let receivers = transactionProvisions.get(transaction);\n if (!receivers) {\n receivers = new WeakMap();\n transactionProvisions.set(transaction, receivers);\n }\n let provision = receivers.get(receiver);\n if (provision) return provision;\n\n provision = { nodes: [], settled: false };\n receivers.set(receiver, provision);\n recordReceiverInputProvisionCreated();\n const ownedProvision = provision;\n transaction.onFinish(() => {\n if (ownedProvision.settled) return;\n ownedProvision.settled = true;\n receivers!.delete(receiver);\n ownedProvision.nodes.length = 0;\n recordReceiverInputProvisionRolledBack();\n });\n return provision;\n}\n\nfunction currentComponentOwnsReceiver(receiver: object): boolean {\n const component = GLOBAL_STATE.componentRefs;\n if (!component) return false;\n return (getPrimitiveReceiverToken(component.element) ?? component) === receiver;\n}\n"],
5
- "mappings": "AACA,SAAS,oBAAoB;AAC7B,SAAS,iCAAiC;AAC1C;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAGK;AAOP,MAAM,wBAAwB,oBAAI,QAGhC;AAEK,SAAS,2BACd,aACA,UACA,UACG;AACH,MAAI,CAAC,eAAe,CAAC,SAAU,QAAO,UAAU,QAAQ;AACxD,MAAI,6BAA6B,QAAQ,EAAG,QAAO,SAAS;AAE5D,MAAI;AACJ,QAAM,YAAuC;AAAA,IAC3C,cAAc,MAAY;AACxB,UAAI,cAAc,QAAW;AAC3B,oBAAY,gBAAgB,aAAa,QAAQ;AAAA,MACnD;AACA,UAAI,CAAC,UAAU,MAAM,SAAS,IAAI,EAAG,WAAU,MAAM,KAAK,IAAI;AAAA,IAChE;AAAA,EACF;AACA,SAAO,mBAAmB,WAAW,QAAQ;AAC/C;AAEO,SAAS,4BACd,aACA,UACM;AACN,MAAI,CAAC,YAAa;AAClB,QAAM,YAAY,sBAAsB,IAAI,WAAW;AACvD,QAAM,YAAY,WAAW,IAAI,QAAQ;AACzC,MAAI,CAAC,aAAa,UAAU,QAAS;AAErC,YAAU,UAAU;AACpB,YAAW,OAAO,QAAQ;AAC1B,aAAW,QAAQ,UAAU,MAAO,uBAAsB,IAAI;AAC9D,YAAU,MAAM,SAAS;AACzB,sCAAoC;AACtC;AAEA,SAAS,gBACP,aACA,UACwB;AACxB,MAAI,YAAY,sBAAsB,IAAI,WAAW;AACrD,MAAI,CAAC,WAAW;AACd,gBAAY,oBAAI,QAAQ;AACxB,0BAAsB,IAAI,aAAa,SAAS;AAAA,EAClD;AACA,MAAI,YAAY,UAAU,IAAI,QAAQ;AACtC,MAAI,UAAW,QAAO;AAEtB,cAAY,EAAE,OAAO,CAAC,GAAG,SAAS,MAAM;AACxC,YAAU,IAAI,UAAU,SAAS;AACjC,sCAAoC;AACpC,QAAM,iBAAiB;AACvB,cAAY,SAAS,MAAM;AACzB,QAAI,eAAe,QAAS;AAC5B,mBAAe,UAAU;AACzB,cAAW,OAAO,QAAQ;AAC1B,mBAAe,MAAM,SAAS;AAC9B,2CAAuC;AAAA,EACzC,CAAC;AACD,SAAO;AACT;AAEA,SAAS,6BAA6B,UAA2B;AAC/D,QAAM,YAAY,aAAa;AAC/B,MAAI,CAAC,UAAW,QAAO;AACvB,UAAQ,0BAA0B,UAAU,OAAO,KAAK,eAAe;AACzE;",
4
+ "sourcesContent": ["import { adoptAllocationReceiver } from '../layout/allocation-dependencies.js';\nimport type { PibblRenderTransaction } from '../types.js';\nimport { GLOBAL_STATE } from '../global-state.js';\nimport { getPrimitiveReceiverToken } from '../element/metadata.js';\nimport {\n recordReceiverInputProvisionAdopted,\n recordReceiverInputProvisionCreated,\n recordReceiverInputProvisionRolledBack,\n trackSignalDependency,\n untracked,\n withSignalTracking,\n type SignalDependencyCollector,\n type SignalDependencyRoleInput,\n type SignalNode,\n} from './graph.js';\nimport { signalDependencyRoleMask } from './edge.js';\n\ninterface ReceiverInputProvision {\n readonly nodes: Array<{ node: SignalNode<unknown>; roles: number }>;\n settled: boolean;\n}\n\nconst transactionProvisions = new WeakMap<\n PibblRenderTransaction,\n WeakMap<object, ReceiverInputProvision>\n>();\n\n/** @internal Immutable input reads captured for replay into a current receiver. */\nexport type ReceiverInputProvisionReceipt = readonly { readonly node: SignalNode<unknown>; readonly roles: number }[];\n\ninterface ReceiverReadObserver {\n readonly read: (node: SignalNode<unknown>, roles: number, receiver: object) => void;\n readonly parent: ReceiverReadObserver | undefined;\n}\nlet receiverReadObserver: ReceiverReadObserver | undefined;\n\n/** Observe provisioned reads for cache validation without acquiring receiver edges. */\nexport function observeReceiverInputReads<T>(read: (node: SignalNode<unknown>, roles: number, receiver: object) => void, callback: () => T): T {\n const previous = receiverReadObserver;\n receiverReadObserver = { read, parent: previous };\n try { return callback(); }\n finally { receiverReadObserver = previous; }\n}\n\nexport function withReceiverInputProvision<T>(\n transaction: PibblRenderTransaction | undefined,\n receiver: object | undefined,\n callback: () => T,\n): T {\n return runReceiverInputProvision(transaction, receiver, callback);\n}\n\n/** @internal Captures every callback read, including roles already provisioned earlier. */\nexport function captureReceiverInputProvision<T>(\n transaction: PibblRenderTransaction | undefined,\n receiver: object | undefined,\n callback: () => T,\n): { value: T; receipt: ReceiverInputProvisionReceipt | undefined } {\n if (!transaction || !receiver || currentComponentOwnsReceiver(receiver)) {\n return { value: runReceiverInputProvision(transaction, receiver, callback), receipt: undefined };\n }\n const receipt: Array<{ node: SignalNode<unknown>; roles: number }> = [];\n const value = runReceiverInputProvision(transaction, receiver, callback, receipt);\n return { value, receipt };\n}\n\n/** @internal Replays reads into the current transaction, never an old receiver token. */\nexport function replayReceiverInputProvision(\n transaction: PibblRenderTransaction | undefined,\n receiver: object | undefined,\n receipt: ReceiverInputProvisionReceipt,\n): void {\n withReceiverInputProvision(transaction, receiver, () => {\n for (let index = 0; index < receipt.length; index++) {\n const entry = receipt[index];\n trackSignalDependency(entry.node, entry.roles);\n }\n });\n}\n\nfunction runReceiverInputProvision<T>(\n transaction: PibblRenderTransaction | undefined,\n receiver: object | undefined,\n callback: () => T,\n receipt?: Array<{ node: SignalNode<unknown>; roles: number }>,\n): T {\n if (!transaction || !receiver) return untracked(callback);\n if (currentComponentOwnsReceiver(receiver)) return callback();\n\n let provision: ReceiverInputProvision | undefined;\n const collector: SignalDependencyCollector = {\n addDependency(node, role: SignalDependencyRoleInput = 'unknown'): void {\n for (let observer = receiverReadObserver; observer; observer = observer.parent) observer.read(node, signalDependencyRoleMask(role), receiver);\n if (provision === undefined) {\n provision = createProvision(transaction, receiver);\n }\n const existing = provision.nodes.find(entry => entry.node === node);\n if (existing === undefined) provision.nodes.push({ node, roles: signalDependencyRoleMask(role) });\n else existing.roles |= signalDependencyRoleMask(role);\n if (receipt) {\n const roles = signalDependencyRoleMask(role);\n let captured = false;\n for (let index = 0; index < receipt.length; index++) {\n if (receipt[index].node !== node) continue;\n receipt[index].roles |= roles;\n captured = true;\n break;\n }\n if (!captured) receipt.push({ node, roles });\n }\n },\n };\n return withSignalTracking(collector, callback);\n}\n\nexport function adoptReceiverInputProvision(\n transaction: PibblRenderTransaction | undefined,\n receiver: object,\n): void {\n if (!transaction) return;\n const owner = GLOBAL_STATE.componentRefs;\n if (owner) adoptAllocationReceiver(transaction, receiver, owner);\n const receivers = transactionProvisions.get(transaction);\n const provision = receivers?.get(receiver);\n if (!provision || provision.settled) return;\n\n provision.settled = true;\n receivers!.delete(receiver);\n for (const { node, roles } of provision.nodes) trackSignalDependency(node, roles);\n provision.nodes.length = 0;\n recordReceiverInputProvisionAdopted();\n}\n\nfunction createProvision(\n transaction: PibblRenderTransaction,\n receiver: object,\n): ReceiverInputProvision {\n let receivers = transactionProvisions.get(transaction);\n if (!receivers) {\n receivers = new WeakMap();\n transactionProvisions.set(transaction, receivers);\n }\n let provision = receivers.get(receiver);\n if (provision) return provision;\n\n provision = { nodes: [], settled: false };\n receivers.set(receiver, provision);\n recordReceiverInputProvisionCreated();\n const ownedProvision = provision;\n transaction.onFinish(() => {\n if (ownedProvision.settled) return;\n ownedProvision.settled = true;\n receivers!.delete(receiver);\n ownedProvision.nodes.length = 0;\n recordReceiverInputProvisionRolledBack();\n });\n return provision;\n}\n\nfunction currentComponentOwnsReceiver(receiver: object): boolean {\n const component = GLOBAL_STATE.componentRefs;\n if (!component) return false;\n return (getPrimitiveReceiverToken(component.element) ?? component) === receiver;\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,9 +1,12 @@
1
+ import type { PibblInstance } from '../types.js';
1
2
  export interface SignalRenderConsumer {
2
3
  readonly debugName: string;
3
4
  readonly releaseCount: number;
4
5
  markClean(): void;
5
6
  }
6
7
  export interface SignalRenderConsumerOptions {
8
+ layoutOwner?: PibblInstance;
9
+ allocationReceiver?: object;
7
10
  debugName: string;
8
11
  invalidate(): void;
9
12
  }
@@ -1,9 +1,12 @@
1
+ import { invalidateAllocationReceiver, releaseAllocationReceiver } from "../layout/allocation-dependencies.js";
2
+ import { invalidateReceiverAllocationInputs } from "../layout/allocation-revision.js";
1
3
  import {
2
4
  recordRendererConsumerCreated,
3
5
  recordRendererConsumerReleased,
4
6
  recordRendererEdgeCreated,
5
7
  recordRendererEdgeReleased,
6
8
  recordRendererEdgeReused,
9
+ recordSignalInputInvalidation,
7
10
  recordLazyRendererConsumerCreated,
8
11
  withSignalTracking
9
12
  } from "./graph.js";
@@ -16,12 +19,14 @@ import {
16
19
  rollbackReactiveCollection,
17
20
  unlinkReactiveEdgeFromSource
18
21
  } from "./edge.js";
22
+ const allocationDependencyRoles = 1 | 2 | 4 | 64;
19
23
  const consumerStates = /* @__PURE__ */ new WeakMap();
20
24
  function signalRenderConsumerIdentity(consumer) {
21
25
  return consumerStates.get(consumer);
22
26
  }
23
27
  function createSignalRenderConsumer(options) {
24
28
  const state = {
29
+ allocationReceiver: options.allocationReceiver,
25
30
  dependencyHead: void 0,
26
31
  dependencyTail: void 0,
27
32
  dependencyFreeHead: void 0,
@@ -35,19 +40,18 @@ function createSignalRenderConsumer(options) {
35
40
  disposed: false,
36
41
  releaseCount: 0,
37
42
  renderInvalidation: true,
38
- addDependency(node) {
43
+ addDependency(node, role) {
39
44
  if (!state.collecting) return;
40
- const cursor = state.collectionCursor;
41
- if (cursor?.source === node && cursor.collectionGeneration !== state.collectionGeneration) {
42
- cursor.collectionGeneration = state.collectionGeneration;
43
- cursor.collectionKind = "reused";
44
- state.collectionCursor = cursor.consumerNext;
45
- return;
46
- }
47
- collectReactiveDependency(state, node);
45
+ collectReactiveDependency(state, node, role);
48
46
  },
49
- notify() {
50
- if (state.disposed || state.dirty) return;
47
+ notify(_node, dependencyRoles = 64) {
48
+ if (state.disposed) return;
49
+ recordSignalInputInvalidation(dependencyRoles);
50
+ if (options.allocationReceiver) invalidateAllocationReceiver(options.allocationReceiver, dependencyRoles);
51
+ if ((dependencyRoles & allocationDependencyRoles) !== 0) {
52
+ invalidateReceiverAllocationInputs(options.layoutOwner, (dependencyRoles & (1 | 64)) !== 0 ? "structural" : "metric");
53
+ }
54
+ if (state.dirty) return;
51
55
  state.dirty = true;
52
56
  options.invalidate();
53
57
  }
@@ -58,7 +62,9 @@ function createSignalRenderConsumer(options) {
58
62
  return state.releaseCount;
59
63
  },
60
64
  markClean() {
61
- if (!state.disposed) state.dirty = false;
65
+ if (!state.disposed) {
66
+ state.dirty = false;
67
+ }
62
68
  }
63
69
  };
64
70
  consumerStates.set(consumer, state);
@@ -105,7 +111,7 @@ function collectComponentSignalReads(owner, createOptions, callback) {
105
111
  let collector;
106
112
  if (state === void 0) {
107
113
  collector = {
108
- addDependency(node) {
114
+ addDependency(node, role) {
109
115
  if (committed) return;
110
116
  if (state === void 0) {
111
117
  const options = createOptions();
@@ -116,7 +122,7 @@ function collectComponentSignalReads(owner, createOptions, callback) {
116
122
  recordLazyRendererConsumerCreated();
117
123
  beginConsumerCollection(state);
118
124
  }
119
- state.addDependency(node);
125
+ state.addDependency(node, role);
120
126
  }
121
127
  };
122
128
  } else {
@@ -157,6 +163,7 @@ function disposeSignalRenderConsumer(consumer) {
157
163
  const state = getConsumerState(consumer);
158
164
  if (state.disposed) return;
159
165
  state.disposed = true;
166
+ if (state.allocationReceiver) releaseAllocationReceiver(state.allocationReceiver);
160
167
  state.collectionGeneration++;
161
168
  state.collecting = false;
162
169
  disposeReactiveConsumer(state, releaseRendererEdge);
@@ -177,6 +184,7 @@ function beginConsumerCollection(state) {
177
184
  function commitCollectedDependencies(state) {
178
185
  const onlyEdge = state.dependencyHead;
179
186
  if (onlyEdge !== void 0 && onlyEdge.consumerNext === void 0 && onlyEdge.collectionGeneration === state.collectionGeneration && onlyEdge.sourceLinked && onlyEdge.collectionKind === "reused") {
187
+ onlyEdge.dependencyRoles = onlyEdge.collectedDependencyRoles;
180
188
  recordRendererEdgeReused();
181
189
  onlyEdge.observedVersion = onlyEdge.source.version;
182
190
  onlyEdge.collectionKind = void 0;