@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
@@ -29,7 +29,8 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
29
29
  var browser_exports = {};
30
30
  __export(browser_exports, {
31
31
  browser: () => browser,
32
- createBrowserBridgeFixture: () => createBrowserBridgeFixture
32
+ createBrowserBridgeFixture: () => createBrowserBridgeFixture,
33
+ startSharedBrowserViteServer: () => startSharedBrowserViteServer
33
34
  });
34
35
  module.exports = __toCommonJS(browser_exports);
35
36
  var import_node_fs = __toESM(require("node:fs"), 1);
@@ -39,6 +40,7 @@ var import_node_path = __toESM(require("node:path"), 1);
39
40
  var import_node_url = require("node:url");
40
41
  var import_tracing = require("../tracing/index.js");
41
42
  var import_trace_testing = require("../trace-testing/index.js");
43
+ var import_geometry = require("./geometry.js");
42
44
  const DEFAULT_VIEWPORT = {
43
45
  width: 1280,
44
46
  height: 800
@@ -48,6 +50,7 @@ const DEFAULT_RESOURCE_CLOSE_TIMEOUT_MS = 5e3;
48
50
  const WORKER_RUNTIME_IDLE_CLOSE_MS = 5e3;
49
51
  const browserWorkerRuntimes = /* @__PURE__ */ new Map();
50
52
  const browserWorkerCacheDirs = /* @__PURE__ */ new Set();
53
+ const browserConnectWarnings = /* @__PURE__ */ new Set();
51
54
  process.on("exit", () => {
52
55
  for (const cacheDir of browserWorkerCacheDirs) {
53
56
  try {
@@ -211,8 +214,9 @@ function buildBridgeInitScript(manifest, traceConfig, transportMode) {
211
214
  })();
212
215
  `;
213
216
  }
214
- async function loadPlaywright(browserName) {
215
- const playwright = await import("playwright");
217
+ async function loadPlaywright(browserName, rootDir) {
218
+ const playwrightPath = resolvePackageModule(rootDir, "playwright");
219
+ const playwright = playwrightPath ? await import((0, import_node_url.pathToFileURL)(playwrightPath).href) : await import("playwright");
216
220
  return playwright[browserName];
217
221
  }
218
222
  async function loadVite() {
@@ -313,7 +317,14 @@ async function createViteServer(rootDir, cacheDir) {
313
317
  resolve: {
314
318
  dedupe: ["svelte"]
315
319
  },
316
- server: { port: 0, fs: { allow: [rootDir, import_node_os.default.tmpdir()] } }
320
+ server: {
321
+ port: 0,
322
+ // Browser harnesses write independent HTML/entry files concurrently.
323
+ // HMR would broadcast another harness's temp-file changes to every page,
324
+ // causing unrelated mounts to reload; tests only need request-time transforms.
325
+ hmr: false,
326
+ fs: { allow: [rootDir, import_node_os.default.tmpdir()] }
327
+ }
317
328
  });
318
329
  await server.listen();
319
330
  return server;
@@ -322,21 +333,53 @@ function workerRuntimeKey(input) {
322
333
  return [
323
334
  input.rootDir,
324
335
  input.browserName,
325
- input.headless ? "headless" : "headed"
336
+ input.headless ? "headless" : "headed",
337
+ input.wsEndpoint ?? "local-browser",
338
+ input.viteUrl ?? "local-vite"
326
339
  ].join("::");
327
340
  }
328
341
  async function createBrowserWorkerRuntime(input) {
329
- const cacheRoot = import_node_fs.default.mkdtempSync(import_node_path.default.join(import_node_os.default.tmpdir(), "wood-browser-vite-"));
330
- browserWorkerCacheDirs.add(cacheRoot);
331
342
  let browser2 = null;
343
+ let cacheRoot = null;
344
+ let ownedServer = null;
332
345
  try {
333
- const playwrightBrowser = await loadPlaywright(input.browserName);
334
- browser2 = await playwrightBrowser.launch({ headless: input.headless });
335
- const server = await createViteServer(input.rootDir, import_node_path.default.join(cacheRoot, ".vite"));
346
+ const playwrightBrowser = await loadPlaywright(input.browserName, input.rootDir);
347
+ if (input.wsEndpoint) {
348
+ try {
349
+ browser2 = await playwrightBrowser.connect(input.wsEndpoint);
350
+ } catch (error) {
351
+ if (!browserConnectWarnings.has(input.wsEndpoint)) {
352
+ browserConnectWarnings.add(input.wsEndpoint);
353
+ console.warn(
354
+ `[wood browser] Could not connect to shared Chromium at "${input.wsEndpoint}"; falling back to a per-worker launch.`,
355
+ error
356
+ );
357
+ }
358
+ }
359
+ }
360
+ if (!browser2) {
361
+ browser2 = await playwrightBrowser.launch({ headless: input.headless });
362
+ }
363
+ let vite;
364
+ if (input.viteUrl) {
365
+ vite = {
366
+ baseUrl: input.viteUrl,
367
+ ownership: "external"
368
+ };
369
+ } else {
370
+ cacheRoot = import_node_fs.default.mkdtempSync(import_node_path.default.join(import_node_os.default.tmpdir(), "wood-browser-vite-"));
371
+ browserWorkerCacheDirs.add(cacheRoot);
372
+ ownedServer = await createViteServer(input.rootDir, import_node_path.default.join(cacheRoot, ".vite"));
373
+ vite = {
374
+ baseUrl: serverBaseUrl(ownedServer),
375
+ ownership: "worker",
376
+ server: ownedServer,
377
+ cacheDir: cacheRoot
378
+ };
379
+ }
336
380
  return {
337
381
  browser: browser2,
338
- server,
339
- cacheDir: cacheRoot,
382
+ vite,
340
383
  rootDir: input.rootDir,
341
384
  key: input.key,
342
385
  activeHarnesses: 0,
@@ -344,18 +387,25 @@ async function createBrowserWorkerRuntime(input) {
344
387
  idleCloseTimer: null
345
388
  };
346
389
  } catch (error) {
347
- await browser2?.close().catch(() => void 0);
348
- import_node_fs.default.rmSync(cacheRoot, { recursive: true, force: true });
349
- browserWorkerCacheDirs.delete(cacheRoot);
390
+ await Promise.all([
391
+ browser2?.close().catch(() => void 0),
392
+ ownedServer?.close().catch(() => void 0)
393
+ ]);
394
+ if (cacheRoot) {
395
+ import_node_fs.default.rmSync(cacheRoot, { recursive: true, force: true });
396
+ browserWorkerCacheDirs.delete(cacheRoot);
397
+ }
350
398
  throw error;
351
399
  }
352
400
  }
353
401
  async function acquireBrowserWorkerRuntime(input) {
354
- const key = workerRuntimeKey(input);
402
+ const wsEndpoint = input.browserName === "chromium" ? process.env.WOOD_BROWSER_WS_ENDPOINT : void 0;
403
+ const viteUrl = process.env.WOOD_BROWSER_VITE_URL;
404
+ const key = workerRuntimeKey({ ...input, wsEndpoint, viteUrl });
355
405
  let entry = browserWorkerRuntimes.get(key);
356
406
  if (!entry) {
357
407
  entry = {
358
- promise: createBrowserWorkerRuntime({ ...input, key })
408
+ promise: createBrowserWorkerRuntime({ ...input, wsEndpoint, viteUrl, key })
359
409
  };
360
410
  browserWorkerRuntimes.set(key, entry);
361
411
  }
@@ -378,12 +428,14 @@ async function closeBrowserWorkerRuntime(runtime) {
378
428
  runtime.closing = true;
379
429
  try {
380
430
  await Promise.all([
381
- waitForBoundedClose(runtime.server.close()),
431
+ ...runtime.vite.ownership === "worker" ? [waitForBoundedClose(runtime.vite.server.close())] : [],
382
432
  waitForBoundedClose(runtime.browser.close())
383
433
  ]);
384
434
  } finally {
385
- import_node_fs.default.rmSync(runtime.cacheDir, { recursive: true, force: true });
386
- browserWorkerCacheDirs.delete(runtime.cacheDir);
435
+ if (runtime.vite.ownership === "worker") {
436
+ import_node_fs.default.rmSync(runtime.vite.cacheDir, { recursive: true, force: true });
437
+ browserWorkerCacheDirs.delete(runtime.vite.cacheDir);
438
+ }
387
439
  const entry = browserWorkerRuntimes.get(runtime.key);
388
440
  const current = entry ? await entry.promise.catch(() => null) : null;
389
441
  if (current === runtime) {
@@ -410,6 +462,35 @@ function releaseBrowserWorkerRuntime(runtime) {
410
462
  function serverBaseUrl(server) {
411
463
  return server.resolvedUrls?.local?.[0] ?? "http://127.0.0.1:5173";
412
464
  }
465
+ async function startSharedBrowserViteServer(input) {
466
+ const rootDir = normalizeRoot(input.rootDir);
467
+ const cacheRoot = import_node_fs.default.mkdtempSync(import_node_path.default.join(import_node_os.default.tmpdir(), "wood-browser-vite-"));
468
+ browserWorkerCacheDirs.add(cacheRoot);
469
+ let server = null;
470
+ try {
471
+ server = await createViteServer(rootDir, import_node_path.default.join(cacheRoot, ".vite"));
472
+ } catch (error) {
473
+ import_node_fs.default.rmSync(cacheRoot, { recursive: true, force: true });
474
+ browserWorkerCacheDirs.delete(cacheRoot);
475
+ throw error;
476
+ }
477
+ let closed = false;
478
+ return {
479
+ url: serverBaseUrl(server),
480
+ async close() {
481
+ if (closed) {
482
+ return;
483
+ }
484
+ closed = true;
485
+ try {
486
+ await waitForBoundedClose(server.close());
487
+ } finally {
488
+ import_node_fs.default.rmSync(cacheRoot, { recursive: true, force: true });
489
+ browserWorkerCacheDirs.delete(cacheRoot);
490
+ }
491
+ }
492
+ };
493
+ }
413
494
  function assertFileExists(filePath, label) {
414
495
  if (!import_node_fs.default.existsSync(filePath)) {
415
496
  throw new Error(`${label} does not exist: ${filePath}`);
@@ -808,15 +889,6 @@ function collectMaxPaintOrders(snapshot) {
808
889
  }
809
890
  return paintByBackend;
810
891
  }
811
- function axisEdges(rect, axis) {
812
- return axis === "horizontal" ? { leading: rect.left, trailing: rect.right } : { leading: rect.top, trailing: rect.bottom };
813
- }
814
- function axisGap(first, second, axis) {
815
- const a = axisEdges(first, axis);
816
- const b = axisEdges(second, axis);
817
- const [earlier, later] = a.leading <= b.leading ? [a, b] : [b, a];
818
- return later.leading - earlier.trailing;
819
- }
820
892
  function describeGapConstraint(constraint) {
821
893
  const parts = [];
822
894
  if (constraint.equals !== void 0) parts.push(`equals ${constraint.equals}`);
@@ -836,11 +908,6 @@ function gapConstraintViolation(gap, constraint, tolerance) {
836
908
  }
837
909
  return null;
838
910
  }
839
- function rectsOverlap(a, b) {
840
- return Boolean(
841
- a && b && a.left < b.right && a.right > b.left && a.top < b.bottom && a.bottom > b.top
842
- );
843
- }
844
911
  const COVERAGE_STYLE_KEYS = [
845
912
  "opacity",
846
913
  "visibility",
@@ -858,9 +925,6 @@ function colorAlphaIsZero(color) {
858
925
  const parts = match[1].split(",").map((s) => s.trim());
859
926
  return parts.length >= 4 && parseFloat(parts[3]) === 0;
860
927
  }
861
- function snapshotRectsOverlap(a, b) {
862
- 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;
863
- }
864
928
  function indexLayoutNodes(doc, strings) {
865
929
  const byNode = /* @__PURE__ */ new Map();
866
930
  const nodeIndex = doc.layout?.nodeIndex ?? [];
@@ -945,7 +1009,7 @@ function collectCoverageCandidates(doc, strings, targetNodeIndex) {
945
1009
  if (nodeType[ni] !== 1) continue;
946
1010
  if (ni === targetNodeIndex) continue;
947
1011
  if (isSnapshotAncestor(parentIndex, ni, targetNodeIndex) || isSnapshotAncestor(parentIndex, targetNodeIndex, ni)) continue;
948
- if (!snapshotRectsOverlap(rec.rect, target.rect)) continue;
1012
+ if (!(0, import_geometry.snapshotRectsOverlap)(rec.rect, target.rect)) continue;
949
1013
  const hasContent = snapshotNodeHasOwnContent(nodes, strings, ni);
950
1014
  if (snapshotNodePaintsNothing(rec.styles, hasContent)) continue;
951
1015
  covers.push({ description: describeSnapshotNode(nodes, strings, ni), paint: rec.paint, rect: rec.rect });
@@ -1040,7 +1104,7 @@ function createExpect(page, outputDir) {
1040
1104
  if (top.paintOrder > lower.paintOrder) return;
1041
1105
  const topRect = await firstRect(page, topSelector);
1042
1106
  const lowerRect = await firstRect(page, lowerSelector);
1043
- const overlapNote = rectsOverlap(topRect, lowerRect) ? "" : ` (Note: the rects do not overlap, so there is no shared pixel where front/behind is visually observable \u2014 this is a global paint-order verdict.)`;
1107
+ const overlapNote = (0, import_geometry.rectsOverlap)(topRect, lowerRect) ? "" : ` (Note: the rects do not overlap, so there is no shared pixel where front/behind is visually observable \u2014 this is a global paint-order verdict.)`;
1044
1108
  throw new Error(
1045
1109
  `Expected "${topSelector}" (paint order ${top.paintOrder}) to paint in front of "${lowerSelector}" (paint order ${lower.paintOrder}), but it paints at or behind it (higher paint order == on top).${overlapNote}`
1046
1110
  );
@@ -1109,8 +1173,7 @@ function createExpect(page, outputDir) {
1109
1173
  const first = await elementRect(page, firstSelector);
1110
1174
  const second = await elementRect(page, secondSelector);
1111
1175
  if (!first || !second) throw new Error(`Expected both "${firstSelector}" and "${secondSelector}" to exist.`);
1112
- const overlaps = first.left < second.right && first.right > second.left && first.top < second.bottom && first.bottom > second.top;
1113
- if (overlaps) {
1176
+ if ((0, import_geometry.rectsOverlap)(first, second)) {
1114
1177
  throw new Error(`Expected "${firstSelector}" not to overlap "${secondSelector}".`);
1115
1178
  }
1116
1179
  },
@@ -1153,8 +1216,9 @@ function createExpect(page, outputDir) {
1153
1216
  const first = await firstRect(page, a);
1154
1217
  const second = await firstRect(page, b);
1155
1218
  if (!first || !second) throw new Error(`Expected both "${a}" and "${b}" to exist.`);
1156
- const delta = Math.abs(first[edge] - second[edge]);
1157
- if (delta > tolerance) {
1219
+ const verdict = (0, import_geometry.sharedEdges)([first, second], edge, { tolerance });
1220
+ if (!verdict.pass) {
1221
+ const delta = Number(verdict.details?.maximumDelta);
1158
1222
  throw new Error(
1159
1223
  `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)}`
1160
1224
  );
@@ -1218,7 +1282,7 @@ function createExpect(page, outputDir) {
1218
1282
  const first = await firstRect(page, a);
1219
1283
  const second = await firstRect(page, b);
1220
1284
  if (!first || !second) throw new Error(`Expected both "${a}" and "${b}" to exist.`);
1221
- const gap = axisGap(first, second, axis);
1285
+ const gap = (0, import_geometry.axisGap)(first, second, axis);
1222
1286
  const allowsNegative = options.equals !== void 0 && options.equals < 0 || options.min !== void 0 && options.min < 0;
1223
1287
  const rectsNote = `Rects: ${a}=${JSON.stringify(first)}, ${b}=${JSON.stringify(second)}`;
1224
1288
  if (gap < -tolerance && !allowsNegative) {
@@ -1245,16 +1309,24 @@ function createExpect(page, outputDir) {
1245
1309
  if (!rect) throw new Error(`Expected "${selector}" to exist.`);
1246
1310
  boxes.push({ selector, rect });
1247
1311
  }
1248
- const sorted = [...boxes].sort((x, y) => axisEdges(x.rect, axis).leading - axisEdges(y.rect, axis).leading);
1249
- const gaps = sorted.slice(1).map((box, i) => ({
1250
- from: sorted[i].selector,
1251
- to: box.selector,
1252
- gap: axisGap(sorted[i].rect, box.rect, axis)
1253
- }));
1254
- const widest = gaps.reduce((acc, g) => g.gap > acc.gap ? g : acc);
1255
- const narrowest = gaps.reduce((acc, g) => g.gap < acc.gap ? g : acc);
1256
- const spread = widest.gap - narrowest.gap;
1257
- if (spread > tolerance) {
1312
+ const verdict = (0, import_geometry.evenSpacing)(
1313
+ boxes.map((box) => box.rect),
1314
+ axis,
1315
+ { tolerance }
1316
+ );
1317
+ if (!verdict.pass) {
1318
+ const sorted = [...boxes].sort(
1319
+ (x, y) => (0, import_geometry.axisEdges)(x.rect, axis).leading - (0, import_geometry.axisEdges)(y.rect, axis).leading
1320
+ );
1321
+ const measuredGaps = verdict.details?.gaps;
1322
+ const gaps = sorted.slice(1).map((box, i) => ({
1323
+ from: sorted[i].selector,
1324
+ to: box.selector,
1325
+ gap: measuredGaps[i]
1326
+ }));
1327
+ const widest = gaps.reduce((acc, g) => g.gap > acc.gap ? g : acc);
1328
+ const narrowest = gaps.reduce((acc, g) => g.gap < acc.gap ? g : acc);
1329
+ const spread = Number(verdict.details?.spread);
1258
1330
  const list = gaps.map((g) => `${g.from}\u2192${g.to}=${g.gap.toFixed(2)}px`).join(", ");
1259
1331
  throw new Error(
1260
1332
  `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}`
@@ -1334,7 +1406,7 @@ async function openMountPage(input) {
1334
1406
  ...input.context
1335
1407
  };
1336
1408
  await input.hooks?.beforeMount?.(context);
1337
- await page.goto(`${serverBaseUrl(input.runtime.server)}${viteImport(htmlPath)}`, {
1409
+ await page.goto(`${input.runtime.baseUrl}${viteImport(htmlPath)}`, {
1338
1410
  waitUntil: "domcontentloaded"
1339
1411
  });
1340
1412
  for (const event of input.bridge.state.initialEvents) {
@@ -1398,7 +1470,7 @@ async function createHarness(config = {}) {
1398
1470
  }
1399
1471
  const runtime = {
1400
1472
  context,
1401
- server: workerRuntime.server,
1473
+ baseUrl: workerRuntime.vite.baseUrl,
1402
1474
  page,
1403
1475
  tempDir,
1404
1476
  rootDir,
@@ -1568,6 +1640,7 @@ const browser = {
1568
1640
  // Annotate the CommonJS export names for ESM import in node:
1569
1641
  0 && (module.exports = {
1570
1642
  browser,
1571
- createBrowserBridgeFixture
1643
+ createBrowserBridgeFixture,
1644
+ startSharedBrowserViteServer
1572
1645
  });
1573
1646
  //# sourceMappingURL=browser.cjs.map