@pibbl/core 0.0.2 → 0.0.3-alpha.109.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (549) hide show
  1. package/THIRD_PARTY_NOTICES.txt +81 -0
  2. package/dist/features/physics/2d-testing.d.ts +1 -1
  3. package/dist/features/physics/2d-testing.js +2 -2
  4. package/dist/features/physics/2d-testing.js.map +2 -2
  5. package/dist/features/physics/lib/2d/canvas/components.js +25 -21
  6. package/dist/features/physics/lib/2d/canvas/components.js.map +2 -2
  7. package/dist/features/physics/lib/2d/canvas/presentation.js +1 -2
  8. package/dist/features/physics/lib/2d/canvas/presentation.js.map +2 -2
  9. package/dist/features/physics/lib/2d/collision/casts.js +4 -2
  10. package/dist/features/physics/lib/2d/collision/casts.js.map +2 -2
  11. package/dist/features/physics/lib/2d/runtime/controller.js +1 -1
  12. package/dist/features/physics/lib/2d/runtime/controller.js.map +2 -2
  13. package/dist/features/physics/lib/2d/runtime/obstacles.js +9 -11
  14. package/dist/features/physics/lib/2d/runtime/obstacles.js.map +2 -2
  15. package/dist/features/physics/lib/2d/shapes.js +8 -9
  16. package/dist/features/physics/lib/2d/shapes.js.map +2 -2
  17. package/dist/features/physics/lib/2d/world/rapier.js +22 -26
  18. package/dist/features/physics/lib/2d/world/rapier.js.map +2 -2
  19. package/dist/features/sprites/loader.js +6 -3
  20. package/dist/features/sprites/loader.js.map +2 -2
  21. package/dist/features/textures/index.d.ts +12 -2
  22. package/dist/features/textures/index.js +33 -1
  23. package/dist/features/textures/index.js.map +2 -2
  24. package/dist/features/textures/lib/chemical-field.d.ts +56 -0
  25. package/dist/features/textures/lib/chemical-field.js +154 -0
  26. package/dist/features/textures/lib/chemical-field.js.map +7 -0
  27. package/dist/features/textures/lib/chemical-recipes.d.ts +119 -0
  28. package/dist/features/textures/lib/chemical-recipes.js +275 -0
  29. package/dist/features/textures/lib/chemical-recipes.js.map +7 -0
  30. package/dist/features/textures/lib/definitions.d.ts +3 -18
  31. package/dist/features/textures/lib/definitions.js +17 -24
  32. package/dist/features/textures/lib/definitions.js.map +2 -2
  33. package/dist/features/textures/lib/geometric-patterns.d.ts +149 -0
  34. package/dist/features/textures/lib/geometric-patterns.js +305 -0
  35. package/dist/features/textures/lib/geometric-patterns.js.map +7 -0
  36. package/dist/features/textures/lib/gray-scott.d.ts +55 -0
  37. package/dist/features/textures/lib/gray-scott.js +37 -0
  38. package/dist/features/textures/lib/gray-scott.js.map +7 -0
  39. package/dist/features/textures/lib/palette.js +1 -3
  40. package/dist/features/textures/lib/palette.js.map +2 -2
  41. package/dist/features/textures/lib/patterns.d.ts +123 -0
  42. package/dist/features/textures/lib/patterns.js +344 -0
  43. package/dist/features/textures/lib/patterns.js.map +7 -0
  44. package/dist/features/textures/lib/rain-drops.js +2 -1
  45. package/dist/features/textures/lib/rain-drops.js.map +2 -2
  46. package/dist/features/textures/lib/reaction-diffusion.d.ts +3 -2
  47. package/dist/features/textures/lib/reaction-diffusion.js +9 -20
  48. package/dist/features/textures/lib/reaction-diffusion.js.map +2 -2
  49. package/dist/features/textures/lib/simulation.d.ts +10 -4
  50. package/dist/features/textures/lib/simulation.js +23 -13
  51. package/dist/features/textures/lib/simulation.js.map +2 -2
  52. package/dist/features/textures/lib/wasm/electric.js +8 -1
  53. package/dist/features/textures/lib/wasm/electric.js.map +2 -2
  54. package/dist/features/textures/lib/water-surface.js +1 -3
  55. package/dist/features/textures/lib/water-surface.js.map +2 -2
  56. package/dist/features/viz/index.d.ts +68 -6
  57. package/dist/features/viz/index.js +164 -2
  58. package/dist/features/viz/index.js.map +2 -2
  59. package/dist/features/viz/inspection/bar.d.ts +79 -0
  60. package/dist/features/viz/inspection/bar.js +49 -0
  61. package/dist/features/viz/inspection/bar.js.map +7 -0
  62. package/dist/features/viz/inspection/candle.d.ts +156 -0
  63. package/dist/features/viz/inspection/candle.js +120 -0
  64. package/dist/features/viz/inspection/candle.js.map +7 -0
  65. package/dist/features/viz/inspection/capture-types.d.ts +65 -0
  66. package/dist/features/viz/inspection/capture.d.ts +16 -0
  67. package/dist/features/viz/inspection/capture.js +49 -0
  68. package/dist/features/viz/inspection/capture.js.map +7 -0
  69. package/dist/features/viz/inspection/handler.d.ts +36 -0
  70. package/dist/features/viz/inspection/handler.js +91 -0
  71. package/dist/features/viz/inspection/handler.js.map +7 -0
  72. package/dist/features/viz/inspection/ohlc-bar.d.ts +132 -0
  73. package/dist/features/viz/inspection/ohlc-bar.js +118 -0
  74. package/dist/features/viz/inspection/ohlc-bar.js.map +7 -0
  75. package/dist/features/viz/inspection/owned-ref.d.ts +16 -0
  76. package/dist/features/viz/inspection/owned-ref.js +99 -0
  77. package/dist/features/viz/inspection/owned-ref.js.map +7 -0
  78. package/dist/features/viz/inspection/painted-point.d.ts +22 -0
  79. package/dist/features/viz/inspection/painted-point.js +29 -0
  80. package/dist/features/viz/inspection/painted-point.js.map +7 -0
  81. package/dist/features/viz/inspection/queries.d.ts +100 -0
  82. package/dist/features/viz/inspection/queries.js +192 -0
  83. package/dist/features/viz/inspection/queries.js.map +7 -0
  84. package/dist/features/viz/inspection/query-types.d.ts +177 -0
  85. package/dist/features/viz/inspection/volume.d.ts +104 -0
  86. package/dist/features/viz/inspection/volume.js +95 -0
  87. package/dist/features/viz/inspection/volume.js.map +7 -0
  88. package/dist/features/viz/inspection.d.ts +19 -0
  89. package/dist/features/viz/inspection.js +54 -0
  90. package/dist/features/viz/inspection.js.map +7 -0
  91. package/dist/features/viz/inspection.mjs +1 -0
  92. package/dist/features/viz/lib/area-series.d.ts +62 -0
  93. package/dist/features/viz/lib/area-series.js +120 -0
  94. package/dist/features/viz/lib/area-series.js.map +7 -0
  95. package/dist/features/viz/lib/axis-title.js +2 -1
  96. package/dist/features/viz/lib/axis-title.js.map +2 -2
  97. package/dist/features/viz/lib/axis.js +1 -1
  98. package/dist/features/viz/lib/axis.js.map +2 -2
  99. package/dist/features/viz/lib/bar-series.d.ts +3 -1
  100. package/dist/features/viz/lib/bar-series.js +16 -1
  101. package/dist/features/viz/lib/bar-series.js.map +2 -2
  102. package/dist/features/viz/lib/baseline-series.d.ts +55 -0
  103. package/dist/features/viz/lib/baseline-series.js +136 -0
  104. package/dist/features/viz/lib/baseline-series.js.map +7 -0
  105. package/dist/features/viz/lib/candlestick-series.d.ts +62 -0
  106. package/dist/features/viz/lib/candlestick-series.js +150 -0
  107. package/dist/features/viz/lib/candlestick-series.js.map +7 -0
  108. package/dist/features/viz/lib/censored-point-series.d.ts +71 -0
  109. package/dist/features/viz/lib/censored-point-series.js +129 -0
  110. package/dist/features/viz/lib/censored-point-series.js.map +7 -0
  111. package/dist/features/viz/lib/color-context.d.ts +4 -0
  112. package/dist/features/viz/lib/color-context.js +41 -0
  113. package/dist/features/viz/lib/color-context.js.map +7 -0
  114. package/dist/features/viz/lib/color-math.d.ts +4 -0
  115. package/dist/features/viz/lib/color-math.js +31 -0
  116. package/dist/features/viz/lib/color-math.js.map +7 -0
  117. package/dist/features/viz/lib/color-types.d.ts +53 -0
  118. package/dist/features/viz/lib/curve-definition.d.ts +49 -0
  119. package/dist/features/viz/lib/curve-definition.js +142 -0
  120. package/dist/features/viz/lib/curve-definition.js.map +7 -0
  121. package/dist/features/viz/lib/diverging-color-scale.d.ts +11 -0
  122. package/dist/features/viz/lib/diverging-color-scale.js +51 -0
  123. package/dist/features/viz/lib/diverging-color-scale.js.map +7 -0
  124. package/dist/features/viz/lib/domain-navigation.d.ts +40 -0
  125. package/dist/features/viz/lib/domain-navigation.js +77 -0
  126. package/dist/features/viz/lib/domain-navigation.js.map +7 -0
  127. package/dist/features/viz/lib/editable-chart-elements.d.ts +178 -0
  128. package/dist/features/viz/lib/editable-chart-elements.js +733 -0
  129. package/dist/features/viz/lib/editable-chart-elements.js.map +7 -0
  130. package/dist/features/viz/lib/financial-aggregation.d.ts +127 -0
  131. package/dist/features/viz/lib/financial-aggregation.js +116 -0
  132. package/dist/features/viz/lib/financial-aggregation.js.map +7 -0
  133. package/dist/features/viz/lib/financial-autoscale.d.ts +64 -0
  134. package/dist/features/viz/lib/financial-autoscale.js +61 -0
  135. package/dist/features/viz/lib/financial-autoscale.js.map +7 -0
  136. package/dist/features/viz/lib/financial-comparison.d.ts +62 -0
  137. package/dist/features/viz/lib/financial-comparison.js +98 -0
  138. package/dist/features/viz/lib/financial-comparison.js.map +7 -0
  139. package/dist/features/viz/lib/financial-geometry.d.ts +77 -0
  140. package/dist/features/viz/lib/financial-geometry.js +67 -0
  141. package/dist/features/viz/lib/financial-geometry.js.map +7 -0
  142. package/dist/features/viz/lib/financial-indicators.d.ts +114 -0
  143. package/dist/features/viz/lib/financial-indicators.js +135 -0
  144. package/dist/features/viz/lib/financial-indicators.js.map +7 -0
  145. package/dist/features/viz/lib/financial-oscillators.d.ts +171 -0
  146. package/dist/features/viz/lib/financial-oscillators.js +265 -0
  147. package/dist/features/viz/lib/financial-oscillators.js.map +7 -0
  148. package/dist/features/viz/lib/graph/bipartite.d.ts +14 -0
  149. package/dist/features/viz/lib/graph/bipartite.js +250 -0
  150. package/dist/features/viz/lib/graph/bipartite.js.map +7 -0
  151. package/dist/features/viz/lib/graph/chord.d.ts +44 -0
  152. package/dist/features/viz/lib/graph/chord.js +348 -0
  153. package/dist/features/viz/lib/graph/chord.js.map +7 -0
  154. package/dist/features/viz/lib/graph/dependency.d.ts +26 -0
  155. package/dist/features/viz/lib/graph/dependency.js +140 -0
  156. package/dist/features/viz/lib/graph/dependency.js.map +7 -0
  157. package/dist/features/viz/lib/graph/force.d.ts +28 -0
  158. package/dist/features/viz/lib/graph/force.js +580 -0
  159. package/dist/features/viz/lib/graph/force.js.map +7 -0
  160. package/dist/features/viz/lib/graph/hierarchy.d.ts +21 -0
  161. package/dist/features/viz/lib/graph/hierarchy.js +112 -0
  162. package/dist/features/viz/lib/graph/hierarchy.js.map +7 -0
  163. package/dist/features/viz/lib/graph/icicle.d.ts +16 -0
  164. package/dist/features/viz/lib/graph/icicle.js +153 -0
  165. package/dist/features/viz/lib/graph/icicle.js.map +7 -0
  166. package/dist/features/viz/lib/graph/matrix.d.ts +30 -0
  167. package/dist/features/viz/lib/graph/matrix.js +243 -0
  168. package/dist/features/viz/lib/graph/matrix.js.map +7 -0
  169. package/dist/features/viz/lib/graph/neighborhood.d.ts +11 -0
  170. package/dist/features/viz/lib/graph/neighborhood.js +281 -0
  171. package/dist/features/viz/lib/graph/neighborhood.js.map +7 -0
  172. package/dist/features/viz/lib/graph/routes.d.ts +35 -0
  173. package/dist/features/viz/lib/graph/routes.js +101 -0
  174. package/dist/features/viz/lib/graph/routes.js.map +7 -0
  175. package/dist/features/viz/lib/graph/sankey.d.ts +44 -0
  176. package/dist/features/viz/lib/graph/sankey.js +341 -0
  177. package/dist/features/viz/lib/graph/sankey.js.map +7 -0
  178. package/dist/features/viz/lib/graph/shared.d.ts +59 -0
  179. package/dist/features/viz/lib/graph/shared.js +301 -0
  180. package/dist/features/viz/lib/graph/shared.js.map +7 -0
  181. package/dist/features/viz/lib/graph/tree.d.ts +11 -0
  182. package/dist/features/viz/lib/graph/tree.js +232 -0
  183. package/dist/features/viz/lib/graph/tree.js.map +7 -0
  184. package/dist/features/viz/lib/graph/treemap.d.ts +20 -0
  185. package/dist/features/viz/lib/graph/treemap.js +227 -0
  186. package/dist/features/viz/lib/graph/treemap.js.map +7 -0
  187. package/dist/features/viz/lib/graph/types.d.ts +1097 -0
  188. package/dist/features/viz/lib/hover-card.js +8 -9
  189. package/dist/features/viz/lib/hover-card.js.map +2 -2
  190. package/dist/features/viz/lib/hover-data.d.ts +1 -1
  191. package/dist/features/viz/lib/hover-data.js +5 -2
  192. package/dist/features/viz/lib/hover-data.js.map +2 -2
  193. package/dist/features/viz/lib/interval-band-series.d.ts +49 -0
  194. package/dist/features/viz/lib/interval-band-series.js +136 -0
  195. package/dist/features/viz/lib/interval-band-series.js.map +7 -0
  196. package/dist/features/viz/lib/interval-diamond-series.d.ts +43 -0
  197. package/dist/features/viz/lib/interval-diamond-series.js +122 -0
  198. package/dist/features/viz/lib/interval-diamond-series.js.map +7 -0
  199. package/dist/features/viz/lib/interval-series.d.ts +79 -0
  200. package/dist/features/viz/lib/interval-series.js +158 -0
  201. package/dist/features/viz/lib/interval-series.js.map +7 -0
  202. package/dist/features/viz/lib/layout-pie.js +9 -13
  203. package/dist/features/viz/lib/layout-pie.js.map +2 -2
  204. package/dist/features/viz/lib/line-series.d.ts +1 -1
  205. package/dist/features/viz/lib/line-series.js +47 -28
  206. package/dist/features/viz/lib/line-series.js.map +2 -2
  207. package/dist/features/viz/lib/linear-scale.js +1 -1
  208. package/dist/features/viz/lib/linear-scale.js.map +2 -2
  209. package/dist/features/viz/lib/monotone-curve.d.ts +11 -0
  210. package/dist/features/viz/lib/monotone-curve.js +63 -0
  211. package/dist/features/viz/lib/monotone-curve.js.map +7 -0
  212. package/dist/features/viz/lib/numeric-range-interpolation.d.ts +15 -0
  213. package/dist/features/viz/lib/numeric-range-interpolation.js +36 -0
  214. package/dist/features/viz/lib/numeric-range-interpolation.js.map +7 -0
  215. package/dist/features/viz/lib/ohlc-bar-series.d.ts +55 -0
  216. package/dist/features/viz/lib/ohlc-bar-series.js +168 -0
  217. package/dist/features/viz/lib/ohlc-bar-series.js.map +7 -0
  218. package/dist/features/viz/lib/paired-series.d.ts +44 -0
  219. package/dist/features/viz/lib/paired-series.js +93 -0
  220. package/dist/features/viz/lib/paired-series.js.map +7 -0
  221. package/dist/features/viz/lib/pie-layout.js +2 -1
  222. package/dist/features/viz/lib/pie-layout.js.map +2 -2
  223. package/dist/features/viz/lib/plot-series.js +11 -6
  224. package/dist/features/viz/lib/plot-series.js.map +2 -2
  225. package/dist/features/viz/lib/plot-types.d.ts +4 -3
  226. package/dist/features/viz/lib/point-series.d.ts +1 -1
  227. package/dist/features/viz/lib/point-series.js +36 -9
  228. package/dist/features/viz/lib/point-series.js.map +2 -2
  229. package/dist/features/viz/lib/point-types.d.ts +5 -2
  230. package/dist/features/viz/lib/reference-band.js +4 -1
  231. package/dist/features/viz/lib/reference-band.js.map +2 -2
  232. package/dist/features/viz/lib/scale-context.d.ts +1 -1
  233. package/dist/features/viz/lib/scale-ticks.js +21 -6
  234. package/dist/features/viz/lib/scale-ticks.js.map +2 -2
  235. package/dist/features/viz/lib/sequential-color-scale.d.ts +11 -0
  236. package/dist/features/viz/lib/sequential-color-scale.js +49 -0
  237. package/dist/features/viz/lib/sequential-color-scale.js.map +7 -0
  238. package/dist/features/viz/lib/series-position.d.ts +12 -0
  239. package/dist/features/viz/lib/series-position.js +44 -0
  240. package/dist/features/viz/lib/series-position.js.map +7 -0
  241. package/dist/features/viz/lib/step-curves.d.ts +19 -0
  242. package/dist/features/viz/lib/step-curves.js +53 -0
  243. package/dist/features/viz/lib/step-curves.js.map +7 -0
  244. package/dist/features/viz/lib/threshold-color-scale.d.ts +43 -0
  245. package/dist/features/viz/lib/threshold-color-scale.js +59 -0
  246. package/dist/features/viz/lib/threshold-color-scale.js.map +7 -0
  247. package/dist/features/viz/lib/trading-time-mapping.d.ts +32 -0
  248. package/dist/features/viz/lib/trading-time-mapping.js +89 -0
  249. package/dist/features/viz/lib/trading-time-mapping.js.map +7 -0
  250. package/dist/features/viz/lib/trading-time-scale.d.ts +83 -0
  251. package/dist/features/viz/lib/trading-time-scale.js +96 -0
  252. package/dist/features/viz/lib/trading-time-scale.js.map +7 -0
  253. package/dist/features/viz/lib/trajectory-series.d.ts +71 -0
  254. package/dist/features/viz/lib/trajectory-series.js +111 -0
  255. package/dist/features/viz/lib/trajectory-series.js.map +7 -0
  256. package/dist/features/viz/lib/types.d.ts +20 -4
  257. package/dist/features/viz/lib/use-continuous-scale.js +6 -1
  258. package/dist/features/viz/lib/use-continuous-scale.js.map +2 -2
  259. package/dist/features/viz/lib/utc-scale.js +11 -10
  260. package/dist/features/viz/lib/utc-scale.js.map +2 -2
  261. package/dist/features/viz/lib/volume-series.d.ts +59 -0
  262. package/dist/features/viz/lib/volume-series.js +117 -0
  263. package/dist/features/viz/lib/volume-series.js.map +7 -0
  264. package/dist/features/viz/lib/weighted-point-series.d.ts +71 -0
  265. package/dist/features/viz/lib/weighted-point-series.js +169 -0
  266. package/dist/features/viz/lib/weighted-point-series.js.map +7 -0
  267. package/dist/filters/backdrop-contrast-gpu.d.ts +5 -0
  268. package/dist/filters/backdrop-contrast-gpu.js +33 -0
  269. package/dist/filters/backdrop-contrast-gpu.js.map +7 -0
  270. package/dist/filters/backdrop-contrast.d.ts +21 -0
  271. package/dist/filters/backdrop-contrast.js +61 -0
  272. package/dist/filters/backdrop-contrast.js.map +7 -0
  273. package/dist/filters/displacement.js +1 -1
  274. package/dist/filters/displacement.js.map +2 -2
  275. package/dist/filters/emboss-gpu.d.ts +4 -0
  276. package/dist/filters/emboss-gpu.js +39 -0
  277. package/dist/filters/emboss-gpu.js.map +7 -0
  278. package/dist/filters/emboss.d.ts +32 -0
  279. package/dist/filters/emboss.js +104 -0
  280. package/dist/filters/emboss.js.map +7 -0
  281. package/dist/filters/filter-executor.d.ts +11 -4
  282. package/dist/filters/filter-executor.js +104 -49
  283. package/dist/filters/filter-executor.js.map +2 -2
  284. package/dist/filters/reflected-light.js +1 -1
  285. package/dist/filters/reflected-light.js.map +2 -2
  286. package/dist/filters/reflection-gpu.d.ts +3 -1
  287. package/dist/filters/reflection-gpu.js +5 -2
  288. package/dist/filters/reflection-gpu.js.map +2 -2
  289. package/dist/filters/render-backdrop-contrast-boundary.d.ts +31 -0
  290. package/dist/filters/render-backdrop-contrast-boundary.js +116 -0
  291. package/dist/filters/render-backdrop-contrast-boundary.js.map +7 -0
  292. package/dist/filters/render-emboss-boundary.d.ts +13 -0
  293. package/dist/filters/render-emboss-boundary.js +131 -0
  294. package/dist/filters/render-emboss-boundary.js.map +7 -0
  295. package/dist/filters.d.ts +9 -5
  296. package/dist/filters.js +4 -0
  297. package/dist/filters.js.map +2 -2
  298. package/dist/index.d.ts +9 -5
  299. package/dist/index.js +18 -2
  300. package/dist/index.js.map +2 -2
  301. package/dist/internal.d.ts +4 -0
  302. package/dist/internal.js +6 -0
  303. package/dist/internal.js.map +2 -2
  304. package/dist/layout-kernel.d.ts +12 -0
  305. package/dist/layout-kernel.js +11 -0
  306. package/dist/layout-kernel.js.map +7 -0
  307. package/dist/layout-kernel.mjs +1 -0
  308. package/dist/lib/backend/types.d.ts +13 -1
  309. package/dist/lib/backend/types.js.map +2 -2
  310. package/dist/lib/components/arc-geometry.js +2 -1
  311. package/dist/lib/components/arc-geometry.js.map +2 -2
  312. package/dist/lib/components/g.js +2 -0
  313. package/dist/lib/components/g.js.map +2 -2
  314. package/dist/lib/components/html-box.js +2 -1
  315. package/dist/lib/components/html-box.js.map +2 -2
  316. package/dist/lib/components/img.js +3 -3
  317. package/dist/lib/components/img.js.map +2 -2
  318. package/dist/lib/components/layer.js +98 -16
  319. package/dist/lib/components/layer.js.map +3 -3
  320. package/dist/lib/components/text.d.ts +16 -0
  321. package/dist/lib/components/text.js +131 -24
  322. package/dist/lib/components/text.js.map +2 -2
  323. package/dist/lib/define-primitive.d.ts +4 -2
  324. package/dist/lib/define-primitive.js +3 -1
  325. package/dist/lib/define-primitive.js.map +2 -2
  326. package/dist/lib/element/metadata.d.ts +9 -0
  327. package/dist/lib/element/metadata.js +19 -0
  328. package/dist/lib/element/metadata.js.map +2 -2
  329. package/dist/lib/element/resolve-primitive-inputs.d.ts +2 -0
  330. package/dist/lib/element/resolve-primitive-inputs.js +17 -4
  331. package/dist/lib/element/resolve-primitive-inputs.js.map +2 -2
  332. package/dist/lib/events/event-facade.d.ts +18 -0
  333. package/dist/lib/events/event-facade.js +28 -2
  334. package/dist/lib/events/event-facade.js.map +2 -2
  335. package/dist/lib/events/hit-test.js +2 -1
  336. package/dist/lib/events/hit-test.js.map +2 -2
  337. package/dist/lib/events/propagation.d.ts +2 -1
  338. package/dist/lib/events/propagation.js +22 -16
  339. package/dist/lib/events/propagation.js.map +2 -2
  340. package/dist/lib/events/registrations.d.ts +10 -0
  341. package/dist/lib/events/registrations.js +160 -5
  342. package/dist/lib/events/registrations.js.map +2 -2
  343. package/dist/lib/execute-render.js +25 -1
  344. package/dist/lib/execute-render.js.map +2 -2
  345. package/dist/lib/filter/filter-region.js +3 -10
  346. package/dist/lib/filter/filter-region.js.map +2 -2
  347. package/dist/lib/focus/focus-manager.d.ts +8 -1
  348. package/dist/lib/focus/focus-manager.js +87 -43
  349. package/dist/lib/focus/focus-manager.js.map +2 -2
  350. package/dist/lib/focus/geometry.d.ts +2 -0
  351. package/dist/lib/focus/geometry.js +6 -0
  352. package/dist/lib/focus/geometry.js.map +2 -2
  353. package/dist/lib/geometry/path-bend-guide.js +1 -1
  354. package/dist/lib/geometry/path-bend-guide.js.map +2 -2
  355. package/dist/lib/geometry/path-geometry.js +12 -11
  356. package/dist/lib/geometry/path-geometry.js.map +2 -2
  357. package/dist/lib/geometry/path-transforms.js +17 -21
  358. package/dist/lib/geometry/path-transforms.js.map +2 -2
  359. package/dist/lib/geometry/path-warp-bezier.js +3 -1
  360. package/dist/lib/geometry/path-warp-bezier.js.map +2 -2
  361. package/dist/lib/geometry/path-warp.js +1 -1
  362. package/dist/lib/geometry/path-warp.js.map +2 -2
  363. package/dist/lib/global-state.js +2 -0
  364. package/dist/lib/global-state.js.map +2 -2
  365. package/dist/lib/html/html-events.d.ts +32 -0
  366. package/dist/lib/html/html-events.js +179 -0
  367. package/dist/lib/html/html-events.js.map +7 -0
  368. package/dist/lib/html/html-service.d.ts +8 -2
  369. package/dist/lib/html/html-service.js +198 -65
  370. package/dist/lib/html/html-service.js.map +2 -2
  371. package/dist/lib/html/overlay-config.js +7 -6
  372. package/dist/lib/html/overlay-config.js.map +2 -2
  373. package/dist/lib/html/types.d.ts +29 -2
  374. package/dist/lib/layout/absolute.d.ts +11 -5
  375. package/dist/lib/layout/absolute.js +329 -55
  376. package/dist/lib/layout/absolute.js.map +3 -3
  377. package/dist/lib/layout/allocation-checkpoint-owner.d.ts +11 -0
  378. package/dist/lib/layout/allocation-checkpoint-owner.js +86 -0
  379. package/dist/lib/layout/allocation-checkpoint-owner.js.map +7 -0
  380. package/dist/lib/layout/allocation-checkpoint.d.ts +53 -0
  381. package/dist/lib/layout/allocation-checkpoint.js +463 -0
  382. package/dist/lib/layout/allocation-checkpoint.js.map +7 -0
  383. package/dist/lib/layout/allocation-dependencies.d.ts +30 -0
  384. package/dist/lib/layout/allocation-dependencies.js +90 -0
  385. package/dist/lib/layout/allocation-dependencies.js.map +7 -0
  386. package/dist/lib/layout/allocation-revision.d.ts +13 -0
  387. package/dist/lib/layout/allocation-revision.js +67 -0
  388. package/dist/lib/layout/allocation-revision.js.map +7 -0
  389. package/dist/lib/layout/box-insets.d.ts +17 -0
  390. package/dist/lib/layout/box-insets.js +138 -0
  391. package/dist/lib/layout/box-insets.js.map +7 -0
  392. package/dist/lib/layout/box-sizing.d.ts +16 -0
  393. package/dist/lib/layout/box-sizing.js +77 -0
  394. package/dist/lib/layout/box-sizing.js.map +7 -0
  395. package/dist/lib/layout/box.js +42 -12
  396. package/dist/lib/layout/box.js.map +2 -2
  397. package/dist/lib/layout/canvas-measurement.d.ts +13 -0
  398. package/dist/lib/layout/canvas-measurement.js +57 -0
  399. package/dist/lib/layout/canvas-measurement.js.map +7 -0
  400. package/dist/lib/layout/context.d.ts +35 -6
  401. package/dist/lib/layout/context.js +72 -3
  402. package/dist/lib/layout/context.js.map +2 -2
  403. package/dist/lib/layout/define-layout-component.d.ts +23 -0
  404. package/dist/lib/layout/define-layout-component.js +84 -0
  405. package/dist/lib/layout/define-layout-component.js.map +7 -0
  406. package/dist/lib/layout/flex-allocation-cache.d.ts +42 -0
  407. package/dist/lib/layout/flex-baseline-mode.d.ts +2 -0
  408. package/dist/lib/layout/flex-baseline-mode.js +7 -0
  409. package/dist/lib/layout/flex-baseline-mode.js.map +7 -0
  410. package/dist/lib/layout/flex.d.ts +50 -15
  411. package/dist/lib/layout/flex.js +2124 -195
  412. package/dist/lib/layout/flex.js.map +3 -3
  413. package/dist/lib/layout/flow.js +225 -49
  414. package/dist/lib/layout/flow.js.map +2 -2
  415. package/dist/lib/layout/geometry-publication.d.ts +53 -0
  416. package/dist/lib/layout/geometry-publication.js +244 -0
  417. package/dist/lib/layout/geometry-publication.js.map +7 -0
  418. package/dist/lib/layout/grid-kernel.d.ts +63 -0
  419. package/dist/lib/layout/grid-kernel.js +168 -0
  420. package/dist/lib/layout/grid-kernel.js.map +7 -0
  421. package/dist/lib/layout/grid.d.ts +63 -4
  422. package/dist/lib/layout/grid.js +767 -171
  423. package/dist/lib/layout/grid.js.map +3 -3
  424. package/dist/lib/layout/measure.d.ts +55 -3
  425. package/dist/lib/layout/measure.js +448 -15
  426. package/dist/lib/layout/measure.js.map +2 -2
  427. package/dist/lib/layout/overlay.js +81 -23
  428. package/dist/lib/layout/overlay.js.map +2 -2
  429. package/dist/lib/layout/participation.d.ts +27 -0
  430. package/dist/lib/layout/participation.js +188 -0
  431. package/dist/lib/layout/participation.js.map +7 -0
  432. package/dist/lib/layout/place-child.js +1 -1
  433. package/dist/lib/layout/place-child.js.map +2 -2
  434. package/dist/lib/layout/positioning-diagnostics.d.ts +1 -1
  435. package/dist/lib/layout/positioning-diagnostics.js +13 -2
  436. package/dist/lib/layout/positioning-diagnostics.js.map +2 -2
  437. package/dist/lib/layout/prepared-root.d.ts +121 -0
  438. package/dist/lib/layout/prepared-root.js +360 -0
  439. package/dist/lib/layout/prepared-root.js.map +7 -0
  440. package/dist/lib/layout/standalone-kernel.d.ts +60 -0
  441. package/dist/lib/layout/standalone-kernel.js +722 -0
  442. package/dist/lib/layout/standalone-kernel.js.map +7 -0
  443. package/dist/lib/layout/topology.d.ts +21 -0
  444. package/dist/lib/layout/topology.js +113 -0
  445. package/dist/lib/layout/topology.js.map +7 -0
  446. package/dist/lib/layout/types.d.ts +5 -0
  447. package/dist/lib/layout/wasm/artifact.d.ts +1 -0
  448. package/dist/lib/layout/wasm/artifact.js +5 -0
  449. package/dist/lib/layout/wasm/artifact.js.map +7 -0
  450. package/dist/lib/layout/wasm/bytes.d.ts +1 -0
  451. package/dist/lib/layout/wasm/bytes.js +5 -0
  452. package/dist/lib/layout/wasm/bytes.js.map +7 -0
  453. package/dist/lib/layout/wasm/embedded.d.ts +2 -0
  454. package/dist/lib/layout/wasm/embedded.js +12 -0
  455. package/dist/lib/layout/wasm/embedded.js.map +7 -0
  456. package/dist/lib/layout/wasm/layout.wasm +0 -0
  457. package/dist/lib/layout/wasm/module.d.ts +8 -0
  458. package/dist/lib/layout/wasm/module.js +70 -0
  459. package/dist/lib/layout/wasm/module.js.map +7 -0
  460. package/dist/lib/layout/wasm/region.d.ts +267 -0
  461. package/dist/lib/layout/wasm/region.js +1018 -0
  462. package/dist/lib/layout/wasm/region.js.map +7 -0
  463. package/dist/lib/manipulation/controller.js +4 -7
  464. package/dist/lib/manipulation/controller.js.map +2 -2
  465. package/dist/lib/manipulation/frame.js +1 -1
  466. package/dist/lib/manipulation/frame.js.map +2 -2
  467. package/dist/lib/manipulation/handles.js +32 -33
  468. package/dist/lib/manipulation/handles.js.map +2 -2
  469. package/dist/lib/manipulation/solve.js +12 -10
  470. package/dist/lib/manipulation/solve.js.map +2 -2
  471. package/dist/lib/mount-pibbl.js +1 -0
  472. package/dist/lib/mount-pibbl.js.map +2 -2
  473. package/dist/lib/mount-prepared-pibbl.d.ts +5 -0
  474. package/dist/lib/mount-prepared-pibbl.js +29 -0
  475. package/dist/lib/mount-prepared-pibbl.js.map +7 -0
  476. package/dist/lib/mount-request.d.ts +8 -0
  477. package/dist/lib/mount-request.js +41 -0
  478. package/dist/lib/mount-request.js.map +7 -0
  479. package/dist/lib/pibbl.d.ts +21 -13
  480. package/dist/lib/pibbl.js +18 -16
  481. package/dist/lib/pibbl.js.map +2 -2
  482. package/dist/lib/recording/recording.d.ts +43 -0
  483. package/dist/lib/recording/recording.js +555 -0
  484. package/dist/lib/recording/recording.js.map +7 -0
  485. package/dist/lib/recording/types.d.ts +118 -0
  486. package/dist/lib/recording/wasm-bytes.d.ts +1 -0
  487. package/dist/lib/recording/wasm-bytes.js +5 -0
  488. package/dist/lib/recording/wasm-bytes.js.map +7 -0
  489. package/dist/lib/recording/worker-source.d.ts +1 -0
  490. package/dist/lib/recording/worker-source.js +5 -0
  491. package/dist/lib/recording/worker-source.js.map +7 -0
  492. package/dist/lib/render-layer/controller.d.ts +9 -3
  493. package/dist/lib/render-layer/controller.js +259 -110
  494. package/dist/lib/render-layer/controller.js.map +2 -2
  495. package/dist/lib/render-transaction.d.ts +12 -2
  496. package/dist/lib/render-transaction.js +69 -1
  497. package/dist/lib/render-transaction.js.map +2 -2
  498. package/dist/lib/render.js +32 -8
  499. package/dist/lib/render.js.map +2 -2
  500. package/dist/lib/scheduler/realm-scheduler.d.ts +2 -0
  501. package/dist/lib/scheduler/realm-scheduler.js +55 -26
  502. package/dist/lib/scheduler/realm-scheduler.js.map +2 -2
  503. package/dist/lib/scheduler/renderer-participant.js +1 -0
  504. package/dist/lib/scheduler/renderer-participant.js.map +2 -2
  505. package/dist/lib/series-inspection-frame.d.ts +18 -0
  506. package/dist/lib/series-inspection-frame.js +70 -0
  507. package/dist/lib/series-inspection-frame.js.map +7 -0
  508. package/dist/lib/signals/edge.d.ts +7 -4
  509. package/dist/lib/signals/edge.js +25 -3
  510. package/dist/lib/signals/edge.js.map +2 -2
  511. package/dist/lib/signals/graph.d.ts +16 -2
  512. package/dist/lib/signals/graph.js +54 -12
  513. package/dist/lib/signals/graph.js.map +2 -2
  514. package/dist/lib/signals/input-provision.d.ts +15 -0
  515. package/dist/lib/signals/input-provision.js +53 -3
  516. package/dist/lib/signals/input-provision.js.map +2 -2
  517. package/dist/lib/signals/render-consumer.d.ts +3 -0
  518. package/dist/lib/signals/render-consumer.js +22 -14
  519. package/dist/lib/signals/render-consumer.js.map +2 -2
  520. package/dist/lib/style/positioning.d.ts +50 -2
  521. package/dist/lib/style/positioning.js +28 -4
  522. package/dist/lib/style/positioning.js.map +2 -2
  523. package/dist/lib/style/resolve-built-in.d.ts +4 -3
  524. package/dist/lib/style/resolve-built-in.js +17 -3
  525. package/dist/lib/style/resolve-built-in.js.map +2 -2
  526. package/dist/lib/style/resolve-dispatch.d.ts +3 -0
  527. package/dist/lib/style/resolve-dispatch.js +77 -4
  528. package/dist/lib/style/resolve-dispatch.js.map +2 -2
  529. package/dist/lib/style/resolve-length.d.ts +2 -0
  530. package/dist/lib/style/resolve-length.js +13 -9
  531. package/dist/lib/style/resolve-length.js.map +2 -2
  532. package/dist/lib/style/sizing-length.d.ts +51 -0
  533. package/dist/lib/style/sizing-length.js +77 -0
  534. package/dist/lib/style/sizing-length.js.map +7 -0
  535. package/dist/lib/style/types.d.ts +63 -25
  536. package/dist/lib/surface/root-surface.js +10 -6
  537. package/dist/lib/surface/root-surface.js.map +2 -2
  538. package/dist/lib/textures/texture.js +10 -8
  539. package/dist/lib/textures/texture.js.map +2 -2
  540. package/dist/lib/transitions/capture.js +4 -1
  541. package/dist/lib/transitions/capture.js.map +2 -2
  542. package/dist/lib/transitions/embers-physics.js +17 -10
  543. package/dist/lib/transitions/embers-physics.js.map +2 -2
  544. package/dist/lib/types.d.ts +110 -1
  545. package/dist/sync.d.ts +16 -0
  546. package/dist/sync.js +13 -0
  547. package/dist/sync.js.map +7 -0
  548. package/dist/sync.mjs +1 -0
  549. package/package.json +26 -3
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/lib/signals/render-consumer.ts"],
4
- "sourcesContent": ["import {\n recordRendererConsumerCreated,\n recordRendererConsumerReleased,\n recordRendererEdgeCreated,\n recordRendererEdgeReleased,\n recordRendererEdgeReused,\n recordLazyRendererConsumerCreated,\n type SignalDependencyCollector,\n type SignalNode,\n withSignalTracking,\n} from './graph.js';\nimport {\n beginReactiveCollection,\n collectReactiveDependency,\n disposeReactiveConsumer,\n finishReactiveCollection,\n linkReactiveEdgeToSource,\n rollbackReactiveCollection,\n unlinkReactiveEdgeFromSource,\n type ReactiveEdge,\n type SignalDependencyConsumer,\n} from './edge.js';\n\nexport interface SignalRenderConsumer {\n readonly debugName: string;\n readonly releaseCount: number;\n markClean(): void;\n}\n\nexport interface SignalRenderConsumerOptions {\n debugName: string;\n invalidate(): void;\n}\n\nexport interface ComponentSignalRenderOwner {\n signalConsumer: SignalRenderConsumer | undefined;\n}\n\nexport interface ComponentSignalReadOptions extends SignalRenderConsumerOptions {\n onMaterialize(): void;\n}\n\ninterface ConsumerState extends SignalDependencyConsumer {\n collecting: boolean;\n dirty: boolean;\n disposed: boolean;\n releaseCount: number;\n}\n\nconst consumerStates = new WeakMap<SignalRenderConsumer, ConsumerState>();\n\n/** @internal Opaque identity for repository-local passive ownership correlation. */\nexport function signalRenderConsumerIdentity(consumer: SignalRenderConsumer): object | undefined {\n return consumerStates.get(consumer);\n}\n\nexport function createSignalRenderConsumer(\n options: SignalRenderConsumerOptions,\n): SignalRenderConsumer {\n const state: ConsumerState = {\n dependencyHead: undefined,\n dependencyTail: undefined,\n dependencyFreeHead: undefined,\n dependencyFreeCount: 0,\n dependencyCount: 0,\n dependencyHighWater: 0,\n collectionCursor: undefined,\n collectionGeneration: 0,\n collecting: false,\n dirty: true,\n disposed: false,\n releaseCount: 0,\n renderInvalidation: true,\n addDependency(node): void {\n if (!state.collecting) return;\n const cursor = state.collectionCursor;\n if (\n cursor?.source === node &&\n cursor.collectionGeneration !== state.collectionGeneration\n ) {\n cursor.collectionGeneration = state.collectionGeneration;\n cursor.collectionKind = 'reused';\n state.collectionCursor = cursor.consumerNext;\n return;\n }\n collectReactiveDependency(state, node);\n },\n notify(): void {\n if (state.disposed || state.dirty) return;\n state.dirty = true;\n options.invalidate();\n },\n };\n\n const consumer: SignalRenderConsumer = {\n debugName: options.debugName,\n get releaseCount(): number {\n return state.releaseCount;\n },\n markClean(): void {\n if (!state.disposed) state.dirty = false;\n },\n };\n\n consumerStates.set(consumer, state);\n recordRendererConsumerCreated();\n return consumer;\n}\n\nexport function collectSignalReads<T>(\n consumer: SignalRenderConsumer,\n callback: (commit: () => void) => T,\n): T {\n const state = getConsumerState(consumer);\n if (state.disposed) {\n return withSignalTracking(\n { addDependency: () => {} },\n () => callback(() => {}),\n );\n }\n\n beginReactiveCollection(state);\n state.collecting = true;\n let committed = false;\n const commit = (): void => {\n if (committed) return;\n committed = true;\n state.collecting = false;\n if (!state.disposed) commitCollectedDependencies(state);\n else rollbackReactiveCollection(state);\n };\n try {\n const result = withSignalTracking(state, () => callback(commit));\n commit();\n return result;\n } catch (error) {\n if (!committed) rollbackReactiveCollection(state);\n throw error;\n } finally {\n state.collecting = false;\n }\n}\n\nexport function collectComponentSignalReads<T>(\n owner: ComponentSignalRenderOwner,\n createOptions: () => ComponentSignalReadOptions,\n callback: (commit: () => void) => T,\n): T {\n let consumer = owner.signalConsumer;\n let state = consumer === undefined ? undefined : getConsumerState(consumer);\n let provisional = false;\n let committed = false;\n let onMaterialize: (() => void) | undefined;\n\n let collector: SignalDependencyCollector;\n if (state === undefined) {\n collector = {\n addDependency(node: SignalNode<unknown>): void {\n if (committed) return;\n if (state === undefined) {\n const options = createOptions();\n onMaterialize = options.onMaterialize;\n consumer = createSignalRenderConsumer(options);\n state = getConsumerState(consumer);\n provisional = true;\n recordLazyRendererConsumerCreated();\n beginConsumerCollection(state);\n }\n state.addDependency(node);\n },\n };\n } else {\n beginConsumerCollection(state);\n collector = state;\n }\n const commit = (): void => {\n if (committed) return;\n committed = true;\n if (state === undefined || consumer === undefined) return;\n state.collecting = false;\n commitCollectedDependencies(state);\n if (state.dependencyCount === 0) {\n if (owner.signalConsumer === consumer) owner.signalConsumer = undefined;\n disposeSignalRenderConsumer(consumer);\n } else if (provisional) {\n owner.signalConsumer = consumer;\n onMaterialize!();\n }\n };\n\n try {\n const result = withSignalTracking(collector, () => callback(commit));\n commit();\n return result;\n } catch (error) {\n if (!committed && state !== undefined) {\n rollbackReactiveCollection(state);\n if (provisional && consumer !== undefined) {\n disposeSignalRenderConsumer(consumer);\n }\n }\n throw error;\n } finally {\n if (state !== undefined) state.collecting = false;\n }\n}\n\nexport function disposeSignalRenderConsumer(consumer: SignalRenderConsumer): void {\n const state = getConsumerState(consumer);\n if (state.disposed) return;\n state.disposed = true;\n state.collectionGeneration++;\n state.collecting = false;\n disposeReactiveConsumer(state, releaseRendererEdge);\n state.releaseCount++;\n recordRendererConsumerReleased();\n}\n\nfunction getConsumerState(consumer: SignalRenderConsumer): ConsumerState {\n const state = consumerStates.get(consumer);\n if (state === undefined) {\n throw new TypeError('Expected a signal render consumer created by Pibbl.');\n }\n return state;\n}\n\nfunction beginConsumerCollection(state: ConsumerState): void {\n beginReactiveCollection(state);\n state.collecting = true;\n}\n\nfunction commitCollectedDependencies(state: ConsumerState): void {\n const onlyEdge = state.dependencyHead;\n if (\n onlyEdge !== undefined &&\n onlyEdge.consumerNext === undefined &&\n onlyEdge.collectionGeneration === state.collectionGeneration &&\n onlyEdge.sourceLinked &&\n onlyEdge.collectionKind === 'reused'\n ) {\n recordRendererEdgeReused();\n onlyEdge.observedVersion = onlyEdge.source!.version;\n onlyEdge.collectionKind = undefined;\n state.collectionCursor = undefined;\n return;\n }\n finishReactiveCollection(\n state,\n edge => {\n const restored = !edge.sourceLinked;\n if (restored) {\n const source = edge.source!;\n linkReactiveEdgeToSource(edge, source.observe?.());\n }\n if (edge.collectionKind === 'new') {\n recordRendererEdgeCreated();\n } else {\n recordRendererEdgeReused(restored);\n }\n edge.everPublished = true;\n edge.observedVersion = edge.source!.version;\n edge.collectionKind = undefined;\n },\n releaseRendererEdge,\n );\n}\n\nfunction releaseRendererEdge(edge: ReactiveEdge): void {\n if (!edge.sourceLinked) return;\n unlinkReactiveEdgeFromSource(edge);\n recordRendererEdgeReleased();\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { invalidateAllocationReceiver, releaseAllocationReceiver } from '../layout/allocation-dependencies.js';\nimport type { PibblInstance } from '../types.js';\nimport { invalidateReceiverAllocationInputs } from '../layout/allocation-revision.js';\nimport {\n recordRendererConsumerCreated,\n recordRendererConsumerReleased,\n recordRendererEdgeCreated,\n recordRendererEdgeReleased,\n recordRendererEdgeReused,\n recordSignalInputInvalidation,\n recordLazyRendererConsumerCreated,\n type SignalDependencyCollector,\n type SignalDependencyRoleInput,\n type SignalNode,\n withSignalTracking,\n} from './graph.js';\nimport {\n beginReactiveCollection,\n collectReactiveDependency,\n disposeReactiveConsumer,\n finishReactiveCollection,\n linkReactiveEdgeToSource,\n rollbackReactiveCollection,\n unlinkReactiveEdgeFromSource,\n type ReactiveEdge,\n type SignalDependencyConsumer,\n} from './edge.js';\n\nconst allocationDependencyRoles = 1 | 2 | 4 | 64; // structure, layout, measurement, unknown\n\nexport interface SignalRenderConsumer {\n readonly debugName: string;\n readonly releaseCount: number;\n markClean(): void;\n}\n\nexport interface SignalRenderConsumerOptions {\n layoutOwner?: PibblInstance;\n allocationReceiver?: object;\n debugName: string;\n invalidate(): void;\n}\n\nexport interface ComponentSignalRenderOwner {\n signalConsumer: SignalRenderConsumer | undefined;\n}\n\nexport interface ComponentSignalReadOptions extends SignalRenderConsumerOptions {\n onMaterialize(): void;\n}\n\ninterface ConsumerState extends SignalDependencyConsumer {\n readonly allocationReceiver: object | undefined;\n collecting: boolean;\n dirty: boolean;\n disposed: boolean;\n releaseCount: number;\n}\n\nconst consumerStates = new WeakMap<SignalRenderConsumer, ConsumerState>();\n\n/** @internal Opaque identity for repository-local passive ownership correlation. */\nexport function signalRenderConsumerIdentity(consumer: SignalRenderConsumer): object | undefined {\n return consumerStates.get(consumer);\n}\n\nexport function createSignalRenderConsumer(\n options: SignalRenderConsumerOptions,\n): SignalRenderConsumer {\n const state: ConsumerState = {\n allocationReceiver: options.allocationReceiver,\n dependencyHead: undefined,\n dependencyTail: undefined,\n dependencyFreeHead: undefined,\n dependencyFreeCount: 0,\n dependencyCount: 0,\n dependencyHighWater: 0,\n collectionCursor: undefined,\n collectionGeneration: 0,\n collecting: false,\n dirty: true,\n disposed: false,\n releaseCount: 0,\n renderInvalidation: true,\n addDependency(node, role?: SignalDependencyRoleInput): void {\n if (!state.collecting) return;\n collectReactiveDependency(state, node, role);\n },\n notify(_node, dependencyRoles = 64): void {\n if (state.disposed) return;\n recordSignalInputInvalidation(dependencyRoles);\n if (options.allocationReceiver) invalidateAllocationReceiver(options.allocationReceiver, dependencyRoles);\n // Paint, transforms, and interaction retain allocation geometry. Mixed\n // dependencies still invalidate when any structural/metric role is present.\n if ((dependencyRoles & allocationDependencyRoles) !== 0) {\n // Only layout/measurement roles can be checked by a frozen descriptor\n // fingerprint. Structure and unknown values can replace that descriptor.\n invalidateReceiverAllocationInputs(options.layoutOwner, (dependencyRoles & (1 | 64)) !== 0 ? 'structural' : 'metric');\n }\n if (state.dirty) return;\n state.dirty = true;\n options.invalidate();\n },\n };\n\n const consumer: SignalRenderConsumer = {\n debugName: options.debugName,\n get releaseCount(): number {\n return state.releaseCount;\n },\n markClean(): void {\n if (!state.disposed) {\n state.dirty = false;\n }\n },\n };\n\n consumerStates.set(consumer, state);\n recordRendererConsumerCreated();\n return consumer;\n}\n\nexport function collectSignalReads<T>(\n consumer: SignalRenderConsumer,\n callback: (commit: () => void) => T,\n): T {\n const state = getConsumerState(consumer);\n if (state.disposed) {\n return withSignalTracking(\n { addDependency: () => {} },\n () => callback(() => {}),\n );\n }\n\n beginReactiveCollection(state);\n state.collecting = true;\n let committed = false;\n const commit = (): void => {\n if (committed) return;\n committed = true;\n state.collecting = false;\n if (!state.disposed) commitCollectedDependencies(state);\n else rollbackReactiveCollection(state);\n };\n try {\n const result = withSignalTracking(state, () => callback(commit));\n commit();\n return result;\n } catch (error) {\n if (!committed) rollbackReactiveCollection(state);\n throw error;\n } finally {\n state.collecting = false;\n }\n}\n\nexport function collectComponentSignalReads<T>(\n owner: ComponentSignalRenderOwner,\n createOptions: () => ComponentSignalReadOptions,\n callback: (commit: () => void) => T,\n): T {\n let consumer = owner.signalConsumer;\n let state = consumer === undefined ? undefined : getConsumerState(consumer);\n let provisional = false;\n let committed = false;\n let onMaterialize: (() => void) | undefined;\n\n let collector: SignalDependencyCollector;\n if (state === undefined) {\n collector = {\n addDependency(node: SignalNode<unknown>, role?: SignalDependencyRoleInput): void {\n if (committed) return;\n if (state === undefined) {\n const options = createOptions();\n onMaterialize = options.onMaterialize;\n consumer = createSignalRenderConsumer(options);\n state = getConsumerState(consumer);\n provisional = true;\n recordLazyRendererConsumerCreated();\n beginConsumerCollection(state);\n }\n state.addDependency(node, role);\n },\n };\n } else {\n beginConsumerCollection(state);\n collector = state;\n }\n const commit = (): void => {\n if (committed) return;\n committed = true;\n if (state === undefined || consumer === undefined) return;\n state.collecting = false;\n commitCollectedDependencies(state);\n if (state.dependencyCount === 0) {\n if (owner.signalConsumer === consumer) owner.signalConsumer = undefined;\n disposeSignalRenderConsumer(consumer);\n } else if (provisional) {\n owner.signalConsumer = consumer;\n onMaterialize!();\n }\n };\n\n try {\n const result = withSignalTracking(collector, () => callback(commit));\n commit();\n return result;\n } catch (error) {\n if (!committed && state !== undefined) {\n rollbackReactiveCollection(state);\n if (provisional && consumer !== undefined) {\n disposeSignalRenderConsumer(consumer);\n }\n }\n throw error;\n } finally {\n if (state !== undefined) state.collecting = false;\n }\n}\n\nexport function disposeSignalRenderConsumer(consumer: SignalRenderConsumer): void {\n const state = getConsumerState(consumer);\n if (state.disposed) return;\n state.disposed = true;\n if (state.allocationReceiver) releaseAllocationReceiver(state.allocationReceiver);\n state.collectionGeneration++;\n state.collecting = false;\n disposeReactiveConsumer(state, releaseRendererEdge);\n state.releaseCount++;\n recordRendererConsumerReleased();\n}\n\nfunction getConsumerState(consumer: SignalRenderConsumer): ConsumerState {\n const state = consumerStates.get(consumer);\n if (state === undefined) {\n throw new TypeError('Expected a signal render consumer created by Pibbl.');\n }\n return state;\n}\n\nfunction beginConsumerCollection(state: ConsumerState): void {\n beginReactiveCollection(state);\n state.collecting = true;\n}\n\nfunction commitCollectedDependencies(state: ConsumerState): void {\n const onlyEdge = state.dependencyHead;\n if (\n onlyEdge !== undefined &&\n onlyEdge.consumerNext === undefined &&\n onlyEdge.collectionGeneration === state.collectionGeneration &&\n onlyEdge.sourceLinked &&\n onlyEdge.collectionKind === 'reused'\n ) {\n onlyEdge.dependencyRoles = onlyEdge.collectedDependencyRoles;\n recordRendererEdgeReused();\n onlyEdge.observedVersion = onlyEdge.source!.version;\n onlyEdge.collectionKind = undefined;\n state.collectionCursor = undefined;\n return;\n }\n finishReactiveCollection(\n state,\n edge => {\n const restored = !edge.sourceLinked;\n if (restored) {\n const source = edge.source!;\n linkReactiveEdgeToSource(edge, source.observe?.());\n }\n if (edge.collectionKind === 'new') {\n recordRendererEdgeCreated();\n } else {\n recordRendererEdgeReused(restored);\n }\n edge.everPublished = true;\n edge.observedVersion = edge.source!.version;\n edge.collectionKind = undefined;\n },\n releaseRendererEdge,\n );\n}\n\nfunction releaseRendererEdge(edge: ReactiveEdge): void {\n if (!edge.sourceLinked) return;\n unlinkReactiveEdgeFromSource(edge);\n recordRendererEdgeReleased();\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,6 +1,10 @@
1
1
  import type { StyleResolutionContext, SystemStyle } from '../types.js';
2
2
  import type { PibblElement } from '../element/types.js';
3
3
  import type { Length } from './types.js';
4
+ /** @internal Marks only a fresh placement-owned style; authored style objects are never changed. */
5
+ export declare function markDerivedAbsoluteAxes(style: SystemStyle, width: boolean, height: boolean): void;
6
+ /** @internal Substitutes settled axes only across an exact forwarded placement handoff. */
7
+ export declare function resolveForwardedDerivedAbsoluteAxes(style: Readonly<SystemStyle>, source: Readonly<SystemStyle> | undefined): Readonly<SystemStyle>;
4
8
  /** @internal Marks a placed function component's object style for forwarding. */
5
9
  export declare function withPlacementHandoff<P>(props: P, consumedStyle: Readonly<SystemStyle> | undefined): P;
6
10
  /** @internal Activates signal identity capture while one plain component runs. */
@@ -20,10 +24,54 @@ export declare function getPlacementSignalHandoff(element: PibblElement<any>): R
20
24
  * @see {@link SystemStyle}
21
25
  */
22
26
  export interface PositioningStyle extends SystemStyle {
23
- /** Left edge coordinate or inset. See {@link Length}. */
27
+ /**
28
+ * Experimental direct-Flex placement mode. In a finite Flex, static
29
+ * keeps the allocated slot and ignores insets; relative offsets final geometry
30
+ * once without moving siblings. Primitive static/relative leaves support every
31
+ * main/writing direction and wrapping mode. Wrapped parents admit fixed numeric
32
+ * direct Flex owners that remain internally nowrap; non-row chains use the same
33
+ * fixed owner restriction, with zero grow/shrink and
34
+ * omitted or automatic basis; physical offsets retain their sign through main reversal. Absolute stays out of sibling allocation, using
35
+ * the padding box for explicit insets and content alignment for omitted axes.
36
+ * Fixed numeric, percentage and admitted automatic absolute profiles support all main directions
37
+ * and RTL, with numeric or percentage bounds applied before placement. In every wrapping mode,
38
+ * omitted axes use whole-content main/cross alignment; wrap-reverse reverses
39
+ * omitted cross alignment and combines with column RTL exactly once.
40
+ * Paired natural providers keep their exact/unbounded query in every admitted direction.
41
+ * Direct wrapped Text with a generic pixel font and visible fit/overflow may
42
+ * measure automatic height at a resolved numeric or percentage width through the same owned query.
43
+ * Unwrapped Text may measure automatic width at a resolved numeric or percentage height, using
44
+ * its existing Canvas ink-bounds width before bounds and physical anchoring.
45
+ * Generic unwrapped Text also supports natural ink height and both automatic
46
+ * dimensions through one unbounded query before independent numeric clamps;
47
+ * mixed opposing-pair/natural feedback and both-auto aspect remain excluded.
48
+ * On the documented finite direct-child path, automatic absolute axes resolve
49
+ * from opposing numeric or percentage physical insets. With a positive finite aspectRatio,
50
+ * exactly one automatic axis can instead derive from its resolved declared finite numeric or percentage opposite axis.
51
+ * Opposing insets win. Finite numeric or percentage min/max bounds clamp used axes
52
+ * independently after derivation; a clamp does not recouple aspectRatio, and a
53
+ * numeric minimum above its maximum rejects. A direct custom primitive with
54
+ * paired pure measurement providers may instead measure natural automatic
55
+ * width at a declared numeric or percentage height, or natural height at a declared numeric
56
+ * or percentage width. The automatic axis is unbounded; the exact axis uses its declared
57
+ * resolved padding-box value before bounds clamp the used dimensions.
58
+ * In direct declarative Flex chains,
59
+ * static Flex passes the containing box outward while relative Flex owns a local box.
60
+ * Omission retains the legacy local Flex boundary and left/top behavior.
61
+ */
62
+ position?: 'static' | 'relative' | 'absolute';
63
+ /** Left edge coordinate or inset. Explicit absolute Flex insets accept finite numbers or percentages of the containing padding-box axis; relative percentages use the parent content-box axis. See {@link Length}. */
24
64
  left?: Exclude<Length, 'auto'>;
25
- /** Top edge value or top envelope guide. See {@link Length}. */
65
+ /** Right edge inset. Absolute Flex accepts finite numbers or percentages of the containing padding-box width; relative percentages use the parent content-box width. See {@link Length}. */
66
+ right?: Exclude<Length, 'auto'>;
67
+ /** Top edge coordinate or inset. Explicit absolute Flex insets accept finite numbers or percentages of the containing padding-box axis; relative percentages use the parent content-box axis. See {@link Length}. */
26
68
  top?: Exclude<Length, 'auto'>;
69
+ /** Bottom edge inset. Absolute Flex accepts finite numbers or percentages of the containing padding-box height; relative percentages use the parent content-box height. See {@link Length}. */
70
+ bottom?: Exclude<Length, 'auto'>;
71
+ /** Experimental direct absolute Flex inline-start inset, mapped through the receiving Flex direction. Overrides the corresponding physical edge, including zero. Percentages use the selected containing padding-box width. See {@link Length}. */
72
+ insetStart?: Exclude<Length, 'auto'>;
73
+ /** Experimental direct absolute Flex inline-end inset, mapped through the receiving Flex direction. Overrides the corresponding physical edge. See {@link Length}. */
74
+ insetEnd?: Exclude<Length, 'auto'>;
27
75
  }
28
76
  export interface ResolvedPosition {
29
77
  left: number;
@@ -5,16 +5,36 @@ import {
5
5
  import { isSignal } from "../signals/graph.js";
6
6
  import { resolveLocalOffset } from "./resolve-built-in.js";
7
7
  const PLACEMENT_HANDOFF = /* @__PURE__ */ Symbol("pibbl.placement-handoff");
8
+ const PLACEMENT_DERIVED_ABSOLUTE_AXES = /* @__PURE__ */ Symbol("pibbl.placement-derived-absolute-axes");
8
9
  let activeSignalHandoff;
9
10
  function hasPositioning(style) {
10
- if (Object.hasOwn(style, "left") || Object.hasOwn(style, "top")) return true;
11
+ if (Object.hasOwn(style, "position") || Object.hasOwn(style, "left") || Object.hasOwn(style, "right") || Object.hasOwn(style, "top") || Object.hasOwn(style, "bottom") || Object.hasOwn(style, "insetStart") || Object.hasOwn(style, "insetEnd")) return true;
11
12
  const when = style.when;
12
13
  return Array.isArray(when) && when.some((rule) => {
13
14
  if (!rule || typeof rule !== "object") return false;
14
15
  const patch = rule.style;
15
- return !!patch && typeof patch === "object" && (Object.hasOwn(patch, "left") || Object.hasOwn(patch, "top"));
16
+ return !!patch && typeof patch === "object" && (Object.hasOwn(patch, "position") || Object.hasOwn(patch, "left") || Object.hasOwn(patch, "right") || Object.hasOwn(patch, "top") || Object.hasOwn(patch, "bottom") || Object.hasOwn(patch, "insetStart") || Object.hasOwn(patch, "insetEnd"));
16
17
  });
17
18
  }
19
+ function markDerivedAbsoluteAxes(style, width, height) {
20
+ style[PLACEMENT_DERIVED_ABSOLUTE_AXES] = (width ? 1 : 0) | (height ? 2 : 0);
21
+ }
22
+ function resolveForwardedDerivedAbsoluteAxes(style, source) {
23
+ if (source === void 0) return style;
24
+ const axes = source[PLACEMENT_DERIVED_ABSOLUTE_AXES];
25
+ if (!axes || !samePositioning(style, source)) return style;
26
+ const raw = style;
27
+ const settled = source;
28
+ const width = (axes & 1) !== 0 && (raw.width === void 0 || raw.width === "auto") && typeof settled.width === "number" ? settled.width : raw.width;
29
+ const height = (axes & 2) !== 0 && (raw.height === void 0 || raw.height === "auto") && typeof settled.height === "number" ? settled.height : raw.height;
30
+ if (Object.is(width, raw.width) && Object.is(height, raw.height)) return style;
31
+ return Object.freeze({ ...raw, width, height });
32
+ }
33
+ function samePositioning(style, source) {
34
+ const left = style;
35
+ const right = source;
36
+ return Object.is(left.position, right.position) && Object.is(left.left, right.left) && Object.is(left.right, right.right) && Object.is(left.top, right.top) && Object.is(left.bottom, right.bottom) && Object.is(left.insetStart, right.insetStart) && Object.is(left.insetEnd, right.insetEnd);
37
+ }
18
38
  function withPlacementHandoff(props, consumedStyle) {
19
39
  if (!props || typeof props !== "object") return props;
20
40
  const candidate = props;
@@ -55,9 +75,11 @@ function getPlacementHandoffSource(style) {
55
75
  return marker.source;
56
76
  }
57
77
  function consumePlacementHandoff(style) {
58
- if (getPlacementHandoffSource(style) === void 0) return style;
59
- const withoutHandoff = { ...style };
78
+ const record = style;
79
+ if (record[PLACEMENT_HANDOFF] === void 0 && record[PLACEMENT_DERIVED_ABSOLUTE_AXES] === void 0) return style;
80
+ const withoutHandoff = { ...record };
60
81
  delete withoutHandoff[PLACEMENT_HANDOFF];
82
+ delete withoutHandoff[PLACEMENT_DERIVED_ABSOLUTE_AXES];
61
83
  return Object.freeze(withoutHandoff);
62
84
  }
63
85
  function getPlacementSignalHandoff(element) {
@@ -75,6 +97,8 @@ export {
75
97
  enterPlacementHandoffCapture,
76
98
  getPlacementHandoffSource,
77
99
  getPlacementSignalHandoff,
100
+ markDerivedAbsoluteAxes,
101
+ resolveForwardedDerivedAbsoluteAxes,
78
102
  resolveStandalonePosition,
79
103
  withPlacementHandoff
80
104
  };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/lib/style/positioning.ts"],
4
- "sourcesContent": ["import type { StyleResolutionContext, SystemStyle } from '../types.js';\nimport {\n getPlacementSignalHandoffStyle,\n setPlacementSignalHandoff,\n} from '../element/metadata.js';\nimport type { PibblElement } from '../element/types.js';\nimport { isSignal } from '../signals/graph.js';\nimport { resolveLocalOffset } from './resolve-built-in.js';\nimport type { Length } from './types.js';\n\nconst PLACEMENT_HANDOFF = Symbol('pibbl.placement-handoff');\n\ntype PropsWithStyle = Record<PropertyKey, unknown> & {\n readonly style?: unknown;\n};\n\ntype PlacementHandoff = Readonly<{\n source: Readonly<SystemStyle>;\n}>;\n\nlet activeSignalHandoff: {\n readonly signal: object;\n readonly consumedStyle: Readonly<SystemStyle>;\n} | undefined;\n\nfunction hasPositioning(style: Readonly<Record<PropertyKey, unknown>>): boolean {\n if (Object.hasOwn(style, 'left') || Object.hasOwn(style, 'top')) return true;\n const when = style.when;\n return Array.isArray(when) && when.some((rule) => {\n if (!rule || typeof rule !== 'object') return false;\n const patch = (rule as { style?: unknown }).style;\n return !!patch && typeof patch === 'object' &&\n (Object.hasOwn(patch, 'left') || Object.hasOwn(patch, 'top'));\n });\n}\n\n/** @internal Marks a placed function component's object style for forwarding. */\nexport function withPlacementHandoff<P>(\n props: P,\n consumedStyle: Readonly<SystemStyle> | undefined,\n): P {\n if (!props || typeof props !== 'object') return props;\n const candidate = props as PropsWithStyle;\n const style = candidate.style;\n if (\n !style ||\n typeof style !== 'object' ||\n isSignal(style) ||\n (style as Record<PropertyKey, unknown>)[PLACEMENT_HANDOFF] !== undefined ||\n !hasPositioning(style as Readonly<Record<PropertyKey, unknown>>)\n ) {\n return props;\n }\n return {\n ...candidate,\n style: Object.freeze({\n ...(style as Record<PropertyKey, unknown>),\n [PLACEMENT_HANDOFF]: Object.freeze({\n source: consumedStyle ?? style as Readonly<SystemStyle>,\n }),\n }),\n } as P;\n}\n\n/** @internal Activates signal identity capture while one plain component runs. */\nexport function enterPlacementHandoffCapture(\n props: unknown,\n consumedStyle: Readonly<SystemStyle> | undefined,\n): () => void {\n const style = props && typeof props === 'object' ?\n (props as PropsWithStyle).style : undefined;\n const previous = activeSignalHandoff;\n activeSignalHandoff = style && isSignal(style) && consumedStyle !== undefined ? {\n signal: style,\n consumedStyle,\n } : undefined;\n return () => {\n activeSignalHandoff = previous;\n };\n}\n\n/** @internal Annotates an element created with the active forwarded style signal. */\nexport function capturePlacementHandoff(\n element: PibblElement<any>,\n style: unknown,\n): void {\n if (style && style === activeSignalHandoff?.signal) {\n setPlacementSignalHandoff(element, activeSignalHandoff.consumedStyle);\n }\n}\n\n/** @internal Reads the original style behind an enumerable forwarding marker. */\nexport function getPlacementHandoffSource(\n style: unknown,\n): Readonly<SystemStyle> | undefined {\n if (!style || typeof style !== 'object') return undefined;\n const marker = (style as Record<PropertyKey, unknown>)[PLACEMENT_HANDOFF];\n if (!marker || typeof marker !== 'object') return undefined;\n return (marker as PlacementHandoff).source;\n}\n\n/** @internal Removes a private handoff marker before style callbacks run. */\nexport function consumePlacementHandoff(\n style: Readonly<SystemStyle>,\n): Readonly<SystemStyle> {\n if (getPlacementHandoffSource(style) === undefined) return style;\n const withoutHandoff = { ...(style as Record<PropertyKey, unknown>) };\n delete withoutHandoff[PLACEMENT_HANDOFF];\n return Object.freeze(withoutHandoff) as Readonly<SystemStyle>;\n}\n\n/** @internal Determines whether a primitive consumes one forwarded signal style. */\nexport function getPlacementSignalHandoff(\n element: PibblElement<any>,\n): Readonly<SystemStyle> | undefined {\n return getPlacementSignalHandoffStyle(element);\n}\n\n/**\n * Offsets in the parent layout coordinate system; percentages resolve against the containing box.\n *\n * @see {@link Length}\n * @see {@link SystemStyle}\n */\nexport interface PositioningStyle extends SystemStyle {\n /** Left edge coordinate or inset. See {@link Length}. */\n left?: Exclude<Length, 'auto'>;\n /** Top edge value or top envelope guide. See {@link Length}. */\n top?: Exclude<Length, 'auto'>;\n}\n\nexport interface ResolvedPosition {\n left: number;\n top: number;\n}\n\nexport function resolveStandalonePosition(\n style: Readonly<PositioningStyle>,\n context: Readonly<StyleResolutionContext>,\n): ResolvedPosition {\n return {\n left: resolveLocalOffset(style.left, context.percentageBasis.width, 'left', context),\n top: resolveLocalOffset(style.top, context.percentageBasis.height, 'top', context),\n };\n}\n"],
5
- "mappings": "AACA;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAEP,SAAS,gBAAgB;AACzB,SAAS,0BAA0B;AAGnC,MAAM,oBAAoB,uBAAO,yBAAyB;AAU1D,IAAI;AAKJ,SAAS,eAAe,OAAwD;AAC9E,MAAI,OAAO,OAAO,OAAO,MAAM,KAAK,OAAO,OAAO,OAAO,KAAK,EAAG,QAAO;AACxE,QAAM,OAAO,MAAM;AACnB,SAAO,MAAM,QAAQ,IAAI,KAAK,KAAK,KAAK,CAAC,SAAS;AAChD,QAAI,CAAC,QAAQ,OAAO,SAAS,SAAU,QAAO;AAC9C,UAAM,QAAS,KAA6B;AAC5C,WAAO,CAAC,CAAC,SAAS,OAAO,UAAU,aAChC,OAAO,OAAO,OAAO,MAAM,KAAK,OAAO,OAAO,OAAO,KAAK;AAAA,EAC/D,CAAC;AACH;AAGO,SAAS,qBACd,OACA,eACG;AACH,MAAI,CAAC,SAAS,OAAO,UAAU,SAAU,QAAO;AAChD,QAAM,YAAY;AAClB,QAAM,QAAQ,UAAU;AACxB,MACE,CAAC,SACD,OAAO,UAAU,YACjB,SAAS,KAAK,KACb,MAAuC,iBAAiB,MAAM,UAC/D,CAAC,eAAe,KAA+C,GAC/D;AACA,WAAO;AAAA,EACT;AACA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,OAAO,OAAO,OAAO;AAAA,MACnB,GAAI;AAAA,MACJ,CAAC,iBAAiB,GAAG,OAAO,OAAO;AAAA,QACjC,QAAQ,iBAAiB;AAAA,MAC3B,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AACF;AAGO,SAAS,6BACd,OACA,eACY;AACZ,QAAM,QAAQ,SAAS,OAAO,UAAU,WACrC,MAAyB,QAAQ;AACpC,QAAM,WAAW;AACjB,wBAAsB,SAAS,SAAS,KAAK,KAAK,kBAAkB,SAAY;AAAA,IAC9E,QAAQ;AAAA,IACR;AAAA,EACF,IAAI;AACJ,SAAO,MAAM;AACX,0BAAsB;AAAA,EACxB;AACF;AAGO,SAAS,wBACd,SACA,OACM;AACN,MAAI,SAAS,UAAU,qBAAqB,QAAQ;AAClD,8BAA0B,SAAS,oBAAoB,aAAa;AAAA,EACtE;AACF;AAGO,SAAS,0BACd,OACmC;AACnC,MAAI,CAAC,SAAS,OAAO,UAAU,SAAU,QAAO;AAChD,QAAM,SAAU,MAAuC,iBAAiB;AACxE,MAAI,CAAC,UAAU,OAAO,WAAW,SAAU,QAAO;AAClD,SAAQ,OAA4B;AACtC;AAGO,SAAS,wBACd,OACuB;AACvB,MAAI,0BAA0B,KAAK,MAAM,OAAW,QAAO;AAC3D,QAAM,iBAAiB,EAAE,GAAI,MAAuC;AACpE,SAAO,eAAe,iBAAiB;AACvC,SAAO,OAAO,OAAO,cAAc;AACrC;AAGO,SAAS,0BACd,SACmC;AACnC,SAAO,+BAA+B,OAAO;AAC/C;AAoBO,SAAS,0BACd,OACA,SACkB;AAClB,SAAO;AAAA,IACL,MAAM,mBAAmB,MAAM,MAAM,QAAQ,gBAAgB,OAAO,QAAQ,OAAO;AAAA,IACnF,KAAK,mBAAmB,MAAM,KAAK,QAAQ,gBAAgB,QAAQ,OAAO,OAAO;AAAA,EACnF;AACF;",
4
+ "sourcesContent": ["import type { StyleResolutionContext, SystemStyle } from '../types.js';\nimport {\n getPlacementSignalHandoffStyle,\n setPlacementSignalHandoff,\n} from '../element/metadata.js';\nimport type { PibblElement } from '../element/types.js';\nimport { isSignal } from '../signals/graph.js';\nimport { resolveLocalOffset } from './resolve-built-in.js';\nimport type { Length } from './types.js';\n\nconst PLACEMENT_HANDOFF = Symbol('pibbl.placement-handoff');\nconst PLACEMENT_DERIVED_ABSOLUTE_AXES = Symbol('pibbl.placement-derived-absolute-axes');\n\ntype PropsWithStyle = Record<PropertyKey, unknown> & {\n readonly style?: unknown;\n};\n\ntype PlacementHandoff = Readonly<{\n source: Readonly<SystemStyle>;\n}>;\n\nlet activeSignalHandoff: {\n readonly signal: object;\n readonly consumedStyle: Readonly<SystemStyle>;\n} | undefined;\n\nfunction hasPositioning(style: Readonly<Record<PropertyKey, unknown>>): boolean {\n if (Object.hasOwn(style, 'position') || Object.hasOwn(style, 'left') || Object.hasOwn(style, 'right') || Object.hasOwn(style, 'top') || Object.hasOwn(style, 'bottom') || Object.hasOwn(style, 'insetStart') || Object.hasOwn(style, 'insetEnd')) return true;\n const when = style.when;\n return Array.isArray(when) && when.some((rule) => {\n if (!rule || typeof rule !== 'object') return false;\n const patch = (rule as { style?: unknown }).style;\n return !!patch && typeof patch === 'object' &&\n (Object.hasOwn(patch, 'position') || Object.hasOwn(patch, 'left') || Object.hasOwn(patch, 'right') || Object.hasOwn(patch, 'top') || Object.hasOwn(patch, 'bottom') || Object.hasOwn(patch, 'insetStart') || Object.hasOwn(patch, 'insetEnd'));\n });\n}\n\n/** @internal Marks only a fresh placement-owned style; authored style objects are never changed. */\nexport function markDerivedAbsoluteAxes(style: SystemStyle, width: boolean, height: boolean): void {\n (style as Record<PropertyKey, unknown>)[PLACEMENT_DERIVED_ABSOLUTE_AXES] = (width ? 1 : 0) | (height ? 2 : 0);\n}\n\n/** @internal Substitutes settled axes only across an exact forwarded placement handoff. */\nexport function resolveForwardedDerivedAbsoluteAxes(\n style: Readonly<SystemStyle>,\n source: Readonly<SystemStyle> | undefined,\n): Readonly<SystemStyle> {\n if (source === undefined) return style;\n const axes = (source as Record<PropertyKey, unknown>)[PLACEMENT_DERIVED_ABSOLUTE_AXES] as number | undefined;\n if (!axes || !samePositioning(style, source)) return style;\n const raw = style as Readonly<Record<string, unknown>>;\n const settled = source as Readonly<Record<string, unknown>>;\n const width = (axes & 1) !== 0 && (raw.width === undefined || raw.width === 'auto') && typeof settled.width === 'number' ? settled.width : raw.width;\n const height = (axes & 2) !== 0 && (raw.height === undefined || raw.height === 'auto') && typeof settled.height === 'number' ? settled.height : raw.height;\n if (Object.is(width, raw.width) && Object.is(height, raw.height)) return style;\n return Object.freeze({ ...raw, width, height }) as Readonly<SystemStyle>;\n}\n\nfunction samePositioning(style: Readonly<SystemStyle>, source: Readonly<SystemStyle>): boolean {\n const left = style as Readonly<Record<string, unknown>>;\n const right = source as Readonly<Record<string, unknown>>;\n return Object.is(left.position, right.position) && Object.is(left.left, right.left) &&\n Object.is(left.right, right.right) && Object.is(left.top, right.top) &&\n Object.is(left.bottom, right.bottom) && Object.is(left.insetStart, right.insetStart) &&\n Object.is(left.insetEnd, right.insetEnd);\n}\n\n/** @internal Marks a placed function component's object style for forwarding. */\nexport function withPlacementHandoff<P>(\n props: P,\n consumedStyle: Readonly<SystemStyle> | undefined,\n): P {\n if (!props || typeof props !== 'object') return props;\n const candidate = props as PropsWithStyle;\n const style = candidate.style;\n if (\n !style ||\n typeof style !== 'object' ||\n isSignal(style) ||\n (style as Record<PropertyKey, unknown>)[PLACEMENT_HANDOFF] !== undefined ||\n !hasPositioning(style as Readonly<Record<PropertyKey, unknown>>)\n ) {\n return props;\n }\n return {\n ...candidate,\n style: Object.freeze({\n ...(style as Record<PropertyKey, unknown>),\n [PLACEMENT_HANDOFF]: Object.freeze({\n source: consumedStyle ?? style as Readonly<SystemStyle>,\n }),\n }),\n } as P;\n}\n\n/** @internal Activates signal identity capture while one plain component runs. */\nexport function enterPlacementHandoffCapture(\n props: unknown,\n consumedStyle: Readonly<SystemStyle> | undefined,\n): () => void {\n const style = props && typeof props === 'object' ?\n (props as PropsWithStyle).style : undefined;\n const previous = activeSignalHandoff;\n activeSignalHandoff = style && isSignal(style) && consumedStyle !== undefined ? {\n signal: style,\n consumedStyle,\n } : undefined;\n return () => {\n activeSignalHandoff = previous;\n };\n}\n\n/** @internal Annotates an element created with the active forwarded style signal. */\nexport function capturePlacementHandoff(\n element: PibblElement<any>,\n style: unknown,\n): void {\n if (style && style === activeSignalHandoff?.signal) {\n setPlacementSignalHandoff(element, activeSignalHandoff.consumedStyle);\n }\n}\n\n/** @internal Reads the original style behind an enumerable forwarding marker. */\nexport function getPlacementHandoffSource(\n style: unknown,\n): Readonly<SystemStyle> | undefined {\n if (!style || typeof style !== 'object') return undefined;\n const marker = (style as Record<PropertyKey, unknown>)[PLACEMENT_HANDOFF];\n if (!marker || typeof marker !== 'object') return undefined;\n return (marker as PlacementHandoff).source;\n}\n\n/** @internal Removes a private handoff marker before style callbacks run. */\nexport function consumePlacementHandoff(\n style: Readonly<SystemStyle>,\n): Readonly<SystemStyle> {\n const record = style as Record<PropertyKey, unknown>;\n if (record[PLACEMENT_HANDOFF] === undefined && record[PLACEMENT_DERIVED_ABSOLUTE_AXES] === undefined) return style;\n const withoutHandoff = { ...record };\n delete withoutHandoff[PLACEMENT_HANDOFF];\n delete withoutHandoff[PLACEMENT_DERIVED_ABSOLUTE_AXES];\n return Object.freeze(withoutHandoff) as Readonly<SystemStyle>;\n}\n\n/** @internal Determines whether a primitive consumes one forwarded signal style. */\nexport function getPlacementSignalHandoff(\n element: PibblElement<any>,\n): Readonly<SystemStyle> | undefined {\n return getPlacementSignalHandoffStyle(element);\n}\n\n/**\n * Offsets in the parent layout coordinate system; percentages resolve against the containing box.\n *\n * @see {@link Length}\n * @see {@link SystemStyle}\n */\nexport interface PositioningStyle extends SystemStyle {\n /**\n * Experimental direct-Flex placement mode. In a finite Flex, static\n * keeps the allocated slot and ignores insets; relative offsets final geometry\n * once without moving siblings. Primitive static/relative leaves support every\n * main/writing direction and wrapping mode. Wrapped parents admit fixed numeric\n * direct Flex owners that remain internally nowrap; non-row chains use the same\n * fixed owner restriction, with zero grow/shrink and\n * omitted or automatic basis; physical offsets retain their sign through main reversal. Absolute stays out of sibling allocation, using\n * the padding box for explicit insets and content alignment for omitted axes.\n * Fixed numeric, percentage and admitted automatic absolute profiles support all main directions\n * and RTL, with numeric or percentage bounds applied before placement. In every wrapping mode,\n * omitted axes use whole-content main/cross alignment; wrap-reverse reverses\n * omitted cross alignment and combines with column RTL exactly once.\n * Paired natural providers keep their exact/unbounded query in every admitted direction.\n * Direct wrapped Text with a generic pixel font and visible fit/overflow may\n * measure automatic height at a resolved numeric or percentage width through the same owned query.\n * Unwrapped Text may measure automatic width at a resolved numeric or percentage height, using\n * its existing Canvas ink-bounds width before bounds and physical anchoring.\n * Generic unwrapped Text also supports natural ink height and both automatic\n * dimensions through one unbounded query before independent numeric clamps;\n * mixed opposing-pair/natural feedback and both-auto aspect remain excluded.\n * On the documented finite direct-child path, automatic absolute axes resolve\n * from opposing numeric or percentage physical insets. With a positive finite aspectRatio,\n * exactly one automatic axis can instead derive from its resolved declared finite numeric or percentage opposite axis.\n * Opposing insets win. Finite numeric or percentage min/max bounds clamp used axes\n * independently after derivation; a clamp does not recouple aspectRatio, and a\n * numeric minimum above its maximum rejects. A direct custom primitive with\n * paired pure measurement providers may instead measure natural automatic\n * width at a declared numeric or percentage height, or natural height at a declared numeric\n * or percentage width. The automatic axis is unbounded; the exact axis uses its declared\n * resolved padding-box value before bounds clamp the used dimensions.\n * In direct declarative Flex chains,\n * static Flex passes the containing box outward while relative Flex owns a local box.\n * Omission retains the legacy local Flex boundary and left/top behavior.\n */\n position?: 'static' | 'relative' | 'absolute';\n /** Left edge coordinate or inset. Explicit absolute Flex insets accept finite numbers or percentages of the containing padding-box axis; relative percentages use the parent content-box axis. See {@link Length}. */\n left?: Exclude<Length, 'auto'>;\n /** Right edge inset. Absolute Flex accepts finite numbers or percentages of the containing padding-box width; relative percentages use the parent content-box width. See {@link Length}. */\n right?: Exclude<Length, 'auto'>;\n /** Top edge coordinate or inset. Explicit absolute Flex insets accept finite numbers or percentages of the containing padding-box axis; relative percentages use the parent content-box axis. See {@link Length}. */\n top?: Exclude<Length, 'auto'>;\n /** Bottom edge inset. Absolute Flex accepts finite numbers or percentages of the containing padding-box height; relative percentages use the parent content-box height. See {@link Length}. */\n bottom?: Exclude<Length, 'auto'>;\n /** Experimental direct absolute Flex inline-start inset, mapped through the receiving Flex direction. Overrides the corresponding physical edge, including zero. Percentages use the selected containing padding-box width. See {@link Length}. */\n insetStart?: Exclude<Length, 'auto'>;\n /** Experimental direct absolute Flex inline-end inset, mapped through the receiving Flex direction. Overrides the corresponding physical edge. See {@link Length}. */\n insetEnd?: Exclude<Length, 'auto'>;\n}\n\nexport interface ResolvedPosition {\n left: number;\n top: number;\n}\n\nexport function resolveStandalonePosition(\n style: Readonly<PositioningStyle>,\n context: Readonly<StyleResolutionContext>,\n): ResolvedPosition {\n return {\n left: resolveLocalOffset(style.left, context.percentageBasis.width, 'left', context),\n top: resolveLocalOffset(style.top, context.percentageBasis.height, 'top', context),\n };\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,6 +1,7 @@
1
- import type { StyleResolutionContext, SystemStyle } from '../types.js';
2
1
  import type { Length } from './types.js';
2
+ import type { StyleResolutionContext, SystemStyle } from '../types.js';
3
+ import type { SizingLength } from './sizing-length.js';
3
4
  export declare function stripLayoutParticipation<S extends SystemStyle>(style: Readonly<S>): Record<string, unknown>;
4
- export declare function resolveRequiredLength(value: Length, reference: number, property: string, context: Readonly<StyleResolutionContext>): number;
5
- export declare function resolveOptionalLength(value: Length | undefined, reference: number, property: string, context: Readonly<StyleResolutionContext>): number | undefined;
5
+ export declare function resolveRequiredLength(value: SizingLength, reference: number, property: string, context: Readonly<StyleResolutionContext>): number;
6
+ export declare function resolveOptionalLength(value: SizingLength | undefined, reference: number, property: string, context: Readonly<StyleResolutionContext>): number | undefined;
6
7
  export declare function resolveLocalOffset(value: Exclude<Length, 'auto'> | undefined, reference: number, property: string, context: Readonly<StyleResolutionContext>): number;
@@ -1,5 +1,5 @@
1
1
  import { layoutDiagnostic } from "./diagnostics.js";
2
- import { resolveLength } from "./resolve-length.js";
2
+ import { resolveScalarSizingLength } from "./sizing-length.js";
3
3
  const LAYOUT_PARTICIPATION_KEYS = /* @__PURE__ */ new Set([
4
4
  "width",
5
5
  "height",
@@ -8,6 +8,20 @@ const LAYOUT_PARTICIPATION_KEYS = /* @__PURE__ */ new Set([
8
8
  "minHeight",
9
9
  "maxHeight",
10
10
  "padding",
11
+ "paddingStart",
12
+ "paddingEnd",
13
+ "boxSizing",
14
+ "borderWidth",
15
+ "borderStartWidth",
16
+ "borderEndWidth",
17
+ "aspectRatio",
18
+ "margin",
19
+ "marginTop",
20
+ "marginRight",
21
+ "marginBottom",
22
+ "marginLeft",
23
+ "marginStart",
24
+ "marginEnd",
11
25
  "overflow",
12
26
  "left",
13
27
  "top",
@@ -29,7 +43,7 @@ function stripLayoutParticipation(style) {
29
43
  return result;
30
44
  }
31
45
  function resolveRequiredLength(value, reference, property, context) {
32
- const resolved = resolveLength(value, reference, property, context);
46
+ const resolved = resolveScalarSizingLength(value, reference, property, context);
33
47
  if (resolved === void 0) {
34
48
  throw layoutDiagnostic({
35
49
  component: context.component,
@@ -44,7 +58,7 @@ function resolveRequiredLength(value, reference, property, context) {
44
58
  }
45
59
  function resolveOptionalLength(value, reference, property, context) {
46
60
  if (value === void 0) return void 0;
47
- return resolveLength(value, reference, property, context);
61
+ return resolveScalarSizingLength(value, reference, property, context);
48
62
  }
49
63
  function resolveLocalOffset(value, reference, property, context) {
50
64
  return resolveRequiredLength(value ?? 0, reference, property, context);
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/lib/style/resolve-built-in.ts"],
4
- "sourcesContent": ["import type { StyleResolutionContext, SystemStyle } from '../types.js';\nimport { layoutDiagnostic } from './diagnostics.js';\nimport { resolveLength } from './resolve-length.js';\nimport type { Length } from './types.js';\n\nconst LAYOUT_PARTICIPATION_KEYS = new Set([\n 'width',\n 'height',\n 'minWidth',\n 'maxWidth',\n 'minHeight',\n 'maxHeight',\n 'padding',\n 'overflow',\n 'left',\n 'top',\n 'alignSelf',\n 'justifySelf',\n 'flexBasis',\n 'flexGrow',\n 'flexShrink',\n 'gridColumnStart',\n 'gridColumnSpan',\n 'gridRowStart',\n 'gridRowSpan',\n]);\n\nexport function stripLayoutParticipation<S extends SystemStyle>(\n style: Readonly<S>,\n): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(style)) {\n if (!LAYOUT_PARTICIPATION_KEYS.has(key)) result[key] = value;\n }\n return result;\n}\n\nexport function resolveRequiredLength(\n value: Length,\n reference: number,\n property: string,\n context: Readonly<StyleResolutionContext>,\n): number {\n const resolved = resolveLength(value, reference, property, context);\n if (resolved === undefined) {\n throw layoutDiagnostic({\n component: context.component,\n property,\n value,\n algorithm: context.algorithm,\n constraints: context.constraints,\n reason: 'must resolve to a finite number before rendering',\n });\n }\n return resolved;\n}\n\nexport function resolveOptionalLength(\n value: Length | undefined,\n reference: number,\n property: string,\n context: Readonly<StyleResolutionContext>,\n): number | undefined {\n if (value === undefined) return undefined;\n return resolveLength(value, reference, property, context);\n}\n\nexport function resolveLocalOffset(\n value: Exclude<Length, 'auto'> | undefined,\n reference: number,\n property: string,\n context: Readonly<StyleResolutionContext>,\n): number {\n return resolveRequiredLength(value ?? 0, reference, property, context);\n}\n"],
5
- "mappings": "AACA,SAAS,wBAAwB;AACjC,SAAS,qBAAqB;AAG9B,MAAM,4BAA4B,oBAAI,IAAI;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAEM,SAAS,yBACd,OACyB;AACzB,QAAM,SAAkC,CAAC;AACzC,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,KAAK,GAAG;AAChD,QAAI,CAAC,0BAA0B,IAAI,GAAG,EAAG,QAAO,GAAG,IAAI;AAAA,EACzD;AACA,SAAO;AACT;AAEO,SAAS,sBACd,OACA,WACA,UACA,SACQ;AACR,QAAM,WAAW,cAAc,OAAO,WAAW,UAAU,OAAO;AAClE,MAAI,aAAa,QAAW;AAC1B,UAAM,iBAAiB;AAAA,MACrB,WAAW,QAAQ;AAAA,MACnB;AAAA,MACA;AAAA,MACA,WAAW,QAAQ;AAAA,MACnB,aAAa,QAAQ;AAAA,MACrB,QAAQ;AAAA,IACV,CAAC;AAAA,EACH;AACA,SAAO;AACT;AAEO,SAAS,sBACd,OACA,WACA,UACA,SACoB;AACpB,MAAI,UAAU,OAAW,QAAO;AAChC,SAAO,cAAc,OAAO,WAAW,UAAU,OAAO;AAC1D;AAEO,SAAS,mBACd,OACA,WACA,UACA,SACQ;AACR,SAAO,sBAAsB,SAAS,GAAG,WAAW,UAAU,OAAO;AACvE;",
4
+ "sourcesContent": ["import type { Length } from './types.js';\nimport type { StyleResolutionContext, SystemStyle } from '../types.js';\nimport { layoutDiagnostic } from './diagnostics.js';\nimport { resolveScalarSizingLength } from './sizing-length.js';\nimport type { SizingLength } from './sizing-length.js';\n\nconst LAYOUT_PARTICIPATION_KEYS = new Set([\n 'width',\n 'height',\n 'minWidth',\n 'maxWidth',\n 'minHeight',\n 'maxHeight',\n 'padding',\n 'paddingStart',\n 'paddingEnd',\n 'boxSizing',\n 'borderWidth',\n 'borderStartWidth',\n 'borderEndWidth',\n 'aspectRatio',\n 'margin',\n 'marginTop',\n 'marginRight',\n 'marginBottom',\n 'marginLeft',\n 'marginStart',\n 'marginEnd',\n 'overflow',\n 'left',\n 'top',\n 'alignSelf',\n 'justifySelf',\n 'flexBasis',\n 'flexGrow',\n 'flexShrink',\n 'gridColumnStart',\n 'gridColumnSpan',\n 'gridRowStart',\n 'gridRowSpan',\n]);\n\nexport function stripLayoutParticipation<S extends SystemStyle>(\n style: Readonly<S>,\n): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(style)) {\n if (!LAYOUT_PARTICIPATION_KEYS.has(key)) result[key] = value;\n }\n return result;\n}\n\nexport function resolveRequiredLength(\n value: SizingLength,\n reference: number,\n property: string,\n context: Readonly<StyleResolutionContext>,\n): number {\n const resolved = resolveScalarSizingLength(value, reference, property, context);\n if (resolved === undefined) {\n throw layoutDiagnostic({\n component: context.component,\n property,\n value,\n algorithm: context.algorithm,\n constraints: context.constraints,\n reason: 'must resolve to a finite number before rendering',\n });\n }\n return resolved;\n}\n\nexport function resolveOptionalLength(\n value: SizingLength | undefined,\n reference: number,\n property: string,\n context: Readonly<StyleResolutionContext>,\n): number | undefined {\n if (value === undefined) return undefined;\n return resolveScalarSizingLength(value, reference, property, context);\n}\n\nexport function resolveLocalOffset(\n value: Exclude<Length, 'auto'> | undefined,\n reference: number,\n property: string,\n context: Readonly<StyleResolutionContext>,\n): number {\n return resolveRequiredLength(value ?? 0, reference, property, context);\n}\n"],
5
+ "mappings": "AAEA,SAAS,wBAAwB;AACjC,SAAS,iCAAiC;AAG1C,MAAM,4BAA4B,oBAAI,IAAI;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAEM,SAAS,yBACd,OACyB;AACzB,QAAM,SAAkC,CAAC;AACzC,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,KAAK,GAAG;AAChD,QAAI,CAAC,0BAA0B,IAAI,GAAG,EAAG,QAAO,GAAG,IAAI;AAAA,EACzD;AACA,SAAO;AACT;AAEO,SAAS,sBACd,OACA,WACA,UACA,SACQ;AACR,QAAM,WAAW,0BAA0B,OAAO,WAAW,UAAU,OAAO;AAC9E,MAAI,aAAa,QAAW;AAC1B,UAAM,iBAAiB;AAAA,MACrB,WAAW,QAAQ;AAAA,MACnB;AAAA,MACA;AAAA,MACA,WAAW,QAAQ;AAAA,MACnB,aAAa,QAAQ;AAAA,MACrB,QAAQ;AAAA,IACV,CAAC;AAAA,EACH;AACA,SAAO;AACT;AAEO,SAAS,sBACd,OACA,WACA,UACA,SACoB;AACpB,MAAI,UAAU,OAAW,QAAO;AAChC,SAAO,0BAA0B,OAAO,WAAW,UAAU,OAAO;AACtE;AAEO,SAAS,mBACd,OACA,WACA,UACA,SACQ;AACR,SAAO,sBAAsB,SAAS,GAAG,WAAW,UAAU,OAAO;AACvE;",
6
6
  "names": []
7
7
  }
@@ -7,8 +7,11 @@ export interface PreparedStyleInput {
7
7
  source: PibblElement<any>;
8
8
  query?: PreparedQuery;
9
9
  }
10
+ export declare function setAllocatedContentSize(element: PibblElement<any>, width: number, height: number): void;
10
11
  /** @internal Carries one normalized style through an internal placement descriptor. */
11
12
  export declare function setPreNormalizedStyle(element: PibblElement<any>, style: Readonly<SystemStyle>, source?: PibblElement<any>, receiverToken?: object, query?: PreparedQuery): void;
13
+ /** @internal Reads a settled descriptor for known descendant preparation. */
14
+ export declare function peekPreNormalizedStyle(element: PibblElement<any>): PreparedStyleInput | undefined;
12
15
  /** @internal Consumes an internal normalized-style override exactly once. */
13
16
  export declare function takePreNormalizedStyle(element: PibblElement<any>): PreparedStyleInput | undefined;
14
17
  /** @internal Registers strings that are data, paint, or enums, not allocation syntax. */
@@ -1,3 +1,6 @@
1
+ import { isKnownLayoutType } from "../layout/prepared-root.js";
2
+ import { nativeLayout } from "../layout/wasm/region.js";
3
+ import { allocatedContentBoxStyle } from "../layout/box-sizing.js";
1
4
  import { resolveTransitionBinding } from "../transitions/binding.js";
2
5
  import { getLayoutBox, getPercentageBasis } from "../layout/context.js";
3
6
  import { EMPTY_STYLE } from "./empty-style.js";
@@ -13,15 +16,23 @@ import {
13
16
  consumePlacementHandoff,
14
17
  getPlacementSignalHandoff,
15
18
  getPlacementHandoffSource,
19
+ resolveForwardedDerivedAbsoluteAxes,
16
20
  resolveStandalonePosition
17
21
  } from "./positioning.js";
18
22
  import { CANVAS_2D_BACKEND } from "../backend/canvas-2d-backend.js";
19
23
  const opaqueStyleProperties = /* @__PURE__ */ new WeakMap();
24
+ const allocatedContentSizes = /* @__PURE__ */ new WeakMap();
25
+ function setAllocatedContentSize(element, width, height) {
26
+ allocatedContentSizes.set(element, { width, height });
27
+ }
20
28
  const preNormalizedStyles = /* @__PURE__ */ new WeakMap();
21
29
  function setPreNormalizedStyle(element, style, source = element, receiverToken, query) {
22
30
  preNormalizedStyles.set(element, { style, source, query });
23
31
  if (receiverToken) setPrimitiveReceiverToken(element, receiverToken);
24
32
  }
33
+ function peekPreNormalizedStyle(element) {
34
+ return preNormalizedStyles.get(element);
35
+ }
25
36
  function takePreNormalizedStyle(element) {
26
37
  const value = preNormalizedStyles.get(element);
27
38
  preNormalizedStyles.delete(element);
@@ -71,6 +82,15 @@ function resolveElementStyle(element, resolvedSpecifiedStyle, hasResolvedSpecifi
71
82
  getSpecifiedStyle(element)
72
83
  ) ?? getPlacementSignalHandoff(element);
73
84
  const handoffStyle = consumePlacementHandoff(resolvedInput);
85
+ const forwarded = forwardedStyle;
86
+ if (forwarded?.position === "absolute") {
87
+ assertExplicitPositionBoundary(
88
+ handoffStyle,
89
+ forwarded,
90
+ isPlacementConsumed(element),
91
+ context
92
+ );
93
+ }
74
94
  const ordinaryFilter = extractSystemFilter(handoffStyle);
75
95
  const transitionFilters = handoffStyle.transition === void 0 ? void 0 : resolveTransitionBinding(handoffStyle.transition);
76
96
  const combined = transitionFilters?.length ? [...ordinaryFilter === void 0 ? [] : Array.isArray(ordinaryFilter) ? ordinaryFilter : [ordinaryFilter], ...transitionFilters] : ordinaryFilter;
@@ -78,17 +98,22 @@ function resolveElementStyle(element, resolvedSpecifiedStyle, hasResolvedSpecifi
78
98
  combined,
79
99
  context
80
100
  );
81
- const normalized = preNormalized ? withoutSystemFilter(handoffStyle) : definition.normalizeStyle ? definition.normalizeStyle(
101
+ const normalizedInput = preNormalized ? withoutSystemFilter(handoffStyle) : definition.normalizeStyle ? definition.normalizeStyle(
82
102
  withoutSystemFilter(handoffStyle)
83
103
  ) : withoutSystemFilter(handoffStyle);
104
+ const normalizedDimensions = resolveForwardedDerivedAbsoluteAxes(normalizedInput, forwardedStyle);
105
+ const usedSize = allocatedContentSizes.get(element);
106
+ allocatedContentSizes.delete(element);
107
+ const normalized = usedSize ? allocatedContentBoxStyle(normalizedDimensions, usedSize.width, usedSize.height) : normalizedDimensions;
84
108
  const resolved = definition.resolveStyle ? definition.resolveStyle(normalized, context) : normalized;
85
109
  const positioning = normalized;
86
- const hasLeft = positioning.left !== void 0;
87
- const hasTop = positioning.top !== void 0;
110
+ const staticLayout = nativeLayout && positioning.position === "static" && isKnownLayoutType(element.type);
111
+ if (!staticLayout) assertExplicitPositionBoundary(positioning, forwarded, isPlacementConsumed(element), context);
112
+ const hasLeft = !staticLayout && positioning.left !== void 0;
113
+ const hasTop = !staticLayout && positioning.top !== void 0;
88
114
  let positioned = resolved;
89
115
  if (definition.backend === CANVAS_2D_BACKEND.token && (hasLeft || hasTop)) {
90
116
  const standalone = resolveStandalonePosition(normalized, context);
91
- const forwarded = forwardedStyle;
92
117
  const consumesOuterPosition = isPlacementConsumed(element);
93
118
  const position = {
94
119
  left: consumesOuterPosition || forwarded !== void 0 && Object.is(positioning.left, forwarded.left) ? 0 : standalone.left,
@@ -110,7 +135,53 @@ function resolveElementStyle(element, resolvedSpecifiedStyle, hasResolvedSpecifi
110
135
  );
111
136
  return final;
112
137
  }
138
+ function assertExplicitPositionBoundary(positioning, forwarded, consumesOuterPosition, context) {
139
+ const position = positioning.position;
140
+ if ((positioning.insetStart !== void 0 || positioning.insetEnd !== void 0) && position !== "absolute") {
141
+ throw layoutDiagnostic({
142
+ component: context.component,
143
+ property: "position",
144
+ value: position,
145
+ algorithm: "render-dispatch",
146
+ constraints: context.constraints,
147
+ reason: "PIBBL_LAYOUT_UNSUPPORTED_POSITION: logical insets require a supported direct absolute Flex child"
148
+ });
149
+ }
150
+ const hasRightOrBottom = positioning.right !== void 0 || positioning.bottom !== void 0;
151
+ if (position === void 0) {
152
+ if (!hasRightOrBottom) return;
153
+ throw layoutDiagnostic({
154
+ component: context.component,
155
+ property: positioning.right !== void 0 ? "right" : "bottom",
156
+ value: positioning.right ?? positioning.bottom,
157
+ algorithm: "render-dispatch",
158
+ constraints: context.constraints,
159
+ reason: "PIBBL_LAYOUT_IGNORED_POSITION: right/bottom require an explicit position in a supported direct Flex child"
160
+ });
161
+ }
162
+ if (position !== "static" && position !== "relative" && position !== "absolute") {
163
+ throw layoutDiagnostic({
164
+ component: context.component,
165
+ property: "position",
166
+ value: position,
167
+ algorithm: "render-dispatch",
168
+ constraints: context.constraints,
169
+ reason: "PIBBL_LAYOUT_UNSUPPORTED_POSITION: uses an unsupported placement mode"
170
+ });
171
+ }
172
+ if (consumesOuterPosition) return;
173
+ if (forwarded !== void 0 && Object.is(positioning.position, forwarded.position) && Object.is(positioning.left, forwarded.left) && Object.is(positioning.right, forwarded.right) && Object.is(positioning.top, forwarded.top) && Object.is(positioning.bottom, forwarded.bottom) && Object.is(positioning.insetStart, forwarded.insetStart) && Object.is(positioning.insetEnd, forwarded.insetEnd)) return;
174
+ throw layoutDiagnostic({
175
+ component: context.component,
176
+ property: "position",
177
+ value: position,
178
+ algorithm: "render-dispatch",
179
+ constraints: context.constraints,
180
+ reason: "PIBBL_LAYOUT_UNSUPPORTED_POSITION: requires direct Flex placement or one exact forwarded position/inset style"
181
+ });
182
+ }
113
183
  function assertResolvedValue(value, property, context, seen, opaqueProperties) {
184
+ if (opaqueProperties.has(property)) return;
114
185
  if (typeof value === "number") {
115
186
  if (!Number.isFinite(value)) {
116
187
  throw unresolvedDiagnostic(property, value, context, "must be finite");
@@ -158,8 +229,10 @@ function unresolvedDiagnostic(property, value, context, reason) {
158
229
  }
159
230
  export {
160
231
  extractSystemFilter,
232
+ peekPreNormalizedStyle,
161
233
  registerOpaqueStyleProperties,
162
234
  resolveElementStyle,
235
+ setAllocatedContentSize,
163
236
  setPreNormalizedStyle,
164
237
  takePreNormalizedStyle,
165
238
  withoutSystemFilter
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/lib/style/resolve-dispatch.ts"],
4
- "sourcesContent": ["import { resolveTransitionBinding } from '../transitions/binding.js';\nimport { type PreparedQuery } from './responsive.js';\nimport { getLayoutBox, getPercentageBasis } from '../layout/context.js';\nimport { EMPTY_STYLE } from './empty-style.js';\nimport {\n getPrimitiveDefinition,\n getSpecifiedStyle,\n setPrimitiveReceiverToken,\n type PrimitiveDefinition,\n} from '../element/metadata.js';\nimport type { PibblElement } from '../element/types.js';\nimport type {\n ResolvedStyle,\n SpecifiedStyle,\n StyleResolutionContext,\n SystemStyle,\n} from '../types.js';\nimport { layoutDiagnostic } from './diagnostics.js';\nimport { resolveFilterList } from './filter.js';\nimport type { PibblFilter } from './filter-types.js';\nimport { isPlacementConsumed } from '../element/metadata.js';\nimport {\n consumePlacementHandoff,\n getPlacementSignalHandoff,\n getPlacementHandoffSource,\n resolveStandalonePosition,\n type PositioningStyle,\n} from './positioning.js';\nimport { CANVAS_2D_BACKEND } from '../backend/canvas-2d-backend.js';\n\nconst opaqueStyleProperties = new WeakMap<Function, ReadonlySet<string>>();\nexport interface PreparedStyleInput {\n style: Readonly<SystemStyle>;\n source: PibblElement<any>;\n query?: PreparedQuery;\n}\nconst preNormalizedStyles = new WeakMap<PibblElement<any>, PreparedStyleInput>();\n\n/** @internal Carries one normalized style through an internal placement descriptor. */\nexport function setPreNormalizedStyle(\n element: PibblElement<any>,\n style: Readonly<SystemStyle>,\n source: PibblElement<any> = element,\n receiverToken?: object,\n query?: PreparedQuery,\n): void {\n preNormalizedStyles.set(element, { style, source, query });\n if (receiverToken) setPrimitiveReceiverToken(element, receiverToken);\n}\n\n/** @internal Consumes an internal normalized-style override exactly once. */\nexport function takePreNormalizedStyle(\n element: PibblElement<any>,\n): PreparedStyleInput | undefined {\n const value = preNormalizedStyles.get(element);\n preNormalizedStyles.delete(element);\n return value;\n}\n\n/** @internal Registers strings that are data, paint, or enums, not allocation syntax. */\nexport function registerOpaqueStyleProperties(\n type: Function,\n properties: readonly string[],\n): void {\n opaqueStyleProperties.set(type, new Set(properties));\n}\n\n/** @internal Reads the framework-owned filter property from a system style. */\nexport function extractSystemFilter(\n style: Readonly<SystemStyle>,\n): PibblFilter | readonly PibblFilter[] | undefined {\n return style.filter;\n}\n\n/** @internal Removes the framework-owned filter before custom style callbacks run. */\nexport function withoutSystemFilter(\n style: Readonly<SystemStyle>,\n): Readonly<SystemStyle> {\n if (!('when' in style)) {\n const { filter: _filter, transition: _transition, ...withoutFilter } = style;\n return Object.freeze(withoutFilter);\n }\n const { filter: _filter, transition: _transition, when: _when, ...withoutFilter } = style as Readonly<SystemStyle> & { when?: unknown };\n return Object.freeze(withoutFilter);\n}\n\nexport function resolveElementStyle<\n S extends SystemStyle,\n N extends SystemStyle,\n R extends SystemStyle,\n>(\n element: PibblElement<any>,\n resolvedSpecifiedStyle?: Readonly<SystemStyle>,\n hasResolvedSpecifiedStyle = false,\n prepared?: PreparedStyleInput,\n): ResolvedStyle<R> {\n const allocation = getLayoutBox();\n const percentageBasis = getPercentageBasis();\n const type = element.type;\n const definition = getPrimitiveDefinition(type) as\n PrimitiveDefinition<any, S, N, R> | undefined;\n if (!definition) {\n throw new Error(\n `${type.name || 'Anonymous'} does not have Pibbl primitive metadata`,\n );\n }\n const component = type.name || 'Anonymous';\n const context: StyleResolutionContext = {\n allocation,\n percentageBasis,\n constraints: {\n minWidth: 0,\n maxWidth: allocation.width,\n minHeight: 0,\n maxHeight: allocation.height,\n },\n component,\n algorithm: 'render-dispatch',\n };\n // The renderer already consumed placement metadata before resolving inputs.\n const preNormalized = prepared;\n const specified = ((hasResolvedSpecifiedStyle ?\n resolvedSpecifiedStyle : getSpecifiedStyle(element)) ?? EMPTY_STYLE) as\n SpecifiedStyle<S>;\n const resolvedInput = preNormalized?.style ?? specified;\n const forwardedStyle = getPlacementHandoffSource(\n getSpecifiedStyle(element),\n ) ?? getPlacementSignalHandoff(element);\n const handoffStyle = consumePlacementHandoff(resolvedInput);\n const ordinaryFilter = extractSystemFilter(handoffStyle);\n const transitionFilters = handoffStyle.transition === undefined ? undefined : resolveTransitionBinding(handoffStyle.transition);\n const combined = transitionFilters?.length ? [...(ordinaryFilter === undefined ? [] : Array.isArray(ordinaryFilter) ? ordinaryFilter : [ordinaryFilter]), ...transitionFilters] : ordinaryFilter;\n const systemFilter = resolveFilterList(\n combined,\n context,\n );\n const normalized = preNormalized ?\n withoutSystemFilter(handoffStyle) as Readonly<N> :\n definition.normalizeStyle ?\n definition.normalizeStyle(\n withoutSystemFilter(handoffStyle) as SpecifiedStyle<S>,\n ) :\n withoutSystemFilter(handoffStyle) as unknown as Readonly<N>;\n const resolved = definition.resolveStyle ?\n definition.resolveStyle(normalized, context) :\n normalized as unknown as ResolvedStyle<R>;\n const positioning = normalized as Readonly<PositioningStyle>;\n const hasLeft = positioning.left !== undefined;\n const hasTop = positioning.top !== undefined;\n let positioned = resolved;\n if (definition.backend === CANVAS_2D_BACKEND.token && (hasLeft || hasTop)) {\n const standalone = resolveStandalonePosition(normalized, context);\n const forwarded = forwardedStyle as Readonly<PositioningStyle> | undefined;\n const consumesOuterPosition = isPlacementConsumed(element);\n const position = {\n left: consumesOuterPosition ||\n (forwarded !== undefined && Object.is(positioning.left, forwarded.left)) ?\n 0 : standalone.left,\n top: consumesOuterPosition ||\n (forwarded !== undefined && Object.is(positioning.top, forwarded.top)) ?\n 0 : standalone.top,\n };\n positioned = {\n ...resolved,\n ...(hasLeft ? { left: position.left } : {}),\n ...(hasTop ? { top: position.top } : {}),\n };\n }\n const final = systemFilter ? { ...positioned, filter: systemFilter.values } : positioned;\n assertResolvedValue(\n final,\n '',\n context,\n new Set(),\n opaqueStyleProperties.get(type) ?? new Set(),\n );\n return final;\n}\n\nfunction assertResolvedValue(\n value: unknown,\n property: string,\n context: Readonly<StyleResolutionContext>,\n seen: Set<object>,\n opaqueProperties: ReadonlySet<string>,\n): void {\n if (typeof value === 'number') {\n if (!Number.isFinite(value)) {\n throw unresolvedDiagnostic(property, value, context, 'must be finite');\n }\n return;\n }\n if (typeof value === 'string') {\n if (\n !opaqueProperties.has(property) &&\n (value === 'auto' || value.endsWith('%'))\n ) {\n throw unresolvedDiagnostic(\n property,\n value,\n context,\n 'must resolve before the component callback is invoked',\n );\n }\n return;\n }\n if (!value || typeof value !== 'object' || seen.has(value)) return;\n if (property === 'custom' || property === 'filter') return;\n const prototype = Object.getPrototypeOf(value);\n if (!Array.isArray(value) && prototype !== Object.prototype && prototype !== null) {\n return;\n }\n seen.add(value);\n for (const [key, child] of Object.entries(value)) {\n if (key === 'custom') continue;\n assertResolvedValue(\n child,\n property ? `${property}.${key}` : key,\n context,\n seen,\n opaqueProperties,\n );\n }\n}\n\nfunction unresolvedDiagnostic(\n property: string,\n value: unknown,\n context: Readonly<StyleResolutionContext>,\n reason: string,\n) {\n return layoutDiagnostic({\n component: context.component,\n property: property || 'style',\n value,\n algorithm: context.algorithm,\n constraints: context.constraints,\n reason,\n });\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { isKnownLayoutType } from '../layout/prepared-root.js';\nimport { nativeLayout } from '../layout/wasm/region.js';\nimport { allocatedContentBoxStyle } from '../layout/box-sizing.js';\nimport { resolveTransitionBinding } from '../transitions/binding.js';\nimport { type PreparedQuery } from './responsive.js';\nimport { getLayoutBox, getPercentageBasis } from '../layout/context.js';\nimport { EMPTY_STYLE } from './empty-style.js';\nimport {\n getPrimitiveDefinition,\n getSpecifiedStyle,\n setPrimitiveReceiverToken,\n type PrimitiveDefinition,\n} from '../element/metadata.js';\nimport type { PibblElement } from '../element/types.js';\nimport type {\n ResolvedStyle,\n SpecifiedStyle,\n StyleResolutionContext,\n SystemStyle,\n} from '../types.js';\nimport { layoutDiagnostic } from './diagnostics.js';\nimport { resolveFilterList } from './filter.js';\nimport type { PibblFilter } from './filter-types.js';\nimport { isPlacementConsumed } from '../element/metadata.js';\nimport {\n consumePlacementHandoff,\n getPlacementSignalHandoff,\n getPlacementHandoffSource,\n resolveForwardedDerivedAbsoluteAxes,\n resolveStandalonePosition,\n type PositioningStyle,\n} from './positioning.js';\nimport { CANVAS_2D_BACKEND } from '../backend/canvas-2d-backend.js';\n\nconst opaqueStyleProperties = new WeakMap<Function, ReadonlySet<string>>();\nexport interface PreparedStyleInput {\n style: Readonly<SystemStyle>;\n source: PibblElement<any>;\n query?: PreparedQuery;\n}\nconst allocatedContentSizes = new WeakMap<PibblElement<any>, { width: number; height: number }>();\nexport function setAllocatedContentSize(element: PibblElement<any>, width: number, height: number): void {\n allocatedContentSizes.set(element, { width, height });\n}\n\nconst preNormalizedStyles = new WeakMap<PibblElement<any>, PreparedStyleInput>();\n\n/** @internal Carries one normalized style through an internal placement descriptor. */\nexport function setPreNormalizedStyle(\n element: PibblElement<any>,\n style: Readonly<SystemStyle>,\n source: PibblElement<any> = element,\n receiverToken?: object,\n query?: PreparedQuery,\n): void {\n preNormalizedStyles.set(element, { style, source, query });\n if (receiverToken) setPrimitiveReceiverToken(element, receiverToken);\n}\n\n/** @internal Reads a settled descriptor for known descendant preparation. */\nexport function peekPreNormalizedStyle(element: PibblElement<any>): PreparedStyleInput | undefined {\n return preNormalizedStyles.get(element);\n}\n\n/** @internal Consumes an internal normalized-style override exactly once. */\nexport function takePreNormalizedStyle(\n element: PibblElement<any>,\n): PreparedStyleInput | undefined {\n const value = preNormalizedStyles.get(element);\n preNormalizedStyles.delete(element);\n return value;\n}\n\n/** @internal Registers strings that are data, paint, or enums, not allocation syntax. */\nexport function registerOpaqueStyleProperties(\n type: Function,\n properties: readonly string[],\n): void {\n opaqueStyleProperties.set(type, new Set(properties));\n}\n\n/** @internal Reads the framework-owned filter property from a system style. */\nexport function extractSystemFilter(\n style: Readonly<SystemStyle>,\n): PibblFilter | readonly PibblFilter[] | undefined {\n return style.filter;\n}\n\n/** @internal Removes the framework-owned filter before custom style callbacks run. */\nexport function withoutSystemFilter(\n style: Readonly<SystemStyle>,\n): Readonly<SystemStyle> {\n if (!('when' in style)) {\n const { filter: _filter, transition: _transition, ...withoutFilter } = style;\n return Object.freeze(withoutFilter);\n }\n const { filter: _filter, transition: _transition, when: _when, ...withoutFilter } = style as Readonly<SystemStyle> & { when?: unknown };\n return Object.freeze(withoutFilter);\n}\n\nexport function resolveElementStyle<\n S extends SystemStyle,\n N extends SystemStyle,\n R extends SystemStyle,\n>(\n element: PibblElement<any>,\n resolvedSpecifiedStyle?: Readonly<SystemStyle>,\n hasResolvedSpecifiedStyle = false,\n prepared?: PreparedStyleInput,\n): ResolvedStyle<R> {\n const allocation = getLayoutBox();\n const percentageBasis = getPercentageBasis();\n const type = element.type;\n const definition = getPrimitiveDefinition(type) as\n PrimitiveDefinition<any, S, N, R> | undefined;\n if (!definition) {\n throw new Error(\n `${type.name || 'Anonymous'} does not have Pibbl primitive metadata`,\n );\n }\n const component = type.name || 'Anonymous';\n const context: StyleResolutionContext = {\n allocation,\n percentageBasis,\n constraints: {\n minWidth: 0,\n maxWidth: allocation.width,\n minHeight: 0,\n maxHeight: allocation.height,\n },\n component,\n algorithm: 'render-dispatch',\n };\n // The renderer already consumed placement metadata before resolving inputs.\n const preNormalized = prepared;\n const specified = ((hasResolvedSpecifiedStyle ?\n resolvedSpecifiedStyle : getSpecifiedStyle(element)) ?? EMPTY_STYLE) as\n SpecifiedStyle<S>;\n const resolvedInput = preNormalized?.style ?? specified;\n const forwardedStyle = getPlacementHandoffSource(\n getSpecifiedStyle(element),\n ) ?? getPlacementSignalHandoff(element);\n const handoffStyle = consumePlacementHandoff(resolvedInput);\n const forwarded = forwardedStyle as Readonly<PositioningStyle> | undefined;\n if (forwarded?.position === 'absolute') {\n assertExplicitPositionBoundary(\n handoffStyle as Readonly<PositioningStyle>, forwarded, isPlacementConsumed(element), context,\n );\n }\n const ordinaryFilter = extractSystemFilter(handoffStyle);\n const transitionFilters = handoffStyle.transition === undefined ? undefined : resolveTransitionBinding(handoffStyle.transition);\n const combined = transitionFilters?.length ? [...(ordinaryFilter === undefined ? [] : Array.isArray(ordinaryFilter) ? ordinaryFilter : [ordinaryFilter]), ...transitionFilters] : ordinaryFilter;\n const systemFilter = resolveFilterList(\n combined,\n context,\n );\n const normalizedInput = preNormalized ?\n withoutSystemFilter(handoffStyle) as Readonly<N> :\n definition.normalizeStyle ?\n definition.normalizeStyle(\n withoutSystemFilter(handoffStyle) as SpecifiedStyle<S>,\n ) :\n withoutSystemFilter(handoffStyle) as unknown as Readonly<N>;\n const normalizedDimensions = resolveForwardedDerivedAbsoluteAxes(normalizedInput, forwardedStyle) as Readonly<N>;\n const usedSize = allocatedContentSizes.get(element);\n allocatedContentSizes.delete(element);\n const normalized = usedSize ? allocatedContentBoxStyle(normalizedDimensions, usedSize.width, usedSize.height) as Readonly<N> : normalizedDimensions;\n const resolved = definition.resolveStyle ?\n definition.resolveStyle(normalized, context) :\n normalized as unknown as ResolvedStyle<R>;\n const positioning = normalized as Readonly<PositioningStyle>;\n const staticLayout = nativeLayout && positioning.position === 'static' && isKnownLayoutType(element.type);\n if (!staticLayout) assertExplicitPositionBoundary(positioning, forwarded, isPlacementConsumed(element), context);\n const hasLeft = !staticLayout && positioning.left !== undefined;\n const hasTop = !staticLayout && positioning.top !== undefined;\n let positioned = resolved;\n if (definition.backend === CANVAS_2D_BACKEND.token && (hasLeft || hasTop)) {\n const standalone = resolveStandalonePosition(normalized, context);\n const consumesOuterPosition = isPlacementConsumed(element);\n const position = {\n left: consumesOuterPosition ||\n (forwarded !== undefined && Object.is(positioning.left, forwarded.left)) ?\n 0 : standalone.left,\n top: consumesOuterPosition ||\n (forwarded !== undefined && Object.is(positioning.top, forwarded.top)) ?\n 0 : standalone.top,\n };\n positioned = {\n ...resolved,\n ...(hasLeft ? { left: position.left } : {}),\n ...(hasTop ? { top: position.top } : {}),\n };\n }\n const final = systemFilter ? { ...positioned, filter: systemFilter.values } : positioned;\n assertResolvedValue(\n final,\n '',\n context,\n new Set(),\n opaqueStyleProperties.get(type) ?? new Set(),\n );\n return final;\n}\n\n\nfunction assertExplicitPositionBoundary(\n positioning: Readonly<PositioningStyle>,\n forwarded: Readonly<PositioningStyle> | undefined,\n consumesOuterPosition: boolean,\n context: Readonly<StyleResolutionContext>,\n): void {\n const position = positioning.position;\n if ((positioning.insetStart !== undefined || positioning.insetEnd !== undefined) && position !== 'absolute') {\n throw layoutDiagnostic({ component: context.component, property: 'position', value: position,\n algorithm: 'render-dispatch', constraints: context.constraints,\n reason: 'PIBBL_LAYOUT_UNSUPPORTED_POSITION: logical insets require a supported direct absolute Flex child' });\n }\n const hasRightOrBottom = positioning.right !== undefined || positioning.bottom !== undefined;\n if (position === undefined) {\n if (!hasRightOrBottom) return;\n throw layoutDiagnostic({\n component: context.component,\n property: positioning.right !== undefined ? 'right' : 'bottom',\n value: positioning.right ?? positioning.bottom,\n algorithm: 'render-dispatch',\n constraints: context.constraints,\n reason: 'PIBBL_LAYOUT_IGNORED_POSITION: right/bottom require an explicit position in a supported direct Flex child',\n });\n }\n if (position !== 'static' && position !== 'relative' && position !== 'absolute') {\n throw layoutDiagnostic({\n component: context.component,\n property: 'position',\n value: position,\n algorithm: 'render-dispatch',\n constraints: context.constraints,\n reason: 'PIBBL_LAYOUT_UNSUPPORTED_POSITION: uses an unsupported placement mode',\n });\n }\n if (consumesOuterPosition) return;\n if (forwarded !== undefined &&\n Object.is(positioning.position, forwarded.position) &&\n Object.is(positioning.left, forwarded.left) &&\n Object.is(positioning.right, forwarded.right) &&\n Object.is(positioning.top, forwarded.top) &&\n Object.is(positioning.bottom, forwarded.bottom) &&\n Object.is(positioning.insetStart, forwarded.insetStart) &&\n Object.is(positioning.insetEnd, forwarded.insetEnd)) return;\n throw layoutDiagnostic({\n component: context.component,\n property: 'position',\n value: position,\n algorithm: 'render-dispatch',\n constraints: context.constraints,\n reason: 'PIBBL_LAYOUT_UNSUPPORTED_POSITION: requires direct Flex placement or one exact forwarded position/inset style',\n });\n}\n\nfunction assertResolvedValue(\n value: unknown,\n property: string,\n context: Readonly<StyleResolutionContext>,\n seen: Set<object>,\n opaqueProperties: ReadonlySet<string>,\n): void {\n if (opaqueProperties.has(property)) return;\n if (typeof value === 'number') {\n if (!Number.isFinite(value)) {\n throw unresolvedDiagnostic(property, value, context, 'must be finite');\n }\n return;\n }\n if (typeof value === 'string') {\n if (\n !opaqueProperties.has(property) &&\n (value === 'auto' || value.endsWith('%'))\n ) {\n throw unresolvedDiagnostic(\n property,\n value,\n context,\n 'must resolve before the component callback is invoked',\n );\n }\n return;\n }\n if (!value || typeof value !== 'object' || seen.has(value)) return;\n if (property === 'custom' || property === 'filter') return;\n const prototype = Object.getPrototypeOf(value);\n if (!Array.isArray(value) && prototype !== Object.prototype && prototype !== null) {\n return;\n }\n seen.add(value);\n for (const [key, child] of Object.entries(value)) {\n if (key === 'custom') continue;\n assertResolvedValue(\n child,\n property ? `${property}.${key}` : key,\n context,\n seen,\n opaqueProperties,\n );\n }\n}\n\nfunction unresolvedDiagnostic(\n property: string,\n value: unknown,\n context: Readonly<StyleResolutionContext>,\n reason: string,\n) {\n return layoutDiagnostic({\n component: context.component,\n property: property || 'style',\n value,\n algorithm: context.algorithm,\n constraints: context.constraints,\n reason,\n });\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["_filter", "_transition", "withoutFilter"]
7
7
  }
@@ -14,3 +14,5 @@ import type { Length } from './types.js';
14
14
  * @see {@link LayoutDiagnosticContext}
15
15
  */
16
16
  export declare function resolveLength(value: Length, reference: number | undefined, property: string, context?: Readonly<LayoutDiagnosticContext>): number | undefined;
17
+ /** @internal Parse a percentage independently of its containing-size reference. */
18
+ export declare function parsePercentage(value: unknown, property: string, context?: Readonly<LayoutDiagnosticContext>): number;