@noego/wood 0.4.9 → 0.5.0

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 (493) hide show
  1. package/README.md +118 -42
  2. package/bin/axe.js +313 -98
  3. package/dist/{loader/__fixtures__/layouts/app.load.cjs → automation/actions.cjs} +3 -13
  4. package/dist/automation/actions.cjs.map +1 -0
  5. package/dist/automation/actions.d.cts +57 -0
  6. package/dist/automation/actions.d.ts +57 -0
  7. package/dist/automation/actions.js +1 -0
  8. package/dist/automation/actions.js.map +1 -0
  9. package/dist/automation/actions_executor.cjs +101 -0
  10. package/dist/automation/actions_executor.cjs.map +1 -0
  11. package/dist/automation/actions_executor.d.cts +16 -0
  12. package/dist/automation/actions_executor.d.ts +16 -0
  13. package/dist/automation/actions_executor.js +76 -0
  14. package/dist/automation/actions_executor.js.map +1 -0
  15. package/dist/automation/connection.cjs +86 -0
  16. package/dist/automation/connection.cjs.map +1 -0
  17. package/dist/automation/connection.d.cts +18 -0
  18. package/dist/automation/connection.d.ts +18 -0
  19. package/dist/automation/connection.js +51 -0
  20. package/dist/automation/connection.js.map +1 -0
  21. package/dist/{middleware/__fixtures__/middleware/sequence.cjs → automation/errors.cjs} +25 -22
  22. package/dist/automation/errors.cjs.map +1 -0
  23. package/dist/automation/errors.d.cts +31 -0
  24. package/dist/automation/errors.d.ts +31 -0
  25. package/dist/automation/errors.js +24 -0
  26. package/dist/automation/errors.js.map +1 -0
  27. package/dist/automation/index.cjs +49 -0
  28. package/dist/automation/index.cjs.map +1 -0
  29. package/dist/automation/index.d.cts +16 -0
  30. package/dist/automation/index.d.ts +16 -0
  31. package/dist/automation/index.js +15 -0
  32. package/dist/automation/index.js.map +1 -0
  33. package/dist/automation/introspection_reader.cjs +75 -0
  34. package/dist/automation/introspection_reader.cjs.map +1 -0
  35. package/dist/automation/introspection_reader.d.cts +20 -0
  36. package/dist/automation/introspection_reader.d.ts +20 -0
  37. package/dist/automation/introspection_reader.js +48 -0
  38. package/dist/automation/introspection_reader.js.map +1 -0
  39. package/dist/automation/locator.cjs +102 -0
  40. package/dist/automation/locator.cjs.map +1 -0
  41. package/dist/automation/locator.d.cts +51 -0
  42. package/dist/automation/locator.d.ts +51 -0
  43. package/dist/automation/locator.js +75 -0
  44. package/dist/automation/locator.js.map +1 -0
  45. package/dist/{loader/__fixtures__/views/test/page.load.cjs → automation/observation.cjs} +3 -13
  46. package/dist/automation/observation.cjs.map +1 -0
  47. package/dist/automation/observation.d.cts +44 -0
  48. package/dist/automation/observation.d.ts +44 -0
  49. package/dist/automation/observation.js +1 -0
  50. package/dist/automation/observation.js.map +1 -0
  51. package/dist/{controller/__fixtures__/controllers/test.cjs → automation/receipts.cjs} +3 -15
  52. package/dist/automation/receipts.cjs.map +1 -0
  53. package/dist/automation/receipts.d.cts +27 -0
  54. package/dist/automation/receipts.d.ts +27 -0
  55. package/dist/automation/receipts.js +1 -0
  56. package/dist/automation/receipts.js.map +1 -0
  57. package/dist/automation/scenario.cjs +696 -0
  58. package/dist/automation/scenario.cjs.map +1 -0
  59. package/dist/automation/scenario.d.cts +89 -0
  60. package/dist/automation/scenario.d.ts +89 -0
  61. package/dist/automation/scenario.js +660 -0
  62. package/dist/automation/scenario.js.map +1 -0
  63. package/dist/automation/scrolling.cjs +17 -0
  64. package/dist/automation/scrolling.cjs.map +1 -0
  65. package/dist/automation/scrolling.d.cts +51 -0
  66. package/dist/automation/scrolling.d.ts +51 -0
  67. package/dist/automation/scrolling.js +1 -0
  68. package/dist/automation/scrolling.js.map +1 -0
  69. package/dist/automation/scrolling_executor.cjs +109 -0
  70. package/dist/automation/scrolling_executor.cjs.map +1 -0
  71. package/dist/automation/scrolling_executor.d.cts +13 -0
  72. package/dist/automation/scrolling_executor.d.ts +13 -0
  73. package/dist/automation/scrolling_executor.js +84 -0
  74. package/dist/automation/scrolling_executor.js.map +1 -0
  75. package/dist/automation/target_identity.cjs +17 -0
  76. package/dist/automation/target_identity.cjs.map +1 -0
  77. package/dist/automation/target_identity.d.cts +28 -0
  78. package/dist/automation/target_identity.d.ts +28 -0
  79. package/dist/automation/target_identity.js +1 -0
  80. package/dist/automation/target_identity.js.map +1 -0
  81. package/dist/automation/target_registry.cjs +148 -0
  82. package/dist/automation/target_registry.cjs.map +1 -0
  83. package/dist/automation/target_registry.d.cts +32 -0
  84. package/dist/automation/target_registry.d.ts +32 -0
  85. package/dist/automation/target_registry.js +122 -0
  86. package/dist/automation/target_registry.js.map +1 -0
  87. package/dist/automation/waits.cjs +17 -0
  88. package/dist/automation/waits.cjs.map +1 -0
  89. package/dist/automation/waits.d.cts +44 -0
  90. package/dist/automation/waits.d.ts +44 -0
  91. package/dist/automation/waits.js +1 -0
  92. package/dist/automation/waits.js.map +1 -0
  93. package/dist/automation/waits_executor.cjs +104 -0
  94. package/dist/automation/waits_executor.cjs.map +1 -0
  95. package/dist/automation/waits_executor.d.cts +14 -0
  96. package/dist/automation/waits_executor.d.ts +14 -0
  97. package/dist/automation/waits_executor.js +79 -0
  98. package/dist/automation/waits_executor.js.map +1 -0
  99. package/dist/bridge/backend_bridge.cjs.map +1 -1
  100. package/dist/bridge/backend_bridge.js.map +1 -1
  101. package/dist/client/index.cjs +78 -21
  102. package/dist/client/index.cjs.map +1 -1
  103. package/dist/client/index.d.cts +19 -3
  104. package/dist/client/index.d.ts +19 -3
  105. package/dist/client/index.js +80 -22
  106. package/dist/client/index.js.map +1 -1
  107. package/dist/client/renderer_log_transport.cjs +151 -0
  108. package/dist/client/renderer_log_transport.cjs.map +1 -0
  109. package/dist/client/renderer_log_transport.d.cts +54 -0
  110. package/dist/client/renderer_log_transport.d.ts +54 -0
  111. package/dist/client/renderer_log_transport.js +123 -0
  112. package/dist/client/renderer_log_transport.js.map +1 -0
  113. package/dist/codegen/controller_registration_generator.cjs +13 -2
  114. package/dist/codegen/controller_registration_generator.cjs.map +1 -1
  115. package/dist/codegen/controller_registration_generator.d.cts +12 -1
  116. package/dist/codegen/controller_registration_generator.d.ts +12 -1
  117. package/dist/codegen/controller_registration_generator.js +10 -1
  118. package/dist/codegen/controller_registration_generator.js.map +1 -1
  119. package/dist/codegen/index.d.cts +1 -0
  120. package/dist/codegen/index.d.ts +1 -0
  121. package/dist/codegen/preload_generator.cjs +13 -6
  122. package/dist/codegen/preload_generator.cjs.map +1 -1
  123. package/dist/codegen/preload_generator.d.cts +11 -2
  124. package/dist/codegen/preload_generator.d.ts +11 -2
  125. package/dist/codegen/preload_generator.js +13 -6
  126. package/dist/codegen/preload_generator.js.map +1 -1
  127. package/dist/codegen/renderer_app_generator.cjs +95 -44
  128. package/dist/codegen/renderer_app_generator.cjs.map +1 -1
  129. package/dist/codegen/renderer_app_generator.js +95 -44
  130. package/dist/codegen/renderer_app_generator.js.map +1 -1
  131. package/dist/codegen/type_generator.cjs +1 -0
  132. package/dist/codegen/type_generator.cjs.map +1 -1
  133. package/dist/codegen/type_generator.js +1 -0
  134. package/dist/codegen/type_generator.js.map +1 -1
  135. package/dist/config/config_parser.cjs +95 -4
  136. package/dist/config/config_parser.cjs.map +1 -1
  137. package/dist/config/config_parser.d.cts +10 -2
  138. package/dist/config/config_parser.d.ts +10 -2
  139. package/dist/config/config_parser.js +92 -3
  140. package/dist/config/config_parser.js.map +1 -1
  141. package/dist/config/index.cjs +6 -2
  142. package/dist/config/index.cjs.map +1 -1
  143. package/dist/config/index.d.cts +2 -2
  144. package/dist/config/index.d.ts +2 -2
  145. package/dist/config/index.js +8 -2
  146. package/dist/config/index.js.map +1 -1
  147. package/dist/controller/controller_resolver.cjs +51 -3
  148. package/dist/controller/controller_resolver.cjs.map +1 -1
  149. package/dist/controller/controller_resolver.d.cts +27 -4
  150. package/dist/controller/controller_resolver.d.ts +27 -4
  151. package/dist/controller/controller_resolver.js +48 -2
  152. package/dist/controller/controller_resolver.js.map +1 -1
  153. package/dist/controller/index.cjs +6 -2
  154. package/dist/controller/index.cjs.map +1 -1
  155. package/dist/controller/index.d.cts +1 -1
  156. package/dist/controller/index.d.ts +1 -1
  157. package/dist/controller/index.js +4 -2
  158. package/dist/controller/index.js.map +1 -1
  159. package/dist/dev/wood_dev_server.cjs +4 -1
  160. package/dist/dev/wood_dev_server.cjs.map +1 -1
  161. package/dist/dev/wood_dev_server.js +5 -2
  162. package/dist/dev/wood_dev_server.js.map +1 -1
  163. package/dist/dev/yaml_watcher.cjs +1 -1
  164. package/dist/dev/yaml_watcher.cjs.map +1 -1
  165. package/dist/dev/yaml_watcher.d.cts +4 -0
  166. package/dist/dev/yaml_watcher.d.ts +4 -0
  167. package/dist/dev/yaml_watcher.js +1 -1
  168. package/dist/dev/yaml_watcher.js.map +1 -1
  169. package/dist/frontend/frontend_lifecycle.cjs +74 -0
  170. package/dist/frontend/frontend_lifecycle.cjs.map +1 -0
  171. package/dist/frontend/frontend_lifecycle.d.cts +50 -0
  172. package/dist/frontend/frontend_lifecycle.d.ts +50 -0
  173. package/dist/frontend/frontend_lifecycle.js +50 -0
  174. package/dist/frontend/frontend_lifecycle.js.map +1 -0
  175. package/dist/frontend/frontend_page.cjs +122 -0
  176. package/dist/frontend/frontend_page.cjs.map +1 -0
  177. package/dist/frontend/frontend_page.d.cts +62 -0
  178. package/dist/frontend/frontend_page.d.ts +62 -0
  179. package/dist/frontend/frontend_page.js +98 -0
  180. package/dist/frontend/frontend_page.js.map +1 -0
  181. package/dist/frontend/frontend_surface.cjs +249 -0
  182. package/dist/frontend/frontend_surface.cjs.map +1 -0
  183. package/dist/frontend/frontend_surface.d.cts +64 -0
  184. package/dist/frontend/frontend_surface.d.ts +64 -0
  185. package/dist/frontend/frontend_surface.js +224 -0
  186. package/dist/frontend/frontend_surface.js.map +1 -0
  187. package/dist/frontend/index.cjs +52 -0
  188. package/dist/frontend/index.cjs.map +1 -0
  189. package/dist/frontend/index.d.cts +10 -0
  190. package/dist/frontend/index.d.ts +10 -0
  191. package/dist/frontend/index.js +19 -0
  192. package/dist/frontend/index.js.map +1 -0
  193. package/dist/frontend/page_catalog.cjs +135 -0
  194. package/dist/frontend/page_catalog.cjs.map +1 -0
  195. package/dist/frontend/page_catalog.d.cts +56 -0
  196. package/dist/frontend/page_catalog.d.ts +56 -0
  197. package/dist/frontend/page_catalog.js +108 -0
  198. package/dist/frontend/page_catalog.js.map +1 -0
  199. package/dist/frontend/tracked_transport.cjs +55 -0
  200. package/dist/frontend/tracked_transport.cjs.map +1 -0
  201. package/dist/frontend/tracked_transport.d.cts +36 -0
  202. package/dist/frontend/tracked_transport.d.ts +36 -0
  203. package/dist/frontend/tracked_transport.js +31 -0
  204. package/dist/frontend/tracked_transport.js.map +1 -0
  205. package/dist/frontend/work_registry.cjs +153 -0
  206. package/dist/frontend/work_registry.cjs.map +1 -0
  207. package/dist/frontend/work_registry.d.cts +70 -0
  208. package/dist/frontend/work_registry.d.ts +70 -0
  209. package/dist/frontend/work_registry.js +128 -0
  210. package/dist/frontend/work_registry.js.map +1 -0
  211. package/dist/index.cjs +24 -0
  212. package/dist/index.cjs.map +1 -1
  213. package/dist/index.d.cts +11 -7
  214. package/dist/index.d.ts +11 -7
  215. package/dist/index.js +27 -4
  216. package/dist/index.js.map +1 -1
  217. package/dist/main/index.cjs +10 -0
  218. package/dist/main/index.cjs.map +1 -1
  219. package/dist/main/index.d.cts +14 -2
  220. package/dist/main/index.d.ts +14 -2
  221. package/dist/main/index.js +16 -0
  222. package/dist/main/index.js.map +1 -1
  223. package/dist/middleware/middleware_resolver.cjs +22 -1
  224. package/dist/middleware/middleware_resolver.cjs.map +1 -1
  225. package/dist/middleware/middleware_resolver.d.cts +13 -1
  226. package/dist/middleware/middleware_resolver.d.ts +13 -1
  227. package/dist/middleware/middleware_resolver.js +22 -1
  228. package/dist/middleware/middleware_resolver.js.map +1 -1
  229. package/dist/navigation/automation_introspection.cjs +110 -0
  230. package/dist/navigation/automation_introspection.cjs.map +1 -0
  231. package/dist/navigation/automation_introspection.d.cts +60 -0
  232. package/dist/navigation/automation_introspection.d.ts +60 -0
  233. package/dist/navigation/automation_introspection.js +85 -0
  234. package/dist/navigation/automation_introspection.js.map +1 -0
  235. package/dist/navigation/index.cjs +10 -2
  236. package/dist/navigation/index.cjs.map +1 -1
  237. package/dist/navigation/index.d.cts +27 -1
  238. package/dist/navigation/index.d.ts +27 -1
  239. package/dist/navigation/index.js +6 -1
  240. package/dist/navigation/index.js.map +1 -1
  241. package/dist/{middleware/__fixtures__/middleware/auth.cjs → navigation/layout_preservation.cjs} +18 -20
  242. package/dist/navigation/layout_preservation.cjs.map +1 -0
  243. package/dist/navigation/layout_preservation.d.cts +2 -0
  244. package/dist/navigation/layout_preservation.d.ts +2 -0
  245. package/dist/navigation/layout_preservation.js +18 -0
  246. package/dist/navigation/layout_preservation.js.map +1 -0
  247. package/dist/parser/index.cjs +2 -0
  248. package/dist/parser/index.cjs.map +1 -1
  249. package/dist/parser/index.d.cts +1 -1
  250. package/dist/parser/index.d.ts +1 -1
  251. package/dist/parser/index.js +2 -1
  252. package/dist/parser/index.js.map +1 -1
  253. package/dist/parser/operations_parser.cjs +6 -0
  254. package/dist/parser/operations_parser.cjs.map +1 -1
  255. package/dist/parser/operations_parser.d.cts +9 -2
  256. package/dist/parser/operations_parser.d.ts +9 -2
  257. package/dist/parser/operations_parser.js +5 -0
  258. package/dist/parser/operations_parser.js.map +1 -1
  259. package/dist/parser/views_parser.cjs.map +1 -1
  260. package/dist/parser/views_parser.js.map +1 -1
  261. package/dist/router/index.d.cts +1 -0
  262. package/dist/router/index.d.ts +1 -0
  263. package/dist/router/wood_router.cjs +35 -3
  264. package/dist/router/wood_router.cjs.map +1 -1
  265. package/dist/router/wood_router.d.cts +15 -0
  266. package/dist/router/wood_router.d.ts +15 -0
  267. package/dist/router/wood_router.js +36 -4
  268. package/dist/router/wood_router.js.map +1 -1
  269. package/dist/runtime/get_container.cjs +9 -34
  270. package/dist/runtime/get_container.cjs.map +1 -1
  271. package/dist/runtime/get_container.d.cts +24 -4
  272. package/dist/runtime/get_container.d.ts +24 -4
  273. package/dist/runtime/get_container.js +8 -23
  274. package/dist/runtime/get_container.js.map +1 -1
  275. package/dist/runtime/index.cjs +9 -0
  276. package/dist/runtime/index.cjs.map +1 -1
  277. package/dist/runtime/index.d.cts +5 -2
  278. package/dist/runtime/index.d.ts +5 -2
  279. package/dist/runtime/index.js +10 -1
  280. package/dist/runtime/index.js.map +1 -1
  281. package/dist/runtime/renderer_config_extension.cjs +50 -0
  282. package/dist/runtime/renderer_config_extension.cjs.map +1 -0
  283. package/dist/runtime/renderer_config_extension.d.cts +19 -0
  284. package/dist/runtime/renderer_config_extension.d.ts +19 -0
  285. package/dist/runtime/renderer_config_extension.js +24 -0
  286. package/dist/runtime/renderer_config_extension.js.map +1 -0
  287. package/dist/runtime/renderer_log_batch_receiver.cjs +73 -0
  288. package/dist/runtime/renderer_log_batch_receiver.cjs.map +1 -0
  289. package/dist/runtime/renderer_log_batch_receiver.d.cts +29 -0
  290. package/dist/runtime/renderer_log_batch_receiver.d.ts +29 -0
  291. package/dist/runtime/renderer_log_batch_receiver.js +48 -0
  292. package/dist/runtime/renderer_log_batch_receiver.js.map +1 -0
  293. package/dist/runtime/renderer_trace_batch_receiver_registry.d.cts +1 -1
  294. package/dist/runtime/renderer_trace_batch_receiver_registry.d.ts +1 -1
  295. package/dist/runtime/runtime.cjs +14 -0
  296. package/dist/runtime/runtime.cjs.map +1 -1
  297. package/dist/runtime/runtime.d.cts +2 -1
  298. package/dist/runtime/runtime.d.ts +2 -1
  299. package/dist/runtime/runtime.js +14 -0
  300. package/dist/runtime/runtime.js.map +1 -1
  301. package/dist/stick/index.cjs.map +1 -1
  302. package/dist/stick/index.js.map +1 -1
  303. package/dist/testing/automation_assertions.cjs +417 -0
  304. package/dist/testing/automation_assertions.cjs.map +1 -0
  305. package/dist/testing/automation_assertions.d.cts +44 -0
  306. package/dist/testing/automation_assertions.d.ts +44 -0
  307. package/dist/testing/automation_assertions.js +385 -0
  308. package/dist/testing/automation_assertions.js.map +1 -0
  309. package/dist/testing/browser.cjs +130 -57
  310. package/dist/testing/browser.cjs.map +1 -1
  311. package/dist/testing/browser.d.cts +10 -4
  312. package/dist/testing/browser.d.ts +10 -4
  313. package/dist/testing/browser.js +132 -53
  314. package/dist/testing/browser.js.map +1 -1
  315. package/dist/testing/create_controller_harness.cjs +28 -8
  316. package/dist/testing/create_controller_harness.cjs.map +1 -1
  317. package/dist/testing/create_controller_harness.d.cts +18 -2
  318. package/dist/testing/create_controller_harness.d.ts +18 -2
  319. package/dist/testing/create_controller_harness.js +28 -8
  320. package/dist/testing/create_controller_harness.js.map +1 -1
  321. package/dist/testing/create_router_bridge.d.cts +1 -0
  322. package/dist/testing/create_router_bridge.d.ts +1 -0
  323. package/dist/testing/create_test_router.d.cts +1 -0
  324. package/dist/testing/create_test_router.d.ts +1 -0
  325. package/dist/testing/geometry.cjs +109 -0
  326. package/dist/testing/geometry.cjs.map +1 -0
  327. package/dist/testing/geometry.d.cts +45 -0
  328. package/dist/testing/geometry.d.ts +45 -0
  329. package/dist/testing/geometry.js +79 -0
  330. package/dist/testing/geometry.js.map +1 -0
  331. package/dist/testing/index.cjs +62 -2
  332. package/dist/testing/index.cjs.map +1 -1
  333. package/dist/testing/index.d.cts +23 -4
  334. package/dist/testing/index.d.ts +23 -4
  335. package/dist/testing/index.js +50 -2
  336. package/dist/testing/index.js.map +1 -1
  337. package/dist/{controller/__fixtures__/controllers/not_a_class.cjs → testing/test_wood.cjs} +15 -7
  338. package/dist/testing/test_wood.cjs.map +1 -0
  339. package/dist/testing/test_wood.d.cts +16 -0
  340. package/dist/testing/test_wood.d.ts +16 -0
  341. package/dist/testing/test_wood.js +12 -0
  342. package/dist/testing/test_wood.js.map +1 -0
  343. package/dist/testing/test_wood_config.cjs +272 -0
  344. package/dist/testing/test_wood_config.cjs.map +1 -0
  345. package/dist/testing/test_wood_config.d.cts +111 -0
  346. package/dist/testing/test_wood_config.d.ts +111 -0
  347. package/dist/testing/test_wood_config.js +247 -0
  348. package/dist/testing/test_wood_config.js.map +1 -0
  349. package/dist/testing/wood_config_source.cjs +146 -0
  350. package/dist/testing/wood_config_source.cjs.map +1 -0
  351. package/dist/testing/wood_config_source.d.cts +36 -0
  352. package/dist/testing/wood_config_source.d.ts +36 -0
  353. package/dist/testing/wood_config_source.js +112 -0
  354. package/dist/testing/wood_config_source.js.map +1 -0
  355. package/dist/testing/wood_env_renderer.cjs +210 -0
  356. package/dist/testing/wood_env_renderer.cjs.map +1 -0
  357. package/dist/testing/wood_env_renderer.d.cts +74 -0
  358. package/dist/testing/wood_env_renderer.d.ts +74 -0
  359. package/dist/testing/wood_env_renderer.js +188 -0
  360. package/dist/testing/wood_env_renderer.js.map +1 -0
  361. package/dist/testing/wood_test_selection.cjs +94 -0
  362. package/dist/testing/wood_test_selection.cjs.map +1 -0
  363. package/dist/testing/wood_test_selection.d.cts +39 -0
  364. package/dist/testing/wood_test_selection.d.ts +39 -0
  365. package/dist/testing/wood_test_selection.js +68 -0
  366. package/dist/testing/wood_test_selection.js.map +1 -0
  367. package/dist/trace-testing/index.d.cts +1 -2
  368. package/dist/trace-testing/index.d.ts +1 -2
  369. package/dist/trace-testing/trace_recorder.cjs +1 -1
  370. package/dist/trace-testing/trace_recorder.cjs.map +1 -1
  371. package/dist/trace-testing/trace_recorder.d.cts +1 -2
  372. package/dist/trace-testing/trace_recorder.d.ts +1 -2
  373. package/dist/trace-testing/trace_recorder.js +1 -1
  374. package/dist/trace-testing/trace_recorder.js.map +1 -1
  375. package/dist/trace-transport/index.d.cts +1 -1
  376. package/dist/trace-transport/index.d.ts +1 -1
  377. package/dist/{trace_hub-Cob54qRx.d.cts → trace_hub-Cpo_nVze.d.cts} +21 -1
  378. package/dist/{trace_hub-Cob54qRx.d.ts → trace_hub-Cpo_nVze.d.ts} +21 -1
  379. package/dist/tracing/index.cjs +9 -2
  380. package/dist/tracing/index.cjs.map +1 -1
  381. package/dist/tracing/index.d.cts +3 -2
  382. package/dist/tracing/index.d.ts +3 -2
  383. package/dist/tracing/index.js +7 -1
  384. package/dist/tracing/index.js.map +1 -1
  385. package/dist/tracing/renderer_trace_batch_host.d.cts +1 -1
  386. package/dist/tracing/renderer_trace_batch_host.d.ts +1 -1
  387. package/dist/tracing/renderer_trace_batch_transport.cjs +48 -6
  388. package/dist/tracing/renderer_trace_batch_transport.cjs.map +1 -1
  389. package/dist/tracing/renderer_trace_batch_transport.d.cts +17 -1
  390. package/dist/tracing/renderer_trace_batch_transport.d.ts +17 -1
  391. package/dist/tracing/renderer_trace_batch_transport.js +48 -6
  392. package/dist/tracing/renderer_trace_batch_transport.js.map +1 -1
  393. package/dist/tracing/trace_batch_adapter.cjs +110 -0
  394. package/dist/tracing/trace_batch_adapter.cjs.map +1 -0
  395. package/dist/tracing/trace_batch_adapter.d.cts +36 -0
  396. package/dist/tracing/trace_batch_adapter.d.ts +36 -0
  397. package/dist/tracing/trace_batch_adapter.js +86 -0
  398. package/dist/tracing/trace_batch_adapter.js.map +1 -0
  399. package/dist/tracing/trace_commit_writer.d.cts +1 -1
  400. package/dist/tracing/trace_commit_writer.d.ts +1 -1
  401. package/dist/tracing/trace_hub.cjs +87 -20
  402. package/dist/tracing/trace_hub.cjs.map +1 -1
  403. package/dist/tracing/trace_hub.d.cts +1 -1
  404. package/dist/tracing/trace_hub.d.ts +1 -1
  405. package/dist/tracing/trace_hub.js +85 -20
  406. package/dist/tracing/trace_hub.js.map +1 -1
  407. package/dist/tracing/trace_provider.cjs +21 -6
  408. package/dist/tracing/trace_provider.cjs.map +1 -1
  409. package/dist/tracing/trace_provider.d.cts +13 -4
  410. package/dist/tracing/trace_provider.d.ts +13 -4
  411. package/dist/tracing/trace_provider.js +22 -7
  412. package/dist/tracing/trace_provider.js.map +1 -1
  413. package/dist/tracing/types/wood_trace_batch.types.cjs.map +1 -1
  414. package/dist/tracing/types/wood_trace_batch.types.d.cts +15 -1
  415. package/dist/tracing/types/wood_trace_batch.types.d.ts +15 -1
  416. package/dist/tracing/types/wood_trace_sink.types.d.cts +1 -1
  417. package/dist/tracing/types/wood_trace_sink.types.d.ts +1 -1
  418. package/dist/tracing/wood_trace_batch_contract.cjs +2 -0
  419. package/dist/tracing/wood_trace_batch_contract.cjs.map +1 -1
  420. package/dist/tracing/wood_trace_batch_contract.d.cts +1 -1
  421. package/dist/tracing/wood_trace_batch_contract.d.ts +1 -1
  422. package/dist/tracing/wood_trace_batch_contract.js +2 -0
  423. package/dist/tracing/wood_trace_batch_contract.js.map +1 -1
  424. package/dist/transport/build_transport_bridge.cjs +4 -2
  425. package/dist/transport/build_transport_bridge.cjs.map +1 -1
  426. package/dist/transport/build_transport_bridge.d.cts +7 -1
  427. package/dist/transport/build_transport_bridge.d.ts +7 -1
  428. package/dist/transport/build_transport_bridge.js +2 -1
  429. package/dist/transport/build_transport_bridge.js.map +1 -1
  430. package/dist/transport/in_process_router_transport.d.cts +1 -0
  431. package/dist/transport/in_process_router_transport.d.ts +1 -0
  432. package/dist/transport/index.d.cts +1 -0
  433. package/dist/transport/index.d.ts +1 -0
  434. package/dist/types/config.cjs.map +1 -1
  435. package/dist/types/config.d.cts +47 -1
  436. package/dist/types/config.d.ts +47 -1
  437. package/dist/types/context.cjs +12 -0
  438. package/dist/types/context.cjs.map +1 -1
  439. package/dist/types/context.d.cts +27 -1
  440. package/dist/types/context.d.ts +27 -1
  441. package/dist/types/context.js +4 -0
  442. package/dist/types/context.js.map +1 -1
  443. package/dist/types/index.d.cts +2 -2
  444. package/dist/types/index.d.ts +2 -2
  445. package/dist/types/operations.cjs.map +1 -1
  446. package/dist/types/operations.d.cts +2 -0
  447. package/dist/types/operations.d.ts +2 -0
  448. package/docs/axe.md +706 -0
  449. package/package.json +19 -5
  450. package/src/components/NavigationShell.scopes.browser.test.ts +363 -0
  451. package/src/components/NavigationShell.svelte +126 -49
  452. package/dist/controller/__fixtures__/controllers/chat.cjs +0 -32
  453. package/dist/controller/__fixtures__/controllers/chat.cjs.map +0 -1
  454. package/dist/controller/__fixtures__/controllers/chat.d.cts +0 -11
  455. package/dist/controller/__fixtures__/controllers/chat.d.ts +0 -11
  456. package/dist/controller/__fixtures__/controllers/chat.js +0 -12
  457. package/dist/controller/__fixtures__/controllers/chat.js.map +0 -1
  458. package/dist/controller/__fixtures__/controllers/not_a_class.cjs.map +0 -1
  459. package/dist/controller/__fixtures__/controllers/not_a_class.d.cts +0 -3
  460. package/dist/controller/__fixtures__/controllers/not_a_class.d.ts +0 -3
  461. package/dist/controller/__fixtures__/controllers/not_a_class.js +0 -5
  462. package/dist/controller/__fixtures__/controllers/not_a_class.js.map +0 -1
  463. package/dist/controller/__fixtures__/controllers/settings.controller.cjs +0 -32
  464. package/dist/controller/__fixtures__/controllers/settings.controller.cjs.map +0 -1
  465. package/dist/controller/__fixtures__/controllers/settings.controller.d.cts +0 -12
  466. package/dist/controller/__fixtures__/controllers/settings.controller.d.ts +0 -12
  467. package/dist/controller/__fixtures__/controllers/settings.controller.js +0 -12
  468. package/dist/controller/__fixtures__/controllers/settings.controller.js.map +0 -1
  469. package/dist/controller/__fixtures__/controllers/test.cjs.map +0 -1
  470. package/dist/controller/__fixtures__/controllers/test.d.cts +0 -7
  471. package/dist/controller/__fixtures__/controllers/test.d.ts +0 -7
  472. package/dist/controller/__fixtures__/controllers/test.js +0 -9
  473. package/dist/controller/__fixtures__/controllers/test.js.map +0 -1
  474. package/dist/loader/__fixtures__/layouts/app.load.cjs.map +0 -1
  475. package/dist/loader/__fixtures__/layouts/app.load.d.cts +0 -5
  476. package/dist/loader/__fixtures__/layouts/app.load.d.ts +0 -5
  477. package/dist/loader/__fixtures__/layouts/app.load.js +0 -7
  478. package/dist/loader/__fixtures__/layouts/app.load.js.map +0 -1
  479. package/dist/loader/__fixtures__/views/test/page.load.cjs.map +0 -1
  480. package/dist/loader/__fixtures__/views/test/page.load.d.cts +0 -6
  481. package/dist/loader/__fixtures__/views/test/page.load.d.ts +0 -6
  482. package/dist/loader/__fixtures__/views/test/page.load.js +0 -7
  483. package/dist/loader/__fixtures__/views/test/page.load.js.map +0 -1
  484. package/dist/middleware/__fixtures__/middleware/auth.cjs.map +0 -1
  485. package/dist/middleware/__fixtures__/middleware/auth.d.cts +0 -6
  486. package/dist/middleware/__fixtures__/middleware/auth.d.ts +0 -6
  487. package/dist/middleware/__fixtures__/middleware/auth.js +0 -19
  488. package/dist/middleware/__fixtures__/middleware/auth.js.map +0 -1
  489. package/dist/middleware/__fixtures__/middleware/sequence.cjs.map +0 -1
  490. package/dist/middleware/__fixtures__/middleware/sequence.d.cts +0 -7
  491. package/dist/middleware/__fixtures__/middleware/sequence.d.ts +0 -7
  492. package/dist/middleware/__fixtures__/middleware/sequence.js +0 -21
  493. package/dist/middleware/__fixtures__/middleware/sequence.js.map +0 -1
@@ -1,10 +1,10 @@
1
- import { c as TraceLevel } from '../trace_hub-Cob54qRx.cjs';
1
+ import { c as TraceLevel } from '../trace_hub-Cpo_nVze.cjs';
2
2
  import { TraceRecorder } from '../trace-testing/trace_recorder.cjs';
3
3
  import { WoodRpcTransport } from '../transport/wood_rpc_transport.cjs';
4
+ import { RectAxis } from './geometry.cjs';
4
5
  import 'rxjs';
5
6
  import '@noego/trace/testing';
6
7
  import '../tracing/trace_provider.cjs';
7
- import '@noego/ioc';
8
8
 
9
9
  type MaybePromise<T> = T | Promise<T>;
10
10
  type BrowserName = 'chromium' | 'firefox' | 'webkit';
@@ -156,7 +156,7 @@ interface WoodRectSnapshot {
156
156
  height: number;
157
157
  }
158
158
  /** Axis along which edge-to-edge spacing is measured. */
159
- type WoodSpacingAxis = 'horizontal' | 'vertical';
159
+ type WoodSpacingAxis = RectAxis;
160
160
  /**
161
161
  * Description of the top-most element painted at a hit-test point, plus its
162
162
  * relationship to the queried target. `document.elementFromPoint` honours
@@ -394,6 +394,12 @@ declare function createBrowserBridgeFixture(input: WoodBridgeFixtureInput | unde
394
394
  manifest: RuntimeBridgeManifestEntry[];
395
395
  bridgeInit: string;
396
396
  };
397
+ declare function startSharedBrowserViteServer(input: {
398
+ rootDir: string;
399
+ }): Promise<{
400
+ url: string;
401
+ close: () => Promise<void>;
402
+ }>;
397
403
  declare function createHarness(config?: WoodBrowserHarnessConfig): Promise<WoodBrowserHarness>;
398
404
  declare const browser: {
399
405
  createHarness: typeof createHarness;
@@ -413,4 +419,4 @@ declare global {
413
419
  }
414
420
  }
415
421
 
416
- export { type MountComponentOptions, type MountRouteOptions, type MountTreeOptions, type MountedWoodBridge, type MountedWoodComponent, type MountedWoodNavigation, type MountedWoodRoute, type MountedWoodSurface, type MountedWoodTree, type WoodBridgeFixtureContext, type WoodBridgeFixtureInput, type WoodBridgeRecordedCall, type WoodBridgeRecordedEvent, type WoodBrowserExpect, type WoodBrowserHarness, type WoodBrowserHarnessConfig, type WoodBrowserPageContext, type WoodBrowserTraceConfig, type WoodHitTestResult, type WoodRectSnapshot, type WoodRpcManifestEntryInput, type WoodSpacingAxis, type WoodViewport, browser, createBrowserBridgeFixture };
422
+ export { type MountComponentOptions, type MountRouteOptions, type MountTreeOptions, type MountedWoodBridge, type MountedWoodComponent, type MountedWoodNavigation, type MountedWoodRoute, type MountedWoodSurface, type MountedWoodTree, type WoodBridgeFixtureContext, type WoodBridgeFixtureInput, type WoodBridgeRecordedCall, type WoodBridgeRecordedEvent, type WoodBrowserExpect, type WoodBrowserHarness, type WoodBrowserHarnessConfig, type WoodBrowserPageContext, type WoodBrowserTraceConfig, type WoodHitTestResult, type WoodRectSnapshot, type WoodRpcManifestEntryInput, type WoodSpacingAxis, type WoodViewport, browser, createBrowserBridgeFixture, startSharedBrowserViteServer };
@@ -1,10 +1,10 @@
1
- import { c as TraceLevel } from '../trace_hub-Cob54qRx.js';
1
+ import { c as TraceLevel } from '../trace_hub-Cpo_nVze.js';
2
2
  import { TraceRecorder } from '../trace-testing/trace_recorder.js';
3
3
  import { WoodRpcTransport } from '../transport/wood_rpc_transport.js';
4
+ import { RectAxis } from './geometry.js';
4
5
  import 'rxjs';
5
6
  import '@noego/trace/testing';
6
7
  import '../tracing/trace_provider.js';
7
- import '@noego/ioc';
8
8
 
9
9
  type MaybePromise<T> = T | Promise<T>;
10
10
  type BrowserName = 'chromium' | 'firefox' | 'webkit';
@@ -156,7 +156,7 @@ interface WoodRectSnapshot {
156
156
  height: number;
157
157
  }
158
158
  /** Axis along which edge-to-edge spacing is measured. */
159
- type WoodSpacingAxis = 'horizontal' | 'vertical';
159
+ type WoodSpacingAxis = RectAxis;
160
160
  /**
161
161
  * Description of the top-most element painted at a hit-test point, plus its
162
162
  * relationship to the queried target. `document.elementFromPoint` honours
@@ -394,6 +394,12 @@ declare function createBrowserBridgeFixture(input: WoodBridgeFixtureInput | unde
394
394
  manifest: RuntimeBridgeManifestEntry[];
395
395
  bridgeInit: string;
396
396
  };
397
+ declare function startSharedBrowserViteServer(input: {
398
+ rootDir: string;
399
+ }): Promise<{
400
+ url: string;
401
+ close: () => Promise<void>;
402
+ }>;
397
403
  declare function createHarness(config?: WoodBrowserHarnessConfig): Promise<WoodBrowserHarness>;
398
404
  declare const browser: {
399
405
  createHarness: typeof createHarness;
@@ -413,4 +419,4 @@ declare global {
413
419
  }
414
420
  }
415
421
 
416
- export { type MountComponentOptions, type MountRouteOptions, type MountTreeOptions, type MountedWoodBridge, type MountedWoodComponent, type MountedWoodNavigation, type MountedWoodRoute, type MountedWoodSurface, type MountedWoodTree, type WoodBridgeFixtureContext, type WoodBridgeFixtureInput, type WoodBridgeRecordedCall, type WoodBridgeRecordedEvent, type WoodBrowserExpect, type WoodBrowserHarness, type WoodBrowserHarnessConfig, type WoodBrowserPageContext, type WoodBrowserTraceConfig, type WoodHitTestResult, type WoodRectSnapshot, type WoodRpcManifestEntryInput, type WoodSpacingAxis, type WoodViewport, browser, createBrowserBridgeFixture };
422
+ export { type MountComponentOptions, type MountRouteOptions, type MountTreeOptions, type MountedWoodBridge, type MountedWoodComponent, type MountedWoodNavigation, type MountedWoodRoute, type MountedWoodSurface, type MountedWoodTree, type WoodBridgeFixtureContext, type WoodBridgeFixtureInput, type WoodBridgeRecordedCall, type WoodBridgeRecordedEvent, type WoodBrowserExpect, type WoodBrowserHarness, type WoodBrowserHarnessConfig, type WoodBrowserPageContext, type WoodBrowserTraceConfig, type WoodHitTestResult, type WoodRectSnapshot, type WoodRpcManifestEntryInput, type WoodSpacingAxis, type WoodViewport, browser, createBrowserBridgeFixture, startSharedBrowserViteServer };
@@ -7,6 +7,14 @@ import {
7
7
  dispatchRendererTracePayload
8
8
  } from "../tracing/index.js";
9
9
  import { TraceRecorder } from "../trace-testing/index.js";
10
+ import {
11
+ axisEdges,
12
+ axisGap,
13
+ evenSpacing as evenSpacingRects,
14
+ rectsOverlap,
15
+ sharedEdges as sharedRectEdges,
16
+ snapshotRectsOverlap
17
+ } from "./geometry.js";
10
18
  const DEFAULT_VIEWPORT = {
11
19
  width: 1280,
12
20
  height: 800
@@ -16,6 +24,7 @@ const DEFAULT_RESOURCE_CLOSE_TIMEOUT_MS = 5e3;
16
24
  const WORKER_RUNTIME_IDLE_CLOSE_MS = 5e3;
17
25
  const browserWorkerRuntimes = /* @__PURE__ */ new Map();
18
26
  const browserWorkerCacheDirs = /* @__PURE__ */ new Set();
27
+ const browserConnectWarnings = /* @__PURE__ */ new Set();
19
28
  process.on("exit", () => {
20
29
  for (const cacheDir of browserWorkerCacheDirs) {
21
30
  try {
@@ -179,8 +188,9 @@ function buildBridgeInitScript(manifest, traceConfig, transportMode) {
179
188
  })();
180
189
  `;
181
190
  }
182
- async function loadPlaywright(browserName) {
183
- const playwright = await import("playwright");
191
+ async function loadPlaywright(browserName, rootDir) {
192
+ const playwrightPath = resolvePackageModule(rootDir, "playwright");
193
+ const playwright = playwrightPath ? await import(pathToFileURL(playwrightPath).href) : await import("playwright");
184
194
  return playwright[browserName];
185
195
  }
186
196
  async function loadVite() {
@@ -281,7 +291,14 @@ async function createViteServer(rootDir, cacheDir) {
281
291
  resolve: {
282
292
  dedupe: ["svelte"]
283
293
  },
284
- server: { port: 0, fs: { allow: [rootDir, os.tmpdir()] } }
294
+ server: {
295
+ port: 0,
296
+ // Browser harnesses write independent HTML/entry files concurrently.
297
+ // HMR would broadcast another harness's temp-file changes to every page,
298
+ // causing unrelated mounts to reload; tests only need request-time transforms.
299
+ hmr: false,
300
+ fs: { allow: [rootDir, os.tmpdir()] }
301
+ }
285
302
  });
286
303
  await server.listen();
287
304
  return server;
@@ -290,21 +307,53 @@ function workerRuntimeKey(input) {
290
307
  return [
291
308
  input.rootDir,
292
309
  input.browserName,
293
- input.headless ? "headless" : "headed"
310
+ input.headless ? "headless" : "headed",
311
+ input.wsEndpoint ?? "local-browser",
312
+ input.viteUrl ?? "local-vite"
294
313
  ].join("::");
295
314
  }
296
315
  async function createBrowserWorkerRuntime(input) {
297
- const cacheRoot = fs.mkdtempSync(path.join(os.tmpdir(), "wood-browser-vite-"));
298
- browserWorkerCacheDirs.add(cacheRoot);
299
316
  let browser2 = null;
317
+ let cacheRoot = null;
318
+ let ownedServer = null;
300
319
  try {
301
- const playwrightBrowser = await loadPlaywright(input.browserName);
302
- browser2 = await playwrightBrowser.launch({ headless: input.headless });
303
- const server = await createViteServer(input.rootDir, path.join(cacheRoot, ".vite"));
320
+ const playwrightBrowser = await loadPlaywright(input.browserName, input.rootDir);
321
+ if (input.wsEndpoint) {
322
+ try {
323
+ browser2 = await playwrightBrowser.connect(input.wsEndpoint);
324
+ } catch (error) {
325
+ if (!browserConnectWarnings.has(input.wsEndpoint)) {
326
+ browserConnectWarnings.add(input.wsEndpoint);
327
+ console.warn(
328
+ `[wood browser] Could not connect to shared Chromium at "${input.wsEndpoint}"; falling back to a per-worker launch.`,
329
+ error
330
+ );
331
+ }
332
+ }
333
+ }
334
+ if (!browser2) {
335
+ browser2 = await playwrightBrowser.launch({ headless: input.headless });
336
+ }
337
+ let vite;
338
+ if (input.viteUrl) {
339
+ vite = {
340
+ baseUrl: input.viteUrl,
341
+ ownership: "external"
342
+ };
343
+ } else {
344
+ cacheRoot = fs.mkdtempSync(path.join(os.tmpdir(), "wood-browser-vite-"));
345
+ browserWorkerCacheDirs.add(cacheRoot);
346
+ ownedServer = await createViteServer(input.rootDir, path.join(cacheRoot, ".vite"));
347
+ vite = {
348
+ baseUrl: serverBaseUrl(ownedServer),
349
+ ownership: "worker",
350
+ server: ownedServer,
351
+ cacheDir: cacheRoot
352
+ };
353
+ }
304
354
  return {
305
355
  browser: browser2,
306
- server,
307
- cacheDir: cacheRoot,
356
+ vite,
308
357
  rootDir: input.rootDir,
309
358
  key: input.key,
310
359
  activeHarnesses: 0,
@@ -312,18 +361,25 @@ async function createBrowserWorkerRuntime(input) {
312
361
  idleCloseTimer: null
313
362
  };
314
363
  } catch (error) {
315
- await browser2?.close().catch(() => void 0);
316
- fs.rmSync(cacheRoot, { recursive: true, force: true });
317
- browserWorkerCacheDirs.delete(cacheRoot);
364
+ await Promise.all([
365
+ browser2?.close().catch(() => void 0),
366
+ ownedServer?.close().catch(() => void 0)
367
+ ]);
368
+ if (cacheRoot) {
369
+ fs.rmSync(cacheRoot, { recursive: true, force: true });
370
+ browserWorkerCacheDirs.delete(cacheRoot);
371
+ }
318
372
  throw error;
319
373
  }
320
374
  }
321
375
  async function acquireBrowserWorkerRuntime(input) {
322
- const key = workerRuntimeKey(input);
376
+ const wsEndpoint = input.browserName === "chromium" ? process.env.WOOD_BROWSER_WS_ENDPOINT : void 0;
377
+ const viteUrl = process.env.WOOD_BROWSER_VITE_URL;
378
+ const key = workerRuntimeKey({ ...input, wsEndpoint, viteUrl });
323
379
  let entry = browserWorkerRuntimes.get(key);
324
380
  if (!entry) {
325
381
  entry = {
326
- promise: createBrowserWorkerRuntime({ ...input, key })
382
+ promise: createBrowserWorkerRuntime({ ...input, wsEndpoint, viteUrl, key })
327
383
  };
328
384
  browserWorkerRuntimes.set(key, entry);
329
385
  }
@@ -346,12 +402,14 @@ async function closeBrowserWorkerRuntime(runtime) {
346
402
  runtime.closing = true;
347
403
  try {
348
404
  await Promise.all([
349
- waitForBoundedClose(runtime.server.close()),
405
+ ...runtime.vite.ownership === "worker" ? [waitForBoundedClose(runtime.vite.server.close())] : [],
350
406
  waitForBoundedClose(runtime.browser.close())
351
407
  ]);
352
408
  } finally {
353
- fs.rmSync(runtime.cacheDir, { recursive: true, force: true });
354
- browserWorkerCacheDirs.delete(runtime.cacheDir);
409
+ if (runtime.vite.ownership === "worker") {
410
+ fs.rmSync(runtime.vite.cacheDir, { recursive: true, force: true });
411
+ browserWorkerCacheDirs.delete(runtime.vite.cacheDir);
412
+ }
355
413
  const entry = browserWorkerRuntimes.get(runtime.key);
356
414
  const current = entry ? await entry.promise.catch(() => null) : null;
357
415
  if (current === runtime) {
@@ -378,6 +436,35 @@ function releaseBrowserWorkerRuntime(runtime) {
378
436
  function serverBaseUrl(server) {
379
437
  return server.resolvedUrls?.local?.[0] ?? "http://127.0.0.1:5173";
380
438
  }
439
+ async function startSharedBrowserViteServer(input) {
440
+ const rootDir = normalizeRoot(input.rootDir);
441
+ const cacheRoot = fs.mkdtempSync(path.join(os.tmpdir(), "wood-browser-vite-"));
442
+ browserWorkerCacheDirs.add(cacheRoot);
443
+ let server = null;
444
+ try {
445
+ server = await createViteServer(rootDir, path.join(cacheRoot, ".vite"));
446
+ } catch (error) {
447
+ fs.rmSync(cacheRoot, { recursive: true, force: true });
448
+ browserWorkerCacheDirs.delete(cacheRoot);
449
+ throw error;
450
+ }
451
+ let closed = false;
452
+ return {
453
+ url: serverBaseUrl(server),
454
+ async close() {
455
+ if (closed) {
456
+ return;
457
+ }
458
+ closed = true;
459
+ try {
460
+ await waitForBoundedClose(server.close());
461
+ } finally {
462
+ fs.rmSync(cacheRoot, { recursive: true, force: true });
463
+ browserWorkerCacheDirs.delete(cacheRoot);
464
+ }
465
+ }
466
+ };
467
+ }
381
468
  function assertFileExists(filePath, label) {
382
469
  if (!fs.existsSync(filePath)) {
383
470
  throw new Error(`${label} does not exist: ${filePath}`);
@@ -776,15 +863,6 @@ function collectMaxPaintOrders(snapshot) {
776
863
  }
777
864
  return paintByBackend;
778
865
  }
779
- function axisEdges(rect, axis) {
780
- return axis === "horizontal" ? { leading: rect.left, trailing: rect.right } : { leading: rect.top, trailing: rect.bottom };
781
- }
782
- function axisGap(first, second, axis) {
783
- const a = axisEdges(first, axis);
784
- const b = axisEdges(second, axis);
785
- const [earlier, later] = a.leading <= b.leading ? [a, b] : [b, a];
786
- return later.leading - earlier.trailing;
787
- }
788
866
  function describeGapConstraint(constraint) {
789
867
  const parts = [];
790
868
  if (constraint.equals !== void 0) parts.push(`equals ${constraint.equals}`);
@@ -804,11 +882,6 @@ function gapConstraintViolation(gap, constraint, tolerance) {
804
882
  }
805
883
  return null;
806
884
  }
807
- function rectsOverlap(a, b) {
808
- return Boolean(
809
- a && b && a.left < b.right && a.right > b.left && a.top < b.bottom && a.bottom > b.top
810
- );
811
- }
812
885
  const COVERAGE_STYLE_KEYS = [
813
886
  "opacity",
814
887
  "visibility",
@@ -826,9 +899,6 @@ function colorAlphaIsZero(color) {
826
899
  const parts = match[1].split(",").map((s) => s.trim());
827
900
  return parts.length >= 4 && parseFloat(parts[3]) === 0;
828
901
  }
829
- function snapshotRectsOverlap(a, b) {
830
- return a.x < b.x + b.w && a.x + a.w > b.x && a.y < b.y + b.h && a.y + a.h > b.y;
831
- }
832
902
  function indexLayoutNodes(doc, strings) {
833
903
  const byNode = /* @__PURE__ */ new Map();
834
904
  const nodeIndex = doc.layout?.nodeIndex ?? [];
@@ -1077,8 +1147,7 @@ function createExpect(page, outputDir) {
1077
1147
  const first = await elementRect(page, firstSelector);
1078
1148
  const second = await elementRect(page, secondSelector);
1079
1149
  if (!first || !second) throw new Error(`Expected both "${firstSelector}" and "${secondSelector}" to exist.`);
1080
- const overlaps = first.left < second.right && first.right > second.left && first.top < second.bottom && first.bottom > second.top;
1081
- if (overlaps) {
1150
+ if (rectsOverlap(first, second)) {
1082
1151
  throw new Error(`Expected "${firstSelector}" not to overlap "${secondSelector}".`);
1083
1152
  }
1084
1153
  },
@@ -1121,8 +1190,9 @@ function createExpect(page, outputDir) {
1121
1190
  const first = await firstRect(page, a);
1122
1191
  const second = await firstRect(page, b);
1123
1192
  if (!first || !second) throw new Error(`Expected both "${a}" and "${b}" to exist.`);
1124
- const delta = Math.abs(first[edge] - second[edge]);
1125
- if (delta > tolerance) {
1193
+ const verdict = sharedRectEdges([first, second], edge, { tolerance });
1194
+ if (!verdict.pass) {
1195
+ const delta = Number(verdict.details?.maximumDelta);
1126
1196
  throw new Error(
1127
1197
  `Expected "${a}" and "${b}" to share ${edge} edge within ${tolerance}px, but delta was ${delta.toFixed(2)}px ("${a}".${edge}=${first[edge].toFixed(2)}, "${b}".${edge}=${second[edge].toFixed(2)}). Rects: ${a}=${JSON.stringify(first)}, ${b}=${JSON.stringify(second)}`
1128
1198
  );
@@ -1213,16 +1283,24 @@ function createExpect(page, outputDir) {
1213
1283
  if (!rect) throw new Error(`Expected "${selector}" to exist.`);
1214
1284
  boxes.push({ selector, rect });
1215
1285
  }
1216
- const sorted = [...boxes].sort((x, y) => axisEdges(x.rect, axis).leading - axisEdges(y.rect, axis).leading);
1217
- const gaps = sorted.slice(1).map((box, i) => ({
1218
- from: sorted[i].selector,
1219
- to: box.selector,
1220
- gap: axisGap(sorted[i].rect, box.rect, axis)
1221
- }));
1222
- const widest = gaps.reduce((acc, g) => g.gap > acc.gap ? g : acc);
1223
- const narrowest = gaps.reduce((acc, g) => g.gap < acc.gap ? g : acc);
1224
- const spread = widest.gap - narrowest.gap;
1225
- if (spread > tolerance) {
1286
+ const verdict = evenSpacingRects(
1287
+ boxes.map((box) => box.rect),
1288
+ axis,
1289
+ { tolerance }
1290
+ );
1291
+ if (!verdict.pass) {
1292
+ const sorted = [...boxes].sort(
1293
+ (x, y) => axisEdges(x.rect, axis).leading - axisEdges(y.rect, axis).leading
1294
+ );
1295
+ const measuredGaps = verdict.details?.gaps;
1296
+ const gaps = sorted.slice(1).map((box, i) => ({
1297
+ from: sorted[i].selector,
1298
+ to: box.selector,
1299
+ gap: measuredGaps[i]
1300
+ }));
1301
+ const widest = gaps.reduce((acc, g) => g.gap > acc.gap ? g : acc);
1302
+ const narrowest = gaps.reduce((acc, g) => g.gap < acc.gap ? g : acc);
1303
+ const spread = Number(verdict.details?.spread);
1226
1304
  const list = gaps.map((g) => `${g.from}\u2192${g.to}=${g.gap.toFixed(2)}px`).join(", ");
1227
1305
  throw new Error(
1228
1306
  `Expected elements to be evenly spaced along ${axis} within ${tolerance}px, but gap spread was ${spread.toFixed(2)}px (widest ${widest.from}\u2192${widest.to}=${widest.gap.toFixed(2)}px, narrowest ${narrowest.from}\u2192${narrowest.to}=${narrowest.gap.toFixed(2)}px). Gaps: ${list}`
@@ -1302,7 +1380,7 @@ async function openMountPage(input) {
1302
1380
  ...input.context
1303
1381
  };
1304
1382
  await input.hooks?.beforeMount?.(context);
1305
- await page.goto(`${serverBaseUrl(input.runtime.server)}${viteImport(htmlPath)}`, {
1383
+ await page.goto(`${input.runtime.baseUrl}${viteImport(htmlPath)}`, {
1306
1384
  waitUntil: "domcontentloaded"
1307
1385
  });
1308
1386
  for (const event of input.bridge.state.initialEvents) {
@@ -1366,7 +1444,7 @@ async function createHarness(config = {}) {
1366
1444
  }
1367
1445
  const runtime = {
1368
1446
  context,
1369
- server: workerRuntime.server,
1447
+ baseUrl: workerRuntime.vite.baseUrl,
1370
1448
  page,
1371
1449
  tempDir,
1372
1450
  rootDir,
@@ -1535,6 +1613,7 @@ const browser = {
1535
1613
  };
1536
1614
  export {
1537
1615
  browser,
1538
- createBrowserBridgeFixture
1616
+ createBrowserBridgeFixture,
1617
+ startSharedBrowserViteServer
1539
1618
  };
1540
1619
  //# sourceMappingURL=browser.js.map