@pibbl/core 0.0.2 → 0.0.3-alpha.109.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (549) hide show
  1. package/THIRD_PARTY_NOTICES.txt +81 -0
  2. package/dist/features/physics/2d-testing.d.ts +1 -1
  3. package/dist/features/physics/2d-testing.js +2 -2
  4. package/dist/features/physics/2d-testing.js.map +2 -2
  5. package/dist/features/physics/lib/2d/canvas/components.js +25 -21
  6. package/dist/features/physics/lib/2d/canvas/components.js.map +2 -2
  7. package/dist/features/physics/lib/2d/canvas/presentation.js +1 -2
  8. package/dist/features/physics/lib/2d/canvas/presentation.js.map +2 -2
  9. package/dist/features/physics/lib/2d/collision/casts.js +4 -2
  10. package/dist/features/physics/lib/2d/collision/casts.js.map +2 -2
  11. package/dist/features/physics/lib/2d/runtime/controller.js +1 -1
  12. package/dist/features/physics/lib/2d/runtime/controller.js.map +2 -2
  13. package/dist/features/physics/lib/2d/runtime/obstacles.js +9 -11
  14. package/dist/features/physics/lib/2d/runtime/obstacles.js.map +2 -2
  15. package/dist/features/physics/lib/2d/shapes.js +8 -9
  16. package/dist/features/physics/lib/2d/shapes.js.map +2 -2
  17. package/dist/features/physics/lib/2d/world/rapier.js +22 -26
  18. package/dist/features/physics/lib/2d/world/rapier.js.map +2 -2
  19. package/dist/features/sprites/loader.js +6 -3
  20. package/dist/features/sprites/loader.js.map +2 -2
  21. package/dist/features/textures/index.d.ts +12 -2
  22. package/dist/features/textures/index.js +33 -1
  23. package/dist/features/textures/index.js.map +2 -2
  24. package/dist/features/textures/lib/chemical-field.d.ts +56 -0
  25. package/dist/features/textures/lib/chemical-field.js +154 -0
  26. package/dist/features/textures/lib/chemical-field.js.map +7 -0
  27. package/dist/features/textures/lib/chemical-recipes.d.ts +119 -0
  28. package/dist/features/textures/lib/chemical-recipes.js +275 -0
  29. package/dist/features/textures/lib/chemical-recipes.js.map +7 -0
  30. package/dist/features/textures/lib/definitions.d.ts +3 -18
  31. package/dist/features/textures/lib/definitions.js +17 -24
  32. package/dist/features/textures/lib/definitions.js.map +2 -2
  33. package/dist/features/textures/lib/geometric-patterns.d.ts +149 -0
  34. package/dist/features/textures/lib/geometric-patterns.js +305 -0
  35. package/dist/features/textures/lib/geometric-patterns.js.map +7 -0
  36. package/dist/features/textures/lib/gray-scott.d.ts +55 -0
  37. package/dist/features/textures/lib/gray-scott.js +37 -0
  38. package/dist/features/textures/lib/gray-scott.js.map +7 -0
  39. package/dist/features/textures/lib/palette.js +1 -3
  40. package/dist/features/textures/lib/palette.js.map +2 -2
  41. package/dist/features/textures/lib/patterns.d.ts +123 -0
  42. package/dist/features/textures/lib/patterns.js +344 -0
  43. package/dist/features/textures/lib/patterns.js.map +7 -0
  44. package/dist/features/textures/lib/rain-drops.js +2 -1
  45. package/dist/features/textures/lib/rain-drops.js.map +2 -2
  46. package/dist/features/textures/lib/reaction-diffusion.d.ts +3 -2
  47. package/dist/features/textures/lib/reaction-diffusion.js +9 -20
  48. package/dist/features/textures/lib/reaction-diffusion.js.map +2 -2
  49. package/dist/features/textures/lib/simulation.d.ts +10 -4
  50. package/dist/features/textures/lib/simulation.js +23 -13
  51. package/dist/features/textures/lib/simulation.js.map +2 -2
  52. package/dist/features/textures/lib/wasm/electric.js +8 -1
  53. package/dist/features/textures/lib/wasm/electric.js.map +2 -2
  54. package/dist/features/textures/lib/water-surface.js +1 -3
  55. package/dist/features/textures/lib/water-surface.js.map +2 -2
  56. package/dist/features/viz/index.d.ts +68 -6
  57. package/dist/features/viz/index.js +164 -2
  58. package/dist/features/viz/index.js.map +2 -2
  59. package/dist/features/viz/inspection/bar.d.ts +79 -0
  60. package/dist/features/viz/inspection/bar.js +49 -0
  61. package/dist/features/viz/inspection/bar.js.map +7 -0
  62. package/dist/features/viz/inspection/candle.d.ts +156 -0
  63. package/dist/features/viz/inspection/candle.js +120 -0
  64. package/dist/features/viz/inspection/candle.js.map +7 -0
  65. package/dist/features/viz/inspection/capture-types.d.ts +65 -0
  66. package/dist/features/viz/inspection/capture.d.ts +16 -0
  67. package/dist/features/viz/inspection/capture.js +49 -0
  68. package/dist/features/viz/inspection/capture.js.map +7 -0
  69. package/dist/features/viz/inspection/handler.d.ts +36 -0
  70. package/dist/features/viz/inspection/handler.js +91 -0
  71. package/dist/features/viz/inspection/handler.js.map +7 -0
  72. package/dist/features/viz/inspection/ohlc-bar.d.ts +132 -0
  73. package/dist/features/viz/inspection/ohlc-bar.js +118 -0
  74. package/dist/features/viz/inspection/ohlc-bar.js.map +7 -0
  75. package/dist/features/viz/inspection/owned-ref.d.ts +16 -0
  76. package/dist/features/viz/inspection/owned-ref.js +99 -0
  77. package/dist/features/viz/inspection/owned-ref.js.map +7 -0
  78. package/dist/features/viz/inspection/painted-point.d.ts +22 -0
  79. package/dist/features/viz/inspection/painted-point.js +29 -0
  80. package/dist/features/viz/inspection/painted-point.js.map +7 -0
  81. package/dist/features/viz/inspection/queries.d.ts +100 -0
  82. package/dist/features/viz/inspection/queries.js +192 -0
  83. package/dist/features/viz/inspection/queries.js.map +7 -0
  84. package/dist/features/viz/inspection/query-types.d.ts +177 -0
  85. package/dist/features/viz/inspection/volume.d.ts +104 -0
  86. package/dist/features/viz/inspection/volume.js +95 -0
  87. package/dist/features/viz/inspection/volume.js.map +7 -0
  88. package/dist/features/viz/inspection.d.ts +19 -0
  89. package/dist/features/viz/inspection.js +54 -0
  90. package/dist/features/viz/inspection.js.map +7 -0
  91. package/dist/features/viz/inspection.mjs +1 -0
  92. package/dist/features/viz/lib/area-series.d.ts +62 -0
  93. package/dist/features/viz/lib/area-series.js +120 -0
  94. package/dist/features/viz/lib/area-series.js.map +7 -0
  95. package/dist/features/viz/lib/axis-title.js +2 -1
  96. package/dist/features/viz/lib/axis-title.js.map +2 -2
  97. package/dist/features/viz/lib/axis.js +1 -1
  98. package/dist/features/viz/lib/axis.js.map +2 -2
  99. package/dist/features/viz/lib/bar-series.d.ts +3 -1
  100. package/dist/features/viz/lib/bar-series.js +16 -1
  101. package/dist/features/viz/lib/bar-series.js.map +2 -2
  102. package/dist/features/viz/lib/baseline-series.d.ts +55 -0
  103. package/dist/features/viz/lib/baseline-series.js +136 -0
  104. package/dist/features/viz/lib/baseline-series.js.map +7 -0
  105. package/dist/features/viz/lib/candlestick-series.d.ts +62 -0
  106. package/dist/features/viz/lib/candlestick-series.js +150 -0
  107. package/dist/features/viz/lib/candlestick-series.js.map +7 -0
  108. package/dist/features/viz/lib/censored-point-series.d.ts +71 -0
  109. package/dist/features/viz/lib/censored-point-series.js +129 -0
  110. package/dist/features/viz/lib/censored-point-series.js.map +7 -0
  111. package/dist/features/viz/lib/color-context.d.ts +4 -0
  112. package/dist/features/viz/lib/color-context.js +41 -0
  113. package/dist/features/viz/lib/color-context.js.map +7 -0
  114. package/dist/features/viz/lib/color-math.d.ts +4 -0
  115. package/dist/features/viz/lib/color-math.js +31 -0
  116. package/dist/features/viz/lib/color-math.js.map +7 -0
  117. package/dist/features/viz/lib/color-types.d.ts +53 -0
  118. package/dist/features/viz/lib/curve-definition.d.ts +49 -0
  119. package/dist/features/viz/lib/curve-definition.js +142 -0
  120. package/dist/features/viz/lib/curve-definition.js.map +7 -0
  121. package/dist/features/viz/lib/diverging-color-scale.d.ts +11 -0
  122. package/dist/features/viz/lib/diverging-color-scale.js +51 -0
  123. package/dist/features/viz/lib/diverging-color-scale.js.map +7 -0
  124. package/dist/features/viz/lib/domain-navigation.d.ts +40 -0
  125. package/dist/features/viz/lib/domain-navigation.js +77 -0
  126. package/dist/features/viz/lib/domain-navigation.js.map +7 -0
  127. package/dist/features/viz/lib/editable-chart-elements.d.ts +178 -0
  128. package/dist/features/viz/lib/editable-chart-elements.js +733 -0
  129. package/dist/features/viz/lib/editable-chart-elements.js.map +7 -0
  130. package/dist/features/viz/lib/financial-aggregation.d.ts +127 -0
  131. package/dist/features/viz/lib/financial-aggregation.js +116 -0
  132. package/dist/features/viz/lib/financial-aggregation.js.map +7 -0
  133. package/dist/features/viz/lib/financial-autoscale.d.ts +64 -0
  134. package/dist/features/viz/lib/financial-autoscale.js +61 -0
  135. package/dist/features/viz/lib/financial-autoscale.js.map +7 -0
  136. package/dist/features/viz/lib/financial-comparison.d.ts +62 -0
  137. package/dist/features/viz/lib/financial-comparison.js +98 -0
  138. package/dist/features/viz/lib/financial-comparison.js.map +7 -0
  139. package/dist/features/viz/lib/financial-geometry.d.ts +77 -0
  140. package/dist/features/viz/lib/financial-geometry.js +67 -0
  141. package/dist/features/viz/lib/financial-geometry.js.map +7 -0
  142. package/dist/features/viz/lib/financial-indicators.d.ts +114 -0
  143. package/dist/features/viz/lib/financial-indicators.js +135 -0
  144. package/dist/features/viz/lib/financial-indicators.js.map +7 -0
  145. package/dist/features/viz/lib/financial-oscillators.d.ts +171 -0
  146. package/dist/features/viz/lib/financial-oscillators.js +265 -0
  147. package/dist/features/viz/lib/financial-oscillators.js.map +7 -0
  148. package/dist/features/viz/lib/graph/bipartite.d.ts +14 -0
  149. package/dist/features/viz/lib/graph/bipartite.js +250 -0
  150. package/dist/features/viz/lib/graph/bipartite.js.map +7 -0
  151. package/dist/features/viz/lib/graph/chord.d.ts +44 -0
  152. package/dist/features/viz/lib/graph/chord.js +348 -0
  153. package/dist/features/viz/lib/graph/chord.js.map +7 -0
  154. package/dist/features/viz/lib/graph/dependency.d.ts +26 -0
  155. package/dist/features/viz/lib/graph/dependency.js +140 -0
  156. package/dist/features/viz/lib/graph/dependency.js.map +7 -0
  157. package/dist/features/viz/lib/graph/force.d.ts +28 -0
  158. package/dist/features/viz/lib/graph/force.js +580 -0
  159. package/dist/features/viz/lib/graph/force.js.map +7 -0
  160. package/dist/features/viz/lib/graph/hierarchy.d.ts +21 -0
  161. package/dist/features/viz/lib/graph/hierarchy.js +112 -0
  162. package/dist/features/viz/lib/graph/hierarchy.js.map +7 -0
  163. package/dist/features/viz/lib/graph/icicle.d.ts +16 -0
  164. package/dist/features/viz/lib/graph/icicle.js +153 -0
  165. package/dist/features/viz/lib/graph/icicle.js.map +7 -0
  166. package/dist/features/viz/lib/graph/matrix.d.ts +30 -0
  167. package/dist/features/viz/lib/graph/matrix.js +243 -0
  168. package/dist/features/viz/lib/graph/matrix.js.map +7 -0
  169. package/dist/features/viz/lib/graph/neighborhood.d.ts +11 -0
  170. package/dist/features/viz/lib/graph/neighborhood.js +281 -0
  171. package/dist/features/viz/lib/graph/neighborhood.js.map +7 -0
  172. package/dist/features/viz/lib/graph/routes.d.ts +35 -0
  173. package/dist/features/viz/lib/graph/routes.js +101 -0
  174. package/dist/features/viz/lib/graph/routes.js.map +7 -0
  175. package/dist/features/viz/lib/graph/sankey.d.ts +44 -0
  176. package/dist/features/viz/lib/graph/sankey.js +341 -0
  177. package/dist/features/viz/lib/graph/sankey.js.map +7 -0
  178. package/dist/features/viz/lib/graph/shared.d.ts +59 -0
  179. package/dist/features/viz/lib/graph/shared.js +301 -0
  180. package/dist/features/viz/lib/graph/shared.js.map +7 -0
  181. package/dist/features/viz/lib/graph/tree.d.ts +11 -0
  182. package/dist/features/viz/lib/graph/tree.js +232 -0
  183. package/dist/features/viz/lib/graph/tree.js.map +7 -0
  184. package/dist/features/viz/lib/graph/treemap.d.ts +20 -0
  185. package/dist/features/viz/lib/graph/treemap.js +227 -0
  186. package/dist/features/viz/lib/graph/treemap.js.map +7 -0
  187. package/dist/features/viz/lib/graph/types.d.ts +1097 -0
  188. package/dist/features/viz/lib/hover-card.js +8 -9
  189. package/dist/features/viz/lib/hover-card.js.map +2 -2
  190. package/dist/features/viz/lib/hover-data.d.ts +1 -1
  191. package/dist/features/viz/lib/hover-data.js +5 -2
  192. package/dist/features/viz/lib/hover-data.js.map +2 -2
  193. package/dist/features/viz/lib/interval-band-series.d.ts +49 -0
  194. package/dist/features/viz/lib/interval-band-series.js +136 -0
  195. package/dist/features/viz/lib/interval-band-series.js.map +7 -0
  196. package/dist/features/viz/lib/interval-diamond-series.d.ts +43 -0
  197. package/dist/features/viz/lib/interval-diamond-series.js +122 -0
  198. package/dist/features/viz/lib/interval-diamond-series.js.map +7 -0
  199. package/dist/features/viz/lib/interval-series.d.ts +79 -0
  200. package/dist/features/viz/lib/interval-series.js +158 -0
  201. package/dist/features/viz/lib/interval-series.js.map +7 -0
  202. package/dist/features/viz/lib/layout-pie.js +9 -13
  203. package/dist/features/viz/lib/layout-pie.js.map +2 -2
  204. package/dist/features/viz/lib/line-series.d.ts +1 -1
  205. package/dist/features/viz/lib/line-series.js +47 -28
  206. package/dist/features/viz/lib/line-series.js.map +2 -2
  207. package/dist/features/viz/lib/linear-scale.js +1 -1
  208. package/dist/features/viz/lib/linear-scale.js.map +2 -2
  209. package/dist/features/viz/lib/monotone-curve.d.ts +11 -0
  210. package/dist/features/viz/lib/monotone-curve.js +63 -0
  211. package/dist/features/viz/lib/monotone-curve.js.map +7 -0
  212. package/dist/features/viz/lib/numeric-range-interpolation.d.ts +15 -0
  213. package/dist/features/viz/lib/numeric-range-interpolation.js +36 -0
  214. package/dist/features/viz/lib/numeric-range-interpolation.js.map +7 -0
  215. package/dist/features/viz/lib/ohlc-bar-series.d.ts +55 -0
  216. package/dist/features/viz/lib/ohlc-bar-series.js +168 -0
  217. package/dist/features/viz/lib/ohlc-bar-series.js.map +7 -0
  218. package/dist/features/viz/lib/paired-series.d.ts +44 -0
  219. package/dist/features/viz/lib/paired-series.js +93 -0
  220. package/dist/features/viz/lib/paired-series.js.map +7 -0
  221. package/dist/features/viz/lib/pie-layout.js +2 -1
  222. package/dist/features/viz/lib/pie-layout.js.map +2 -2
  223. package/dist/features/viz/lib/plot-series.js +11 -6
  224. package/dist/features/viz/lib/plot-series.js.map +2 -2
  225. package/dist/features/viz/lib/plot-types.d.ts +4 -3
  226. package/dist/features/viz/lib/point-series.d.ts +1 -1
  227. package/dist/features/viz/lib/point-series.js +36 -9
  228. package/dist/features/viz/lib/point-series.js.map +2 -2
  229. package/dist/features/viz/lib/point-types.d.ts +5 -2
  230. package/dist/features/viz/lib/reference-band.js +4 -1
  231. package/dist/features/viz/lib/reference-band.js.map +2 -2
  232. package/dist/features/viz/lib/scale-context.d.ts +1 -1
  233. package/dist/features/viz/lib/scale-ticks.js +21 -6
  234. package/dist/features/viz/lib/scale-ticks.js.map +2 -2
  235. package/dist/features/viz/lib/sequential-color-scale.d.ts +11 -0
  236. package/dist/features/viz/lib/sequential-color-scale.js +49 -0
  237. package/dist/features/viz/lib/sequential-color-scale.js.map +7 -0
  238. package/dist/features/viz/lib/series-position.d.ts +12 -0
  239. package/dist/features/viz/lib/series-position.js +44 -0
  240. package/dist/features/viz/lib/series-position.js.map +7 -0
  241. package/dist/features/viz/lib/step-curves.d.ts +19 -0
  242. package/dist/features/viz/lib/step-curves.js +53 -0
  243. package/dist/features/viz/lib/step-curves.js.map +7 -0
  244. package/dist/features/viz/lib/threshold-color-scale.d.ts +43 -0
  245. package/dist/features/viz/lib/threshold-color-scale.js +59 -0
  246. package/dist/features/viz/lib/threshold-color-scale.js.map +7 -0
  247. package/dist/features/viz/lib/trading-time-mapping.d.ts +32 -0
  248. package/dist/features/viz/lib/trading-time-mapping.js +89 -0
  249. package/dist/features/viz/lib/trading-time-mapping.js.map +7 -0
  250. package/dist/features/viz/lib/trading-time-scale.d.ts +83 -0
  251. package/dist/features/viz/lib/trading-time-scale.js +96 -0
  252. package/dist/features/viz/lib/trading-time-scale.js.map +7 -0
  253. package/dist/features/viz/lib/trajectory-series.d.ts +71 -0
  254. package/dist/features/viz/lib/trajectory-series.js +111 -0
  255. package/dist/features/viz/lib/trajectory-series.js.map +7 -0
  256. package/dist/features/viz/lib/types.d.ts +20 -4
  257. package/dist/features/viz/lib/use-continuous-scale.js +6 -1
  258. package/dist/features/viz/lib/use-continuous-scale.js.map +2 -2
  259. package/dist/features/viz/lib/utc-scale.js +11 -10
  260. package/dist/features/viz/lib/utc-scale.js.map +2 -2
  261. package/dist/features/viz/lib/volume-series.d.ts +59 -0
  262. package/dist/features/viz/lib/volume-series.js +117 -0
  263. package/dist/features/viz/lib/volume-series.js.map +7 -0
  264. package/dist/features/viz/lib/weighted-point-series.d.ts +71 -0
  265. package/dist/features/viz/lib/weighted-point-series.js +169 -0
  266. package/dist/features/viz/lib/weighted-point-series.js.map +7 -0
  267. package/dist/filters/backdrop-contrast-gpu.d.ts +5 -0
  268. package/dist/filters/backdrop-contrast-gpu.js +33 -0
  269. package/dist/filters/backdrop-contrast-gpu.js.map +7 -0
  270. package/dist/filters/backdrop-contrast.d.ts +21 -0
  271. package/dist/filters/backdrop-contrast.js +61 -0
  272. package/dist/filters/backdrop-contrast.js.map +7 -0
  273. package/dist/filters/displacement.js +1 -1
  274. package/dist/filters/displacement.js.map +2 -2
  275. package/dist/filters/emboss-gpu.d.ts +4 -0
  276. package/dist/filters/emboss-gpu.js +39 -0
  277. package/dist/filters/emboss-gpu.js.map +7 -0
  278. package/dist/filters/emboss.d.ts +32 -0
  279. package/dist/filters/emboss.js +104 -0
  280. package/dist/filters/emboss.js.map +7 -0
  281. package/dist/filters/filter-executor.d.ts +11 -4
  282. package/dist/filters/filter-executor.js +104 -49
  283. package/dist/filters/filter-executor.js.map +2 -2
  284. package/dist/filters/reflected-light.js +1 -1
  285. package/dist/filters/reflected-light.js.map +2 -2
  286. package/dist/filters/reflection-gpu.d.ts +3 -1
  287. package/dist/filters/reflection-gpu.js +5 -2
  288. package/dist/filters/reflection-gpu.js.map +2 -2
  289. package/dist/filters/render-backdrop-contrast-boundary.d.ts +31 -0
  290. package/dist/filters/render-backdrop-contrast-boundary.js +116 -0
  291. package/dist/filters/render-backdrop-contrast-boundary.js.map +7 -0
  292. package/dist/filters/render-emboss-boundary.d.ts +13 -0
  293. package/dist/filters/render-emboss-boundary.js +131 -0
  294. package/dist/filters/render-emboss-boundary.js.map +7 -0
  295. package/dist/filters.d.ts +9 -5
  296. package/dist/filters.js +4 -0
  297. package/dist/filters.js.map +2 -2
  298. package/dist/index.d.ts +9 -5
  299. package/dist/index.js +18 -2
  300. package/dist/index.js.map +2 -2
  301. package/dist/internal.d.ts +4 -0
  302. package/dist/internal.js +6 -0
  303. package/dist/internal.js.map +2 -2
  304. package/dist/layout-kernel.d.ts +12 -0
  305. package/dist/layout-kernel.js +11 -0
  306. package/dist/layout-kernel.js.map +7 -0
  307. package/dist/layout-kernel.mjs +1 -0
  308. package/dist/lib/backend/types.d.ts +13 -1
  309. package/dist/lib/backend/types.js.map +2 -2
  310. package/dist/lib/components/arc-geometry.js +2 -1
  311. package/dist/lib/components/arc-geometry.js.map +2 -2
  312. package/dist/lib/components/g.js +2 -0
  313. package/dist/lib/components/g.js.map +2 -2
  314. package/dist/lib/components/html-box.js +2 -1
  315. package/dist/lib/components/html-box.js.map +2 -2
  316. package/dist/lib/components/img.js +3 -3
  317. package/dist/lib/components/img.js.map +2 -2
  318. package/dist/lib/components/layer.js +98 -16
  319. package/dist/lib/components/layer.js.map +3 -3
  320. package/dist/lib/components/text.d.ts +16 -0
  321. package/dist/lib/components/text.js +131 -24
  322. package/dist/lib/components/text.js.map +2 -2
  323. package/dist/lib/define-primitive.d.ts +4 -2
  324. package/dist/lib/define-primitive.js +3 -1
  325. package/dist/lib/define-primitive.js.map +2 -2
  326. package/dist/lib/element/metadata.d.ts +9 -0
  327. package/dist/lib/element/metadata.js +19 -0
  328. package/dist/lib/element/metadata.js.map +2 -2
  329. package/dist/lib/element/resolve-primitive-inputs.d.ts +2 -0
  330. package/dist/lib/element/resolve-primitive-inputs.js +17 -4
  331. package/dist/lib/element/resolve-primitive-inputs.js.map +2 -2
  332. package/dist/lib/events/event-facade.d.ts +18 -0
  333. package/dist/lib/events/event-facade.js +28 -2
  334. package/dist/lib/events/event-facade.js.map +2 -2
  335. package/dist/lib/events/hit-test.js +2 -1
  336. package/dist/lib/events/hit-test.js.map +2 -2
  337. package/dist/lib/events/propagation.d.ts +2 -1
  338. package/dist/lib/events/propagation.js +22 -16
  339. package/dist/lib/events/propagation.js.map +2 -2
  340. package/dist/lib/events/registrations.d.ts +10 -0
  341. package/dist/lib/events/registrations.js +160 -5
  342. package/dist/lib/events/registrations.js.map +2 -2
  343. package/dist/lib/execute-render.js +25 -1
  344. package/dist/lib/execute-render.js.map +2 -2
  345. package/dist/lib/filter/filter-region.js +3 -10
  346. package/dist/lib/filter/filter-region.js.map +2 -2
  347. package/dist/lib/focus/focus-manager.d.ts +8 -1
  348. package/dist/lib/focus/focus-manager.js +87 -43
  349. package/dist/lib/focus/focus-manager.js.map +2 -2
  350. package/dist/lib/focus/geometry.d.ts +2 -0
  351. package/dist/lib/focus/geometry.js +6 -0
  352. package/dist/lib/focus/geometry.js.map +2 -2
  353. package/dist/lib/geometry/path-bend-guide.js +1 -1
  354. package/dist/lib/geometry/path-bend-guide.js.map +2 -2
  355. package/dist/lib/geometry/path-geometry.js +12 -11
  356. package/dist/lib/geometry/path-geometry.js.map +2 -2
  357. package/dist/lib/geometry/path-transforms.js +17 -21
  358. package/dist/lib/geometry/path-transforms.js.map +2 -2
  359. package/dist/lib/geometry/path-warp-bezier.js +3 -1
  360. package/dist/lib/geometry/path-warp-bezier.js.map +2 -2
  361. package/dist/lib/geometry/path-warp.js +1 -1
  362. package/dist/lib/geometry/path-warp.js.map +2 -2
  363. package/dist/lib/global-state.js +2 -0
  364. package/dist/lib/global-state.js.map +2 -2
  365. package/dist/lib/html/html-events.d.ts +32 -0
  366. package/dist/lib/html/html-events.js +179 -0
  367. package/dist/lib/html/html-events.js.map +7 -0
  368. package/dist/lib/html/html-service.d.ts +8 -2
  369. package/dist/lib/html/html-service.js +198 -65
  370. package/dist/lib/html/html-service.js.map +2 -2
  371. package/dist/lib/html/overlay-config.js +7 -6
  372. package/dist/lib/html/overlay-config.js.map +2 -2
  373. package/dist/lib/html/types.d.ts +29 -2
  374. package/dist/lib/layout/absolute.d.ts +11 -5
  375. package/dist/lib/layout/absolute.js +329 -55
  376. package/dist/lib/layout/absolute.js.map +3 -3
  377. package/dist/lib/layout/allocation-checkpoint-owner.d.ts +11 -0
  378. package/dist/lib/layout/allocation-checkpoint-owner.js +86 -0
  379. package/dist/lib/layout/allocation-checkpoint-owner.js.map +7 -0
  380. package/dist/lib/layout/allocation-checkpoint.d.ts +53 -0
  381. package/dist/lib/layout/allocation-checkpoint.js +463 -0
  382. package/dist/lib/layout/allocation-checkpoint.js.map +7 -0
  383. package/dist/lib/layout/allocation-dependencies.d.ts +30 -0
  384. package/dist/lib/layout/allocation-dependencies.js +90 -0
  385. package/dist/lib/layout/allocation-dependencies.js.map +7 -0
  386. package/dist/lib/layout/allocation-revision.d.ts +13 -0
  387. package/dist/lib/layout/allocation-revision.js +67 -0
  388. package/dist/lib/layout/allocation-revision.js.map +7 -0
  389. package/dist/lib/layout/box-insets.d.ts +17 -0
  390. package/dist/lib/layout/box-insets.js +138 -0
  391. package/dist/lib/layout/box-insets.js.map +7 -0
  392. package/dist/lib/layout/box-sizing.d.ts +16 -0
  393. package/dist/lib/layout/box-sizing.js +77 -0
  394. package/dist/lib/layout/box-sizing.js.map +7 -0
  395. package/dist/lib/layout/box.js +42 -12
  396. package/dist/lib/layout/box.js.map +2 -2
  397. package/dist/lib/layout/canvas-measurement.d.ts +13 -0
  398. package/dist/lib/layout/canvas-measurement.js +57 -0
  399. package/dist/lib/layout/canvas-measurement.js.map +7 -0
  400. package/dist/lib/layout/context.d.ts +35 -6
  401. package/dist/lib/layout/context.js +72 -3
  402. package/dist/lib/layout/context.js.map +2 -2
  403. package/dist/lib/layout/define-layout-component.d.ts +23 -0
  404. package/dist/lib/layout/define-layout-component.js +84 -0
  405. package/dist/lib/layout/define-layout-component.js.map +7 -0
  406. package/dist/lib/layout/flex-allocation-cache.d.ts +42 -0
  407. package/dist/lib/layout/flex-baseline-mode.d.ts +2 -0
  408. package/dist/lib/layout/flex-baseline-mode.js +7 -0
  409. package/dist/lib/layout/flex-baseline-mode.js.map +7 -0
  410. package/dist/lib/layout/flex.d.ts +50 -15
  411. package/dist/lib/layout/flex.js +2124 -195
  412. package/dist/lib/layout/flex.js.map +3 -3
  413. package/dist/lib/layout/flow.js +225 -49
  414. package/dist/lib/layout/flow.js.map +2 -2
  415. package/dist/lib/layout/geometry-publication.d.ts +53 -0
  416. package/dist/lib/layout/geometry-publication.js +244 -0
  417. package/dist/lib/layout/geometry-publication.js.map +7 -0
  418. package/dist/lib/layout/grid-kernel.d.ts +63 -0
  419. package/dist/lib/layout/grid-kernel.js +168 -0
  420. package/dist/lib/layout/grid-kernel.js.map +7 -0
  421. package/dist/lib/layout/grid.d.ts +63 -4
  422. package/dist/lib/layout/grid.js +767 -171
  423. package/dist/lib/layout/grid.js.map +3 -3
  424. package/dist/lib/layout/measure.d.ts +55 -3
  425. package/dist/lib/layout/measure.js +448 -15
  426. package/dist/lib/layout/measure.js.map +2 -2
  427. package/dist/lib/layout/overlay.js +81 -23
  428. package/dist/lib/layout/overlay.js.map +2 -2
  429. package/dist/lib/layout/participation.d.ts +27 -0
  430. package/dist/lib/layout/participation.js +188 -0
  431. package/dist/lib/layout/participation.js.map +7 -0
  432. package/dist/lib/layout/place-child.js +1 -1
  433. package/dist/lib/layout/place-child.js.map +2 -2
  434. package/dist/lib/layout/positioning-diagnostics.d.ts +1 -1
  435. package/dist/lib/layout/positioning-diagnostics.js +13 -2
  436. package/dist/lib/layout/positioning-diagnostics.js.map +2 -2
  437. package/dist/lib/layout/prepared-root.d.ts +121 -0
  438. package/dist/lib/layout/prepared-root.js +360 -0
  439. package/dist/lib/layout/prepared-root.js.map +7 -0
  440. package/dist/lib/layout/standalone-kernel.d.ts +60 -0
  441. package/dist/lib/layout/standalone-kernel.js +722 -0
  442. package/dist/lib/layout/standalone-kernel.js.map +7 -0
  443. package/dist/lib/layout/topology.d.ts +21 -0
  444. package/dist/lib/layout/topology.js +113 -0
  445. package/dist/lib/layout/topology.js.map +7 -0
  446. package/dist/lib/layout/types.d.ts +5 -0
  447. package/dist/lib/layout/wasm/artifact.d.ts +1 -0
  448. package/dist/lib/layout/wasm/artifact.js +5 -0
  449. package/dist/lib/layout/wasm/artifact.js.map +7 -0
  450. package/dist/lib/layout/wasm/bytes.d.ts +1 -0
  451. package/dist/lib/layout/wasm/bytes.js +5 -0
  452. package/dist/lib/layout/wasm/bytes.js.map +7 -0
  453. package/dist/lib/layout/wasm/embedded.d.ts +2 -0
  454. package/dist/lib/layout/wasm/embedded.js +12 -0
  455. package/dist/lib/layout/wasm/embedded.js.map +7 -0
  456. package/dist/lib/layout/wasm/layout.wasm +0 -0
  457. package/dist/lib/layout/wasm/module.d.ts +8 -0
  458. package/dist/lib/layout/wasm/module.js +70 -0
  459. package/dist/lib/layout/wasm/module.js.map +7 -0
  460. package/dist/lib/layout/wasm/region.d.ts +267 -0
  461. package/dist/lib/layout/wasm/region.js +1018 -0
  462. package/dist/lib/layout/wasm/region.js.map +7 -0
  463. package/dist/lib/manipulation/controller.js +4 -7
  464. package/dist/lib/manipulation/controller.js.map +2 -2
  465. package/dist/lib/manipulation/frame.js +1 -1
  466. package/dist/lib/manipulation/frame.js.map +2 -2
  467. package/dist/lib/manipulation/handles.js +32 -33
  468. package/dist/lib/manipulation/handles.js.map +2 -2
  469. package/dist/lib/manipulation/solve.js +12 -10
  470. package/dist/lib/manipulation/solve.js.map +2 -2
  471. package/dist/lib/mount-pibbl.js +1 -0
  472. package/dist/lib/mount-pibbl.js.map +2 -2
  473. package/dist/lib/mount-prepared-pibbl.d.ts +5 -0
  474. package/dist/lib/mount-prepared-pibbl.js +29 -0
  475. package/dist/lib/mount-prepared-pibbl.js.map +7 -0
  476. package/dist/lib/mount-request.d.ts +8 -0
  477. package/dist/lib/mount-request.js +41 -0
  478. package/dist/lib/mount-request.js.map +7 -0
  479. package/dist/lib/pibbl.d.ts +21 -13
  480. package/dist/lib/pibbl.js +18 -16
  481. package/dist/lib/pibbl.js.map +2 -2
  482. package/dist/lib/recording/recording.d.ts +43 -0
  483. package/dist/lib/recording/recording.js +555 -0
  484. package/dist/lib/recording/recording.js.map +7 -0
  485. package/dist/lib/recording/types.d.ts +118 -0
  486. package/dist/lib/recording/wasm-bytes.d.ts +1 -0
  487. package/dist/lib/recording/wasm-bytes.js +5 -0
  488. package/dist/lib/recording/wasm-bytes.js.map +7 -0
  489. package/dist/lib/recording/worker-source.d.ts +1 -0
  490. package/dist/lib/recording/worker-source.js +5 -0
  491. package/dist/lib/recording/worker-source.js.map +7 -0
  492. package/dist/lib/render-layer/controller.d.ts +9 -3
  493. package/dist/lib/render-layer/controller.js +259 -110
  494. package/dist/lib/render-layer/controller.js.map +2 -2
  495. package/dist/lib/render-transaction.d.ts +12 -2
  496. package/dist/lib/render-transaction.js +69 -1
  497. package/dist/lib/render-transaction.js.map +2 -2
  498. package/dist/lib/render.js +32 -8
  499. package/dist/lib/render.js.map +2 -2
  500. package/dist/lib/scheduler/realm-scheduler.d.ts +2 -0
  501. package/dist/lib/scheduler/realm-scheduler.js +55 -26
  502. package/dist/lib/scheduler/realm-scheduler.js.map +2 -2
  503. package/dist/lib/scheduler/renderer-participant.js +1 -0
  504. package/dist/lib/scheduler/renderer-participant.js.map +2 -2
  505. package/dist/lib/series-inspection-frame.d.ts +18 -0
  506. package/dist/lib/series-inspection-frame.js +70 -0
  507. package/dist/lib/series-inspection-frame.js.map +7 -0
  508. package/dist/lib/signals/edge.d.ts +7 -4
  509. package/dist/lib/signals/edge.js +25 -3
  510. package/dist/lib/signals/edge.js.map +2 -2
  511. package/dist/lib/signals/graph.d.ts +16 -2
  512. package/dist/lib/signals/graph.js +54 -12
  513. package/dist/lib/signals/graph.js.map +2 -2
  514. package/dist/lib/signals/input-provision.d.ts +15 -0
  515. package/dist/lib/signals/input-provision.js +53 -3
  516. package/dist/lib/signals/input-provision.js.map +2 -2
  517. package/dist/lib/signals/render-consumer.d.ts +3 -0
  518. package/dist/lib/signals/render-consumer.js +22 -14
  519. package/dist/lib/signals/render-consumer.js.map +2 -2
  520. package/dist/lib/style/positioning.d.ts +50 -2
  521. package/dist/lib/style/positioning.js +28 -4
  522. package/dist/lib/style/positioning.js.map +2 -2
  523. package/dist/lib/style/resolve-built-in.d.ts +4 -3
  524. package/dist/lib/style/resolve-built-in.js +17 -3
  525. package/dist/lib/style/resolve-built-in.js.map +2 -2
  526. package/dist/lib/style/resolve-dispatch.d.ts +3 -0
  527. package/dist/lib/style/resolve-dispatch.js +77 -4
  528. package/dist/lib/style/resolve-dispatch.js.map +2 -2
  529. package/dist/lib/style/resolve-length.d.ts +2 -0
  530. package/dist/lib/style/resolve-length.js +13 -9
  531. package/dist/lib/style/resolve-length.js.map +2 -2
  532. package/dist/lib/style/sizing-length.d.ts +51 -0
  533. package/dist/lib/style/sizing-length.js +77 -0
  534. package/dist/lib/style/sizing-length.js.map +7 -0
  535. package/dist/lib/style/types.d.ts +63 -25
  536. package/dist/lib/surface/root-surface.js +10 -6
  537. package/dist/lib/surface/root-surface.js.map +2 -2
  538. package/dist/lib/textures/texture.js +10 -8
  539. package/dist/lib/textures/texture.js.map +2 -2
  540. package/dist/lib/transitions/capture.js +4 -1
  541. package/dist/lib/transitions/capture.js.map +2 -2
  542. package/dist/lib/transitions/embers-physics.js +17 -10
  543. package/dist/lib/transitions/embers-physics.js.map +2 -2
  544. package/dist/lib/types.d.ts +110 -1
  545. package/dist/sync.d.ts +16 -0
  546. package/dist/sync.js +13 -0
  547. package/dist/sync.js.map +7 -0
  548. package/dist/sync.mjs +1 -0
  549. package/package.json +26 -3
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/lib/execute-render.ts"],
4
- "sourcesContent": ["import { RootRenderTransaction } from './render-transaction.js';\nimport {\n clearTempState,\n GLOBAL_STATE,\n NO_PENDING_ROOT,\n} from './global-state.js';\nimport { render } from './render.js';\nimport { initializeCurrentWorldTransformAnchor } from './render-target.js';\nimport {\n Canvas,\n type PibblNode,\n} from './types.js';\nimport type {\n PibblBackendFrame,\n} from './backend/types.js';\nimport type { PibblFrameSnapshot } from './scheduler/types.js';\nimport { withSignalWriteForbidden } from './signals/graph.js';\n\n/**\n * Gets the root element for a canvas and renders it. This is the\n * entry point for rendering the entire tree.\n * @param canvas The canvas to render on\n */\nexport function executeRender(\n canvas: Canvas,\n renderTimestamp: number,\n updatedRoot?: PibblNode | typeof NO_PENDING_ROOT,\n _updateParents = false,\n frameSnapshot?: PibblFrameSnapshot,\n): void {\n if (!canvas) {\n throw new Error('No canvas element provided');\n }\n\n const pibblInstance = GLOBAL_STATE.pibblInstances.get(canvas);\n\n if (!pibblInstance) {\n throw new Error('Pibbl is not mounted on this element');\n }\n\n if (pibblInstance.mainTeardowns.closed) return;\n\n const inheritedTransaction = pibblInstance.eventRoot.renderTransaction;\n const renderTransaction = inheritedTransaction ?? new RootRenderTransaction();\n const ownsRenderTransaction = !inheritedTransaction;\n if (ownsRenderTransaction) {\n pibblInstance.eventRoot.renderTransaction = renderTransaction;\n }\n let transactionFinished = false;\n const finishTransaction = (success: boolean) => {\n if (!ownsRenderTransaction || transactionFinished) return;\n transactionFinished = true;\n (renderTransaction as RootRenderTransaction).finish(success);\n };\n\n const prevCurrentPibblInstance = GLOBAL_STATE.currentPibblInstance;\n const prevCanvas = GLOBAL_STATE.canvas;\n const prevRenderContext = GLOBAL_STATE.renderContext;\n const prevRenderTarget = GLOBAL_STATE.renderTarget;\n const prevWorldBaseTransform = GLOBAL_STATE.worldBaseTransform;\n const prevWorldExactTransform = GLOBAL_STATE.worldExactTransform;\n const prevWorldPaintAnchorTransform = GLOBAL_STATE.worldPaintAnchorTransform;\n const prevPresentationTransformLineage = GLOBAL_STATE.presentationTransformLineage;\n const prevPresentationTransformLineageTrackingDepth =\n GLOBAL_STATE.presentationTransformLineageTrackingDepth;\n const prevRenderTransaction = GLOBAL_STATE.renderTransaction;\n const prevFrameSnapshot = GLOBAL_STATE.frameSnapshot;\n const prevPrimitiveReceiverToken = GLOBAL_STATE.primitiveReceiverToken;\n const prevSeenIds = GLOBAL_STATE.seenIds;\n const prevSeenKeys = GLOBAL_STATE.seenKeys;\n const prevComponentRefs = GLOBAL_STATE.componentRefs;\n const prevComponentHookIndex = GLOBAL_STATE.componentHookIndex;\n const prevComponentIsMounting = GLOBAL_STATE.componentIsMounting;\n const prevClippingStack = GLOBAL_STATE.clippingStack;\n const prevLayoutStack = GLOBAL_STATE.layoutStack;\n const prevBackendDriver = GLOBAL_STATE.backendDriver;\n const prevBackendFrame = GLOBAL_STATE.backendFrame;\n const prevBackendEnvironment = GLOBAL_STATE.backendEnvironment;\n let frame: PibblBackendFrame<unknown> | undefined;\n let frameSuccess = false;\n let renderSeenIds: Set<string> | undefined;\n let renderSeenKeys: Set<string> | undefined;\n try {\n const activeFrameSnapshot = frameSnapshot ?? (\n prevFrameSnapshot?.logicalTime === renderTimestamp ?\n prevFrameSnapshot :\n Object.freeze({\n frameId: prevFrameSnapshot?.frameId ?? 0,\n hostTime: prevFrameSnapshot?.hostTime ?? renderTimestamp,\n logicalTime: renderTimestamp,\n })\n );\n GLOBAL_STATE.frameSnapshot = activeFrameSnapshot;\n GLOBAL_STATE.currentPibblInstance = pibblInstance;\n for (const service of pibblInstance.optionalServices.values()) service.beginRender?.();\n GLOBAL_STATE.renderTransaction = renderTransaction;\n GLOBAL_STATE.currentPibblInstance.renderTimestamp = activeFrameSnapshot.logicalTime;\n GLOBAL_STATE.canvas = canvas;\n const rootNode = arguments.length >= 3 && updatedRoot !== NO_PENDING_ROOT ?\n updatedRoot :\n GLOBAL_STATE.currentPibblInstance.root;\n GLOBAL_STATE.currentPibblInstance.root = rootNode;\n const driver = pibblInstance.backendDriver;\n GLOBAL_STATE.backendDriver = driver;\n frame = driver.beginFrame({\n canvas,\n logicalWidth: pibblInstance.rootLayoutBox.width,\n logicalHeight: pibblInstance.rootLayoutBox.height,\n backingWidth: canvas.width,\n backingHeight: canvas.height,\n renderTimestamp: activeFrameSnapshot.logicalTime,\n });\n if (!frame) {\n pibblInstance.eventRoot.html?.suspend(pibblInstance);\n finishTransaction(true);\n return;\n }\n pibblInstance.eventRoot.html?.beginRender(pibblInstance);\n GLOBAL_STATE.backendFrame = frame;\n GLOBAL_STATE.backendEnvironment = frame.environment;\n GLOBAL_STATE.renderContext = frame.context2D;\n GLOBAL_STATE.renderTarget = frame.renderTarget;\n GLOBAL_STATE.worldBaseTransform = frame.worldBaseTransform;\n GLOBAL_STATE.worldExactTransform = undefined;\n GLOBAL_STATE.worldPaintAnchorTransform = undefined;\n GLOBAL_STATE.presentationTransformLineage = undefined;\n GLOBAL_STATE.presentationTransformLineageTrackingDepth = 0;\n if (\n frame.context2D !== undefined &&\n frame.renderTarget !== undefined &&\n frame.worldBaseTransform !== undefined\n ) {\n initializeCurrentWorldTransformAnchor(frame.worldBaseTransform);\n }\n GLOBAL_STATE.clippingStack = [];\n const surface = pibblInstance.surface.snapshot;\n const logicalWidth = surface?.logicalWidth ?? pibblInstance.rootLayoutBox.width;\n const logicalHeight = surface?.logicalHeight ?? pibblInstance.rootLayoutBox.height;\n const previousRootBox = pibblInstance.rootLayoutBox;\n if (\n previousRootBox.width !== logicalWidth ||\n previousRootBox.height !== logicalHeight\n ) {\n pibblInstance.rootLayoutBox = Object.freeze({\n x: 0,\n y: 0,\n width: logicalWidth,\n height: logicalHeight,\n });\n }\n GLOBAL_STATE.layoutStack = [{\n allocation: pibblInstance.rootLayoutBox,\n percentageBasis: pibblInstance.rootLayoutBox,\n }];\n\n const renderGeneration = ++pibblInstance.renderGeneration;\n renderSeenIds = pibblInstance.renderSeenIds;\n renderSeenKeys = pibblInstance.renderSeenKeys;\n renderSeenIds.clear();\n renderSeenKeys.clear();\n GLOBAL_STATE.seenIds = renderSeenIds;\n GLOBAL_STATE.seenKeys = renderSeenKeys;\n const id = 'root';\n renderSeenIds.add(id);\n withSignalWriteForbidden(\n 'Pibbl render',\n () => render(rootNode, id, undefined),\n );\n\n for (const [id, componentRefs] of pibblInstance.refs) {\n if (componentRefs.renderGeneration === renderGeneration) continue;\n componentRefs.teardowns.execute();\n pibblInstance.refs.delete(id);\n }\n frameSuccess = true;\n for (const service of pibblInstance.optionalServices.values()) service.endRender?.(true);\n driver.finishFrame(frame, true);\n finishTransaction(true);\n } catch (error) {\n for (const service of pibblInstance.optionalServices.values()) service.endRender?.(false);\n finishTransaction(false);\n for (const refs of pibblInstance.refs.values()) {\n refs.teardowns.execute();\n }\n pibblInstance.refs.clear();\n throw error;\n } finally {\n try {\n if (frame && !frameSuccess) {\n pibblInstance.backendDriver.finishFrame(frame, false);\n }\n } finally {\n try {\n clearTempState();\n GLOBAL_STATE.clippingStack = prevClippingStack;\n GLOBAL_STATE.layoutStack = prevLayoutStack;\n if (ownsRenderTransaction) {\n try {\n finishTransaction(false);\n } finally {\n if (pibblInstance.eventRoot.renderTransaction === renderTransaction) {\n pibblInstance.eventRoot.renderTransaction = undefined;\n }\n }\n }\n } finally {\n renderSeenIds?.clear();\n renderSeenKeys?.clear();\n GLOBAL_STATE.currentPibblInstance = prevCurrentPibblInstance;\n GLOBAL_STATE.canvas = prevCanvas;\n GLOBAL_STATE.renderContext = prevRenderContext;\n GLOBAL_STATE.renderTarget = prevRenderTarget;\n GLOBAL_STATE.worldBaseTransform = prevWorldBaseTransform;\n GLOBAL_STATE.worldExactTransform = prevWorldExactTransform;\n GLOBAL_STATE.worldPaintAnchorTransform = prevWorldPaintAnchorTransform;\n GLOBAL_STATE.presentationTransformLineage = prevPresentationTransformLineage;\n GLOBAL_STATE.presentationTransformLineageTrackingDepth =\n prevPresentationTransformLineageTrackingDepth;\n GLOBAL_STATE.renderTransaction = prevRenderTransaction;\n GLOBAL_STATE.frameSnapshot = prevFrameSnapshot;\n GLOBAL_STATE.primitiveReceiverToken = prevPrimitiveReceiverToken;\n GLOBAL_STATE.seenIds = prevSeenIds;\n GLOBAL_STATE.seenKeys = prevSeenKeys;\n GLOBAL_STATE.componentRefs = prevComponentRefs;\n GLOBAL_STATE.componentHookIndex = prevComponentHookIndex;\n GLOBAL_STATE.componentIsMounting = prevComponentIsMounting;\n GLOBAL_STATE.backendDriver = prevBackendDriver;\n GLOBAL_STATE.backendFrame = prevBackendFrame;\n GLOBAL_STATE.backendEnvironment = prevBackendEnvironment;\n }\n }\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { beginLayoutGeometry } from './layout/geometry-publication.js';\nimport { RootRenderTransaction } from './render-transaction.js';\nimport {\n clearTempState,\n GLOBAL_STATE,\n NO_PENDING_ROOT,\n} from './global-state.js';\nimport { render } from './render.js';\nimport { initializeCurrentWorldTransformAnchor } from './render-target.js';\nimport {\n Canvas,\n type PibblNode,\n} from './types.js';\nimport type {\n PibblBackendFrame,\n} from './backend/types.js';\nimport type { PibblFrameSnapshot } from './scheduler/types.js';\nimport { withSignalWriteForbidden } from './signals/graph.js';\n\n/**\n * Gets the root element for a canvas and renders it. This is the\n * entry point for rendering the entire tree.\n * @param canvas The canvas to render on\n */\nexport function executeRender(\n canvas: Canvas,\n renderTimestamp: number,\n updatedRoot?: PibblNode | typeof NO_PENDING_ROOT,\n _updateParents = false,\n frameSnapshot?: PibblFrameSnapshot,\n): void {\n if (!canvas) {\n throw new Error('No canvas element provided');\n }\n\n const pibblInstance = GLOBAL_STATE.pibblInstances.get(canvas);\n\n if (!pibblInstance) {\n throw new Error('Pibbl is not mounted on this element');\n }\n\n if (pibblInstance.mainTeardowns.closed) return;\n\n const inheritedTransaction = pibblInstance.eventRoot.renderTransaction;\n const renderTransaction = inheritedTransaction ?? new RootRenderTransaction();\n const ownsRenderTransaction = !inheritedTransaction;\n if (ownsRenderTransaction) {\n pibblInstance.eventRoot.renderTransaction = renderTransaction;\n }\n let transactionFinished = false;\n const finishTransaction = (success: boolean) => {\n if (!ownsRenderTransaction || transactionFinished) return;\n transactionFinished = true;\n (renderTransaction as RootRenderTransaction).finish(success);\n };\n\n const prevCurrentPibblInstance = GLOBAL_STATE.currentPibblInstance;\n const prevCanvas = GLOBAL_STATE.canvas;\n const prevRenderContext = GLOBAL_STATE.renderContext;\n const prevRenderTarget = GLOBAL_STATE.renderTarget;\n const prevWorldBaseTransform = GLOBAL_STATE.worldBaseTransform;\n const prevWorldExactTransform = GLOBAL_STATE.worldExactTransform;\n const prevWorldPaintAnchorTransform = GLOBAL_STATE.worldPaintAnchorTransform;\n const prevPresentationTransformLineage = GLOBAL_STATE.presentationTransformLineage;\n const prevPresentationTransformLineageTrackingDepth =\n GLOBAL_STATE.presentationTransformLineageTrackingDepth;\n const prevRenderTransaction = GLOBAL_STATE.renderTransaction;\n const prevFrameSnapshot = GLOBAL_STATE.frameSnapshot;\n const prevPrimitiveReceiverToken = GLOBAL_STATE.primitiveReceiverToken;\n const prevSeenIds = GLOBAL_STATE.seenIds;\n const prevSeenKeys = GLOBAL_STATE.seenKeys;\n const prevComponentRefs = GLOBAL_STATE.componentRefs;\n const prevComponentHookIndex = GLOBAL_STATE.componentHookIndex;\n const prevComponentIsMounting = GLOBAL_STATE.componentIsMounting;\n const prevClippingStack = GLOBAL_STATE.clippingStack;\n const prevLayoutStack = GLOBAL_STATE.layoutStack;\n const prevBackendDriver = GLOBAL_STATE.backendDriver;\n const prevBackendFrame = GLOBAL_STATE.backendFrame;\n const prevBackendEnvironment = GLOBAL_STATE.backendEnvironment;\n let frame: PibblBackendFrame<unknown> | undefined;\n let frameSuccess = false;\n let renderSeenIds: Set<string> | undefined;\n let renderSeenKeys: Set<string> | undefined;\n try {\n const activeFrameSnapshot = frameSnapshot ?? (\n prevFrameSnapshot?.logicalTime === renderTimestamp ?\n prevFrameSnapshot :\n Object.freeze({\n frameId: prevFrameSnapshot?.frameId ?? 0,\n hostTime: prevFrameSnapshot?.hostTime ?? renderTimestamp,\n logicalTime: renderTimestamp,\n })\n );\n GLOBAL_STATE.frameSnapshot = activeFrameSnapshot;\n GLOBAL_STATE.currentPibblInstance = pibblInstance;\n for (const service of pibblInstance.optionalServices.values()) service.beginRender?.();\n GLOBAL_STATE.renderTransaction = renderTransaction;\n beginLayoutGeometry(pibblInstance, renderTransaction);\n // Scheduled publication happens after executeRender returns. Its failure\n // must retire the same mount-owned state as a traversal failure, so a later\n // render cannot re-enter a policy or resource already destroyed by abort.\n const releaseFailedGeneration = (success: boolean) => {\n if (success || renderTransaction.failed === false) return;\n for (const refs of pibblInstance.refs.values()) refs.teardowns.execute();\n pibblInstance.refs.clear();\n };\n if (renderTransaction.onAfterFinish) renderTransaction.onAfterFinish(releaseFailedGeneration);\n else renderTransaction.onFinish(releaseFailedGeneration);\n GLOBAL_STATE.currentPibblInstance.renderTimestamp = activeFrameSnapshot.logicalTime;\n GLOBAL_STATE.canvas = canvas;\n const rootNode = arguments.length >= 3 && updatedRoot !== NO_PENDING_ROOT ?\n updatedRoot :\n GLOBAL_STATE.currentPibblInstance.root;\n GLOBAL_STATE.currentPibblInstance.root = rootNode;\n const driver = pibblInstance.backendDriver;\n GLOBAL_STATE.backendDriver = driver;\n frame = driver.beginFrame({\n canvas,\n logicalWidth: pibblInstance.rootLayoutBox.width,\n logicalHeight: pibblInstance.rootLayoutBox.height,\n backingWidth: canvas.width,\n backingHeight: canvas.height,\n renderTimestamp: activeFrameSnapshot.logicalTime,\n });\n if (!frame) {\n pibblInstance.eventRoot.html?.suspend(pibblInstance);\n finishTransaction(true);\n return;\n }\n pibblInstance.eventRoot.html?.beginRender(pibblInstance);\n GLOBAL_STATE.backendFrame = frame;\n GLOBAL_STATE.backendEnvironment = frame.environment;\n GLOBAL_STATE.renderContext = frame.context2D;\n GLOBAL_STATE.renderTarget = frame.renderTarget;\n GLOBAL_STATE.worldBaseTransform = frame.worldBaseTransform;\n GLOBAL_STATE.worldExactTransform = undefined;\n GLOBAL_STATE.worldPaintAnchorTransform = undefined;\n GLOBAL_STATE.presentationTransformLineage = undefined;\n GLOBAL_STATE.presentationTransformLineageTrackingDepth = 0;\n if (\n frame.context2D !== undefined &&\n frame.renderTarget !== undefined &&\n frame.worldBaseTransform !== undefined\n ) {\n initializeCurrentWorldTransformAnchor(frame.worldBaseTransform);\n }\n GLOBAL_STATE.clippingStack = [];\n const surface = pibblInstance.surface.snapshot;\n const logicalWidth = surface?.logicalWidth ?? pibblInstance.rootLayoutBox.width;\n const logicalHeight = surface?.logicalHeight ?? pibblInstance.rootLayoutBox.height;\n const previousRootBox = pibblInstance.rootLayoutBox;\n if (\n previousRootBox.width !== logicalWidth ||\n previousRootBox.height !== logicalHeight\n ) {\n pibblInstance.rootLayoutBox = Object.freeze({\n x: 0,\n y: 0,\n width: logicalWidth,\n height: logicalHeight,\n });\n }\n GLOBAL_STATE.layoutStack = [{\n allocation: pibblInstance.rootLayoutBox,\n percentageBasis: pibblInstance.rootLayoutBox,\n layoutDirection: pibblInstance.rootLayoutDirection,\n }];\n\n const renderGeneration = ++pibblInstance.renderGeneration;\n if (!pibblInstance.parent) {\n renderTransaction.onFinish((success) => {\n if (success) pibblInstance.committedRenderGeneration = renderGeneration;\n });\n if (pibblInstance.rootFrameObservers?.size) {\n renderTransaction.onAfterFinish?.((success) => {\n const observers = pibblInstance.rootFrameObservers;\n if (!observers) return;\n for (const observer of observers)\n observer(success, renderGeneration);\n });\n }\n }\n renderSeenIds = pibblInstance.renderSeenIds;\n renderSeenKeys = pibblInstance.renderSeenKeys;\n renderSeenIds.clear();\n renderSeenKeys.clear();\n GLOBAL_STATE.seenIds = renderSeenIds;\n GLOBAL_STATE.seenKeys = renderSeenKeys;\n const id = 'root';\n renderSeenIds.add(id);\n withSignalWriteForbidden(\n 'Pibbl render',\n () => render(rootNode, id, undefined),\n );\n\n for (const [id, componentRefs] of pibblInstance.refs) {\n if (componentRefs.renderGeneration === renderGeneration) continue;\n componentRefs.teardowns.execute();\n pibblInstance.refs.delete(id);\n }\n frameSuccess = true;\n for (const service of pibblInstance.optionalServices.values()) service.endRender?.(true);\n driver.finishFrame(frame, true);\n finishTransaction(true);\n } catch (error) {\n renderTransaction.fail?.();\n for (const service of pibblInstance.optionalServices.values()) service.endRender?.(false);\n finishTransaction(false);\n for (const refs of pibblInstance.refs.values()) {\n refs.teardowns.execute();\n }\n pibblInstance.refs.clear();\n throw error;\n } finally {\n try {\n if (frame && !frameSuccess) {\n pibblInstance.backendDriver.finishFrame(frame, false);\n }\n } finally {\n try {\n clearTempState();\n GLOBAL_STATE.clippingStack = prevClippingStack;\n GLOBAL_STATE.layoutStack = prevLayoutStack;\n if (ownsRenderTransaction) {\n try {\n finishTransaction(false);\n } finally {\n if (pibblInstance.eventRoot.renderTransaction === renderTransaction) {\n pibblInstance.eventRoot.renderTransaction = undefined;\n }\n }\n }\n } finally {\n renderSeenIds?.clear();\n renderSeenKeys?.clear();\n GLOBAL_STATE.currentPibblInstance = prevCurrentPibblInstance;\n GLOBAL_STATE.canvas = prevCanvas;\n GLOBAL_STATE.renderContext = prevRenderContext;\n GLOBAL_STATE.renderTarget = prevRenderTarget;\n GLOBAL_STATE.worldBaseTransform = prevWorldBaseTransform;\n GLOBAL_STATE.worldExactTransform = prevWorldExactTransform;\n GLOBAL_STATE.worldPaintAnchorTransform = prevWorldPaintAnchorTransform;\n GLOBAL_STATE.presentationTransformLineage = prevPresentationTransformLineage;\n GLOBAL_STATE.presentationTransformLineageTrackingDepth =\n prevPresentationTransformLineageTrackingDepth;\n GLOBAL_STATE.renderTransaction = prevRenderTransaction;\n GLOBAL_STATE.frameSnapshot = prevFrameSnapshot;\n GLOBAL_STATE.primitiveReceiverToken = prevPrimitiveReceiverToken;\n GLOBAL_STATE.seenIds = prevSeenIds;\n GLOBAL_STATE.seenKeys = prevSeenKeys;\n GLOBAL_STATE.componentRefs = prevComponentRefs;\n GLOBAL_STATE.componentHookIndex = prevComponentHookIndex;\n GLOBAL_STATE.componentIsMounting = prevComponentIsMounting;\n GLOBAL_STATE.backendDriver = prevBackendDriver;\n GLOBAL_STATE.backendFrame = prevBackendFrame;\n GLOBAL_STATE.backendEnvironment = prevBackendEnvironment;\n }\n }\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["id"]
7
7
  }
@@ -81,7 +81,7 @@ function resolveFilterWindows(parentTarget, parentPaintTransform, filters) {
81
81
  function projectBounds(bounds, inverseProject) {
82
82
  const right = bounds.x + bounds.width;
83
83
  const bottom = bounds.y + bounds.height;
84
- if (![bounds.x, bounds.y, right, bottom].every(Number.isFinite)) {
84
+ if (!(Number.isFinite(bounds.x) && Number.isFinite(bounds.y) && Number.isFinite(right) && Number.isFinite(bottom))) {
85
85
  return void 0;
86
86
  }
87
87
  const points = [
@@ -168,7 +168,7 @@ function snapToBackingPixels(bounds, density) {
168
168
  const scaledTop = bounds.y * density;
169
169
  const scaledRight = (bounds.x + bounds.width) * density;
170
170
  const scaledBottom = (bounds.y + bounds.height) * density;
171
- if (![scaledLeft, scaledTop, scaledRight, scaledBottom].every(Number.isFinite)) {
171
+ if (!(Number.isFinite(scaledLeft) && Number.isFinite(scaledTop) && Number.isFinite(scaledRight) && Number.isFinite(scaledBottom))) {
172
172
  throw filterRegionError(
173
173
  { scaledLeft, scaledTop, scaledRight, scaledBottom },
174
174
  "filter backing edge arithmetic overflowed"
@@ -262,14 +262,7 @@ function assertCanvasPixelBounds(bounds) {
262
262
  }
263
263
  }
264
264
  function isFiniteAffine(matrix) {
265
- return matrix.is2D && [
266
- matrix.a,
267
- matrix.b,
268
- matrix.c,
269
- matrix.d,
270
- matrix.e,
271
- matrix.f
272
- ].every(Number.isFinite);
265
+ return matrix.is2D && Number.isFinite(matrix.a) && Number.isFinite(matrix.b) && Number.isFinite(matrix.c) && Number.isFinite(matrix.d) && Number.isFinite(matrix.e) && Number.isFinite(matrix.f);
273
266
  }
274
267
  function filterRegionError(value, reason) {
275
268
  const type = GLOBAL_STATE.componentRefs?.element.type;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/lib/filter/filter-region.ts"],
4
- "sourcesContent": ["import { GLOBAL_STATE } from '../global-state.js';\nimport type { LayoutBox } from '../layout/types.js';\nimport type { RenderTargetSnapshot } from '../render-target.js';\nimport { layoutDiagnostic } from '../style/diagnostics.js';\nimport type { NativePreparedFilter } from '../../filters/native-operations.js';\n\nexport const BLUR_EXTENT_FACTOR = (3 * Math.sqrt(2 * Math.PI)) / 4;\n\nconst MAX_UNSIGNED_LONG = 0xffff_ffff;\n\nexport interface PixelBounds {\n readonly x: number;\n readonly y: number;\n readonly width: number;\n readonly height: number;\n}\n\nexport interface FilterPixelWindow {\n readonly logicalBounds: Readonly<LayoutBox>;\n readonly backingX: number;\n readonly backingY: number;\n readonly backingWidth: number;\n readonly backingHeight: number;\n readonly renderTransform: DOMMatrix;\n readonly inverseRenderTransform: DOMMatrix;\n}\n\nexport interface FilterWindows {\n readonly source: FilterPixelWindow;\n readonly output: FilterPixelWindow;\n readonly density: number;\n readonly sourceToOutputX: number;\n readonly sourceToOutputY: number;\n}\n\nexport function reverseFilterInfluence(\n output: Readonly<PixelBounds>,\n filters: { readonly values: readonly NativePreparedFilter[] },\n density: number,\n): PixelBounds {\n let left = output.x;\n let top = output.y;\n let right = output.x + output.width;\n let bottom = output.y + output.height;\n assertPixelEdges(left, top, right, bottom);\n\n for (let index = filters.values.length - 1; index >= 0; index -= 1) {\n const filter = filters.values[index]!;\n const influenced = filter.reverseInfluence({\n x: left,\n y: top,\n width: right - left,\n height: bottom - top,\n }, density);\n left = influenced.x;\n top = influenced.y;\n right = influenced.x + influenced.width;\n bottom = influenced.y + influenced.height;\n assertPixelEdges(left, top, right, bottom);\n }\n\n return {\n x: left,\n y: top,\n width: right - left,\n height: bottom - top,\n };\n}\n\nexport function largestAffineScale(matrix: DOMMatrixReadOnly): number {\n const { a, b, c, d } = matrix;\n const coefficientScale = Math.max(\n Math.abs(a),\n Math.abs(b),\n Math.abs(c),\n Math.abs(d),\n );\n if (coefficientScale === 0) return 0;\n if (!Number.isFinite(coefficientScale)) return Number.NaN;\n\n const normalizedA = a / coefficientScale;\n const normalizedB = b / coefficientScale;\n const normalizedC = c / coefficientScale;\n const normalizedD = d / coefficientScale;\n const sumOfSquares =\n normalizedA * normalizedA + normalizedB * normalizedB +\n normalizedC * normalizedC + normalizedD * normalizedD;\n const determinant =\n normalizedA * normalizedD - normalizedB * normalizedC;\n const discriminant = Math.max(\n 0,\n sumOfSquares * sumOfSquares - 4 * determinant * determinant,\n );\n return coefficientScale *\n Math.sqrt((sumOfSquares + Math.sqrt(discriminant)) / 2);\n}\n\nexport function resolveFilterWindows(\n parentTarget: RenderTargetSnapshot,\n parentPaintTransform: DOMMatrixReadOnly,\n filters: { readonly values: readonly NativePreparedFilter[] },\n): FilterWindows | 'discard' {\n if (!isFiniteAffine(parentPaintTransform)) return 'discard';\n const inverseProject = createInverseProjector(parentPaintTransform);\n if (!inverseProject) return 'discard';\n\n const localToParentBacking = parentTarget.renderTransform.multiply(\n parentPaintTransform,\n );\n if (!isFiniteAffine(localToParentBacking)) return 'discard';\n const density = largestAffineScale(localToParentBacking);\n if (!Number.isFinite(density) || density <= 0) return 'discard';\n\n const projected = projectBounds(parentTarget.logicalBounds, inverseProject);\n if (!projected) return 'discard';\n const outputPixels = snapToBackingPixels(projected, density);\n const sourcePixels = reverseFilterInfluence(outputPixels, filters, density);\n assertCanvasPixelBounds(outputPixels);\n assertCanvasPixelBounds(sourcePixels);\n\n const output = createWindow(outputPixels, density);\n const source = createWindow(sourcePixels, density);\n if (!output || !source) return 'discard';\n return {\n source,\n output,\n density,\n sourceToOutputX: source.backingX - output.backingX,\n sourceToOutputY: source.backingY - output.backingY,\n };\n}\n\nfunction projectBounds(\n bounds: Readonly<LayoutBox>,\n inverseProject: InverseProjector,\n): LayoutBox | undefined {\n const right = bounds.x + bounds.width;\n const bottom = bounds.y + bounds.height;\n if (![bounds.x, bounds.y, right, bottom].every(Number.isFinite)) {\n return undefined;\n }\n\n const points = [\n inverseProject(bounds.x, bounds.y),\n inverseProject(right, bounds.y),\n inverseProject(bounds.x, bottom),\n inverseProject(right, bottom),\n ];\n if (points.some(point => !point)) return undefined;\n const projectedPoints = points as readonly ProjectedPoint[];\n if (projectedPoints.some(\n point => !Number.isFinite(point.x) || !Number.isFinite(point.y),\n )) {\n return undefined;\n }\n const xs = projectedPoints.map(point => point.x);\n const ys = projectedPoints.map(point => point.y);\n const left = Math.min(...xs);\n const top = Math.min(...ys);\n const projectedRight = Math.max(...xs);\n const projectedBottom = Math.max(...ys);\n return {\n x: left,\n y: top,\n width: projectedRight - left,\n height: projectedBottom - top,\n };\n}\n\ninterface ProjectedPoint {\n readonly x: number;\n readonly y: number;\n}\n\ntype InverseProjector = (\n parentX: number,\n parentY: number,\n) => ProjectedPoint | undefined;\n\nfunction createInverseProjector(\n matrix: DOMMatrixReadOnly,\n): InverseProjector | undefined {\n const { a, b, c, d, e, f } = matrix;\n const firstRowScale = Math.max(Math.abs(a), Math.abs(c));\n const secondRowScale = Math.max(Math.abs(b), Math.abs(d));\n if (firstRowScale === 0 || secondRowScale === 0) return undefined;\n\n const rowA = a / firstRowScale;\n const rowB = b / secondRowScale;\n const rowC = c / firstRowScale;\n const rowD = d / secondRowScale;\n const firstColumnScale = Math.max(Math.abs(rowA), Math.abs(rowB));\n const secondColumnScale = Math.max(Math.abs(rowC), Math.abs(rowD));\n if (firstColumnScale === 0 || secondColumnScale === 0) return undefined;\n\n const normalizedA = rowA / firstColumnScale;\n const normalizedB = rowB / firstColumnScale;\n const normalizedC = rowC / secondColumnScale;\n const normalizedD = rowD / secondColumnScale;\n if (Math.abs(normalizedA) >= Math.abs(normalizedB)) {\n if (normalizedA === 0) return undefined;\n const ratio = normalizedB / normalizedA;\n const schurComplement = normalizedD - ratio * normalizedC;\n if (schurComplement === 0 || !Number.isFinite(schurComplement)) {\n return undefined;\n }\n return (parentX, parentY) => {\n const rightX = scaledDifference(parentX, e, firstRowScale);\n const rightY = scaledDifference(parentY, f, secondRowScale);\n const normalizedY =\n (rightY - ratio * rightX) / schurComplement;\n const normalizedX =\n (rightX - normalizedC * normalizedY) / normalizedA;\n const x = normalizedX / firstColumnScale;\n const y = normalizedY / secondColumnScale;\n return Number.isFinite(x) && Number.isFinite(y) ? { x, y } : undefined;\n };\n }\n\n const ratio = normalizedA / normalizedB;\n const schurComplement = normalizedC - ratio * normalizedD;\n if (schurComplement === 0 || !Number.isFinite(schurComplement)) {\n return undefined;\n }\n return (parentX, parentY) => {\n const rightX = scaledDifference(parentX, e, firstRowScale);\n const rightY = scaledDifference(parentY, f, secondRowScale);\n const normalizedY = (rightX - ratio * rightY) / schurComplement;\n const normalizedX =\n (rightY - normalizedD * normalizedY) / normalizedB;\n const x = normalizedX / firstColumnScale;\n const y = normalizedY / secondColumnScale;\n return Number.isFinite(x) && Number.isFinite(y) ? { x, y } : undefined;\n };\n}\n\nfunction scaledDifference(\n value: number,\n offset: number,\n scale: number,\n): number {\n const difference = value - offset;\n if (Number.isFinite(difference)) return difference / scale;\n return value / scale - offset / scale;\n}\n\nfunction snapToBackingPixels(\n bounds: Readonly<LayoutBox>,\n density: number,\n): PixelBounds {\n const scaledLeft = bounds.x * density;\n const scaledTop = bounds.y * density;\n const scaledRight = (bounds.x + bounds.width) * density;\n const scaledBottom = (bounds.y + bounds.height) * density;\n if (![scaledLeft, scaledTop, scaledRight, scaledBottom].every(Number.isFinite)) {\n throw filterRegionError(\n { scaledLeft, scaledTop, scaledRight, scaledBottom },\n 'filter backing edge arithmetic overflowed',\n );\n }\n const left = Math.floor(scaledLeft);\n const top = Math.floor(scaledTop);\n const right = Math.ceil(scaledRight);\n const bottom = Math.ceil(scaledBottom);\n assertPixelEdges(left, top, right, bottom);\n return {\n x: left,\n y: top,\n width: right - left,\n height: bottom - top,\n };\n}\n\nfunction createWindow(\n pixels: Readonly<PixelBounds>,\n density: number,\n): FilterPixelWindow | undefined {\n const inverseDensity = 1 / density;\n const logicalBounds = {\n x: pixels.x / density,\n y: pixels.y / density,\n width: pixels.width / density,\n height: pixels.height / density,\n };\n const inverseOriginX = pixels.x / density;\n const inverseOriginY = pixels.y / density;\n if (\n !Number.isFinite(inverseDensity) ||\n inverseDensity <= 0 ||\n !Object.values(logicalBounds).every(Number.isFinite) ||\n !Number.isFinite(inverseOriginX) ||\n !Number.isFinite(inverseOriginY)\n ) {\n return undefined;\n }\n const renderTransform = new DOMMatrix([\n density,\n 0,\n 0,\n density,\n -pixels.x,\n -pixels.y,\n ]);\n const inverseRenderTransform = new DOMMatrix([\n inverseDensity,\n 0,\n 0,\n inverseDensity,\n inverseOriginX,\n inverseOriginY,\n ]);\n if (\n !isFiniteAffine(renderTransform) ||\n !isFiniteAffine(inverseRenderTransform)\n ) {\n return undefined;\n }\n return {\n logicalBounds: Object.freeze(logicalBounds),\n backingX: pixels.x,\n backingY: pixels.y,\n backingWidth: pixels.width,\n backingHeight: pixels.height,\n renderTransform,\n inverseRenderTransform,\n };\n}\n\nfunction assertPixelEdges(\n left: number,\n top: number,\n right: number,\n bottom: number,\n): void {\n const edges = { left, top, right, bottom };\n if (!Object.values(edges).every(Number.isSafeInteger)) {\n throw filterRegionError(\n edges,\n 'filter backing edges must remain finite safe integers',\n );\n }\n const width = right - left;\n const height = bottom - top;\n if (!Number.isSafeInteger(width) || !Number.isSafeInteger(height)) {\n throw filterRegionError(\n { width, height },\n 'filter backing dimensions must remain finite safe integers',\n );\n }\n}\n\nfunction assertCanvasPixelBounds(bounds: Readonly<PixelBounds>): void {\n const { width, height } = bounds;\n if (\n !Number.isSafeInteger(width) ||\n !Number.isSafeInteger(height) ||\n width <= 0 ||\n height <= 0 ||\n width > MAX_UNSIGNED_LONG ||\n height > MAX_UNSIGNED_LONG\n ) {\n throw filterRegionError(\n { width, height },\n `filter backing dimensions must be positive unsigned-long integers no greater than ${MAX_UNSIGNED_LONG}`,\n );\n }\n const area = width * height;\n if (!Number.isSafeInteger(area)) {\n throw filterRegionError(\n area,\n 'filter backing area must remain a finite safe integer',\n );\n }\n}\n\nfunction isFiniteAffine(matrix: DOMMatrixReadOnly): boolean {\n return matrix.is2D && [\n matrix.a,\n matrix.b,\n matrix.c,\n matrix.d,\n matrix.e,\n matrix.f,\n ].every(Number.isFinite);\n}\n\nfunction filterRegionError(value: unknown, reason: string): Error {\n const type = GLOBAL_STATE.componentRefs?.element.type;\n const component = typeof type === 'function' && type.name ?\n type.name : 'filter boundary';\n return layoutDiagnostic({\n component,\n property: 'filter.backingDimensions',\n value,\n algorithm: 'filter-capture',\n reason,\n });\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { GLOBAL_STATE } from '../global-state.js';\nimport type { LayoutBox } from '../layout/types.js';\nimport type { RenderTargetSnapshot } from '../render-target.js';\nimport { layoutDiagnostic } from '../style/diagnostics.js';\nimport type { NativePreparedFilter } from '../../filters/native-operations.js';\n\nexport const BLUR_EXTENT_FACTOR = (3 * Math.sqrt(2 * Math.PI)) / 4;\n\nconst MAX_UNSIGNED_LONG = 0xffff_ffff;\n\nexport interface PixelBounds {\n readonly x: number;\n readonly y: number;\n readonly width: number;\n readonly height: number;\n}\n\nexport interface FilterPixelWindow {\n readonly logicalBounds: Readonly<LayoutBox>;\n readonly backingX: number;\n readonly backingY: number;\n readonly backingWidth: number;\n readonly backingHeight: number;\n readonly renderTransform: DOMMatrix;\n readonly inverseRenderTransform: DOMMatrix;\n}\n\nexport interface FilterWindows {\n readonly source: FilterPixelWindow;\n readonly output: FilterPixelWindow;\n readonly density: number;\n readonly sourceToOutputX: number;\n readonly sourceToOutputY: number;\n}\n\nexport function reverseFilterInfluence(\n output: Readonly<PixelBounds>,\n filters: { readonly values: readonly NativePreparedFilter[] },\n density: number,\n): PixelBounds {\n let left = output.x;\n let top = output.y;\n let right = output.x + output.width;\n let bottom = output.y + output.height;\n assertPixelEdges(left, top, right, bottom);\n\n for (let index = filters.values.length - 1; index >= 0; index -= 1) {\n const filter = filters.values[index]!;\n const influenced = filter.reverseInfluence({\n x: left,\n y: top,\n width: right - left,\n height: bottom - top,\n }, density);\n left = influenced.x;\n top = influenced.y;\n right = influenced.x + influenced.width;\n bottom = influenced.y + influenced.height;\n assertPixelEdges(left, top, right, bottom);\n }\n\n return {\n x: left,\n y: top,\n width: right - left,\n height: bottom - top,\n };\n}\n\nexport function largestAffineScale(matrix: DOMMatrixReadOnly): number {\n const { a, b, c, d } = matrix;\n const coefficientScale = Math.max(\n Math.abs(a),\n Math.abs(b),\n Math.abs(c),\n Math.abs(d),\n );\n if (coefficientScale === 0) return 0;\n if (!Number.isFinite(coefficientScale)) return Number.NaN;\n\n const normalizedA = a / coefficientScale;\n const normalizedB = b / coefficientScale;\n const normalizedC = c / coefficientScale;\n const normalizedD = d / coefficientScale;\n const sumOfSquares =\n normalizedA * normalizedA + normalizedB * normalizedB +\n normalizedC * normalizedC + normalizedD * normalizedD;\n const determinant =\n normalizedA * normalizedD - normalizedB * normalizedC;\n const discriminant = Math.max(\n 0,\n sumOfSquares * sumOfSquares - 4 * determinant * determinant,\n );\n return coefficientScale *\n Math.sqrt((sumOfSquares + Math.sqrt(discriminant)) / 2);\n}\n\nexport function resolveFilterWindows(\n parentTarget: RenderTargetSnapshot,\n parentPaintTransform: DOMMatrixReadOnly,\n filters: { readonly values: readonly NativePreparedFilter[] },\n): FilterWindows | 'discard' {\n if (!isFiniteAffine(parentPaintTransform)) return 'discard';\n const inverseProject = createInverseProjector(parentPaintTransform);\n if (!inverseProject) return 'discard';\n\n const localToParentBacking = parentTarget.renderTransform.multiply(\n parentPaintTransform,\n );\n if (!isFiniteAffine(localToParentBacking)) return 'discard';\n const density = largestAffineScale(localToParentBacking);\n if (!Number.isFinite(density) || density <= 0) return 'discard';\n\n const projected = projectBounds(parentTarget.logicalBounds, inverseProject);\n if (!projected) return 'discard';\n const outputPixels = snapToBackingPixels(projected, density);\n const sourcePixels = reverseFilterInfluence(outputPixels, filters, density);\n assertCanvasPixelBounds(outputPixels);\n assertCanvasPixelBounds(sourcePixels);\n\n const output = createWindow(outputPixels, density);\n const source = createWindow(sourcePixels, density);\n if (!output || !source) return 'discard';\n return {\n source,\n output,\n density,\n sourceToOutputX: source.backingX - output.backingX,\n sourceToOutputY: source.backingY - output.backingY,\n };\n}\n\nfunction projectBounds(\n bounds: Readonly<LayoutBox>,\n inverseProject: InverseProjector,\n): LayoutBox | undefined {\n const right = bounds.x + bounds.width;\n const bottom = bounds.y + bounds.height;\n if (!(Number.isFinite(bounds.x) && Number.isFinite(bounds.y) && Number.isFinite(right) && Number.isFinite(bottom))) {\n return undefined;\n }\n\n const points = [\n inverseProject(bounds.x, bounds.y),\n inverseProject(right, bounds.y),\n inverseProject(bounds.x, bottom),\n inverseProject(right, bottom),\n ];\n if (points.some(point => !point)) return undefined;\n const projectedPoints = points as readonly ProjectedPoint[];\n if (projectedPoints.some(\n point => !Number.isFinite(point.x) || !Number.isFinite(point.y),\n )) {\n return undefined;\n }\n const xs = projectedPoints.map(point => point.x);\n const ys = projectedPoints.map(point => point.y);\n const left = Math.min(...xs);\n const top = Math.min(...ys);\n const projectedRight = Math.max(...xs);\n const projectedBottom = Math.max(...ys);\n return {\n x: left,\n y: top,\n width: projectedRight - left,\n height: projectedBottom - top,\n };\n}\n\ninterface ProjectedPoint {\n readonly x: number;\n readonly y: number;\n}\n\ntype InverseProjector = (\n parentX: number,\n parentY: number,\n) => ProjectedPoint | undefined;\n\nfunction createInverseProjector(\n matrix: DOMMatrixReadOnly,\n): InverseProjector | undefined {\n const { a, b, c, d, e, f } = matrix;\n const firstRowScale = Math.max(Math.abs(a), Math.abs(c));\n const secondRowScale = Math.max(Math.abs(b), Math.abs(d));\n if (firstRowScale === 0 || secondRowScale === 0) return undefined;\n\n const rowA = a / firstRowScale;\n const rowB = b / secondRowScale;\n const rowC = c / firstRowScale;\n const rowD = d / secondRowScale;\n const firstColumnScale = Math.max(Math.abs(rowA), Math.abs(rowB));\n const secondColumnScale = Math.max(Math.abs(rowC), Math.abs(rowD));\n if (firstColumnScale === 0 || secondColumnScale === 0) return undefined;\n\n const normalizedA = rowA / firstColumnScale;\n const normalizedB = rowB / firstColumnScale;\n const normalizedC = rowC / secondColumnScale;\n const normalizedD = rowD / secondColumnScale;\n if (Math.abs(normalizedA) >= Math.abs(normalizedB)) {\n if (normalizedA === 0) return undefined;\n const ratio = normalizedB / normalizedA;\n const schurComplement = normalizedD - ratio * normalizedC;\n if (schurComplement === 0 || !Number.isFinite(schurComplement)) {\n return undefined;\n }\n return (parentX, parentY) => {\n const rightX = scaledDifference(parentX, e, firstRowScale);\n const rightY = scaledDifference(parentY, f, secondRowScale);\n const normalizedY =\n (rightY - ratio * rightX) / schurComplement;\n const normalizedX =\n (rightX - normalizedC * normalizedY) / normalizedA;\n const x = normalizedX / firstColumnScale;\n const y = normalizedY / secondColumnScale;\n return Number.isFinite(x) && Number.isFinite(y) ? { x, y } : undefined;\n };\n }\n\n const ratio = normalizedA / normalizedB;\n const schurComplement = normalizedC - ratio * normalizedD;\n if (schurComplement === 0 || !Number.isFinite(schurComplement)) {\n return undefined;\n }\n return (parentX, parentY) => {\n const rightX = scaledDifference(parentX, e, firstRowScale);\n const rightY = scaledDifference(parentY, f, secondRowScale);\n const normalizedY = (rightX - ratio * rightY) / schurComplement;\n const normalizedX =\n (rightY - normalizedD * normalizedY) / normalizedB;\n const x = normalizedX / firstColumnScale;\n const y = normalizedY / secondColumnScale;\n return Number.isFinite(x) && Number.isFinite(y) ? { x, y } : undefined;\n };\n}\n\nfunction scaledDifference(\n value: number,\n offset: number,\n scale: number,\n): number {\n const difference = value - offset;\n if (Number.isFinite(difference)) return difference / scale;\n return value / scale - offset / scale;\n}\n\nfunction snapToBackingPixels(\n bounds: Readonly<LayoutBox>,\n density: number,\n): PixelBounds {\n const scaledLeft = bounds.x * density;\n const scaledTop = bounds.y * density;\n const scaledRight = (bounds.x + bounds.width) * density;\n const scaledBottom = (bounds.y + bounds.height) * density;\n if (!(\n Number.isFinite(scaledLeft) &&\n Number.isFinite(scaledTop) &&\n Number.isFinite(scaledRight) &&\n Number.isFinite(scaledBottom)\n )) {\n throw filterRegionError(\n { scaledLeft, scaledTop, scaledRight, scaledBottom },\n 'filter backing edge arithmetic overflowed',\n );\n }\n const left = Math.floor(scaledLeft);\n const top = Math.floor(scaledTop);\n const right = Math.ceil(scaledRight);\n const bottom = Math.ceil(scaledBottom);\n assertPixelEdges(left, top, right, bottom);\n return {\n x: left,\n y: top,\n width: right - left,\n height: bottom - top,\n };\n}\n\nfunction createWindow(\n pixels: Readonly<PixelBounds>,\n density: number,\n): FilterPixelWindow | undefined {\n const inverseDensity = 1 / density;\n const logicalBounds = {\n x: pixels.x / density,\n y: pixels.y / density,\n width: pixels.width / density,\n height: pixels.height / density,\n };\n const inverseOriginX = pixels.x / density;\n const inverseOriginY = pixels.y / density;\n if (\n !Number.isFinite(inverseDensity) ||\n inverseDensity <= 0 ||\n !Object.values(logicalBounds).every(Number.isFinite) ||\n !Number.isFinite(inverseOriginX) ||\n !Number.isFinite(inverseOriginY)\n ) {\n return undefined;\n }\n const renderTransform = new DOMMatrix([\n density,\n 0,\n 0,\n density,\n -pixels.x,\n -pixels.y,\n ]);\n const inverseRenderTransform = new DOMMatrix([\n inverseDensity,\n 0,\n 0,\n inverseDensity,\n inverseOriginX,\n inverseOriginY,\n ]);\n if (\n !isFiniteAffine(renderTransform) ||\n !isFiniteAffine(inverseRenderTransform)\n ) {\n return undefined;\n }\n return {\n logicalBounds: Object.freeze(logicalBounds),\n backingX: pixels.x,\n backingY: pixels.y,\n backingWidth: pixels.width,\n backingHeight: pixels.height,\n renderTransform,\n inverseRenderTransform,\n };\n}\n\nfunction assertPixelEdges(\n left: number,\n top: number,\n right: number,\n bottom: number,\n): void {\n const edges = { left, top, right, bottom };\n if (!Object.values(edges).every(Number.isSafeInteger)) {\n throw filterRegionError(\n edges,\n 'filter backing edges must remain finite safe integers',\n );\n }\n const width = right - left;\n const height = bottom - top;\n if (!Number.isSafeInteger(width) || !Number.isSafeInteger(height)) {\n throw filterRegionError(\n { width, height },\n 'filter backing dimensions must remain finite safe integers',\n );\n }\n}\n\nfunction assertCanvasPixelBounds(bounds: Readonly<PixelBounds>): void {\n const { width, height } = bounds;\n if (\n !Number.isSafeInteger(width) ||\n !Number.isSafeInteger(height) ||\n width <= 0 ||\n height <= 0 ||\n width > MAX_UNSIGNED_LONG ||\n height > MAX_UNSIGNED_LONG\n ) {\n throw filterRegionError(\n { width, height },\n `filter backing dimensions must be positive unsigned-long integers no greater than ${MAX_UNSIGNED_LONG}`,\n );\n }\n const area = width * height;\n if (!Number.isSafeInteger(area)) {\n throw filterRegionError(\n area,\n 'filter backing area must remain a finite safe integer',\n );\n }\n}\n\nfunction isFiniteAffine(matrix: DOMMatrixReadOnly): boolean {\n return (\n matrix.is2D &&\n Number.isFinite(matrix.a) &&\n Number.isFinite(matrix.b) &&\n Number.isFinite(matrix.c) &&\n Number.isFinite(matrix.d) &&\n Number.isFinite(matrix.e) &&\n Number.isFinite(matrix.f)\n );\n}\n\nfunction filterRegionError(value: unknown, reason: string): Error {\n const type = GLOBAL_STATE.componentRefs?.element.type;\n const component = typeof type === 'function' && type.name ?\n type.name : 'filter boundary';\n return layoutDiagnostic({\n component,\n property: 'filter.backingDimensions',\n value,\n algorithm: 'filter-capture',\n reason,\n });\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["ratio", "schurComplement"]
7
7
  }
@@ -10,6 +10,7 @@ export declare class PibblFocusManager implements PibblFocusPolicyBridge {
10
10
  private committedNavigationCandidates;
11
11
  private committedBoundaries;
12
12
  private pending;
13
+ private retainedNavigationTransaction;
13
14
  private transactionalPending;
14
15
  private directionalStack;
15
16
  private focusedTarget;
@@ -47,6 +48,7 @@ export declare class PibblFocusManager implements PibblFocusPolicyBridge {
47
48
  beginCollection(): void;
48
49
  finishCollection(success: boolean): void;
49
50
  private commitCollection;
51
+ private prepareCollection;
50
52
  observeTarget(target: PibblEventTargetRegistration): void;
51
53
  /** @internal Collects one published HtmlBox in source order. */
52
54
  observeHtmlRegion(region: HtmlFocusRegion): void;
@@ -54,7 +56,7 @@ export declare class PibblFocusManager implements PibblFocusPolicyBridge {
54
56
  removeHtmlFocusRegion(region: HtmlFocusRegion): void;
55
57
  /** @internal Deactivates retained DOM hosts while the root has no display area. */
56
58
  suspendHtmlRegions(): void;
57
- observeTransactionalTarget(target: PibblEventTargetRegistration): void;
59
+ observeTransactionalTarget(target: PibblEventTargetRegistration, preparedFocusable?: boolean): void;
58
60
  removeTarget(target: PibblEventTargetRegistration): void;
59
61
  snapshot(target: PibblEventTargetRegistration): Readonly<{
60
62
  isFocused: false;
@@ -82,6 +84,8 @@ export declare class PibblFocusManager implements PibblFocusPolicyBridge {
82
84
  layerFocusRenderRevision(instance: PibblInstance): number | undefined;
83
85
  private replayRetainedTargets;
84
86
  private replayCanvasOnlyTargets;
87
+ /** A clean inner manager still joins its parent root's geometry adoption. */
88
+ private stageRetainedNavigation;
85
89
  setFocusState(target: PibblEventTargetRegistration | undefined, focusVisible: boolean): void;
86
90
  liveFocusCandidate(target: PibblEventTargetRegistration | undefined): PibblEventTargetRegistration | undefined;
87
91
  commitLogicalFocus(target: PibblEventTargetRegistration | undefined, focusVisible: boolean): void;
@@ -96,6 +100,9 @@ export declare class PibblFocusManager implements PibblFocusPolicyBridge {
96
100
  private markPendingIneligible;
97
101
  private commitCandidates;
98
102
  private commitNavigationCandidates;
103
+ private prepareNavigationCandidates;
104
+ private adoptNavigationCandidates;
105
+ private finishNavigationCandidates;
99
106
  private commitRemovedTarget;
100
107
  private clearFocusState;
101
108
  private adoptHtmlFocus;
@@ -1,3 +1,4 @@
1
+ import { preparedLayoutHtmlGeometry, preparedLayoutTargetBounds } from "../layout/geometry-publication.js";
1
2
  import { GLOBAL_STATE } from "../global-state.js";
2
3
  import { Teardowns } from "../teardowns.js";
3
4
  import { resolveTargetRootBounds } from "./geometry.js";
@@ -14,6 +15,7 @@ import {
14
15
  isHtmlFocusCandidate
15
16
  } from "./types.js";
16
17
  import { getManagedTabStops } from "./dom-tab-stops.js";
18
+ const EMPTY_NAVIGATION = Object.freeze([]);
17
19
  const UNFOCUSED_SNAPSHOT = Object.freeze({
18
20
  isFocused: false,
19
21
  isFocusVisible: false
@@ -133,10 +135,10 @@ class FocusManagerCoordinator {
133
135
  restored: void 0
134
136
  };
135
137
  this.transactions.set(transaction, state);
136
- transaction.onFinish((success) => this.finishTransaction(state, success));
138
+ transaction.onFinish((success) => this.finishTransaction(state, success, transaction.failed === false));
137
139
  return state;
138
140
  }
139
- finishTransaction(state, success) {
141
+ finishTransaction(state, success, cancelled = false) {
140
142
  if (state.finished) return;
141
143
  state.finished = true;
142
144
  if (success) {
@@ -155,7 +157,7 @@ class FocusManagerCoordinator {
155
157
  return;
156
158
  }
157
159
  const attemptedReplacement = state.claimed && state.claimed !== state.prior || state.prepared && state.prepared !== state.prior;
158
- const restored = state.prior && attemptedReplacement && !state.prior.isDestroyed ? state.prior : void 0;
160
+ const restored = state.prior && (attemptedReplacement || cancelled) && !state.prior.isDestroyed ? state.prior : void 0;
159
161
  state.restored = restored;
160
162
  this.active = restored;
161
163
  this.eventRoot.focusPolicy = restored;
@@ -229,6 +231,7 @@ class PibblFocusManager {
229
231
  committedNavigationCandidates = Object.freeze([]);
230
232
  committedBoundaries = /* @__PURE__ */ new Set();
231
233
  pending;
234
+ retainedNavigationTransaction;
232
235
  transactionalPending;
233
236
  directionalStack = [];
234
237
  focusedTarget;
@@ -318,12 +321,22 @@ class PibblFocusManager {
318
321
  const transaction = this.eventRoot.renderTransaction;
319
322
  if (transaction) {
320
323
  this.transactionalPending = { transaction, frame: pending };
324
+ let prepared;
325
+ if (transaction.onPreflight && transaction.onAdopt) {
326
+ transaction.onPreflight(() => {
327
+ prepared = this.prepareCollection(pending, transaction);
328
+ });
329
+ transaction.onAdopt(() => {
330
+ if (prepared && !this.destroyed) this.adoptNavigationCandidates(prepared);
331
+ });
332
+ }
321
333
  transaction.onFinish((transactionSucceeded) => {
322
334
  if (this.transactionalPending?.transaction === transaction) {
323
335
  this.transactionalPending = void 0;
324
336
  }
325
337
  if (transactionSucceeded && !this.destroyed) {
326
- this.commitCollection(pending);
338
+ if (prepared) this.finishNavigationCandidates();
339
+ else this.commitCollection(pending);
327
340
  }
328
341
  });
329
342
  return;
@@ -331,6 +344,10 @@ class PibblFocusManager {
331
344
  this.commitCollection(pending);
332
345
  }
333
346
  commitCollection(pending) {
347
+ this.adoptNavigationCandidates(this.prepareCollection(pending));
348
+ this.finishNavigationCandidates();
349
+ }
350
+ prepareCollection(pending, transaction) {
334
351
  const collected = [];
335
352
  for (const [sourceIndex, observed] of pending.entries.entries()) {
336
353
  if ("target" in observed) {
@@ -340,37 +357,25 @@ class PibblFocusManager {
340
357
  target,
341
358
  sourceIndex,
342
359
  directionalBoundary: observed.directionalBoundary,
343
- rootBounds: resolveTargetRootBounds(target)
360
+ rootBounds: transaction ? preparedLayoutTargetBounds(transaction, target) : resolveTargetRootBounds(target)
344
361
  })
345
362
  );
346
363
  continue;
347
364
  }
348
365
  const region = observed.region;
349
- if (region.active && region.content)
366
+ const geometry = transaction ? preparedLayoutHtmlGeometry(transaction, region) : void 0;
367
+ if (geometry ? geometry.active : region.active && region.content)
350
368
  collected.push(
351
369
  Object.freeze({
352
370
  region,
353
371
  sourceIndex,
354
372
  directionalBoundary: observed.directionalBoundary,
355
- rootBounds: region.rootBounds
373
+ rootBounds: geometry?.bounds ?? region.rootBounds
356
374
  })
357
375
  );
358
376
  }
359
377
  const navigation = Object.freeze(collected);
360
- this.commitNavigationCandidates(navigation, pending.boundaries);
361
- const candidates = navigation.filter(
362
- (candidate) => !isHtmlFocusCandidate(candidate)
363
- );
364
- for (const candidate of candidates) {
365
- if (candidate.directionalBoundary) {
366
- retainedDirectionalBoundaries.set(
367
- candidate.target,
368
- asDirectionalBoundary(candidate.directionalBoundary)
369
- );
370
- } else {
371
- retainedDirectionalBoundaries.delete(candidate.target);
372
- }
373
- }
378
+ return this.prepareNavigationCandidates(navigation, pending.boundaries);
374
379
  }
375
380
  observeTarget(target) {
376
381
  const pending = this.pending;
@@ -451,15 +456,14 @@ class PibblFocusManager {
451
456
  }
452
457
  if (focused) this.clearHtmlFocus(focused);
453
458
  }
454
- observeTransactionalTarget(target) {
459
+ observeTransactionalTarget(target, preparedFocusable) {
455
460
  const transactional = this.transactionalPending;
456
- if (!transactional || transactional.transaction !== this.eventRoot.renderTransaction)
457
- return;
458
- const pending = transactional.frame;
461
+ const pending = this.pending ?? (transactional?.transaction === this.eventRoot.renderTransaction ? transactional?.frame : void 0);
462
+ if (!pending) return;
459
463
  if (this.pendingSpaceTarget === target && !target.handlers.click) {
460
464
  this.cancelSpaceActivation();
461
465
  }
462
- if (!isKeyboardFocusable(target)) {
466
+ if (!(preparedFocusable ?? isKeyboardFocusable(target))) {
463
467
  pending.ineligibleTargets.add(target);
464
468
  const index = pending.targets.findIndex(
465
469
  (candidate) => candidate.target === target
@@ -679,6 +683,7 @@ class PibblFocusManager {
679
683
  return;
680
684
  }
681
685
  if (retained.length === 0) return;
686
+ if (this.stageRetainedNavigation()) return;
682
687
  const replayed = new Set(retained);
683
688
  const candidates = Object.freeze(
684
689
  this.committedNavigationCandidates.map((candidate) => {
@@ -711,6 +716,7 @@ class PibblFocusManager {
711
716
  }
712
717
  return;
713
718
  }
719
+ if (this.stageRetainedNavigation()) return;
714
720
  const replayed = new Set(targets);
715
721
  if (!this.committedCandidates.some(
716
722
  (candidate) => replayed.has(candidate.target)
@@ -726,6 +732,36 @@ class PibblFocusManager {
726
732
  );
727
733
  this.commitCandidates(candidates, this.committedBoundaries);
728
734
  }
735
+ /** A clean inner manager still joins its parent root's geometry adoption. */
736
+ stageRetainedNavigation() {
737
+ const transaction = this.eventRoot.renderTransaction;
738
+ if (!transaction?.onPreflight || !transaction.onAdopt) return false;
739
+ if (this.retainedNavigationTransaction === transaction) return true;
740
+ this.retainedNavigationTransaction = transaction;
741
+ let prepared;
742
+ transaction.onPreflight(() => {
743
+ if (this.destroyed) return;
744
+ const candidates = [];
745
+ for (const candidate of this.committedNavigationCandidates) {
746
+ if (isHtmlFocusCandidate(candidate)) {
747
+ const geometry = preparedLayoutHtmlGeometry(transaction, candidate.region);
748
+ if (geometry ? !geometry.active : !candidate.region.active || !candidate.region.content) continue;
749
+ candidates.push(Object.freeze({ ...candidate, rootBounds: geometry?.bounds ?? candidate.region.rootBounds }));
750
+ } else {
751
+ candidates.push(Object.freeze({ ...candidate, rootBounds: preparedLayoutTargetBounds(transaction, candidate.target) }));
752
+ }
753
+ }
754
+ prepared = this.prepareNavigationCandidates(Object.freeze(candidates), this.committedBoundaries);
755
+ });
756
+ transaction.onAdopt(() => {
757
+ if (prepared && !this.destroyed) this.adoptNavigationCandidates(prepared);
758
+ });
759
+ transaction.onFinish((success) => {
760
+ if (this.retainedNavigationTransaction === transaction) this.retainedNavigationTransaction = void 0;
761
+ if (success && prepared && !this.destroyed) this.finishNavigationCandidates();
762
+ });
763
+ return true;
764
+ }
729
765
  setFocusState(target, focusVisible) {
730
766
  if (target && !this.committedCandidates.some((candidate) => candidate.target === target)) {
731
767
  throw new Error(
@@ -838,6 +874,10 @@ class PibblFocusManager {
838
874
  this.commitNavigationCandidates(Object.freeze(navigation), boundaries);
839
875
  }
840
876
  commitNavigationCandidates(candidates, boundaries) {
877
+ this.adoptNavigationCandidates(this.prepareNavigationCandidates(candidates, boundaries));
878
+ this.finishNavigationCandidates();
879
+ }
880
+ prepareNavigationCandidates(candidates, boundaries) {
841
881
  const pendingByBoundary = /* @__PURE__ */ new Map();
842
882
  for (const boundary of boundaries) pendingByBoundary.set(boundary, []);
843
883
  for (const candidate of candidates) {
@@ -849,26 +889,30 @@ class PibblFocusManager {
849
889
  for (const [boundary, directCandidates] of pendingByBoundary) {
850
890
  committedByBoundary.set(boundary, Object.freeze(directCandidates));
851
891
  }
892
+ return {
893
+ navigation: candidates,
894
+ canvas: Object.freeze(candidates.filter((candidate) => !isHtmlFocusCandidate(candidate))),
895
+ html: Object.freeze(candidates.filter((candidate) => isHtmlFocusCandidate(candidate))),
896
+ byBoundary: committedByBoundary,
897
+ boundaries: new Set(committedByBoundary.keys())
898
+ };
899
+ }
900
+ adoptNavigationCandidates(prepared) {
852
901
  for (const boundary of this.committedBoundaries) {
853
- if (!committedByBoundary.has(boundary)) {
854
- boundary.commit(Object.freeze([]));
855
- }
902
+ if (!prepared.byBoundary.has(boundary)) boundary.commit(EMPTY_NAVIGATION);
856
903
  }
857
- for (const [boundary, directCandidates] of committedByBoundary) {
858
- boundary.commit(directCandidates);
904
+ for (const [boundary, candidates] of prepared.byBoundary) boundary.commit(candidates);
905
+ this.committedBoundaries = prepared.boundaries;
906
+ this.committedNavigationCandidates = prepared.navigation;
907
+ this.committedCandidates = prepared.canvas;
908
+ this.committedHtmlCandidates = prepared.html;
909
+ for (const candidate of prepared.canvas) {
910
+ if (candidate.directionalBoundary) retainedDirectionalBoundaries.set(candidate.target, asDirectionalBoundary(candidate.directionalBoundary));
911
+ else retainedDirectionalBoundaries.delete(candidate.target);
859
912
  }
860
- this.committedBoundaries = new Set(committedByBoundary.keys());
861
- this.committedNavigationCandidates = candidates;
862
- this.committedCandidates = Object.freeze(
863
- candidates.filter(
864
- (candidate) => !isHtmlFocusCandidate(candidate)
865
- )
866
- );
867
- this.committedHtmlCandidates = Object.freeze(
868
- candidates.filter(
869
- (candidate) => isHtmlFocusCandidate(candidate)
870
- )
871
- );
913
+ }
914
+ finishNavigationCandidates() {
915
+ const candidates = this.committedNavigationCandidates;
872
916
  if (this.focusedTarget && !candidates.some(
873
917
  (candidate) => !isHtmlFocusCandidate(candidate) && candidate.target === this.focusedTarget
874
918
  )) {