@pibbl/core 0.0.2 → 0.0.3-alpha.109.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (549) hide show
  1. package/THIRD_PARTY_NOTICES.txt +81 -0
  2. package/dist/features/physics/2d-testing.d.ts +1 -1
  3. package/dist/features/physics/2d-testing.js +2 -2
  4. package/dist/features/physics/2d-testing.js.map +2 -2
  5. package/dist/features/physics/lib/2d/canvas/components.js +25 -21
  6. package/dist/features/physics/lib/2d/canvas/components.js.map +2 -2
  7. package/dist/features/physics/lib/2d/canvas/presentation.js +1 -2
  8. package/dist/features/physics/lib/2d/canvas/presentation.js.map +2 -2
  9. package/dist/features/physics/lib/2d/collision/casts.js +4 -2
  10. package/dist/features/physics/lib/2d/collision/casts.js.map +2 -2
  11. package/dist/features/physics/lib/2d/runtime/controller.js +1 -1
  12. package/dist/features/physics/lib/2d/runtime/controller.js.map +2 -2
  13. package/dist/features/physics/lib/2d/runtime/obstacles.js +9 -11
  14. package/dist/features/physics/lib/2d/runtime/obstacles.js.map +2 -2
  15. package/dist/features/physics/lib/2d/shapes.js +8 -9
  16. package/dist/features/physics/lib/2d/shapes.js.map +2 -2
  17. package/dist/features/physics/lib/2d/world/rapier.js +22 -26
  18. package/dist/features/physics/lib/2d/world/rapier.js.map +2 -2
  19. package/dist/features/sprites/loader.js +6 -3
  20. package/dist/features/sprites/loader.js.map +2 -2
  21. package/dist/features/textures/index.d.ts +12 -2
  22. package/dist/features/textures/index.js +33 -1
  23. package/dist/features/textures/index.js.map +2 -2
  24. package/dist/features/textures/lib/chemical-field.d.ts +56 -0
  25. package/dist/features/textures/lib/chemical-field.js +154 -0
  26. package/dist/features/textures/lib/chemical-field.js.map +7 -0
  27. package/dist/features/textures/lib/chemical-recipes.d.ts +119 -0
  28. package/dist/features/textures/lib/chemical-recipes.js +275 -0
  29. package/dist/features/textures/lib/chemical-recipes.js.map +7 -0
  30. package/dist/features/textures/lib/definitions.d.ts +3 -18
  31. package/dist/features/textures/lib/definitions.js +17 -24
  32. package/dist/features/textures/lib/definitions.js.map +2 -2
  33. package/dist/features/textures/lib/geometric-patterns.d.ts +149 -0
  34. package/dist/features/textures/lib/geometric-patterns.js +305 -0
  35. package/dist/features/textures/lib/geometric-patterns.js.map +7 -0
  36. package/dist/features/textures/lib/gray-scott.d.ts +55 -0
  37. package/dist/features/textures/lib/gray-scott.js +37 -0
  38. package/dist/features/textures/lib/gray-scott.js.map +7 -0
  39. package/dist/features/textures/lib/palette.js +1 -3
  40. package/dist/features/textures/lib/palette.js.map +2 -2
  41. package/dist/features/textures/lib/patterns.d.ts +123 -0
  42. package/dist/features/textures/lib/patterns.js +344 -0
  43. package/dist/features/textures/lib/patterns.js.map +7 -0
  44. package/dist/features/textures/lib/rain-drops.js +2 -1
  45. package/dist/features/textures/lib/rain-drops.js.map +2 -2
  46. package/dist/features/textures/lib/reaction-diffusion.d.ts +3 -2
  47. package/dist/features/textures/lib/reaction-diffusion.js +9 -20
  48. package/dist/features/textures/lib/reaction-diffusion.js.map +2 -2
  49. package/dist/features/textures/lib/simulation.d.ts +10 -4
  50. package/dist/features/textures/lib/simulation.js +23 -13
  51. package/dist/features/textures/lib/simulation.js.map +2 -2
  52. package/dist/features/textures/lib/wasm/electric.js +8 -1
  53. package/dist/features/textures/lib/wasm/electric.js.map +2 -2
  54. package/dist/features/textures/lib/water-surface.js +1 -3
  55. package/dist/features/textures/lib/water-surface.js.map +2 -2
  56. package/dist/features/viz/index.d.ts +68 -6
  57. package/dist/features/viz/index.js +164 -2
  58. package/dist/features/viz/index.js.map +2 -2
  59. package/dist/features/viz/inspection/bar.d.ts +79 -0
  60. package/dist/features/viz/inspection/bar.js +49 -0
  61. package/dist/features/viz/inspection/bar.js.map +7 -0
  62. package/dist/features/viz/inspection/candle.d.ts +156 -0
  63. package/dist/features/viz/inspection/candle.js +120 -0
  64. package/dist/features/viz/inspection/candle.js.map +7 -0
  65. package/dist/features/viz/inspection/capture-types.d.ts +65 -0
  66. package/dist/features/viz/inspection/capture.d.ts +16 -0
  67. package/dist/features/viz/inspection/capture.js +49 -0
  68. package/dist/features/viz/inspection/capture.js.map +7 -0
  69. package/dist/features/viz/inspection/handler.d.ts +36 -0
  70. package/dist/features/viz/inspection/handler.js +91 -0
  71. package/dist/features/viz/inspection/handler.js.map +7 -0
  72. package/dist/features/viz/inspection/ohlc-bar.d.ts +132 -0
  73. package/dist/features/viz/inspection/ohlc-bar.js +118 -0
  74. package/dist/features/viz/inspection/ohlc-bar.js.map +7 -0
  75. package/dist/features/viz/inspection/owned-ref.d.ts +16 -0
  76. package/dist/features/viz/inspection/owned-ref.js +99 -0
  77. package/dist/features/viz/inspection/owned-ref.js.map +7 -0
  78. package/dist/features/viz/inspection/painted-point.d.ts +22 -0
  79. package/dist/features/viz/inspection/painted-point.js +29 -0
  80. package/dist/features/viz/inspection/painted-point.js.map +7 -0
  81. package/dist/features/viz/inspection/queries.d.ts +100 -0
  82. package/dist/features/viz/inspection/queries.js +192 -0
  83. package/dist/features/viz/inspection/queries.js.map +7 -0
  84. package/dist/features/viz/inspection/query-types.d.ts +177 -0
  85. package/dist/features/viz/inspection/volume.d.ts +104 -0
  86. package/dist/features/viz/inspection/volume.js +95 -0
  87. package/dist/features/viz/inspection/volume.js.map +7 -0
  88. package/dist/features/viz/inspection.d.ts +19 -0
  89. package/dist/features/viz/inspection.js +54 -0
  90. package/dist/features/viz/inspection.js.map +7 -0
  91. package/dist/features/viz/inspection.mjs +1 -0
  92. package/dist/features/viz/lib/area-series.d.ts +62 -0
  93. package/dist/features/viz/lib/area-series.js +120 -0
  94. package/dist/features/viz/lib/area-series.js.map +7 -0
  95. package/dist/features/viz/lib/axis-title.js +2 -1
  96. package/dist/features/viz/lib/axis-title.js.map +2 -2
  97. package/dist/features/viz/lib/axis.js +1 -1
  98. package/dist/features/viz/lib/axis.js.map +2 -2
  99. package/dist/features/viz/lib/bar-series.d.ts +3 -1
  100. package/dist/features/viz/lib/bar-series.js +16 -1
  101. package/dist/features/viz/lib/bar-series.js.map +2 -2
  102. package/dist/features/viz/lib/baseline-series.d.ts +55 -0
  103. package/dist/features/viz/lib/baseline-series.js +136 -0
  104. package/dist/features/viz/lib/baseline-series.js.map +7 -0
  105. package/dist/features/viz/lib/candlestick-series.d.ts +62 -0
  106. package/dist/features/viz/lib/candlestick-series.js +150 -0
  107. package/dist/features/viz/lib/candlestick-series.js.map +7 -0
  108. package/dist/features/viz/lib/censored-point-series.d.ts +71 -0
  109. package/dist/features/viz/lib/censored-point-series.js +129 -0
  110. package/dist/features/viz/lib/censored-point-series.js.map +7 -0
  111. package/dist/features/viz/lib/color-context.d.ts +4 -0
  112. package/dist/features/viz/lib/color-context.js +41 -0
  113. package/dist/features/viz/lib/color-context.js.map +7 -0
  114. package/dist/features/viz/lib/color-math.d.ts +4 -0
  115. package/dist/features/viz/lib/color-math.js +31 -0
  116. package/dist/features/viz/lib/color-math.js.map +7 -0
  117. package/dist/features/viz/lib/color-types.d.ts +53 -0
  118. package/dist/features/viz/lib/curve-definition.d.ts +49 -0
  119. package/dist/features/viz/lib/curve-definition.js +142 -0
  120. package/dist/features/viz/lib/curve-definition.js.map +7 -0
  121. package/dist/features/viz/lib/diverging-color-scale.d.ts +11 -0
  122. package/dist/features/viz/lib/diverging-color-scale.js +51 -0
  123. package/dist/features/viz/lib/diverging-color-scale.js.map +7 -0
  124. package/dist/features/viz/lib/domain-navigation.d.ts +40 -0
  125. package/dist/features/viz/lib/domain-navigation.js +77 -0
  126. package/dist/features/viz/lib/domain-navigation.js.map +7 -0
  127. package/dist/features/viz/lib/editable-chart-elements.d.ts +178 -0
  128. package/dist/features/viz/lib/editable-chart-elements.js +733 -0
  129. package/dist/features/viz/lib/editable-chart-elements.js.map +7 -0
  130. package/dist/features/viz/lib/financial-aggregation.d.ts +127 -0
  131. package/dist/features/viz/lib/financial-aggregation.js +116 -0
  132. package/dist/features/viz/lib/financial-aggregation.js.map +7 -0
  133. package/dist/features/viz/lib/financial-autoscale.d.ts +64 -0
  134. package/dist/features/viz/lib/financial-autoscale.js +61 -0
  135. package/dist/features/viz/lib/financial-autoscale.js.map +7 -0
  136. package/dist/features/viz/lib/financial-comparison.d.ts +62 -0
  137. package/dist/features/viz/lib/financial-comparison.js +98 -0
  138. package/dist/features/viz/lib/financial-comparison.js.map +7 -0
  139. package/dist/features/viz/lib/financial-geometry.d.ts +77 -0
  140. package/dist/features/viz/lib/financial-geometry.js +67 -0
  141. package/dist/features/viz/lib/financial-geometry.js.map +7 -0
  142. package/dist/features/viz/lib/financial-indicators.d.ts +114 -0
  143. package/dist/features/viz/lib/financial-indicators.js +135 -0
  144. package/dist/features/viz/lib/financial-indicators.js.map +7 -0
  145. package/dist/features/viz/lib/financial-oscillators.d.ts +171 -0
  146. package/dist/features/viz/lib/financial-oscillators.js +265 -0
  147. package/dist/features/viz/lib/financial-oscillators.js.map +7 -0
  148. package/dist/features/viz/lib/graph/bipartite.d.ts +14 -0
  149. package/dist/features/viz/lib/graph/bipartite.js +250 -0
  150. package/dist/features/viz/lib/graph/bipartite.js.map +7 -0
  151. package/dist/features/viz/lib/graph/chord.d.ts +44 -0
  152. package/dist/features/viz/lib/graph/chord.js +348 -0
  153. package/dist/features/viz/lib/graph/chord.js.map +7 -0
  154. package/dist/features/viz/lib/graph/dependency.d.ts +26 -0
  155. package/dist/features/viz/lib/graph/dependency.js +140 -0
  156. package/dist/features/viz/lib/graph/dependency.js.map +7 -0
  157. package/dist/features/viz/lib/graph/force.d.ts +28 -0
  158. package/dist/features/viz/lib/graph/force.js +580 -0
  159. package/dist/features/viz/lib/graph/force.js.map +7 -0
  160. package/dist/features/viz/lib/graph/hierarchy.d.ts +21 -0
  161. package/dist/features/viz/lib/graph/hierarchy.js +112 -0
  162. package/dist/features/viz/lib/graph/hierarchy.js.map +7 -0
  163. package/dist/features/viz/lib/graph/icicle.d.ts +16 -0
  164. package/dist/features/viz/lib/graph/icicle.js +153 -0
  165. package/dist/features/viz/lib/graph/icicle.js.map +7 -0
  166. package/dist/features/viz/lib/graph/matrix.d.ts +30 -0
  167. package/dist/features/viz/lib/graph/matrix.js +243 -0
  168. package/dist/features/viz/lib/graph/matrix.js.map +7 -0
  169. package/dist/features/viz/lib/graph/neighborhood.d.ts +11 -0
  170. package/dist/features/viz/lib/graph/neighborhood.js +281 -0
  171. package/dist/features/viz/lib/graph/neighborhood.js.map +7 -0
  172. package/dist/features/viz/lib/graph/routes.d.ts +35 -0
  173. package/dist/features/viz/lib/graph/routes.js +101 -0
  174. package/dist/features/viz/lib/graph/routes.js.map +7 -0
  175. package/dist/features/viz/lib/graph/sankey.d.ts +44 -0
  176. package/dist/features/viz/lib/graph/sankey.js +341 -0
  177. package/dist/features/viz/lib/graph/sankey.js.map +7 -0
  178. package/dist/features/viz/lib/graph/shared.d.ts +59 -0
  179. package/dist/features/viz/lib/graph/shared.js +301 -0
  180. package/dist/features/viz/lib/graph/shared.js.map +7 -0
  181. package/dist/features/viz/lib/graph/tree.d.ts +11 -0
  182. package/dist/features/viz/lib/graph/tree.js +232 -0
  183. package/dist/features/viz/lib/graph/tree.js.map +7 -0
  184. package/dist/features/viz/lib/graph/treemap.d.ts +20 -0
  185. package/dist/features/viz/lib/graph/treemap.js +227 -0
  186. package/dist/features/viz/lib/graph/treemap.js.map +7 -0
  187. package/dist/features/viz/lib/graph/types.d.ts +1097 -0
  188. package/dist/features/viz/lib/hover-card.js +8 -9
  189. package/dist/features/viz/lib/hover-card.js.map +2 -2
  190. package/dist/features/viz/lib/hover-data.d.ts +1 -1
  191. package/dist/features/viz/lib/hover-data.js +5 -2
  192. package/dist/features/viz/lib/hover-data.js.map +2 -2
  193. package/dist/features/viz/lib/interval-band-series.d.ts +49 -0
  194. package/dist/features/viz/lib/interval-band-series.js +136 -0
  195. package/dist/features/viz/lib/interval-band-series.js.map +7 -0
  196. package/dist/features/viz/lib/interval-diamond-series.d.ts +43 -0
  197. package/dist/features/viz/lib/interval-diamond-series.js +122 -0
  198. package/dist/features/viz/lib/interval-diamond-series.js.map +7 -0
  199. package/dist/features/viz/lib/interval-series.d.ts +79 -0
  200. package/dist/features/viz/lib/interval-series.js +158 -0
  201. package/dist/features/viz/lib/interval-series.js.map +7 -0
  202. package/dist/features/viz/lib/layout-pie.js +9 -13
  203. package/dist/features/viz/lib/layout-pie.js.map +2 -2
  204. package/dist/features/viz/lib/line-series.d.ts +1 -1
  205. package/dist/features/viz/lib/line-series.js +47 -28
  206. package/dist/features/viz/lib/line-series.js.map +2 -2
  207. package/dist/features/viz/lib/linear-scale.js +1 -1
  208. package/dist/features/viz/lib/linear-scale.js.map +2 -2
  209. package/dist/features/viz/lib/monotone-curve.d.ts +11 -0
  210. package/dist/features/viz/lib/monotone-curve.js +63 -0
  211. package/dist/features/viz/lib/monotone-curve.js.map +7 -0
  212. package/dist/features/viz/lib/numeric-range-interpolation.d.ts +15 -0
  213. package/dist/features/viz/lib/numeric-range-interpolation.js +36 -0
  214. package/dist/features/viz/lib/numeric-range-interpolation.js.map +7 -0
  215. package/dist/features/viz/lib/ohlc-bar-series.d.ts +55 -0
  216. package/dist/features/viz/lib/ohlc-bar-series.js +168 -0
  217. package/dist/features/viz/lib/ohlc-bar-series.js.map +7 -0
  218. package/dist/features/viz/lib/paired-series.d.ts +44 -0
  219. package/dist/features/viz/lib/paired-series.js +93 -0
  220. package/dist/features/viz/lib/paired-series.js.map +7 -0
  221. package/dist/features/viz/lib/pie-layout.js +2 -1
  222. package/dist/features/viz/lib/pie-layout.js.map +2 -2
  223. package/dist/features/viz/lib/plot-series.js +11 -6
  224. package/dist/features/viz/lib/plot-series.js.map +2 -2
  225. package/dist/features/viz/lib/plot-types.d.ts +4 -3
  226. package/dist/features/viz/lib/point-series.d.ts +1 -1
  227. package/dist/features/viz/lib/point-series.js +36 -9
  228. package/dist/features/viz/lib/point-series.js.map +2 -2
  229. package/dist/features/viz/lib/point-types.d.ts +5 -2
  230. package/dist/features/viz/lib/reference-band.js +4 -1
  231. package/dist/features/viz/lib/reference-band.js.map +2 -2
  232. package/dist/features/viz/lib/scale-context.d.ts +1 -1
  233. package/dist/features/viz/lib/scale-ticks.js +21 -6
  234. package/dist/features/viz/lib/scale-ticks.js.map +2 -2
  235. package/dist/features/viz/lib/sequential-color-scale.d.ts +11 -0
  236. package/dist/features/viz/lib/sequential-color-scale.js +49 -0
  237. package/dist/features/viz/lib/sequential-color-scale.js.map +7 -0
  238. package/dist/features/viz/lib/series-position.d.ts +12 -0
  239. package/dist/features/viz/lib/series-position.js +44 -0
  240. package/dist/features/viz/lib/series-position.js.map +7 -0
  241. package/dist/features/viz/lib/step-curves.d.ts +19 -0
  242. package/dist/features/viz/lib/step-curves.js +53 -0
  243. package/dist/features/viz/lib/step-curves.js.map +7 -0
  244. package/dist/features/viz/lib/threshold-color-scale.d.ts +43 -0
  245. package/dist/features/viz/lib/threshold-color-scale.js +59 -0
  246. package/dist/features/viz/lib/threshold-color-scale.js.map +7 -0
  247. package/dist/features/viz/lib/trading-time-mapping.d.ts +32 -0
  248. package/dist/features/viz/lib/trading-time-mapping.js +89 -0
  249. package/dist/features/viz/lib/trading-time-mapping.js.map +7 -0
  250. package/dist/features/viz/lib/trading-time-scale.d.ts +83 -0
  251. package/dist/features/viz/lib/trading-time-scale.js +96 -0
  252. package/dist/features/viz/lib/trading-time-scale.js.map +7 -0
  253. package/dist/features/viz/lib/trajectory-series.d.ts +71 -0
  254. package/dist/features/viz/lib/trajectory-series.js +111 -0
  255. package/dist/features/viz/lib/trajectory-series.js.map +7 -0
  256. package/dist/features/viz/lib/types.d.ts +20 -4
  257. package/dist/features/viz/lib/use-continuous-scale.js +6 -1
  258. package/dist/features/viz/lib/use-continuous-scale.js.map +2 -2
  259. package/dist/features/viz/lib/utc-scale.js +11 -10
  260. package/dist/features/viz/lib/utc-scale.js.map +2 -2
  261. package/dist/features/viz/lib/volume-series.d.ts +59 -0
  262. package/dist/features/viz/lib/volume-series.js +117 -0
  263. package/dist/features/viz/lib/volume-series.js.map +7 -0
  264. package/dist/features/viz/lib/weighted-point-series.d.ts +71 -0
  265. package/dist/features/viz/lib/weighted-point-series.js +169 -0
  266. package/dist/features/viz/lib/weighted-point-series.js.map +7 -0
  267. package/dist/filters/backdrop-contrast-gpu.d.ts +5 -0
  268. package/dist/filters/backdrop-contrast-gpu.js +33 -0
  269. package/dist/filters/backdrop-contrast-gpu.js.map +7 -0
  270. package/dist/filters/backdrop-contrast.d.ts +21 -0
  271. package/dist/filters/backdrop-contrast.js +61 -0
  272. package/dist/filters/backdrop-contrast.js.map +7 -0
  273. package/dist/filters/displacement.js +1 -1
  274. package/dist/filters/displacement.js.map +2 -2
  275. package/dist/filters/emboss-gpu.d.ts +4 -0
  276. package/dist/filters/emboss-gpu.js +39 -0
  277. package/dist/filters/emboss-gpu.js.map +7 -0
  278. package/dist/filters/emboss.d.ts +32 -0
  279. package/dist/filters/emboss.js +104 -0
  280. package/dist/filters/emboss.js.map +7 -0
  281. package/dist/filters/filter-executor.d.ts +11 -4
  282. package/dist/filters/filter-executor.js +104 -49
  283. package/dist/filters/filter-executor.js.map +2 -2
  284. package/dist/filters/reflected-light.js +1 -1
  285. package/dist/filters/reflected-light.js.map +2 -2
  286. package/dist/filters/reflection-gpu.d.ts +3 -1
  287. package/dist/filters/reflection-gpu.js +5 -2
  288. package/dist/filters/reflection-gpu.js.map +2 -2
  289. package/dist/filters/render-backdrop-contrast-boundary.d.ts +31 -0
  290. package/dist/filters/render-backdrop-contrast-boundary.js +116 -0
  291. package/dist/filters/render-backdrop-contrast-boundary.js.map +7 -0
  292. package/dist/filters/render-emboss-boundary.d.ts +13 -0
  293. package/dist/filters/render-emboss-boundary.js +131 -0
  294. package/dist/filters/render-emboss-boundary.js.map +7 -0
  295. package/dist/filters.d.ts +9 -5
  296. package/dist/filters.js +4 -0
  297. package/dist/filters.js.map +2 -2
  298. package/dist/index.d.ts +9 -5
  299. package/dist/index.js +18 -2
  300. package/dist/index.js.map +2 -2
  301. package/dist/internal.d.ts +4 -0
  302. package/dist/internal.js +6 -0
  303. package/dist/internal.js.map +2 -2
  304. package/dist/layout-kernel.d.ts +12 -0
  305. package/dist/layout-kernel.js +11 -0
  306. package/dist/layout-kernel.js.map +7 -0
  307. package/dist/layout-kernel.mjs +1 -0
  308. package/dist/lib/backend/types.d.ts +13 -1
  309. package/dist/lib/backend/types.js.map +2 -2
  310. package/dist/lib/components/arc-geometry.js +2 -1
  311. package/dist/lib/components/arc-geometry.js.map +2 -2
  312. package/dist/lib/components/g.js +2 -0
  313. package/dist/lib/components/g.js.map +2 -2
  314. package/dist/lib/components/html-box.js +2 -1
  315. package/dist/lib/components/html-box.js.map +2 -2
  316. package/dist/lib/components/img.js +3 -3
  317. package/dist/lib/components/img.js.map +2 -2
  318. package/dist/lib/components/layer.js +98 -16
  319. package/dist/lib/components/layer.js.map +3 -3
  320. package/dist/lib/components/text.d.ts +16 -0
  321. package/dist/lib/components/text.js +131 -24
  322. package/dist/lib/components/text.js.map +2 -2
  323. package/dist/lib/define-primitive.d.ts +4 -2
  324. package/dist/lib/define-primitive.js +3 -1
  325. package/dist/lib/define-primitive.js.map +2 -2
  326. package/dist/lib/element/metadata.d.ts +9 -0
  327. package/dist/lib/element/metadata.js +19 -0
  328. package/dist/lib/element/metadata.js.map +2 -2
  329. package/dist/lib/element/resolve-primitive-inputs.d.ts +2 -0
  330. package/dist/lib/element/resolve-primitive-inputs.js +17 -4
  331. package/dist/lib/element/resolve-primitive-inputs.js.map +2 -2
  332. package/dist/lib/events/event-facade.d.ts +18 -0
  333. package/dist/lib/events/event-facade.js +28 -2
  334. package/dist/lib/events/event-facade.js.map +2 -2
  335. package/dist/lib/events/hit-test.js +2 -1
  336. package/dist/lib/events/hit-test.js.map +2 -2
  337. package/dist/lib/events/propagation.d.ts +2 -1
  338. package/dist/lib/events/propagation.js +22 -16
  339. package/dist/lib/events/propagation.js.map +2 -2
  340. package/dist/lib/events/registrations.d.ts +10 -0
  341. package/dist/lib/events/registrations.js +160 -5
  342. package/dist/lib/events/registrations.js.map +2 -2
  343. package/dist/lib/execute-render.js +25 -1
  344. package/dist/lib/execute-render.js.map +2 -2
  345. package/dist/lib/filter/filter-region.js +3 -10
  346. package/dist/lib/filter/filter-region.js.map +2 -2
  347. package/dist/lib/focus/focus-manager.d.ts +8 -1
  348. package/dist/lib/focus/focus-manager.js +87 -43
  349. package/dist/lib/focus/focus-manager.js.map +2 -2
  350. package/dist/lib/focus/geometry.d.ts +2 -0
  351. package/dist/lib/focus/geometry.js +6 -0
  352. package/dist/lib/focus/geometry.js.map +2 -2
  353. package/dist/lib/geometry/path-bend-guide.js +1 -1
  354. package/dist/lib/geometry/path-bend-guide.js.map +2 -2
  355. package/dist/lib/geometry/path-geometry.js +12 -11
  356. package/dist/lib/geometry/path-geometry.js.map +2 -2
  357. package/dist/lib/geometry/path-transforms.js +17 -21
  358. package/dist/lib/geometry/path-transforms.js.map +2 -2
  359. package/dist/lib/geometry/path-warp-bezier.js +3 -1
  360. package/dist/lib/geometry/path-warp-bezier.js.map +2 -2
  361. package/dist/lib/geometry/path-warp.js +1 -1
  362. package/dist/lib/geometry/path-warp.js.map +2 -2
  363. package/dist/lib/global-state.js +2 -0
  364. package/dist/lib/global-state.js.map +2 -2
  365. package/dist/lib/html/html-events.d.ts +32 -0
  366. package/dist/lib/html/html-events.js +179 -0
  367. package/dist/lib/html/html-events.js.map +7 -0
  368. package/dist/lib/html/html-service.d.ts +8 -2
  369. package/dist/lib/html/html-service.js +198 -65
  370. package/dist/lib/html/html-service.js.map +2 -2
  371. package/dist/lib/html/overlay-config.js +7 -6
  372. package/dist/lib/html/overlay-config.js.map +2 -2
  373. package/dist/lib/html/types.d.ts +29 -2
  374. package/dist/lib/layout/absolute.d.ts +11 -5
  375. package/dist/lib/layout/absolute.js +329 -55
  376. package/dist/lib/layout/absolute.js.map +3 -3
  377. package/dist/lib/layout/allocation-checkpoint-owner.d.ts +11 -0
  378. package/dist/lib/layout/allocation-checkpoint-owner.js +86 -0
  379. package/dist/lib/layout/allocation-checkpoint-owner.js.map +7 -0
  380. package/dist/lib/layout/allocation-checkpoint.d.ts +53 -0
  381. package/dist/lib/layout/allocation-checkpoint.js +463 -0
  382. package/dist/lib/layout/allocation-checkpoint.js.map +7 -0
  383. package/dist/lib/layout/allocation-dependencies.d.ts +30 -0
  384. package/dist/lib/layout/allocation-dependencies.js +90 -0
  385. package/dist/lib/layout/allocation-dependencies.js.map +7 -0
  386. package/dist/lib/layout/allocation-revision.d.ts +13 -0
  387. package/dist/lib/layout/allocation-revision.js +67 -0
  388. package/dist/lib/layout/allocation-revision.js.map +7 -0
  389. package/dist/lib/layout/box-insets.d.ts +17 -0
  390. package/dist/lib/layout/box-insets.js +138 -0
  391. package/dist/lib/layout/box-insets.js.map +7 -0
  392. package/dist/lib/layout/box-sizing.d.ts +16 -0
  393. package/dist/lib/layout/box-sizing.js +77 -0
  394. package/dist/lib/layout/box-sizing.js.map +7 -0
  395. package/dist/lib/layout/box.js +42 -12
  396. package/dist/lib/layout/box.js.map +2 -2
  397. package/dist/lib/layout/canvas-measurement.d.ts +13 -0
  398. package/dist/lib/layout/canvas-measurement.js +57 -0
  399. package/dist/lib/layout/canvas-measurement.js.map +7 -0
  400. package/dist/lib/layout/context.d.ts +35 -6
  401. package/dist/lib/layout/context.js +72 -3
  402. package/dist/lib/layout/context.js.map +2 -2
  403. package/dist/lib/layout/define-layout-component.d.ts +23 -0
  404. package/dist/lib/layout/define-layout-component.js +84 -0
  405. package/dist/lib/layout/define-layout-component.js.map +7 -0
  406. package/dist/lib/layout/flex-allocation-cache.d.ts +42 -0
  407. package/dist/lib/layout/flex-baseline-mode.d.ts +2 -0
  408. package/dist/lib/layout/flex-baseline-mode.js +7 -0
  409. package/dist/lib/layout/flex-baseline-mode.js.map +7 -0
  410. package/dist/lib/layout/flex.d.ts +50 -15
  411. package/dist/lib/layout/flex.js +2124 -195
  412. package/dist/lib/layout/flex.js.map +3 -3
  413. package/dist/lib/layout/flow.js +225 -49
  414. package/dist/lib/layout/flow.js.map +2 -2
  415. package/dist/lib/layout/geometry-publication.d.ts +53 -0
  416. package/dist/lib/layout/geometry-publication.js +244 -0
  417. package/dist/lib/layout/geometry-publication.js.map +7 -0
  418. package/dist/lib/layout/grid-kernel.d.ts +63 -0
  419. package/dist/lib/layout/grid-kernel.js +168 -0
  420. package/dist/lib/layout/grid-kernel.js.map +7 -0
  421. package/dist/lib/layout/grid.d.ts +63 -4
  422. package/dist/lib/layout/grid.js +767 -171
  423. package/dist/lib/layout/grid.js.map +3 -3
  424. package/dist/lib/layout/measure.d.ts +55 -3
  425. package/dist/lib/layout/measure.js +448 -15
  426. package/dist/lib/layout/measure.js.map +2 -2
  427. package/dist/lib/layout/overlay.js +81 -23
  428. package/dist/lib/layout/overlay.js.map +2 -2
  429. package/dist/lib/layout/participation.d.ts +27 -0
  430. package/dist/lib/layout/participation.js +188 -0
  431. package/dist/lib/layout/participation.js.map +7 -0
  432. package/dist/lib/layout/place-child.js +1 -1
  433. package/dist/lib/layout/place-child.js.map +2 -2
  434. package/dist/lib/layout/positioning-diagnostics.d.ts +1 -1
  435. package/dist/lib/layout/positioning-diagnostics.js +13 -2
  436. package/dist/lib/layout/positioning-diagnostics.js.map +2 -2
  437. package/dist/lib/layout/prepared-root.d.ts +121 -0
  438. package/dist/lib/layout/prepared-root.js +360 -0
  439. package/dist/lib/layout/prepared-root.js.map +7 -0
  440. package/dist/lib/layout/standalone-kernel.d.ts +60 -0
  441. package/dist/lib/layout/standalone-kernel.js +722 -0
  442. package/dist/lib/layout/standalone-kernel.js.map +7 -0
  443. package/dist/lib/layout/topology.d.ts +21 -0
  444. package/dist/lib/layout/topology.js +113 -0
  445. package/dist/lib/layout/topology.js.map +7 -0
  446. package/dist/lib/layout/types.d.ts +5 -0
  447. package/dist/lib/layout/wasm/artifact.d.ts +1 -0
  448. package/dist/lib/layout/wasm/artifact.js +5 -0
  449. package/dist/lib/layout/wasm/artifact.js.map +7 -0
  450. package/dist/lib/layout/wasm/bytes.d.ts +1 -0
  451. package/dist/lib/layout/wasm/bytes.js +5 -0
  452. package/dist/lib/layout/wasm/bytes.js.map +7 -0
  453. package/dist/lib/layout/wasm/embedded.d.ts +2 -0
  454. package/dist/lib/layout/wasm/embedded.js +12 -0
  455. package/dist/lib/layout/wasm/embedded.js.map +7 -0
  456. package/dist/lib/layout/wasm/layout.wasm +0 -0
  457. package/dist/lib/layout/wasm/module.d.ts +8 -0
  458. package/dist/lib/layout/wasm/module.js +70 -0
  459. package/dist/lib/layout/wasm/module.js.map +7 -0
  460. package/dist/lib/layout/wasm/region.d.ts +267 -0
  461. package/dist/lib/layout/wasm/region.js +1018 -0
  462. package/dist/lib/layout/wasm/region.js.map +7 -0
  463. package/dist/lib/manipulation/controller.js +4 -7
  464. package/dist/lib/manipulation/controller.js.map +2 -2
  465. package/dist/lib/manipulation/frame.js +1 -1
  466. package/dist/lib/manipulation/frame.js.map +2 -2
  467. package/dist/lib/manipulation/handles.js +32 -33
  468. package/dist/lib/manipulation/handles.js.map +2 -2
  469. package/dist/lib/manipulation/solve.js +12 -10
  470. package/dist/lib/manipulation/solve.js.map +2 -2
  471. package/dist/lib/mount-pibbl.js +1 -0
  472. package/dist/lib/mount-pibbl.js.map +2 -2
  473. package/dist/lib/mount-prepared-pibbl.d.ts +5 -0
  474. package/dist/lib/mount-prepared-pibbl.js +29 -0
  475. package/dist/lib/mount-prepared-pibbl.js.map +7 -0
  476. package/dist/lib/mount-request.d.ts +8 -0
  477. package/dist/lib/mount-request.js +41 -0
  478. package/dist/lib/mount-request.js.map +7 -0
  479. package/dist/lib/pibbl.d.ts +21 -13
  480. package/dist/lib/pibbl.js +18 -16
  481. package/dist/lib/pibbl.js.map +2 -2
  482. package/dist/lib/recording/recording.d.ts +43 -0
  483. package/dist/lib/recording/recording.js +555 -0
  484. package/dist/lib/recording/recording.js.map +7 -0
  485. package/dist/lib/recording/types.d.ts +118 -0
  486. package/dist/lib/recording/wasm-bytes.d.ts +1 -0
  487. package/dist/lib/recording/wasm-bytes.js +5 -0
  488. package/dist/lib/recording/wasm-bytes.js.map +7 -0
  489. package/dist/lib/recording/worker-source.d.ts +1 -0
  490. package/dist/lib/recording/worker-source.js +5 -0
  491. package/dist/lib/recording/worker-source.js.map +7 -0
  492. package/dist/lib/render-layer/controller.d.ts +9 -3
  493. package/dist/lib/render-layer/controller.js +259 -110
  494. package/dist/lib/render-layer/controller.js.map +2 -2
  495. package/dist/lib/render-transaction.d.ts +12 -2
  496. package/dist/lib/render-transaction.js +69 -1
  497. package/dist/lib/render-transaction.js.map +2 -2
  498. package/dist/lib/render.js +32 -8
  499. package/dist/lib/render.js.map +2 -2
  500. package/dist/lib/scheduler/realm-scheduler.d.ts +2 -0
  501. package/dist/lib/scheduler/realm-scheduler.js +55 -26
  502. package/dist/lib/scheduler/realm-scheduler.js.map +2 -2
  503. package/dist/lib/scheduler/renderer-participant.js +1 -0
  504. package/dist/lib/scheduler/renderer-participant.js.map +2 -2
  505. package/dist/lib/series-inspection-frame.d.ts +18 -0
  506. package/dist/lib/series-inspection-frame.js +70 -0
  507. package/dist/lib/series-inspection-frame.js.map +7 -0
  508. package/dist/lib/signals/edge.d.ts +7 -4
  509. package/dist/lib/signals/edge.js +25 -3
  510. package/dist/lib/signals/edge.js.map +2 -2
  511. package/dist/lib/signals/graph.d.ts +16 -2
  512. package/dist/lib/signals/graph.js +54 -12
  513. package/dist/lib/signals/graph.js.map +2 -2
  514. package/dist/lib/signals/input-provision.d.ts +15 -0
  515. package/dist/lib/signals/input-provision.js +53 -3
  516. package/dist/lib/signals/input-provision.js.map +2 -2
  517. package/dist/lib/signals/render-consumer.d.ts +3 -0
  518. package/dist/lib/signals/render-consumer.js +22 -14
  519. package/dist/lib/signals/render-consumer.js.map +2 -2
  520. package/dist/lib/style/positioning.d.ts +50 -2
  521. package/dist/lib/style/positioning.js +28 -4
  522. package/dist/lib/style/positioning.js.map +2 -2
  523. package/dist/lib/style/resolve-built-in.d.ts +4 -3
  524. package/dist/lib/style/resolve-built-in.js +17 -3
  525. package/dist/lib/style/resolve-built-in.js.map +2 -2
  526. package/dist/lib/style/resolve-dispatch.d.ts +3 -0
  527. package/dist/lib/style/resolve-dispatch.js +77 -4
  528. package/dist/lib/style/resolve-dispatch.js.map +2 -2
  529. package/dist/lib/style/resolve-length.d.ts +2 -0
  530. package/dist/lib/style/resolve-length.js +13 -9
  531. package/dist/lib/style/resolve-length.js.map +2 -2
  532. package/dist/lib/style/sizing-length.d.ts +51 -0
  533. package/dist/lib/style/sizing-length.js +77 -0
  534. package/dist/lib/style/sizing-length.js.map +7 -0
  535. package/dist/lib/style/types.d.ts +63 -25
  536. package/dist/lib/surface/root-surface.js +10 -6
  537. package/dist/lib/surface/root-surface.js.map +2 -2
  538. package/dist/lib/textures/texture.js +10 -8
  539. package/dist/lib/textures/texture.js.map +2 -2
  540. package/dist/lib/transitions/capture.js +4 -1
  541. package/dist/lib/transitions/capture.js.map +2 -2
  542. package/dist/lib/transitions/embers-physics.js +17 -10
  543. package/dist/lib/transitions/embers-physics.js.map +2 -2
  544. package/dist/lib/types.d.ts +110 -1
  545. package/dist/sync.d.ts +16 -0
  546. package/dist/sync.js +13 -0
  547. package/dist/sync.js.map +7 -0
  548. package/dist/sync.mjs +1 -0
  549. package/package.json +26 -3
@@ -0,0 +1,1018 @@
1
+ import { disposeAllocationCheckpoint } from "../allocation-checkpoint-owner.js";
2
+ import { readyLayoutModule } from "./module.js";
3
+ import { GridV2Region } from "../grid-kernel.js";
4
+ import { GLOBAL_STATE } from "../../global-state.js";
5
+ import { signalGraphSnapshot } from "../../signals/graph.js";
6
+ const nativeLayout = true;
7
+ const counters = { activeGridArenas: 0, gridArenaCreates: 0, flowPlacements: 0, gridCellPlacements: 0, gridTrackResolutions: 0, lineFormations: 0, cachedMeasurements: 0, mainPlacements: 0, crossPlacements: 0, solves: 0, measurementSolves: 0, measuredLeaves: 0, nodeReuses: 0, nodeCreates: 0, activeNodes: 0, activeArenas: 0, activeWasmInstances: 0, wasmInstanceCreates: 0, frames: 0, allocationPasses: 0, allocationItemVisits: 0, allocationCacheHits: 0 };
8
+ function snapshotWasmLayoutDiagnostics() {
9
+ const signals = signalGraphSnapshot();
10
+ return {
11
+ ...counters,
12
+ structureInputInvalidations: signals.structureInputInvalidations,
13
+ layoutInputInvalidations: signals.layoutInputInvalidations,
14
+ measurementInputInvalidations: signals.measurementInputInvalidations,
15
+ paintInputInvalidations: signals.paintInputInvalidations,
16
+ transformInputInvalidations: signals.transformInputInvalidations,
17
+ interactionInputInvalidations: signals.interactionInputInvalidations,
18
+ unknownInputInvalidations: signals.unknownInputInvalidations
19
+ };
20
+ }
21
+ if (nativeLayout) {
22
+ Object.defineProperty(globalThis, "__PIBBL_LAYOUT_DIAGNOSTICS__", {
23
+ configurable: true,
24
+ value: snapshotWasmLayoutDiagnostics
25
+ });
26
+ }
27
+ const rootOwners = /* @__PURE__ */ new WeakMap();
28
+ class RootLayoutOwner {
29
+ constructor(mount) {
30
+ this.mount = mount;
31
+ if (mount?.mainTeardowns.closed) throw new Error("Cannot allocate layout for a disposed root.");
32
+ this.exports = new WebAssembly.Instance(readyLayoutModule()).exports;
33
+ counters.activeWasmInstances++;
34
+ counters.wasmInstanceCreates++;
35
+ if (mount) {
36
+ this.teardown = () => this.dispose();
37
+ mount.mainTeardowns.add(this.teardown);
38
+ }
39
+ }
40
+ mount;
41
+ exports;
42
+ handles = /* @__PURE__ */ new Map();
43
+ grids = /* @__PURE__ */ new Set();
44
+ teardown;
45
+ get kernel() {
46
+ if (!this.exports) throw new Error("The root layout instance is disposed.");
47
+ return this.exports;
48
+ }
49
+ createGrid() {
50
+ const grid = new GridV2Region(this.kernel, () => {
51
+ if (this.grids.delete(grid)) counters.activeGridArenas--;
52
+ });
53
+ this.grids.add(grid);
54
+ counters.activeGridArenas++;
55
+ counters.gridArenaCreates++;
56
+ return grid;
57
+ }
58
+ has(handle, generation) {
59
+ return this.handles.get(handle) === generation && generation !== 0;
60
+ }
61
+ create() {
62
+ const handle = this.kernel.arena_create();
63
+ const generation = handle ? this.kernel.arena_generation(handle) : 0;
64
+ if (!handle || !generation) throw new Error("Layout region handle allocation failed.");
65
+ this.handles.set(handle, generation);
66
+ counters.activeArenas++;
67
+ return { handle, generation };
68
+ }
69
+ release(handle, generation) {
70
+ if (!this.has(handle, generation)) return;
71
+ try {
72
+ if (this.kernel.arena_dispose(handle, generation) !== 0) throw new Error("Layout region generation is stale.");
73
+ } catch (error) {
74
+ this.dispose(error instanceof WebAssembly.RuntimeError);
75
+ throw error;
76
+ } finally {
77
+ if (this.has(handle, generation)) {
78
+ this.handles.delete(handle);
79
+ counters.activeArenas--;
80
+ }
81
+ }
82
+ }
83
+ dispose(trapped = false) {
84
+ const kernel = this.exports;
85
+ if (!kernel) return;
86
+ this.exports = void 0;
87
+ counters.activeArenas -= this.handles.size;
88
+ this.handles.clear();
89
+ counters.activeWasmInstances--;
90
+ if (this.mount) {
91
+ if (rootOwners.get(this.mount) === this) rootOwners.delete(this.mount);
92
+ if (this.teardown) this.mount.mainTeardowns.remove(this.teardown);
93
+ this.teardown = void 0;
94
+ }
95
+ let errors;
96
+ for (const grid of this.grids) {
97
+ try {
98
+ if (trapped) grid.abandon();
99
+ else grid.dispose();
100
+ } catch (error) {
101
+ (errors ??= []).push(error);
102
+ }
103
+ }
104
+ this.grids.clear();
105
+ if (!trapped) {
106
+ try {
107
+ kernel.dispose();
108
+ } catch (error) {
109
+ (errors ??= []).push(error);
110
+ }
111
+ }
112
+ if (errors?.length === 1) throw errors[0];
113
+ if (errors?.length) throw new AggregateError(errors, "Native layout disposal failed.");
114
+ }
115
+ }
116
+ function acquireRootOwner(mount) {
117
+ if (!mount) return new RootLayoutOwner();
118
+ let owner = rootOwners.get(mount);
119
+ if (!owner) {
120
+ owner = new RootLayoutOwner(mount);
121
+ rootOwners.set(mount, owner);
122
+ }
123
+ return owner;
124
+ }
125
+ let measurementOwner;
126
+ function withMeasurementLayoutOwner(owner, work) {
127
+ const previous = measurementOwner;
128
+ if (owner) measurementOwner = owner;
129
+ try {
130
+ return work();
131
+ } finally {
132
+ measurementOwner = previous;
133
+ }
134
+ }
135
+ const intrinsicUnitCode = { none: 0, point: 1, percent: 2 };
136
+ const intrinsicModeCode = {
137
+ exact: 0,
138
+ "fit-content": 1,
139
+ "max-content": 2
140
+ };
141
+ function intrinsicScalar(value, name) {
142
+ if (value === void 0) return Number.NaN;
143
+ if (!Number.isFinite(value) || value < 0) throw new RangeError(`Intrinsic ${name} must be finite and nonnegative.`);
144
+ return value;
145
+ }
146
+ function writeIntrinsicLength(records, offset, length, name) {
147
+ const code = intrinsicUnitCode[length.unit];
148
+ if (length.unit === "none") {
149
+ if (length.value !== void 0) throw new RangeError(`Intrinsic ${name} without a unit must omit its value.`);
150
+ records[offset] = 0;
151
+ records[offset + 1] = code;
152
+ return;
153
+ }
154
+ if (length.value === void 0 || !Number.isFinite(length.value) || length.value < 0) {
155
+ throw new RangeError(`Intrinsic ${name} must be finite and nonnegative.`);
156
+ }
157
+ records[offset] = length.value;
158
+ records[offset + 1] = code;
159
+ }
160
+ function writeIntrinsicMainRecord(records, offset, item, preparing) {
161
+ if (!Number.isFinite(item.base) || item.base < 0) throw new RangeError("Intrinsic Flex bases must be finite and nonnegative.");
162
+ records[offset] = item.base;
163
+ writeIntrinsicLength(records, offset + 1, item.min, "minimum");
164
+ writeIntrinsicLength(records, offset + 3, item.max, "maximum");
165
+ if (!item.measured) {
166
+ if (item.queryMaximum !== void 0) throw new RangeError("Unmeasured intrinsic Flex items cannot retain a query maximum.");
167
+ records[offset + 8] = 0;
168
+ records[offset + 9] = 0;
169
+ return;
170
+ }
171
+ if (preparing) {
172
+ records[offset + 8] = 1;
173
+ records[offset + 9] = 0;
174
+ return;
175
+ }
176
+ if (item.queryMaximum === void 0 || !(Number.isFinite(item.queryMaximum) || item.queryMaximum === Infinity) || item.queryMaximum < 0) throw new RangeError("Measured intrinsic Flex items require a nonnegative query maximum.");
177
+ records[offset + 8] = 2;
178
+ records[offset + 9] = item.queryMaximum;
179
+ }
180
+ function validateIntrinsicQuery(query) {
181
+ if (!Number.isFinite(query.gap) || query.gap !== 0) throw new RangeError("Staged intrinsic Flex currently requires a zero numeric gap.");
182
+ if (query.mode === "max-content" ? query.initialAvailable !== void 0 : query.initialAvailable === void 0) throw new RangeError("Intrinsic main query mode and availability do not agree.");
183
+ const externalOwner = intrinsicScalar(query.externalOwner, "external owner");
184
+ const initialAvailable = intrinsicScalar(query.initialAvailable, "initial availability");
185
+ const rootMin = intrinsicScalar(query.rootMin, "root minimum");
186
+ const rootMax = intrinsicScalar(query.rootMax, "root maximum");
187
+ if (!Number.isNaN(rootMin) && !Number.isNaN(rootMax) && rootMin > rootMax) throw new RangeError("Intrinsic root minimum must not exceed its maximum.");
188
+ return { externalOwner, initialAvailable, rootMin, rootMax };
189
+ }
190
+ function intrinsicStatus(status, operation) {
191
+ if (status === 2) throw new RangeError("Intrinsic minimum must not exceed maximum.");
192
+ if (status !== 0) throw new Error(`Experimental staged intrinsic Flex ${operation} failed (${status}).`);
193
+ }
194
+ function prepareTransientIntrinsicMainQueries(items, query) {
195
+ const { externalOwner, initialAvailable, rootMin, rootMax } = validateIntrinsicQuery(query);
196
+ const owner = acquireRootOwner(measurementOwner);
197
+ const standalone = measurementOwner === void 0;
198
+ let handle = 0, generation = 0;
199
+ try {
200
+ ({ handle, generation } = owner.create());
201
+ const pointer = owner.kernel.resize_intrinsic_main(handle, generation, items.length);
202
+ if (!pointer && items.length) throw new Error("Intrinsic Flex measurement storage allocation failed.");
203
+ const records = new Float64Array(owner.kernel.memory.buffer, pointer, items.length * 10);
204
+ for (let index = 0; index < items.length; index++) writeIntrinsicMainRecord(records, index * 10, items[index], true);
205
+ intrinsicStatus(owner.kernel.prepare_intrinsic_main_queries(handle, generation, externalOwner, initialAvailable, rootMin, rootMax, intrinsicModeCode[query.mode], query.gap), "query preparation");
206
+ const output = new Float64Array(owner.kernel.memory.buffer, pointer, items.length * 10);
207
+ const maximums = new Array(items.length);
208
+ for (let index = 0; index < items.length; index++) {
209
+ const maximum = output[index * 10 + 9];
210
+ if (items[index].measured) {
211
+ if (!(Number.isFinite(maximum) || maximum === Infinity) || maximum < 0) throw new Error("Experimental staged intrinsic Flex query produced an invalid provider maximum.");
212
+ maximums[index] = maximum;
213
+ } else {
214
+ if (maximum !== 0) throw new Error("Experimental staged intrinsic Flex query wrote a numeric item envelope.");
215
+ maximums[index] = 0;
216
+ }
217
+ }
218
+ counters.solves++;
219
+ counters.measurementSolves++;
220
+ return { maximums };
221
+ } catch (error) {
222
+ if (error instanceof WebAssembly.RuntimeError) owner.dispose(true);
223
+ throw error;
224
+ } finally {
225
+ try {
226
+ if (handle) owner.release(handle, generation);
227
+ } finally {
228
+ if (standalone) owner.dispose();
229
+ }
230
+ }
231
+ }
232
+ function resolveTransientIntrinsicMain(items, query) {
233
+ return resolveIntrinsicMain(items, query, false);
234
+ }
235
+ function resolveTransientKnownOwnerMain(items, query) {
236
+ return resolveIntrinsicMain(items, query, true);
237
+ }
238
+ function resolveIntrinsicMain(items, query, normalOwner) {
239
+ const { externalOwner, initialAvailable, rootMin, rootMax } = validateIntrinsicQuery(query);
240
+ const owner = acquireRootOwner(measurementOwner);
241
+ const standalone = measurementOwner === void 0;
242
+ let handle = 0, generation = 0;
243
+ try {
244
+ ({ handle, generation } = owner.create());
245
+ const pointer = owner.kernel.resize_intrinsic_main(handle, generation, items.length);
246
+ if (!pointer && items.length) throw new Error("Intrinsic Flex measurement storage allocation failed.");
247
+ const records = new Float64Array(owner.kernel.memory.buffer, pointer, items.length * 10);
248
+ for (let index = 0; index < items.length; index++) {
249
+ const item = items[index], offset = index * 10;
250
+ writeIntrinsicMainRecord(records, offset, item, false);
251
+ }
252
+ const resolve = normalOwner ? owner.kernel.resolve_intrinsic_main_known_owner : owner.kernel.resolve_intrinsic_main;
253
+ const status = resolve(
254
+ handle,
255
+ generation,
256
+ externalOwner,
257
+ initialAvailable,
258
+ rootMin,
259
+ rootMax,
260
+ intrinsicModeCode[query.mode],
261
+ query.gap
262
+ );
263
+ intrinsicStatus(status, "resolution");
264
+ const main = owner.kernel.intrinsic_main_result(handle, generation);
265
+ const contributionMain = owner.kernel.intrinsic_main_contribution(handle, generation);
266
+ const autoMarginFreeMain = owner.kernel.intrinsic_main_auto_free(handle, generation);
267
+ if (!Number.isFinite(main) || main < 0 || !Number.isFinite(contributionMain) || contributionMain < 0 || !Number.isFinite(autoMarginFreeMain) || autoMarginFreeMain < 0) {
268
+ throw new Error("Experimental staged intrinsic Flex query produced invalid native owner phases.");
269
+ }
270
+ const output = new Float64Array(owner.kernel.memory.buffer, pointer, items.length * 10);
271
+ const targets = new Array(items.length);
272
+ const effectiveMins = new Array(items.length);
273
+ const effectiveMaxes = new Array(items.length);
274
+ for (let index = 0; index < items.length; index++) {
275
+ const offset = index * 10;
276
+ const target = output[offset + 5], minimum = output[offset + 6], maximum = output[offset + 7];
277
+ if (!Number.isFinite(target) || target < 0 || !Number.isFinite(minimum) || minimum < 0 || !(Number.isFinite(maximum) || maximum === Infinity) || maximum < minimum) {
278
+ throw new Error("Experimental staged intrinsic Flex query produced invalid child bounds.");
279
+ }
280
+ targets[index] = target;
281
+ effectiveMins[index] = minimum;
282
+ effectiveMaxes[index] = maximum;
283
+ }
284
+ counters.solves++;
285
+ counters.measurementSolves++;
286
+ return { main, contributionMain, autoMarginFreeMain, targets, effectiveMins, effectiveMaxes };
287
+ } catch (error) {
288
+ if (error instanceof WebAssembly.RuntimeError) owner.dispose(true);
289
+ throw error;
290
+ } finally {
291
+ try {
292
+ if (handle) owner.release(handle, generation);
293
+ } finally {
294
+ if (standalone) owner.dispose();
295
+ }
296
+ }
297
+ }
298
+ function writeFlexMainInput(records, offset, item) {
299
+ records[offset] = item.baseMain;
300
+ records[offset + 1] = item.minMain;
301
+ records[offset + 2] = item.maxMain;
302
+ records[offset + 3] = item.paddingMain;
303
+ records[offset + 4] = item.grow;
304
+ records[offset + 5] = item.shrink;
305
+ records[offset + 6] = 0;
306
+ records[offset + 7] = 0;
307
+ records[offset + 8] = item.marginMainBefore ?? 0;
308
+ records[offset + 9] = item.marginMainAfter ?? 0;
309
+ }
310
+ function solveTransientFlexMain(items, main, gap) {
311
+ if (!Number.isFinite(main) || main < 0 || !Number.isFinite(gap) || gap < 0) {
312
+ throw new RangeError("Intrinsic Flex main size and gap must be finite and nonnegative.");
313
+ }
314
+ for (let index = 0; index < items.length; index++) {
315
+ const item = items[index];
316
+ if (!Number.isFinite(item.baseMain) || item.baseMain < 0 || !Number.isFinite(item.minMain) || item.minMain < 0 || !(Number.isFinite(item.maxMain) || item.maxMain === Infinity) || item.maxMain < item.minMain || !Number.isFinite(item.paddingMain) || item.paddingMain < 0 || !Number.isFinite(item.grow) || item.grow < 0 || !Number.isFinite(item.shrink) || item.shrink < 0 || !Number.isFinite(item.marginMainBefore ?? 0) || !Number.isFinite(item.marginMainAfter ?? 0)) {
317
+ throw new RangeError("Intrinsic Flex inputs must contain finite numeric factors, sizes and margins with ordered main bounds.");
318
+ }
319
+ }
320
+ const owner = acquireRootOwner(measurementOwner);
321
+ const standalone = measurementOwner === void 0;
322
+ let handle = 0, generation = 0;
323
+ try {
324
+ ({ handle, generation } = owner.create());
325
+ const pointer = owner.kernel.resize(handle, generation, items.length);
326
+ if (!pointer && items.length) throw new Error("Layout measurement storage allocation failed.");
327
+ const records = new Float64Array(owner.kernel.memory.buffer, pointer, items.length * 10);
328
+ for (let index = 0; index < items.length; index++) {
329
+ writeFlexMainInput(records, index * 10, items[index]);
330
+ }
331
+ if (owner.kernel.solve(handle, generation, main, gap) !== 0) {
332
+ throw new Error("Experimental Flex intrinsic main allocation failed; numeric overflow or no progress.");
333
+ }
334
+ const output = new Float64Array(owner.kernel.memory.buffer, pointer, items.length * 10);
335
+ const results = new Array(items.length);
336
+ for (let index = 0; index < items.length; index++) results[index] = output[index * 10 + 6];
337
+ counters.solves++;
338
+ counters.measurementSolves++;
339
+ return results;
340
+ } catch (error) {
341
+ if (error instanceof WebAssembly.RuntimeError) owner.dispose(true);
342
+ throw error;
343
+ } finally {
344
+ try {
345
+ if (handle) owner.release(handle, generation);
346
+ } finally {
347
+ if (standalone) owner.dispose();
348
+ }
349
+ }
350
+ }
351
+ const alignmentCodes = { stretch: 0, "flex-start": 1, "flex-end": 2, center: 3 };
352
+ const flowAlignmentCodes = { start: 0, center: 1, end: 2, stretch: 3 };
353
+ function sameGridTracks(a, b) {
354
+ if (a.length !== b.length) return false;
355
+ for (let index = 0; index < a.length; index++) {
356
+ const left = a[index], right = b[index];
357
+ if (left.kind !== right.kind || (left.kind === "fixed" ? left.value : left.factor) !== (right.kind === "fixed" ? right.value : right.factor)) return false;
358
+ }
359
+ return true;
360
+ }
361
+ function sameNumbers(a, b) {
362
+ if (a.length !== b.length) return false;
363
+ for (let index = 0; index < a.length; index++) if (a[index] !== b[index]) return false;
364
+ return true;
365
+ }
366
+ class LayoutRegion {
367
+ constructor(mountOwner) {
368
+ this.mountOwner = mountOwner;
369
+ }
370
+ mountOwner;
371
+ gridV2;
372
+ flowCache;
373
+ placeFlow(items, options) {
374
+ const kernel = this.ensureOwner();
375
+ const cached = this.flowCache, prior = cached?.options;
376
+ let equal = prior?.horizontal === options.horizontal && prior.mainBound === options.mainBound && prior.gap === options.gap && prior.lineGap === options.lineGap && prior.wrap === options.wrap && cached.items.length === items.length;
377
+ if (equal) for (let index = 0; index < items.length; index++) {
378
+ const a = cached.items[index], b = items[index];
379
+ if (a.width !== b.width || a.height !== b.height || a.alignment !== b.alignment) {
380
+ equal = false;
381
+ break;
382
+ }
383
+ }
384
+ if (equal) return cached.boxes;
385
+ try {
386
+ const pointer = kernel.resize_flow(this.handle, this.generation, items.length);
387
+ if (!pointer && items.length) throw new Error("Flow storage allocation failed.");
388
+ const records = new Float64Array(kernel.memory.buffer, pointer, items.length * 8);
389
+ const inputs = new Array(items.length);
390
+ for (let index = 0; index < items.length; index++) {
391
+ const item = items[index], offset = index * 8;
392
+ inputs[index] = { width: item.width, height: item.height, alignment: item.alignment };
393
+ records[offset] = options.horizontal ? item.width : item.height;
394
+ records[offset + 1] = options.horizontal ? item.height : item.width;
395
+ records[offset + 2] = flowAlignmentCodes[item.alignment];
396
+ }
397
+ if (kernel.place_flow(this.handle, this.generation, options.mainBound, options.gap, options.lineGap, options.wrap ? 1 : 0) !== 0) throw new RangeError("Native Flow placement produced invalid geometry.");
398
+ const resolved = new Float64Array(kernel.memory.buffer, pointer, items.length * 8);
399
+ const boxes = new Array(items.length);
400
+ for (let index = 0; index < items.length; index++) {
401
+ const offset = index * 8;
402
+ boxes[index] = options.horizontal ? { x: resolved[offset + 3], y: resolved[offset + 4], width: resolved[offset], height: resolved[offset + 5] } : { x: resolved[offset + 4], y: resolved[offset + 3], width: resolved[offset + 5], height: resolved[offset] };
403
+ }
404
+ this.flowCache = { options: { ...options }, items: inputs, boxes };
405
+ counters.flowPlacements++;
406
+ return boxes;
407
+ } catch (error) {
408
+ return this.fail(error);
409
+ }
410
+ }
411
+ gridRevision = 0;
412
+ gridCells;
413
+ gridColumns;
414
+ gridRows;
415
+ gridV2Columns;
416
+ gridV2Rows;
417
+ gridV2ColumnContributions;
418
+ gridV2RowContributions;
419
+ gridV2Cells;
420
+ resolveGridTracks(tracks, options) {
421
+ const kernel = this.ensureOwner();
422
+ const cached = options.axis === "columns" ? this.gridColumns : this.gridRows;
423
+ if (cached && cached.bound === options.bound && cached.gap === options.gap && sameGridTracks(cached.tracks, tracks)) return cached.values;
424
+ try {
425
+ const pointer = kernel.resize_grid(this.handle, this.generation, tracks.length, options.axis === "columns" ? 0 : 1);
426
+ if (!pointer && tracks.length) throw new Error("Grid track storage allocation failed.");
427
+ const records = new Float64Array(kernel.memory.buffer, pointer, tracks.length * 3);
428
+ for (let index = 0; index < tracks.length; index++) {
429
+ const track = tracks[index];
430
+ records[index * 3] = track.kind === "fixed" ? 0 : track.kind === "percentage" ? 1 : 2;
431
+ records[index * 3 + 1] = track.kind === "fixed" ? track.value : track.factor;
432
+ }
433
+ if (kernel.resolve_grid_tracks(this.handle, this.generation, options.bound, options.gap, options.axis === "columns" ? 0 : 1) !== 0) throw new RangeError("Grid native track resolution produced invalid geometry.");
434
+ const resolved = new Float64Array(kernel.memory.buffer, pointer, tracks.length * 3);
435
+ const values = new Array(tracks.length);
436
+ for (let index = 0; index < tracks.length; index++) values[index] = resolved[index * 3 + 2];
437
+ const entry = { tracks, bound: options.bound, gap: options.gap, values };
438
+ if (options.axis === "columns") this.gridColumns = entry;
439
+ else this.gridRows = entry;
440
+ this.gridRevision++;
441
+ counters.gridTrackResolutions++;
442
+ return values;
443
+ } catch (error) {
444
+ return this.fail(error);
445
+ }
446
+ }
447
+ placeGridCells(cells) {
448
+ const kernel = this.ensureOwner();
449
+ const cached = this.gridCells;
450
+ let equal = cached?.revision === this.gridRevision && cached.cells.length === cells.length;
451
+ if (equal) for (let index = 0; index < cells.length; index++) {
452
+ const a = cached.cells[index], b = cells[index];
453
+ if (a.columnStart !== b.columnStart || a.columnSpan !== b.columnSpan || a.rowStart !== b.rowStart || a.rowSpan !== b.rowSpan) {
454
+ equal = false;
455
+ break;
456
+ }
457
+ }
458
+ if (equal) return cached.boxes;
459
+ try {
460
+ if (!this.gridColumns || !this.gridRows) throw new Error("Native Grid placement requires both resolved axes.");
461
+ const pointer = kernel.resize_grid_cells(this.handle, this.generation, cells.length);
462
+ if (!pointer && cells.length) throw new Error("Grid cell storage allocation failed.");
463
+ const records = new Float64Array(kernel.memory.buffer, pointer, cells.length * 8);
464
+ const inputs = new Array(cells.length);
465
+ for (let index = 0; index < cells.length; index++) {
466
+ const cell = cells[index], offset = index * 8;
467
+ inputs[index] = { columnStart: cell.columnStart, columnSpan: cell.columnSpan, rowStart: cell.rowStart, rowSpan: cell.rowSpan };
468
+ records[offset] = cell.columnStart - 1;
469
+ records[offset + 1] = cell.columnSpan;
470
+ records[offset + 2] = cell.rowStart - 1;
471
+ records[offset + 3] = cell.rowSpan;
472
+ }
473
+ if (kernel.place_grid_cells(this.handle, this.generation) !== 0) throw new RangeError("Grid native cell placement produced invalid geometry.");
474
+ const boxes = new Array(cells.length);
475
+ for (let index = 0; index < cells.length; index++) {
476
+ const offset = index * 8;
477
+ boxes[index] = { x: records[offset + 4], y: records[offset + 5], width: records[offset + 6], height: records[offset + 7] };
478
+ }
479
+ this.gridCells = { revision: this.gridRevision, cells: inputs, boxes };
480
+ counters.gridCellPlacements++;
481
+ return boxes;
482
+ } catch (error) {
483
+ return this.fail(error);
484
+ }
485
+ }
486
+ /** V2 Grid records remain region-owned so paint-only work reuses native geometry. */
487
+ resolveGridV2Tracks(records, options) {
488
+ const cached = options.axis === 0 ? this.gridV2Columns : this.gridV2Rows;
489
+ if (cached && cached.bound === options.bound && cached.gap === options.gap && sameNumbers(cached.records, records)) return cached.values;
490
+ try {
491
+ const values = this.gridV2Region().tracks(records, options.bound, options.gap, options.axis);
492
+ const entry = { records: records.slice(), bound: options.bound, gap: options.gap, values };
493
+ if (options.axis === 0) {
494
+ this.gridV2Columns = entry;
495
+ this.gridV2ColumnContributions = void 0;
496
+ } else {
497
+ this.gridV2Rows = entry;
498
+ this.gridV2RowContributions = void 0;
499
+ }
500
+ this.gridRevision++;
501
+ counters.gridTrackResolutions++;
502
+ return values;
503
+ } catch (error) {
504
+ return this.fail(error);
505
+ }
506
+ }
507
+ /** Fresh native track values after Grid contributions; the prior JS snapshot is stale. */
508
+ snapshotGridV2Tracks(axis) {
509
+ try {
510
+ return this.gridV2Region().resolvedTracks(axis);
511
+ } catch (error) {
512
+ return this.fail(error);
513
+ }
514
+ }
515
+ applyGridV2Contributions(records, gap, axis) {
516
+ const cached = axis === 0 ? this.gridV2ColumnContributions : this.gridV2RowContributions;
517
+ if (records.length === 0 && !cached) return;
518
+ if (cached && cached.gap === gap && sameNumbers(cached.records, records)) return;
519
+ try {
520
+ const tracks = axis === 0 ? this.gridV2Columns : this.gridV2Rows;
521
+ if (cached && tracks) this.gridV2Region().tracks(tracks.records, tracks.bound, tracks.gap, axis);
522
+ this.gridV2Region().contributions(records, gap, axis);
523
+ const entry = { records: records.slice(), gap };
524
+ if (axis === 0) this.gridV2ColumnContributions = entry;
525
+ else this.gridV2RowContributions = entry;
526
+ this.gridRevision++;
527
+ counters.gridTrackResolutions++;
528
+ } catch (error) {
529
+ this.fail(error);
530
+ }
531
+ }
532
+ placeGridV2Cells(cells, flow, columnGap, rowGap) {
533
+ const cached = this.gridV2Cells;
534
+ let equal = cached?.revision === this.gridRevision && cached.flow === flow && cached.columnGap === columnGap && cached.rowGap === rowGap && cached.cells.length === cells.length;
535
+ if (equal) for (let index = 0; index < cells.length; index++) {
536
+ const left = cached.cells[index], right = cells[index];
537
+ if (left.columnStart !== right.columnStart || left.columnSpan !== right.columnSpan || left.rowStart !== right.rowStart || left.rowSpan !== right.rowSpan) {
538
+ equal = false;
539
+ break;
540
+ }
541
+ }
542
+ if (equal) return cached.boxes;
543
+ try {
544
+ const boxes = this.gridV2Region().cells(cells, flow, columnGap, rowGap);
545
+ this.gridV2Cells = { revision: this.gridRevision, cells: cells.map((cell) => ({ ...cell })), flow, columnGap, rowGap, boxes };
546
+ counters.gridCellPlacements++;
547
+ return boxes;
548
+ } catch (error) {
549
+ return this.fail(error);
550
+ }
551
+ }
552
+ cachedAllocation;
553
+ layoutOwner;
554
+ handle = 0;
555
+ generation = 0;
556
+ get allocationCache() {
557
+ return this.layoutOwner && !this.layoutOwner.has(this.handle, this.generation) ? void 0 : this.cachedAllocation;
558
+ }
559
+ set allocationCache(value) {
560
+ this.cachedAllocation = value;
561
+ }
562
+ ensureOwner() {
563
+ if (this.layoutOwner && !this.layoutOwner.has(this.handle, this.generation)) this.dispose();
564
+ if (!this.layoutOwner) {
565
+ this.layoutOwner = acquireRootOwner(this.mountOwner);
566
+ const region = this.layoutOwner.create();
567
+ this.handle = region.handle;
568
+ this.generation = region.generation;
569
+ }
570
+ return this.layoutOwner.kernel;
571
+ }
572
+ /** Region-owned Grid arena; it shares this root's WebAssembly instance. */
573
+ gridV2Region() {
574
+ if (!this.gridV2) {
575
+ this.ensureOwner();
576
+ this.gridV2 = this.layoutOwner.createGrid();
577
+ }
578
+ return this.gridV2;
579
+ }
580
+ fail(error) {
581
+ if (error instanceof WebAssembly.RuntimeError) this.layoutOwner?.dispose(true);
582
+ this.dispose();
583
+ throw error;
584
+ }
585
+ records = /* @__PURE__ */ new Map();
586
+ identities = /* @__PURE__ */ new Map();
587
+ identity(type, key) {
588
+ let entries = this.identities.get(type);
589
+ if (!entries) {
590
+ entries = /* @__PURE__ */ new Map();
591
+ this.identities.set(type, entries);
592
+ }
593
+ let token = entries.get(key);
594
+ if (!token) {
595
+ token = {};
596
+ entries.set(key, token);
597
+ }
598
+ return token;
599
+ }
600
+ /** Stable measurement identity without adding an absolute leaf to the native line. */
601
+ absoluteMeasurementIdentity(type, key) {
602
+ this.hasAbsoluteMeasurements = true;
603
+ const absoluteKey = `absolute:${key}`;
604
+ const existing = this.identities.get(type)?.get(absoluteKey);
605
+ if (existing) return existing;
606
+ const token = this.identity(type, absoluteKey);
607
+ GLOBAL_STATE.renderTransaction?.onFinish((success) => {
608
+ if (success) return;
609
+ const entries = this.identities.get(type);
610
+ if (entries?.get(absoluteKey) !== token) return;
611
+ entries.delete(absoluteKey);
612
+ if (entries.size === 0) this.identities.delete(type);
613
+ });
614
+ return token;
615
+ }
616
+ results = [];
617
+ main = -1;
618
+ wrap = false;
619
+ crossModeKey = "";
620
+ gap = -1;
621
+ order = [];
622
+ mainPlacementKey = "";
623
+ mainOffsets = [];
624
+ allocationRevision = 0;
625
+ crossSize = -1;
626
+ crossRecords = [];
627
+ crossResults = [];
628
+ hasAbsoluteMeasurements = false;
629
+ intrinsicMeasurements = /* @__PURE__ */ new Map();
630
+ readPrimitiveMeasurement(token, key) {
631
+ const entries = this.intrinsicMeasurements.get(token), entry = entries?.get(key);
632
+ if (entry) {
633
+ entries.delete(key);
634
+ entries.set(key, entry);
635
+ }
636
+ return entry;
637
+ }
638
+ writePrimitiveMeasurement(token, entry) {
639
+ if (!this.layoutOwner?.has(this.handle, this.generation)) return;
640
+ let entries = this.intrinsicMeasurements.get(token);
641
+ if (!entries) {
642
+ entries = /* @__PURE__ */ new Map();
643
+ this.intrinsicMeasurements.set(token, entries);
644
+ }
645
+ if (entries.has(entry.key)) {
646
+ entries.delete(entry.key);
647
+ counters.cachedMeasurements--;
648
+ } else if (entries.size >= 3) {
649
+ entries.delete(entries.keys().next().value);
650
+ counters.cachedMeasurements--;
651
+ }
652
+ entries.set(entry.key, entry);
653
+ counters.cachedMeasurements++;
654
+ if (entry.key.startsWith("finite:absolute-size:")) this.hasAbsoluteMeasurements = true;
655
+ }
656
+ /** Reuses the region-owned cache without lending native line membership to absolute leaves. */
657
+ pruneAbsoluteMeasurements(live) {
658
+ if (live?.size) this.ensureOwner();
659
+ if (!this.hasAbsoluteMeasurements) return;
660
+ let retained = false;
661
+ for (const [token, entries] of this.intrinsicMeasurements) {
662
+ for (const key of entries.keys()) {
663
+ if (!key.startsWith("finite:absolute-size:")) continue;
664
+ if (live?.has(token)) retained = true;
665
+ else {
666
+ entries.delete(key);
667
+ counters.cachedMeasurements--;
668
+ }
669
+ }
670
+ if (entries.size === 0) this.intrinsicMeasurements.delete(token);
671
+ }
672
+ for (const [type, entries] of this.identities) {
673
+ for (const [key, token] of entries) {
674
+ if (!key.startsWith("absolute:")) continue;
675
+ if (live?.has(token)) retained = true;
676
+ else entries.delete(key);
677
+ }
678
+ if (entries.size === 0) this.identities.delete(type);
679
+ }
680
+ this.hasAbsoluteMeasurements = retained;
681
+ }
682
+ measurements = /* @__PURE__ */ new Map();
683
+ textMaximums;
684
+ readTextMaximum(token, content, font) {
685
+ const entry = this.textMaximums?.get(token);
686
+ return entry?.content === content && entry.font === font ? entry.width : void 0;
687
+ }
688
+ writeTextMaximum(token, content, font, width) {
689
+ const entries = this.textMaximums ??= /* @__PURE__ */ new Map();
690
+ if (!entries.has(token)) counters.cachedMeasurements++;
691
+ entries.set(token, { content, font, width });
692
+ }
693
+ readMeasurement(token, key) {
694
+ const entries = this.measurements.get(token), result = entries?.get(key);
695
+ if (entries && result) {
696
+ entries.delete(key);
697
+ entries.set(key, result);
698
+ }
699
+ return result;
700
+ }
701
+ writeMeasurement(token, key, size) {
702
+ let entries = this.measurements.get(token);
703
+ if (!entries) {
704
+ entries = /* @__PURE__ */ new Map();
705
+ this.measurements.set(token, entries);
706
+ }
707
+ if (entries.has(key)) {
708
+ entries.delete(key);
709
+ counters.cachedMeasurements--;
710
+ } else if (entries.size >= 2) {
711
+ entries.delete(entries.keys().next().value);
712
+ counters.cachedMeasurements--;
713
+ }
714
+ entries.set(key, { ...size });
715
+ counters.cachedMeasurements++;
716
+ }
717
+ releaseMeasurements(token) {
718
+ counters.cachedMeasurements -= this.intrinsicMeasurements.get(token)?.size ?? 0;
719
+ this.intrinsicMeasurements.delete(token);
720
+ if (this.textMaximums?.delete(token)) counters.cachedMeasurements--;
721
+ counters.cachedMeasurements -= this.measurements.get(token)?.size ?? 0;
722
+ this.measurements.delete(token);
723
+ }
724
+ solve(items, main, gap, wrap = false) {
725
+ try {
726
+ this.solveRegion(items, main, gap, wrap);
727
+ } catch (error) {
728
+ this.fail(error);
729
+ }
730
+ }
731
+ solveRegion(items, main, gap, wrap) {
732
+ const kernel = this.ensureOwner();
733
+ let changed = wrap !== this.wrap || main !== this.main || gap !== this.gap || items.length !== this.order.length;
734
+ const pointer = kernel.resize(this.handle, this.generation, items.length);
735
+ const view = new Float64Array(kernel.memory.buffer, pointer, items.length * 10);
736
+ const alive = /* @__PURE__ */ new Set();
737
+ for (const [i, item] of items.entries()) {
738
+ const token = item.layoutToken ?? item.receiverToken;
739
+ alive.add(token);
740
+ const record = [item.baseMain, item.minMain, item.maxMain, item.paddingMain, item.grow, item.shrink, 0, 0, item.marginMainBefore ?? 0, item.marginMainAfter ?? 0];
741
+ const previous = this.records.get(token);
742
+ if (previous) counters.nodeReuses++;
743
+ else {
744
+ counters.nodeCreates++;
745
+ counters.activeNodes++;
746
+ }
747
+ if (!previous || record.some((v, n) => v !== previous[n]) || this.order[i] !== token) {
748
+ writeFlexMainInput(view, i * 10, item);
749
+ this.records.set(token, record);
750
+ changed = true;
751
+ }
752
+ }
753
+ for (const token of this.records.keys()) if (!alive.has(token)) {
754
+ this.records.delete(token);
755
+ this.releaseMeasurements(token);
756
+ counters.activeNodes--;
757
+ }
758
+ for (const [type, entries] of this.identities) {
759
+ for (const [key, token] of entries) if (!alive.has(token) && !key.startsWith("absolute:")) entries.delete(key);
760
+ if (entries.size === 0) this.identities.delete(type);
761
+ }
762
+ if (changed) {
763
+ try {
764
+ const status = wrap ? kernel.solve_wrap(this.handle, this.generation, main, gap) : kernel.solve(this.handle, this.generation, main, gap);
765
+ if (status !== 0) throw new Error(`Experimental Flex WASM allocation failed (${status}); numeric overflow or no progress.`);
766
+ const output = new Float64Array(kernel.memory.buffer, pointer, items.length * 10);
767
+ this.results = items.map((_, i) => output[i * 10 + 6]);
768
+ } catch (error) {
769
+ this.fail(error);
770
+ }
771
+ counters.solves++;
772
+ this.allocationRevision++;
773
+ if (wrap) counters.lineFormations++;
774
+ this.wrap = wrap;
775
+ this.main = main;
776
+ this.gap = gap;
777
+ this.order = items.map((i) => i.layoutToken ?? i.receiverToken);
778
+ }
779
+ items.forEach((item, i) => {
780
+ item.targetMain = this.results[i];
781
+ });
782
+ }
783
+ /** Current native source-line membership, never inferred from placements. */
784
+ firstWrapLineCount() {
785
+ if (!this.wrap || !this.layoutOwner?.has(this.handle, this.generation)) {
786
+ return this.fail(new Error("Structural baseline requires a current wrapped allocation."));
787
+ }
788
+ const count = this.layoutOwner.kernel.first_wrap_line_count(this.handle, this.generation);
789
+ if (!Number.isInteger(count) || count < 0 || count > this.order.length || count === 0 !== (this.order.length === 0)) {
790
+ return this.fail(new Error("Structural baseline native first-line membership is stale or invalid."));
791
+ }
792
+ return count;
793
+ }
794
+ /** Current native source-line membership, never inferred from placements. */
795
+ lastWrapLineCount() {
796
+ if (!this.wrap || !this.layoutOwner?.has(this.handle, this.generation)) {
797
+ return this.fail(new Error("Structural baseline requires a current wrapped allocation."));
798
+ }
799
+ const count = this.layoutOwner.kernel.last_wrap_line_count(this.handle, this.generation);
800
+ if (!Number.isInteger(count) || count < 0 || count > this.order.length || count === 0 !== (this.order.length === 0)) {
801
+ return this.fail(new Error("Structural baseline native last-line membership is stale or invalid."));
802
+ }
803
+ return count;
804
+ }
805
+ mainAutoFlags;
806
+ mainAutoRevision = 0;
807
+ placeMain(main, gap, alignment, reverse = false, autoMargins, autoMarginFreeMain) {
808
+ if (!this.layoutOwner?.has(this.handle, this.generation)) throw new Error("Experimental Flex main placement requires a solved region.");
809
+ const kernel = this.layoutOwner.kernel;
810
+ const code = ["flex-start", "flex-end", "center", "space-between", "space-around", "space-evenly"].indexOf(alignment);
811
+ if (autoMargins) {
812
+ const flags = this.mainAutoFlags ??= [];
813
+ let changed = flags.length !== autoMargins.length * 2;
814
+ for (let index = 0; index < autoMargins.length; index++) {
815
+ const before = autoMargins[index].autoMainBefore === true;
816
+ const after = autoMargins[index].autoMainAfter === true;
817
+ if (flags[index * 2] !== before || flags[index * 2 + 1] !== after) changed = true;
818
+ flags[index * 2] = before;
819
+ flags[index * 2 + 1] = after;
820
+ }
821
+ flags.length = autoMargins.length * 2;
822
+ if (changed) this.mainAutoRevision++;
823
+ } else if (this.mainAutoFlags?.length) {
824
+ this.mainAutoFlags.length = 0;
825
+ this.mainAutoRevision++;
826
+ }
827
+ const key = `${this.allocationRevision}:${main}:${gap}:${code}:${reverse ? 1 : 0}:${this.mainAutoRevision}:${autoMarginFreeMain ?? "geometric"}`;
828
+ if (key !== this.mainPlacementKey) {
829
+ try {
830
+ if (autoMargins) {
831
+ if (autoMargins.length !== this.order.length) throw new Error("Auto margin placement requires a matching allocation.");
832
+ const autoPointer = kernel.resize_main_auto(this.handle, this.generation, this.order.length);
833
+ const flags = new Float64Array(kernel.memory.buffer, autoPointer, this.order.length * 2);
834
+ for (let index = 0; index < autoMargins.length; index++) {
835
+ flags[index * 2] = autoMargins[index].autoMainBefore ? 1 : 0;
836
+ flags[index * 2 + 1] = autoMargins[index].autoMainAfter ? 1 : 0;
837
+ }
838
+ }
839
+ const pointer = kernel.resize(this.handle, this.generation, this.order.length);
840
+ let status;
841
+ if (autoMargins && autoMarginFreeMain !== void 0) {
842
+ if (this.wrap) throw new Error("Staged intrinsic margins require a single line.");
843
+ status = kernel.place_main_auto_staged(this.handle, this.generation, main, gap, code, reverse ? 1 : 0, autoMarginFreeMain);
844
+ } else if (autoMargins) {
845
+ status = this.wrap ? kernel.place_wrap_main_auto(this.handle, this.generation, main, gap, code, reverse ? 1 : 0) : kernel.place_main_auto(this.handle, this.generation, main, gap, code, reverse ? 1 : 0);
846
+ } else {
847
+ status = this.wrap ? kernel.place_wrap_main(this.handle, this.generation, main, gap, code, reverse ? 1 : 0) : kernel.place_main(this.handle, this.generation, main, gap, code, reverse ? 1 : 0);
848
+ }
849
+ if (status !== 0) throw new Error(`Experimental Flex WASM main placement failed (${status}); nonfinite geometry.`);
850
+ const output = new Float64Array(kernel.memory.buffer, pointer, this.order.length * 10);
851
+ this.mainOffsets = this.order.map((_, i) => output[i * 10 + 7]);
852
+ this.mainPlacementKey = key;
853
+ counters.mainPlacements++;
854
+ } catch (error) {
855
+ this.fail(error);
856
+ }
857
+ }
858
+ return this.mainOffsets;
859
+ }
860
+ placeCross(items, size, alignment, options) {
861
+ const wrap = options?.wrap;
862
+ const reverse = options?.reverse === true;
863
+ const baseline = options?.baseline === true;
864
+ const lastBaseline = baseline && options?.lastBaseline === true;
865
+ if (baseline && reverse && !wrap) throw new Error("Experimental Flex baseline cross reversal requires wrapped line membership.");
866
+ if (!this.layoutOwner?.has(this.handle, this.generation)) throw new Error("Experimental Flex cross placement requires a solved region.");
867
+ const kernel = this.layoutOwner.kernel;
868
+ const records = items.map((item) => {
869
+ const participant = baseline && item.alignSelf === "auto" && !item.autoCrossBefore && !item.autoCrossAfter;
870
+ const physicalEdges = baseline && reverse && (participant || item.autoCrossBefore || item.autoCrossAfter);
871
+ const beforeAuto = physicalEdges ? item.autoCrossAfter : item.autoCrossBefore;
872
+ const afterAuto = physicalEdges ? item.autoCrossBefore : item.autoCrossAfter;
873
+ const before = physicalEdges ? item.marginCrossAfter : item.marginCrossBefore;
874
+ const after = physicalEdges ? item.marginCrossBefore : item.marginCrossAfter;
875
+ return [
876
+ item.preferredCross,
877
+ item.paddingCross,
878
+ item.minCross,
879
+ item.maxCross,
880
+ item.crossAuto ? 1 : 0,
881
+ alignmentCodes[item.alignSelf === "auto" ? alignment : item.alignSelf] + (beforeAuto ? 4 : 0) + (afterAuto ? 8 : 0) + (participant ? 16 : 0),
882
+ baseline ? before ?? 0 : 0,
883
+ baseline ? after ?? 0 : 0,
884
+ baseline ? item.firstBaseline ?? Number.NaN : before ?? 0,
885
+ baseline ? 0 : after ?? 0
886
+ ];
887
+ });
888
+ const code = wrap ? ["flex-start", "flex-end", "center", "space-between", "space-around", "space-evenly", "stretch"].indexOf(wrap.alignContent) : -1;
889
+ const modeKey = baseline ? `baseline:${lastBaseline ? "last" : "first"}:${this.allocationRevision}:${wrap ? `wrap:${wrap.gap}:${code}:${reverse ? 1 : 0}` : "nowrap"}` : wrap ? `${this.allocationRevision}:${wrap.gap}:${code}:${reverse ? 1 : 0}` : `nowrap:${reverse ? 1 : 0}`;
890
+ const changed = modeKey !== this.crossModeKey || size !== this.crossSize || records.length !== this.crossRecords.length || records.some((record, i) => record.some((value, j) => value !== this.crossRecords[i]?.[j]));
891
+ if (changed) {
892
+ try {
893
+ const pointer = kernel.resize_cross(this.handle, this.generation, records.length);
894
+ const input = new Float64Array(kernel.memory.buffer, pointer, records.length * 10);
895
+ records.forEach((record, i) => input.set(record, i * 10));
896
+ const status = baseline ? wrap ? lastBaseline ? kernel.place_wrap_last_baseline(this.handle, this.generation, size, wrap.gap, code, reverse ? 1 : 0) : kernel.place_wrap_first_baseline(this.handle, this.generation, size, wrap.gap, code, reverse ? 1 : 0) : lastBaseline ? kernel.place_last_baseline(this.handle, this.generation, size) : kernel.place_first_baseline(this.handle, this.generation, size) : wrap ? kernel.place_wrap_cross(this.handle, this.generation, size, wrap.gap, code, reverse ? 1 : 0) : kernel.place_cross(this.handle, this.generation, size, reverse ? 1 : 0);
897
+ if (status !== 0) throw new Error(`Experimental Flex WASM cross placement failed (${status}); invalid or nonfinite geometry.`);
898
+ const output = new Float64Array(kernel.memory.buffer, pointer, records.length * 10);
899
+ this.crossResults = records.map((_, i) => ({ outerCross: output[i * 10 + 6], offset: output[i * 10 + 7] }));
900
+ this.crossRecords = records;
901
+ this.crossSize = size;
902
+ this.crossModeKey = modeKey;
903
+ counters.crossPlacements++;
904
+ } catch (error) {
905
+ this.fail(error);
906
+ }
907
+ }
908
+ return this.crossResults;
909
+ }
910
+ dispose() {
911
+ disposeAllocationCheckpoint(this);
912
+ this.gridV2?.dispose();
913
+ this.gridV2 = void 0;
914
+ this.hasAbsoluteMeasurements = false;
915
+ this.flowCache = void 0;
916
+ this.allocationCache = void 0;
917
+ this.gridColumns = void 0;
918
+ this.gridRows = void 0;
919
+ this.gridCells = void 0;
920
+ this.gridRevision = 0;
921
+ const owner = this.layoutOwner, handle = this.handle, generation = this.generation;
922
+ this.layoutOwner = void 0;
923
+ this.handle = 0;
924
+ this.generation = 0;
925
+ counters.activeNodes -= this.records.size;
926
+ for (const token of this.measurements.keys()) this.releaseMeasurements(token);
927
+ for (const token of this.intrinsicMeasurements.keys()) this.releaseMeasurements(token);
928
+ if (this.textMaximums) for (const token of this.textMaximums.keys()) this.releaseMeasurements(token);
929
+ this.textMaximums = void 0;
930
+ this.records.clear();
931
+ this.identities.clear();
932
+ this.results = [];
933
+ this.order = [];
934
+ this.main = -1;
935
+ this.gap = -1;
936
+ this.mainPlacementKey = "";
937
+ this.mainOffsets = [];
938
+ this.mainAutoFlags = void 0;
939
+ this.mainAutoRevision = 0;
940
+ this.crossRecords = [];
941
+ this.crossResults = [];
942
+ this.crossSize = -1;
943
+ this.crossModeKey = "";
944
+ this.wrap = false;
945
+ if (owner) {
946
+ try {
947
+ owner.release(handle, generation);
948
+ } finally {
949
+ if (!this.mountOwner) owner.dispose();
950
+ }
951
+ }
952
+ }
953
+ }
954
+ const regions = /* @__PURE__ */ new WeakMap();
955
+ const lastFrames = /* @__PURE__ */ new WeakMap();
956
+ function mountedLayoutRegion() {
957
+ const refs = GLOBAL_STATE.componentRefs;
958
+ if (!refs) return void 0;
959
+ const owner = GLOBAL_STATE.currentPibblInstance;
960
+ const frame = GLOBAL_STATE.frameSnapshot;
961
+ if (owner && frame && lastFrames.get(owner) !== frame) {
962
+ lastFrames.set(owner, frame);
963
+ counters.frames++;
964
+ }
965
+ let region = regions.get(refs);
966
+ if (!region) {
967
+ region = new LayoutRegion(owner?.interactionRoot ?? owner);
968
+ regions.set(refs, region);
969
+ refs.teardowns.add(() => {
970
+ region.dispose();
971
+ regions.delete(refs);
972
+ });
973
+ }
974
+ return region;
975
+ }
976
+ function adoptMountedLayoutRegion(region, release) {
977
+ const refs = GLOBAL_STATE.componentRefs;
978
+ if (!refs) throw new Error("Prepared layout adoption requires a mounted component.");
979
+ const previous = regions.get(refs);
980
+ if (previous === region) return;
981
+ previous?.dispose();
982
+ regions.set(refs, region);
983
+ refs.teardowns.add(() => {
984
+ if (regions.get(refs) !== region) return;
985
+ regions.delete(refs);
986
+ region.dispose();
987
+ release();
988
+ });
989
+ }
990
+ function recordWasmMeasurement() {
991
+ counters.measuredLeaves++;
992
+ }
993
+ function recordWasmAllocationPass() {
994
+ counters.allocationPasses++;
995
+ }
996
+ function recordWasmAllocationItem() {
997
+ counters.allocationItemVisits++;
998
+ }
999
+ function recordWasmAllocationCacheHit() {
1000
+ counters.allocationCacheHits++;
1001
+ }
1002
+ export {
1003
+ LayoutRegion,
1004
+ adoptMountedLayoutRegion,
1005
+ mountedLayoutRegion,
1006
+ nativeLayout,
1007
+ prepareTransientIntrinsicMainQueries,
1008
+ recordWasmAllocationCacheHit,
1009
+ recordWasmAllocationItem,
1010
+ recordWasmAllocationPass,
1011
+ recordWasmMeasurement,
1012
+ resolveTransientIntrinsicMain,
1013
+ resolveTransientKnownOwnerMain,
1014
+ snapshotWasmLayoutDiagnostics,
1015
+ solveTransientFlexMain,
1016
+ withMeasurementLayoutOwner
1017
+ };
1018
+ //# sourceMappingURL=region.js.map