@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,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
  )) {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/lib/focus/focus-manager.ts"],
4
- "sourcesContent": ["import type { PibblEventTargetRegistration } from \"../events/registrations.js\";\nimport { GLOBAL_STATE } from \"../global-state.js\";\nimport type {\n PibblEvent,\n PibblEventType,\n PibblKeyboardEvent,\n} from \"../events/types.js\";\nimport { Teardowns } from \"../teardowns.js\";\nimport type {\n PibblEventRoot,\n PibblFocusPressDefaultInput,\n PibblFocusTouchDefaultContact,\n PibblFocusTouchDefaultInput,\n PibblFocusPolicyBridge,\n PibblInstance,\n PibblRenderTransaction,\n} from \"../types.js\";\nimport { resolveTargetRootBounds } from \"./geometry.js\";\nimport {\n mountDOMFocusHost,\n type PibblMountedDOMFocusHost,\n} from \"./dom-focus-host.js\";\nimport {\n applyDirectionalNavigationDefault,\n applyKeyboardActivationDefault,\n applyTabDefault,\n} from \"./keyboard-defaults.js\";\nimport { transitionLogicalFocus } from \"./focus-events.js\";\nimport type { HtmlFocusRegion } from \"./html-focus-region.js\";\nimport {\n isHtmlFocusCandidate,\n type PibblDirectionalBoundary,\n type PibblFocusCandidate,\n type PibblHtmlFocusCandidate,\n type PibblNavigationCandidate,\n} from \"./types.js\";\nimport { getManagedTabStops } from \"./dom-tab-stops.js\";\n\nconst UNFOCUSED_SNAPSHOT = Object.freeze({\n isFocused: false,\n isFocusVisible: false,\n});\n\nconst retainedDirectionalBoundaries = new WeakMap<\n PibblEventTargetRegistration,\n DirectionalBoundary\n>();\nconst coordinators = new WeakMap<PibblEventRoot, FocusManagerCoordinator>();\nconst managerOwners = new WeakMap<PibblFocusManager, PibblInstance>();\n\ninterface PendingCandidate {\n readonly target: PibblEventTargetRegistration;\n readonly directionalBoundary: DirectionalBoundary | undefined;\n}\n\ninterface PendingHtmlRegion {\n readonly region: HtmlFocusRegion;\n readonly directionalBoundary: DirectionalBoundary | undefined;\n}\n\ninterface PendingFrame {\n readonly entries: (PendingCandidate | PendingHtmlRegion)[];\n readonly targets: PendingCandidate[];\n readonly htmlRegions: PendingHtmlRegion[];\n readonly observedTargets: Set<PibblEventTargetRegistration>;\n readonly observedHtmlRegions: Set<HtmlFocusRegion>;\n readonly ineligibleTargets: Set<PibblEventTargetRegistration>;\n readonly boundaries: Set<DirectionalBoundary>;\n}\n\ninterface RepresentedPress {\n readonly x: number;\n readonly y: number;\n readonly timeStamp: number;\n}\n\ninterface RepresentedPointerPress extends RepresentedPress {\n suppressMouse: boolean;\n suppressTouch: boolean;\n}\n\nconst COMPATIBILITY_PRESS_WINDOW_MS = 1_500;\n\nclass DirectionalBoundary implements PibblDirectionalBoundary {\n private committedCandidates: readonly PibblNavigationCandidate[] =\n Object.freeze([]);\n\n constructor(readonly owner: PibblInstance) {}\n\n get candidates(): readonly PibblNavigationCandidate[] {\n return this.committedCandidates;\n }\n\n commit(candidates: readonly PibblNavigationCandidate[]): void {\n this.committedCandidates = candidates;\n }\n}\n\ninterface FocusTransactionState {\n readonly prior: PibblFocusManager | undefined;\n readonly replayedManagers: Set<PibblFocusManager>;\n prepared: PibblFocusManager | undefined;\n claimed: PibblFocusManager | undefined;\n finished: boolean;\n restored: PibblFocusManager | undefined;\n}\n\nclass FocusManagerCoordinator {\n private readonly managers = new Set<PibblFocusManager>();\n private readonly transactions = new WeakMap<\n PibblRenderTransaction,\n FocusTransactionState\n >();\n private active: PibblFocusManager | undefined;\n private domFocusHost: PibblMountedDOMFocusHost | undefined;\n private domFocusHostTeardowns: Teardowns | undefined;\n private disposed = false;\n\n constructor(private readonly eventRoot: PibblEventRoot) {\n eventRoot.rootInstance?.mainTeardowns.add(() => this.dispose());\n }\n\n add(manager: PibblFocusManager): void {\n if (this.disposed) {\n throw new Error(\"Pibbl focus manager root is disposed.\");\n }\n this.ensureDOMFocusHost();\n this.managers.add(manager);\n const transaction = this.eventRoot.renderTransaction;\n if (transaction) {\n const state = this.stateFor(transaction);\n state.prepared = manager;\n // Reconciliation mounts every descriptor before declaration-order entry.\n // Expose that transaction-local manager so a same-element directional\n // descriptor can enter first without making the claim permanent.\n this.eventRoot.focusPolicy = manager;\n }\n }\n\n claim(manager: PibblFocusManager): void {\n const transaction = this.eventRoot.renderTransaction;\n if (!transaction) {\n if (this.active && this.active !== manager) {\n throw duplicateManagerError();\n }\n this.setActive(manager);\n return;\n }\n\n const state = this.stateFor(transaction);\n if (state.claimed && state.claimed !== manager) {\n throw duplicateManagerError();\n }\n state.claimed = manager;\n this.eventRoot.focusPolicy = manager;\n }\n\n beforeNativeDispatch(\n type: PibblEventType,\n event: Event,\n ): PibblFocusManager | undefined {\n const manager = this.active;\n const routeLogicalEvent =\n this.domFocusHost?.beforeNativeDispatch(type, event) ?? true;\n return routeLogicalEvent && manager && !manager.isDestroyed\n ? manager\n : undefined;\n }\n\n syncDOMFocusHost(manager: PibblFocusManager): void {\n if (this.active === manager) {\n this.domFocusHost?.syncCandidateAvailability(manager.hasFocusCandidates);\n this.domFocusHost?.syncHtmlRegions(manager.htmlFocusRegions);\n }\n }\n\n focusCanvasFromPress(manager: PibblFocusManager): void {\n if (this.active === manager) this.domFocusHost?.focusFromPress();\n }\n\n claimRetainedManagers(instance: PibblInstance): readonly PibblFocusManager[] {\n const retained = Array.from(this.managers).filter((manager) => {\n const owner = managerOwners.get(manager);\n return (\n !manager.isDestroyed &&\n !manager.ownerWasReleased &&\n owner !== undefined &&\n isInstanceWithin(owner, instance)\n );\n });\n const transaction = this.eventRoot.renderTransaction;\n if (!transaction) {\n for (const manager of retained) this.claim(manager);\n return retained;\n }\n\n const state = this.stateFor(transaction);\n for (const manager of retained) {\n if (state.replayedManagers.has(manager)) continue;\n state.replayedManagers.add(manager);\n this.claim(manager);\n }\n return retained;\n }\n\n release(manager: PibblFocusManager): void {\n if (manager.isDestroyed) return;\n manager.markOwnerReleased();\n const transaction = this.eventRoot.renderTransaction;\n if (transaction) {\n const state = this.stateFor(transaction);\n if (!state.finished) return;\n }\n if (this.active === manager) {\n this.setActive(undefined);\n }\n this.destroy(manager);\n }\n\n private stateFor(transaction: PibblRenderTransaction): FocusTransactionState {\n const existing = this.transactions.get(transaction);\n if (existing) return existing;\n const state: FocusTransactionState = {\n prior: this.active,\n replayedManagers: new Set(),\n prepared: undefined,\n claimed: undefined,\n finished: false,\n restored: undefined,\n };\n this.transactions.set(transaction, state);\n transaction.onFinish((success) => this.finishTransaction(state, success));\n return state;\n }\n\n private finishTransaction(\n state: FocusTransactionState,\n success: boolean,\n ): void {\n if (state.finished) return;\n state.finished = true;\n if (success) {\n if (state.claimed) {\n this.active = state.claimed;\n } else if (this.active?.ownerWasReleased) {\n this.active = undefined;\n }\n this.eventRoot.focusPolicy = this.active;\n for (const manager of Array.from(this.managers)) {\n if (manager !== this.active && manager.ownerWasReleased) {\n this.destroy(manager);\n }\n }\n this.domFocusHost?.setManager(this.active);\n return;\n }\n\n const attemptedReplacement =\n (state.claimed && state.claimed !== state.prior) ||\n (state.prepared && state.prepared !== state.prior);\n const restored =\n state.prior && attemptedReplacement && !state.prior.isDestroyed\n ? state.prior\n : undefined;\n state.restored = restored;\n this.active = restored;\n this.eventRoot.focusPolicy = restored;\n for (const manager of Array.from(this.managers)) {\n if (manager !== restored) this.destroy(manager);\n }\n this.domFocusHost?.setManager(restored);\n }\n\n private destroy(manager: PibblFocusManager): void {\n this.managers.delete(manager);\n manager.destroyFromCoordinator();\n if (this.managers.size === 0) this.disposeDOMFocusHost();\n }\n\n private ensureDOMFocusHost(): void {\n if (this.domFocusHost) return;\n const canvas = this.eventRoot.canvas;\n if (!canvas) {\n throw new Error(\n \"FocusManagement requires an HTMLCanvasElement root; an OffscreenCanvas has no DOM focus host.\",\n );\n }\n const teardowns = new Teardowns();\n try {\n this.domFocusHost = mountDOMFocusHost(canvas, this.eventRoot, teardowns);\n this.domFocusHostTeardowns = teardowns;\n } catch (error) {\n teardowns.execute();\n throw error;\n }\n }\n\n private disposeDOMFocusHost(): void {\n this.domFocusHost = undefined;\n this.domFocusHostTeardowns?.execute();\n this.domFocusHostTeardowns = undefined;\n }\n\n private setActive(manager: PibblFocusManager | undefined): void {\n this.active = manager;\n this.eventRoot.focusPolicy = manager;\n this.domFocusHost?.setManager(manager);\n }\n\n private dispose(): void {\n if (this.disposed) return;\n this.disposed = true;\n this.active = undefined;\n this.eventRoot.focusPolicy = undefined;\n for (const manager of Array.from(this.managers)) this.destroy(manager);\n this.disposeDOMFocusHost();\n }\n}\n\nexport class PibblFocusManager implements PibblFocusPolicyBridge {\n private committedCandidates: readonly PibblFocusCandidate[] = Object.freeze([]);\n private committedHtmlCandidates: readonly PibblHtmlFocusCandidate[] =\n Object.freeze([]);\n private committedNavigationCandidates: readonly PibblNavigationCandidate[] =\n Object.freeze([]);\n private committedBoundaries = new Set<DirectionalBoundary>();\n private pending: PendingFrame | undefined;\n private transactionalPending:\n | {\n readonly transaction: PibblRenderTransaction;\n readonly frame: PendingFrame;\n }\n | undefined;\n private directionalStack: DirectionalBoundary[] = [];\n private focusedTarget: PibblEventTargetRegistration | undefined;\n private focusedHtmlRegion: HtmlFocusRegion | undefined;\n private pendingHtmlFocusModality: \"keyboard\" | \"pointer\" | undefined;\n private focusVisible = false;\n private pendingSpaceTarget: PibblEventTargetRegistration | undefined;\n private pendingPressFocus:\n { readonly target: PibblEventTargetRegistration | undefined } | undefined;\n private readonly representedPointerPresses = new Map<\n number,\n RepresentedPointerPress\n >();\n private readonly representedTouchContacts = new Map<\n number,\n RepresentedPress\n >();\n private activeTouchIdentifiers = new Set<number>();\n private primaryTouchIdentifier: number | undefined;\n private touchSequenceActive = false;\n private touchMouseCompatibility: RepresentedPress | undefined;\n private focusRenderRevision = 0;\n private readonly layerFocusRenderRevisions = new WeakMap<\n PibblInstance,\n number\n >();\n private destroyed = false;\n private ownerReleased = false;\n private readonly coordinator: FocusManagerCoordinator;\n\n constructor(\n private readonly eventRoot: PibblEventRoot,\n owner: PibblInstance,\n ) {\n const canvas = eventRoot.canvas;\n if (!canvas) {\n throw new Error(\n \"FocusManagement requires an HTMLCanvasElement root; an OffscreenCanvas has no DOM focus host.\",\n );\n }\n managerOwners.set(this, owner);\n this.coordinator = getCoordinator(eventRoot);\n try {\n this.coordinator.add(this);\n } catch (error) {\n managerOwners.delete(this);\n throw error;\n }\n }\n\n get candidates(): readonly PibblFocusCandidate[] {\n return this.committedCandidates;\n }\n\n /** @internal Full source-order list including native HtmlBox regions. */\n get navigationCandidates(): readonly PibblNavigationCandidate[] {\n return this.committedNavigationCandidates;\n }\n\n get htmlFocusRegions(): readonly HtmlFocusRegion[] {\n return this.committedHtmlCandidates.map((candidate) => candidate.region);\n }\n\n get focusedNavigationCandidate(): PibblNavigationCandidate | undefined {\n if (this.focusedHtmlRegion) {\n return this.committedHtmlCandidates.find(\n (candidate) => candidate.region === this.focusedHtmlRegion,\n );\n }\n return this.focusedTarget\n ? this.committedCandidates.find(\n (candidate) => candidate.target === this.focusedTarget,\n )\n : undefined;\n }\n\n /** @internal Resolves dynamic native eligibility at each navigation boundary. */\n isNavigationCandidateFocusable(candidate: PibblNavigationCandidate): boolean {\n return isHtmlFocusCandidate(candidate)\n ? Boolean(\n candidate.region.active &&\n candidate.region.content &&\n getManagedTabStops(candidate.region.content).length,\n )\n : Boolean(this.liveFocusCandidate(candidate.target));\n }\n\n /** Includes a successful render's collected candidates before commit callbacks settle. */\n get hasFocusCandidates(): boolean {\n return (\n this.committedNavigationCandidates.length > 0 ||\n (this.transactionalPending?.frame.targets.length ?? 0) +\n (this.transactionalPending?.frame.htmlRegions.length ?? 0) >\n 0\n );\n }\n\n get isDestroyed(): boolean {\n return this.destroyed;\n }\n\n get ownerWasReleased(): boolean {\n return this.ownerReleased;\n }\n\n get canvas(): HTMLCanvasElement {\n const canvas = this.eventRoot.canvas;\n if (!canvas) throw new Error(\"Pibbl focus manager has no DOM Canvas host.\");\n return canvas;\n }\n\n get logicalFocusTarget(): PibblEventTargetRegistration | undefined {\n return this.focusedTarget;\n }\n\n get logicalFocusVisible(): boolean {\n return this.focusVisible;\n }\n\n beginCollection(): void {\n this.assertLive();\n if (this.pending) {\n throw new Error(\"FocusManagement cannot enter twice on one Pibbl root.\");\n }\n this.coordinator.claim(this);\n this.pending = {\n entries: [],\n targets: [],\n htmlRegions: [],\n observedTargets: new Set(),\n observedHtmlRegions: new Set(),\n ineligibleTargets: new Set(),\n boundaries: new Set(this.directionalStack),\n };\n }\n\n finishCollection(success: boolean): void {\n const pending = this.pending;\n this.pending = undefined;\n if (!pending || !success || this.destroyed) return;\n\n const transaction = this.eventRoot.renderTransaction;\n if (transaction) {\n this.transactionalPending = { transaction, frame: pending };\n transaction.onFinish((transactionSucceeded) => {\n if (this.transactionalPending?.transaction === transaction) {\n this.transactionalPending = undefined;\n }\n if (transactionSucceeded && !this.destroyed) {\n this.commitCollection(pending);\n }\n });\n return;\n }\n\n this.commitCollection(pending);\n }\n\n private commitCollection(pending: PendingFrame): void {\n const collected: PibblNavigationCandidate[] = [];\n for (const [sourceIndex, observed] of pending.entries.entries()) {\n if (\"target\" in observed) {\n const target = observed.target;\n collected.push(\n Object.freeze({\n target,\n sourceIndex,\n directionalBoundary: observed.directionalBoundary,\n rootBounds: resolveTargetRootBounds(target),\n }) satisfies PibblFocusCandidate,\n );\n continue;\n }\n const region = observed.region;\n if (region.active && region.content)\n collected.push(\n Object.freeze({\n region,\n sourceIndex,\n directionalBoundary: observed.directionalBoundary,\n rootBounds: region.rootBounds,\n }) satisfies PibblHtmlFocusCandidate,\n );\n }\n const navigation = Object.freeze(collected);\n this.commitNavigationCandidates(navigation, pending.boundaries);\n const candidates = navigation.filter(\n (candidate): candidate is PibblFocusCandidate =>\n !isHtmlFocusCandidate(candidate),\n );\n for (const candidate of candidates) {\n if (candidate.directionalBoundary) {\n retainedDirectionalBoundaries.set(\n candidate.target,\n asDirectionalBoundary(candidate.directionalBoundary),\n );\n } else {\n retainedDirectionalBoundaries.delete(candidate.target);\n }\n }\n }\n\n observeTarget(target: PibblEventTargetRegistration): void {\n const pending = this.pending;\n if (!pending) return;\n if (this.pendingSpaceTarget === target && !target.handlers.click) {\n this.cancelSpaceActivation();\n }\n if (!isKeyboardFocusable(target)) {\n this.markPendingIneligible(target);\n return;\n }\n pending.ineligibleTargets.delete(target);\n this.recordPendingTarget(target, this.currentDirectionalBoundary());\n }\n\n /** @internal Collects one published HtmlBox in source order. */\n observeHtmlRegion(region: HtmlFocusRegion): void {\n const pending = this.pending;\n if (!pending || pending.observedHtmlRegions.has(region)) return;\n pending.observedHtmlRegions.add(region);\n const observed = {\n region,\n directionalBoundary: this.currentDirectionalBoundary(),\n };\n pending.htmlRegions.push(observed);\n pending.entries.push(observed);\n }\n\n /** @internal Removes an unmounted HtmlBox without manufacturing a Canvas target. */\n removeHtmlFocusRegion(region: HtmlFocusRegion): void {\n if (this.pending?.observedHtmlRegions.delete(region)) {\n this.pending.htmlRegions.splice(\n this.pending.htmlRegions.findIndex((entry) => entry.region === region),\n 1,\n );\n const index = this.pending.entries.findIndex(\n (entry) => \"region\" in entry && entry.region === region,\n );\n if (index >= 0) this.pending.entries.splice(index, 1);\n return;\n }\n if (\n !this.committedHtmlCandidates.some(\n (candidate) => candidate.region === region,\n )\n )\n return;\n const wasFocused = this.focusedHtmlRegion === region;\n const canvas = this.eventRoot.canvas;\n const shouldReturnNativeFocus = Boolean(\n wasFocused &&\n canvas &&\n !this.eventRoot.rootInstance?.mainTeardowns.closed &&\n region.content?.contains(canvas.ownerDocument.activeElement),\n );\n this.commitNavigationCandidates(\n this.committedNavigationCandidates.filter(\n (candidate) =>\n !isHtmlFocusCandidate(candidate) || candidate.region !== region,\n ),\n this.committedBoundaries,\n );\n if (shouldReturnNativeFocus && canvas) {\n this.coordinator.focusCanvasFromPress(this);\n // Canvas focus synchronously enters the ordinary DOM host. A retired\n // region must leave no logical selection behind that would turn this\n // removal into an unintended navigation action.\n this.clearFocusState();\n }\n if (wasFocused) this.clearHtmlFocus(region);\n }\n\n /** @internal Deactivates retained DOM hosts while the root has no display area. */\n suspendHtmlRegions(): void {\n if (this.committedHtmlCandidates.length === 0) return;\n const focused = this.focusedHtmlRegion;\n const canvas = this.eventRoot.canvas;\n const shouldReturnNativeFocus = Boolean(\n focused &&\n canvas &&\n !this.eventRoot.rootInstance?.mainTeardowns.closed &&\n focused.content?.contains(canvas.ownerDocument.activeElement),\n );\n this.commitNavigationCandidates(\n this.committedNavigationCandidates.filter(\n (candidate) => !isHtmlFocusCandidate(candidate),\n ),\n this.committedBoundaries,\n );\n if (shouldReturnNativeFocus && canvas) {\n this.coordinator.focusCanvasFromPress(this);\n this.clearFocusState();\n }\n if (focused) this.clearHtmlFocus(focused);\n }\n\n observeTransactionalTarget(target: PibblEventTargetRegistration): void {\n const transactional = this.transactionalPending;\n if (\n !transactional ||\n transactional.transaction !== this.eventRoot.renderTransaction\n )\n return;\n const pending = transactional.frame;\n if (this.pendingSpaceTarget === target && !target.handlers.click) {\n this.cancelSpaceActivation();\n }\n if (!isKeyboardFocusable(target)) {\n pending.ineligibleTargets.add(target);\n const index = pending.targets.findIndex(\n (candidate) => candidate.target === target,\n );\n if (index !== -1) pending.targets.splice(index, 1);\n const entryIndex = pending.entries.findIndex(\n (entry) => \"target\" in entry && entry.target === target,\n );\n if (entryIndex !== -1) pending.entries.splice(entryIndex, 1);\n pending.observedTargets.delete(target);\n return;\n }\n pending.ineligibleTargets.delete(target);\n if (pending.observedTargets.has(target)) return;\n pending.observedTargets.add(target);\n const observed = {\n target,\n directionalBoundary: this.currentDirectionalBoundary(),\n };\n pending.targets.push(observed);\n pending.entries.push(observed);\n }\n\n removeTarget(target: PibblEventTargetRegistration): void {\n if (this.pendingSpaceTarget === target) this.cancelSpaceActivation();\n if (this.pending) {\n this.markPendingIneligible(target);\n return;\n }\n if (\n !this.committedCandidates.some((candidate) => candidate.target === target)\n ) {\n if (this.focusedTarget === target) this.clearFocusState();\n return;\n }\n this.commitRemovedTarget(target);\n }\n\n snapshot(target: PibblEventTargetRegistration) {\n if (\n this.ownerReleased ||\n this.pending?.ineligibleTargets.has(target) ||\n target !== this.focusedTarget\n ) {\n return UNFOCUSED_SNAPSHOT;\n }\n return Object.freeze({\n isFocused: true,\n isFocusVisible: this.focusVisible,\n });\n }\n\n resolveKeyboardTarget(): PibblEventTargetRegistration | undefined {\n const target = this.focusedTarget;\n if (target && this.pending?.ineligibleTargets.has(target)) return undefined;\n return target &&\n this.committedCandidates.some((candidate) => candidate.target === target)\n ? target\n : undefined;\n }\n\n afterDispatch(event: PibblEvent): void {\n if (event.type === \"keydown\") {\n applyTabDefault(this, event as PibblKeyboardEvent);\n }\n if (event.type === \"keydown\" || event.type === \"keyup\") {\n applyKeyboardActivationDefault(this, event as PibblKeyboardEvent);\n }\n if (event.type === \"keydown\") {\n applyDirectionalNavigationDefault(this, event as PibblKeyboardEvent);\n }\n }\n\n afterPressDispatch(input: PibblFocusPressDefaultInput): void {\n if (this.destroyed) return;\n this.purgeExpiredPresses(input.originalEvent.timeStamp);\n switch (input.source) {\n case \"pointer\":\n this.recordPointerPress(input);\n if (!pressWasPrevented(input)) this.applyPressFocus(input.target);\n return;\n case \"mouse\":\n if (this.consumeRepresentedMousePress(input)) return;\n if (!pressWasPrevented(input)) this.applyPressFocus(input.target);\n return;\n case \"touch\":\n if (this.consumeRepresentedTouchPress(input)) return;\n this.recordTouchFallback(input);\n if (!pressWasPrevented(input)) this.applyPressFocus(input.target);\n return;\n }\n }\n\n afterTouchDispatch(input: PibblFocusTouchDefaultInput): void {\n if (this.destroyed) return;\n this.purgeExpiredPresses(input.originalEvent.timeStamp);\n this.reconcileTouchContacts(input);\n if (input.type === \"touchstart\") {\n const primary = this.recordTouchStarts(input);\n if (!primary) return;\n this.afterPressDispatch({\n source: \"touch\",\n target: primary.target,\n event: undefined,\n originalEvent: input.originalEvent,\n x: primary.x,\n y: primary.y,\n touchIdentifier: primary.identifier,\n });\n return;\n }\n if (input.type === \"touchend\" || input.type === \"touchcancel\") {\n this.recordTouchTerminals(input);\n }\n }\n\n beforeNativeDispatch(\n type: PibblEventType,\n event: Event,\n ): PibblFocusManager | undefined {\n return this.coordinator.beforeNativeDispatch(type, event);\n }\n\n enterDOMFocus(backwards: boolean): void {\n if (this.destroyed) return;\n const pendingPress = this.pendingPressFocus;\n if (pendingPress) {\n this.pendingPressFocus = undefined;\n transitionLogicalFocus(\n this,\n this.liveFocusCandidate(pendingPress.target),\n \"pointer\",\n );\n return;\n }\n const candidates = backwards\n ? [...this.committedNavigationCandidates].reverse()\n : this.committedNavigationCandidates;\n for (const candidate of candidates) {\n if (this.focusNavigationCandidate(candidate, \"keyboard\", backwards))\n return;\n }\n }\n\n leaveDOMFocus(): void {\n if (this.destroyed) return;\n this.pendingPressFocus = undefined;\n transitionLogicalFocus(this, undefined, \"keyboard\");\n }\n\n activateDOMHost(): void {\n if (!this.destroyed) this.coordinator.syncDOMFocusHost(this);\n }\n\n focusNavigationCandidate(\n candidate: PibblNavigationCandidate | undefined,\n modality: \"keyboard\" | \"pointer\",\n backwards = false,\n ): boolean {\n if (!candidate) return false;\n if (!isHtmlFocusCandidate(candidate)) {\n this.focusedHtmlRegion && this.clearHtmlFocus(this.focusedHtmlRegion);\n transitionLogicalFocus(\n this,\n this.liveFocusCandidate(candidate.target),\n modality,\n );\n return true;\n }\n const region = candidate.region;\n const content = region.active ? region.content : undefined;\n const stops = content ? getManagedTabStops(content) : [];\n const destination = backwards ? stops.at(-1) : stops[0];\n if (!destination) return false;\n if (this.focusedTarget) transitionLogicalFocus(this, undefined, modality);\n this.adoptHtmlFocus(region, modality);\n this.pendingHtmlFocusModality = modality;\n destination.focus({ preventScroll: true });\n this.pendingHtmlFocusModality = undefined;\n return true;\n }\n\n /** @internal Called by the native region listeners after the browser focuses a descendant. */\n adoptNativeHtmlFocus(\n region: HtmlFocusRegion,\n modality: \"keyboard\" | \"pointer\" | undefined,\n ): void {\n if (\n !this.committedHtmlCandidates.some(\n (candidate) => candidate.region === region,\n )\n )\n return;\n const carriedModality =\n modality ?? (this.focusVisible ? \"keyboard\" : \"pointer\");\n if (this.focusedTarget)\n transitionLogicalFocus(this, undefined, carriedModality);\n this.adoptHtmlFocus(\n region,\n this.pendingHtmlFocusModality ?? carriedModality,\n );\n }\n\n /** @internal Native blur settled outside a registered host. */\n clearNativeHtmlFocus(region: HtmlFocusRegion): void {\n if (this.focusedHtmlRegion === region) this.clearHtmlFocus(region);\n }\n\n /** @internal Reconciles a committed host list with the browser focus owner. */\n reconcileNativeHtmlFocus(region: HtmlFocusRegion | undefined): void {\n if (region) {\n this.adoptNativeHtmlFocus(region, undefined);\n } else if (this.focusedHtmlRegion) {\n this.clearHtmlFocus(this.focusedHtmlRegion);\n }\n }\n\n replayRetainedSubtree(instance: PibblInstance): void {\n const retainedManagers = this.coordinator.claimRetainedManagers(instance);\n const replayManager =\n retainedManagers.length === 1 ? retainedManagers[0] : this;\n replayManager.replayRetainedTargets(instance);\n }\n\n layerFocusRenderRevision(instance: PibblInstance): number | undefined {\n return this.ownerReleased\n ? undefined\n : this.layerFocusRenderRevisions.get(instance);\n }\n\n private replayRetainedTargets(instance: PibblInstance): void {\n // A cached Layer must replay the exact mixed source sequence from its last\n // successful render. Enumerating eventRoot.targets would lose HtmlBox\n // positions because native regions intentionally have no event target.\n const retained = this.committedNavigationCandidates.filter((candidate) =>\n isHtmlFocusCandidate(candidate)\n ? isInstanceWithin(candidate.region.owner, instance)\n : isInstanceWithin(candidate.target.owner, instance),\n );\n // Preserve the established Canvas-only replay behavior. A Canvas target\n // registration can be refreshed independently of its original collection\n // position; the mixed sequence is required only once native regions exist.\n if (!retained.some(isHtmlFocusCandidate)) {\n this.replayCanvasOnlyTargets(instance);\n return;\n }\n if (this.pending) {\n for (const candidate of retained) {\n const retainedBoundary = isHtmlFocusCandidate(candidate)\n ? candidate.directionalBoundary instanceof DirectionalBoundary &&\n isInstanceWithin(candidate.directionalBoundary.owner, instance)\n ? candidate.directionalBoundary\n : undefined\n : retainedDirectionalBoundaries.get(candidate.target);\n const directionalBoundary =\n retainedBoundary && isInstanceWithin(retainedBoundary.owner, instance)\n ? retainedBoundary\n : this.currentDirectionalBoundary();\n if (directionalBoundary) {\n this.pending.boundaries.add(directionalBoundary);\n }\n if (isHtmlFocusCandidate(candidate)) {\n const region = candidate.region;\n if (!region.active || !region.content) continue;\n if (!this.pending.observedHtmlRegions.has(region)) {\n this.pending.observedHtmlRegions.add(region);\n const observed = { region, directionalBoundary };\n this.pending.htmlRegions.push(observed);\n this.pending.entries.push(observed);\n }\n } else if (isKeyboardFocusable(candidate.target)) {\n this.recordPendingTarget(candidate.target, directionalBoundary);\n } else {\n this.markPendingIneligible(candidate.target);\n }\n }\n return;\n }\n\n if (retained.length === 0) return;\n const replayed = new Set(retained);\n const candidates = Object.freeze(\n this.committedNavigationCandidates.map((candidate) => {\n if (!replayed.has(candidate)) return candidate;\n return isHtmlFocusCandidate(candidate)\n ? Object.freeze({\n ...candidate,\n rootBounds: candidate.region.rootBounds,\n })\n : Object.freeze({\n ...candidate,\n rootBounds: resolveTargetRootBounds(candidate.target),\n });\n }),\n );\n this.commitNavigationCandidates(candidates, this.committedBoundaries);\n }\n\n private replayCanvasOnlyTargets(instance: PibblInstance): void {\n const targets: PibblEventTargetRegistration[] = [];\n collectRetainedTargets(instance, targets);\n if (this.pending) {\n for (const target of targets) {\n if (!isKeyboardFocusable(target)) {\n this.markPendingIneligible(target);\n continue;\n }\n const retainedBoundary = retainedDirectionalBoundaries.get(target);\n const directionalBoundary =\n retainedBoundary && isInstanceWithin(retainedBoundary.owner, instance)\n ? retainedBoundary\n : this.currentDirectionalBoundary();\n if (directionalBoundary)\n this.pending.boundaries.add(directionalBoundary);\n this.recordPendingTarget(target, directionalBoundary);\n }\n return;\n }\n const replayed = new Set(targets);\n if (\n !this.committedCandidates.some((candidate) =>\n replayed.has(candidate.target),\n )\n )\n return;\n const candidates = Object.freeze(\n this.committedCandidates.map((candidate) =>\n replayed.has(candidate.target)\n ? Object.freeze({\n ...candidate,\n rootBounds: resolveTargetRootBounds(candidate.target),\n })\n : candidate,\n ),\n );\n this.commitCandidates(candidates, this.committedBoundaries);\n }\n\n setFocusState(\n target: PibblEventTargetRegistration | undefined,\n focusVisible: boolean,\n ): void {\n if (\n target &&\n !this.committedCandidates.some((candidate) => candidate.target === target)\n ) {\n throw new Error(\n \"Pibbl logical focus target is not a live focus candidate.\",\n );\n }\n this.commitLogicalFocus(target, focusVisible);\n }\n\n liveFocusCandidate(\n target: PibblEventTargetRegistration | undefined,\n ): PibblEventTargetRegistration | undefined {\n return target?.live &&\n target.owner.eventRoot === this.eventRoot &&\n this.committedCandidates.some((candidate) => candidate.target === target)\n ? target\n : undefined;\n }\n\n commitLogicalFocus(\n target: PibblEventTargetRegistration | undefined,\n focusVisible: boolean,\n ): void {\n const nextFocusVisible = Boolean(target && focusVisible);\n if (\n target === this.focusedTarget &&\n nextFocusVisible === this.focusVisible\n ) {\n return;\n }\n const previous = this.focusedTarget;\n if (this.focusedTarget !== target) this.cancelSpaceActivation();\n this.focusedTarget = target;\n this.focusVisible = nextFocusVisible;\n const revision = ++this.focusRenderRevision;\n this.markFocusRenderLayers(previous, revision);\n this.markFocusRenderLayers(target, revision);\n }\n\n enterDirectionalBoundary(boundary: PibblDirectionalBoundary): void {\n const value = asDirectionalBoundary(boundary);\n this.directionalStack.push(value);\n this.pending?.boundaries.add(value);\n }\n\n exitDirectionalBoundary(boundary: PibblDirectionalBoundary): void {\n const value = asDirectionalBoundary(boundary);\n if (this.directionalStack.at(-1) !== value) {\n throw new Error(\"Pibbl directional boundary scope exited out of order.\");\n }\n this.directionalStack.pop();\n }\n\n private currentDirectionalBoundary(): DirectionalBoundary | undefined {\n return this.directionalStack.at(-1);\n }\n\n private markFocusRenderLayers(\n target: PibblEventTargetRegistration | undefined,\n revision: number,\n ): void {\n let instance = target?.owner;\n while (instance && instance !== this.eventRoot.rootInstance) {\n this.layerFocusRenderRevisions.set(instance, revision);\n instance = instance.parent\n ? GLOBAL_STATE.pibblInstances.get(instance.parent)\n : undefined;\n }\n }\n\n dispose(): void {\n if (this.ownerReleased || this.destroyed) return;\n this.coordinator.release(this);\n }\n\n markOwnerReleased(): void {\n this.ownerReleased = true;\n }\n\n destroyFromCoordinator(): void {\n if (this.destroyed) return;\n this.destroyed = true;\n managerOwners.delete(this);\n this.pending = undefined;\n this.directionalStack = [];\n this.pendingPressFocus = undefined;\n this.cancelSpaceActivation();\n this.representedPointerPresses.clear();\n this.representedTouchContacts.clear();\n this.activeTouchIdentifiers.clear();\n this.primaryTouchIdentifier = undefined;\n this.touchSequenceActive = false;\n this.touchMouseCompatibility = undefined;\n for (const boundary of this.committedBoundaries) {\n boundary.commit(Object.freeze([]));\n }\n this.committedBoundaries.clear();\n this.committedCandidates = Object.freeze([]);\n this.clearFocusState();\n }\n\n private recordPendingTarget(\n target: PibblEventTargetRegistration,\n directionalBoundary: DirectionalBoundary | undefined,\n ): void {\n const pending = this.pending;\n if (!pending || pending.observedTargets.has(target)) return;\n pending.observedTargets.add(target);\n const observed = { target, directionalBoundary };\n pending.targets.push(observed);\n pending.entries.push(observed);\n }\n\n private markPendingIneligible(target: PibblEventTargetRegistration): void {\n const pending = this.pending;\n if (!pending) return;\n pending.ineligibleTargets.add(target);\n if (!pending.observedTargets.delete(target)) return;\n for (let index = pending.targets.length - 1; index >= 0; index--) {\n if (pending.targets[index].target === target) {\n pending.targets.splice(index, 1);\n }\n }\n for (let index = pending.entries.length - 1; index >= 0; index--) {\n const entry = pending.entries[index];\n if (\"target\" in entry && entry.target === target)\n pending.entries.splice(index, 1);\n }\n }\n\n private commitCandidates(\n candidates: readonly PibblFocusCandidate[],\n boundaries: ReadonlySet<DirectionalBoundary>,\n ): void {\n const canvasByTarget = new Map(\n candidates.map((candidate) => [candidate.target, candidate]),\n );\n const navigation = this.committedNavigationCandidates\n .map((candidate) =>\n isHtmlFocusCandidate(candidate)\n ? candidate\n : (canvasByTarget.get(candidate.target) ?? candidate),\n )\n .filter(\n (candidate) =>\n isHtmlFocusCandidate(candidate) ||\n candidates.some((canvas) => canvas.target === candidate.target),\n );\n if (navigation.length === 0 && candidates.length > 0)\n navigation.push(...candidates);\n this.commitNavigationCandidates(Object.freeze(navigation), boundaries);\n }\n\n private commitNavigationCandidates(\n candidates: readonly PibblNavigationCandidate[],\n boundaries: ReadonlySet<DirectionalBoundary>,\n ): void {\n const pendingByBoundary = new Map<\n DirectionalBoundary,\n PibblNavigationCandidate[]\n >();\n for (const boundary of boundaries) pendingByBoundary.set(boundary, []);\n for (const candidate of candidates) {\n if (candidate.directionalBoundary instanceof DirectionalBoundary) {\n pendingByBoundary.get(candidate.directionalBoundary)?.push(candidate);\n }\n }\n\n // Freeze every replacement before exposing any one of them. Candidate\n // collection failures therefore leave every committed direct list intact.\n const committedByBoundary = new Map<\n DirectionalBoundary,\n readonly PibblNavigationCandidate[]\n >();\n for (const [boundary, directCandidates] of pendingByBoundary) {\n committedByBoundary.set(boundary, Object.freeze(directCandidates));\n }\n\n for (const boundary of this.committedBoundaries) {\n if (!committedByBoundary.has(boundary)) {\n boundary.commit(Object.freeze([]));\n }\n }\n for (const [boundary, directCandidates] of committedByBoundary) {\n boundary.commit(directCandidates);\n }\n this.committedBoundaries = new Set(committedByBoundary.keys());\n this.committedNavigationCandidates = candidates;\n this.committedCandidates = Object.freeze(\n candidates.filter(\n (candidate): candidate is PibblFocusCandidate =>\n !isHtmlFocusCandidate(candidate),\n ),\n );\n this.committedHtmlCandidates = Object.freeze(\n candidates.filter((candidate): candidate is PibblHtmlFocusCandidate =>\n isHtmlFocusCandidate(candidate),\n ),\n );\n if (\n this.focusedTarget &&\n !candidates.some(\n (candidate) =>\n !isHtmlFocusCandidate(candidate) &&\n candidate.target === this.focusedTarget,\n )\n ) {\n this.clearFocusState();\n }\n if (\n this.focusedHtmlRegion &&\n !this.committedHtmlCandidates.some(\n (candidate) => candidate.region === this.focusedHtmlRegion,\n )\n )\n this.clearHtmlFocus(this.focusedHtmlRegion);\n this.activateDOMHost();\n }\n\n private commitRemovedTarget(target: PibblEventTargetRegistration): void {\n const retained = this.committedCandidates.filter(\n (candidate) => candidate.target !== target,\n );\n const candidates = Object.freeze(\n retained.map((candidate, sourceIndex) =>\n Object.freeze({ ...candidate, sourceIndex }),\n ),\n );\n this.commitCandidates(candidates, this.committedBoundaries);\n }\n\n private clearFocusState(): void {\n this.cancelSpaceActivation();\n this.focusedTarget = undefined;\n this.focusVisible = false;\n }\n\n private adoptHtmlFocus(\n region: HtmlFocusRegion,\n modality: \"keyboard\" | \"pointer\",\n ): void {\n const visible = modality === \"keyboard\";\n if (this.focusedHtmlRegion === region && this.focusVisible === visible)\n return;\n const previous = this.focusedHtmlRegion;\n this.focusedHtmlRegion = region;\n this.focusVisible = visible;\n if (previous && previous !== region)\n this.notifyHtmlFocus(previous, false, false);\n this.notifyHtmlFocus(region, true, visible);\n }\n\n private clearHtmlFocus(region: HtmlFocusRegion): void {\n if (this.focusedHtmlRegion !== region) return;\n this.focusedHtmlRegion = undefined;\n this.focusVisible = false;\n this.notifyHtmlFocus(region, false, false);\n }\n\n private notifyHtmlFocus(\n region: HtmlFocusRegion,\n isFocusWithin: boolean,\n isFocusVisible: boolean,\n ): void {\n region.onFocusSnapshot?.(Object.freeze({ isFocusWithin, isFocusVisible }));\n }\n\n private applyPressFocus(\n requestedTarget: PibblEventTargetRegistration | undefined,\n ): void {\n const target = this.liveFocusCandidate(requestedTarget);\n const pending = { target };\n this.pendingPressFocus = pending;\n try {\n this.coordinator.focusCanvasFromPress(this);\n if (\n this.pendingPressFocus !== pending ||\n this.destroyed ||\n this.canvas.ownerDocument.activeElement !== this.canvas\n ) {\n return;\n }\n this.pendingPressFocus = undefined;\n transitionLogicalFocus(this, this.liveFocusCandidate(target), \"pointer\");\n } finally {\n if (this.pendingPressFocus === pending)\n this.pendingPressFocus = undefined;\n }\n }\n\n beginSpaceActivation(target: PibblEventTargetRegistration): void {\n this.pendingSpaceTarget = target;\n }\n\n hasPendingSpaceActivation(\n target: PibblEventTargetRegistration | undefined,\n ): boolean {\n return Boolean(target && this.pendingSpaceTarget === target);\n }\n\n consumeSpaceActivation(): PibblEventTargetRegistration | undefined {\n const target = this.pendingSpaceTarget;\n this.pendingSpaceTarget = undefined;\n return target;\n }\n\n cancelSpaceActivation(): void {\n this.pendingSpaceTarget = undefined;\n }\n\n private recordPointerPress(input: PibblFocusPressDefaultInput): void {\n if (input.pointerId === undefined) return;\n this.representedPointerPresses.set(input.pointerId, {\n x: input.x,\n y: input.y,\n timeStamp: input.originalEvent.timeStamp,\n suppressMouse: true,\n suppressTouch: input.pointerType === \"touch\",\n });\n }\n\n private consumeRepresentedMousePress(\n input: PibblFocusPressDefaultInput,\n ): boolean {\n for (const [pointerId, press] of this.representedPointerPresses) {\n if (!press.suppressMouse || !samePress(press, input)) continue;\n press.suppressMouse = false;\n if (!press.suppressTouch)\n this.representedPointerPresses.delete(pointerId);\n return true;\n }\n if (\n this.touchMouseCompatibility &&\n samePress(this.touchMouseCompatibility, input)\n ) {\n this.touchMouseCompatibility = undefined;\n return true;\n }\n return false;\n }\n\n private consumeRepresentedTouchPress(\n input: PibblFocusPressDefaultInput,\n ): boolean {\n const identifier = input.touchIdentifier;\n if (identifier === undefined) return false;\n const existing = this.representedTouchContacts.get(identifier);\n if (existing && samePress(existing, input)) return true;\n this.representedTouchContacts.set(identifier, pressRecord(input));\n\n for (const [pointerId, press] of this.representedPointerPresses) {\n if (!press.suppressTouch || !samePress(press, input)) continue;\n press.suppressTouch = false;\n if (!press.suppressMouse)\n this.representedPointerPresses.delete(pointerId);\n return true;\n }\n return false;\n }\n\n private recordTouchFallback(input: PibblFocusPressDefaultInput): void {\n this.touchMouseCompatibility = pressRecord(input);\n }\n\n private recordTouchStarts(\n input: PibblFocusTouchDefaultInput,\n ): PibblFocusTouchDefaultContact | undefined {\n let primary: PibblFocusTouchDefaultContact | undefined;\n for (const contact of input.changedContacts) {\n if (this.activeTouchIdentifiers.has(contact.identifier)) continue;\n if (!this.touchSequenceActive) {\n this.touchSequenceActive = true;\n this.primaryTouchIdentifier = contact.identifier;\n }\n if (contact.identifier === this.primaryTouchIdentifier) primary = contact;\n this.activeTouchIdentifiers.add(contact.identifier);\n }\n return primary;\n }\n\n private reconcileTouchContacts(input: PibblFocusTouchDefaultInput): void {\n const activeIdentifiers = new Set(input.activeIdentifiers);\n for (const identifier of this.activeTouchIdentifiers) {\n if (activeIdentifiers.has(identifier)) continue;\n this.activeTouchIdentifiers.delete(identifier);\n this.representedTouchContacts.delete(identifier);\n }\n\n const startingIdentifiers =\n input.type === \"touchstart\"\n ? new Set(input.changedContacts.map((contact) => contact.identifier))\n : undefined;\n for (const identifier of activeIdentifiers) {\n if (!startingIdentifiers?.has(identifier)) {\n this.activeTouchIdentifiers.add(identifier);\n }\n }\n\n if (this.activeTouchIdentifiers.size > 0) {\n this.touchSequenceActive = true;\n return;\n }\n this.touchSequenceActive = false;\n this.primaryTouchIdentifier = undefined;\n this.representedTouchContacts.clear();\n }\n\n private recordTouchTerminals(input: PibblFocusTouchDefaultInput): void {\n for (const contact of input.changedContacts) {\n this.activeTouchIdentifiers.delete(contact.identifier);\n this.representedTouchContacts.delete(contact.identifier);\n }\n if (this.activeTouchIdentifiers.size > 0) return;\n this.touchSequenceActive = false;\n this.primaryTouchIdentifier = undefined;\n this.representedTouchContacts.clear();\n }\n\n private purgeExpiredPresses(timeStamp: number): void {\n for (const [pointerId, press] of this.representedPointerPresses) {\n if (!recentPress(press, timeStamp)) {\n this.representedPointerPresses.delete(pointerId);\n }\n }\n for (const [identifier, press] of this.representedTouchContacts) {\n if (!recentPress(press, timeStamp)) {\n this.representedTouchContacts.delete(identifier);\n }\n }\n if (\n this.touchMouseCompatibility &&\n !recentPress(this.touchMouseCompatibility, timeStamp)\n ) {\n this.touchMouseCompatibility = undefined;\n }\n }\n\n private assertLive(): void {\n if (this.destroyed) throw new Error(\"Pibbl focus manager is disposed.\");\n }\n}\n\nfunction pressWasPrevented(input: PibblFocusPressDefaultInput): boolean {\n return input.event?.defaultPrevented ?? input.originalEvent.defaultPrevented;\n}\n\nfunction pressRecord(input: PibblFocusPressDefaultInput): RepresentedPress {\n return {\n x: input.x,\n y: input.y,\n timeStamp: input.originalEvent.timeStamp,\n };\n}\n\nfunction samePress(\n press: RepresentedPress,\n input: PibblFocusPressDefaultInput,\n): boolean {\n return (\n recentPress(press, input.originalEvent.timeStamp) &&\n Math.abs(press.x - input.x) <= 1 &&\n Math.abs(press.y - input.y) <= 1\n );\n}\n\nfunction recentPress(press: RepresentedPress, timeStamp: number): boolean {\n const elapsed = timeStamp - press.timeStamp;\n return elapsed >= 0 && elapsed <= COMPATIBILITY_PRESS_WINDOW_MS;\n}\n\nexport function createFocusManager(\n eventRoot: PibblEventRoot,\n owner: PibblInstance,\n): PibblFocusManager {\n return new PibblFocusManager(eventRoot, owner);\n}\n\nexport function requireFocusManager(eventRoot: PibblEventRoot): PibblFocusManager {\n const manager = eventRoot.focusPolicy;\n if (!(manager instanceof PibblFocusManager)) {\n throw new Error(\n \"KeyboardNavigation requires an active FocusManagement focus manager.\",\n );\n }\n return manager;\n}\n\nexport function createDirectionalBoundary(\n owner: PibblInstance,\n): PibblDirectionalBoundary {\n return new DirectionalBoundary(owner);\n}\n\nfunction getCoordinator(eventRoot: PibblEventRoot): FocusManagerCoordinator {\n let coordinator = coordinators.get(eventRoot);\n if (!coordinator) {\n coordinator = new FocusManagerCoordinator(eventRoot);\n coordinators.set(eventRoot, coordinator);\n }\n return coordinator;\n}\n\nfunction duplicateManagerError(): Error {\n return new Error(\n \"FocusManagement allows only one focus manager per Pibbl root.\",\n );\n}\n\nfunction asDirectionalBoundary(\n boundary: PibblDirectionalBoundary,\n): DirectionalBoundary {\n if (!(boundary instanceof DirectionalBoundary)) {\n throw new Error(\"Unknown Pibbl directional boundary.\");\n }\n return boundary;\n}\n\nfunction isKeyboardFocusable(target: PibblEventTargetRegistration): boolean {\n return (\n target.keyboardFocusable ??\n Boolean(\n target.handlers.click || target.handlers.keydown || target.handlers.keyup,\n )\n );\n}\n\nfunction collectRetainedTargets(\n instance: PibblInstance,\n targets: PibblEventTargetRegistration[],\n): void {\n if (instance.mainTeardowns.closed) return;\n for (const target of instance.eventRoot.targets) {\n if (\n target.live &&\n target.owner.eventRoot === instance.eventRoot &&\n !target.owner.mainTeardowns.closed &&\n isInstanceWithin(target.owner, instance)\n )\n targets.push(target);\n }\n}\n\nfunction isInstanceWithin(\n instance: PibblInstance,\n ancestor: PibblInstance,\n): boolean {\n let current: PibblInstance | undefined = instance;\n while (current) {\n if (current === ancestor) return true;\n current = current.parent\n ? GLOBAL_STATE.pibblInstances.get(current.parent)\n : undefined;\n }\n return false;\n}\n"],
5
- "mappings": "AACA,SAAS,oBAAoB;AAM7B,SAAS,iBAAiB;AAU1B,SAAS,+BAA+B;AACxC;AAAA,EACE;AAAA,OAEK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,8BAA8B;AAEvC;AAAA,EACE;AAAA,OAKK;AACP,SAAS,0BAA0B;AAEnC,MAAM,qBAAqB,OAAO,OAAO;AAAA,EACvC,WAAW;AAAA,EACX,gBAAgB;AAClB,CAAC;AAED,MAAM,gCAAgC,oBAAI,QAGxC;AACF,MAAM,eAAe,oBAAI,QAAiD;AAC1E,MAAM,gBAAgB,oBAAI,QAA0C;AAiCpE,MAAM,gCAAgC;AAEtC,MAAM,oBAAwD;AAAA,EAI5D,YAAqB,OAAsB;AAAtB;AAAA,EAAuB;AAAA,EAAvB;AAAA,EAHb,sBACN,OAAO,OAAO,CAAC,CAAC;AAAA,EAIlB,IAAI,aAAkD;AACpD,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,OAAO,YAAuD;AAC5D,SAAK,sBAAsB;AAAA,EAC7B;AACF;AAWA,MAAM,wBAAwB;AAAA,EAW5B,YAA6B,WAA2B;AAA3B;AAC3B,cAAU,cAAc,cAAc,IAAI,MAAM,KAAK,QAAQ,CAAC;AAAA,EAChE;AAAA,EAF6B;AAAA,EAVZ,WAAW,oBAAI,IAAuB;AAAA,EACtC,eAAe,oBAAI,QAGlC;AAAA,EACM;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EAMnB,IAAI,SAAkC;AACpC,QAAI,KAAK,UAAU;AACjB,YAAM,IAAI,MAAM,uCAAuC;AAAA,IACzD;AACA,SAAK,mBAAmB;AACxB,SAAK,SAAS,IAAI,OAAO;AACzB,UAAM,cAAc,KAAK,UAAU;AACnC,QAAI,aAAa;AACf,YAAM,QAAQ,KAAK,SAAS,WAAW;AACvC,YAAM,WAAW;AAIjB,WAAK,UAAU,cAAc;AAAA,IAC/B;AAAA,EACF;AAAA,EAEA,MAAM,SAAkC;AACtC,UAAM,cAAc,KAAK,UAAU;AACnC,QAAI,CAAC,aAAa;AAChB,UAAI,KAAK,UAAU,KAAK,WAAW,SAAS;AAC1C,cAAM,sBAAsB;AAAA,MAC9B;AACA,WAAK,UAAU,OAAO;AACtB;AAAA,IACF;AAEA,UAAM,QAAQ,KAAK,SAAS,WAAW;AACvC,QAAI,MAAM,WAAW,MAAM,YAAY,SAAS;AAC9C,YAAM,sBAAsB;AAAA,IAC9B;AACA,UAAM,UAAU;AAChB,SAAK,UAAU,cAAc;AAAA,EAC/B;AAAA,EAEA,qBACE,MACA,OAC+B;AAC/B,UAAM,UAAU,KAAK;AACrB,UAAM,oBACJ,KAAK,cAAc,qBAAqB,MAAM,KAAK,KAAK;AAC1D,WAAO,qBAAqB,WAAW,CAAC,QAAQ,cAC5C,UACA;AAAA,EACN;AAAA,EAEA,iBAAiB,SAAkC;AACjD,QAAI,KAAK,WAAW,SAAS;AAC3B,WAAK,cAAc,0BAA0B,QAAQ,kBAAkB;AACvE,WAAK,cAAc,gBAAgB,QAAQ,gBAAgB;AAAA,IAC7D;AAAA,EACF;AAAA,EAEA,qBAAqB,SAAkC;AACrD,QAAI,KAAK,WAAW,QAAS,MAAK,cAAc,eAAe;AAAA,EACjE;AAAA,EAEA,sBAAsB,UAAuD;AAC3E,UAAM,WAAW,MAAM,KAAK,KAAK,QAAQ,EAAE,OAAO,CAAC,YAAY;AAC7D,YAAM,QAAQ,cAAc,IAAI,OAAO;AACvC,aACE,CAAC,QAAQ,eACT,CAAC,QAAQ,oBACT,UAAU,UACV,iBAAiB,OAAO,QAAQ;AAAA,IAEpC,CAAC;AACD,UAAM,cAAc,KAAK,UAAU;AACnC,QAAI,CAAC,aAAa;AAChB,iBAAW,WAAW,SAAU,MAAK,MAAM,OAAO;AAClD,aAAO;AAAA,IACT;AAEA,UAAM,QAAQ,KAAK,SAAS,WAAW;AACvC,eAAW,WAAW,UAAU;AAC9B,UAAI,MAAM,iBAAiB,IAAI,OAAO,EAAG;AACzC,YAAM,iBAAiB,IAAI,OAAO;AAClC,WAAK,MAAM,OAAO;AAAA,IACpB;AACA,WAAO;AAAA,EACT;AAAA,EAEA,QAAQ,SAAkC;AACxC,QAAI,QAAQ,YAAa;AACzB,YAAQ,kBAAkB;AAC1B,UAAM,cAAc,KAAK,UAAU;AACnC,QAAI,aAAa;AACf,YAAM,QAAQ,KAAK,SAAS,WAAW;AACvC,UAAI,CAAC,MAAM,SAAU;AAAA,IACvB;AACA,QAAI,KAAK,WAAW,SAAS;AAC3B,WAAK,UAAU,MAAS;AAAA,IAC1B;AACA,SAAK,QAAQ,OAAO;AAAA,EACtB;AAAA,EAEQ,SAAS,aAA4D;AAC3E,UAAM,WAAW,KAAK,aAAa,IAAI,WAAW;AAClD,QAAI,SAAU,QAAO;AACrB,UAAM,QAA+B;AAAA,MACnC,OAAO,KAAK;AAAA,MACZ,kBAAkB,oBAAI,IAAI;AAAA,MAC1B,UAAU;AAAA,MACV,SAAS;AAAA,MACT,UAAU;AAAA,MACV,UAAU;AAAA,IACZ;AACA,SAAK,aAAa,IAAI,aAAa,KAAK;AACxC,gBAAY,SAAS,CAAC,YAAY,KAAK,kBAAkB,OAAO,OAAO,CAAC;AACxE,WAAO;AAAA,EACT;AAAA,EAEQ,kBACN,OACA,SACM;AACN,QAAI,MAAM,SAAU;AACpB,UAAM,WAAW;AACjB,QAAI,SAAS;AACX,UAAI,MAAM,SAAS;AACjB,aAAK,SAAS,MAAM;AAAA,MACtB,WAAW,KAAK,QAAQ,kBAAkB;AACxC,aAAK,SAAS;AAAA,MAChB;AACA,WAAK,UAAU,cAAc,KAAK;AAClC,iBAAW,WAAW,MAAM,KAAK,KAAK,QAAQ,GAAG;AAC/C,YAAI,YAAY,KAAK,UAAU,QAAQ,kBAAkB;AACvD,eAAK,QAAQ,OAAO;AAAA,QACtB;AAAA,MACF;AACA,WAAK,cAAc,WAAW,KAAK,MAAM;AACzC;AAAA,IACF;AAEA,UAAM,uBACH,MAAM,WAAW,MAAM,YAAY,MAAM,SACzC,MAAM,YAAY,MAAM,aAAa,MAAM;AAC9C,UAAM,WACJ,MAAM,SAAS,wBAAwB,CAAC,MAAM,MAAM,cAChD,MAAM,QACN;AACN,UAAM,WAAW;AACjB,SAAK,SAAS;AACd,SAAK,UAAU,cAAc;AAC7B,eAAW,WAAW,MAAM,KAAK,KAAK,QAAQ,GAAG;AAC/C,UAAI,YAAY,SAAU,MAAK,QAAQ,OAAO;AAAA,IAChD;AACA,SAAK,cAAc,WAAW,QAAQ;AAAA,EACxC;AAAA,EAEQ,QAAQ,SAAkC;AAChD,SAAK,SAAS,OAAO,OAAO;AAC5B,YAAQ,uBAAuB;AAC/B,QAAI,KAAK,SAAS,SAAS,EAAG,MAAK,oBAAoB;AAAA,EACzD;AAAA,EAEQ,qBAA2B;AACjC,QAAI,KAAK,aAAc;AACvB,UAAM,SAAS,KAAK,UAAU;AAC9B,QAAI,CAAC,QAAQ;AACX,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AACA,UAAM,YAAY,IAAI,UAAU;AAChC,QAAI;AACF,WAAK,eAAe,kBAAkB,QAAQ,KAAK,WAAW,SAAS;AACvE,WAAK,wBAAwB;AAAA,IAC/B,SAAS,OAAO;AACd,gBAAU,QAAQ;AAClB,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEQ,sBAA4B;AAClC,SAAK,eAAe;AACpB,SAAK,uBAAuB,QAAQ;AACpC,SAAK,wBAAwB;AAAA,EAC/B;AAAA,EAEQ,UAAU,SAA8C;AAC9D,SAAK,SAAS;AACd,SAAK,UAAU,cAAc;AAC7B,SAAK,cAAc,WAAW,OAAO;AAAA,EACvC;AAAA,EAEQ,UAAgB;AACtB,QAAI,KAAK,SAAU;AACnB,SAAK,WAAW;AAChB,SAAK,SAAS;AACd,SAAK,UAAU,cAAc;AAC7B,eAAW,WAAW,MAAM,KAAK,KAAK,QAAQ,EAAG,MAAK,QAAQ,OAAO;AACrE,SAAK,oBAAoB;AAAA,EAC3B;AACF;AAEO,MAAM,kBAAoD;AAAA,EA2C/D,YACmB,WACjB,OACA;AAFiB;AAGjB,UAAM,SAAS,UAAU;AACzB,QAAI,CAAC,QAAQ;AACX,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AACA,kBAAc,IAAI,MAAM,KAAK;AAC7B,SAAK,cAAc,eAAe,SAAS;AAC3C,QAAI;AACF,WAAK,YAAY,IAAI,IAAI;AAAA,IAC3B,SAAS,OAAO;AACd,oBAAc,OAAO,IAAI;AACzB,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAjBmB;AAAA,EA3CX,sBAAsD,OAAO,OAAO,CAAC,CAAC;AAAA,EACtE,0BACN,OAAO,OAAO,CAAC,CAAC;AAAA,EACV,gCACN,OAAO,OAAO,CAAC,CAAC;AAAA,EACV,sBAAsB,oBAAI,IAAyB;AAAA,EACnD;AAAA,EACA;AAAA,EAMA,mBAA0C,CAAC;AAAA,EAC3C;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf;AAAA,EACA;AAAA,EAES,4BAA4B,oBAAI,IAG/C;AAAA,EACe,2BAA2B,oBAAI,IAG9C;AAAA,EACM,yBAAyB,oBAAI,IAAY;AAAA,EACzC;AAAA,EACA,sBAAsB;AAAA,EACtB;AAAA,EACA,sBAAsB;AAAA,EACb,4BAA4B,oBAAI,QAG/C;AAAA,EACM,YAAY;AAAA,EACZ,gBAAgB;AAAA,EACP;AAAA,EAsBjB,IAAI,aAA6C;AAC/C,WAAO,KAAK;AAAA,EACd;AAAA;AAAA,EAGA,IAAI,uBAA4D;AAC9D,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,mBAA+C;AACjD,WAAO,KAAK,wBAAwB,IAAI,CAAC,cAAc,UAAU,MAAM;AAAA,EACzE;AAAA,EAEA,IAAI,6BAAmE;AACrE,QAAI,KAAK,mBAAmB;AAC1B,aAAO,KAAK,wBAAwB;AAAA,QAClC,CAAC,cAAc,UAAU,WAAW,KAAK;AAAA,MAC3C;AAAA,IACF;AACA,WAAO,KAAK,gBACR,KAAK,oBAAoB;AAAA,MACvB,CAAC,cAAc,UAAU,WAAW,KAAK;AAAA,IAC3C,IACA;AAAA,EACN;AAAA;AAAA,EAGA,+BAA+B,WAA8C;AAC3E,WAAO,qBAAqB,SAAS,IACjC;AAAA,MACE,UAAU,OAAO,UACjB,UAAU,OAAO,WACjB,mBAAmB,UAAU,OAAO,OAAO,EAAE;AAAA,IAC/C,IACA,QAAQ,KAAK,mBAAmB,UAAU,MAAM,CAAC;AAAA,EACvD;AAAA;AAAA,EAGA,IAAI,qBAA8B;AAChC,WACE,KAAK,8BAA8B,SAAS,MAC3C,KAAK,sBAAsB,MAAM,QAAQ,UAAU,MACjD,KAAK,sBAAsB,MAAM,YAAY,UAAU,KACxD;AAAA,EAEN;AAAA,EAEA,IAAI,cAAuB;AACzB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,mBAA4B;AAC9B,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,SAA4B;AAC9B,UAAM,SAAS,KAAK,UAAU;AAC9B,QAAI,CAAC,OAAQ,OAAM,IAAI,MAAM,6CAA6C;AAC1E,WAAO;AAAA,EACT;AAAA,EAEA,IAAI,qBAA+D;AACjE,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,sBAA+B;AACjC,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,kBAAwB;AACtB,SAAK,WAAW;AAChB,QAAI,KAAK,SAAS;AAChB,YAAM,IAAI,MAAM,uDAAuD;AAAA,IACzE;AACA,SAAK,YAAY,MAAM,IAAI;AAC3B,SAAK,UAAU;AAAA,MACb,SAAS,CAAC;AAAA,MACV,SAAS,CAAC;AAAA,MACV,aAAa,CAAC;AAAA,MACd,iBAAiB,oBAAI,IAAI;AAAA,MACzB,qBAAqB,oBAAI,IAAI;AAAA,MAC7B,mBAAmB,oBAAI,IAAI;AAAA,MAC3B,YAAY,IAAI,IAAI,KAAK,gBAAgB;AAAA,IAC3C;AAAA,EACF;AAAA,EAEA,iBAAiB,SAAwB;AACvC,UAAM,UAAU,KAAK;AACrB,SAAK,UAAU;AACf,QAAI,CAAC,WAAW,CAAC,WAAW,KAAK,UAAW;AAE5C,UAAM,cAAc,KAAK,UAAU;AACnC,QAAI,aAAa;AACf,WAAK,uBAAuB,EAAE,aAAa,OAAO,QAAQ;AAC1D,kBAAY,SAAS,CAAC,yBAAyB;AAC7C,YAAI,KAAK,sBAAsB,gBAAgB,aAAa;AAC1D,eAAK,uBAAuB;AAAA,QAC9B;AACA,YAAI,wBAAwB,CAAC,KAAK,WAAW;AAC3C,eAAK,iBAAiB,OAAO;AAAA,QAC/B;AAAA,MACF,CAAC;AACD;AAAA,IACF;AAEA,SAAK,iBAAiB,OAAO;AAAA,EAC/B;AAAA,EAEQ,iBAAiB,SAA6B;AACpD,UAAM,YAAwC,CAAC;AAC/C,eAAW,CAAC,aAAa,QAAQ,KAAK,QAAQ,QAAQ,QAAQ,GAAG;AAC/D,UAAI,YAAY,UAAU;AACxB,cAAM,SAAS,SAAS;AACxB,kBAAU;AAAA,UACR,OAAO,OAAO;AAAA,YACZ;AAAA,YACA;AAAA,YACA,qBAAqB,SAAS;AAAA,YAC9B,YAAY,wBAAwB,MAAM;AAAA,UAC5C,CAAC;AAAA,QACH;AACA;AAAA,MACF;AACA,YAAM,SAAS,SAAS;AACxB,UAAI,OAAO,UAAU,OAAO;AAC1B,kBAAU;AAAA,UACR,OAAO,OAAO;AAAA,YACZ;AAAA,YACA;AAAA,YACA,qBAAqB,SAAS;AAAA,YAC9B,YAAY,OAAO;AAAA,UACrB,CAAC;AAAA,QACH;AAAA,IACJ;AACA,UAAM,aAAa,OAAO,OAAO,SAAS;AAC1C,SAAK,2BAA2B,YAAY,QAAQ,UAAU;AAC9D,UAAM,aAAa,WAAW;AAAA,MAC5B,CAAC,cACC,CAAC,qBAAqB,SAAS;AAAA,IACnC;AACA,eAAW,aAAa,YAAY;AAClC,UAAI,UAAU,qBAAqB;AACjC,sCAA8B;AAAA,UAC5B,UAAU;AAAA,UACV,sBAAsB,UAAU,mBAAmB;AAAA,QACrD;AAAA,MACF,OAAO;AACL,sCAA8B,OAAO,UAAU,MAAM;AAAA,MACvD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,cAAc,QAA4C;AACxD,UAAM,UAAU,KAAK;AACrB,QAAI,CAAC,QAAS;AACd,QAAI,KAAK,uBAAuB,UAAU,CAAC,OAAO,SAAS,OAAO;AAChE,WAAK,sBAAsB;AAAA,IAC7B;AACA,QAAI,CAAC,oBAAoB,MAAM,GAAG;AAChC,WAAK,sBAAsB,MAAM;AACjC;AAAA,IACF;AACA,YAAQ,kBAAkB,OAAO,MAAM;AACvC,SAAK,oBAAoB,QAAQ,KAAK,2BAA2B,CAAC;AAAA,EACpE;AAAA;AAAA,EAGA,kBAAkB,QAA+B;AAC/C,UAAM,UAAU,KAAK;AACrB,QAAI,CAAC,WAAW,QAAQ,oBAAoB,IAAI,MAAM,EAAG;AACzD,YAAQ,oBAAoB,IAAI,MAAM;AACtC,UAAM,WAAW;AAAA,MACf;AAAA,MACA,qBAAqB,KAAK,2BAA2B;AAAA,IACvD;AACA,YAAQ,YAAY,KAAK,QAAQ;AACjC,YAAQ,QAAQ,KAAK,QAAQ;AAAA,EAC/B;AAAA;AAAA,EAGA,sBAAsB,QAA+B;AACnD,QAAI,KAAK,SAAS,oBAAoB,OAAO,MAAM,GAAG;AACpD,WAAK,QAAQ,YAAY;AAAA,QACvB,KAAK,QAAQ,YAAY,UAAU,CAAC,UAAU,MAAM,WAAW,MAAM;AAAA,QACrE;AAAA,MACF;AACA,YAAM,QAAQ,KAAK,QAAQ,QAAQ;AAAA,QACjC,CAAC,UAAU,YAAY,SAAS,MAAM,WAAW;AAAA,MACnD;AACA,UAAI,SAAS,EAAG,MAAK,QAAQ,QAAQ,OAAO,OAAO,CAAC;AACpD;AAAA,IACF;AACA,QACE,CAAC,KAAK,wBAAwB;AAAA,MAC5B,CAAC,cAAc,UAAU,WAAW;AAAA,IACtC;AAEA;AACF,UAAM,aAAa,KAAK,sBAAsB;AAC9C,UAAM,SAAS,KAAK,UAAU;AAC9B,UAAM,0BAA0B;AAAA,MAC9B,cACA,UACA,CAAC,KAAK,UAAU,cAAc,cAAc,UAC5C,OAAO,SAAS,SAAS,OAAO,cAAc,aAAa;AAAA,IAC7D;AACA,SAAK;AAAA,MACH,KAAK,8BAA8B;AAAA,QACjC,CAAC,cACC,CAAC,qBAAqB,SAAS,KAAK,UAAU,WAAW;AAAA,MAC7D;AAAA,MACA,KAAK;AAAA,IACP;AACA,QAAI,2BAA2B,QAAQ;AACrC,WAAK,YAAY,qBAAqB,IAAI;AAI1C,WAAK,gBAAgB;AAAA,IACvB;AACA,QAAI,WAAY,MAAK,eAAe,MAAM;AAAA,EAC5C;AAAA;AAAA,EAGA,qBAA2B;AACzB,QAAI,KAAK,wBAAwB,WAAW,EAAG;AAC/C,UAAM,UAAU,KAAK;AACrB,UAAM,SAAS,KAAK,UAAU;AAC9B,UAAM,0BAA0B;AAAA,MAC9B,WACA,UACA,CAAC,KAAK,UAAU,cAAc,cAAc,UAC5C,QAAQ,SAAS,SAAS,OAAO,cAAc,aAAa;AAAA,IAC9D;AACA,SAAK;AAAA,MACH,KAAK,8BAA8B;AAAA,QACjC,CAAC,cAAc,CAAC,qBAAqB,SAAS;AAAA,MAChD;AAAA,MACA,KAAK;AAAA,IACP;AACA,QAAI,2BAA2B,QAAQ;AACrC,WAAK,YAAY,qBAAqB,IAAI;AAC1C,WAAK,gBAAgB;AAAA,IACvB;AACA,QAAI,QAAS,MAAK,eAAe,OAAO;AAAA,EAC1C;AAAA,EAEA,2BAA2B,QAA4C;AACrE,UAAM,gBAAgB,KAAK;AAC3B,QACE,CAAC,iBACD,cAAc,gBAAgB,KAAK,UAAU;AAE7C;AACF,UAAM,UAAU,cAAc;AAC9B,QAAI,KAAK,uBAAuB,UAAU,CAAC,OAAO,SAAS,OAAO;AAChE,WAAK,sBAAsB;AAAA,IAC7B;AACA,QAAI,CAAC,oBAAoB,MAAM,GAAG;AAChC,cAAQ,kBAAkB,IAAI,MAAM;AACpC,YAAM,QAAQ,QAAQ,QAAQ;AAAA,QAC5B,CAAC,cAAc,UAAU,WAAW;AAAA,MACtC;AACA,UAAI,UAAU,GAAI,SAAQ,QAAQ,OAAO,OAAO,CAAC;AACjD,YAAM,aAAa,QAAQ,QAAQ;AAAA,QACjC,CAAC,UAAU,YAAY,SAAS,MAAM,WAAW;AAAA,MACnD;AACA,UAAI,eAAe,GAAI,SAAQ,QAAQ,OAAO,YAAY,CAAC;AAC3D,cAAQ,gBAAgB,OAAO,MAAM;AACrC;AAAA,IACF;AACA,YAAQ,kBAAkB,OAAO,MAAM;AACvC,QAAI,QAAQ,gBAAgB,IAAI,MAAM,EAAG;AACzC,YAAQ,gBAAgB,IAAI,MAAM;AAClC,UAAM,WAAW;AAAA,MACf;AAAA,MACA,qBAAqB,KAAK,2BAA2B;AAAA,IACvD;AACA,YAAQ,QAAQ,KAAK,QAAQ;AAC7B,YAAQ,QAAQ,KAAK,QAAQ;AAAA,EAC/B;AAAA,EAEA,aAAa,QAA4C;AACvD,QAAI,KAAK,uBAAuB,OAAQ,MAAK,sBAAsB;AACnE,QAAI,KAAK,SAAS;AAChB,WAAK,sBAAsB,MAAM;AACjC;AAAA,IACF;AACA,QACE,CAAC,KAAK,oBAAoB,KAAK,CAAC,cAAc,UAAU,WAAW,MAAM,GACzE;AACA,UAAI,KAAK,kBAAkB,OAAQ,MAAK,gBAAgB;AACxD;AAAA,IACF;AACA,SAAK,oBAAoB,MAAM;AAAA,EACjC;AAAA,EAEA,SAAS,QAAsC;AAC7C,QACE,KAAK,iBACL,KAAK,SAAS,kBAAkB,IAAI,MAAM,KAC1C,WAAW,KAAK,eAChB;AACA,aAAO;AAAA,IACT;AACA,WAAO,OAAO,OAAO;AAAA,MACnB,WAAW;AAAA,MACX,gBAAgB,KAAK;AAAA,IACvB,CAAC;AAAA,EACH;AAAA,EAEA,wBAAkE;AAChE,UAAM,SAAS,KAAK;AACpB,QAAI,UAAU,KAAK,SAAS,kBAAkB,IAAI,MAAM,EAAG,QAAO;AAClE,WAAO,UACL,KAAK,oBAAoB,KAAK,CAAC,cAAc,UAAU,WAAW,MAAM,IACtE,SACA;AAAA,EACN;AAAA,EAEA,cAAc,OAAyB;AACrC,QAAI,MAAM,SAAS,WAAW;AAC5B,sBAAgB,MAAM,KAA2B;AAAA,IACnD;AACA,QAAI,MAAM,SAAS,aAAa,MAAM,SAAS,SAAS;AACtD,qCAA+B,MAAM,KAA2B;AAAA,IAClE;AACA,QAAI,MAAM,SAAS,WAAW;AAC5B,wCAAkC,MAAM,KAA2B;AAAA,IACrE;AAAA,EACF;AAAA,EAEA,mBAAmB,OAA0C;AAC3D,QAAI,KAAK,UAAW;AACpB,SAAK,oBAAoB,MAAM,cAAc,SAAS;AACtD,YAAQ,MAAM,QAAQ;AAAA,MACpB,KAAK;AACH,aAAK,mBAAmB,KAAK;AAC7B,YAAI,CAAC,kBAAkB,KAAK,EAAG,MAAK,gBAAgB,MAAM,MAAM;AAChE;AAAA,MACF,KAAK;AACH,YAAI,KAAK,6BAA6B,KAAK,EAAG;AAC9C,YAAI,CAAC,kBAAkB,KAAK,EAAG,MAAK,gBAAgB,MAAM,MAAM;AAChE;AAAA,MACF,KAAK;AACH,YAAI,KAAK,6BAA6B,KAAK,EAAG;AAC9C,aAAK,oBAAoB,KAAK;AAC9B,YAAI,CAAC,kBAAkB,KAAK,EAAG,MAAK,gBAAgB,MAAM,MAAM;AAChE;AAAA,IACJ;AAAA,EACF;AAAA,EAEA,mBAAmB,OAA0C;AAC3D,QAAI,KAAK,UAAW;AACpB,SAAK,oBAAoB,MAAM,cAAc,SAAS;AACtD,SAAK,uBAAuB,KAAK;AACjC,QAAI,MAAM,SAAS,cAAc;AAC/B,YAAM,UAAU,KAAK,kBAAkB,KAAK;AAC5C,UAAI,CAAC,QAAS;AACd,WAAK,mBAAmB;AAAA,QACtB,QAAQ;AAAA,QACR,QAAQ,QAAQ;AAAA,QAChB,OAAO;AAAA,QACP,eAAe,MAAM;AAAA,QACrB,GAAG,QAAQ;AAAA,QACX,GAAG,QAAQ;AAAA,QACX,iBAAiB,QAAQ;AAAA,MAC3B,CAAC;AACD;AAAA,IACF;AACA,QAAI,MAAM,SAAS,cAAc,MAAM,SAAS,eAAe;AAC7D,WAAK,qBAAqB,KAAK;AAAA,IACjC;AAAA,EACF;AAAA,EAEA,qBACE,MACA,OAC+B;AAC/B,WAAO,KAAK,YAAY,qBAAqB,MAAM,KAAK;AAAA,EAC1D;AAAA,EAEA,cAAc,WAA0B;AACtC,QAAI,KAAK,UAAW;AACpB,UAAM,eAAe,KAAK;AAC1B,QAAI,cAAc;AAChB,WAAK,oBAAoB;AACzB;AAAA,QACE;AAAA,QACA,KAAK,mBAAmB,aAAa,MAAM;AAAA,QAC3C;AAAA,MACF;AACA;AAAA,IACF;AACA,UAAM,aAAa,YACf,CAAC,GAAG,KAAK,6BAA6B,EAAE,QAAQ,IAChD,KAAK;AACT,eAAW,aAAa,YAAY;AAClC,UAAI,KAAK,yBAAyB,WAAW,YAAY,SAAS;AAChE;AAAA,IACJ;AAAA,EACF;AAAA,EAEA,gBAAsB;AACpB,QAAI,KAAK,UAAW;AACpB,SAAK,oBAAoB;AACzB,2BAAuB,MAAM,QAAW,UAAU;AAAA,EACpD;AAAA,EAEA,kBAAwB;AACtB,QAAI,CAAC,KAAK,UAAW,MAAK,YAAY,iBAAiB,IAAI;AAAA,EAC7D;AAAA,EAEA,yBACE,WACA,UACA,YAAY,OACH;AACT,QAAI,CAAC,UAAW,QAAO;AACvB,QAAI,CAAC,qBAAqB,SAAS,GAAG;AACpC,WAAK,qBAAqB,KAAK,eAAe,KAAK,iBAAiB;AACpE;AAAA,QACE;AAAA,QACA,KAAK,mBAAmB,UAAU,MAAM;AAAA,QACxC;AAAA,MACF;AACA,aAAO;AAAA,IACT;AACA,UAAM,SAAS,UAAU;AACzB,UAAM,UAAU,OAAO,SAAS,OAAO,UAAU;AACjD,UAAM,QAAQ,UAAU,mBAAmB,OAAO,IAAI,CAAC;AACvD,UAAM,cAAc,YAAY,MAAM,GAAG,EAAE,IAAI,MAAM,CAAC;AACtD,QAAI,CAAC,YAAa,QAAO;AACzB,QAAI,KAAK,cAAe,wBAAuB,MAAM,QAAW,QAAQ;AACxE,SAAK,eAAe,QAAQ,QAAQ;AACpC,SAAK,2BAA2B;AAChC,gBAAY,MAAM,EAAE,eAAe,KAAK,CAAC;AACzC,SAAK,2BAA2B;AAChC,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,qBACE,QACA,UACM;AACN,QACE,CAAC,KAAK,wBAAwB;AAAA,MAC5B,CAAC,cAAc,UAAU,WAAW;AAAA,IACtC;AAEA;AACF,UAAM,kBACJ,aAAa,KAAK,eAAe,aAAa;AAChD,QAAI,KAAK;AACP,6BAAuB,MAAM,QAAW,eAAe;AACzD,SAAK;AAAA,MACH;AAAA,MACA,KAAK,4BAA4B;AAAA,IACnC;AAAA,EACF;AAAA;AAAA,EAGA,qBAAqB,QAA+B;AAClD,QAAI,KAAK,sBAAsB,OAAQ,MAAK,eAAe,MAAM;AAAA,EACnE;AAAA;AAAA,EAGA,yBAAyB,QAA2C;AAClE,QAAI,QAAQ;AACV,WAAK,qBAAqB,QAAQ,MAAS;AAAA,IAC7C,WAAW,KAAK,mBAAmB;AACjC,WAAK,eAAe,KAAK,iBAAiB;AAAA,IAC5C;AAAA,EACF;AAAA,EAEA,sBAAsB,UAA+B;AACnD,UAAM,mBAAmB,KAAK,YAAY,sBAAsB,QAAQ;AACxE,UAAM,gBACJ,iBAAiB,WAAW,IAAI,iBAAiB,CAAC,IAAI;AACxD,kBAAc,sBAAsB,QAAQ;AAAA,EAC9C;AAAA,EAEA,yBAAyB,UAA6C;AACpE,WAAO,KAAK,gBACR,SACA,KAAK,0BAA0B,IAAI,QAAQ;AAAA,EACjD;AAAA,EAEQ,sBAAsB,UAA+B;AAI3D,UAAM,WAAW,KAAK,8BAA8B;AAAA,MAAO,CAAC,cAC1D,qBAAqB,SAAS,IAC1B,iBAAiB,UAAU,OAAO,OAAO,QAAQ,IACjD,iBAAiB,UAAU,OAAO,OAAO,QAAQ;AAAA,IACvD;AAIA,QAAI,CAAC,SAAS,KAAK,oBAAoB,GAAG;AACxC,WAAK,wBAAwB,QAAQ;AACrC;AAAA,IACF;AACA,QAAI,KAAK,SAAS;AAChB,iBAAW,aAAa,UAAU;AAChC,cAAM,mBAAmB,qBAAqB,SAAS,IACnD,UAAU,+BAA+B,uBACzC,iBAAiB,UAAU,oBAAoB,OAAO,QAAQ,IAC5D,UAAU,sBACV,SACF,8BAA8B,IAAI,UAAU,MAAM;AACtD,cAAM,sBACJ,oBAAoB,iBAAiB,iBAAiB,OAAO,QAAQ,IACjE,mBACA,KAAK,2BAA2B;AACtC,YAAI,qBAAqB;AACvB,eAAK,QAAQ,WAAW,IAAI,mBAAmB;AAAA,QACjD;AACA,YAAI,qBAAqB,SAAS,GAAG;AACnC,gBAAM,SAAS,UAAU;AACzB,cAAI,CAAC,OAAO,UAAU,CAAC,OAAO,QAAS;AACvC,cAAI,CAAC,KAAK,QAAQ,oBAAoB,IAAI,MAAM,GAAG;AACjD,iBAAK,QAAQ,oBAAoB,IAAI,MAAM;AAC3C,kBAAM,WAAW,EAAE,QAAQ,oBAAoB;AAC/C,iBAAK,QAAQ,YAAY,KAAK,QAAQ;AACtC,iBAAK,QAAQ,QAAQ,KAAK,QAAQ;AAAA,UACpC;AAAA,QACF,WAAW,oBAAoB,UAAU,MAAM,GAAG;AAChD,eAAK,oBAAoB,UAAU,QAAQ,mBAAmB;AAAA,QAChE,OAAO;AACL,eAAK,sBAAsB,UAAU,MAAM;AAAA,QAC7C;AAAA,MACF;AACA;AAAA,IACF;AAEA,QAAI,SAAS,WAAW,EAAG;AAC3B,UAAM,WAAW,IAAI,IAAI,QAAQ;AACjC,UAAM,aAAa,OAAO;AAAA,MACxB,KAAK,8BAA8B,IAAI,CAAC,cAAc;AACpD,YAAI,CAAC,SAAS,IAAI,SAAS,EAAG,QAAO;AACrC,eAAO,qBAAqB,SAAS,IACjC,OAAO,OAAO;AAAA,UACZ,GAAG;AAAA,UACH,YAAY,UAAU,OAAO;AAAA,QAC/B,CAAC,IACD,OAAO,OAAO;AAAA,UACZ,GAAG;AAAA,UACH,YAAY,wBAAwB,UAAU,MAAM;AAAA,QACtD,CAAC;AAAA,MACP,CAAC;AAAA,IACH;AACA,SAAK,2BAA2B,YAAY,KAAK,mBAAmB;AAAA,EACtE;AAAA,EAEQ,wBAAwB,UAA+B;AAC7D,UAAM,UAA0C,CAAC;AACjD,2BAAuB,UAAU,OAAO;AACxC,QAAI,KAAK,SAAS;AAChB,iBAAW,UAAU,SAAS;AAC5B,YAAI,CAAC,oBAAoB,MAAM,GAAG;AAChC,eAAK,sBAAsB,MAAM;AACjC;AAAA,QACF;AACA,cAAM,mBAAmB,8BAA8B,IAAI,MAAM;AACjE,cAAM,sBACJ,oBAAoB,iBAAiB,iBAAiB,OAAO,QAAQ,IACjE,mBACA,KAAK,2BAA2B;AACtC,YAAI;AACF,eAAK,QAAQ,WAAW,IAAI,mBAAmB;AACjD,aAAK,oBAAoB,QAAQ,mBAAmB;AAAA,MACtD;AACA;AAAA,IACF;AACA,UAAM,WAAW,IAAI,IAAI,OAAO;AAChC,QACE,CAAC,KAAK,oBAAoB;AAAA,MAAK,CAAC,cAC9B,SAAS,IAAI,UAAU,MAAM;AAAA,IAC/B;AAEA;AACF,UAAM,aAAa,OAAO;AAAA,MACxB,KAAK,oBAAoB;AAAA,QAAI,CAAC,cAC5B,SAAS,IAAI,UAAU,MAAM,IACzB,OAAO,OAAO;AAAA,UACZ,GAAG;AAAA,UACH,YAAY,wBAAwB,UAAU,MAAM;AAAA,QACtD,CAAC,IACD;AAAA,MACN;AAAA,IACF;AACA,SAAK,iBAAiB,YAAY,KAAK,mBAAmB;AAAA,EAC5D;AAAA,EAEA,cACE,QACA,cACM;AACN,QACE,UACA,CAAC,KAAK,oBAAoB,KAAK,CAAC,cAAc,UAAU,WAAW,MAAM,GACzE;AACA,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AACA,SAAK,mBAAmB,QAAQ,YAAY;AAAA,EAC9C;AAAA,EAEA,mBACE,QAC0C;AAC1C,WAAO,QAAQ,QACb,OAAO,MAAM,cAAc,KAAK,aAChC,KAAK,oBAAoB,KAAK,CAAC,cAAc,UAAU,WAAW,MAAM,IACtE,SACA;AAAA,EACN;AAAA,EAEA,mBACE,QACA,cACM;AACN,UAAM,mBAAmB,QAAQ,UAAU,YAAY;AACvD,QACE,WAAW,KAAK,iBAChB,qBAAqB,KAAK,cAC1B;AACA;AAAA,IACF;AACA,UAAM,WAAW,KAAK;AACtB,QAAI,KAAK,kBAAkB,OAAQ,MAAK,sBAAsB;AAC9D,SAAK,gBAAgB;AACrB,SAAK,eAAe;AACpB,UAAM,WAAW,EAAE,KAAK;AACxB,SAAK,sBAAsB,UAAU,QAAQ;AAC7C,SAAK,sBAAsB,QAAQ,QAAQ;AAAA,EAC7C;AAAA,EAEA,yBAAyB,UAA0C;AACjE,UAAM,QAAQ,sBAAsB,QAAQ;AAC5C,SAAK,iBAAiB,KAAK,KAAK;AAChC,SAAK,SAAS,WAAW,IAAI,KAAK;AAAA,EACpC;AAAA,EAEA,wBAAwB,UAA0C;AAChE,UAAM,QAAQ,sBAAsB,QAAQ;AAC5C,QAAI,KAAK,iBAAiB,GAAG,EAAE,MAAM,OAAO;AAC1C,YAAM,IAAI,MAAM,uDAAuD;AAAA,IACzE;AACA,SAAK,iBAAiB,IAAI;AAAA,EAC5B;AAAA,EAEQ,6BAA8D;AACpE,WAAO,KAAK,iBAAiB,GAAG,EAAE;AAAA,EACpC;AAAA,EAEQ,sBACN,QACA,UACM;AACN,QAAI,WAAW,QAAQ;AACvB,WAAO,YAAY,aAAa,KAAK,UAAU,cAAc;AAC3D,WAAK,0BAA0B,IAAI,UAAU,QAAQ;AACrD,iBAAW,SAAS,SAChB,aAAa,eAAe,IAAI,SAAS,MAAM,IAC/C;AAAA,IACN;AAAA,EACF;AAAA,EAEA,UAAgB;AACd,QAAI,KAAK,iBAAiB,KAAK,UAAW;AAC1C,SAAK,YAAY,QAAQ,IAAI;AAAA,EAC/B;AAAA,EAEA,oBAA0B;AACxB,SAAK,gBAAgB;AAAA,EACvB;AAAA,EAEA,yBAA+B;AAC7B,QAAI,KAAK,UAAW;AACpB,SAAK,YAAY;AACjB,kBAAc,OAAO,IAAI;AACzB,SAAK,UAAU;AACf,SAAK,mBAAmB,CAAC;AACzB,SAAK,oBAAoB;AACzB,SAAK,sBAAsB;AAC3B,SAAK,0BAA0B,MAAM;AACrC,SAAK,yBAAyB,MAAM;AACpC,SAAK,uBAAuB,MAAM;AAClC,SAAK,yBAAyB;AAC9B,SAAK,sBAAsB;AAC3B,SAAK,0BAA0B;AAC/B,eAAW,YAAY,KAAK,qBAAqB;AAC/C,eAAS,OAAO,OAAO,OAAO,CAAC,CAAC,CAAC;AAAA,IACnC;AACA,SAAK,oBAAoB,MAAM;AAC/B,SAAK,sBAAsB,OAAO,OAAO,CAAC,CAAC;AAC3C,SAAK,gBAAgB;AAAA,EACvB;AAAA,EAEQ,oBACN,QACA,qBACM;AACN,UAAM,UAAU,KAAK;AACrB,QAAI,CAAC,WAAW,QAAQ,gBAAgB,IAAI,MAAM,EAAG;AACrD,YAAQ,gBAAgB,IAAI,MAAM;AAClC,UAAM,WAAW,EAAE,QAAQ,oBAAoB;AAC/C,YAAQ,QAAQ,KAAK,QAAQ;AAC7B,YAAQ,QAAQ,KAAK,QAAQ;AAAA,EAC/B;AAAA,EAEQ,sBAAsB,QAA4C;AACxE,UAAM,UAAU,KAAK;AACrB,QAAI,CAAC,QAAS;AACd,YAAQ,kBAAkB,IAAI,MAAM;AACpC,QAAI,CAAC,QAAQ,gBAAgB,OAAO,MAAM,EAAG;AAC7C,aAAS,QAAQ,QAAQ,QAAQ,SAAS,GAAG,SAAS,GAAG,SAAS;AAChE,UAAI,QAAQ,QAAQ,KAAK,EAAE,WAAW,QAAQ;AAC5C,gBAAQ,QAAQ,OAAO,OAAO,CAAC;AAAA,MACjC;AAAA,IACF;AACA,aAAS,QAAQ,QAAQ,QAAQ,SAAS,GAAG,SAAS,GAAG,SAAS;AAChE,YAAM,QAAQ,QAAQ,QAAQ,KAAK;AACnC,UAAI,YAAY,SAAS,MAAM,WAAW;AACxC,gBAAQ,QAAQ,OAAO,OAAO,CAAC;AAAA,IACnC;AAAA,EACF;AAAA,EAEQ,iBACN,YACA,YACM;AACN,UAAM,iBAAiB,IAAI;AAAA,MACzB,WAAW,IAAI,CAAC,cAAc,CAAC,UAAU,QAAQ,SAAS,CAAC;AAAA,IAC7D;AACA,UAAM,aAAa,KAAK,8BACrB;AAAA,MAAI,CAAC,cACJ,qBAAqB,SAAS,IAC1B,YACC,eAAe,IAAI,UAAU,MAAM,KAAK;AAAA,IAC/C,EACC;AAAA,MACC,CAAC,cACC,qBAAqB,SAAS,KAC9B,WAAW,KAAK,CAAC,WAAW,OAAO,WAAW,UAAU,MAAM;AAAA,IAClE;AACF,QAAI,WAAW,WAAW,KAAK,WAAW,SAAS;AACjD,iBAAW,KAAK,GAAG,UAAU;AAC/B,SAAK,2BAA2B,OAAO,OAAO,UAAU,GAAG,UAAU;AAAA,EACvE;AAAA,EAEQ,2BACN,YACA,YACM;AACN,UAAM,oBAAoB,oBAAI,IAG5B;AACF,eAAW,YAAY,WAAY,mBAAkB,IAAI,UAAU,CAAC,CAAC;AACrE,eAAW,aAAa,YAAY;AAClC,UAAI,UAAU,+BAA+B,qBAAqB;AAChE,0BAAkB,IAAI,UAAU,mBAAmB,GAAG,KAAK,SAAS;AAAA,MACtE;AAAA,IACF;AAIA,UAAM,sBAAsB,oBAAI,IAG9B;AACF,eAAW,CAAC,UAAU,gBAAgB,KAAK,mBAAmB;AAC5D,0BAAoB,IAAI,UAAU,OAAO,OAAO,gBAAgB,CAAC;AAAA,IACnE;AAEA,eAAW,YAAY,KAAK,qBAAqB;AAC/C,UAAI,CAAC,oBAAoB,IAAI,QAAQ,GAAG;AACtC,iBAAS,OAAO,OAAO,OAAO,CAAC,CAAC,CAAC;AAAA,MACnC;AAAA,IACF;AACA,eAAW,CAAC,UAAU,gBAAgB,KAAK,qBAAqB;AAC9D,eAAS,OAAO,gBAAgB;AAAA,IAClC;AACA,SAAK,sBAAsB,IAAI,IAAI,oBAAoB,KAAK,CAAC;AAC7D,SAAK,gCAAgC;AACrC,SAAK,sBAAsB,OAAO;AAAA,MAChC,WAAW;AAAA,QACT,CAAC,cACC,CAAC,qBAAqB,SAAS;AAAA,MACnC;AAAA,IACF;AACA,SAAK,0BAA0B,OAAO;AAAA,MACpC,WAAW;AAAA,QAAO,CAAC,cACjB,qBAAqB,SAAS;AAAA,MAChC;AAAA,IACF;AACA,QACE,KAAK,iBACL,CAAC,WAAW;AAAA,MACV,CAAC,cACC,CAAC,qBAAqB,SAAS,KAC/B,UAAU,WAAW,KAAK;AAAA,IAC9B,GACA;AACA,WAAK,gBAAgB;AAAA,IACvB;AACA,QACE,KAAK,qBACL,CAAC,KAAK,wBAAwB;AAAA,MAC5B,CAAC,cAAc,UAAU,WAAW,KAAK;AAAA,IAC3C;AAEA,WAAK,eAAe,KAAK,iBAAiB;AAC5C,SAAK,gBAAgB;AAAA,EACvB;AAAA,EAEQ,oBAAoB,QAA4C;AACtE,UAAM,WAAW,KAAK,oBAAoB;AAAA,MACxC,CAAC,cAAc,UAAU,WAAW;AAAA,IACtC;AACA,UAAM,aAAa,OAAO;AAAA,MACxB,SAAS;AAAA,QAAI,CAAC,WAAW,gBACvB,OAAO,OAAO,EAAE,GAAG,WAAW,YAAY,CAAC;AAAA,MAC7C;AAAA,IACF;AACA,SAAK,iBAAiB,YAAY,KAAK,mBAAmB;AAAA,EAC5D;AAAA,EAEQ,kBAAwB;AAC9B,SAAK,sBAAsB;AAC3B,SAAK,gBAAgB;AACrB,SAAK,eAAe;AAAA,EACtB;AAAA,EAEQ,eACN,QACA,UACM;AACN,UAAM,UAAU,aAAa;AAC7B,QAAI,KAAK,sBAAsB,UAAU,KAAK,iBAAiB;AAC7D;AACF,UAAM,WAAW,KAAK;AACtB,SAAK,oBAAoB;AACzB,SAAK,eAAe;AACpB,QAAI,YAAY,aAAa;AAC3B,WAAK,gBAAgB,UAAU,OAAO,KAAK;AAC7C,SAAK,gBAAgB,QAAQ,MAAM,OAAO;AAAA,EAC5C;AAAA,EAEQ,eAAe,QAA+B;AACpD,QAAI,KAAK,sBAAsB,OAAQ;AACvC,SAAK,oBAAoB;AACzB,SAAK,eAAe;AACpB,SAAK,gBAAgB,QAAQ,OAAO,KAAK;AAAA,EAC3C;AAAA,EAEQ,gBACN,QACA,eACA,gBACM;AACN,WAAO,kBAAkB,OAAO,OAAO,EAAE,eAAe,eAAe,CAAC,CAAC;AAAA,EAC3E;AAAA,EAEQ,gBACN,iBACM;AACN,UAAM,SAAS,KAAK,mBAAmB,eAAe;AACtD,UAAM,UAAU,EAAE,OAAO;AACzB,SAAK,oBAAoB;AACzB,QAAI;AACF,WAAK,YAAY,qBAAqB,IAAI;AAC1C,UACE,KAAK,sBAAsB,WAC3B,KAAK,aACL,KAAK,OAAO,cAAc,kBAAkB,KAAK,QACjD;AACA;AAAA,MACF;AACA,WAAK,oBAAoB;AACzB,6BAAuB,MAAM,KAAK,mBAAmB,MAAM,GAAG,SAAS;AAAA,IACzE,UAAE;AACA,UAAI,KAAK,sBAAsB;AAC7B,aAAK,oBAAoB;AAAA,IAC7B;AAAA,EACF;AAAA,EAEA,qBAAqB,QAA4C;AAC/D,SAAK,qBAAqB;AAAA,EAC5B;AAAA,EAEA,0BACE,QACS;AACT,WAAO,QAAQ,UAAU,KAAK,uBAAuB,MAAM;AAAA,EAC7D;AAAA,EAEA,yBAAmE;AACjE,UAAM,SAAS,KAAK;AACpB,SAAK,qBAAqB;AAC1B,WAAO;AAAA,EACT;AAAA,EAEA,wBAA8B;AAC5B,SAAK,qBAAqB;AAAA,EAC5B;AAAA,EAEQ,mBAAmB,OAA0C;AACnE,QAAI,MAAM,cAAc,OAAW;AACnC,SAAK,0BAA0B,IAAI,MAAM,WAAW;AAAA,MAClD,GAAG,MAAM;AAAA,MACT,GAAG,MAAM;AAAA,MACT,WAAW,MAAM,cAAc;AAAA,MAC/B,eAAe;AAAA,MACf,eAAe,MAAM,gBAAgB;AAAA,IACvC,CAAC;AAAA,EACH;AAAA,EAEQ,6BACN,OACS;AACT,eAAW,CAAC,WAAW,KAAK,KAAK,KAAK,2BAA2B;AAC/D,UAAI,CAAC,MAAM,iBAAiB,CAAC,UAAU,OAAO,KAAK,EAAG;AACtD,YAAM,gBAAgB;AACtB,UAAI,CAAC,MAAM;AACT,aAAK,0BAA0B,OAAO,SAAS;AACjD,aAAO;AAAA,IACT;AACA,QACE,KAAK,2BACL,UAAU,KAAK,yBAAyB,KAAK,GAC7C;AACA,WAAK,0BAA0B;AAC/B,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT;AAAA,EAEQ,6BACN,OACS;AACT,UAAM,aAAa,MAAM;AACzB,QAAI,eAAe,OAAW,QAAO;AACrC,UAAM,WAAW,KAAK,yBAAyB,IAAI,UAAU;AAC7D,QAAI,YAAY,UAAU,UAAU,KAAK,EAAG,QAAO;AACnD,SAAK,yBAAyB,IAAI,YAAY,YAAY,KAAK,CAAC;AAEhE,eAAW,CAAC,WAAW,KAAK,KAAK,KAAK,2BAA2B;AAC/D,UAAI,CAAC,MAAM,iBAAiB,CAAC,UAAU,OAAO,KAAK,EAAG;AACtD,YAAM,gBAAgB;AACtB,UAAI,CAAC,MAAM;AACT,aAAK,0BAA0B,OAAO,SAAS;AACjD,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT;AAAA,EAEQ,oBAAoB,OAA0C;AACpE,SAAK,0BAA0B,YAAY,KAAK;AAAA,EAClD;AAAA,EAEQ,kBACN,OAC2C;AAC3C,QAAI;AACJ,eAAW,WAAW,MAAM,iBAAiB;AAC3C,UAAI,KAAK,uBAAuB,IAAI,QAAQ,UAAU,EAAG;AACzD,UAAI,CAAC,KAAK,qBAAqB;AAC7B,aAAK,sBAAsB;AAC3B,aAAK,yBAAyB,QAAQ;AAAA,MACxC;AACA,UAAI,QAAQ,eAAe,KAAK,uBAAwB,WAAU;AAClE,WAAK,uBAAuB,IAAI,QAAQ,UAAU;AAAA,IACpD;AACA,WAAO;AAAA,EACT;AAAA,EAEQ,uBAAuB,OAA0C;AACvE,UAAM,oBAAoB,IAAI,IAAI,MAAM,iBAAiB;AACzD,eAAW,cAAc,KAAK,wBAAwB;AACpD,UAAI,kBAAkB,IAAI,UAAU,EAAG;AACvC,WAAK,uBAAuB,OAAO,UAAU;AAC7C,WAAK,yBAAyB,OAAO,UAAU;AAAA,IACjD;AAEA,UAAM,sBACJ,MAAM,SAAS,eACX,IAAI,IAAI,MAAM,gBAAgB,IAAI,CAAC,YAAY,QAAQ,UAAU,CAAC,IAClE;AACN,eAAW,cAAc,mBAAmB;AAC1C,UAAI,CAAC,qBAAqB,IAAI,UAAU,GAAG;AACzC,aAAK,uBAAuB,IAAI,UAAU;AAAA,MAC5C;AAAA,IACF;AAEA,QAAI,KAAK,uBAAuB,OAAO,GAAG;AACxC,WAAK,sBAAsB;AAC3B;AAAA,IACF;AACA,SAAK,sBAAsB;AAC3B,SAAK,yBAAyB;AAC9B,SAAK,yBAAyB,MAAM;AAAA,EACtC;AAAA,EAEQ,qBAAqB,OAA0C;AACrE,eAAW,WAAW,MAAM,iBAAiB;AAC3C,WAAK,uBAAuB,OAAO,QAAQ,UAAU;AACrD,WAAK,yBAAyB,OAAO,QAAQ,UAAU;AAAA,IACzD;AACA,QAAI,KAAK,uBAAuB,OAAO,EAAG;AAC1C,SAAK,sBAAsB;AAC3B,SAAK,yBAAyB;AAC9B,SAAK,yBAAyB,MAAM;AAAA,EACtC;AAAA,EAEQ,oBAAoB,WAAyB;AACnD,eAAW,CAAC,WAAW,KAAK,KAAK,KAAK,2BAA2B;AAC/D,UAAI,CAAC,YAAY,OAAO,SAAS,GAAG;AAClC,aAAK,0BAA0B,OAAO,SAAS;AAAA,MACjD;AAAA,IACF;AACA,eAAW,CAAC,YAAY,KAAK,KAAK,KAAK,0BAA0B;AAC/D,UAAI,CAAC,YAAY,OAAO,SAAS,GAAG;AAClC,aAAK,yBAAyB,OAAO,UAAU;AAAA,MACjD;AAAA,IACF;AACA,QACE,KAAK,2BACL,CAAC,YAAY,KAAK,yBAAyB,SAAS,GACpD;AACA,WAAK,0BAA0B;AAAA,IACjC;AAAA,EACF;AAAA,EAEQ,aAAmB;AACzB,QAAI,KAAK,UAAW,OAAM,IAAI,MAAM,kCAAkC;AAAA,EACxE;AACF;AAEA,SAAS,kBAAkB,OAA6C;AACtE,SAAO,MAAM,OAAO,oBAAoB,MAAM,cAAc;AAC9D;AAEA,SAAS,YAAY,OAAsD;AACzE,SAAO;AAAA,IACL,GAAG,MAAM;AAAA,IACT,GAAG,MAAM;AAAA,IACT,WAAW,MAAM,cAAc;AAAA,EACjC;AACF;AAEA,SAAS,UACP,OACA,OACS;AACT,SACE,YAAY,OAAO,MAAM,cAAc,SAAS,KAChD,KAAK,IAAI,MAAM,IAAI,MAAM,CAAC,KAAK,KAC/B,KAAK,IAAI,MAAM,IAAI,MAAM,CAAC,KAAK;AAEnC;AAEA,SAAS,YAAY,OAAyB,WAA4B;AACxE,QAAM,UAAU,YAAY,MAAM;AAClC,SAAO,WAAW,KAAK,WAAW;AACpC;AAEO,SAAS,mBACd,WACA,OACmB;AACnB,SAAO,IAAI,kBAAkB,WAAW,KAAK;AAC/C;AAEO,SAAS,oBAAoB,WAA8C;AAChF,QAAM,UAAU,UAAU;AAC1B,MAAI,EAAE,mBAAmB,oBAAoB;AAC3C,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEO,SAAS,0BACd,OAC0B;AAC1B,SAAO,IAAI,oBAAoB,KAAK;AACtC;AAEA,SAAS,eAAe,WAAoD;AAC1E,MAAI,cAAc,aAAa,IAAI,SAAS;AAC5C,MAAI,CAAC,aAAa;AAChB,kBAAc,IAAI,wBAAwB,SAAS;AACnD,iBAAa,IAAI,WAAW,WAAW;AAAA,EACzC;AACA,SAAO;AACT;AAEA,SAAS,wBAA+B;AACtC,SAAO,IAAI;AAAA,IACT;AAAA,EACF;AACF;AAEA,SAAS,sBACP,UACqB;AACrB,MAAI,EAAE,oBAAoB,sBAAsB;AAC9C,UAAM,IAAI,MAAM,qCAAqC;AAAA,EACvD;AACA,SAAO;AACT;AAEA,SAAS,oBAAoB,QAA+C;AAC1E,SACE,OAAO,qBACP;AAAA,IACE,OAAO,SAAS,SAAS,OAAO,SAAS,WAAW,OAAO,SAAS;AAAA,EACtE;AAEJ;AAEA,SAAS,uBACP,UACA,SACM;AACN,MAAI,SAAS,cAAc,OAAQ;AACnC,aAAW,UAAU,SAAS,UAAU,SAAS;AAC/C,QACE,OAAO,QACP,OAAO,MAAM,cAAc,SAAS,aACpC,CAAC,OAAO,MAAM,cAAc,UAC5B,iBAAiB,OAAO,OAAO,QAAQ;AAEvC,cAAQ,KAAK,MAAM;AAAA,EACvB;AACF;AAEA,SAAS,iBACP,UACA,UACS;AACT,MAAI,UAAqC;AACzC,SAAO,SAAS;AACd,QAAI,YAAY,SAAU,QAAO;AACjC,cAAU,QAAQ,SACd,aAAa,eAAe,IAAI,QAAQ,MAAM,IAC9C;AAAA,EACN;AACA,SAAO;AACT;",
4
+ "sourcesContent": ["import { preparedLayoutHtmlGeometry, preparedLayoutTargetBounds } from '../layout/geometry-publication.js';\nimport type { PibblEventTargetRegistration } from \"../events/registrations.js\";\nimport { GLOBAL_STATE } from \"../global-state.js\";\nimport type {\n PibblEvent,\n PibblEventType,\n PibblKeyboardEvent,\n} from \"../events/types.js\";\nimport { Teardowns } from \"../teardowns.js\";\nimport type {\n PibblEventRoot,\n PibblFocusPressDefaultInput,\n PibblFocusTouchDefaultContact,\n PibblFocusTouchDefaultInput,\n PibblFocusPolicyBridge,\n PibblInstance,\n PibblRenderTransaction,\n} from \"../types.js\";\nimport { resolveTargetRootBounds } from \"./geometry.js\";\nimport {\n mountDOMFocusHost,\n type PibblMountedDOMFocusHost,\n} from \"./dom-focus-host.js\";\nimport {\n applyDirectionalNavigationDefault,\n applyKeyboardActivationDefault,\n applyTabDefault,\n} from \"./keyboard-defaults.js\";\nimport { transitionLogicalFocus } from \"./focus-events.js\";\nimport type { HtmlFocusRegion } from \"./html-focus-region.js\";\nimport {\n isHtmlFocusCandidate,\n type PibblDirectionalBoundary,\n type PibblFocusCandidate,\n type PibblHtmlFocusCandidate,\n type PibblNavigationCandidate,\n} from \"./types.js\";\nimport { getManagedTabStops } from \"./dom-tab-stops.js\";\n\ninterface PreparedNavigation {\n readonly navigation: readonly PibblNavigationCandidate[];\n readonly canvas: readonly PibblFocusCandidate[];\n readonly html: readonly PibblHtmlFocusCandidate[];\n readonly byBoundary: ReadonlyMap<DirectionalBoundary, readonly PibblNavigationCandidate[]>;\n readonly boundaries: Set<DirectionalBoundary>;\n}\nconst EMPTY_NAVIGATION: readonly PibblNavigationCandidate[] = Object.freeze([]);\n\nconst UNFOCUSED_SNAPSHOT = Object.freeze({\n isFocused: false,\n isFocusVisible: false,\n});\n\nconst retainedDirectionalBoundaries = new WeakMap<\n PibblEventTargetRegistration,\n DirectionalBoundary\n>();\nconst coordinators = new WeakMap<PibblEventRoot, FocusManagerCoordinator>();\nconst managerOwners = new WeakMap<PibblFocusManager, PibblInstance>();\n\ninterface PendingCandidate {\n readonly target: PibblEventTargetRegistration;\n readonly directionalBoundary: DirectionalBoundary | undefined;\n}\n\ninterface PendingHtmlRegion {\n readonly region: HtmlFocusRegion;\n readonly directionalBoundary: DirectionalBoundary | undefined;\n}\n\ninterface PendingFrame {\n readonly entries: (PendingCandidate | PendingHtmlRegion)[];\n readonly targets: PendingCandidate[];\n readonly htmlRegions: PendingHtmlRegion[];\n readonly observedTargets: Set<PibblEventTargetRegistration>;\n readonly observedHtmlRegions: Set<HtmlFocusRegion>;\n readonly ineligibleTargets: Set<PibblEventTargetRegistration>;\n readonly boundaries: Set<DirectionalBoundary>;\n}\n\ninterface RepresentedPress {\n readonly x: number;\n readonly y: number;\n readonly timeStamp: number;\n}\n\ninterface RepresentedPointerPress extends RepresentedPress {\n suppressMouse: boolean;\n suppressTouch: boolean;\n}\n\nconst COMPATIBILITY_PRESS_WINDOW_MS = 1_500;\n\nclass DirectionalBoundary implements PibblDirectionalBoundary {\n private committedCandidates: readonly PibblNavigationCandidate[] =\n Object.freeze([]);\n\n constructor(readonly owner: PibblInstance) {}\n\n get candidates(): readonly PibblNavigationCandidate[] {\n return this.committedCandidates;\n }\n\n commit(candidates: readonly PibblNavigationCandidate[]): void {\n this.committedCandidates = candidates;\n }\n}\n\ninterface FocusTransactionState {\n readonly prior: PibblFocusManager | undefined;\n readonly replayedManagers: Set<PibblFocusManager>;\n prepared: PibblFocusManager | undefined;\n claimed: PibblFocusManager | undefined;\n finished: boolean;\n restored: PibblFocusManager | undefined;\n}\n\nclass FocusManagerCoordinator {\n private readonly managers = new Set<PibblFocusManager>();\n private readonly transactions = new WeakMap<\n PibblRenderTransaction,\n FocusTransactionState\n >();\n private active: PibblFocusManager | undefined;\n private domFocusHost: PibblMountedDOMFocusHost | undefined;\n private domFocusHostTeardowns: Teardowns | undefined;\n private disposed = false;\n\n constructor(private readonly eventRoot: PibblEventRoot) {\n eventRoot.rootInstance?.mainTeardowns.add(() => this.dispose());\n }\n\n add(manager: PibblFocusManager): void {\n if (this.disposed) {\n throw new Error(\"Pibbl focus manager root is disposed.\");\n }\n this.ensureDOMFocusHost();\n this.managers.add(manager);\n const transaction = this.eventRoot.renderTransaction;\n if (transaction) {\n const state = this.stateFor(transaction);\n state.prepared = manager;\n // Reconciliation mounts every descriptor before declaration-order entry.\n // Expose that transaction-local manager so a same-element directional\n // descriptor can enter first without making the claim permanent.\n this.eventRoot.focusPolicy = manager;\n }\n }\n\n claim(manager: PibblFocusManager): void {\n const transaction = this.eventRoot.renderTransaction;\n if (!transaction) {\n if (this.active && this.active !== manager) {\n throw duplicateManagerError();\n }\n this.setActive(manager);\n return;\n }\n\n const state = this.stateFor(transaction);\n if (state.claimed && state.claimed !== manager) {\n throw duplicateManagerError();\n }\n state.claimed = manager;\n this.eventRoot.focusPolicy = manager;\n }\n\n beforeNativeDispatch(\n type: PibblEventType,\n event: Event,\n ): PibblFocusManager | undefined {\n const manager = this.active;\n const routeLogicalEvent =\n this.domFocusHost?.beforeNativeDispatch(type, event) ?? true;\n return routeLogicalEvent && manager && !manager.isDestroyed\n ? manager\n : undefined;\n }\n\n syncDOMFocusHost(manager: PibblFocusManager): void {\n if (this.active === manager) {\n this.domFocusHost?.syncCandidateAvailability(manager.hasFocusCandidates);\n this.domFocusHost?.syncHtmlRegions(manager.htmlFocusRegions);\n }\n }\n\n focusCanvasFromPress(manager: PibblFocusManager): void {\n if (this.active === manager) this.domFocusHost?.focusFromPress();\n }\n\n claimRetainedManagers(instance: PibblInstance): readonly PibblFocusManager[] {\n const retained = Array.from(this.managers).filter((manager) => {\n const owner = managerOwners.get(manager);\n return (\n !manager.isDestroyed &&\n !manager.ownerWasReleased &&\n owner !== undefined &&\n isInstanceWithin(owner, instance)\n );\n });\n const transaction = this.eventRoot.renderTransaction;\n if (!transaction) {\n for (const manager of retained) this.claim(manager);\n return retained;\n }\n\n const state = this.stateFor(transaction);\n for (const manager of retained) {\n if (state.replayedManagers.has(manager)) continue;\n state.replayedManagers.add(manager);\n this.claim(manager);\n }\n return retained;\n }\n\n release(manager: PibblFocusManager): void {\n if (manager.isDestroyed) return;\n manager.markOwnerReleased();\n const transaction = this.eventRoot.renderTransaction;\n if (transaction) {\n const state = this.stateFor(transaction);\n if (!state.finished) return;\n }\n if (this.active === manager) {\n this.setActive(undefined);\n }\n this.destroy(manager);\n }\n\n private stateFor(transaction: PibblRenderTransaction): FocusTransactionState {\n const existing = this.transactions.get(transaction);\n if (existing) return existing;\n const state: FocusTransactionState = {\n prior: this.active,\n replayedManagers: new Set(),\n prepared: undefined,\n claimed: undefined,\n finished: false,\n restored: undefined,\n };\n this.transactions.set(transaction, state);\n transaction.onFinish((success) => this.finishTransaction(state, success, transaction.failed === false));\n return state;\n }\n\n private finishTransaction(\n state: FocusTransactionState,\n success: boolean,\n cancelled = false,\n ): void {\n if (state.finished) return;\n state.finished = true;\n if (success) {\n if (state.claimed) {\n this.active = state.claimed;\n } else if (this.active?.ownerWasReleased) {\n this.active = undefined;\n }\n this.eventRoot.focusPolicy = this.active;\n for (const manager of Array.from(this.managers)) {\n if (manager !== this.active && manager.ownerWasReleased) {\n this.destroy(manager);\n }\n }\n this.domFocusHost?.setManager(this.active);\n return;\n }\n\n const attemptedReplacement =\n (state.claimed && state.claimed !== state.prior) ||\n (state.prepared && state.prepared !== state.prior);\n const restored =\n state.prior && (attemptedReplacement || cancelled) && !state.prior.isDestroyed\n ? state.prior\n : undefined;\n state.restored = restored;\n this.active = restored;\n this.eventRoot.focusPolicy = restored;\n for (const manager of Array.from(this.managers)) {\n if (manager !== restored) this.destroy(manager);\n }\n this.domFocusHost?.setManager(restored);\n }\n\n private destroy(manager: PibblFocusManager): void {\n this.managers.delete(manager);\n manager.destroyFromCoordinator();\n if (this.managers.size === 0) this.disposeDOMFocusHost();\n }\n\n private ensureDOMFocusHost(): void {\n if (this.domFocusHost) return;\n const canvas = this.eventRoot.canvas;\n if (!canvas) {\n throw new Error(\n \"FocusManagement requires an HTMLCanvasElement root; an OffscreenCanvas has no DOM focus host.\",\n );\n }\n const teardowns = new Teardowns();\n try {\n this.domFocusHost = mountDOMFocusHost(canvas, this.eventRoot, teardowns);\n this.domFocusHostTeardowns = teardowns;\n } catch (error) {\n teardowns.execute();\n throw error;\n }\n }\n\n private disposeDOMFocusHost(): void {\n this.domFocusHost = undefined;\n this.domFocusHostTeardowns?.execute();\n this.domFocusHostTeardowns = undefined;\n }\n\n private setActive(manager: PibblFocusManager | undefined): void {\n this.active = manager;\n this.eventRoot.focusPolicy = manager;\n this.domFocusHost?.setManager(manager);\n }\n\n private dispose(): void {\n if (this.disposed) return;\n this.disposed = true;\n this.active = undefined;\n this.eventRoot.focusPolicy = undefined;\n for (const manager of Array.from(this.managers)) this.destroy(manager);\n this.disposeDOMFocusHost();\n }\n}\n\nexport class PibblFocusManager implements PibblFocusPolicyBridge {\n private committedCandidates: readonly PibblFocusCandidate[] = Object.freeze([]);\n private committedHtmlCandidates: readonly PibblHtmlFocusCandidate[] =\n Object.freeze([]);\n private committedNavigationCandidates: readonly PibblNavigationCandidate[] =\n Object.freeze([]);\n private committedBoundaries = new Set<DirectionalBoundary>();\n private pending: PendingFrame | undefined;\n private retainedNavigationTransaction: PibblRenderTransaction | undefined;\n private transactionalPending:\n | {\n readonly transaction: PibblRenderTransaction;\n readonly frame: PendingFrame;\n }\n | undefined;\n private directionalStack: DirectionalBoundary[] = [];\n private focusedTarget: PibblEventTargetRegistration | undefined;\n private focusedHtmlRegion: HtmlFocusRegion | undefined;\n private pendingHtmlFocusModality: \"keyboard\" | \"pointer\" | undefined;\n private focusVisible = false;\n private pendingSpaceTarget: PibblEventTargetRegistration | undefined;\n private pendingPressFocus:\n { readonly target: PibblEventTargetRegistration | undefined } | undefined;\n private readonly representedPointerPresses = new Map<\n number,\n RepresentedPointerPress\n >();\n private readonly representedTouchContacts = new Map<\n number,\n RepresentedPress\n >();\n private activeTouchIdentifiers = new Set<number>();\n private primaryTouchIdentifier: number | undefined;\n private touchSequenceActive = false;\n private touchMouseCompatibility: RepresentedPress | undefined;\n private focusRenderRevision = 0;\n private readonly layerFocusRenderRevisions = new WeakMap<\n PibblInstance,\n number\n >();\n private destroyed = false;\n private ownerReleased = false;\n private readonly coordinator: FocusManagerCoordinator;\n\n constructor(\n private readonly eventRoot: PibblEventRoot,\n owner: PibblInstance,\n ) {\n const canvas = eventRoot.canvas;\n if (!canvas) {\n throw new Error(\n \"FocusManagement requires an HTMLCanvasElement root; an OffscreenCanvas has no DOM focus host.\",\n );\n }\n managerOwners.set(this, owner);\n this.coordinator = getCoordinator(eventRoot);\n try {\n this.coordinator.add(this);\n } catch (error) {\n managerOwners.delete(this);\n throw error;\n }\n }\n\n get candidates(): readonly PibblFocusCandidate[] {\n return this.committedCandidates;\n }\n\n /** @internal Full source-order list including native HtmlBox regions. */\n get navigationCandidates(): readonly PibblNavigationCandidate[] {\n return this.committedNavigationCandidates;\n }\n\n get htmlFocusRegions(): readonly HtmlFocusRegion[] {\n return this.committedHtmlCandidates.map((candidate) => candidate.region);\n }\n\n get focusedNavigationCandidate(): PibblNavigationCandidate | undefined {\n if (this.focusedHtmlRegion) {\n return this.committedHtmlCandidates.find(\n (candidate) => candidate.region === this.focusedHtmlRegion,\n );\n }\n return this.focusedTarget\n ? this.committedCandidates.find(\n (candidate) => candidate.target === this.focusedTarget,\n )\n : undefined;\n }\n\n /** @internal Resolves dynamic native eligibility at each navigation boundary. */\n isNavigationCandidateFocusable(candidate: PibblNavigationCandidate): boolean {\n return isHtmlFocusCandidate(candidate)\n ? Boolean(\n candidate.region.active &&\n candidate.region.content &&\n getManagedTabStops(candidate.region.content).length,\n )\n : Boolean(this.liveFocusCandidate(candidate.target));\n }\n\n /** Includes a successful render's collected candidates before commit callbacks settle. */\n get hasFocusCandidates(): boolean {\n return (\n this.committedNavigationCandidates.length > 0 ||\n (this.transactionalPending?.frame.targets.length ?? 0) +\n (this.transactionalPending?.frame.htmlRegions.length ?? 0) >\n 0\n );\n }\n\n get isDestroyed(): boolean {\n return this.destroyed;\n }\n\n get ownerWasReleased(): boolean {\n return this.ownerReleased;\n }\n\n get canvas(): HTMLCanvasElement {\n const canvas = this.eventRoot.canvas;\n if (!canvas) throw new Error(\"Pibbl focus manager has no DOM Canvas host.\");\n return canvas;\n }\n\n get logicalFocusTarget(): PibblEventTargetRegistration | undefined {\n return this.focusedTarget;\n }\n\n get logicalFocusVisible(): boolean {\n return this.focusVisible;\n }\n\n beginCollection(): void {\n this.assertLive();\n if (this.pending) {\n throw new Error(\"FocusManagement cannot enter twice on one Pibbl root.\");\n }\n this.coordinator.claim(this);\n this.pending = {\n entries: [],\n targets: [],\n htmlRegions: [],\n observedTargets: new Set(),\n observedHtmlRegions: new Set(),\n ineligibleTargets: new Set(),\n boundaries: new Set(this.directionalStack),\n };\n }\n\n finishCollection(success: boolean): void {\n const pending = this.pending;\n this.pending = undefined;\n if (!pending || !success || this.destroyed) return;\n\n const transaction = this.eventRoot.renderTransaction;\n if (transaction) {\n this.transactionalPending = { transaction, frame: pending };\n let prepared: PreparedNavigation | undefined;\n if (transaction.onPreflight && transaction.onAdopt) {\n transaction.onPreflight(() => { prepared = this.prepareCollection(pending, transaction); });\n transaction.onAdopt(() => { if (prepared && !this.destroyed) this.adoptNavigationCandidates(prepared); });\n }\n transaction.onFinish((transactionSucceeded) => {\n if (this.transactionalPending?.transaction === transaction) {\n this.transactionalPending = undefined;\n }\n if (transactionSucceeded && !this.destroyed) {\n if (prepared) this.finishNavigationCandidates();\n else this.commitCollection(pending);\n }\n });\n return;\n }\n\n this.commitCollection(pending);\n }\n\n private commitCollection(pending: PendingFrame): void {\n this.adoptNavigationCandidates(this.prepareCollection(pending));\n this.finishNavigationCandidates();\n }\n\n private prepareCollection(pending: PendingFrame, transaction?: PibblRenderTransaction): PreparedNavigation {\n const collected: PibblNavigationCandidate[] = [];\n for (const [sourceIndex, observed] of pending.entries.entries()) {\n if (\"target\" in observed) {\n const target = observed.target;\n collected.push(\n Object.freeze({\n target,\n sourceIndex,\n directionalBoundary: observed.directionalBoundary,\n rootBounds: transaction ? preparedLayoutTargetBounds(transaction, target) : resolveTargetRootBounds(target),\n }) satisfies PibblFocusCandidate,\n );\n continue;\n }\n const region = observed.region;\n const geometry = transaction ? preparedLayoutHtmlGeometry(transaction, region) : undefined;\n if (geometry ? geometry.active : region.active && region.content)\n collected.push(\n Object.freeze({\n region,\n sourceIndex,\n directionalBoundary: observed.directionalBoundary,\n rootBounds: geometry?.bounds ?? region.rootBounds,\n }) satisfies PibblHtmlFocusCandidate,\n );\n }\n const navigation = Object.freeze(collected);\n return this.prepareNavigationCandidates(navigation, pending.boundaries);\n }\n\n observeTarget(target: PibblEventTargetRegistration): void {\n const pending = this.pending;\n if (!pending) return;\n if (this.pendingSpaceTarget === target && !target.handlers.click) {\n this.cancelSpaceActivation();\n }\n if (!isKeyboardFocusable(target)) {\n this.markPendingIneligible(target);\n return;\n }\n pending.ineligibleTargets.delete(target);\n this.recordPendingTarget(target, this.currentDirectionalBoundary());\n }\n\n /** @internal Collects one published HtmlBox in source order. */\n observeHtmlRegion(region: HtmlFocusRegion): void {\n const pending = this.pending;\n if (!pending || pending.observedHtmlRegions.has(region)) return;\n pending.observedHtmlRegions.add(region);\n const observed = {\n region,\n directionalBoundary: this.currentDirectionalBoundary(),\n };\n pending.htmlRegions.push(observed);\n pending.entries.push(observed);\n }\n\n /** @internal Removes an unmounted HtmlBox without manufacturing a Canvas target. */\n removeHtmlFocusRegion(region: HtmlFocusRegion): void {\n if (this.pending?.observedHtmlRegions.delete(region)) {\n this.pending.htmlRegions.splice(\n this.pending.htmlRegions.findIndex((entry) => entry.region === region),\n 1,\n );\n const index = this.pending.entries.findIndex(\n (entry) => \"region\" in entry && entry.region === region,\n );\n if (index >= 0) this.pending.entries.splice(index, 1);\n return;\n }\n if (\n !this.committedHtmlCandidates.some(\n (candidate) => candidate.region === region,\n )\n )\n return;\n const wasFocused = this.focusedHtmlRegion === region;\n const canvas = this.eventRoot.canvas;\n const shouldReturnNativeFocus = Boolean(\n wasFocused &&\n canvas &&\n !this.eventRoot.rootInstance?.mainTeardowns.closed &&\n region.content?.contains(canvas.ownerDocument.activeElement),\n );\n this.commitNavigationCandidates(\n this.committedNavigationCandidates.filter(\n (candidate) =>\n !isHtmlFocusCandidate(candidate) || candidate.region !== region,\n ),\n this.committedBoundaries,\n );\n if (shouldReturnNativeFocus && canvas) {\n this.coordinator.focusCanvasFromPress(this);\n // Canvas focus synchronously enters the ordinary DOM host. A retired\n // region must leave no logical selection behind that would turn this\n // removal into an unintended navigation action.\n this.clearFocusState();\n }\n if (wasFocused) this.clearHtmlFocus(region);\n }\n\n /** @internal Deactivates retained DOM hosts while the root has no display area. */\n suspendHtmlRegions(): void {\n if (this.committedHtmlCandidates.length === 0) return;\n const focused = this.focusedHtmlRegion;\n const canvas = this.eventRoot.canvas;\n const shouldReturnNativeFocus = Boolean(\n focused &&\n canvas &&\n !this.eventRoot.rootInstance?.mainTeardowns.closed &&\n focused.content?.contains(canvas.ownerDocument.activeElement),\n );\n this.commitNavigationCandidates(\n this.committedNavigationCandidates.filter(\n (candidate) => !isHtmlFocusCandidate(candidate),\n ),\n this.committedBoundaries,\n );\n if (shouldReturnNativeFocus && canvas) {\n this.coordinator.focusCanvasFromPress(this);\n this.clearFocusState();\n }\n if (focused) this.clearHtmlFocus(focused);\n }\n\n observeTransactionalTarget(target: PibblEventTargetRegistration, preparedFocusable?: boolean): void {\n const transactional = this.transactionalPending;\n const pending = this.pending ?? (transactional?.transaction === this.eventRoot.renderTransaction ? transactional?.frame : undefined);\n if (!pending) return;\n if (this.pendingSpaceTarget === target && !target.handlers.click) {\n this.cancelSpaceActivation();\n }\n if (!(preparedFocusable ?? isKeyboardFocusable(target))) {\n pending.ineligibleTargets.add(target);\n const index = pending.targets.findIndex(\n (candidate) => candidate.target === target,\n );\n if (index !== -1) pending.targets.splice(index, 1);\n const entryIndex = pending.entries.findIndex(\n (entry) => \"target\" in entry && entry.target === target,\n );\n if (entryIndex !== -1) pending.entries.splice(entryIndex, 1);\n pending.observedTargets.delete(target);\n return;\n }\n pending.ineligibleTargets.delete(target);\n if (pending.observedTargets.has(target)) return;\n pending.observedTargets.add(target);\n const observed = {\n target,\n directionalBoundary: this.currentDirectionalBoundary(),\n };\n pending.targets.push(observed);\n pending.entries.push(observed);\n }\n\n removeTarget(target: PibblEventTargetRegistration): void {\n if (this.pendingSpaceTarget === target) this.cancelSpaceActivation();\n if (this.pending) {\n this.markPendingIneligible(target);\n return;\n }\n if (\n !this.committedCandidates.some((candidate) => candidate.target === target)\n ) {\n if (this.focusedTarget === target) this.clearFocusState();\n return;\n }\n this.commitRemovedTarget(target);\n }\n\n snapshot(target: PibblEventTargetRegistration) {\n if (\n this.ownerReleased ||\n this.pending?.ineligibleTargets.has(target) ||\n target !== this.focusedTarget\n ) {\n return UNFOCUSED_SNAPSHOT;\n }\n return Object.freeze({\n isFocused: true,\n isFocusVisible: this.focusVisible,\n });\n }\n\n resolveKeyboardTarget(): PibblEventTargetRegistration | undefined {\n const target = this.focusedTarget;\n if (target && this.pending?.ineligibleTargets.has(target)) return undefined;\n return target &&\n this.committedCandidates.some((candidate) => candidate.target === target)\n ? target\n : undefined;\n }\n\n afterDispatch(event: PibblEvent): void {\n if (event.type === \"keydown\") {\n applyTabDefault(this, event as PibblKeyboardEvent);\n }\n if (event.type === \"keydown\" || event.type === \"keyup\") {\n applyKeyboardActivationDefault(this, event as PibblKeyboardEvent);\n }\n if (event.type === \"keydown\") {\n applyDirectionalNavigationDefault(this, event as PibblKeyboardEvent);\n }\n }\n\n afterPressDispatch(input: PibblFocusPressDefaultInput): void {\n if (this.destroyed) return;\n this.purgeExpiredPresses(input.originalEvent.timeStamp);\n switch (input.source) {\n case \"pointer\":\n this.recordPointerPress(input);\n if (!pressWasPrevented(input)) this.applyPressFocus(input.target);\n return;\n case \"mouse\":\n if (this.consumeRepresentedMousePress(input)) return;\n if (!pressWasPrevented(input)) this.applyPressFocus(input.target);\n return;\n case \"touch\":\n if (this.consumeRepresentedTouchPress(input)) return;\n this.recordTouchFallback(input);\n if (!pressWasPrevented(input)) this.applyPressFocus(input.target);\n return;\n }\n }\n\n afterTouchDispatch(input: PibblFocusTouchDefaultInput): void {\n if (this.destroyed) return;\n this.purgeExpiredPresses(input.originalEvent.timeStamp);\n this.reconcileTouchContacts(input);\n if (input.type === \"touchstart\") {\n const primary = this.recordTouchStarts(input);\n if (!primary) return;\n this.afterPressDispatch({\n source: \"touch\",\n target: primary.target,\n event: undefined,\n originalEvent: input.originalEvent,\n x: primary.x,\n y: primary.y,\n touchIdentifier: primary.identifier,\n });\n return;\n }\n if (input.type === \"touchend\" || input.type === \"touchcancel\") {\n this.recordTouchTerminals(input);\n }\n }\n\n beforeNativeDispatch(\n type: PibblEventType,\n event: Event,\n ): PibblFocusManager | undefined {\n return this.coordinator.beforeNativeDispatch(type, event);\n }\n\n enterDOMFocus(backwards: boolean): void {\n if (this.destroyed) return;\n const pendingPress = this.pendingPressFocus;\n if (pendingPress) {\n this.pendingPressFocus = undefined;\n transitionLogicalFocus(\n this,\n this.liveFocusCandidate(pendingPress.target),\n \"pointer\",\n );\n return;\n }\n const candidates = backwards\n ? [...this.committedNavigationCandidates].reverse()\n : this.committedNavigationCandidates;\n for (const candidate of candidates) {\n if (this.focusNavigationCandidate(candidate, \"keyboard\", backwards))\n return;\n }\n }\n\n leaveDOMFocus(): void {\n if (this.destroyed) return;\n this.pendingPressFocus = undefined;\n transitionLogicalFocus(this, undefined, \"keyboard\");\n }\n\n activateDOMHost(): void {\n if (!this.destroyed) this.coordinator.syncDOMFocusHost(this);\n }\n\n focusNavigationCandidate(\n candidate: PibblNavigationCandidate | undefined,\n modality: \"keyboard\" | \"pointer\",\n backwards = false,\n ): boolean {\n if (!candidate) return false;\n if (!isHtmlFocusCandidate(candidate)) {\n this.focusedHtmlRegion && this.clearHtmlFocus(this.focusedHtmlRegion);\n transitionLogicalFocus(\n this,\n this.liveFocusCandidate(candidate.target),\n modality,\n );\n return true;\n }\n const region = candidate.region;\n const content = region.active ? region.content : undefined;\n const stops = content ? getManagedTabStops(content) : [];\n const destination = backwards ? stops.at(-1) : stops[0];\n if (!destination) return false;\n if (this.focusedTarget) transitionLogicalFocus(this, undefined, modality);\n this.adoptHtmlFocus(region, modality);\n this.pendingHtmlFocusModality = modality;\n destination.focus({ preventScroll: true });\n this.pendingHtmlFocusModality = undefined;\n return true;\n }\n\n /** @internal Called by the native region listeners after the browser focuses a descendant. */\n adoptNativeHtmlFocus(\n region: HtmlFocusRegion,\n modality: \"keyboard\" | \"pointer\" | undefined,\n ): void {\n if (\n !this.committedHtmlCandidates.some(\n (candidate) => candidate.region === region,\n )\n )\n return;\n const carriedModality =\n modality ?? (this.focusVisible ? \"keyboard\" : \"pointer\");\n if (this.focusedTarget)\n transitionLogicalFocus(this, undefined, carriedModality);\n this.adoptHtmlFocus(\n region,\n this.pendingHtmlFocusModality ?? carriedModality,\n );\n }\n\n /** @internal Native blur settled outside a registered host. */\n clearNativeHtmlFocus(region: HtmlFocusRegion): void {\n if (this.focusedHtmlRegion === region) this.clearHtmlFocus(region);\n }\n\n /** @internal Reconciles a committed host list with the browser focus owner. */\n reconcileNativeHtmlFocus(region: HtmlFocusRegion | undefined): void {\n if (region) {\n this.adoptNativeHtmlFocus(region, undefined);\n } else if (this.focusedHtmlRegion) {\n this.clearHtmlFocus(this.focusedHtmlRegion);\n }\n }\n\n replayRetainedSubtree(instance: PibblInstance): void {\n const retainedManagers = this.coordinator.claimRetainedManagers(instance);\n const replayManager =\n retainedManagers.length === 1 ? retainedManagers[0] : this;\n replayManager.replayRetainedTargets(instance);\n }\n\n layerFocusRenderRevision(instance: PibblInstance): number | undefined {\n return this.ownerReleased\n ? undefined\n : this.layerFocusRenderRevisions.get(instance);\n }\n\n private replayRetainedTargets(instance: PibblInstance): void {\n // A cached Layer must replay the exact mixed source sequence from its last\n // successful render. Enumerating eventRoot.targets would lose HtmlBox\n // positions because native regions intentionally have no event target.\n const retained = this.committedNavigationCandidates.filter((candidate) =>\n isHtmlFocusCandidate(candidate)\n ? isInstanceWithin(candidate.region.owner, instance)\n : isInstanceWithin(candidate.target.owner, instance),\n );\n // Preserve the established Canvas-only replay behavior. A Canvas target\n // registration can be refreshed independently of its original collection\n // position; the mixed sequence is required only once native regions exist.\n if (!retained.some(isHtmlFocusCandidate)) {\n this.replayCanvasOnlyTargets(instance);\n return;\n }\n if (this.pending) {\n for (const candidate of retained) {\n const retainedBoundary = isHtmlFocusCandidate(candidate)\n ? candidate.directionalBoundary instanceof DirectionalBoundary &&\n isInstanceWithin(candidate.directionalBoundary.owner, instance)\n ? candidate.directionalBoundary\n : undefined\n : retainedDirectionalBoundaries.get(candidate.target);\n const directionalBoundary =\n retainedBoundary && isInstanceWithin(retainedBoundary.owner, instance)\n ? retainedBoundary\n : this.currentDirectionalBoundary();\n if (directionalBoundary) {\n this.pending.boundaries.add(directionalBoundary);\n }\n if (isHtmlFocusCandidate(candidate)) {\n const region = candidate.region;\n if (!region.active || !region.content) continue;\n if (!this.pending.observedHtmlRegions.has(region)) {\n this.pending.observedHtmlRegions.add(region);\n const observed = { region, directionalBoundary };\n this.pending.htmlRegions.push(observed);\n this.pending.entries.push(observed);\n }\n } else if (isKeyboardFocusable(candidate.target)) {\n this.recordPendingTarget(candidate.target, directionalBoundary);\n } else {\n this.markPendingIneligible(candidate.target);\n }\n }\n return;\n }\n\n if (retained.length === 0) return;\n if (this.stageRetainedNavigation()) return;\n const replayed = new Set(retained);\n const candidates = Object.freeze(\n this.committedNavigationCandidates.map((candidate) => {\n if (!replayed.has(candidate)) return candidate;\n return isHtmlFocusCandidate(candidate)\n ? Object.freeze({\n ...candidate,\n rootBounds: candidate.region.rootBounds,\n })\n : Object.freeze({\n ...candidate,\n rootBounds: resolveTargetRootBounds(candidate.target),\n });\n }),\n );\n this.commitNavigationCandidates(candidates, this.committedBoundaries);\n }\n\n private replayCanvasOnlyTargets(instance: PibblInstance): void {\n const targets: PibblEventTargetRegistration[] = [];\n collectRetainedTargets(instance, targets);\n if (this.pending) {\n for (const target of targets) {\n if (!isKeyboardFocusable(target)) {\n this.markPendingIneligible(target);\n continue;\n }\n const retainedBoundary = retainedDirectionalBoundaries.get(target);\n const directionalBoundary =\n retainedBoundary && isInstanceWithin(retainedBoundary.owner, instance)\n ? retainedBoundary\n : this.currentDirectionalBoundary();\n if (directionalBoundary)\n this.pending.boundaries.add(directionalBoundary);\n this.recordPendingTarget(target, directionalBoundary);\n }\n return;\n }\n if (this.stageRetainedNavigation()) return;\n const replayed = new Set(targets);\n if (\n !this.committedCandidates.some((candidate) =>\n replayed.has(candidate.target),\n )\n )\n return;\n const candidates = Object.freeze(\n this.committedCandidates.map((candidate) =>\n replayed.has(candidate.target)\n ? Object.freeze({\n ...candidate,\n rootBounds: resolveTargetRootBounds(candidate.target),\n })\n : candidate,\n ),\n );\n this.commitCandidates(candidates, this.committedBoundaries);\n }\n\n /** A clean inner manager still joins its parent root's geometry adoption. */\n private stageRetainedNavigation(): boolean {\n const transaction = this.eventRoot.renderTransaction;\n if (!transaction?.onPreflight || !transaction.onAdopt) return false;\n if (this.retainedNavigationTransaction === transaction) return true;\n this.retainedNavigationTransaction = transaction;\n let prepared: PreparedNavigation | undefined;\n transaction.onPreflight(() => {\n if (this.destroyed) return;\n const candidates: PibblNavigationCandidate[] = [];\n for (const candidate of this.committedNavigationCandidates) {\n if (isHtmlFocusCandidate(candidate)) {\n const geometry = preparedLayoutHtmlGeometry(transaction, candidate.region);\n if (geometry ? !geometry.active : !candidate.region.active || !candidate.region.content) continue;\n candidates.push(Object.freeze({ ...candidate, rootBounds: geometry?.bounds ?? candidate.region.rootBounds }));\n } else {\n candidates.push(Object.freeze({ ...candidate, rootBounds: preparedLayoutTargetBounds(transaction, candidate.target) }));\n }\n }\n prepared = this.prepareNavigationCandidates(Object.freeze(candidates), this.committedBoundaries);\n });\n transaction.onAdopt(() => { if (prepared && !this.destroyed) this.adoptNavigationCandidates(prepared); });\n transaction.onFinish(success => {\n if (this.retainedNavigationTransaction === transaction) this.retainedNavigationTransaction = undefined;\n if (success && prepared && !this.destroyed) this.finishNavigationCandidates();\n });\n return true;\n }\n\n setFocusState(\n target: PibblEventTargetRegistration | undefined,\n focusVisible: boolean,\n ): void {\n if (\n target &&\n !this.committedCandidates.some((candidate) => candidate.target === target)\n ) {\n throw new Error(\n \"Pibbl logical focus target is not a live focus candidate.\",\n );\n }\n this.commitLogicalFocus(target, focusVisible);\n }\n\n liveFocusCandidate(\n target: PibblEventTargetRegistration | undefined,\n ): PibblEventTargetRegistration | undefined {\n return target?.live &&\n target.owner.eventRoot === this.eventRoot &&\n this.committedCandidates.some((candidate) => candidate.target === target)\n ? target\n : undefined;\n }\n\n commitLogicalFocus(\n target: PibblEventTargetRegistration | undefined,\n focusVisible: boolean,\n ): void {\n const nextFocusVisible = Boolean(target && focusVisible);\n if (\n target === this.focusedTarget &&\n nextFocusVisible === this.focusVisible\n ) {\n return;\n }\n const previous = this.focusedTarget;\n if (this.focusedTarget !== target) this.cancelSpaceActivation();\n this.focusedTarget = target;\n this.focusVisible = nextFocusVisible;\n const revision = ++this.focusRenderRevision;\n this.markFocusRenderLayers(previous, revision);\n this.markFocusRenderLayers(target, revision);\n }\n\n enterDirectionalBoundary(boundary: PibblDirectionalBoundary): void {\n const value = asDirectionalBoundary(boundary);\n this.directionalStack.push(value);\n this.pending?.boundaries.add(value);\n }\n\n exitDirectionalBoundary(boundary: PibblDirectionalBoundary): void {\n const value = asDirectionalBoundary(boundary);\n if (this.directionalStack.at(-1) !== value) {\n throw new Error(\"Pibbl directional boundary scope exited out of order.\");\n }\n this.directionalStack.pop();\n }\n\n private currentDirectionalBoundary(): DirectionalBoundary | undefined {\n return this.directionalStack.at(-1);\n }\n\n private markFocusRenderLayers(\n target: PibblEventTargetRegistration | undefined,\n revision: number,\n ): void {\n let instance = target?.owner;\n while (instance && instance !== this.eventRoot.rootInstance) {\n this.layerFocusRenderRevisions.set(instance, revision);\n instance = instance.parent\n ? GLOBAL_STATE.pibblInstances.get(instance.parent)\n : undefined;\n }\n }\n\n dispose(): void {\n if (this.ownerReleased || this.destroyed) return;\n this.coordinator.release(this);\n }\n\n markOwnerReleased(): void {\n this.ownerReleased = true;\n }\n\n destroyFromCoordinator(): void {\n if (this.destroyed) return;\n this.destroyed = true;\n managerOwners.delete(this);\n this.pending = undefined;\n this.directionalStack = [];\n this.pendingPressFocus = undefined;\n this.cancelSpaceActivation();\n this.representedPointerPresses.clear();\n this.representedTouchContacts.clear();\n this.activeTouchIdentifiers.clear();\n this.primaryTouchIdentifier = undefined;\n this.touchSequenceActive = false;\n this.touchMouseCompatibility = undefined;\n for (const boundary of this.committedBoundaries) {\n boundary.commit(Object.freeze([]));\n }\n this.committedBoundaries.clear();\n this.committedCandidates = Object.freeze([]);\n this.clearFocusState();\n }\n\n private recordPendingTarget(\n target: PibblEventTargetRegistration,\n directionalBoundary: DirectionalBoundary | undefined,\n ): void {\n const pending = this.pending;\n if (!pending || pending.observedTargets.has(target)) return;\n pending.observedTargets.add(target);\n const observed = { target, directionalBoundary };\n pending.targets.push(observed);\n pending.entries.push(observed);\n }\n\n private markPendingIneligible(target: PibblEventTargetRegistration): void {\n const pending = this.pending;\n if (!pending) return;\n pending.ineligibleTargets.add(target);\n if (!pending.observedTargets.delete(target)) return;\n for (let index = pending.targets.length - 1; index >= 0; index--) {\n if (pending.targets[index].target === target) {\n pending.targets.splice(index, 1);\n }\n }\n for (let index = pending.entries.length - 1; index >= 0; index--) {\n const entry = pending.entries[index];\n if (\"target\" in entry && entry.target === target)\n pending.entries.splice(index, 1);\n }\n }\n\n private commitCandidates(\n candidates: readonly PibblFocusCandidate[],\n boundaries: ReadonlySet<DirectionalBoundary>,\n ): void {\n const canvasByTarget = new Map(\n candidates.map((candidate) => [candidate.target, candidate]),\n );\n const navigation = this.committedNavigationCandidates\n .map((candidate) =>\n isHtmlFocusCandidate(candidate)\n ? candidate\n : (canvasByTarget.get(candidate.target) ?? candidate),\n )\n .filter(\n (candidate) =>\n isHtmlFocusCandidate(candidate) ||\n candidates.some((canvas) => canvas.target === candidate.target),\n );\n if (navigation.length === 0 && candidates.length > 0)\n navigation.push(...candidates);\n this.commitNavigationCandidates(Object.freeze(navigation), boundaries);\n }\n\n private commitNavigationCandidates(\n candidates: readonly PibblNavigationCandidate[],\n boundaries: ReadonlySet<DirectionalBoundary>,\n ): void {\n this.adoptNavigationCandidates(this.prepareNavigationCandidates(candidates, boundaries));\n this.finishNavigationCandidates();\n }\n\n private prepareNavigationCandidates(\n candidates: readonly PibblNavigationCandidate[],\n boundaries: ReadonlySet<DirectionalBoundary>,\n ): PreparedNavigation {\n const pendingByBoundary = new Map<\n DirectionalBoundary,\n PibblNavigationCandidate[]\n >();\n for (const boundary of boundaries) pendingByBoundary.set(boundary, []);\n for (const candidate of candidates) {\n if (candidate.directionalBoundary instanceof DirectionalBoundary) {\n pendingByBoundary.get(candidate.directionalBoundary)?.push(candidate);\n }\n }\n\n // Freeze every replacement before exposing any one of them. Candidate\n // collection failures therefore leave every committed direct list intact.\n const committedByBoundary = new Map<\n DirectionalBoundary,\n readonly PibblNavigationCandidate[]\n >();\n for (const [boundary, directCandidates] of pendingByBoundary) {\n committedByBoundary.set(boundary, Object.freeze(directCandidates));\n }\n\n return {\n navigation: candidates,\n canvas: Object.freeze(candidates.filter((candidate): candidate is PibblFocusCandidate => !isHtmlFocusCandidate(candidate))),\n html: Object.freeze(candidates.filter((candidate): candidate is PibblHtmlFocusCandidate => isHtmlFocusCandidate(candidate))),\n byBoundary: committedByBoundary,\n boundaries: new Set(committedByBoundary.keys()),\n };\n }\n\n private adoptNavigationCandidates(prepared: PreparedNavigation): void {\n for (const boundary of this.committedBoundaries) {\n if (!prepared.byBoundary.has(boundary)) boundary.commit(EMPTY_NAVIGATION);\n }\n for (const [boundary, candidates] of prepared.byBoundary) boundary.commit(candidates);\n this.committedBoundaries = prepared.boundaries;\n this.committedNavigationCandidates = prepared.navigation;\n this.committedCandidates = prepared.canvas;\n this.committedHtmlCandidates = prepared.html;\n for (const candidate of prepared.canvas) {\n if (candidate.directionalBoundary) retainedDirectionalBoundaries.set(candidate.target, asDirectionalBoundary(candidate.directionalBoundary));\n else retainedDirectionalBoundaries.delete(candidate.target);\n }\n }\n\n private finishNavigationCandidates(): void {\n const candidates = this.committedNavigationCandidates;\n if (\n this.focusedTarget &&\n !candidates.some(\n (candidate) =>\n !isHtmlFocusCandidate(candidate) &&\n candidate.target === this.focusedTarget,\n )\n ) {\n this.clearFocusState();\n }\n if (\n this.focusedHtmlRegion &&\n !this.committedHtmlCandidates.some(\n (candidate) => candidate.region === this.focusedHtmlRegion,\n )\n )\n this.clearHtmlFocus(this.focusedHtmlRegion);\n this.activateDOMHost();\n }\n\n private commitRemovedTarget(target: PibblEventTargetRegistration): void {\n const retained = this.committedCandidates.filter(\n (candidate) => candidate.target !== target,\n );\n const candidates = Object.freeze(\n retained.map((candidate, sourceIndex) =>\n Object.freeze({ ...candidate, sourceIndex }),\n ),\n );\n this.commitCandidates(candidates, this.committedBoundaries);\n }\n\n private clearFocusState(): void {\n this.cancelSpaceActivation();\n this.focusedTarget = undefined;\n this.focusVisible = false;\n }\n\n private adoptHtmlFocus(\n region: HtmlFocusRegion,\n modality: \"keyboard\" | \"pointer\",\n ): void {\n const visible = modality === \"keyboard\";\n if (this.focusedHtmlRegion === region && this.focusVisible === visible)\n return;\n const previous = this.focusedHtmlRegion;\n this.focusedHtmlRegion = region;\n this.focusVisible = visible;\n if (previous && previous !== region)\n this.notifyHtmlFocus(previous, false, false);\n this.notifyHtmlFocus(region, true, visible);\n }\n\n private clearHtmlFocus(region: HtmlFocusRegion): void {\n if (this.focusedHtmlRegion !== region) return;\n this.focusedHtmlRegion = undefined;\n this.focusVisible = false;\n this.notifyHtmlFocus(region, false, false);\n }\n\n private notifyHtmlFocus(\n region: HtmlFocusRegion,\n isFocusWithin: boolean,\n isFocusVisible: boolean,\n ): void {\n region.onFocusSnapshot?.(Object.freeze({ isFocusWithin, isFocusVisible }));\n }\n\n private applyPressFocus(\n requestedTarget: PibblEventTargetRegistration | undefined,\n ): void {\n const target = this.liveFocusCandidate(requestedTarget);\n const pending = { target };\n this.pendingPressFocus = pending;\n try {\n this.coordinator.focusCanvasFromPress(this);\n if (\n this.pendingPressFocus !== pending ||\n this.destroyed ||\n this.canvas.ownerDocument.activeElement !== this.canvas\n ) {\n return;\n }\n this.pendingPressFocus = undefined;\n transitionLogicalFocus(this, this.liveFocusCandidate(target), \"pointer\");\n } finally {\n if (this.pendingPressFocus === pending)\n this.pendingPressFocus = undefined;\n }\n }\n\n beginSpaceActivation(target: PibblEventTargetRegistration): void {\n this.pendingSpaceTarget = target;\n }\n\n hasPendingSpaceActivation(\n target: PibblEventTargetRegistration | undefined,\n ): boolean {\n return Boolean(target && this.pendingSpaceTarget === target);\n }\n\n consumeSpaceActivation(): PibblEventTargetRegistration | undefined {\n const target = this.pendingSpaceTarget;\n this.pendingSpaceTarget = undefined;\n return target;\n }\n\n cancelSpaceActivation(): void {\n this.pendingSpaceTarget = undefined;\n }\n\n private recordPointerPress(input: PibblFocusPressDefaultInput): void {\n if (input.pointerId === undefined) return;\n this.representedPointerPresses.set(input.pointerId, {\n x: input.x,\n y: input.y,\n timeStamp: input.originalEvent.timeStamp,\n suppressMouse: true,\n suppressTouch: input.pointerType === \"touch\",\n });\n }\n\n private consumeRepresentedMousePress(\n input: PibblFocusPressDefaultInput,\n ): boolean {\n for (const [pointerId, press] of this.representedPointerPresses) {\n if (!press.suppressMouse || !samePress(press, input)) continue;\n press.suppressMouse = false;\n if (!press.suppressTouch)\n this.representedPointerPresses.delete(pointerId);\n return true;\n }\n if (\n this.touchMouseCompatibility &&\n samePress(this.touchMouseCompatibility, input)\n ) {\n this.touchMouseCompatibility = undefined;\n return true;\n }\n return false;\n }\n\n private consumeRepresentedTouchPress(\n input: PibblFocusPressDefaultInput,\n ): boolean {\n const identifier = input.touchIdentifier;\n if (identifier === undefined) return false;\n const existing = this.representedTouchContacts.get(identifier);\n if (existing && samePress(existing, input)) return true;\n this.representedTouchContacts.set(identifier, pressRecord(input));\n\n for (const [pointerId, press] of this.representedPointerPresses) {\n if (!press.suppressTouch || !samePress(press, input)) continue;\n press.suppressTouch = false;\n if (!press.suppressMouse)\n this.representedPointerPresses.delete(pointerId);\n return true;\n }\n return false;\n }\n\n private recordTouchFallback(input: PibblFocusPressDefaultInput): void {\n this.touchMouseCompatibility = pressRecord(input);\n }\n\n private recordTouchStarts(\n input: PibblFocusTouchDefaultInput,\n ): PibblFocusTouchDefaultContact | undefined {\n let primary: PibblFocusTouchDefaultContact | undefined;\n for (const contact of input.changedContacts) {\n if (this.activeTouchIdentifiers.has(contact.identifier)) continue;\n if (!this.touchSequenceActive) {\n this.touchSequenceActive = true;\n this.primaryTouchIdentifier = contact.identifier;\n }\n if (contact.identifier === this.primaryTouchIdentifier) primary = contact;\n this.activeTouchIdentifiers.add(contact.identifier);\n }\n return primary;\n }\n\n private reconcileTouchContacts(input: PibblFocusTouchDefaultInput): void {\n const activeIdentifiers = new Set(input.activeIdentifiers);\n for (const identifier of this.activeTouchIdentifiers) {\n if (activeIdentifiers.has(identifier)) continue;\n this.activeTouchIdentifiers.delete(identifier);\n this.representedTouchContacts.delete(identifier);\n }\n\n const startingIdentifiers =\n input.type === \"touchstart\"\n ? new Set(input.changedContacts.map((contact) => contact.identifier))\n : undefined;\n for (const identifier of activeIdentifiers) {\n if (!startingIdentifiers?.has(identifier)) {\n this.activeTouchIdentifiers.add(identifier);\n }\n }\n\n if (this.activeTouchIdentifiers.size > 0) {\n this.touchSequenceActive = true;\n return;\n }\n this.touchSequenceActive = false;\n this.primaryTouchIdentifier = undefined;\n this.representedTouchContacts.clear();\n }\n\n private recordTouchTerminals(input: PibblFocusTouchDefaultInput): void {\n for (const contact of input.changedContacts) {\n this.activeTouchIdentifiers.delete(contact.identifier);\n this.representedTouchContacts.delete(contact.identifier);\n }\n if (this.activeTouchIdentifiers.size > 0) return;\n this.touchSequenceActive = false;\n this.primaryTouchIdentifier = undefined;\n this.representedTouchContacts.clear();\n }\n\n private purgeExpiredPresses(timeStamp: number): void {\n for (const [pointerId, press] of this.representedPointerPresses) {\n if (!recentPress(press, timeStamp)) {\n this.representedPointerPresses.delete(pointerId);\n }\n }\n for (const [identifier, press] of this.representedTouchContacts) {\n if (!recentPress(press, timeStamp)) {\n this.representedTouchContacts.delete(identifier);\n }\n }\n if (\n this.touchMouseCompatibility &&\n !recentPress(this.touchMouseCompatibility, timeStamp)\n ) {\n this.touchMouseCompatibility = undefined;\n }\n }\n\n private assertLive(): void {\n if (this.destroyed) throw new Error(\"Pibbl focus manager is disposed.\");\n }\n}\n\nfunction pressWasPrevented(input: PibblFocusPressDefaultInput): boolean {\n return input.event?.defaultPrevented ?? input.originalEvent.defaultPrevented;\n}\n\nfunction pressRecord(input: PibblFocusPressDefaultInput): RepresentedPress {\n return {\n x: input.x,\n y: input.y,\n timeStamp: input.originalEvent.timeStamp,\n };\n}\n\nfunction samePress(\n press: RepresentedPress,\n input: PibblFocusPressDefaultInput,\n): boolean {\n return (\n recentPress(press, input.originalEvent.timeStamp) &&\n Math.abs(press.x - input.x) <= 1 &&\n Math.abs(press.y - input.y) <= 1\n );\n}\n\nfunction recentPress(press: RepresentedPress, timeStamp: number): boolean {\n const elapsed = timeStamp - press.timeStamp;\n return elapsed >= 0 && elapsed <= COMPATIBILITY_PRESS_WINDOW_MS;\n}\n\nexport function createFocusManager(\n eventRoot: PibblEventRoot,\n owner: PibblInstance,\n): PibblFocusManager {\n return new PibblFocusManager(eventRoot, owner);\n}\n\nexport function requireFocusManager(eventRoot: PibblEventRoot): PibblFocusManager {\n const manager = eventRoot.focusPolicy;\n if (!(manager instanceof PibblFocusManager)) {\n throw new Error(\n \"KeyboardNavigation requires an active FocusManagement focus manager.\",\n );\n }\n return manager;\n}\n\nexport function createDirectionalBoundary(\n owner: PibblInstance,\n): PibblDirectionalBoundary {\n return new DirectionalBoundary(owner);\n}\n\nfunction getCoordinator(eventRoot: PibblEventRoot): FocusManagerCoordinator {\n let coordinator = coordinators.get(eventRoot);\n if (!coordinator) {\n coordinator = new FocusManagerCoordinator(eventRoot);\n coordinators.set(eventRoot, coordinator);\n }\n return coordinator;\n}\n\nfunction duplicateManagerError(): Error {\n return new Error(\n \"FocusManagement allows only one focus manager per Pibbl root.\",\n );\n}\n\nfunction asDirectionalBoundary(\n boundary: PibblDirectionalBoundary,\n): DirectionalBoundary {\n if (!(boundary instanceof DirectionalBoundary)) {\n throw new Error(\"Unknown Pibbl directional boundary.\");\n }\n return boundary;\n}\n\nfunction isKeyboardFocusable(target: PibblEventTargetRegistration): boolean {\n return (\n target.keyboardFocusable ??\n Boolean(\n target.handlers.click || target.handlers.keydown || target.handlers.keyup,\n )\n );\n}\n\nfunction collectRetainedTargets(\n instance: PibblInstance,\n targets: PibblEventTargetRegistration[],\n): void {\n if (instance.mainTeardowns.closed) return;\n for (const target of instance.eventRoot.targets) {\n if (\n target.live &&\n target.owner.eventRoot === instance.eventRoot &&\n !target.owner.mainTeardowns.closed &&\n isInstanceWithin(target.owner, instance)\n )\n targets.push(target);\n }\n}\n\nfunction isInstanceWithin(\n instance: PibblInstance,\n ancestor: PibblInstance,\n): boolean {\n let current: PibblInstance | undefined = instance;\n while (current) {\n if (current === ancestor) return true;\n current = current.parent\n ? GLOBAL_STATE.pibblInstances.get(current.parent)\n : undefined;\n }\n return false;\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }