@pibbl/core 0.0.1 → 0.0.3-alpha.109.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (683) hide show
  1. package/README.md +1 -1
  2. package/THIRD_PARTY_NOTICES.txt +81 -0
  3. package/dist/features/machines/animation.d.ts +64 -0
  4. package/dist/features/machines/animation.js +55 -0
  5. package/dist/features/machines/animation.js.map +7 -0
  6. package/dist/features/machines/animation.mjs +1 -0
  7. package/dist/features/machines/assign.d.ts +16 -0
  8. package/dist/features/machines/assign.js +15 -0
  9. package/dist/features/machines/assign.js.map +7 -0
  10. package/dist/features/machines/callback.d.ts +9 -0
  11. package/dist/features/machines/callback.js +7 -0
  12. package/dist/features/machines/callback.js.map +7 -0
  13. package/dist/features/machines/hook.d.ts +30 -0
  14. package/dist/features/machines/hook.js +37 -0
  15. package/dist/features/machines/hook.js.map +7 -0
  16. package/dist/features/machines/index.d.ts +6 -0
  17. package/dist/features/machines/index.js +12 -0
  18. package/dist/features/machines/index.js.map +7 -0
  19. package/dist/features/machines/index.mjs +1 -0
  20. package/dist/features/machines/runtime.d.ts +18 -0
  21. package/dist/features/machines/runtime.js +363 -0
  22. package/dist/features/machines/runtime.js.map +7 -0
  23. package/dist/features/machines/types.d.ts +164 -0
  24. package/dist/features/physics/2d-geometry.d.ts +3 -3
  25. package/dist/features/physics/2d-geometry.js.map +1 -1
  26. package/dist/features/physics/2d-testing.d.ts +1 -1
  27. package/dist/features/physics/2d-testing.js +2 -2
  28. package/dist/features/physics/2d-testing.js.map +2 -2
  29. package/dist/features/physics/2d.d.ts +115 -62
  30. package/dist/features/physics/2d.js +59 -28
  31. package/dist/features/physics/2d.js.map +2 -2
  32. package/dist/features/physics/lib/2d/canvas/components.js +25 -21
  33. package/dist/features/physics/lib/2d/canvas/components.js.map +2 -2
  34. package/dist/features/physics/lib/2d/canvas/presentation.js +1 -2
  35. package/dist/features/physics/lib/2d/canvas/presentation.js.map +2 -2
  36. package/dist/features/physics/lib/2d/collision/casts.js +4 -2
  37. package/dist/features/physics/lib/2d/collision/casts.js.map +2 -2
  38. package/dist/features/physics/lib/2d/query-types.d.ts +6 -0
  39. package/dist/features/physics/lib/2d/runtime/controller.d.ts +7 -6
  40. package/dist/features/physics/lib/2d/runtime/controller.js +1 -1
  41. package/dist/features/physics/lib/2d/runtime/controller.js.map +2 -2
  42. package/dist/features/physics/lib/2d/runtime/obstacles.js +9 -11
  43. package/dist/features/physics/lib/2d/runtime/obstacles.js.map +2 -2
  44. package/dist/features/physics/lib/2d/shapes.js +8 -9
  45. package/dist/features/physics/lib/2d/shapes.js.map +2 -2
  46. package/dist/features/physics/lib/2d/types.d.ts +8 -30
  47. package/dist/features/physics/lib/2d/world/queries.d.ts +7 -6
  48. package/dist/features/physics/lib/2d/world/queries.js.map +2 -2
  49. package/dist/features/physics/lib/2d/world/rapier.js +22 -26
  50. package/dist/features/physics/lib/2d/world/rapier.js.map +2 -2
  51. package/dist/features/sprites/formats/aseprite.d.ts +5 -0
  52. package/dist/features/sprites/formats/texture-packer.d.ts +5 -0
  53. package/dist/features/sprites/index.d.ts +6 -0
  54. package/dist/features/sprites/loader.d.ts +25 -0
  55. package/dist/features/sprites/loader.js +6 -3
  56. package/dist/features/sprites/loader.js.map +2 -2
  57. package/dist/features/sprites/model.d.ts +75 -0
  58. package/dist/features/sprites/sprite.d.ts +22 -0
  59. package/dist/features/textures/index.d.ts +12 -2
  60. package/dist/features/textures/index.js +33 -1
  61. package/dist/features/textures/index.js.map +2 -2
  62. package/dist/features/textures/lib/chemical-field.d.ts +56 -0
  63. package/dist/features/textures/lib/chemical-field.js +154 -0
  64. package/dist/features/textures/lib/chemical-field.js.map +7 -0
  65. package/dist/features/textures/lib/chemical-recipes.d.ts +119 -0
  66. package/dist/features/textures/lib/chemical-recipes.js +275 -0
  67. package/dist/features/textures/lib/chemical-recipes.js.map +7 -0
  68. package/dist/features/textures/lib/definitions.d.ts +3 -18
  69. package/dist/features/textures/lib/definitions.js +17 -24
  70. package/dist/features/textures/lib/definitions.js.map +2 -2
  71. package/dist/features/textures/lib/geometric-patterns.d.ts +149 -0
  72. package/dist/features/textures/lib/geometric-patterns.js +305 -0
  73. package/dist/features/textures/lib/geometric-patterns.js.map +7 -0
  74. package/dist/features/textures/lib/gray-scott.d.ts +55 -0
  75. package/dist/features/textures/lib/gray-scott.js +37 -0
  76. package/dist/features/textures/lib/gray-scott.js.map +7 -0
  77. package/dist/features/textures/lib/palette.js +1 -3
  78. package/dist/features/textures/lib/palette.js.map +2 -2
  79. package/dist/features/textures/lib/patterns.d.ts +123 -0
  80. package/dist/features/textures/lib/patterns.js +344 -0
  81. package/dist/features/textures/lib/patterns.js.map +7 -0
  82. package/dist/features/textures/lib/rain-drops.js +2 -1
  83. package/dist/features/textures/lib/rain-drops.js.map +2 -2
  84. package/dist/features/textures/lib/reaction-diffusion.d.ts +3 -2
  85. package/dist/features/textures/lib/reaction-diffusion.js +9 -20
  86. package/dist/features/textures/lib/reaction-diffusion.js.map +2 -2
  87. package/dist/features/textures/lib/simulation.d.ts +10 -4
  88. package/dist/features/textures/lib/simulation.js +23 -13
  89. package/dist/features/textures/lib/simulation.js.map +2 -2
  90. package/dist/features/textures/lib/wasm/electric.js +8 -1
  91. package/dist/features/textures/lib/wasm/electric.js.map +2 -2
  92. package/dist/features/textures/lib/water-surface.js +1 -3
  93. package/dist/features/textures/lib/water-surface.js.map +2 -2
  94. package/dist/features/viz/index.d.ts +92 -5
  95. package/dist/features/viz/index.js +202 -4
  96. package/dist/features/viz/index.js.map +2 -2
  97. package/dist/features/viz/inspection/bar.d.ts +79 -0
  98. package/dist/features/viz/inspection/bar.js +49 -0
  99. package/dist/features/viz/inspection/bar.js.map +7 -0
  100. package/dist/features/viz/inspection/candle.d.ts +156 -0
  101. package/dist/features/viz/inspection/candle.js +120 -0
  102. package/dist/features/viz/inspection/candle.js.map +7 -0
  103. package/dist/features/viz/inspection/capture-types.d.ts +65 -0
  104. package/dist/features/viz/inspection/capture.d.ts +16 -0
  105. package/dist/features/viz/inspection/capture.js +49 -0
  106. package/dist/features/viz/inspection/capture.js.map +7 -0
  107. package/dist/features/viz/inspection/handler.d.ts +36 -0
  108. package/dist/features/viz/inspection/handler.js +91 -0
  109. package/dist/features/viz/inspection/handler.js.map +7 -0
  110. package/dist/features/viz/inspection/ohlc-bar.d.ts +132 -0
  111. package/dist/features/viz/inspection/ohlc-bar.js +118 -0
  112. package/dist/features/viz/inspection/ohlc-bar.js.map +7 -0
  113. package/dist/features/viz/inspection/owned-ref.d.ts +16 -0
  114. package/dist/features/viz/inspection/owned-ref.js +99 -0
  115. package/dist/features/viz/inspection/owned-ref.js.map +7 -0
  116. package/dist/features/viz/inspection/painted-point.d.ts +22 -0
  117. package/dist/features/viz/inspection/painted-point.js +29 -0
  118. package/dist/features/viz/inspection/painted-point.js.map +7 -0
  119. package/dist/features/viz/inspection/queries.d.ts +100 -0
  120. package/dist/features/viz/inspection/queries.js +192 -0
  121. package/dist/features/viz/inspection/queries.js.map +7 -0
  122. package/dist/features/viz/inspection/query-types.d.ts +177 -0
  123. package/dist/features/viz/inspection/volume.d.ts +104 -0
  124. package/dist/features/viz/inspection/volume.js +95 -0
  125. package/dist/features/viz/inspection/volume.js.map +7 -0
  126. package/dist/features/viz/inspection.d.ts +19 -0
  127. package/dist/features/viz/inspection.js +54 -0
  128. package/dist/features/viz/inspection.js.map +7 -0
  129. package/dist/features/viz/inspection.mjs +1 -0
  130. package/dist/features/viz/lib/area-series.d.ts +62 -0
  131. package/dist/features/viz/lib/area-series.js +120 -0
  132. package/dist/features/viz/lib/area-series.js.map +7 -0
  133. package/dist/features/viz/lib/axis-labels.d.ts +2 -0
  134. package/dist/features/viz/lib/axis-labels.js +41 -0
  135. package/dist/features/viz/lib/axis-labels.js.map +7 -0
  136. package/dist/features/viz/lib/axis-title.d.ts +23 -0
  137. package/dist/features/viz/lib/axis-title.js +24 -0
  138. package/dist/features/viz/lib/axis-title.js.map +7 -0
  139. package/dist/features/viz/lib/axis.d.ts +1 -1
  140. package/dist/features/viz/lib/axis.js +50 -50
  141. package/dist/features/viz/lib/axis.js.map +2 -2
  142. package/dist/features/viz/lib/bar-scale.d.ts +7 -0
  143. package/dist/features/viz/lib/bar-scale.js +34 -0
  144. package/dist/features/viz/lib/bar-scale.js.map +7 -0
  145. package/dist/features/viz/lib/bar-series.d.ts +3 -1
  146. package/dist/features/viz/lib/bar-series.js +21 -5
  147. package/dist/features/viz/lib/bar-series.js.map +2 -2
  148. package/dist/features/viz/lib/baseline-series.d.ts +55 -0
  149. package/dist/features/viz/lib/baseline-series.js +136 -0
  150. package/dist/features/viz/lib/baseline-series.js.map +7 -0
  151. package/dist/features/viz/lib/candlestick-series.d.ts +62 -0
  152. package/dist/features/viz/lib/candlestick-series.js +150 -0
  153. package/dist/features/viz/lib/candlestick-series.js.map +7 -0
  154. package/dist/features/viz/lib/censored-point-series.d.ts +71 -0
  155. package/dist/features/viz/lib/censored-point-series.js +129 -0
  156. package/dist/features/viz/lib/censored-point-series.js.map +7 -0
  157. package/dist/features/viz/lib/chart-lines.d.ts +41 -0
  158. package/dist/features/viz/lib/chart-lines.js +32 -0
  159. package/dist/features/viz/lib/chart-lines.js.map +7 -0
  160. package/dist/features/viz/lib/color-context.d.ts +4 -0
  161. package/dist/features/viz/lib/color-context.js +41 -0
  162. package/dist/features/viz/lib/color-context.js.map +7 -0
  163. package/dist/features/viz/lib/color-math.d.ts +4 -0
  164. package/dist/features/viz/lib/color-math.js +31 -0
  165. package/dist/features/viz/lib/color-math.js.map +7 -0
  166. package/dist/features/viz/lib/color-types.d.ts +53 -0
  167. package/dist/features/viz/lib/curve-definition.d.ts +49 -0
  168. package/dist/features/viz/lib/curve-definition.js +142 -0
  169. package/dist/features/viz/lib/curve-definition.js.map +7 -0
  170. package/dist/features/viz/lib/diverging-color-scale.d.ts +11 -0
  171. package/dist/features/viz/lib/diverging-color-scale.js +51 -0
  172. package/dist/features/viz/lib/diverging-color-scale.js.map +7 -0
  173. package/dist/features/viz/lib/domain-navigation.d.ts +40 -0
  174. package/dist/features/viz/lib/domain-navigation.js +77 -0
  175. package/dist/features/viz/lib/domain-navigation.js.map +7 -0
  176. package/dist/features/viz/lib/editable-chart-elements.d.ts +178 -0
  177. package/dist/features/viz/lib/editable-chart-elements.js +733 -0
  178. package/dist/features/viz/lib/editable-chart-elements.js.map +7 -0
  179. package/dist/features/viz/lib/financial-aggregation.d.ts +127 -0
  180. package/dist/features/viz/lib/financial-aggregation.js +116 -0
  181. package/dist/features/viz/lib/financial-aggregation.js.map +7 -0
  182. package/dist/features/viz/lib/financial-autoscale.d.ts +64 -0
  183. package/dist/features/viz/lib/financial-autoscale.js +61 -0
  184. package/dist/features/viz/lib/financial-autoscale.js.map +7 -0
  185. package/dist/features/viz/lib/financial-comparison.d.ts +62 -0
  186. package/dist/features/viz/lib/financial-comparison.js +98 -0
  187. package/dist/features/viz/lib/financial-comparison.js.map +7 -0
  188. package/dist/features/viz/lib/financial-geometry.d.ts +77 -0
  189. package/dist/features/viz/lib/financial-geometry.js +67 -0
  190. package/dist/features/viz/lib/financial-geometry.js.map +7 -0
  191. package/dist/features/viz/lib/financial-indicators.d.ts +114 -0
  192. package/dist/features/viz/lib/financial-indicators.js +135 -0
  193. package/dist/features/viz/lib/financial-indicators.js.map +7 -0
  194. package/dist/features/viz/lib/financial-oscillators.d.ts +171 -0
  195. package/dist/features/viz/lib/financial-oscillators.js +265 -0
  196. package/dist/features/viz/lib/financial-oscillators.js.map +7 -0
  197. package/dist/features/viz/lib/graph/bipartite.d.ts +14 -0
  198. package/dist/features/viz/lib/graph/bipartite.js +250 -0
  199. package/dist/features/viz/lib/graph/bipartite.js.map +7 -0
  200. package/dist/features/viz/lib/graph/chord.d.ts +44 -0
  201. package/dist/features/viz/lib/graph/chord.js +348 -0
  202. package/dist/features/viz/lib/graph/chord.js.map +7 -0
  203. package/dist/features/viz/lib/graph/dependency.d.ts +26 -0
  204. package/dist/features/viz/lib/graph/dependency.js +140 -0
  205. package/dist/features/viz/lib/graph/dependency.js.map +7 -0
  206. package/dist/features/viz/lib/graph/force.d.ts +28 -0
  207. package/dist/features/viz/lib/graph/force.js +580 -0
  208. package/dist/features/viz/lib/graph/force.js.map +7 -0
  209. package/dist/features/viz/lib/graph/hierarchy.d.ts +21 -0
  210. package/dist/features/viz/lib/graph/hierarchy.js +112 -0
  211. package/dist/features/viz/lib/graph/hierarchy.js.map +7 -0
  212. package/dist/features/viz/lib/graph/icicle.d.ts +16 -0
  213. package/dist/features/viz/lib/graph/icicle.js +153 -0
  214. package/dist/features/viz/lib/graph/icicle.js.map +7 -0
  215. package/dist/features/viz/lib/graph/matrix.d.ts +30 -0
  216. package/dist/features/viz/lib/graph/matrix.js +243 -0
  217. package/dist/features/viz/lib/graph/matrix.js.map +7 -0
  218. package/dist/features/viz/lib/graph/neighborhood.d.ts +11 -0
  219. package/dist/features/viz/lib/graph/neighborhood.js +281 -0
  220. package/dist/features/viz/lib/graph/neighborhood.js.map +7 -0
  221. package/dist/features/viz/lib/graph/routes.d.ts +35 -0
  222. package/dist/features/viz/lib/graph/routes.js +101 -0
  223. package/dist/features/viz/lib/graph/routes.js.map +7 -0
  224. package/dist/features/viz/lib/graph/sankey.d.ts +44 -0
  225. package/dist/features/viz/lib/graph/sankey.js +341 -0
  226. package/dist/features/viz/lib/graph/sankey.js.map +7 -0
  227. package/dist/features/viz/lib/graph/shared.d.ts +59 -0
  228. package/dist/features/viz/lib/graph/shared.js +301 -0
  229. package/dist/features/viz/lib/graph/shared.js.map +7 -0
  230. package/dist/features/viz/lib/graph/tree.d.ts +11 -0
  231. package/dist/features/viz/lib/graph/tree.js +232 -0
  232. package/dist/features/viz/lib/graph/tree.js.map +7 -0
  233. package/dist/features/viz/lib/graph/treemap.d.ts +20 -0
  234. package/dist/features/viz/lib/graph/treemap.js +227 -0
  235. package/dist/features/viz/lib/graph/treemap.js.map +7 -0
  236. package/dist/features/viz/lib/graph/types.d.ts +1097 -0
  237. package/dist/features/viz/lib/hover-card.js +8 -9
  238. package/dist/features/viz/lib/hover-card.js.map +2 -2
  239. package/dist/features/viz/lib/hover-data.d.ts +1 -1
  240. package/dist/features/viz/lib/hover-data.js +6 -3
  241. package/dist/features/viz/lib/hover-data.js.map +2 -2
  242. package/dist/features/viz/lib/hover-types.d.ts +5 -5
  243. package/dist/features/viz/lib/interval-band-series.d.ts +49 -0
  244. package/dist/features/viz/lib/interval-band-series.js +136 -0
  245. package/dist/features/viz/lib/interval-band-series.js.map +7 -0
  246. package/dist/features/viz/lib/interval-diamond-series.d.ts +43 -0
  247. package/dist/features/viz/lib/interval-diamond-series.js +122 -0
  248. package/dist/features/viz/lib/interval-diamond-series.js.map +7 -0
  249. package/dist/features/viz/lib/interval-series.d.ts +79 -0
  250. package/dist/features/viz/lib/interval-series.js +158 -0
  251. package/dist/features/viz/lib/interval-series.js.map +7 -0
  252. package/dist/features/viz/lib/layout-pie.js +9 -13
  253. package/dist/features/viz/lib/layout-pie.js.map +2 -2
  254. package/dist/features/viz/lib/line-series.d.ts +1 -1
  255. package/dist/features/viz/lib/line-series.js +47 -28
  256. package/dist/features/viz/lib/line-series.js.map +2 -2
  257. package/dist/features/viz/lib/linear-scale-component.d.ts +7 -0
  258. package/dist/features/viz/lib/linear-scale-component.js +18 -0
  259. package/dist/features/viz/lib/linear-scale-component.js.map +7 -0
  260. package/dist/features/viz/lib/linear-scale.js +1 -1
  261. package/dist/features/viz/lib/linear-scale.js.map +2 -2
  262. package/dist/features/viz/lib/log-scale-component.d.ts +7 -0
  263. package/dist/features/viz/lib/log-scale-component.js +19 -0
  264. package/dist/features/viz/lib/log-scale-component.js.map +7 -0
  265. package/dist/features/viz/lib/log-scale.d.ts +2 -0
  266. package/dist/features/viz/lib/log-scale.js +53 -0
  267. package/dist/features/viz/lib/log-scale.js.map +7 -0
  268. package/dist/features/viz/lib/monotone-curve.d.ts +11 -0
  269. package/dist/features/viz/lib/monotone-curve.js +63 -0
  270. package/dist/features/viz/lib/monotone-curve.js.map +7 -0
  271. package/dist/features/viz/lib/nearest.d.ts +9 -9
  272. package/dist/features/viz/lib/nearest.js.map +1 -1
  273. package/dist/features/viz/lib/numeric-range-interpolation.d.ts +15 -0
  274. package/dist/features/viz/lib/numeric-range-interpolation.js +36 -0
  275. package/dist/features/viz/lib/numeric-range-interpolation.js.map +7 -0
  276. package/dist/features/viz/lib/numeric-ticks.d.ts +38 -0
  277. package/dist/features/viz/lib/numeric-ticks.js +54 -0
  278. package/dist/features/viz/lib/numeric-ticks.js.map +7 -0
  279. package/dist/features/viz/lib/ohlc-bar-series.d.ts +55 -0
  280. package/dist/features/viz/lib/ohlc-bar-series.js +168 -0
  281. package/dist/features/viz/lib/ohlc-bar-series.js.map +7 -0
  282. package/dist/features/viz/lib/paired-series.d.ts +44 -0
  283. package/dist/features/viz/lib/paired-series.js +93 -0
  284. package/dist/features/viz/lib/paired-series.js.map +7 -0
  285. package/dist/features/viz/lib/pie-layout.js +2 -1
  286. package/dist/features/viz/lib/pie-layout.js.map +2 -2
  287. package/dist/features/viz/lib/plot-series.js +11 -6
  288. package/dist/features/viz/lib/plot-series.js.map +2 -2
  289. package/dist/features/viz/lib/plot-types.d.ts +4 -3
  290. package/dist/features/viz/lib/point-scale-component.d.ts +7 -0
  291. package/dist/features/viz/lib/point-scale-component.js +19 -0
  292. package/dist/features/viz/lib/point-scale-component.js.map +7 -0
  293. package/dist/features/viz/lib/point-scale.d.ts +2 -0
  294. package/dist/features/viz/lib/point-scale.js +45 -0
  295. package/dist/features/viz/lib/point-scale.js.map +7 -0
  296. package/dist/features/viz/lib/point-series.d.ts +1 -1
  297. package/dist/features/viz/lib/point-series.js +36 -9
  298. package/dist/features/viz/lib/point-series.js.map +2 -2
  299. package/dist/features/viz/lib/point-types.d.ts +5 -2
  300. package/dist/features/viz/lib/reference-band.d.ts +16 -0
  301. package/dist/features/viz/lib/reference-band.js +30 -0
  302. package/dist/features/viz/lib/reference-band.js.map +7 -0
  303. package/dist/features/viz/lib/scale-adjust.js +9 -4
  304. package/dist/features/viz/lib/scale-adjust.js.map +2 -2
  305. package/dist/features/viz/lib/scale-context.d.ts +5 -4
  306. package/dist/features/viz/lib/scale-context.js +15 -11
  307. package/dist/features/viz/lib/scale-context.js.map +2 -2
  308. package/dist/features/viz/lib/scale-provider.d.ts +2 -0
  309. package/dist/features/viz/lib/scale-provider.js +13 -0
  310. package/dist/features/viz/lib/scale-provider.js.map +7 -0
  311. package/dist/features/viz/lib/scale-ticks.d.ts +5 -0
  312. package/dist/features/viz/lib/scale-ticks.js +64 -0
  313. package/dist/features/viz/lib/scale-ticks.js.map +7 -0
  314. package/dist/features/viz/lib/scale-view.d.ts +4 -0
  315. package/dist/features/viz/lib/scale-view.js +21 -0
  316. package/dist/features/viz/lib/scale-view.js.map +7 -0
  317. package/dist/features/viz/lib/sequential-color-scale.d.ts +11 -0
  318. package/dist/features/viz/lib/sequential-color-scale.js +49 -0
  319. package/dist/features/viz/lib/sequential-color-scale.js.map +7 -0
  320. package/dist/features/viz/lib/series-position.d.ts +12 -0
  321. package/dist/features/viz/lib/series-position.js +44 -0
  322. package/dist/features/viz/lib/series-position.js.map +7 -0
  323. package/dist/features/viz/lib/step-curves.d.ts +19 -0
  324. package/dist/features/viz/lib/step-curves.js +53 -0
  325. package/dist/features/viz/lib/step-curves.js.map +7 -0
  326. package/dist/features/viz/lib/symlog-scale-component.d.ts +7 -0
  327. package/dist/features/viz/lib/symlog-scale-component.js +19 -0
  328. package/dist/features/viz/lib/symlog-scale-component.js.map +7 -0
  329. package/dist/features/viz/lib/symlog-scale.d.ts +2 -0
  330. package/dist/features/viz/lib/symlog-scale.js +38 -0
  331. package/dist/features/viz/lib/symlog-scale.js.map +7 -0
  332. package/dist/features/viz/lib/threshold-color-scale.d.ts +43 -0
  333. package/dist/features/viz/lib/threshold-color-scale.js +59 -0
  334. package/dist/features/viz/lib/threshold-color-scale.js.map +7 -0
  335. package/dist/features/viz/lib/trading-time-mapping.d.ts +32 -0
  336. package/dist/features/viz/lib/trading-time-mapping.js +89 -0
  337. package/dist/features/viz/lib/trading-time-mapping.js.map +7 -0
  338. package/dist/features/viz/lib/trading-time-scale.d.ts +83 -0
  339. package/dist/features/viz/lib/trading-time-scale.js +96 -0
  340. package/dist/features/viz/lib/trading-time-scale.js.map +7 -0
  341. package/dist/features/viz/lib/trajectory-series.d.ts +71 -0
  342. package/dist/features/viz/lib/trajectory-series.js +111 -0
  343. package/dist/features/viz/lib/trajectory-series.js.map +7 -0
  344. package/dist/features/viz/lib/types.d.ts +114 -21
  345. package/dist/features/viz/lib/use-bar-scale.d.ts +8 -0
  346. package/dist/features/viz/lib/use-bar-scale.js +9 -0
  347. package/dist/features/viz/lib/use-bar-scale.js.map +7 -0
  348. package/dist/features/viz/lib/use-continuous-scale.d.ts +8 -0
  349. package/dist/features/viz/lib/use-continuous-scale.js +14 -0
  350. package/dist/features/viz/lib/use-continuous-scale.js.map +7 -0
  351. package/dist/features/viz/lib/use-linear-scale.d.ts +8 -0
  352. package/dist/features/viz/lib/use-linear-scale.js +9 -0
  353. package/dist/features/viz/lib/use-linear-scale.js.map +7 -0
  354. package/dist/features/viz/lib/use-log-scale.d.ts +8 -0
  355. package/dist/features/viz/lib/use-log-scale.js +9 -0
  356. package/dist/features/viz/lib/use-log-scale.js.map +7 -0
  357. package/dist/features/viz/lib/use-point-scale.d.ts +8 -0
  358. package/dist/features/viz/lib/use-point-scale.js +9 -0
  359. package/dist/features/viz/lib/use-point-scale.js.map +7 -0
  360. package/dist/features/viz/lib/use-symlog-scale.d.ts +8 -0
  361. package/dist/features/viz/lib/use-symlog-scale.js +9 -0
  362. package/dist/features/viz/lib/use-symlog-scale.js.map +7 -0
  363. package/dist/features/viz/lib/use-utc-scale.d.ts +8 -0
  364. package/dist/features/viz/lib/use-utc-scale.js +9 -0
  365. package/dist/features/viz/lib/use-utc-scale.js.map +7 -0
  366. package/dist/features/viz/lib/utc-labels.d.ts +12 -0
  367. package/dist/features/viz/lib/utc-labels.js +27 -0
  368. package/dist/features/viz/lib/utc-labels.js.map +7 -0
  369. package/dist/features/viz/lib/utc-scale-component.d.ts +7 -0
  370. package/dist/features/viz/lib/utc-scale-component.js +18 -0
  371. package/dist/features/viz/lib/utc-scale-component.js.map +7 -0
  372. package/dist/features/viz/lib/utc-scale.d.ts +21 -0
  373. package/dist/features/viz/lib/utc-scale.js +124 -0
  374. package/dist/features/viz/lib/utc-scale.js.map +7 -0
  375. package/dist/features/viz/lib/volume-series.d.ts +59 -0
  376. package/dist/features/viz/lib/volume-series.js +117 -0
  377. package/dist/features/viz/lib/volume-series.js.map +7 -0
  378. package/dist/features/viz/lib/weighted-point-series.d.ts +71 -0
  379. package/dist/features/viz/lib/weighted-point-series.js +169 -0
  380. package/dist/features/viz/lib/weighted-point-series.js.map +7 -0
  381. package/dist/filters/backdrop-contrast-gpu.d.ts +5 -0
  382. package/dist/filters/backdrop-contrast-gpu.js +33 -0
  383. package/dist/filters/backdrop-contrast-gpu.js.map +7 -0
  384. package/dist/filters/backdrop-contrast.d.ts +21 -0
  385. package/dist/filters/backdrop-contrast.js +61 -0
  386. package/dist/filters/backdrop-contrast.js.map +7 -0
  387. package/dist/filters/displacement.js +1 -1
  388. package/dist/filters/displacement.js.map +2 -2
  389. package/dist/filters/emboss-gpu.d.ts +4 -0
  390. package/dist/filters/emboss-gpu.js +39 -0
  391. package/dist/filters/emboss-gpu.js.map +7 -0
  392. package/dist/filters/emboss.d.ts +32 -0
  393. package/dist/filters/emboss.js +104 -0
  394. package/dist/filters/emboss.js.map +7 -0
  395. package/dist/filters/filter-executor.d.ts +11 -4
  396. package/dist/filters/filter-executor.js +104 -49
  397. package/dist/filters/filter-executor.js.map +2 -2
  398. package/dist/filters/reflected-light.js +1 -1
  399. package/dist/filters/reflected-light.js.map +2 -2
  400. package/dist/filters/reflection-gpu.d.ts +3 -1
  401. package/dist/filters/reflection-gpu.js +5 -2
  402. package/dist/filters/reflection-gpu.js.map +2 -2
  403. package/dist/filters/render-backdrop-contrast-boundary.d.ts +31 -0
  404. package/dist/filters/render-backdrop-contrast-boundary.js +116 -0
  405. package/dist/filters/render-backdrop-contrast-boundary.js.map +7 -0
  406. package/dist/filters/render-emboss-boundary.d.ts +13 -0
  407. package/dist/filters/render-emboss-boundary.js +131 -0
  408. package/dist/filters/render-emboss-boundary.js.map +7 -0
  409. package/dist/filters.d.ts +9 -5
  410. package/dist/filters.js +4 -0
  411. package/dist/filters.js.map +2 -2
  412. package/dist/index.d.ts +10 -6
  413. package/dist/index.js +18 -2
  414. package/dist/index.js.map +2 -2
  415. package/dist/internal.d.ts +4 -0
  416. package/dist/internal.js +6 -0
  417. package/dist/internal.js.map +2 -2
  418. package/dist/layout-kernel.d.ts +12 -0
  419. package/dist/layout-kernel.js +11 -0
  420. package/dist/layout-kernel.js.map +7 -0
  421. package/dist/layout-kernel.mjs +1 -0
  422. package/dist/lib/animation/definition.d.ts +5 -3
  423. package/dist/lib/animation/definition.js +29 -4
  424. package/dist/lib/animation/definition.js.map +2 -2
  425. package/dist/lib/animation/playback.d.ts +8 -0
  426. package/dist/lib/animation/playback.js +33 -11
  427. package/dist/lib/animation/playback.js.map +2 -2
  428. package/dist/lib/animation/spring.d.ts +3 -1
  429. package/dist/lib/animation/spring.js.map +2 -2
  430. package/dist/lib/animation/types.d.ts +29 -73
  431. package/dist/lib/backend/types.d.ts +13 -1
  432. package/dist/lib/backend/types.js.map +2 -2
  433. package/dist/lib/components/arc-geometry.js +2 -1
  434. package/dist/lib/components/arc-geometry.js.map +2 -2
  435. package/dist/lib/components/g.js +2 -0
  436. package/dist/lib/components/g.js.map +2 -2
  437. package/dist/lib/components/html-box.js +2 -1
  438. package/dist/lib/components/html-box.js.map +2 -2
  439. package/dist/lib/components/img.js +3 -3
  440. package/dist/lib/components/img.js.map +2 -2
  441. package/dist/lib/components/layer.js +98 -16
  442. package/dist/lib/components/layer.js.map +3 -3
  443. package/dist/lib/components/text.d.ts +16 -0
  444. package/dist/lib/components/text.js +131 -24
  445. package/dist/lib/components/text.js.map +2 -2
  446. package/dist/lib/define-primitive.d.ts +4 -2
  447. package/dist/lib/define-primitive.js +3 -1
  448. package/dist/lib/define-primitive.js.map +2 -2
  449. package/dist/lib/element/metadata.d.ts +9 -0
  450. package/dist/lib/element/metadata.js +19 -0
  451. package/dist/lib/element/metadata.js.map +2 -2
  452. package/dist/lib/element/resolve-primitive-inputs.d.ts +2 -0
  453. package/dist/lib/element/resolve-primitive-inputs.js +17 -4
  454. package/dist/lib/element/resolve-primitive-inputs.js.map +2 -2
  455. package/dist/lib/events/event-facade.d.ts +18 -0
  456. package/dist/lib/events/event-facade.js +28 -2
  457. package/dist/lib/events/event-facade.js.map +2 -2
  458. package/dist/lib/events/hit-test.js +2 -1
  459. package/dist/lib/events/hit-test.js.map +2 -2
  460. package/dist/lib/events/propagation.d.ts +2 -1
  461. package/dist/lib/events/propagation.js +22 -16
  462. package/dist/lib/events/propagation.js.map +2 -2
  463. package/dist/lib/events/registrations.d.ts +10 -0
  464. package/dist/lib/events/registrations.js +160 -5
  465. package/dist/lib/events/registrations.js.map +2 -2
  466. package/dist/lib/execute-render.js +25 -1
  467. package/dist/lib/execute-render.js.map +2 -2
  468. package/dist/lib/filter/filter-region.js +3 -10
  469. package/dist/lib/filter/filter-region.js.map +2 -2
  470. package/dist/lib/focus/focus-manager.d.ts +8 -1
  471. package/dist/lib/focus/focus-manager.js +87 -43
  472. package/dist/lib/focus/focus-manager.js.map +2 -2
  473. package/dist/lib/focus/geometry.d.ts +2 -0
  474. package/dist/lib/focus/geometry.js +6 -0
  475. package/dist/lib/focus/geometry.js.map +2 -2
  476. package/dist/lib/geometry/path-bend-guide.js +1 -1
  477. package/dist/lib/geometry/path-bend-guide.js.map +2 -2
  478. package/dist/lib/geometry/path-geometry.js +12 -11
  479. package/dist/lib/geometry/path-geometry.js.map +2 -2
  480. package/dist/lib/geometry/path-transforms.js +17 -21
  481. package/dist/lib/geometry/path-transforms.js.map +2 -2
  482. package/dist/lib/geometry/path-warp-bezier.js +3 -1
  483. package/dist/lib/geometry/path-warp-bezier.js.map +2 -2
  484. package/dist/lib/geometry/path-warp.js +1 -1
  485. package/dist/lib/geometry/path-warp.js.map +2 -2
  486. package/dist/lib/global-state.js +2 -0
  487. package/dist/lib/global-state.js.map +2 -2
  488. package/dist/lib/hooks/use-animated-value.d.ts +11 -21
  489. package/dist/lib/hooks/use-animated-value.js +23 -70
  490. package/dist/lib/hooks/use-animated-value.js.map +3 -3
  491. package/dist/lib/hooks/use-playback.js +1 -0
  492. package/dist/lib/hooks/use-playback.js.map +2 -2
  493. package/dist/lib/html/html-events.d.ts +32 -0
  494. package/dist/lib/html/html-events.js +179 -0
  495. package/dist/lib/html/html-events.js.map +7 -0
  496. package/dist/lib/html/html-service.d.ts +8 -2
  497. package/dist/lib/html/html-service.js +198 -65
  498. package/dist/lib/html/html-service.js.map +2 -2
  499. package/dist/lib/html/overlay-config.js +7 -6
  500. package/dist/lib/html/overlay-config.js.map +2 -2
  501. package/dist/lib/html/types.d.ts +29 -2
  502. package/dist/lib/layout/absolute.d.ts +11 -5
  503. package/dist/lib/layout/absolute.js +329 -55
  504. package/dist/lib/layout/absolute.js.map +3 -3
  505. package/dist/lib/layout/allocation-checkpoint-owner.d.ts +11 -0
  506. package/dist/lib/layout/allocation-checkpoint-owner.js +86 -0
  507. package/dist/lib/layout/allocation-checkpoint-owner.js.map +7 -0
  508. package/dist/lib/layout/allocation-checkpoint.d.ts +53 -0
  509. package/dist/lib/layout/allocation-checkpoint.js +463 -0
  510. package/dist/lib/layout/allocation-checkpoint.js.map +7 -0
  511. package/dist/lib/layout/allocation-dependencies.d.ts +30 -0
  512. package/dist/lib/layout/allocation-dependencies.js +90 -0
  513. package/dist/lib/layout/allocation-dependencies.js.map +7 -0
  514. package/dist/lib/layout/allocation-revision.d.ts +13 -0
  515. package/dist/lib/layout/allocation-revision.js +67 -0
  516. package/dist/lib/layout/allocation-revision.js.map +7 -0
  517. package/dist/lib/layout/box-insets.d.ts +17 -0
  518. package/dist/lib/layout/box-insets.js +138 -0
  519. package/dist/lib/layout/box-insets.js.map +7 -0
  520. package/dist/lib/layout/box-sizing.d.ts +16 -0
  521. package/dist/lib/layout/box-sizing.js +77 -0
  522. package/dist/lib/layout/box-sizing.js.map +7 -0
  523. package/dist/lib/layout/box.js +42 -12
  524. package/dist/lib/layout/box.js.map +2 -2
  525. package/dist/lib/layout/canvas-measurement.d.ts +13 -0
  526. package/dist/lib/layout/canvas-measurement.js +57 -0
  527. package/dist/lib/layout/canvas-measurement.js.map +7 -0
  528. package/dist/lib/layout/context.d.ts +35 -6
  529. package/dist/lib/layout/context.js +72 -3
  530. package/dist/lib/layout/context.js.map +2 -2
  531. package/dist/lib/layout/define-layout-component.d.ts +23 -0
  532. package/dist/lib/layout/define-layout-component.js +84 -0
  533. package/dist/lib/layout/define-layout-component.js.map +7 -0
  534. package/dist/lib/layout/flex-allocation-cache.d.ts +42 -0
  535. package/dist/lib/layout/flex-baseline-mode.d.ts +2 -0
  536. package/dist/lib/layout/flex-baseline-mode.js +7 -0
  537. package/dist/lib/layout/flex-baseline-mode.js.map +7 -0
  538. package/dist/lib/layout/flex.d.ts +50 -15
  539. package/dist/lib/layout/flex.js +2124 -195
  540. package/dist/lib/layout/flex.js.map +3 -3
  541. package/dist/lib/layout/flow.js +225 -49
  542. package/dist/lib/layout/flow.js.map +2 -2
  543. package/dist/lib/layout/geometry-publication.d.ts +53 -0
  544. package/dist/lib/layout/geometry-publication.js +244 -0
  545. package/dist/lib/layout/geometry-publication.js.map +7 -0
  546. package/dist/lib/layout/grid-kernel.d.ts +63 -0
  547. package/dist/lib/layout/grid-kernel.js +168 -0
  548. package/dist/lib/layout/grid-kernel.js.map +7 -0
  549. package/dist/lib/layout/grid.d.ts +63 -4
  550. package/dist/lib/layout/grid.js +767 -171
  551. package/dist/lib/layout/grid.js.map +3 -3
  552. package/dist/lib/layout/measure.d.ts +55 -3
  553. package/dist/lib/layout/measure.js +448 -15
  554. package/dist/lib/layout/measure.js.map +2 -2
  555. package/dist/lib/layout/overlay.js +81 -23
  556. package/dist/lib/layout/overlay.js.map +2 -2
  557. package/dist/lib/layout/participation.d.ts +27 -0
  558. package/dist/lib/layout/participation.js +188 -0
  559. package/dist/lib/layout/participation.js.map +7 -0
  560. package/dist/lib/layout/place-child.js +1 -1
  561. package/dist/lib/layout/place-child.js.map +2 -2
  562. package/dist/lib/layout/positioning-diagnostics.d.ts +1 -1
  563. package/dist/lib/layout/positioning-diagnostics.js +13 -2
  564. package/dist/lib/layout/positioning-diagnostics.js.map +2 -2
  565. package/dist/lib/layout/prepared-root.d.ts +121 -0
  566. package/dist/lib/layout/prepared-root.js +360 -0
  567. package/dist/lib/layout/prepared-root.js.map +7 -0
  568. package/dist/lib/layout/standalone-kernel.d.ts +60 -0
  569. package/dist/lib/layout/standalone-kernel.js +722 -0
  570. package/dist/lib/layout/standalone-kernel.js.map +7 -0
  571. package/dist/lib/layout/topology.d.ts +21 -0
  572. package/dist/lib/layout/topology.js +113 -0
  573. package/dist/lib/layout/topology.js.map +7 -0
  574. package/dist/lib/layout/types.d.ts +5 -0
  575. package/dist/lib/layout/wasm/artifact.d.ts +1 -0
  576. package/dist/lib/layout/wasm/artifact.js +5 -0
  577. package/dist/lib/layout/wasm/artifact.js.map +7 -0
  578. package/dist/lib/layout/wasm/bytes.d.ts +1 -0
  579. package/dist/lib/layout/wasm/bytes.js +5 -0
  580. package/dist/lib/layout/wasm/bytes.js.map +7 -0
  581. package/dist/lib/layout/wasm/embedded.d.ts +2 -0
  582. package/dist/lib/layout/wasm/embedded.js +12 -0
  583. package/dist/lib/layout/wasm/embedded.js.map +7 -0
  584. package/dist/lib/layout/wasm/layout.wasm +0 -0
  585. package/dist/lib/layout/wasm/module.d.ts +8 -0
  586. package/dist/lib/layout/wasm/module.js +70 -0
  587. package/dist/lib/layout/wasm/module.js.map +7 -0
  588. package/dist/lib/layout/wasm/region.d.ts +267 -0
  589. package/dist/lib/layout/wasm/region.js +1018 -0
  590. package/dist/lib/layout/wasm/region.js.map +7 -0
  591. package/dist/lib/manipulation/controller.js +4 -7
  592. package/dist/lib/manipulation/controller.js.map +2 -2
  593. package/dist/lib/manipulation/frame.js +1 -1
  594. package/dist/lib/manipulation/frame.js.map +2 -2
  595. package/dist/lib/manipulation/handles.js +32 -33
  596. package/dist/lib/manipulation/handles.js.map +2 -2
  597. package/dist/lib/manipulation/solve.js +12 -10
  598. package/dist/lib/manipulation/solve.js.map +2 -2
  599. package/dist/lib/mount-pibbl.js +1 -0
  600. package/dist/lib/mount-pibbl.js.map +2 -2
  601. package/dist/lib/mount-prepared-pibbl.d.ts +5 -0
  602. package/dist/lib/mount-prepared-pibbl.js +29 -0
  603. package/dist/lib/mount-prepared-pibbl.js.map +7 -0
  604. package/dist/lib/mount-request.d.ts +8 -0
  605. package/dist/lib/mount-request.js +41 -0
  606. package/dist/lib/mount-request.js.map +7 -0
  607. package/dist/lib/pibbl.d.ts +21 -13
  608. package/dist/lib/pibbl.js +18 -16
  609. package/dist/lib/pibbl.js.map +2 -2
  610. package/dist/lib/recording/recording.d.ts +43 -0
  611. package/dist/lib/recording/recording.js +555 -0
  612. package/dist/lib/recording/recording.js.map +7 -0
  613. package/dist/lib/recording/types.d.ts +118 -0
  614. package/dist/lib/recording/wasm-bytes.d.ts +1 -0
  615. package/dist/lib/recording/wasm-bytes.js +5 -0
  616. package/dist/lib/recording/wasm-bytes.js.map +7 -0
  617. package/dist/lib/recording/worker-source.d.ts +1 -0
  618. package/dist/lib/recording/worker-source.js +5 -0
  619. package/dist/lib/recording/worker-source.js.map +7 -0
  620. package/dist/lib/render-layer/controller.d.ts +9 -3
  621. package/dist/lib/render-layer/controller.js +259 -110
  622. package/dist/lib/render-layer/controller.js.map +2 -2
  623. package/dist/lib/render-transaction.d.ts +12 -2
  624. package/dist/lib/render-transaction.js +69 -1
  625. package/dist/lib/render-transaction.js.map +2 -2
  626. package/dist/lib/render.js +32 -8
  627. package/dist/lib/render.js.map +2 -2
  628. package/dist/lib/scheduler/realm-scheduler.d.ts +2 -0
  629. package/dist/lib/scheduler/realm-scheduler.js +55 -26
  630. package/dist/lib/scheduler/realm-scheduler.js.map +2 -2
  631. package/dist/lib/scheduler/renderer-participant.js +1 -0
  632. package/dist/lib/scheduler/renderer-participant.js.map +2 -2
  633. package/dist/lib/series-inspection-frame.d.ts +18 -0
  634. package/dist/lib/series-inspection-frame.js +70 -0
  635. package/dist/lib/series-inspection-frame.js.map +7 -0
  636. package/dist/lib/signals/edge.d.ts +7 -4
  637. package/dist/lib/signals/edge.js +25 -3
  638. package/dist/lib/signals/edge.js.map +2 -2
  639. package/dist/lib/signals/graph.d.ts +16 -2
  640. package/dist/lib/signals/graph.js +54 -12
  641. package/dist/lib/signals/graph.js.map +2 -2
  642. package/dist/lib/signals/input-provision.d.ts +15 -0
  643. package/dist/lib/signals/input-provision.js +53 -3
  644. package/dist/lib/signals/input-provision.js.map +2 -2
  645. package/dist/lib/signals/render-consumer.d.ts +3 -0
  646. package/dist/lib/signals/render-consumer.js +22 -14
  647. package/dist/lib/signals/render-consumer.js.map +2 -2
  648. package/dist/lib/style/positioning.d.ts +50 -2
  649. package/dist/lib/style/positioning.js +28 -4
  650. package/dist/lib/style/positioning.js.map +2 -2
  651. package/dist/lib/style/resolve-built-in.d.ts +4 -3
  652. package/dist/lib/style/resolve-built-in.js +17 -3
  653. package/dist/lib/style/resolve-built-in.js.map +2 -2
  654. package/dist/lib/style/resolve-dispatch.d.ts +3 -0
  655. package/dist/lib/style/resolve-dispatch.js +77 -4
  656. package/dist/lib/style/resolve-dispatch.js.map +2 -2
  657. package/dist/lib/style/resolve-length.d.ts +2 -0
  658. package/dist/lib/style/resolve-length.js +13 -9
  659. package/dist/lib/style/resolve-length.js.map +2 -2
  660. package/dist/lib/style/sizing-length.d.ts +51 -0
  661. package/dist/lib/style/sizing-length.js +77 -0
  662. package/dist/lib/style/sizing-length.js.map +7 -0
  663. package/dist/lib/style/types.d.ts +63 -25
  664. package/dist/lib/surface/root-surface.js +10 -6
  665. package/dist/lib/surface/root-surface.js.map +2 -2
  666. package/dist/lib/textures/texture.js +10 -8
  667. package/dist/lib/textures/texture.js.map +2 -2
  668. package/dist/lib/transitions/capture.js +4 -1
  669. package/dist/lib/transitions/capture.js.map +2 -2
  670. package/dist/lib/transitions/embers-physics.js +17 -10
  671. package/dist/lib/transitions/embers-physics.js.map +2 -2
  672. package/dist/lib/types.d.ts +110 -1
  673. package/dist/sync.d.ts +16 -0
  674. package/dist/sync.js +13 -0
  675. package/dist/sync.js.map +7 -0
  676. package/dist/sync.mjs +1 -0
  677. package/package.json +43 -6
  678. package/dist/features/viz/lib/scale.d.ts +0 -11
  679. package/dist/features/viz/lib/scale.js +0 -80
  680. package/dist/features/viz/lib/scale.js.map +0 -7
  681. package/dist/features/viz/lib/use-scale.d.ts +0 -20
  682. package/dist/features/viz/lib/use-scale.js +0 -10
  683. package/dist/features/viz/lib/use-scale.js.map +0 -7
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/lib/render-layer/controller.ts"],
4
- "sourcesContent": ["import { GLOBAL_STATE, getCurrentPibblInstance } from \"../global-state.js\";\nimport { getCurrentWorldTransform } from \"../render-target.js\";\nimport {\n queueFrameCompletion,\n requestInstanceRender,\n} from \"../scheduler/realm-scheduler.js\";\nimport type { PibblComponentRefs, RenderingContext2D } from \"../types.js\";\nimport type { PibblPointerEvents } from \"../events/types.js\";\nimport {\n PibblHitDisposition,\n PibblPaintEntryKind,\n type PibblHitTestOutput,\n type PibblNestedPaintEntry,\n} from \"../events/paint-entry.js\";\nimport {\n createTarget,\n releaseTarget,\n updateTarget,\n type PibblEventTargetRegistration,\n} from \"../events/registrations.js\";\nimport {\n hasResolverPointerCapture,\n releaseResolverInputWinner,\n releaseResolverPointerCapture,\n setResolverPointerCapture,\n type PibblResolverInputType,\n type PibblResolverInputWinner,\n} from \"../events/resolver-input.js\";\nimport type {\n PibblRenderLayerContext,\n PibblRenderLayerDefinition,\n PibblRenderLayerFrame,\n PibblRenderLayerHit,\n PibblRenderLayerInteractionSnapshot,\n PibblRenderLayerSize,\n PibblRenderLayerTarget,\n} from \"./types.js\";\n\nclass SynchronousLifecycleError extends TypeError {}\n\ninterface StagedInteraction<Target extends object> {\n readonly snapshot: PibblRenderLayerInteractionSnapshot<Target>;\n readonly targets: readonly PibblRenderLayerTarget<Target>[];\n readonly transform: DOMMatrix;\n readonly clippingStack: PibblNestedPaintEntry[\"clippingStack\"];\n}\n\ninterface RenderCandidate<Target extends object> {\n readonly bitmap: ImageBitmap;\n readonly interaction: StagedInteraction<Target>;\n readonly policy: RenderLayerPolicy;\n}\n\ninterface RenderLayerPolicy {\n readonly missBehavior: \"pass-through\" | \"block\" | \"target-layer\";\n readonly pointerEvents: PibblPointerEvents | undefined;\n readonly keyboardFocusable: boolean | undefined;\n readonly keyboardNavigationBounds:\n | Readonly<{\n x: number;\n y: number;\n width: number;\n height: number;\n }>\n | undefined;\n}\n\ninterface WinnerState<Target extends object> {\n readonly point: Readonly<{ x: number; y: number }>;\n readonly hit: PibblRenderLayerHit<Target>;\n}\n\nconst MISS_SNAPSHOT: PibblRenderLayerInteractionSnapshot<object> = Object.freeze({\n targets: Object.freeze([]),\n hitTest: () => Object.freeze({ kind: \"miss\" as const }),\n});\n\nconst RESOLVER_INPUT_TYPES = Object.freeze([\n \"pointerdown\",\n \"pointermove\",\n \"pointerup\",\n \"pointercancel\",\n \"wheel\",\n \"contextmenu\",\n \"click\",\n] as const);\n\nconst RESOLVER_CAPTURE_INPUT_TYPES = Object.freeze([\n \"pointermove\",\n \"pointerup\",\n \"pointercancel\",\n] as const);\n\n// The private target deliberately owns no user callback. This eligibility\n// marker lets the shared keyboard default dispatch its click through the\n// component's one structural listener.\nconst STRUCTURAL_CLICK_ELIGIBILITY = () => {};\n\nexport function assertSynchronous(value: unknown, callback: string): void {\n if (value && typeof (value as { then?: unknown }).then === \"function\") {\n throw new SynchronousLifecycleError(\n `defineRenderLayer ${callback}() must be synchronous.`,\n );\n }\n}\n\nexport class RenderLayerController<Props, Resources, Target extends object> {\n private readonly instance = getCurrentPibblInstance();\n private readonly refs: PibblComponentRefs<any>;\n private readonly canvas: OffscreenCanvas;\n private readonly context: PibblRenderLayerContext;\n private resources: Resources | undefined;\n private created = false;\n private disposed = false;\n private size: PibblRenderLayerSize | undefined;\n private props: Readonly<Props> | undefined;\n private needsRender = true;\n private needsResize = true;\n private inputGated = true;\n private candidate: RenderCandidate<Target> | undefined;\n private committed: ImageBitmap | undefined;\n private committedInteraction:\n PibblRenderLayerInteractionSnapshot<Target> | undefined;\n private committedTargetDescriptors: readonly PibblRenderLayerTarget<Target>[] =\n Object.freeze([]);\n private readonly committedTargets = new Map<\n Target,\n PibblEventTargetRegistration\n >();\n private readonly layerTarget: PibblEventTargetRegistration;\n private committedPolicy: RenderLayerPolicy = Object.freeze({\n missBehavior: \"pass-through\",\n pointerEvents: undefined,\n keyboardFocusable: undefined,\n keyboardNavigationBounds: undefined,\n });\n private resolverTransform = new DOMMatrix();\n private resolverInverseTransform = new DOMMatrix();\n private resolverBounds = new Path2D();\n private resolverSize: PibblRenderLayerSize | undefined;\n private resolutionErrorQueued = false;\n private readonly inputNativeReleases = new Map<\n PibblResolverInputType,\n () => void\n >();\n private readonly resolverEntry: PibblNestedPaintEntry;\n private readonly inputWinner: PibblResolverInputWinner;\n private lastTime: number | undefined;\n\n constructor(\n private readonly definition: PibblRenderLayerDefinition<\n Props,\n Resources,\n Target\n >,\n refs: PibblComponentRefs<any>,\n ) {\n this.refs = refs;\n this.layerTarget = createTarget(this.instance, refs, -1);\n this.inputWinner = {\n eventRoot: this.instance.eventRoot,\n deliver: (type, point, originalEvent, state) =>\n this.deliverInput(type, point, originalEvent, state),\n onPointerCaptureChange: () =>\n this.updateInputNativeOwnership(\n Boolean(this.committedInteraction?.onInput),\n ),\n };\n this.resolverEntry = {\n paintKind: PibblPaintEntryKind.Resolver,\n instance: this.instance,\n bounds: this.resolverBounds,\n transform: this.resolverTransform,\n clippingStack: [],\n resolveLocal: (x, y, output) => this.resolveLocal(x, y, output),\n };\n assertCapability();\n this.canvas = new OffscreenCanvas(1, 1);\n const controller = this;\n this.context = Object.freeze({\n canvas: this.canvas,\n get size() {\n if (!controller.size) {\n throw new Error(\"Render layer size is unavailable before mount.\");\n }\n return controller.size;\n },\n invalidate() {\n controller.invalidate(true);\n },\n });\n refs.teardowns.add(() => this.dispose());\n }\n\n render(\n props: Readonly<Props>,\n size: PibblRenderLayerSize,\n ctx: RenderingContext2D,\n policy: RenderLayerPolicy = this.committedPolicy,\n ): void {\n if (this.disposed) return;\n const initial = !this.created;\n const propsChanged = !initial && !sameProps(this.props, props);\n const sizeChanged = !sameSize(this.size, size);\n const policyChanged = !samePolicy(this.committedPolicy, policy);\n this.size = size;\n this.publishResolver(size);\n if (sizeChanged) {\n this.canvas.width = size.backingWidth;\n this.canvas.height = size.backingHeight;\n this.needsResize = true;\n this.needsRender = true;\n }\n if (initial) {\n const resources = this.definition.create(this.context, props);\n assertSynchronous(resources, \"create\");\n this.resources = resources;\n this.created = true;\n } else {\n try {\n if (propsChanged && this.definition.update) {\n assertSynchronous(\n this.definition.update(this.resources!, props, this.context),\n \"update\",\n );\n }\n if (this.needsResize && this.definition.resize) {\n assertSynchronous(\n this.definition.resize(this.resources!, size, this.context),\n \"resize\",\n );\n this.needsResize = false;\n }\n } catch (error) {\n if (isSynchronousViolation(error)) throw error;\n this.failCandidate(ctx, size, error);\n return;\n }\n }\n if (initial && this.needsResize && this.definition.resize) {\n try {\n assertSynchronous(\n this.definition.resize(this.resources!, size, this.context),\n \"resize\",\n );\n this.needsResize = false;\n } catch (error) {\n if (isSynchronousViolation(error)) throw error;\n this.failCandidate(ctx, size, error);\n return;\n }\n }\n if (!this.definition.resize) this.needsResize = false;\n this.props = snapshotProps(props);\n if (initial || propsChanged || sizeChanged || this.needsRender) {\n const frame = this.createFrame();\n this.needsRender = false;\n try {\n assertSynchronous(\n this.definition.render(this.resources!, frame, this.context),\n \"render\",\n );\n } catch (error) {\n if (isSynchronousViolation(error)) throw error;\n this.failCandidate(ctx, size, error);\n return;\n }\n let interaction: StagedInteraction<Target>;\n try {\n interaction = this.settleInteraction(props);\n } catch (error) {\n if (isSynchronousViolation(error)) throw error;\n this.failCandidate(ctx, size, error);\n return;\n }\n const stagedPolicy = snapshotPolicy(policy);\n const candidate = this.canvas.transferToImageBitmap();\n this.candidate?.bitmap.close();\n const stagedCandidate = {\n bitmap: candidate,\n interaction,\n policy: stagedPolicy,\n };\n this.candidate = stagedCandidate;\n const transaction = GLOBAL_STATE.renderTransaction;\n transaction?.onFinish((success) =>\n this.finishCandidate(stagedCandidate, success),\n );\n if (!transaction) this.finishCandidate(stagedCandidate, true);\n ctx.drawImage(\n candidate,\n 0,\n 0,\n size.backingWidth,\n size.backingHeight,\n 0,\n 0,\n size.width,\n size.height,\n );\n return;\n }\n const transaction = GLOBAL_STATE.renderTransaction;\n transaction?.onFinish((success) => {\n if (success && !this.disposed) {\n if (policyChanged && this.committedInteraction) {\n this.commitInteraction(\n {\n snapshot: this.committedInteraction,\n targets: this.committedTargetDescriptors,\n transform: this.resolverTransform,\n clippingStack: this.resolverEntry.clippingStack,\n },\n snapshotPolicy(policy),\n );\n }\n this.refreshCommittedTargetGeometry();\n }\n });\n if (!transaction && policyChanged && this.committedInteraction) {\n this.commitInteraction(\n {\n snapshot: this.committedInteraction,\n targets: this.committedTargetDescriptors,\n transform: this.resolverTransform,\n clippingStack: this.resolverEntry.clippingStack,\n },\n snapshotPolicy(policy),\n );\n }\n this.drawCommitted(ctx, size);\n }\n\n private publishResolver(size: PibblRenderLayerSize): void {\n if (!sameSize(this.resolverSize, size)) {\n const bounds = new Path2D();\n bounds.rect(0, 0, size.width, size.height);\n this.resolverBounds = bounds;\n this.resolverEntry.bounds = bounds;\n this.resolverSize = size;\n }\n this.resolverTransform = getCurrentWorldTransform();\n this.resolverInverseTransform = this.resolverTransform.inverse();\n this.resolverEntry.transform = this.resolverTransform;\n this.resolverEntry.clippingStack = Array.from(GLOBAL_STATE.clippingStack);\n // Sets preserve insertion order, so refresh the retained entry at its\n // current Canvas paint position on every traversal.\n this.instance.paintEntries.delete(this.resolverEntry);\n this.instance.paintEntries.add(this.resolverEntry);\n }\n\n private drawCommitted(\n ctx: RenderingContext2D,\n size: PibblRenderLayerSize,\n ): void {\n if (this.committed) {\n ctx.drawImage(\n this.committed,\n 0,\n 0,\n size.backingWidth,\n size.backingHeight,\n 0,\n 0,\n size.width,\n size.height,\n );\n }\n }\n\n private createFrame(): PibblRenderLayerFrame {\n const snapshot = GLOBAL_STATE.frameSnapshot;\n const time = snapshot?.logicalTime ?? this.instance.renderTimestamp;\n const delta = this.lastTime === undefined ? 0 : time - this.lastTime;\n this.lastTime = time;\n return Object.freeze({\n frameId: snapshot?.frameId ?? 0,\n time,\n delta,\n deltaSeconds: delta / 1000,\n invalidate: () => this.invalidate(false),\n });\n }\n\n private invalidate(gateInput: boolean): void {\n if (\n this.disposed ||\n this.refs.teardowns.closed ||\n this.instance.mainTeardowns.closed\n )\n return;\n this.needsRender = true;\n if (gateInput) this.inputGated = true;\n requestInstanceRender(this.instance);\n }\n\n private settleInteraction(props: Readonly<Props>): StagedInteraction<Target> {\n const snapshot =\n this.definition.interaction?.settle(this.resources!, props, this.size!) ??\n (MISS_SNAPSHOT as PibblRenderLayerInteractionSnapshot<Target>);\n assertSynchronous(snapshot, \"interaction.settle\");\n const targets: PibblRenderLayerTarget<Target>[] = [];\n const identities = new Set<Target>();\n for (const target of snapshot.targets) {\n if (identities.has(target.target)) {\n throw new Error(\n \"Render layer interaction contains a duplicate target identity.\",\n );\n }\n identities.add(target.target);\n targets.push(\n Object.freeze({\n ...target,\n handlers: target.handlers\n ? Object.freeze({ ...target.handlers })\n : undefined,\n keyboardNavigationBounds: target.keyboardNavigationBounds\n ? Object.freeze({ ...target.keyboardNavigationBounds })\n : undefined,\n }),\n );\n }\n return {\n snapshot,\n targets: Object.freeze(targets),\n transform: this.resolverTransform,\n clippingStack: this.resolverEntry.clippingStack,\n };\n }\n\n private finishCandidate(\n candidate: RenderCandidate<Target>,\n success: boolean,\n ): void {\n if (this.candidate !== candidate) return;\n this.candidate = undefined;\n if (!success || this.disposed) {\n candidate.bitmap.close();\n return;\n }\n this.commitInteraction(candidate.interaction, candidate.policy);\n this.committed?.close();\n this.committed = candidate.bitmap;\n this.resolutionErrorQueued = false;\n this.inputGated = false;\n }\n\n /** Publishes one interaction snapshot only after its bitmap transaction wins. */\n private commitInteraction(\n interaction: StagedInteraction<Target>,\n policy: RenderLayerPolicy,\n ): void {\n const retained = new Set<Target>();\n for (const descriptor of policy.pointerEvents === \"none\"\n ? []\n : interaction.targets) {\n if (descriptor.pointerEvents === \"none\") continue;\n retained.add(descriptor.target);\n let registration = this.committedTargets.get(descriptor.target);\n if (!registration) {\n registration = createTarget(\n this.instance,\n this.refs,\n this.committedTargets.size + 1,\n );\n this.committedTargets.set(descriptor.target, registration);\n }\n updateTarget(\n registration,\n descriptor.handlers ?? {},\n {\n path: new Path2D(),\n cursor: descriptor.cursor,\n keyboardFocusable: descriptor.keyboardFocusable,\n keyboardNavigationBounds: descriptor.keyboardNavigationBounds,\n },\n true,\n );\n this.applyResolverGeometry(registration, interaction);\n this.observeTransactionalFocusTarget(registration);\n }\n for (const [identity, registration] of this.committedTargets) {\n if (retained.has(identity)) continue;\n releaseTarget(registration);\n this.committedTargets.delete(identity);\n }\n if (\n policy.pointerEvents !== \"none\" &&\n policy.missBehavior === \"target-layer\"\n ) {\n updateTarget(\n this.layerTarget,\n { onClick: STRUCTURAL_CLICK_ELIGIBILITY },\n {\n path: new Path2D(),\n keyboardFocusable: policy.keyboardFocusable,\n keyboardNavigationBounds: policy.keyboardNavigationBounds,\n },\n true,\n );\n this.applyResolverGeometry(this.layerTarget, interaction);\n this.observeTransactionalFocusTarget(this.layerTarget);\n } else {\n releaseTarget(this.layerTarget);\n }\n this.committedInteraction = interaction.snapshot;\n this.committedTargetDescriptors = interaction.targets;\n this.committedPolicy = policy;\n this.updateInputNativeOwnership(Boolean(interaction.snapshot.onInput));\n }\n\n private applyResolverGeometry(\n target: PibblEventTargetRegistration,\n interaction: StagedInteraction<Target>,\n ): void {\n if (!target.paintEntry) return;\n target.paintEntry.transform = interaction.transform;\n target.paintEntry.clippingStack = interaction.clippingStack;\n target.owner.paintEntries.delete(target.paintEntry);\n }\n\n private refreshCommittedTargetGeometry(): void {\n const interaction = {\n transform: this.resolverTransform,\n clippingStack: this.resolverEntry.clippingStack,\n } as StagedInteraction<Target>;\n for (const target of this.committedTargets.values()) {\n this.applyResolverGeometry(target, interaction);\n this.instance.eventRoot.focusPolicy?.observeTarget(target);\n this.observeTransactionalFocusTarget(target);\n }\n if (this.layerTarget.live) {\n this.applyResolverGeometry(this.layerTarget, interaction);\n this.instance.eventRoot.focusPolicy?.observeTarget(this.layerTarget);\n this.observeTransactionalFocusTarget(this.layerTarget);\n }\n }\n\n private observeTransactionalFocusTarget(\n target: PibblEventTargetRegistration,\n ): void {\n this.instance.eventRoot.focusPolicy?.observeTransactionalTarget?.(target);\n }\n\n private resolveLocal(\n localX: number,\n localY: number,\n output: PibblHitTestOutput,\n ): void {\n if (this.committedPolicy.pointerEvents === \"none\") {\n output.disposition = PibblHitDisposition.Miss;\n output.target = null;\n return;\n }\n const state = this.resolveWinnerState(localX, localY);\n output.winner = this.inputWinner;\n output.winnerState = state;\n switch (state.hit.kind) {\n case \"miss\":\n if (this.committedPolicy.missBehavior === \"pass-through\") {\n output.disposition = PibblHitDisposition.Miss;\n output.target = null;\n delete output.winner;\n delete output.winnerState;\n } else if (this.committedPolicy.missBehavior === \"block\") {\n output.disposition = PibblHitDisposition.Block;\n output.target = null;\n } else {\n output.disposition = PibblHitDisposition.Target;\n output.target = this.layerTarget.live ? this.layerTarget : null;\n }\n return;\n case \"block\":\n output.disposition = PibblHitDisposition.Block;\n output.target = null;\n return;\n case \"target\": {\n const target = this.committedTargets.get(state.hit.target);\n if (!target?.live) {\n output.disposition = PibblHitDisposition.Block;\n output.target = null;\n output.winnerState = {\n point: state.point,\n hit: Object.freeze({ kind: \"block\" as const }),\n } satisfies WinnerState<Target>;\n this.reportUnknownTarget();\n return;\n }\n output.disposition = PibblHitDisposition.Target;\n output.target = target;\n }\n }\n }\n\n private resolveWinnerState(\n localX: number,\n localY: number,\n ): WinnerState<Target> {\n const point = Object.freeze({ x: localX, y: localY });\n if (this.inputGated || !this.committedInteraction) {\n return { point, hit: Object.freeze({ kind: \"block\" }) };\n }\n const hit = this.committedInteraction.hitTest(point);\n if (hit.kind === \"target\" && !this.committedTargets.has(hit.target)) {\n this.reportUnknownTarget();\n return { point, hit: Object.freeze({ kind: \"block\" }) };\n }\n return { point, hit };\n }\n\n private reportUnknownTarget(): void {\n if (this.resolutionErrorQueued) return;\n this.resolutionErrorQueued = true;\n queueFrameCompletion(() => {\n throw new Error(\n \"Render layer hitTest() returned a target absent from its committed snapshot.\",\n );\n });\n }\n\n private deliverInput(\n type: PibblResolverInputType,\n rootPoint: Readonly<{ x: number; y: number }>,\n originalEvent: PointerEvent | WheelEvent | MouseEvent,\n resolvedState: unknown,\n ): void {\n const snapshot = this.committedInteraction;\n if (!snapshot?.onInput || this.disposed) return;\n let state = resolvedState as WinnerState<Target> | undefined;\n if (!state) {\n const local = this.resolverInverseTransform.transformPoint(\n new DOMPoint(rootPoint.x, rootPoint.y),\n );\n state = this.resolveWinnerState(local.x, local.y);\n }\n snapshot.onInput(\n Object.freeze({\n type,\n point: state.point,\n hit: state.hit,\n originalEvent,\n setPointerCapture: (pointerId: number) =>\n setResolverPointerCapture(this.inputWinner, pointerId),\n releasePointerCapture: (pointerId: number) =>\n releaseResolverPointerCapture(this.inputWinner, pointerId),\n }),\n );\n }\n\n private updateInputNativeOwnership(enabled: boolean): void {\n const required = new Set<PibblResolverInputType>(\n enabled\n ? RESOLVER_INPUT_TYPES\n : hasResolverPointerCapture(this.inputWinner)\n ? RESOLVER_CAPTURE_INPUT_TYPES\n : [],\n );\n for (const [type, release] of this.inputNativeReleases) {\n if (required.has(type)) continue;\n release();\n this.inputNativeReleases.delete(type);\n }\n const hub = this.instance.eventRoot.nativeListeners;\n if (!hub) return;\n for (const type of required) {\n if (!this.inputNativeReleases.has(type)) {\n this.inputNativeReleases.set(type, hub.acquire(type));\n }\n }\n }\n\n private failCandidate(\n ctx: RenderingContext2D,\n size: PibblRenderLayerSize,\n error: unknown,\n ): void {\n this.inputGated = true;\n this.drawCommitted(ctx, size);\n queueFrameCompletion(() => {\n throw error;\n });\n }\n\n private dispose(): void {\n if (this.disposed) return;\n this.disposed = true;\n try {\n if (this.created && this.definition.dispose) {\n assertSynchronous(\n this.definition.dispose(this.resources!, this.context),\n \"dispose\",\n );\n }\n } finally {\n this.canvas.width = this.canvas.height = 0;\n this.candidate?.bitmap.close();\n this.committed?.close();\n for (const target of this.committedTargets.values())\n releaseTarget(target);\n this.committedTargets.clear();\n releaseTarget(this.layerTarget);\n releaseResolverInputWinner(this.inputWinner);\n this.updateInputNativeOwnership(false);\n this.candidate = undefined;\n this.committed = undefined;\n this.committedInteraction = undefined;\n }\n }\n}\n\nfunction assertCapability(): void {\n if (\n typeof OffscreenCanvas !== \"function\" ||\n typeof OffscreenCanvas.prototype.transferToImageBitmap !== \"function\"\n ) {\n throw new Error(\n \"defineRenderLayer requires OffscreenCanvas with transferToImageBitmap().\",\n );\n }\n}\n\nfunction sameSize(\n a: PibblRenderLayerSize | undefined,\n b: PibblRenderLayerSize,\n): boolean {\n return (\n !!a &&\n a.width === b.width &&\n a.height === b.height &&\n a.backingWidth === b.backingWidth &&\n a.backingHeight === b.backingHeight\n );\n}\n\nfunction isSynchronousViolation(error: unknown): boolean {\n return error instanceof SynchronousLifecycleError;\n}\n\nfunction snapshotProps<Props>(props: Readonly<Props>): Readonly<Props> {\n return Object.freeze({ ...props });\n}\n\nfunction sameProps<Props>(\n a: Readonly<Props> | undefined,\n b: Readonly<Props>,\n): boolean {\n if (!a) return false;\n const aKeys = Reflect.ownKeys(a);\n const bKeys = Reflect.ownKeys(b as object);\n return (\n aKeys.length === bKeys.length &&\n aKeys.every(\n (key) =>\n Object.prototype.hasOwnProperty.call(b, key) &&\n Object.is(a[key as keyof Props], b[key as keyof Props]),\n )\n );\n}\n\nfunction snapshotPolicy(policy: RenderLayerPolicy): RenderLayerPolicy {\n return Object.freeze({\n missBehavior: policy.missBehavior,\n pointerEvents: policy.pointerEvents,\n keyboardFocusable: policy.keyboardFocusable,\n keyboardNavigationBounds: policy.keyboardNavigationBounds\n ? Object.freeze({\n ...policy.keyboardNavigationBounds,\n })\n : undefined,\n });\n}\n\nfunction samePolicy(a: RenderLayerPolicy, b: RenderLayerPolicy): boolean {\n return (\n a.missBehavior === b.missBehavior &&\n a.pointerEvents === b.pointerEvents &&\n a.keyboardFocusable === b.keyboardFocusable &&\n a.keyboardNavigationBounds?.x === b.keyboardNavigationBounds?.x &&\n a.keyboardNavigationBounds?.y === b.keyboardNavigationBounds?.y &&\n a.keyboardNavigationBounds?.width === b.keyboardNavigationBounds?.width &&\n a.keyboardNavigationBounds?.height === b.keyboardNavigationBounds?.height\n );\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { committedInstanceRootTransform, snapshotLayoutGeometry, stageLayoutTargetGeometry, stageLayoutTargetRetirement } from '../layout/geometry-publication.js';\nimport { GLOBAL_STATE, getCurrentPibblInstance } from \"../global-state.js\";\nimport { registerLayoutSuspensionResource, unregisterLayoutSuspensionResource } from \"../layout/participation.js\";\nimport { getCurrentWorldTransform } from \"../render-target.js\";\nimport {\n queueFrameCompletion,\n requestInstanceRender,\n} from \"../scheduler/realm-scheduler.js\";\nimport type { PibblComponentRefs, RenderingContext2D } from \"../types.js\";\nimport type { PibblPointerEvents } from \"../events/types.js\";\nimport {\n PibblHitDisposition,\n PibblPaintEntryKind,\n type PibblHitTestOutput,\n type PibblNestedPaintEntry,\n} from \"../events/paint-entry.js\";\nimport {\n createTarget,\n releaseTarget,\n updateTarget,\n normalizeHandlers,\n prepareTargetUpdate,\n type PibblEventTargetRegistration,\n} from \"../events/registrations.js\";\nimport {\n hasResolverPointerCapture,\n releaseResolverInputWinner,\n releaseResolverPointerCapture,\n setResolverPointerCapture,\n type PibblResolverInputType,\n type PibblResolverInputWinner,\n} from \"../events/resolver-input.js\";\nimport type {\n PibblRenderLayerContext,\n PibblRenderLayerDefinition,\n PibblRenderLayerFrame,\n PibblRenderLayerHit,\n PibblRenderLayerInteractionSnapshot,\n PibblRenderLayerSize,\n PibblRenderLayerTarget,\n} from \"./types.js\";\n\nclass SynchronousLifecycleError extends TypeError {}\n\ninterface StagedInteraction<Target extends object> {\n readonly snapshot: PibblRenderLayerInteractionSnapshot<Target>;\n readonly targets: readonly PibblRenderLayerTarget<Target>[];\n readonly transform: DOMMatrix;\n readonly clippingStack: PibblNestedPaintEntry[\"clippingStack\"];\n}\n\ninterface RenderCandidate<Target extends object> {\n readonly bitmap: ImageBitmap;\n readonly interaction: StagedInteraction<Target>;\n readonly policy: RenderLayerPolicy;\n prepared?: PreparedInteraction<Target>;\n}\n\ninterface PreparedInteraction<Target extends object> {\n readonly interaction: StagedInteraction<Target>;\n readonly policy: RenderLayerPolicy;\n readonly targets: Map<Target, PibblEventTargetRegistration>;\n readonly created: PibblEventTargetRegistration[];\n readonly retired: PibblEventTargetRegistration[];\n readonly registrations: ReturnType<typeof prepareTargetUpdate>[];\n readonly inputLeases: Map<PibblResolverInputType, () => void>;\n readonly addedInputLeases: (() => void)[];\n previousInputLeases?: Map<PibblResolverInputType, () => void>;\n settled?: boolean;\n adopted?: boolean;\n readonly inverse: DOMMatrix;\n readonly layerEnabled: boolean;\n}\n\ninterface RenderLayerPolicy {\n readonly missBehavior: \"pass-through\" | \"block\" | \"target-layer\";\n readonly pointerEvents: PibblPointerEvents | undefined;\n readonly keyboardFocusable: boolean | undefined;\n readonly keyboardNavigationBounds:\n | Readonly<{\n x: number;\n y: number;\n width: number;\n height: number;\n }>\n | undefined;\n}\n\ninterface WinnerState<Target extends object> {\n readonly generation: number;\n readonly geometryGeneration: number;\n readonly point: Readonly<{ x: number; y: number }>;\n readonly hit: PibblRenderLayerHit<Target>;\n}\n\nconst MISS_SNAPSHOT: PibblRenderLayerInteractionSnapshot<object> = Object.freeze({\n targets: Object.freeze([]),\n hitTest: () => Object.freeze({ kind: \"miss\" as const }),\n});\n\nconst RESOLVER_INPUT_TYPES = Object.freeze([\n \"pointerdown\",\n \"pointermove\",\n \"pointerup\",\n \"pointercancel\",\n \"wheel\",\n \"contextmenu\",\n \"click\",\n] as const);\n\nconst RESOLVER_CAPTURE_INPUT_TYPES = Object.freeze([\n \"pointermove\",\n \"pointerup\",\n \"pointercancel\",\n] as const);\n\n// The private target deliberately owns no user callback. This eligibility\n// marker lets the shared keyboard default dispatch its click through the\n// component's one structural listener.\nconst STRUCTURAL_CLICK_ELIGIBILITY = () => {};\n\nexport function assertSynchronous(value: unknown, callback: string): void {\n if (value && typeof (value as { then?: unknown }).then === \"function\") {\n throw new SynchronousLifecycleError(\n `defineRenderLayer ${callback}() must be synchronous.`,\n );\n }\n}\n\nexport class RenderLayerController<Props, Resources, Target extends object> {\n private readonly instance = getCurrentPibblInstance();\n private readonly refs: PibblComponentRefs<any>;\n private readonly canvas: OffscreenCanvas;\n private readonly context: PibblRenderLayerContext;\n private resources: Resources | undefined;\n private created = false;\n private disposed = false;\n private size: PibblRenderLayerSize | undefined;\n private props: Readonly<Props> | undefined;\n private needsRender = true;\n private needsResize = true;\n private inputDeliveryGated = false;\n private inputGated = true;\n private candidate: RenderCandidate<Target> | undefined;\n private committed: ImageBitmap | undefined;\n private committedInteraction:\n PibblRenderLayerInteractionSnapshot<Target> | undefined;\n private committedTargetDescriptors: readonly PibblRenderLayerTarget<Target>[] =\n Object.freeze([]);\n private committedTargets = new Map<\n Target,\n PibblEventTargetRegistration\n >();\n private readonly layerTarget: PibblEventTargetRegistration;\n private committedPolicy: RenderLayerPolicy = Object.freeze({\n missBehavior: \"pass-through\",\n pointerEvents: undefined,\n keyboardFocusable: undefined,\n keyboardNavigationBounds: undefined,\n });\n private resolverTransform = new DOMMatrix();\n private resolverInverseTransform = new DOMMatrix();\n private resolverBounds = new Path2D();\n private resolverSize: PibblRenderLayerSize | undefined;\n private interactionGeneration = 0;\n private resolutionErrorQueued = false;\n private inputNativeReleases = new Map<\n PibblResolverInputType,\n () => void\n >();\n private readonly resolverEntry: PibblNestedPaintEntry;\n private readonly inputWinner: PibblResolverInputWinner;\n private lastTime: number | undefined;\n\n constructor(\n private readonly definition: PibblRenderLayerDefinition<\n Props,\n Resources,\n Target\n >,\n refs: PibblComponentRefs<any>,\n ) {\n this.refs = refs;\n this.layerTarget = createTarget(this.instance, refs, -1);\n this.inputWinner = {\n eventRoot: this.instance.eventRoot,\n deliver: (type, point, originalEvent, state) =>\n this.deliverInput(type, point, originalEvent, state),\n onPointerCaptureChange: () =>\n this.updateInputNativeOwnership(\n Boolean(this.committedInteraction?.onInput),\n ),\n };\n this.resolverEntry = {\n paintKind: PibblPaintEntryKind.Resolver,\n instance: this.instance,\n bounds: this.resolverBounds,\n transform: this.resolverTransform,\n clippingStack: [],\n resolveLocal: (x, y, output) => this.resolveLocal(x, y, output),\n };\n const suspensionResource = {\n suspendLayout: () => this.instance.paintEntries.delete(this.resolverEntry),\n };\n registerLayoutSuspensionResource(refs, suspensionResource);\n assertCapability();\n this.canvas = new OffscreenCanvas(1, 1);\n const controller = this;\n this.context = Object.freeze({\n canvas: this.canvas,\n get size() {\n if (!controller.size) {\n throw new Error(\"Render layer size is unavailable before mount.\");\n }\n return controller.size;\n },\n invalidate() {\n controller.invalidate(true);\n },\n });\n refs.teardowns.add(() => {\n unregisterLayoutSuspensionResource(refs, suspensionResource);\n this.dispose();\n });\n }\n\n render(\n props: Readonly<Props>,\n size: PibblRenderLayerSize,\n ctx: RenderingContext2D,\n policy: RenderLayerPolicy = this.committedPolicy,\n ): void {\n if (this.disposed) return;\n const initial = !this.created;\n const propsChanged = !initial && !sameProps(this.props, props);\n const sizeChanged = !sameSize(this.size, size);\n const policyChanged = !samePolicy(this.committedPolicy, policy);\n // Renderer callbacks may mutate shared scene resources. No old picker can\n // safely inspect those resources until its candidate generation settles.\n if (initial || propsChanged || sizeChanged || this.needsRender) { this.inputGated = true; this.inputDeliveryGated = true; }\n this.size = size;\n this.publishResolver(size);\n if (sizeChanged) {\n this.canvas.width = size.backingWidth;\n this.canvas.height = size.backingHeight;\n this.needsResize = true;\n this.needsRender = true;\n }\n if (initial) {\n const resources = this.definition.create(this.context, props);\n assertSynchronous(resources, \"create\");\n this.resources = resources;\n this.created = true;\n } else {\n try {\n if (propsChanged && this.definition.update) {\n assertSynchronous(\n this.definition.update(this.resources!, props, this.context),\n \"update\",\n );\n }\n if (this.needsResize && this.definition.resize) {\n assertSynchronous(\n this.definition.resize(this.resources!, size, this.context),\n \"resize\",\n );\n this.needsResize = false;\n }\n } catch (error) {\n if (isSynchronousViolation(error)) throw error;\n this.failCandidate(ctx, size, error);\n return;\n }\n }\n if (initial && this.needsResize && this.definition.resize) {\n try {\n assertSynchronous(\n this.definition.resize(this.resources!, size, this.context),\n \"resize\",\n );\n this.needsResize = false;\n } catch (error) {\n if (isSynchronousViolation(error)) throw error;\n this.failCandidate(ctx, size, error);\n return;\n }\n }\n if (!this.definition.resize) this.needsResize = false;\n this.props = snapshotProps(props);\n if (initial || propsChanged || sizeChanged || this.needsRender) {\n const frame = this.createFrame();\n this.needsRender = false;\n try {\n assertSynchronous(\n this.definition.render(this.resources!, frame, this.context),\n \"render\",\n );\n } catch (error) {\n if (isSynchronousViolation(error)) throw error;\n this.failCandidate(ctx, size, error);\n return;\n }\n let interaction: StagedInteraction<Target>;\n try {\n interaction = this.settleInteraction(props);\n } catch (error) {\n if (isSynchronousViolation(error)) throw error;\n this.failCandidate(ctx, size, error);\n return;\n }\n const stagedPolicy = snapshotPolicy(policy);\n const candidate = this.canvas.transferToImageBitmap();\n this.candidate?.bitmap.close();\n if (this.candidate?.prepared) this.finishPrepared(this.candidate.prepared, false);\n const stagedCandidate: RenderCandidate<Target> = {\n bitmap: candidate,\n interaction,\n policy: stagedPolicy,\n };\n this.candidate = stagedCandidate;\n const transaction = GLOBAL_STATE.renderTransaction;\n if (transaction?.onAdopt) {\n try { stagedCandidate.prepared = this.prepareInteraction(interaction, stagedPolicy); }\n catch (error) { this.finishCandidate(stagedCandidate, false); throw error; }\n transaction.onAdopt(() => this.finishCandidate(stagedCandidate, true));\n transaction.onFinish(success => {\n if (!success) {\n this.finishCandidate(stagedCandidate, false);\n }\n else if (stagedCandidate.prepared) this.finishPrepared(stagedCandidate.prepared, true);\n });\n } else {\n transaction?.onFinish(success => this.finishCandidate(stagedCandidate, success));\n if (!transaction) this.finishCandidate(stagedCandidate, true);\n }\n ctx.drawImage(\n candidate,\n 0,\n 0,\n size.backingWidth,\n size.backingHeight,\n 0,\n 0,\n size.width,\n size.height,\n );\n return;\n }\n const transaction = GLOBAL_STATE.renderTransaction;\n if (transaction?.onAdopt && this.committedInteraction) {\n const prepared = this.prepareInteraction({ snapshot: this.committedInteraction, targets: this.committedTargetDescriptors,\n transform: this.resolverTransform, clippingStack: this.resolverEntry.clippingStack }, snapshotPolicy(policy));\n transaction.onAdopt(() => { if (!this.disposed) this.adoptInteraction(prepared); });\n transaction.onFinish(success => {\n this.finishPrepared(prepared, success);\n });\n } else {\n transaction?.onFinish(success => {\n if (success && !this.disposed) {\n if (policyChanged && this.committedInteraction) this.commitInteraction({ snapshot: this.committedInteraction,\n targets: this.committedTargetDescriptors, transform: this.resolverTransform, clippingStack: this.resolverEntry.clippingStack }, snapshotPolicy(policy));\n this.refreshCommittedTargetGeometry();\n }\n });\n if (!transaction && policyChanged && this.committedInteraction) this.commitInteraction({ snapshot: this.committedInteraction,\n targets: this.committedTargetDescriptors, transform: this.resolverTransform, clippingStack: this.resolverEntry.clippingStack }, snapshotPolicy(policy));\n }\n this.drawCommitted(ctx, size);\n }\n\n private publishResolver(size: PibblRenderLayerSize): void {\n if (!sameSize(this.resolverSize, size)) {\n const bounds = new Path2D();\n bounds.rect(0, 0, size.width, size.height);\n this.resolverBounds = bounds;\n this.resolverEntry.bounds = bounds;\n this.resolverSize = size;\n }\n this.resolverTransform = getCurrentWorldTransform();\n this.resolverEntry.transform = this.resolverTransform;\n this.resolverEntry.clippingStack = Array.from(GLOBAL_STATE.clippingStack);\n // Sets preserve insertion order, so refresh the retained entry at its\n // current Canvas paint position on every traversal.\n this.instance.paintEntries.delete(this.resolverEntry);\n this.instance.paintEntries.add(this.resolverEntry);\n }\n\n private drawCommitted(\n ctx: RenderingContext2D,\n size: PibblRenderLayerSize,\n ): void {\n if (this.committed) {\n ctx.drawImage(\n this.committed,\n 0,\n 0,\n size.backingWidth,\n size.backingHeight,\n 0,\n 0,\n size.width,\n size.height,\n );\n }\n }\n\n private createFrame(): PibblRenderLayerFrame {\n const snapshot = GLOBAL_STATE.frameSnapshot;\n const time = snapshot?.logicalTime ?? this.instance.renderTimestamp;\n const delta = this.lastTime === undefined ? 0 : time - this.lastTime;\n this.lastTime = time;\n return Object.freeze({\n frameId: snapshot?.frameId ?? 0,\n time,\n delta,\n deltaSeconds: delta / 1000,\n invalidate: () => this.invalidate(false),\n });\n }\n\n private invalidate(gateInput: boolean): void {\n if (\n this.disposed ||\n this.refs.teardowns.closed ||\n this.instance.mainTeardowns.closed\n )\n return;\n this.needsRender = true;\n if (gateInput) this.inputGated = true;\n requestInstanceRender(this.instance);\n }\n\n private settleInteraction(props: Readonly<Props>): StagedInteraction<Target> {\n const snapshot =\n this.definition.interaction?.settle(this.resources!, props, this.size!) ??\n (MISS_SNAPSHOT as PibblRenderLayerInteractionSnapshot<Target>);\n assertSynchronous(snapshot, \"interaction.settle\");\n const targets: PibblRenderLayerTarget<Target>[] = [];\n const identities = new Set<Target>();\n for (const target of snapshot.targets) {\n if (identities.has(target.target)) {\n throw new Error(\n \"Render layer interaction contains a duplicate target identity.\",\n );\n }\n identities.add(target.target);\n targets.push(\n Object.freeze({\n ...target,\n handlers: target.handlers\n ? Object.freeze({ ...target.handlers })\n : undefined,\n keyboardNavigationBounds: target.keyboardNavigationBounds\n ? Object.freeze({ ...target.keyboardNavigationBounds })\n : undefined,\n }),\n );\n }\n return {\n snapshot,\n targets: Object.freeze(targets),\n transform: this.resolverTransform,\n clippingStack: this.resolverEntry.clippingStack,\n };\n }\n\n private finishCandidate(\n candidate: RenderCandidate<Target>,\n success: boolean,\n ): void {\n if (this.candidate !== candidate) return;\n if (!success || this.disposed) {\n this.candidate = undefined;\n this.needsRender = true;\n this.inputGated = true;\n candidate.bitmap.close();\n if (candidate.prepared) this.finishPrepared(candidate.prepared, false);\n return;\n }\n if (candidate.prepared) this.adoptInteraction(candidate.prepared);\n else this.commitInteraction(candidate.interaction, candidate.policy);\n this.committed?.close();\n this.committed = candidate.bitmap;\n this.candidate = undefined;\n this.resolutionErrorQueued = false;\n this.inputGated = false;\n this.inputDeliveryGated = false;\n }\n\n /** Prepares descriptors without mutating the current target identities or handlers. */\n private prepareInteraction(interaction: StagedInteraction<Target>, policy: RenderLayerPolicy): PreparedInteraction<Target> {\n const targets = new Map<Target, PibblEventTargetRegistration>();\n const created: PibblEventTargetRegistration[] = [];\n const registrations: PreparedInteraction<Target>['registrations'] = [];\n const inputLeases = new Map<PibblResolverInputType, () => void>();\n const addedInputLeases: (() => void)[] = [];\n const transaction = GLOBAL_STATE.renderTransaction ?? this.instance.eventRoot.renderTransaction;\n const stage = (target: PibblEventTargetRegistration, bounds: PibblRenderLayerTarget<Target>['keyboardNavigationBounds'], focusable: boolean) => {\n if (transaction) stageLayoutTargetGeometry(transaction, target, { bounds, transform: interaction.transform });\n this.instance.eventRoot.focusPolicy?.observeTransactionalTarget?.(target, focusable);\n };\n try {\n if (policy.pointerEvents !== 'none') for (const descriptor of interaction.targets) {\n if (descriptor.pointerEvents === 'none') continue;\n let target = this.committedTargets.get(descriptor.target);\n if (!target) { target = createTarget(this.instance, this.refs, this.committedTargets.size + created.length + 1); created.push(target); }\n targets.set(descriptor.target, target);\n registrations.push(prepareTargetUpdate(target, descriptor.handlers ?? {}, {\n path: new Path2D(), cursor: descriptor.cursor, keyboardFocusable: descriptor.keyboardFocusable,\n keyboardNavigationBounds: descriptor.keyboardNavigationBounds,\n }, interaction.transform, interaction.clippingStack));\n const handlers = normalizeHandlers(descriptor.handlers ?? {});\n stage(target, descriptor.keyboardNavigationBounds, descriptor.keyboardFocusable ?? Boolean(handlers.click || handlers.keydown || handlers.keyup));\n }\n const layerEnabled = policy.pointerEvents !== 'none' && policy.missBehavior === 'target-layer';\n stage(this.layerTarget, policy.keyboardNavigationBounds, layerEnabled && (policy.keyboardFocusable ?? true));\n if (layerEnabled) registrations.push(prepareTargetUpdate(this.layerTarget, { onClick: STRUCTURAL_CLICK_ELIGIBILITY }, {\n path: new Path2D(), keyboardFocusable: policy.keyboardFocusable, keyboardNavigationBounds: policy.keyboardNavigationBounds,\n }, interaction.transform, interaction.clippingStack));\n const hub = this.instance.eventRoot.nativeListeners;\n const types = interaction.snapshot.onInput ? RESOLVER_INPUT_TYPES : hasResolverPointerCapture(this.inputWinner) ? RESOLVER_CAPTURE_INPUT_TYPES : [];\n if (hub) for (const type of types) {\n let lease = this.inputNativeReleases.get(type);\n if (!lease) { lease = hub.acquire(type); addedInputLeases.push(lease); }\n inputLeases.set(type, lease);\n }\n const retired: PibblEventTargetRegistration[] = [];\n for (const [identity, target] of this.committedTargets) if (!targets.has(identity)) retired.push(target);\n if (!layerEnabled && this.layerTarget.live) retired.push(this.layerTarget);\n if (transaction) for (const target of retired) stageLayoutTargetRetirement(transaction, target);\n return { interaction, policy, targets, created, retired, registrations, inputLeases, addedInputLeases, layerEnabled, inverse: interaction.transform.inverse() };\n } catch (error) {\n const errors: unknown[] = [error];\n const release = (callback: () => void) => { try { callback(); } catch (releaseError) { errors.push(releaseError); } };\n for (const registration of registrations) release(() => registration.finish());\n for (const lease of addedInputLeases) release(lease);\n for (const target of created) release(() => releaseTarget(target));\n if (errors.length > 1) throw new AggregateError(errors, 'Render layer interaction preparation failed.', { cause: error });\n throw error;\n }\n }\n\n private adoptInteraction(prepared: PreparedInteraction<Target>): void {\n const { interaction, policy } = prepared;\n for (const registration of prepared.registrations) registration.adopt();\n prepared.previousInputLeases = this.inputNativeReleases;\n this.inputNativeReleases = prepared.inputLeases;\n this.committedTargets = prepared.targets;\n this.committedInteraction = interaction.snapshot;\n this.committedTargetDescriptors = interaction.targets;\n this.committedPolicy = policy;\n this.resolverInverseTransform = prepared.inverse;\n this.interactionGeneration++;\n prepared.adopted = true;\n }\n\n private finishPrepared(prepared: PreparedInteraction<Target>, success: boolean): void {\n if (prepared.settled) return;\n prepared.settled = true;\n success = success && prepared.adopted === true;\n const errors: unknown[] = [];\n const finish = (callback: () => void) => { try { callback(); } catch (error) { errors.push(error); } };\n for (const registration of prepared.registrations) finish(() => registration.finish());\n if (prepared.previousInputLeases) {\n for (const [type, release] of prepared.previousInputLeases) if (!prepared.inputLeases.has(type)) finish(release);\n } else if (!success) for (const release of prepared.addedInputLeases) finish(release);\n for (const target of success ? prepared.retired : prepared.created) finish(() => releaseTarget(target));\n if (success) for (const registration of prepared.registrations) finish(() => registration.notify());\n if (errors.length === 1) throw errors[0];\n if (errors.length) throw new AggregateError(errors, 'Render layer registration completion failed.');\n }\n\n /** Immediate fallback for callers without a root transaction. */\n private commitInteraction(interaction: StagedInteraction<Target>, policy: RenderLayerPolicy): void {\n const prepared = this.prepareInteraction(interaction, policy);\n this.adoptInteraction(prepared);\n this.finishPrepared(prepared, true);\n }\n\n private applyResolverGeometry(\n target: PibblEventTargetRegistration,\n interaction: StagedInteraction<Target>,\n ): void {\n if (!target.paintEntry) return;\n target.paintEntry.transform = interaction.transform;\n target.paintEntry.clippingStack = interaction.clippingStack;\n target.owner.paintEntries.delete(target.paintEntry);\n }\n\n private refreshCommittedTargetGeometry(): void {\n const interaction = {\n transform: this.resolverTransform,\n clippingStack: this.resolverEntry.clippingStack,\n } as StagedInteraction<Target>;\n if (this.committedPolicy.pointerEvents !== \"none\") {\n for (const descriptor of this.committedTargetDescriptors) {\n if (descriptor.pointerEvents === \"none\") continue;\n const target = this.committedTargets.get(descriptor.target);\n if (!target) continue;\n // Hidden participation releases the registration while retaining this\n // controller's committed bitmap and interaction snapshot. Re-register\n // it on the first visible traversal so it regains paint, target, and\n // focus ownership without forcing the external renderer to repaint.\n if (!target.live) {\n updateTarget(\n target,\n descriptor.handlers ?? {},\n {\n path: new Path2D(),\n cursor: descriptor.cursor,\n keyboardFocusable: descriptor.keyboardFocusable,\n keyboardNavigationBounds: descriptor.keyboardNavigationBounds,\n },\n true,\n );\n }\n this.applyResolverGeometry(target, interaction);\n this.instance.eventRoot.focusPolicy?.observeTarget(target);\n this.observeTransactionalFocusTarget(target);\n }\n }\n if (\n this.committedPolicy.pointerEvents !== \"none\" &&\n this.committedPolicy.missBehavior === \"target-layer\" &&\n !this.layerTarget.live\n ) {\n updateTarget(\n this.layerTarget,\n { onClick: STRUCTURAL_CLICK_ELIGIBILITY },\n {\n path: new Path2D(),\n keyboardFocusable: this.committedPolicy.keyboardFocusable,\n keyboardNavigationBounds:\n this.committedPolicy.keyboardNavigationBounds,\n },\n true,\n );\n }\n if (this.layerTarget.live) {\n this.applyResolverGeometry(this.layerTarget, interaction);\n this.instance.eventRoot.focusPolicy?.observeTarget(this.layerTarget);\n this.observeTransactionalFocusTarget(this.layerTarget);\n }\n }\n\n private observeTransactionalFocusTarget(\n target: PibblEventTargetRegistration,\n ): void {\n this.instance.eventRoot.focusPolicy?.observeTransactionalTarget?.(target);\n }\n\n private resolveLocal(\n localX: number,\n localY: number,\n output: PibblHitTestOutput,\n ): void {\n if (this.committedPolicy.pointerEvents === \"none\") {\n output.disposition = PibblHitDisposition.Miss;\n output.target = null;\n return;\n }\n const state = this.resolveWinnerState(localX, localY);\n if ((state.generation !== this.interactionGeneration || state.geometryGeneration !== snapshotLayoutGeometry(this.instance).generation) || this.disposed || this.inputDeliveryGated) {\n output.disposition = PibblHitDisposition.Block;\n output.target = null;\n delete output.winner;\n delete output.winnerState;\n return;\n }\n output.winner = this.inputWinner;\n output.winnerState = state;\n switch (state.hit.kind) {\n case \"miss\":\n if (this.committedPolicy.missBehavior === \"pass-through\") {\n output.disposition = PibblHitDisposition.Miss;\n output.target = null;\n delete output.winner;\n delete output.winnerState;\n } else if (this.committedPolicy.missBehavior === \"block\") {\n output.disposition = PibblHitDisposition.Block;\n output.target = null;\n } else {\n output.disposition = PibblHitDisposition.Target;\n output.target = this.layerTarget.live ? this.layerTarget : null;\n }\n return;\n case \"block\":\n output.disposition = PibblHitDisposition.Block;\n output.target = null;\n return;\n case \"target\": {\n const target = this.committedTargets.get(state.hit.target);\n if (!target?.live) {\n output.disposition = PibblHitDisposition.Block;\n output.target = null;\n output.winnerState = {\n point: state.point, generation: state.generation, geometryGeneration: state.geometryGeneration,\n hit: Object.freeze({ kind: \"block\" as const }),\n } satisfies WinnerState<Target>;\n this.reportUnknownTarget();\n return;\n }\n output.disposition = PibblHitDisposition.Target;\n output.target = target;\n }\n }\n }\n\n private resolveWinnerState(\n localX: number,\n localY: number,\n ): WinnerState<Target> {\n const point = Object.freeze({ x: localX, y: localY });\n const generation = this.interactionGeneration;\n const geometryGeneration = snapshotLayoutGeometry(this.instance).generation;\n if (this.inputGated || !this.committedInteraction) {\n return { point, generation, geometryGeneration, hit: Object.freeze({ kind: \"block\" }) };\n }\n const hit = this.committedInteraction.hitTest(point);\n if ((generation !== this.interactionGeneration || geometryGeneration !== snapshotLayoutGeometry(this.instance).generation) || this.disposed || this.inputGated) {\n return { point, generation, geometryGeneration, hit: Object.freeze({ kind: \"block\" }) };\n }\n if (hit.kind === \"target\" && !this.committedTargets.has(hit.target)) {\n this.reportUnknownTarget();\n return { point, generation, geometryGeneration, hit: Object.freeze({ kind: \"block\" }) };\n }\n return { point, hit, generation, geometryGeneration };\n }\n\n private reportUnknownTarget(): void {\n if (this.resolutionErrorQueued) return;\n this.resolutionErrorQueued = true;\n queueFrameCompletion(() => {\n throw new Error(\n \"Render layer hitTest() returned a target absent from its committed snapshot.\",\n );\n });\n }\n\n private deliverInput(\n type: PibblResolverInputType,\n rootPoint: Readonly<{ x: number; y: number }>,\n originalEvent: PointerEvent | WheelEvent | MouseEvent,\n resolvedState: unknown,\n ): void {\n const snapshot = this.committedInteraction;\n if (!snapshot?.onInput || this.disposed || this.inputDeliveryGated) return;\n let state = resolvedState as WinnerState<Target> | undefined;\n // A reentrant render between picking and delivery must not pair an old hit\n // with a newer renderer callback or coordinate frame.\n if (state && (state.generation !== this.interactionGeneration || state.geometryGeneration !== snapshotLayoutGeometry(this.instance).generation)) return;\n if (!state) {\n const bridge = committedInstanceRootTransform(this.instance);\n if (!bridge) return;\n const ownerPoint = bridge.inverse().transformPoint(new DOMPoint(rootPoint.x, rootPoint.y));\n const local = this.resolverInverseTransform.transformPoint(ownerPoint);\n state = this.resolveWinnerState(local.x, local.y);\n }\n if (this.inputDeliveryGated || (state.generation !== this.interactionGeneration || state.geometryGeneration !== snapshotLayoutGeometry(this.instance).generation)) return;\n snapshot.onInput(\n Object.freeze({\n type,\n point: state.point,\n hit: state.hit,\n originalEvent,\n setPointerCapture: (pointerId: number) =>\n setResolverPointerCapture(this.inputWinner, pointerId),\n releasePointerCapture: (pointerId: number) =>\n releaseResolverPointerCapture(this.inputWinner, pointerId),\n }),\n );\n }\n\n private updateInputNativeOwnership(enabled: boolean): void {\n const required = new Set<PibblResolverInputType>(\n enabled\n ? RESOLVER_INPUT_TYPES\n : hasResolverPointerCapture(this.inputWinner)\n ? RESOLVER_CAPTURE_INPUT_TYPES\n : [],\n );\n for (const [type, release] of this.inputNativeReleases) {\n if (required.has(type)) continue;\n release();\n this.inputNativeReleases.delete(type);\n }\n const hub = this.instance.eventRoot.nativeListeners;\n if (!hub) return;\n for (const type of required) {\n if (!this.inputNativeReleases.has(type)) {\n this.inputNativeReleases.set(type, hub.acquire(type));\n }\n }\n }\n\n private failCandidate(\n ctx: RenderingContext2D,\n size: PibblRenderLayerSize,\n error: unknown,\n ): void {\n this.inputGated = true;\n this.drawCommitted(ctx, size);\n queueFrameCompletion(() => {\n throw error;\n });\n }\n\n private dispose(): void {\n if (this.disposed) return;\n this.disposed = true;\n const errors: unknown[] = [];\n const release = (callback: () => void) => { try { callback(); } catch (error) { errors.push(error); } };\n if (this.created && this.definition.dispose) release(() => assertSynchronous(\n this.definition.dispose!(this.resources!, this.context), 'dispose'));\n release(() => { this.canvas.width = this.canvas.height = 0; });\n release(() => this.candidate?.bitmap.close());\n if (this.candidate?.prepared) release(() => this.finishPrepared(this.candidate!.prepared!, false));\n release(() => this.committed?.close());\n for (const target of this.committedTargets.values()) release(() => releaseTarget(target));\n this.committedTargets.clear();\n release(() => releaseTarget(this.layerTarget));\n release(() => releaseResolverInputWinner(this.inputWinner));\n for (const lease of this.inputNativeReleases.values()) release(lease);\n this.inputNativeReleases.clear();\n this.candidate = undefined;\n this.committed = undefined;\n this.committedInteraction = undefined;\n if (errors.length === 1) throw errors[0];\n if (errors.length) throw new AggregateError(errors, 'Render layer disposal failed.');\n }\n}\n\nfunction assertCapability(): void {\n if (\n typeof OffscreenCanvas !== \"function\" ||\n typeof OffscreenCanvas.prototype.transferToImageBitmap !== \"function\"\n ) {\n throw new Error(\n \"defineRenderLayer requires OffscreenCanvas with transferToImageBitmap().\",\n );\n }\n}\n\nfunction sameSize(\n a: PibblRenderLayerSize | undefined,\n b: PibblRenderLayerSize,\n): boolean {\n return (\n !!a &&\n a.width === b.width &&\n a.height === b.height &&\n a.backingWidth === b.backingWidth &&\n a.backingHeight === b.backingHeight\n );\n}\n\nfunction isSynchronousViolation(error: unknown): boolean {\n return error instanceof SynchronousLifecycleError;\n}\n\nfunction snapshotProps<Props>(props: Readonly<Props>): Readonly<Props> {\n return Object.freeze({ ...props });\n}\n\nfunction sameProps<Props>(\n a: Readonly<Props> | undefined,\n b: Readonly<Props>,\n): boolean {\n if (!a) return false;\n const aKeys = Reflect.ownKeys(a);\n const bKeys = Reflect.ownKeys(b as object);\n return (\n aKeys.length === bKeys.length &&\n aKeys.every(\n (key) =>\n Object.prototype.hasOwnProperty.call(b, key) &&\n Object.is(a[key as keyof Props], b[key as keyof Props]),\n )\n );\n}\n\nfunction snapshotPolicy(policy: RenderLayerPolicy): RenderLayerPolicy {\n return Object.freeze({\n missBehavior: policy.missBehavior,\n pointerEvents: policy.pointerEvents,\n keyboardFocusable: policy.keyboardFocusable,\n keyboardNavigationBounds: policy.keyboardNavigationBounds\n ? Object.freeze({\n ...policy.keyboardNavigationBounds,\n })\n : undefined,\n });\n}\n\nfunction samePolicy(a: RenderLayerPolicy, b: RenderLayerPolicy): boolean {\n return (\n a.missBehavior === b.missBehavior &&\n a.pointerEvents === b.pointerEvents &&\n a.keyboardFocusable === b.keyboardFocusable &&\n a.keyboardNavigationBounds?.x === b.keyboardNavigationBounds?.x &&\n a.keyboardNavigationBounds?.y === b.keyboardNavigationBounds?.y &&\n a.keyboardNavigationBounds?.width === b.keyboardNavigationBounds?.width &&\n a.keyboardNavigationBounds?.height === b.keyboardNavigationBounds?.height\n );\n}\n"],
5
+ "mappings": "AAAA,SAAS,gCAAgC,wBAAwB,2BAA2B,mCAAmC;AAC/H,SAAS,cAAc,+BAA+B;AACtD,SAAS,kCAAkC,0CAA0C;AACrF,SAAS,gCAAgC;AACzC;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAGP;AAAA,EACE;AAAA,EACA;AAAA,OAGK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAGK;AAWP,MAAM,kCAAkC,UAAU;AAAC;AAqDnD,MAAM,gBAA6D,OAAO,OAAO;AAAA,EAC/E,SAAS,OAAO,OAAO,CAAC,CAAC;AAAA,EACzB,SAAS,MAAM,OAAO,OAAO,EAAE,MAAM,OAAgB,CAAC;AACxD,CAAC;AAED,MAAM,uBAAuB,OAAO,OAAO;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAU;AAEV,MAAM,+BAA+B,OAAO,OAAO;AAAA,EACjD;AAAA,EACA;AAAA,EACA;AACF,CAAU;AAKV,MAAM,+BAA+B,MAAM;AAAC;AAErC,SAAS,kBAAkB,OAAgB,UAAwB;AACxE,MAAI,SAAS,OAAQ,MAA6B,SAAS,YAAY;AACrE,UAAM,IAAI;AAAA,MACR,qBAAqB,QAAQ;AAAA,IAC/B;AAAA,EACF;AACF;AAEO,MAAM,sBAA+D;AAAA,EA6C1E,YACmB,YAKjB,MACA;AANiB;AAOjB,SAAK,OAAO;AACZ,SAAK,cAAc,aAAa,KAAK,UAAU,MAAM,EAAE;AACvD,SAAK,cAAc;AAAA,MACjB,WAAW,KAAK,SAAS;AAAA,MACzB,SAAS,CAAC,MAAM,OAAO,eAAe,UACpC,KAAK,aAAa,MAAM,OAAO,eAAe,KAAK;AAAA,MACrD,wBAAwB,MACtB,KAAK;AAAA,QACH,QAAQ,KAAK,sBAAsB,OAAO;AAAA,MAC5C;AAAA,IACJ;AACA,SAAK,gBAAgB;AAAA,MACnB,WAAW,oBAAoB;AAAA,MAC/B,UAAU,KAAK;AAAA,MACf,QAAQ,KAAK;AAAA,MACb,WAAW,KAAK;AAAA,MAChB,eAAe,CAAC;AAAA,MAChB,cAAc,CAAC,GAAG,GAAG,WAAW,KAAK,aAAa,GAAG,GAAG,MAAM;AAAA,IAChE;AACA,UAAM,qBAAqB;AAAA,MACzB,eAAe,MAAM,KAAK,SAAS,aAAa,OAAO,KAAK,aAAa;AAAA,IAC3E;AACA,qCAAiC,MAAM,kBAAkB;AACzD,qBAAiB;AACjB,SAAK,SAAS,IAAI,gBAAgB,GAAG,CAAC;AACtC,UAAM,aAAa;AACnB,SAAK,UAAU,OAAO,OAAO;AAAA,MAC3B,QAAQ,KAAK;AAAA,MACb,IAAI,OAAO;AACT,YAAI,CAAC,WAAW,MAAM;AACpB,gBAAM,IAAI,MAAM,gDAAgD;AAAA,QAClE;AACA,eAAO,WAAW;AAAA,MACpB;AAAA,MACA,aAAa;AACX,mBAAW,WAAW,IAAI;AAAA,MAC5B;AAAA,IACF,CAAC;AACD,SAAK,UAAU,IAAI,MAAM;AACvB,yCAAmC,MAAM,kBAAkB;AAC3D,WAAK,QAAQ;AAAA,IACf,CAAC;AAAA,EACH;AAAA,EAjDmB;AAAA,EA7CF,WAAW,wBAAwB;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,EACT;AAAA,EACA,UAAU;AAAA,EACV,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,cAAc;AAAA,EACd,qBAAqB;AAAA,EACrB,aAAa;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EAEA,6BACN,OAAO,OAAO,CAAC,CAAC;AAAA,EACV,mBAAmB,oBAAI,IAG7B;AAAA,EACe;AAAA,EACT,kBAAqC,OAAO,OAAO;AAAA,IACzD,cAAc;AAAA,IACd,eAAe;AAAA,IACf,mBAAmB;AAAA,IACnB,0BAA0B;AAAA,EAC5B,CAAC;AAAA,EACO,oBAAoB,IAAI,UAAU;AAAA,EAClC,2BAA2B,IAAI,UAAU;AAAA,EACzC,iBAAiB,IAAI,OAAO;AAAA,EAC5B;AAAA,EACA,wBAAwB;AAAA,EACxB,wBAAwB;AAAA,EACxB,sBAAsB,oBAAI,IAGhC;AAAA,EACe;AAAA,EACA;AAAA,EACT;AAAA,EAsDR,OACE,OACA,MACA,KACA,SAA4B,KAAK,iBAC3B;AACN,QAAI,KAAK,SAAU;AACnB,UAAM,UAAU,CAAC,KAAK;AACtB,UAAM,eAAe,CAAC,WAAW,CAAC,UAAU,KAAK,OAAO,KAAK;AAC7D,UAAM,cAAc,CAAC,SAAS,KAAK,MAAM,IAAI;AAC7C,UAAM,gBAAgB,CAAC,WAAW,KAAK,iBAAiB,MAAM;AAG9D,QAAI,WAAW,gBAAgB,eAAe,KAAK,aAAa;AAAE,WAAK,aAAa;AAAM,WAAK,qBAAqB;AAAA,IAAM;AAC1H,SAAK,OAAO;AACZ,SAAK,gBAAgB,IAAI;AACzB,QAAI,aAAa;AACf,WAAK,OAAO,QAAQ,KAAK;AACzB,WAAK,OAAO,SAAS,KAAK;AAC1B,WAAK,cAAc;AACnB,WAAK,cAAc;AAAA,IACrB;AACA,QAAI,SAAS;AACX,YAAM,YAAY,KAAK,WAAW,OAAO,KAAK,SAAS,KAAK;AAC5D,wBAAkB,WAAW,QAAQ;AACrC,WAAK,YAAY;AACjB,WAAK,UAAU;AAAA,IACjB,OAAO;AACL,UAAI;AACF,YAAI,gBAAgB,KAAK,WAAW,QAAQ;AAC1C;AAAA,YACE,KAAK,WAAW,OAAO,KAAK,WAAY,OAAO,KAAK,OAAO;AAAA,YAC3D;AAAA,UACF;AAAA,QACF;AACA,YAAI,KAAK,eAAe,KAAK,WAAW,QAAQ;AAC9C;AAAA,YACE,KAAK,WAAW,OAAO,KAAK,WAAY,MAAM,KAAK,OAAO;AAAA,YAC1D;AAAA,UACF;AACA,eAAK,cAAc;AAAA,QACrB;AAAA,MACF,SAAS,OAAO;AACd,YAAI,uBAAuB,KAAK,EAAG,OAAM;AACzC,aAAK,cAAc,KAAK,MAAM,KAAK;AACnC;AAAA,MACF;AAAA,IACF;AACA,QAAI,WAAW,KAAK,eAAe,KAAK,WAAW,QAAQ;AACzD,UAAI;AACF;AAAA,UACE,KAAK,WAAW,OAAO,KAAK,WAAY,MAAM,KAAK,OAAO;AAAA,UAC1D;AAAA,QACF;AACA,aAAK,cAAc;AAAA,MACrB,SAAS,OAAO;AACd,YAAI,uBAAuB,KAAK,EAAG,OAAM;AACzC,aAAK,cAAc,KAAK,MAAM,KAAK;AACnC;AAAA,MACF;AAAA,IACF;AACA,QAAI,CAAC,KAAK,WAAW,OAAQ,MAAK,cAAc;AAChD,SAAK,QAAQ,cAAc,KAAK;AAChC,QAAI,WAAW,gBAAgB,eAAe,KAAK,aAAa;AAC9D,YAAM,QAAQ,KAAK,YAAY;AAC/B,WAAK,cAAc;AACnB,UAAI;AACF;AAAA,UACE,KAAK,WAAW,OAAO,KAAK,WAAY,OAAO,KAAK,OAAO;AAAA,UAC3D;AAAA,QACF;AAAA,MACF,SAAS,OAAO;AACd,YAAI,uBAAuB,KAAK,EAAG,OAAM;AACzC,aAAK,cAAc,KAAK,MAAM,KAAK;AACnC;AAAA,MACF;AACA,UAAI;AACJ,UAAI;AACF,sBAAc,KAAK,kBAAkB,KAAK;AAAA,MAC5C,SAAS,OAAO;AACd,YAAI,uBAAuB,KAAK,EAAG,OAAM;AACzC,aAAK,cAAc,KAAK,MAAM,KAAK;AACnC;AAAA,MACF;AACA,YAAM,eAAe,eAAe,MAAM;AAC1C,YAAM,YAAY,KAAK,OAAO,sBAAsB;AACpD,WAAK,WAAW,OAAO,MAAM;AAC7B,UAAI,KAAK,WAAW,SAAU,MAAK,eAAe,KAAK,UAAU,UAAU,KAAK;AAChF,YAAM,kBAA2C;AAAA,QAC/C,QAAQ;AAAA,QACR;AAAA,QACA,QAAQ;AAAA,MACV;AACA,WAAK,YAAY;AACjB,YAAMA,eAAc,aAAa;AACjC,UAAIA,cAAa,SAAS;AACxB,YAAI;AAAE,0BAAgB,WAAW,KAAK,mBAAmB,aAAa,YAAY;AAAA,QAAG,SAC9E,OAAO;AAAE,eAAK,gBAAgB,iBAAiB,KAAK;AAAG,gBAAM;AAAA,QAAO;AAC3E,QAAAA,aAAY,QAAQ,MAAM,KAAK,gBAAgB,iBAAiB,IAAI,CAAC;AACrE,QAAAA,aAAY,SAAS,aAAW;AAC9B,cAAI,CAAC,SAAS;AACZ,iBAAK,gBAAgB,iBAAiB,KAAK;AAAA,UAC7C,WACS,gBAAgB,SAAU,MAAK,eAAe,gBAAgB,UAAU,IAAI;AAAA,QACvF,CAAC;AAAA,MACH,OAAO;AACL,QAAAA,cAAa,SAAS,aAAW,KAAK,gBAAgB,iBAAiB,OAAO,CAAC;AAC/E,YAAI,CAACA,aAAa,MAAK,gBAAgB,iBAAiB,IAAI;AAAA,MAC9D;AACA,UAAI;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QACA,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,QACA;AAAA,QACA,KAAK;AAAA,QACL,KAAK;AAAA,MACP;AACA;AAAA,IACF;AACA,UAAM,cAAc,aAAa;AACjC,QAAI,aAAa,WAAW,KAAK,sBAAsB;AACrD,YAAM,WAAW,KAAK,mBAAmB;AAAA,QAAE,UAAU,KAAK;AAAA,QAAsB,SAAS,KAAK;AAAA,QAC5F,WAAW,KAAK;AAAA,QAAmB,eAAe,KAAK,cAAc;AAAA,MAAc,GAAG,eAAe,MAAM,CAAC;AAC9G,kBAAY,QAAQ,MAAM;AAAE,YAAI,CAAC,KAAK,SAAU,MAAK,iBAAiB,QAAQ;AAAA,MAAG,CAAC;AAClF,kBAAY,SAAS,aAAW;AAC9B,aAAK,eAAe,UAAU,OAAO;AAAA,MACvC,CAAC;AAAA,IACH,OAAO;AACL,mBAAa,SAAS,aAAW;AAC/B,YAAI,WAAW,CAAC,KAAK,UAAU;AAC7B,cAAI,iBAAiB,KAAK,qBAAsB,MAAK,kBAAkB;AAAA,YAAE,UAAU,KAAK;AAAA,YACtF,SAAS,KAAK;AAAA,YAA4B,WAAW,KAAK;AAAA,YAAmB,eAAe,KAAK,cAAc;AAAA,UAAc,GAAG,eAAe,MAAM,CAAC;AACxJ,eAAK,+BAA+B;AAAA,QACtC;AAAA,MACF,CAAC;AACD,UAAI,CAAC,eAAe,iBAAiB,KAAK,qBAAsB,MAAK,kBAAkB;AAAA,QAAE,UAAU,KAAK;AAAA,QACtG,SAAS,KAAK;AAAA,QAA4B,WAAW,KAAK;AAAA,QAAmB,eAAe,KAAK,cAAc;AAAA,MAAc,GAAG,eAAe,MAAM,CAAC;AAAA,IAC1J;AACA,SAAK,cAAc,KAAK,IAAI;AAAA,EAC9B;AAAA,EAEQ,gBAAgB,MAAkC;AACxD,QAAI,CAAC,SAAS,KAAK,cAAc,IAAI,GAAG;AACtC,YAAM,SAAS,IAAI,OAAO;AAC1B,aAAO,KAAK,GAAG,GAAG,KAAK,OAAO,KAAK,MAAM;AACzC,WAAK,iBAAiB;AACtB,WAAK,cAAc,SAAS;AAC5B,WAAK,eAAe;AAAA,IACtB;AACA,SAAK,oBAAoB,yBAAyB;AAClD,SAAK,cAAc,YAAY,KAAK;AACpC,SAAK,cAAc,gBAAgB,MAAM,KAAK,aAAa,aAAa;AAGxE,SAAK,SAAS,aAAa,OAAO,KAAK,aAAa;AACpD,SAAK,SAAS,aAAa,IAAI,KAAK,aAAa;AAAA,EACnD;AAAA,EAEQ,cACN,KACA,MACM;AACN,QAAI,KAAK,WAAW;AAClB,UAAI;AAAA,QACF,KAAK;AAAA,QACL;AAAA,QACA;AAAA,QACA,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AAAA,QACA;AAAA,QACA,KAAK;AAAA,QACL,KAAK;AAAA,MACP;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,cAAqC;AAC3C,UAAM,WAAW,aAAa;AAC9B,UAAM,OAAO,UAAU,eAAe,KAAK,SAAS;AACpD,UAAM,QAAQ,KAAK,aAAa,SAAY,IAAI,OAAO,KAAK;AAC5D,SAAK,WAAW;AAChB,WAAO,OAAO,OAAO;AAAA,MACnB,SAAS,UAAU,WAAW;AAAA,MAC9B;AAAA,MACA;AAAA,MACA,cAAc,QAAQ;AAAA,MACtB,YAAY,MAAM,KAAK,WAAW,KAAK;AAAA,IACzC,CAAC;AAAA,EACH;AAAA,EAEQ,WAAW,WAA0B;AAC3C,QACE,KAAK,YACL,KAAK,KAAK,UAAU,UACpB,KAAK,SAAS,cAAc;AAE5B;AACF,SAAK,cAAc;AACnB,QAAI,UAAW,MAAK,aAAa;AACjC,0BAAsB,KAAK,QAAQ;AAAA,EACrC;AAAA,EAEQ,kBAAkB,OAAmD;AAC3E,UAAM,WACJ,KAAK,WAAW,aAAa,OAAO,KAAK,WAAY,OAAO,KAAK,IAAK,KACrE;AACH,sBAAkB,UAAU,oBAAoB;AAChD,UAAM,UAA4C,CAAC;AACnD,UAAM,aAAa,oBAAI,IAAY;AACnC,eAAW,UAAU,SAAS,SAAS;AACrC,UAAI,WAAW,IAAI,OAAO,MAAM,GAAG;AACjC,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AAAA,MACF;AACA,iBAAW,IAAI,OAAO,MAAM;AAC5B,cAAQ;AAAA,QACN,OAAO,OAAO;AAAA,UACZ,GAAG;AAAA,UACH,UAAU,OAAO,WACb,OAAO,OAAO,EAAE,GAAG,OAAO,SAAS,CAAC,IACpC;AAAA,UACJ,0BAA0B,OAAO,2BAC7B,OAAO,OAAO,EAAE,GAAG,OAAO,yBAAyB,CAAC,IACpD;AAAA,QACN,CAAC;AAAA,MACH;AAAA,IACF;AACA,WAAO;AAAA,MACL;AAAA,MACA,SAAS,OAAO,OAAO,OAAO;AAAA,MAC9B,WAAW,KAAK;AAAA,MAChB,eAAe,KAAK,cAAc;AAAA,IACpC;AAAA,EACF;AAAA,EAEQ,gBACN,WACA,SACM;AACN,QAAI,KAAK,cAAc,UAAW;AAClC,QAAI,CAAC,WAAW,KAAK,UAAU;AAC7B,WAAK,YAAY;AACjB,WAAK,cAAc;AACnB,WAAK,aAAa;AAClB,gBAAU,OAAO,MAAM;AACvB,UAAI,UAAU,SAAU,MAAK,eAAe,UAAU,UAAU,KAAK;AACrE;AAAA,IACF;AACA,QAAI,UAAU,SAAU,MAAK,iBAAiB,UAAU,QAAQ;AAAA,QAC3D,MAAK,kBAAkB,UAAU,aAAa,UAAU,MAAM;AACnE,SAAK,WAAW,MAAM;AACtB,SAAK,YAAY,UAAU;AAC3B,SAAK,YAAY;AACjB,SAAK,wBAAwB;AAC7B,SAAK,aAAa;AAClB,SAAK,qBAAqB;AAAA,EAC5B;AAAA;AAAA,EAGQ,mBAAmB,aAAwC,QAAwD;AACzH,UAAM,UAAU,oBAAI,IAA0C;AAC9D,UAAM,UAA0C,CAAC;AACjD,UAAM,gBAA8D,CAAC;AACrE,UAAM,cAAc,oBAAI,IAAwC;AAChE,UAAM,mBAAmC,CAAC;AAC1C,UAAM,cAAc,aAAa,qBAAqB,KAAK,SAAS,UAAU;AAC9E,UAAM,QAAQ,CAAC,QAAsC,QAAoE,cAAuB;AAC9I,UAAI,YAAa,2BAA0B,aAAa,QAAQ,EAAE,QAAQ,WAAW,YAAY,UAAU,CAAC;AAC5G,WAAK,SAAS,UAAU,aAAa,6BAA6B,QAAQ,SAAS;AAAA,IACrF;AACA,QAAI;AACF,UAAI,OAAO,kBAAkB,OAAQ,YAAW,cAAc,YAAY,SAAS;AACjF,YAAI,WAAW,kBAAkB,OAAQ;AACzC,YAAI,SAAS,KAAK,iBAAiB,IAAI,WAAW,MAAM;AACxD,YAAI,CAAC,QAAQ;AAAE,mBAAS,aAAa,KAAK,UAAU,KAAK,MAAM,KAAK,iBAAiB,OAAO,QAAQ,SAAS,CAAC;AAAG,kBAAQ,KAAK,MAAM;AAAA,QAAG;AACvI,gBAAQ,IAAI,WAAW,QAAQ,MAAM;AACrC,sBAAc,KAAK,oBAAoB,QAAQ,WAAW,YAAY,CAAC,GAAG;AAAA,UACxE,MAAM,IAAI,OAAO;AAAA,UAAG,QAAQ,WAAW;AAAA,UAAQ,mBAAmB,WAAW;AAAA,UAC7E,0BAA0B,WAAW;AAAA,QACvC,GAAG,YAAY,WAAW,YAAY,aAAa,CAAC;AACpD,cAAM,WAAW,kBAAkB,WAAW,YAAY,CAAC,CAAC;AAC5D,cAAM,QAAQ,WAAW,0BAA0B,WAAW,qBAAqB,QAAQ,SAAS,SAAS,SAAS,WAAW,SAAS,KAAK,CAAC;AAAA,MAClJ;AACA,YAAM,eAAe,OAAO,kBAAkB,UAAU,OAAO,iBAAiB;AAChF,YAAM,KAAK,aAAa,OAAO,0BAA0B,iBAAiB,OAAO,qBAAqB,KAAK;AAC3G,UAAI,aAAc,eAAc,KAAK,oBAAoB,KAAK,aAAa,EAAE,SAAS,6BAA6B,GAAG;AAAA,QACpH,MAAM,IAAI,OAAO;AAAA,QAAG,mBAAmB,OAAO;AAAA,QAAmB,0BAA0B,OAAO;AAAA,MACpG,GAAG,YAAY,WAAW,YAAY,aAAa,CAAC;AACpD,YAAM,MAAM,KAAK,SAAS,UAAU;AACpC,YAAM,QAAQ,YAAY,SAAS,UAAU,uBAAuB,0BAA0B,KAAK,WAAW,IAAI,+BAA+B,CAAC;AAClJ,UAAI,IAAK,YAAW,QAAQ,OAAO;AACjC,YAAI,QAAQ,KAAK,oBAAoB,IAAI,IAAI;AAC7C,YAAI,CAAC,OAAO;AAAE,kBAAQ,IAAI,QAAQ,IAAI;AAAG,2BAAiB,KAAK,KAAK;AAAA,QAAG;AACvE,oBAAY,IAAI,MAAM,KAAK;AAAA,MAC7B;AACA,YAAM,UAA0C,CAAC;AACjD,iBAAW,CAAC,UAAU,MAAM,KAAK,KAAK,iBAAkB,KAAI,CAAC,QAAQ,IAAI,QAAQ,EAAG,SAAQ,KAAK,MAAM;AACvG,UAAI,CAAC,gBAAgB,KAAK,YAAY,KAAM,SAAQ,KAAK,KAAK,WAAW;AACzE,UAAI,YAAa,YAAW,UAAU,QAAS,6BAA4B,aAAa,MAAM;AAC9F,aAAO,EAAE,aAAa,QAAQ,SAAS,SAAS,SAAS,eAAe,aAAa,kBAAkB,cAAc,SAAS,YAAY,UAAU,QAAQ,EAAE;AAAA,IAChK,SAAS,OAAO;AACd,YAAM,SAAoB,CAAC,KAAK;AAChC,YAAM,UAAU,CAAC,aAAyB;AAAE,YAAI;AAAE,mBAAS;AAAA,QAAG,SAAS,cAAc;AAAE,iBAAO,KAAK,YAAY;AAAA,QAAG;AAAA,MAAE;AACpH,iBAAW,gBAAgB,cAAe,SAAQ,MAAM,aAAa,OAAO,CAAC;AAC7E,iBAAW,SAAS,iBAAkB,SAAQ,KAAK;AACnD,iBAAW,UAAU,QAAS,SAAQ,MAAM,cAAc,MAAM,CAAC;AACjE,UAAI,OAAO,SAAS,EAAG,OAAM,IAAI,eAAe,QAAQ,gDAAgD,EAAE,OAAO,MAAM,CAAC;AACxH,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEQ,iBAAiB,UAA6C;AACpE,UAAM,EAAE,aAAa,OAAO,IAAI;AAChC,eAAW,gBAAgB,SAAS,cAAe,cAAa,MAAM;AACtE,aAAS,sBAAsB,KAAK;AACpC,SAAK,sBAAsB,SAAS;AACpC,SAAK,mBAAmB,SAAS;AACjC,SAAK,uBAAuB,YAAY;AACxC,SAAK,6BAA6B,YAAY;AAC9C,SAAK,kBAAkB;AACvB,SAAK,2BAA2B,SAAS;AACzC,SAAK;AACL,aAAS,UAAU;AAAA,EACrB;AAAA,EAEQ,eAAe,UAAuC,SAAwB;AACpF,QAAI,SAAS,QAAS;AACtB,aAAS,UAAU;AACnB,cAAU,WAAW,SAAS,YAAY;AAC1C,UAAM,SAAoB,CAAC;AAC3B,UAAM,SAAS,CAAC,aAAyB;AAAE,UAAI;AAAE,iBAAS;AAAA,MAAG,SAAS,OAAO;AAAE,eAAO,KAAK,KAAK;AAAA,MAAG;AAAA,IAAE;AACrG,eAAW,gBAAgB,SAAS,cAAe,QAAO,MAAM,aAAa,OAAO,CAAC;AACrF,QAAI,SAAS,qBAAqB;AAChC,iBAAW,CAAC,MAAM,OAAO,KAAK,SAAS,oBAAqB,KAAI,CAAC,SAAS,YAAY,IAAI,IAAI,EAAG,QAAO,OAAO;AAAA,IACjH,WAAW,CAAC,QAAS,YAAW,WAAW,SAAS,iBAAkB,QAAO,OAAO;AACpF,eAAW,UAAU,UAAU,SAAS,UAAU,SAAS,QAAS,QAAO,MAAM,cAAc,MAAM,CAAC;AACtG,QAAI,QAAS,YAAW,gBAAgB,SAAS,cAAe,QAAO,MAAM,aAAa,OAAO,CAAC;AAClG,QAAI,OAAO,WAAW,EAAG,OAAM,OAAO,CAAC;AACvC,QAAI,OAAO,OAAQ,OAAM,IAAI,eAAe,QAAQ,8CAA8C;AAAA,EACpG;AAAA;AAAA,EAGQ,kBAAkB,aAAwC,QAAiC;AACjG,UAAM,WAAW,KAAK,mBAAmB,aAAa,MAAM;AAC5D,SAAK,iBAAiB,QAAQ;AAC9B,SAAK,eAAe,UAAU,IAAI;AAAA,EACpC;AAAA,EAEQ,sBACN,QACA,aACM;AACN,QAAI,CAAC,OAAO,WAAY;AACxB,WAAO,WAAW,YAAY,YAAY;AAC1C,WAAO,WAAW,gBAAgB,YAAY;AAC9C,WAAO,MAAM,aAAa,OAAO,OAAO,UAAU;AAAA,EACpD;AAAA,EAEQ,iCAAuC;AAC7C,UAAM,cAAc;AAAA,MAClB,WAAW,KAAK;AAAA,MAChB,eAAe,KAAK,cAAc;AAAA,IACpC;AACA,QAAI,KAAK,gBAAgB,kBAAkB,QAAQ;AACjD,iBAAW,cAAc,KAAK,4BAA4B;AACxD,YAAI,WAAW,kBAAkB,OAAQ;AACzC,cAAM,SAAS,KAAK,iBAAiB,IAAI,WAAW,MAAM;AAC1D,YAAI,CAAC,OAAQ;AAKb,YAAI,CAAC,OAAO,MAAM;AAChB;AAAA,YACE;AAAA,YACA,WAAW,YAAY,CAAC;AAAA,YACxB;AAAA,cACE,MAAM,IAAI,OAAO;AAAA,cACjB,QAAQ,WAAW;AAAA,cACnB,mBAAmB,WAAW;AAAA,cAC9B,0BAA0B,WAAW;AAAA,YACvC;AAAA,YACA;AAAA,UACF;AAAA,QACF;AACA,aAAK,sBAAsB,QAAQ,WAAW;AAC9C,aAAK,SAAS,UAAU,aAAa,cAAc,MAAM;AACzD,aAAK,gCAAgC,MAAM;AAAA,MAC7C;AAAA,IACF;AACA,QACE,KAAK,gBAAgB,kBAAkB,UACvC,KAAK,gBAAgB,iBAAiB,kBACtC,CAAC,KAAK,YAAY,MAClB;AACA;AAAA,QACE,KAAK;AAAA,QACL,EAAE,SAAS,6BAA6B;AAAA,QACxC;AAAA,UACE,MAAM,IAAI,OAAO;AAAA,UACjB,mBAAmB,KAAK,gBAAgB;AAAA,UACxC,0BACE,KAAK,gBAAgB;AAAA,QACzB;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,QAAI,KAAK,YAAY,MAAM;AACzB,WAAK,sBAAsB,KAAK,aAAa,WAAW;AACxD,WAAK,SAAS,UAAU,aAAa,cAAc,KAAK,WAAW;AACnE,WAAK,gCAAgC,KAAK,WAAW;AAAA,IACvD;AAAA,EACF;AAAA,EAEQ,gCACN,QACM;AACN,SAAK,SAAS,UAAU,aAAa,6BAA6B,MAAM;AAAA,EAC1E;AAAA,EAEQ,aACN,QACA,QACA,QACM;AACN,QAAI,KAAK,gBAAgB,kBAAkB,QAAQ;AACjD,aAAO,cAAc,oBAAoB;AACzC,aAAO,SAAS;AAChB;AAAA,IACF;AACA,UAAM,QAAQ,KAAK,mBAAmB,QAAQ,MAAM;AACpD,QAAK,MAAM,eAAe,KAAK,yBAAyB,MAAM,uBAAuB,uBAAuB,KAAK,QAAQ,EAAE,cAAe,KAAK,YAAY,KAAK,oBAAoB;AAClL,aAAO,cAAc,oBAAoB;AACzC,aAAO,SAAS;AAChB,aAAO,OAAO;AACd,aAAO,OAAO;AACd;AAAA,IACF;AACA,WAAO,SAAS,KAAK;AACrB,WAAO,cAAc;AACrB,YAAQ,MAAM,IAAI,MAAM;AAAA,MACtB,KAAK;AACH,YAAI,KAAK,gBAAgB,iBAAiB,gBAAgB;AACxD,iBAAO,cAAc,oBAAoB;AACzC,iBAAO,SAAS;AAChB,iBAAO,OAAO;AACd,iBAAO,OAAO;AAAA,QAChB,WAAW,KAAK,gBAAgB,iBAAiB,SAAS;AACxD,iBAAO,cAAc,oBAAoB;AACzC,iBAAO,SAAS;AAAA,QAClB,OAAO;AACL,iBAAO,cAAc,oBAAoB;AACzC,iBAAO,SAAS,KAAK,YAAY,OAAO,KAAK,cAAc;AAAA,QAC7D;AACA;AAAA,MACF,KAAK;AACH,eAAO,cAAc,oBAAoB;AACzC,eAAO,SAAS;AAChB;AAAA,MACF,KAAK,UAAU;AACb,cAAM,SAAS,KAAK,iBAAiB,IAAI,MAAM,IAAI,MAAM;AACzD,YAAI,CAAC,QAAQ,MAAM;AACjB,iBAAO,cAAc,oBAAoB;AACzC,iBAAO,SAAS;AAChB,iBAAO,cAAc;AAAA,YACnB,OAAO,MAAM;AAAA,YAAO,YAAY,MAAM;AAAA,YAAY,oBAAoB,MAAM;AAAA,YAC5E,KAAK,OAAO,OAAO,EAAE,MAAM,QAAiB,CAAC;AAAA,UAC/C;AACA,eAAK,oBAAoB;AACzB;AAAA,QACF;AACA,eAAO,cAAc,oBAAoB;AACzC,eAAO,SAAS;AAAA,MAClB;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,mBACN,QACA,QACqB;AACrB,UAAM,QAAQ,OAAO,OAAO,EAAE,GAAG,QAAQ,GAAG,OAAO,CAAC;AACpD,UAAM,aAAa,KAAK;AACxB,UAAM,qBAAqB,uBAAuB,KAAK,QAAQ,EAAE;AACjE,QAAI,KAAK,cAAc,CAAC,KAAK,sBAAsB;AACjD,aAAO,EAAE,OAAO,YAAY,oBAAoB,KAAK,OAAO,OAAO,EAAE,MAAM,QAAQ,CAAC,EAAE;AAAA,IACxF;AACA,UAAM,MAAM,KAAK,qBAAqB,QAAQ,KAAK;AACnD,QAAK,eAAe,KAAK,yBAAyB,uBAAuB,uBAAuB,KAAK,QAAQ,EAAE,cAAe,KAAK,YAAY,KAAK,YAAY;AAC9J,aAAO,EAAE,OAAO,YAAY,oBAAoB,KAAK,OAAO,OAAO,EAAE,MAAM,QAAQ,CAAC,EAAE;AAAA,IACxF;AACA,QAAI,IAAI,SAAS,YAAY,CAAC,KAAK,iBAAiB,IAAI,IAAI,MAAM,GAAG;AACnE,WAAK,oBAAoB;AACzB,aAAO,EAAE,OAAO,YAAY,oBAAoB,KAAK,OAAO,OAAO,EAAE,MAAM,QAAQ,CAAC,EAAE;AAAA,IACxF;AACA,WAAO,EAAE,OAAO,KAAK,YAAY,mBAAmB;AAAA,EACtD;AAAA,EAEQ,sBAA4B;AAClC,QAAI,KAAK,sBAAuB;AAChC,SAAK,wBAAwB;AAC7B,yBAAqB,MAAM;AACzB,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEQ,aACN,MACA,WACA,eACA,eACM;AACN,UAAM,WAAW,KAAK;AACtB,QAAI,CAAC,UAAU,WAAW,KAAK,YAAY,KAAK,mBAAoB;AACpE,QAAI,QAAQ;AAGZ,QAAI,UAAU,MAAM,eAAe,KAAK,yBAAyB,MAAM,uBAAuB,uBAAuB,KAAK,QAAQ,EAAE,YAAa;AACjJ,QAAI,CAAC,OAAO;AACV,YAAM,SAAS,+BAA+B,KAAK,QAAQ;AAC3D,UAAI,CAAC,OAAQ;AACb,YAAM,aAAa,OAAO,QAAQ,EAAE,eAAe,IAAI,SAAS,UAAU,GAAG,UAAU,CAAC,CAAC;AACzF,YAAM,QAAQ,KAAK,yBAAyB,eAAe,UAAU;AACrE,cAAQ,KAAK,mBAAmB,MAAM,GAAG,MAAM,CAAC;AAAA,IAClD;AACA,QAAI,KAAK,uBAAuB,MAAM,eAAe,KAAK,yBAAyB,MAAM,uBAAuB,uBAAuB,KAAK,QAAQ,EAAE,YAAa;AACnK,aAAS;AAAA,MACP,OAAO,OAAO;AAAA,QACZ;AAAA,QACA,OAAO,MAAM;AAAA,QACb,KAAK,MAAM;AAAA,QACX;AAAA,QACA,mBAAmB,CAAC,cAClB,0BAA0B,KAAK,aAAa,SAAS;AAAA,QACvD,uBAAuB,CAAC,cACtB,8BAA8B,KAAK,aAAa,SAAS;AAAA,MAC7D,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEQ,2BAA2B,SAAwB;AACzD,UAAM,WAAW,IAAI;AAAA,MACnB,UACI,uBACA,0BAA0B,KAAK,WAAW,IACxC,+BACA,CAAC;AAAA,IACT;AACA,eAAW,CAAC,MAAM,OAAO,KAAK,KAAK,qBAAqB;AACtD,UAAI,SAAS,IAAI,IAAI,EAAG;AACxB,cAAQ;AACR,WAAK,oBAAoB,OAAO,IAAI;AAAA,IACtC;AACA,UAAM,MAAM,KAAK,SAAS,UAAU;AACpC,QAAI,CAAC,IAAK;AACV,eAAW,QAAQ,UAAU;AAC3B,UAAI,CAAC,KAAK,oBAAoB,IAAI,IAAI,GAAG;AACvC,aAAK,oBAAoB,IAAI,MAAM,IAAI,QAAQ,IAAI,CAAC;AAAA,MACtD;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,cACN,KACA,MACA,OACM;AACN,SAAK,aAAa;AAClB,SAAK,cAAc,KAAK,IAAI;AAC5B,yBAAqB,MAAM;AACzB,YAAM;AAAA,IACR,CAAC;AAAA,EACH;AAAA,EAEQ,UAAgB;AACtB,QAAI,KAAK,SAAU;AACnB,SAAK,WAAW;AAChB,UAAM,SAAoB,CAAC;AAC3B,UAAM,UAAU,CAAC,aAAyB;AAAE,UAAI;AAAE,iBAAS;AAAA,MAAG,SAAS,OAAO;AAAE,eAAO,KAAK,KAAK;AAAA,MAAG;AAAA,IAAE;AACtG,QAAI,KAAK,WAAW,KAAK,WAAW,QAAS,SAAQ,MAAM;AAAA,MACzD,KAAK,WAAW,QAAS,KAAK,WAAY,KAAK,OAAO;AAAA,MAAG;AAAA,IAAS,CAAC;AACrE,YAAQ,MAAM;AAAE,WAAK,OAAO,QAAQ,KAAK,OAAO,SAAS;AAAA,IAAG,CAAC;AAC7D,YAAQ,MAAM,KAAK,WAAW,OAAO,MAAM,CAAC;AAC5C,QAAI,KAAK,WAAW,SAAU,SAAQ,MAAM,KAAK,eAAe,KAAK,UAAW,UAAW,KAAK,CAAC;AACjG,YAAQ,MAAM,KAAK,WAAW,MAAM,CAAC;AACrC,eAAW,UAAU,KAAK,iBAAiB,OAAO,EAAG,SAAQ,MAAM,cAAc,MAAM,CAAC;AACxF,SAAK,iBAAiB,MAAM;AAC5B,YAAQ,MAAM,cAAc,KAAK,WAAW,CAAC;AAC7C,YAAQ,MAAM,2BAA2B,KAAK,WAAW,CAAC;AAC1D,eAAW,SAAS,KAAK,oBAAoB,OAAO,EAAG,SAAQ,KAAK;AACpE,SAAK,oBAAoB,MAAM;AAC/B,SAAK,YAAY;AACjB,SAAK,YAAY;AACjB,SAAK,uBAAuB;AAC5B,QAAI,OAAO,WAAW,EAAG,OAAM,OAAO,CAAC;AACvC,QAAI,OAAO,OAAQ,OAAM,IAAI,eAAe,QAAQ,+BAA+B;AAAA,EACrF;AACF;AAEA,SAAS,mBAAyB;AAChC,MACE,OAAO,oBAAoB,cAC3B,OAAO,gBAAgB,UAAU,0BAA0B,YAC3D;AACA,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,SACP,GACA,GACS;AACT,SACE,CAAC,CAAC,KACF,EAAE,UAAU,EAAE,SACd,EAAE,WAAW,EAAE,UACf,EAAE,iBAAiB,EAAE,gBACrB,EAAE,kBAAkB,EAAE;AAE1B;AAEA,SAAS,uBAAuB,OAAyB;AACvD,SAAO,iBAAiB;AAC1B;AAEA,SAAS,cAAqB,OAAyC;AACrE,SAAO,OAAO,OAAO,EAAE,GAAG,MAAM,CAAC;AACnC;AAEA,SAAS,UACP,GACA,GACS;AACT,MAAI,CAAC,EAAG,QAAO;AACf,QAAM,QAAQ,QAAQ,QAAQ,CAAC;AAC/B,QAAM,QAAQ,QAAQ,QAAQ,CAAW;AACzC,SACE,MAAM,WAAW,MAAM,UACvB,MAAM;AAAA,IACJ,CAAC,QACC,OAAO,UAAU,eAAe,KAAK,GAAG,GAAG,KAC3C,OAAO,GAAG,EAAE,GAAkB,GAAG,EAAE,GAAkB,CAAC;AAAA,EAC1D;AAEJ;AAEA,SAAS,eAAe,QAA8C;AACpE,SAAO,OAAO,OAAO;AAAA,IACnB,cAAc,OAAO;AAAA,IACrB,eAAe,OAAO;AAAA,IACtB,mBAAmB,OAAO;AAAA,IAC1B,0BAA0B,OAAO,2BAC7B,OAAO,OAAO;AAAA,MACZ,GAAG,OAAO;AAAA,IACZ,CAAC,IACD;AAAA,EACN,CAAC;AACH;AAEA,SAAS,WAAW,GAAsB,GAA+B;AACvE,SACE,EAAE,iBAAiB,EAAE,gBACrB,EAAE,kBAAkB,EAAE,iBACtB,EAAE,sBAAsB,EAAE,qBAC1B,EAAE,0BAA0B,MAAM,EAAE,0BAA0B,KAC9D,EAAE,0BAA0B,MAAM,EAAE,0BAA0B,KAC9D,EAAE,0BAA0B,UAAU,EAAE,0BAA0B,SAClE,EAAE,0BAA0B,WAAW,EAAE,0BAA0B;AAEvE;",
6
6
  "names": ["transaction"]
7
7
  }
@@ -1,10 +1,20 @@
1
- import type { PibblRenderTransaction } from './types.js';
2
- /** Root-wide publication precedes focus/policy commit in both render paths. */
1
+ import type { PibblRenderTransaction } from "./types.js";
2
+ /** Root-wide publications and ordinary commit callbacks precede completion observers. */
3
3
  export declare class RootRenderTransaction implements PibblRenderTransaction {
4
+ private preflights;
4
5
  private publications;
6
+ private adoptions;
5
7
  private callbacks;
8
+ private afterFinishCallbacks;
6
9
  private result;
10
+ private failure;
11
+ get failed(): boolean;
12
+ fail(): void;
13
+ private afterFinishDelivered;
14
+ onPreflight(callback: () => void): void;
7
15
  onPublish(callback: () => void): void;
16
+ onAdopt(callback: () => void): void;
8
17
  onFinish(callback: (success: boolean) => void): void;
18
+ onAfterFinish(callback: (success: boolean) => void): void;
9
19
  finish(success: boolean): void;
10
20
  }
@@ -1,31 +1,86 @@
1
1
  class RootRenderTransaction {
2
+ preflights = /* @__PURE__ */ new Set();
2
3
  publications = /* @__PURE__ */ new Set();
4
+ adoptions = /* @__PURE__ */ new Set();
3
5
  callbacks = /* @__PURE__ */ new Set();
6
+ afterFinishCallbacks = /* @__PURE__ */ new Set();
4
7
  result;
8
+ failure = false;
9
+ get failed() {
10
+ return this.failure;
11
+ }
12
+ fail() {
13
+ this.failure = true;
14
+ }
15
+ afterFinishDelivered = false;
16
+ onPreflight(callback) {
17
+ if (this.result !== void 0) {
18
+ if (this.result) callback();
19
+ } else this.preflights.add(callback);
20
+ }
5
21
  onPublish(callback) {
6
22
  if (this.result !== void 0) {
7
23
  if (this.result) callback();
8
24
  } else this.publications.add(callback);
9
25
  }
26
+ onAdopt(callback) {
27
+ if (this.result !== void 0) {
28
+ if (this.result) callback();
29
+ } else this.adoptions.add(callback);
30
+ }
10
31
  onFinish(callback) {
11
32
  if (this.result !== void 0) callback(this.result);
12
33
  else this.callbacks.add(callback);
13
34
  }
35
+ onAfterFinish(callback) {
36
+ if (this.afterFinishDelivered) {
37
+ callback(this.result);
38
+ } else {
39
+ this.afterFinishCallbacks.add(callback);
40
+ }
41
+ }
14
42
  finish(success) {
15
43
  if (this.result !== void 0) return;
16
44
  const errors = [];
45
+ if (success) {
46
+ for (const preflight of this.preflights) {
47
+ try {
48
+ preflight();
49
+ } catch (error) {
50
+ errors.push(error);
51
+ this.failure = true;
52
+ success = false;
53
+ break;
54
+ }
55
+ }
56
+ }
57
+ this.preflights.clear();
17
58
  if (success) {
18
59
  for (const publish of this.publications) {
19
60
  try {
20
61
  publish();
21
62
  } catch (error) {
22
63
  errors.push(error);
64
+ this.failure = true;
23
65
  success = false;
24
66
  break;
25
67
  }
26
68
  }
27
69
  }
28
70
  this.publications.clear();
71
+ if (success) {
72
+ for (const adopt of this.adoptions) {
73
+ try {
74
+ adopt();
75
+ } catch (error) {
76
+ errors.push(error);
77
+ this.failure = true;
78
+ success = false;
79
+ break;
80
+ }
81
+ }
82
+ }
83
+ this.adoptions.clear();
29
84
  this.result = success;
30
85
  const callbacks = Array.from(this.callbacks);
31
86
  this.callbacks.clear();
@@ -36,8 +91,21 @@ class RootRenderTransaction {
36
91
  errors.push(error);
37
92
  }
38
93
  }
94
+ while (this.afterFinishCallbacks.size) {
95
+ const afterFinishCallbacks = Array.from(this.afterFinishCallbacks);
96
+ this.afterFinishCallbacks.clear();
97
+ for (const callback of afterFinishCallbacks) {
98
+ try {
99
+ callback(success);
100
+ } catch (error) {
101
+ errors.push(error);
102
+ }
103
+ }
104
+ }
105
+ this.afterFinishDelivered = true;
39
106
  if (errors.length === 1) throw errors[0];
40
- if (errors.length) throw new AggregateError(errors, "Pibbl render completion failed.");
107
+ if (errors.length)
108
+ throw new AggregateError(errors, "Pibbl render completion failed.");
41
109
  }
42
110
  }
43
111
  export {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/lib/render-transaction.ts"],
4
- "sourcesContent": ["import type { PibblRenderTransaction } from './types.js';\n\n/** Root-wide publication precedes focus/policy commit in both render paths. */\nexport class RootRenderTransaction implements PibblRenderTransaction {\n private publications = new Set<() => void>();\n private callbacks = new Set<(success: boolean) => void>();\n private result: boolean | undefined;\n\n onPublish(callback: () => void): void {\n if (this.result !== undefined) {\n if (this.result) callback();\n } else this.publications.add(callback);\n }\n\n onFinish(callback: (success: boolean) => void): void {\n if (this.result !== undefined) callback(this.result);\n else this.callbacks.add(callback);\n }\n\n finish(success: boolean): void {\n if (this.result !== undefined) return;\n const errors: unknown[] = [];\n if (success) {\n for (const publish of this.publications) {\n try { publish(); } catch (error) { errors.push(error); success = false; break; }\n }\n }\n this.publications.clear();\n this.result = success;\n const callbacks = Array.from(this.callbacks);\n this.callbacks.clear();\n for (const callback of callbacks) {\n try { callback(success); } catch (error) { errors.push(error); }\n }\n if (errors.length === 1) throw errors[0];\n if (errors.length) throw new AggregateError(errors, 'Pibbl render completion failed.');\n }\n}\n"],
5
- "mappings": "AAGO,MAAM,sBAAwD;AAAA,EAC3D,eAAe,oBAAI,IAAgB;AAAA,EACnC,YAAY,oBAAI,IAAgC;AAAA,EAChD;AAAA,EAER,UAAU,UAA4B;AACpC,QAAI,KAAK,WAAW,QAAW;AAC7B,UAAI,KAAK,OAAQ,UAAS;AAAA,IAC5B,MAAO,MAAK,aAAa,IAAI,QAAQ;AAAA,EACvC;AAAA,EAEA,SAAS,UAA4C;AACnD,QAAI,KAAK,WAAW,OAAW,UAAS,KAAK,MAAM;AAAA,QAC9C,MAAK,UAAU,IAAI,QAAQ;AAAA,EAClC;AAAA,EAEA,OAAO,SAAwB;AAC7B,QAAI,KAAK,WAAW,OAAW;AAC/B,UAAM,SAAoB,CAAC;AAC3B,QAAI,SAAS;AACX,iBAAW,WAAW,KAAK,cAAc;AACvC,YAAI;AAAE,kBAAQ;AAAA,QAAG,SAAS,OAAO;AAAE,iBAAO,KAAK,KAAK;AAAG,oBAAU;AAAO;AAAA,QAAO;AAAA,MACjF;AAAA,IACF;AACA,SAAK,aAAa,MAAM;AACxB,SAAK,SAAS;AACd,UAAM,YAAY,MAAM,KAAK,KAAK,SAAS;AAC3C,SAAK,UAAU,MAAM;AACrB,eAAW,YAAY,WAAW;AAChC,UAAI;AAAE,iBAAS,OAAO;AAAA,MAAG,SAAS,OAAO;AAAE,eAAO,KAAK,KAAK;AAAA,MAAG;AAAA,IACjE;AACA,QAAI,OAAO,WAAW,EAAG,OAAM,OAAO,CAAC;AACvC,QAAI,OAAO,OAAQ,OAAM,IAAI,eAAe,QAAQ,iCAAiC;AAAA,EACvF;AACF;",
4
+ "sourcesContent": ["import type { PibblRenderTransaction } from \"./types.js\";\n\n/** Root-wide publications and ordinary commit callbacks precede completion observers. */\nexport class RootRenderTransaction implements PibblRenderTransaction {\n private preflights = new Set<() => void>();\n private publications = new Set<() => void>();\n private adoptions = new Set<() => void>();\n private callbacks = new Set<(success: boolean) => void>();\n private afterFinishCallbacks = new Set<(success: boolean) => void>();\n private result: boolean | undefined;\n private failure = false;\n get failed(): boolean { return this.failure; }\n fail(): void { this.failure = true; }\n private afterFinishDelivered = false;\n\n onPreflight(callback: () => void): void {\n if (this.result !== undefined) {\n if (this.result) callback();\n } else this.preflights.add(callback);\n }\n\n onPublish(callback: () => void): void {\n if (this.result !== undefined) {\n if (this.result) callback();\n } else this.publications.add(callback);\n }\n\n onAdopt(callback: () => void): void {\n if (this.result !== undefined) {\n if (this.result) callback();\n } else this.adoptions.add(callback);\n }\n\n onFinish(callback: (success: boolean) => void): void {\n if (this.result !== undefined) callback(this.result);\n else this.callbacks.add(callback);\n }\n\n onAfterFinish(callback: (success: boolean) => void): void {\n if (this.afterFinishDelivered) {\n callback(this.result!);\n } else {\n this.afterFinishCallbacks.add(callback);\n }\n }\n\n finish(success: boolean): void {\n if (this.result !== undefined) return;\n const errors: unknown[] = [];\n if (success) {\n for (const preflight of this.preflights) {\n try { preflight(); }\n catch (error) { errors.push(error); this.failure = true; success = false; break; }\n }\n }\n this.preflights.clear();\n if (success) {\n for (const publish of this.publications) {\n try {\n publish();\n } catch (error) {\n errors.push(error);\n this.failure = true;\n success = false;\n break;\n }\n }\n }\n this.publications.clear();\n if (success) {\n for (const adopt of this.adoptions) {\n try { adopt(); }\n catch (error) { errors.push(error); this.failure = true; success = false; break; }\n }\n }\n this.adoptions.clear();\n this.result = success;\n const callbacks = Array.from(this.callbacks);\n this.callbacks.clear();\n for (const callback of callbacks) {\n try {\n callback(success);\n } catch (error) {\n errors.push(error);\n }\n }\n while (this.afterFinishCallbacks.size) {\n const afterFinishCallbacks = Array.from(this.afterFinishCallbacks);\n this.afterFinishCallbacks.clear();\n for (const callback of afterFinishCallbacks) {\n try {\n callback(success);\n } catch (error) {\n errors.push(error);\n }\n }\n }\n this.afterFinishDelivered = true;\n if (errors.length === 1) throw errors[0];\n if (errors.length)\n throw new AggregateError(errors, \"Pibbl render completion failed.\");\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,12 @@
1
+ import { stageLayoutGeometry } from "./layout/geometry-publication.js";
2
+ import { wireStructuralEvents } from "./components/structural-events.js";
3
+ import { layoutParticipation, contentsChildren, isContentsTransform, registerLayoutComponentMount, resumeLayoutComponent, retainHiddenLayoutDescendants } from "./layout/participation.js";
4
+ import { isLayoutComponent, placedLayoutComponentRoot } from "./layout/define-layout-component.js";
1
5
  import {
2
6
  clearComponentState,
3
7
  getAnonElemName,
4
- GLOBAL_STATE
8
+ GLOBAL_STATE,
9
+ NO_PENDING_ROOT
5
10
  } from "./global-state.js";
6
11
  import { Teardowns } from "./teardowns.js";
7
12
  import { finalizeHookSlots } from "./hooks/hook-slot.js";
@@ -19,6 +24,7 @@ import {
19
24
  reconcileElementEnhancers
20
25
  } from "./element-enhancers.js";
21
26
  import {
27
+ getElementMetadata,
22
28
  getPlacementIdentityHint,
23
29
  getPrimitiveDefinition,
24
30
  getPrimitiveReceiverToken,
@@ -142,12 +148,20 @@ function renderComponentElement(element, parentId, parent) {
142
148
  GLOBAL_STATE.renderTransaction,
143
149
  receiverToken
144
150
  );
151
+ const preparedStyle = takePreNormalizedStyle(componentRefs.element);
152
+ const participation = layoutParticipation(componentRefs.element, preparedStyle ?? null);
153
+ if (participation === "hidden") {
154
+ retainHiddenLayoutDescendants(componentRefs);
155
+ commitSignalReads();
156
+ return;
157
+ }
145
158
  const renderProgram = (invoke) => {
146
159
  try {
147
160
  const previousReceiverToken = GLOBAL_STATE.primitiveReceiverToken;
148
161
  GLOBAL_STATE.primitiveReceiverToken = receiverToken;
149
162
  let result;
150
163
  try {
164
+ stageLayoutGeometry(componentRefs);
151
165
  result = invoke();
152
166
  } finally {
153
167
  GLOBAL_STATE.primitiveReceiverToken = previousReceiverToken;
@@ -167,6 +181,13 @@ function renderComponentElement(element, parentId, parent) {
167
181
  finishAfterRender();
168
182
  }
169
183
  };
184
+ const assignedContents = getElementMetadata(componentRefs.element)?.layoutContentsChildren;
185
+ if (participation === "contents" && !isContentsTransform(componentRefs.element.type)) {
186
+ const children = assignedContents ?? contentsChildren(componentRefs.element);
187
+ wireStructuralEvents(componentRefs.element.props);
188
+ renderProgram(() => children);
189
+ return;
190
+ }
170
191
  if (definition) {
171
192
  if (definition.backend !== driver.token) {
172
193
  throw backendMismatchError(
@@ -176,7 +197,6 @@ function renderComponentElement(element, parentId, parent) {
176
197
  getElementSource(componentRefs.element)
177
198
  );
178
199
  }
179
- const preparedStyle = takePreNormalizedStyle(componentRefs.element);
180
200
  const inputs = resolvePrimitiveInputs(
181
201
  componentRefs.element,
182
202
  definition,
@@ -198,7 +218,7 @@ function renderComponentElement(element, parentId, parent) {
198
218
  })();
199
219
  const componentName = componentRefs.element.type.name || "Anonymous";
200
220
  const source = getElementSource(componentRefs.element);
201
- const props = inputs.props;
221
+ const props = assignedContents ? { ...inputs.props, children: assignedContents } : inputs.props;
202
222
  const tracksPresentationLineage = hasElementEnhancers(componentRefs);
203
223
  const tracksCanvasWorldTransform = GLOBAL_STATE.worldBaseTransform !== void 0 && GLOBAL_STATE.renderContext !== void 0 && GLOBAL_STATE.renderTarget !== void 0;
204
224
  const prepared = tracksPresentationLineage ? prepareElementEnhancers(componentRefs, {
@@ -243,7 +263,6 @@ function renderComponentElement(element, parentId, parent) {
243
263
  );
244
264
  }
245
265
  } else {
246
- const preparedStyle = takePreNormalizedStyle(componentRefs.element);
247
266
  const signalHandoff = getPlacementSignalHandoff(componentRefs.element);
248
267
  const consumedStyle = preparedStyle?.style ?? signalHandoff;
249
268
  const receivesPlacementHandoff = isPlacementConsumed(componentRefs.element) || signalHandoff !== void 0;
@@ -251,7 +270,7 @@ function renderComponentElement(element, parentId, parent) {
251
270
  renderProgram(() => {
252
271
  const releaseHandoff = receivesPlacementHandoff ? enterPlacementHandoffCapture(props, consumedStyle) : void 0;
253
272
  try {
254
- return componentRefs.element.type(props);
273
+ return isLayoutComponent(componentRefs.element.type) ? placedLayoutComponentRoot(componentRefs.element, preparedStyle) : componentRefs.element.type(props);
255
274
  } finally {
256
275
  releaseHandoff?.();
257
276
  }
@@ -274,15 +293,18 @@ function renderComponentElement(element, parentId, parent) {
274
293
  clearComponentState();
275
294
  }
276
295
  }
296
+ let signalInputRender;
277
297
  function componentSignalReadOptions(componentRefs) {
278
298
  const pibblInstance = GLOBAL_STATE.currentPibblInstance;
279
299
  return {
280
300
  debugName: `${componentRefs.element.type.name || "Anonymous"} (${componentRefs.id})`,
301
+ layoutOwner: pibblInstance,
302
+ allocationReceiver: componentRefs,
281
303
  invalidate: () => {
282
304
  if (GLOBAL_STATE.pibblInstances.get(pibblInstance.canvas) !== pibblInstance || pibblInstance.mainTeardowns.closed || componentRefs.teardowns.closed || pibblInstance.refs.get(componentRefs.id) !== componentRefs) {
283
305
  return;
284
306
  }
285
- requestInstanceRender(pibblInstance);
307
+ requestInstanceRender(pibblInstance, signalInputRender ??= { pendingRoot: NO_PENDING_ROOT, pendingUpdateParents: false, signalInput: true });
286
308
  },
287
309
  onMaterialize: () => {
288
310
  if (componentRefs.signalConsumerTeardownAttached) return;
@@ -332,8 +354,10 @@ function prepareComponentScope(element, parentId, parent) {
332
354
  onAfterRender: void 0
333
355
  };
334
356
  pibblInstance.refs.set(id, mountedRefs);
357
+ registerLayoutComponentMount(mountedRefs);
335
358
  componentRefs = mountedRefs;
336
359
  }
360
+ resumeLayoutComponent(componentRefs);
337
361
  componentRefs.parent = parent;
338
362
  componentRefs.element = element;
339
363
  componentRefs.renderGeneration = pibblInstance.renderGeneration;
@@ -343,8 +367,8 @@ function prepareComponentScope(element, parentId, parent) {
343
367
  const previous = componentRefs.layoutEntry;
344
368
  const allocation = captureLayoutBox(previous?.allocation, layout.allocation);
345
369
  const percentageBasis = captureLayoutBox(previous?.percentageBasis, layout.percentageBasis);
346
- if (allocation !== previous?.allocation || percentageBasis !== previous?.percentageBasis) {
347
- componentRefs.layoutEntry = Object.freeze({ allocation, percentageBasis });
370
+ if (allocation !== previous?.allocation || percentageBasis !== previous?.percentageBasis || layout.layoutDirection !== previous?.layoutDirection) {
371
+ componentRefs.layoutEntry = Object.freeze({ allocation, percentageBasis, layoutDirection: layout.layoutDirection });
348
372
  }
349
373
  }
350
374
  return componentRefs;