waygraph 0.15.53 → 0.16.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 (556) hide show
  1. package/README.md +8 -3
  2. package/bin/waygraph +2 -2
  3. package/dist/analysis/check.d.ts +38 -0
  4. package/dist/analysis/check.js +87 -0
  5. package/dist/analysis/coverage-gap.d.ts +1 -1
  6. package/dist/analysis/coverage-gap.js +14 -37
  7. package/dist/analysis/flow-source.d.ts +9 -0
  8. package/dist/analysis/flow-source.js +25 -0
  9. package/dist/analysis/graph.d.ts +13 -14
  10. package/dist/analysis/graph.js +48 -371
  11. package/dist/analysis/map-check.js +4 -39
  12. package/dist/analysis/practices-check.d.ts +1 -1
  13. package/dist/analysis/practices-check.js +24 -45
  14. package/dist/cli/args.d.ts +23 -0
  15. package/dist/cli/args.js +20 -0
  16. package/dist/{cli.d.ts → cli/cli.d.ts} +0 -1
  17. package/dist/{cli.js → cli/cli.js} +10 -9
  18. package/dist/{commands → cli/commands}/agent-dive-scaffold.js +35 -64
  19. package/dist/cli/commands/agent-dive.js +42 -0
  20. package/dist/{commands → cli/commands}/check.d.ts +0 -1
  21. package/dist/cli/commands/check.js +104 -0
  22. package/dist/cli/commands/codemod-checkpoints.d.ts +18 -0
  23. package/dist/cli/commands/codemod-checkpoints.js +186 -0
  24. package/dist/cli/commands/codemod-flows.d.ts +18 -0
  25. package/dist/cli/commands/codemod-flows.js +284 -0
  26. package/dist/cli/commands/codemod-stubs.d.ts +10 -0
  27. package/dist/cli/commands/codemod-stubs.js +187 -0
  28. package/dist/{commands → cli/commands}/extensions.js +5 -4
  29. package/dist/{commands → cli/commands}/init.js +1 -2
  30. package/dist/{commands → cli/commands}/list.js +9 -7
  31. package/dist/cli/commands/manifest.d.ts +2 -0
  32. package/dist/cli/commands/manifest.js +20 -0
  33. package/dist/cli/commands/map.js +57 -0
  34. package/dist/{commands → cli/commands}/run.d.ts +0 -1
  35. package/dist/cli/commands/run.js +64 -0
  36. package/dist/{commands → cli/commands}/session.js +61 -88
  37. package/dist/{commands → cli/commands}/test.js +11 -14
  38. package/dist/cli/commands/traverse.js +105 -0
  39. package/dist/{commands → cli/commands}/try.js +29 -25
  40. package/dist/{commands → cli/commands}/upgrade.js +40 -4
  41. package/dist/cli/flags.d.ts +193 -16
  42. package/dist/cli/flags.js +179 -234
  43. package/dist/cli/run-chain.d.ts +1 -0
  44. package/dist/cli/run-chain.js +42 -7
  45. package/dist/cli/usage.d.ts +1 -1
  46. package/dist/cli/usage.js +21 -53
  47. package/dist/cli/util.d.ts +2 -2
  48. package/dist/cli/util.js +2 -3
  49. package/dist/{highlights → demo/narration}/css.d.ts +1 -1
  50. package/dist/{highlights → demo/narration}/css.js +2 -3
  51. package/dist/{highlights → demo/narration}/demo-pace.d.ts +7 -11
  52. package/dist/{highlights → demo/narration}/demo-pace.js +9 -11
  53. package/dist/{highlights → demo/narration}/device.d.ts +4 -2
  54. package/dist/{highlights → demo/narration}/device.js +3 -1
  55. package/dist/demo/narration/merge.d.ts +8 -0
  56. package/dist/demo/narration/merge.js +71 -0
  57. package/dist/{highlights/run-phase.d.ts → demo/narration/narration.d.ts} +10 -14
  58. package/dist/{highlights/run-phase.js → demo/narration/narration.js} +25 -94
  59. package/dist/{highlights → demo/narration}/shorthand.d.ts +1 -1
  60. package/dist/demo/narration/stub-ctx.d.ts +8 -0
  61. package/dist/demo/narration/stub-ctx.js +164 -0
  62. package/dist/{highlights → demo/narration}/style.d.ts +1 -7
  63. package/dist/{highlights → demo/narration}/style.js +1 -41
  64. package/dist/{highlights → demo/narration}/todo-dock.d.ts +3 -3
  65. package/dist/{highlights → demo/narration}/todo-dock.js +13 -30
  66. package/dist/demo/overlay/auto-chrome.d.ts +7 -0
  67. package/dist/demo/overlay/auto-chrome.js +97 -0
  68. package/dist/{session/overlay-beacon.d.ts → demo/overlay/beacon.d.ts} +7 -0
  69. package/dist/{session/overlay-beacon.js → demo/overlay/beacon.js} +5 -0
  70. package/dist/demo/overlay/cursor.d.ts +12 -0
  71. package/dist/demo/overlay/cursor.js +142 -0
  72. package/dist/demo/overlay/device-stage.d.ts +13 -0
  73. package/dist/demo/overlay/device-stage.js +396 -0
  74. package/dist/demo/overlay/inpage/banner.d.ts +1 -0
  75. package/dist/demo/overlay/inpage/banner.js +160 -0
  76. package/dist/demo/overlay/inpage/caption.d.ts +2 -0
  77. package/dist/demo/overlay/inpage/caption.js +24 -0
  78. package/dist/demo/overlay/inpage/core.d.ts +1 -0
  79. package/dist/demo/overlay/inpage/core.js +345 -0
  80. package/dist/demo/overlay/inpage/device-chip.d.ts +1 -0
  81. package/dist/demo/overlay/inpage/device-chip.js +191 -0
  82. package/dist/demo/overlay/inpage/network.d.ts +9 -0
  83. package/dist/demo/overlay/inpage/network.js +200 -0
  84. package/dist/demo/overlay/inpage/panel-chrome.d.ts +1 -0
  85. package/dist/demo/overlay/inpage/panel-chrome.js +203 -0
  86. package/dist/demo/overlay/inpage/stamp.d.ts +1 -0
  87. package/dist/demo/overlay/inpage/stamp.js +46 -0
  88. package/dist/demo/overlay/inpage/swipe-zoom.d.ts +1 -0
  89. package/dist/demo/overlay/inpage/swipe-zoom.js +220 -0
  90. package/dist/demo/overlay/inpage/todos.d.ts +1 -0
  91. package/dist/demo/overlay/inpage/todos.js +294 -0
  92. package/dist/demo/overlay/locator-theater.d.ts +25 -0
  93. package/dist/demo/overlay/locator-theater.js +76 -0
  94. package/dist/demo/overlay/network-capture.d.ts +22 -0
  95. package/dist/demo/overlay/network-capture.js +127 -0
  96. package/dist/demo/overlay/overlay-css.d.ts +3 -0
  97. package/dist/demo/overlay/overlay-css.js +369 -0
  98. package/dist/demo/overlay/overlay-stage.d.ts +23 -0
  99. package/dist/demo/overlay/overlay-stage.js +106 -0
  100. package/dist/demo/overlay/overlay.d.ts +10 -0
  101. package/dist/demo/overlay/overlay.js +89 -0
  102. package/dist/{pilot-overlay/overlay-fixtures.d.ts → demo/overlay/phase-fixtures.d.ts} +2 -2
  103. package/dist/{pilot-overlay/overlay-fixtures.js → demo/overlay/phase-fixtures.js} +2 -2
  104. package/dist/{pilot-overlay/action-ring.js → demo/overlay/pilot/actions.js} +2 -1
  105. package/dist/{pilot-overlay → demo/overlay/pilot}/fixtures.d.ts +6 -5
  106. package/dist/{pilot-overlay → demo/overlay/pilot}/fixtures.js +19 -18
  107. package/dist/{pilot-overlay → demo/overlay/pilot}/shell.d.ts +2 -2
  108. package/dist/{pilot-overlay → demo/overlay/pilot}/shell.js +13 -22
  109. package/dist/demo/overlay/reattach.d.ts +7 -0
  110. package/dist/demo/overlay/reattach.js +23 -0
  111. package/dist/demo/overlay/rings.d.ts +33 -0
  112. package/dist/demo/overlay/rings.js +448 -0
  113. package/dist/{ui → demo/overlay/ui}/components/ring.js +2 -2
  114. package/dist/{ui → demo/overlay/ui}/overlay.css +4 -4
  115. package/dist/{ui → demo/overlay/ui}/shadow.d.ts +1 -1
  116. package/dist/{ui → demo/overlay/ui}/shadow.js +39 -2
  117. package/dist/demo/stepper/after.d.ts +3 -0
  118. package/dist/demo/stepper/after.js +113 -0
  119. package/dist/demo/stepper/banner-log.d.ts +37 -0
  120. package/dist/demo/stepper/banner-log.js +63 -0
  121. package/dist/demo/stepper/before.d.ts +4 -0
  122. package/dist/demo/stepper/before.js +110 -0
  123. package/dist/demo/stepper/demo-log.d.ts +31 -0
  124. package/dist/demo/stepper/demo-log.js +309 -0
  125. package/dist/demo/stepper/gate.d.ts +11 -0
  126. package/dist/demo/stepper/gate.js +78 -0
  127. package/dist/demo/stepper/interaction-patch.d.ts +3 -0
  128. package/dist/demo/stepper/interaction-patch.js +323 -0
  129. package/dist/demo/stepper/pacing.d.ts +21 -0
  130. package/dist/demo/stepper/pacing.js +23 -0
  131. package/dist/demo/stepper/slides.d.ts +11 -0
  132. package/dist/demo/stepper/slides.js +233 -0
  133. package/dist/demo/stepper/step-panels.d.ts +21 -0
  134. package/dist/demo/stepper/step-panels.js +589 -0
  135. package/dist/demo/stepper/stepper.d.ts +24 -0
  136. package/dist/demo/stepper/stepper.js +122 -0
  137. package/dist/demo/stepper/teardown.d.ts +48 -0
  138. package/dist/demo/stepper/teardown.js +179 -0
  139. package/dist/demo/stepper/todo-advance.d.ts +14 -0
  140. package/dist/demo/stepper/todo-advance.js +110 -0
  141. package/dist/demo/stepper/view.d.ts +68 -0
  142. package/dist/demo/stepper/view.js +31 -0
  143. package/dist/demo/types.d.ts +17 -0
  144. package/dist/demo/verbose-log.js +15 -0
  145. package/dist/{types.d.ts → engine/block/block.d.ts} +106 -91
  146. package/dist/{core → engine/block}/block.js +10 -53
  147. package/dist/{core → engine/block}/compose.d.ts +10 -7
  148. package/dist/{core → engine/block}/compose.js +1 -1
  149. package/dist/{core/blocks → engine/block/kinds}/api.d.ts +17 -12
  150. package/dist/{core/blocks → engine/block/kinds}/api.js +26 -18
  151. package/dist/{core/blocks → engine/block/kinds}/effect.d.ts +13 -18
  152. package/dist/engine/block/kinds/effect.js +17 -0
  153. package/dist/{core/blocks → engine/block/kinds}/method.d.ts +19 -29
  154. package/dist/{core/blocks → engine/block/kinds}/method.js +7 -21
  155. package/dist/{core/blocks → engine/block/kinds}/nav.d.ts +22 -31
  156. package/dist/{core/blocks → engine/block/kinds}/nav.js +6 -12
  157. package/dist/{core/blocks → engine/block/kinds}/page.d.ts +15 -20
  158. package/dist/{core/blocks → engine/block/kinds}/page.js +5 -7
  159. package/dist/engine/checkpoint/checkpoint.d.ts +22 -0
  160. package/dist/engine/checkpoint/checkpoint.js +8 -0
  161. package/dist/engine/checkpoint/route.d.ts +28 -0
  162. package/dist/engine/checkpoint/route.js +28 -0
  163. package/dist/{core → engine}/config.d.ts +7 -2
  164. package/dist/engine/config.js +6 -0
  165. package/dist/engine/engine.d.ts +45 -0
  166. package/dist/{core → engine}/engine.js +6 -10
  167. package/dist/engine/env.d.ts +59 -0
  168. package/dist/engine/env.js +83 -0
  169. package/dist/{errors.d.ts → engine/errors.d.ts} +23 -22
  170. package/dist/{errors.js → engine/errors.js} +22 -22
  171. package/dist/{core → engine/flow}/branch-regression.d.ts +8 -7
  172. package/dist/{core → engine/flow}/branch-regression.js +4 -3
  173. package/dist/engine/flow/flow.d.ts +162 -0
  174. package/dist/engine/flow/flow.js +244 -0
  175. package/dist/{core → engine/flow}/map-builder.d.ts +42 -40
  176. package/dist/{core → engine/flow}/map-builder.js +46 -48
  177. package/dist/{core → engine}/locate.d.ts +1 -1
  178. package/dist/{core → engine}/locate.js +1 -2
  179. package/dist/{mem-stub.d.ts → engine/mem/mem-stub.d.ts} +9 -8
  180. package/dist/{mem-stub.js → engine/mem/mem-stub.js} +2 -2
  181. package/dist/{mem-page.d.ts → engine/mem/mem.d.ts} +1 -1
  182. package/dist/{mem-page.js → engine/mem/mem.js} +2 -1
  183. package/dist/engine/page-gone.d.ts +5 -0
  184. package/dist/engine/page-gone.js +20 -0
  185. package/dist/engine/run/connect.d.ts +28 -0
  186. package/dist/{types.js → engine/run/connect.js} +11 -10
  187. package/dist/engine/run/events.d.ts +67 -0
  188. package/dist/engine/run/events.js +90 -0
  189. package/dist/engine/run/hooks.d.ts +16 -0
  190. package/dist/engine/run/hooks.js +8 -0
  191. package/dist/engine/run/launch.d.ts +13 -0
  192. package/dist/engine/run/launch.js +27 -0
  193. package/dist/{core/run-graph.d.ts → engine/run/run.d.ts} +9 -11
  194. package/dist/{core/run-graph.js → engine/run/run.js} +22 -11
  195. package/dist/engine/stub/pace.d.ts +12 -0
  196. package/dist/engine/stub/pace.js +2 -0
  197. package/dist/engine/stub/ring.d.ts +130 -0
  198. package/dist/engine/stub/ring.js +41 -0
  199. package/dist/engine/stub/stub.d.ts +268 -0
  200. package/dist/engine/stub/stub.js +1 -0
  201. package/dist/engine/stub/todos.d.ts +104 -0
  202. package/dist/engine/stub/todos.js +2 -0
  203. package/dist/engine/stub/viewport.d.ts +26 -0
  204. package/dist/engine/stub/viewport.js +2 -0
  205. package/dist/{trait.d.ts → engine/trait/trait.d.ts} +1 -1
  206. package/dist/index.d.ts +84 -36
  207. package/dist/index.js +44 -19
  208. package/dist/{session/auto-explore-run.d.ts → live/auto/auto.d.ts} +10 -16
  209. package/dist/{session/auto-explore-run.js → live/auto/auto.js} +164 -248
  210. package/dist/{session/auto-explore.d.ts → live/auto/explore.d.ts} +4 -14
  211. package/dist/{session/auto-explore.js → live/auto/explore.js} +21 -127
  212. package/dist/{auto-session/session.d.ts → live/auto-session/auto-session.d.ts} +1 -1
  213. package/dist/{auto-session/session.js → live/auto-session/auto-session.js} +27 -24
  214. package/dist/{auto-session → live/auto-session}/helpers.d.ts +16 -5
  215. package/dist/{auto-session → live/auto-session}/helpers.js +1 -1
  216. package/dist/{session/auto-session-ipc.d.ts → live/auto-session/ipc.d.ts} +7 -5
  217. package/dist/{session/auto-session-ipc.js → live/auto-session/ipc.js} +31 -16
  218. package/dist/{session/browser.d.ts → live/auto-session/start.d.ts} +1 -2
  219. package/dist/{session/browser.js → live/auto-session/start.js} +2 -3
  220. package/dist/{pilot-overlay → live/pilot}/panel.d.ts +1 -1
  221. package/dist/{pilot-overlay → live/pilot}/panel.js +23 -31
  222. package/dist/{session → live/pilot}/pilot.d.ts +4 -3
  223. package/dist/{session → live/pilot}/pilot.js +4 -4
  224. package/dist/{traverse → live/traverse}/coverage.d.ts +4 -0
  225. package/dist/{traverse → live/traverse}/coverage.js +3 -0
  226. package/dist/{traverse → live/traverse}/lease.d.ts +1 -0
  227. package/dist/{traverse → live/traverse}/lease.js +1 -0
  228. package/dist/{traverse/run.d.ts → live/traverse/traverse.d.ts} +4 -1
  229. package/dist/{traverse/run.js → live/traverse/traverse.js} +26 -43
  230. package/dist/manifest/manifest.d.ts +52 -0
  231. package/dist/manifest/manifest.js +93 -0
  232. package/dist/manifest/map-imports.d.ts +7 -0
  233. package/dist/manifest/map-imports.js +22 -0
  234. package/dist/manifest/maps.d.ts +33 -0
  235. package/dist/manifest/maps.js +62 -0
  236. package/dist/manifest/pack.d.ts +21 -0
  237. package/dist/manifest/pack.js +109 -0
  238. package/dist/manifest/project.d.ts +60 -0
  239. package/dist/manifest/project.js +101 -0
  240. package/dist/{session/block-inject.js → manifest/roots.js} +1 -18
  241. package/dist/manifest/scan.d.ts +19 -0
  242. package/dist/manifest/scan.js +57 -0
  243. package/dist/{blocks-select.d.ts → manifest/select.d.ts} +3 -0
  244. package/dist/{blocks-select.js → manifest/select.js} +2 -0
  245. package/dist/manifest/source.d.ts +23 -0
  246. package/dist/manifest/source.js +86 -0
  247. package/dist/runner/mode.d.ts +71 -0
  248. package/dist/runner/mode.js +1 -0
  249. package/dist/runner/modes/branches.d.ts +5 -0
  250. package/dist/runner/modes/branches.js +37 -0
  251. package/dist/runner/modes/demo.d.ts +3 -0
  252. package/dist/runner/modes/demo.js +13 -0
  253. package/dist/runner/modes/report.d.ts +2 -0
  254. package/dist/runner/modes/report.js +54 -0
  255. package/dist/runner/modes/run.d.ts +2 -0
  256. package/dist/runner/modes/run.js +3 -0
  257. package/dist/runner/options.d.ts +31 -0
  258. package/dist/runner/options.js +42 -0
  259. package/dist/runner/plan/find.d.ts +18 -0
  260. package/dist/runner/plan/find.js +65 -0
  261. package/dist/runner/plan/plan.d.ts +11 -0
  262. package/dist/runner/plan/plan.js +97 -0
  263. package/dist/runner/plan/seed-mem.d.ts +12 -0
  264. package/dist/runner/plan/seed-mem.js +98 -0
  265. package/dist/runner/plan/spec.d.ts +5 -0
  266. package/dist/runner/plan/spec.js +17 -0
  267. package/dist/runner/play-steps.d.ts +2 -0
  268. package/dist/runner/play-steps.js +59 -0
  269. package/dist/runner/runner.d.ts +4 -0
  270. package/dist/runner/runner.js +64 -0
  271. package/dist/runner/session.d.ts +9 -0
  272. package/dist/runner/session.js +87 -0
  273. package/dist/{browser.js → runtime/browser.js} +4 -2
  274. package/dist/{env-file.js → runtime/env-file.js} +7 -12
  275. package/dist/{extensions.d.ts → runtime/extensions.d.ts} +2 -5
  276. package/dist/{extensions.js → runtime/extensions.js} +3 -1
  277. package/dist/runtime/full-launch.d.ts +1 -0
  278. package/dist/runtime/full-launch.js +34 -0
  279. package/dist/runtime/global-flag.d.ts +5 -0
  280. package/dist/runtime/global-flag.js +18 -0
  281. package/dist/{playwright-config.d.ts → runtime/playwright-config.d.ts} +1 -1
  282. package/dist/{playwright.config.js → runtime/playwright.config.js} +3 -2
  283. package/dist/runtime/run-log.d.ts +2 -0
  284. package/dist/runtime/run-log.js +17 -0
  285. package/dist/{video-dir.js → runtime/video-dir.js} +3 -2
  286. package/dist/{config.d.ts → runtime/waygraph-config.d.ts} +8 -9
  287. package/dist/{config.js → runtime/waygraph-config.js} +21 -51
  288. package/dist/{webserver.js → runtime/webserver.js} +5 -30
  289. package/examples/routed-demo/config/waygraph.config.ts +20 -0
  290. package/examples/routed-demo/package.json +1 -4
  291. package/examples/routed-demo/scripts/fixture-server.mjs +1 -1
  292. package/examples/routed-demo/src/flows/routed-demo-map.flow.ts +2 -4
  293. package/examples/routed-demo/src/flows/routed-demo.flow.ts +2 -3
  294. package/examples/routed-demo/src/map/(app_base)/dashboard/_methods/click-widget.block.ts +5 -4
  295. package/examples/routed-demo/src/map/(app_base)/dashboard/_nav.block.ts +3 -3
  296. package/examples/routed-demo/src/map/(app_base)/dashboard/_page.block.ts +3 -3
  297. package/examples/routed-demo/src/map/(external)/docs/_nav.block.ts +3 -3
  298. package/examples/routed-demo/src/map/(external)/docs/_page.block.ts +3 -3
  299. package/examples/routed-demo/src/states/routed-demo.states.ts +5 -3
  300. package/examples/routed-demo/tests/routed-demo.spec.ts +4 -4
  301. package/examples/routed-demo/tsconfig.json +1 -1
  302. package/examples/saucedemo/README.md +11 -12
  303. package/examples/saucedemo/config/waygraph.config.ts +17 -0
  304. package/examples/saucedemo/docs/CONVENTION.md +5 -7
  305. package/examples/saucedemo/docs/HELPERS.md +12 -12
  306. package/examples/saucedemo/package-lock.json +10 -3
  307. package/examples/saucedemo/package.json +12 -29
  308. package/examples/saucedemo/src/blocks/SITE-MAP.md +0 -1
  309. package/examples/saucedemo/src/blocks/saucedemo-web/NAV.md +1 -5
  310. package/examples/saucedemo/src/blocks/saucedemo-web/cart/nav-cart.block.ts +3 -52
  311. package/examples/saucedemo/src/blocks/saucedemo-web/cart/nav-checkout-info.block.ts +3 -3
  312. package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-one/methods/fill-first-name.method.block.ts +5 -4
  313. package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-one/methods/fill-last-name.method.block.ts +5 -4
  314. package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-one/methods/fill-postal-code.method.block.ts +5 -4
  315. package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-one/methods/submit-checkout-info.method.block.ts +5 -4
  316. package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-two/methods/finish-order.method.block.ts +21 -27
  317. package/examples/saucedemo/src/blocks/saucedemo-web/inventory/inventory.page.block.ts +3 -9
  318. package/examples/saucedemo/src/blocks/saucedemo-web/inventory/methods/add-all-to-cart.method.block.ts +4 -6
  319. package/examples/saucedemo/src/blocks/saucedemo-web/inventory/methods/add-to-cart.effect.block.ts +10 -76
  320. package/examples/saucedemo/src/blocks/saucedemo-web/inventory/methods/remove-all-from-cart.method.block.ts +4 -6
  321. package/examples/saucedemo/src/blocks/saucedemo-web/inventory/methods/remove-from-cart.effect.block.ts +4 -3
  322. package/examples/saucedemo/src/blocks/saucedemo-web/inventory/nav-item-detail.block.ts +3 -3
  323. package/examples/saucedemo/src/blocks/saucedemo-web/inventory-item/nav-back-to-inventory.block.ts +3 -3
  324. package/examples/saucedemo/src/blocks/saucedemo-web/inventory-item/nav-back-to-products.block.ts +3 -3
  325. package/examples/saucedemo/src/blocks/saucedemo-web/inventory-item/nav-continue-shopping.block.ts +3 -3
  326. package/examples/saucedemo/src/blocks/saucedemo-web/methods/fill-password.method.block.ts +5 -29
  327. package/examples/saucedemo/src/blocks/saucedemo-web/methods/fill-username.method.block.ts +5 -48
  328. package/examples/saucedemo/src/blocks/saucedemo-web/methods/submit-login.method.block.ts +13 -77
  329. package/examples/saucedemo/src/blocks/saucedemo-web/methods/submit-logout.method.block.ts +5 -4
  330. package/examples/saucedemo/src/blocks/saucedemo-web/nav-login.block.ts +3 -3
  331. package/examples/saucedemo/src/flows/api-demo.flow.ts +26 -18
  332. package/examples/saucedemo/src/flows/cart-bulk.flow.ts +19 -14
  333. package/examples/saucedemo/src/flows/cart-continue.flow.ts +10 -8
  334. package/examples/saucedemo/src/flows/cart-mem.flow.ts +7 -7
  335. package/examples/saucedemo/src/flows/catalog-logout.flow.ts +13 -8
  336. package/examples/saucedemo/src/flows/checkout-then-browse-again.flow.ts +26 -48
  337. package/examples/saucedemo/src/flows/checkout.flow.ts +70 -86
  338. package/examples/saucedemo/src/flows/device-showcase.flow.ts +24 -25
  339. package/examples/saucedemo/src/flows/login.flow.ts +11 -18
  340. package/examples/saucedemo/src/flows/mem-stub-demo.flow.ts +9 -20
  341. package/examples/saucedemo/src/flows/shop.flow.ts +15 -20
  342. package/examples/saucedemo/src/flows/smoke.flow.ts +12 -27
  343. package/examples/saucedemo/src/flows/stub-on-error.flow.ts +24 -43
  344. package/examples/saucedemo/src/flows/viewer-blocked.flow.ts +26 -34
  345. package/examples/saucedemo/src/states/checkout.mem-stubs.ts +11 -0
  346. package/examples/saucedemo/src/states/checkout.states.ts +21 -11
  347. package/examples/saucedemo/src/stubs/device-showcase.ts +191 -0
  348. package/examples/saucedemo/src/stubs/login.ts +37 -0
  349. package/examples/saucedemo/tests/auto-graph.spec.ts +4 -12
  350. package/examples/saucedemo/tests/chain-flow-episodes.spec.ts +7 -9
  351. package/examples/saucedemo/tests/submit-login-branch.spec.ts +18 -5
  352. package/package.json +12 -7
  353. package/templates/agents/waygraph-planner.agent.md +2 -2
  354. package/templates/quickstart/README.md +4 -7
  355. package/templates/quickstart/config/waygraph.config.ts +17 -0
  356. package/templates/quickstart/docs/CONVENTION.md +5 -6
  357. package/templates/quickstart/docs/HELPERS.md +11 -9
  358. package/templates/quickstart/package.json +14 -17
  359. package/templates/quickstart/src/blocks/SITE-MAP.md +13 -3
  360. package/templates/quickstart/src/blocks/saucedemo-web/NAV.md +1 -5
  361. package/templates/quickstart/src/blocks/saucedemo-web/cart/nav-cart.block.ts +3 -52
  362. package/templates/quickstart/src/blocks/saucedemo-web/cart/nav-checkout-info.block.ts +3 -3
  363. package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-one/methods/fill-first-name.method.block.ts +5 -4
  364. package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-one/methods/fill-last-name.method.block.ts +5 -4
  365. package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-one/methods/fill-postal-code.method.block.ts +5 -4
  366. package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-one/methods/submit-checkout-info.method.block.ts +5 -4
  367. package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-two/methods/finish-order.method.block.ts +21 -27
  368. package/templates/quickstart/src/blocks/saucedemo-web/inventory/inventory.page.block.ts +3 -9
  369. package/templates/quickstart/src/blocks/saucedemo-web/inventory/methods/add-all-to-cart.method.block.ts +4 -6
  370. package/templates/quickstart/src/blocks/saucedemo-web/inventory/methods/add-to-cart.effect.block.ts +10 -76
  371. package/templates/quickstart/src/blocks/saucedemo-web/inventory/methods/remove-all-from-cart.method.block.ts +4 -6
  372. package/templates/quickstart/src/blocks/saucedemo-web/inventory/methods/remove-from-cart.effect.block.ts +4 -3
  373. package/templates/quickstart/src/blocks/saucedemo-web/inventory/nav-item-detail.block.ts +3 -3
  374. package/templates/quickstart/src/blocks/saucedemo-web/inventory-item/nav-back-to-inventory.block.ts +3 -3
  375. package/templates/quickstart/src/blocks/saucedemo-web/inventory-item/nav-back-to-products.block.ts +3 -3
  376. package/templates/quickstart/src/blocks/saucedemo-web/inventory-item/nav-continue-shopping.block.ts +3 -3
  377. package/templates/quickstart/src/blocks/saucedemo-web/methods/fill-password.method.block.ts +5 -29
  378. package/templates/quickstart/src/blocks/saucedemo-web/methods/fill-username.method.block.ts +5 -48
  379. package/templates/quickstart/src/blocks/saucedemo-web/methods/submit-login.method.block.ts +13 -77
  380. package/templates/quickstart/src/blocks/saucedemo-web/methods/submit-logout.method.block.ts +5 -4
  381. package/templates/quickstart/src/blocks/saucedemo-web/nav-login.block.ts +3 -3
  382. package/templates/quickstart/src/flows/api-demo.flow.ts +45 -0
  383. package/templates/quickstart/src/flows/cart-bulk.flow.ts +19 -14
  384. package/templates/quickstart/src/flows/cart-continue.flow.ts +10 -8
  385. package/templates/quickstart/src/flows/cart-mem.flow.ts +7 -7
  386. package/templates/quickstart/src/flows/catalog-logout.flow.ts +13 -8
  387. package/templates/quickstart/src/flows/checkout-then-browse-again.flow.ts +26 -48
  388. package/templates/quickstart/src/flows/checkout.flow.ts +70 -63
  389. package/templates/quickstart/src/flows/device-showcase.flow.ts +24 -25
  390. package/templates/quickstart/src/flows/login.flow.ts +11 -18
  391. package/templates/quickstart/src/flows/mem-stub-demo.flow.ts +12 -0
  392. package/templates/quickstart/src/flows/shop.flow.ts +15 -20
  393. package/templates/quickstart/src/flows/smoke.flow.ts +12 -27
  394. package/templates/quickstart/src/flows/stub-on-error.flow.ts +31 -0
  395. package/templates/quickstart/src/flows/viewer-blocked.flow.ts +26 -34
  396. package/templates/quickstart/src/states/checkout.mem-stubs.ts +11 -0
  397. package/templates/quickstart/src/states/checkout.states.ts +21 -11
  398. package/templates/quickstart/src/stubs/device-showcase.ts +191 -0
  399. package/templates/quickstart/src/stubs/login.ts +37 -0
  400. package/templates/quickstart/tests/chain-flow.spec.ts +7 -10
  401. package/templates/scaffold/README.md +2 -1
  402. package/templates/scaffold/STRUCTURE.md +5 -4
  403. package/templates/scaffold/config/waygraph.config.ts +1 -0
  404. package/templates/scaffold/gitignore +1 -0
  405. package/templates/scaffold/src/flows/README.md +2 -2
  406. package/templates/scaffold/src/map/(app_base)/docs/_nav.block.ts +3 -3
  407. package/templates/scaffold/src/map/(app_base)/docs/_page.block.ts +3 -3
  408. package/templates/scaffold/src/map/(app_base)/home/_methods/add-item.effect.block.ts +4 -4
  409. package/templates/scaffold/src/map/(app_base)/home/_methods/assert-hello.method.block.ts +3 -3
  410. package/templates/scaffold/src/map/(app_base)/home/_methods/assert-item-added.method.block.ts +3 -3
  411. package/templates/scaffold/src/map/(app_base)/home/_methods/clear-cart.method.block.ts +5 -4
  412. package/templates/scaffold/src/map/(app_base)/home/_methods/remove-item.effect.block.ts +4 -4
  413. package/templates/scaffold/src/map/(app_base)/home/_nav.block.ts +3 -3
  414. package/templates/scaffold/src/map/(app_base)/home/_page.block.ts +3 -3
  415. package/templates/scaffold/src/map/(app_base)/home/nav-verification-link.block.ts +4 -4
  416. package/templates/scaffold/src/map/(external)/hoppscotch/_keys.ts +21 -0
  417. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/assert-response-body.method.block.ts +4 -4
  418. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/assert-response-header.method.block.ts +4 -4
  419. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/assert-status.method.block.ts +4 -4
  420. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/pick-extension-interceptor.method.block.ts +5 -4
  421. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/read-response-body.method.block.ts +6 -5
  422. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/read-response-headers.method.block.ts +6 -5
  423. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/send-request.method.block.ts +5 -4
  424. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/set-bearer-token.method.block.ts +6 -5
  425. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/set-headers.method.block.ts +6 -5
  426. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/set-json-body.method.block.ts +6 -5
  427. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/set-method.method.block.ts +6 -5
  428. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/set-query-params.method.block.ts +6 -5
  429. package/templates/scaffold/src/map/(external)/hoppscotch/_methods/set-url.method.block.ts +6 -5
  430. package/templates/scaffold/src/map/(external)/hoppscotch/_nav.block.ts +3 -3
  431. package/templates/scaffold/src/map/(external)/hoppscotch/_page.block.ts +3 -3
  432. package/templates/scaffold/src/map/(external)/hoppscotch/_states.ts +6 -0
  433. package/templates/scaffold/src/map/(external)/hoppscotch/settings/_nav.block.ts +3 -3
  434. package/templates/scaffold/src/map/(external)/mailpit/_keys.ts +13 -0
  435. package/templates/scaffold/src/map/(external)/mailpit/_methods/assert-email-content.method.block.ts +4 -4
  436. package/templates/scaffold/src/map/(external)/mailpit/_methods/assert-email-received.method.block.ts +4 -4
  437. package/templates/scaffold/src/map/(external)/mailpit/_methods/extract-email-link.method.block.ts +6 -5
  438. package/templates/scaffold/src/map/(external)/mailpit/_methods/open-message.method.block.ts +6 -5
  439. package/templates/scaffold/src/map/(external)/mailpit/_nav.block.ts +3 -3
  440. package/templates/scaffold/src/map/(external)/mailpit/_page.block.ts +3 -3
  441. package/templates/scaffold/src/map/(external)/mailpit/_states.ts +9 -0
  442. package/templates/scaffold/src/map/README.md +7 -0
  443. package/templates/scaffold/src/states/README.md +4 -1
  444. package/templates/scaffold/src/states/demo.mem-keys.ts +1 -29
  445. package/templates/scaffold/src/states/demo.states.ts +14 -20
  446. package/templates/scaffold/tests/hoppscotch.spec.ts +1 -11
  447. package/templates/scaffold/tests/mail-verify.spec.ts +2 -2
  448. package/templates/skills/waygraph-blind-pilot.skill.md +2 -6
  449. package/templates/skills/waygraph-convention.skill.md +23 -14
  450. package/templates/skills/waygraph-pilot.skill.md +7 -4
  451. package/dist/auto-session/verbose-log.js +0 -16
  452. package/dist/auto-session.d.ts +0 -2
  453. package/dist/auto-session.js +0 -3
  454. package/dist/cli/discover.d.ts +0 -40
  455. package/dist/cli/discover.js +0 -148
  456. package/dist/commands/agent-dive.js +0 -52
  457. package/dist/commands/check.js +0 -192
  458. package/dist/commands/map.js +0 -29
  459. package/dist/commands/run.js +0 -104
  460. package/dist/commands/traverse.js +0 -177
  461. package/dist/core/block.d.ts +0 -109
  462. package/dist/core/blocks/effect.js +0 -23
  463. package/dist/core/config.js +0 -17
  464. package/dist/core/engine.d.ts +0 -198
  465. package/dist/core/flow.d.ts +0 -293
  466. package/dist/core/flow.js +0 -432
  467. package/dist/core.d.ts +0 -14
  468. package/dist/core.js +0 -15
  469. package/dist/highlights/merge.d.ts +0 -8
  470. package/dist/highlights/merge.js +0 -173
  471. package/dist/highlights/stub-ctx.d.ts +0 -10
  472. package/dist/highlights/stub-ctx.js +0 -331
  473. package/dist/highlights/types.d.ts +0 -607
  474. package/dist/highlights.d.ts +0 -9
  475. package/dist/highlights.js +0 -10
  476. package/dist/pilot-overlay.d.ts +0 -5
  477. package/dist/pilot-overlay.js +0 -6
  478. package/dist/runner/banner-log.js +0 -63
  479. package/dist/runner/chain-run.js +0 -102
  480. package/dist/runner/cursor.js +0 -140
  481. package/dist/runner/demo-log.js +0 -316
  482. package/dist/runner/device-stage.d.ts +0 -9
  483. package/dist/runner/device-stage.js +0 -420
  484. package/dist/runner/discovery.js +0 -105
  485. package/dist/runner/index.js +0 -2
  486. package/dist/runner/inpage/banner.d.ts +0 -21
  487. package/dist/runner/inpage/banner.js +0 -156
  488. package/dist/runner/inpage/caption.d.ts +0 -3
  489. package/dist/runner/inpage/caption.js +0 -23
  490. package/dist/runner/inpage/core.d.ts +0 -4
  491. package/dist/runner/inpage/core.js +0 -316
  492. package/dist/runner/inpage/device.d.ts +0 -3
  493. package/dist/runner/inpage/device.js +0 -211
  494. package/dist/runner/inpage/network.d.ts +0 -15
  495. package/dist/runner/inpage/network.js +0 -217
  496. package/dist/runner/inpage/panel-chrome.js +0 -192
  497. package/dist/runner/inpage/stamp.js +0 -46
  498. package/dist/runner/inpage/swipe-zoom.js +0 -220
  499. package/dist/runner/inpage/todos.js +0 -337
  500. package/dist/runner/interaction-patch.js +0 -384
  501. package/dist/runner/main.js +0 -469
  502. package/dist/runner/network-capture.d.ts +0 -9
  503. package/dist/runner/network-capture.js +0 -126
  504. package/dist/runner/overlay-css.d.ts +0 -3
  505. package/dist/runner/overlay-css.js +0 -377
  506. package/dist/runner/overlay-install.js +0 -90
  507. package/dist/runner/overlay-stage.js +0 -110
  508. package/dist/runner/rings.js +0 -514
  509. package/dist/runner/seed-mem.js +0 -110
  510. package/dist/runner/slides.js +0 -278
  511. package/dist/runner/step-mode.js +0 -703
  512. package/dist/runner/step-panels.js +0 -729
  513. package/dist/runner/teardown.js +0 -202
  514. package/dist/runner/todo-dock.js +0 -142
  515. package/dist/session/step-overlay.d.ts +0 -37
  516. package/dist/session/step-overlay.js +0 -244
  517. package/examples/routed-demo/playwright.config.ts +0 -21
  518. package/examples/saucedemo/playwright.config.ts +0 -19
  519. package/examples/saucedemo/scripts/drive-auto-cli.mjs +0 -93
  520. package/examples/saucedemo/scripts/prove-add-to-cart-menu.mjs +0 -126
  521. package/examples/saucedemo/scripts/prove-auto-graph.mjs +0 -92
  522. package/examples/saucedemo/scripts/prove-wrong-login-runtime.mjs +0 -63
  523. package/examples/saucedemo/src/blocks/saucedemo-web/ff-owner-auth.block.ts +0 -22
  524. package/templates/quickstart/playwright.config.ts +0 -14
  525. package/templates/quickstart/scripts/drive-auto-cli.mjs +0 -93
  526. package/templates/quickstart/src/blocks/saucedemo-web/ff-owner-auth.block.ts +0 -22
  527. /package/dist/{commands → cli/commands}/agent-dive-scaffold.d.ts +0 -0
  528. /package/dist/{commands → cli/commands}/agent-dive.d.ts +0 -0
  529. /package/dist/{commands → cli/commands}/extensions.d.ts +0 -0
  530. /package/dist/{commands → cli/commands}/init.d.ts +0 -0
  531. /package/dist/{commands → cli/commands}/list.d.ts +0 -0
  532. /package/dist/{commands → cli/commands}/map.d.ts +0 -0
  533. /package/dist/{commands → cli/commands}/session.d.ts +0 -0
  534. /package/dist/{commands → cli/commands}/test.d.ts +0 -0
  535. /package/dist/{commands → cli/commands}/traverse.d.ts +0 -0
  536. /package/dist/{commands → cli/commands}/try.d.ts +0 -0
  537. /package/dist/{commands → cli/commands}/upgrade.d.ts +0 -0
  538. /package/dist/{highlights → demo/narration}/shorthand.js +0 -0
  539. /package/dist/{pilot-overlay/action-ring.d.ts → demo/overlay/pilot/actions.d.ts} +0 -0
  540. /package/dist/{ui → demo/overlay/ui}/components/ring.d.ts +0 -0
  541. /package/dist/{ui → demo/overlay/ui}/stylesheet.d.ts +0 -0
  542. /package/dist/{ui → demo/overlay/ui}/stylesheet.js +0 -0
  543. /package/dist/{ui → demo/overlay/ui}/tokens.d.ts +0 -0
  544. /package/dist/{ui → demo/overlay/ui}/tokens.js +0 -0
  545. /package/dist/{highlights → demo}/types.js +0 -0
  546. /package/dist/{auto-session → demo}/verbose-log.d.ts +0 -0
  547. /package/dist/{selector.d.ts → engine/trait/selector.d.ts} +0 -0
  548. /package/dist/{selector.js → engine/trait/selector.js} +0 -0
  549. /package/dist/{trait.js → engine/trait/trait.js} +0 -0
  550. /package/dist/{session/block-inject.d.ts → manifest/roots.d.ts} +0 -0
  551. /package/dist/{browser.d.ts → runtime/browser.d.ts} +0 -0
  552. /package/dist/{env-file.d.ts → runtime/env-file.d.ts} +0 -0
  553. /package/dist/{playwright-config.js → runtime/playwright-config.js} +0 -0
  554. /package/dist/{playwright.config.d.ts → runtime/playwright.config.d.ts} +0 -0
  555. /package/dist/{video-dir.d.ts → runtime/video-dir.d.ts} +0 -0
  556. /package/dist/{webserver.d.ts → runtime/webserver.d.ts} +0 -0
@@ -1,5 +1,8 @@
1
- import { defineMethodBlock, checkpoint, Trait, narrate, type StubCtx } from "waygraph";
2
- import type { CheckoutOverviewPage, OrderComplete } from "../../../../states/checkout.states.js";
1
+ import { defineMethodBlock, Trait, narrate } from "waygraph";
2
+ import {
3
+ CheckoutOverviewPage,
4
+ OrderComplete,
5
+ } from "../../../../states/checkout.states.js";
3
6
  import { CheckoutOverviewSel } from "./checkout-overview.sel.js";
4
7
 
5
8
  /**
@@ -8,36 +11,26 @@ import { CheckoutOverviewSel } from "./checkout-overview.sel.js";
8
11
  * Route: saucedemo-web/checkout-step-two/methods/ (= /checkout-step-two.html)
9
12
  *
10
13
  * Places the order on the overview page - form/finish click, not a NavBlock.
11
- * Stubs use open ctx lifecycles (preferred) - not static slot maps.
12
14
  */
13
- export const FinishOrderBlock = defineMethodBlock<CheckoutOverviewPage, OrderComplete>({
15
+ export const FinishOrderBlock = defineMethodBlock({
14
16
  name: "finish-order",
15
- description: "Places the order and confirms the 'Thank you for your order!' completion page.",
17
+ description:
18
+ "Places the order and confirms the 'Thank you for your order!' completion page.",
19
+ from: CheckoutOverviewPage,
20
+ to: OrderComplete,
16
21
  instruction: {
17
22
  async act(page) {
18
23
  const finishButton = page.locator(CheckoutOverviewSel.finishBtn);
19
- await narrate(finishButton, "Placing the order", () => finishButton.click());
20
- },
21
- resolve: () => checkpoint("OrderComplete"),
22
- verify: [Trait.text(CheckoutOverviewSel.completeHeader, "Thank you for your order!")],
23
- stubBefore: (ctx: StubCtx) => {
24
- ctx.ring("finish", {
25
- selector: CheckoutOverviewSel.finishBtn,
26
- label: "Finish",
27
- detail: "tone: warning (yellow) - place order",
28
- tone: "warning",
29
- weight: "bold",
30
- });
31
- },
32
- stubAfter: (ctx: StubCtx) => {
33
- ctx.ring("thanks", {
34
- selector: CheckoutOverviewSel.completeHeader,
35
- label: "Order confirmed",
36
- detail: "tone: success (green) - thank you!",
37
- tone: "success",
38
- duration: true,
39
- });
24
+ await narrate(finishButton, "Placing the order", () =>
25
+ finishButton.click(),
26
+ );
40
27
  },
28
+ verify: [
29
+ Trait.text(
30
+ CheckoutOverviewSel.completeHeader,
31
+ "Thank you for your order!",
32
+ ),
33
+ ],
41
34
  // Shown AFTER act (order already placed) - selectors must match the
42
35
  // completion page, not #finish on the overview.
43
36
  slides: [
@@ -50,7 +43,8 @@ export const FinishOrderBlock = defineMethodBlock<CheckoutOverviewPage, OrderCom
50
43
  },
51
44
  {
52
45
  caption: "Completion page is the durable proof",
53
- detail: "tone: success - the thank-you header is what verify asserts on.",
46
+ detail:
47
+ "tone: success - the thank-you header is what verify asserts on.",
54
48
  tag: "YAP",
55
49
  tone: "success",
56
50
  selector: CheckoutOverviewSel.completeHeader,
@@ -1,6 +1,5 @@
1
1
  import { definePageBlock, Trait } from "waygraph";
2
- import type { StubCtx } from "waygraph";
3
- import type { LoggedIn } from "../../../states/checkout.states.js";
2
+ import { LoggedIn } from "../../../states/checkout.states.js";
4
3
  import { AddToCartBlock } from "./methods/add-to-cart.effect.block.js";
5
4
  import { RemoveFromCartBlock } from "./methods/remove-from-cart.effect.block.js";
6
5
  import { AddAllToCartBlock } from "./methods/add-all-to-cart.method.block.js";
@@ -19,20 +18,15 @@ import { InventorySel } from "./methods/inventory-items.js";
19
18
  * to LoggedIn. Cart Effects/Methods use In Checkpoint<string> (from: "*") so
20
19
  * auto still offers them after leave/return - menu follows live DOM buttons.
21
20
  */
22
- export const InventoryPageBlock = definePageBlock<LoggedIn>({
21
+ export const InventoryPageBlock = definePageBlock({
23
22
  name: "page-inventory",
24
23
  description:
25
24
  "Inventory catalog hub - per-item and bulk add/remove, open item detail.",
26
- checkpoint: "LoggedIn",
25
+ checkpoint: LoggedIn,
27
26
  verify: [
28
27
  Trait.url({ pathname: "/inventory.html" }),
29
28
  Trait.visible(InventorySel.list),
30
29
  ],
31
- // Showcase responsive dashboard: tablet after mobile login (toast + lerp).
32
- stubBefore: (ctx: StubCtx) => {
33
- ctx.title("Inventory · tablet");
34
- ctx.device("tablet");
35
- },
36
30
  methods: {
37
31
  addToCart: () => AddToCartBlock,
38
32
  removeFromCart: () => RemoveFromCartBlock,
@@ -1,5 +1,5 @@
1
- import { defineMethodBlock, checkpoint, type Checkpoint } from "waygraph";
2
- import type { RemoveFromCartOutcome } from "../../../../states/checkout.states.js";
1
+ import { defineMethodBlock, checkpoint } from "waygraph";
2
+ import { RemoveFromCartOutcome } from "../../../../states/checkout.states.js";
3
3
  import { collectAddableItems, InventorySel } from "./inventory-items.js";
4
4
 
5
5
  type BulkObserve = "added" | "nothing";
@@ -14,12 +14,10 @@ type BulkObserve = "added" | "nothing";
14
14
  * leave inventory and return, collectors re-read Add buttons from the DOM.
15
15
  * Out: ItemInCart if the cart has items after; LoggedIn if still empty.
16
16
  */
17
- export const AddAllToCartBlock = defineMethodBlock<
18
- Checkpoint<string>,
19
- RemoveFromCartOutcome
20
- >({
17
+ export const AddAllToCartBlock = defineMethodBlock({
21
18
  name: "add-all-to-cart",
22
19
  description: "Adds every product still showing Add to cart on this page.",
20
+ to: RemoveFromCartOutcome,
23
21
  instruction: {
24
22
  async act(page) {
25
23
  const items = await collectAddableItems(page);
@@ -1,12 +1,8 @@
1
- import { defineEffectBlock, checkpoint, type Checkpoint, type WaygraphInstanceOption } from "waygraph";
2
- import type { StubCtx } from "waygraph";
3
- import type { ItemInCart } from "../../../../states/checkout.states.js";
1
+ import { defineEffectBlock, type WaygraphInstanceOption } from "waygraph";
2
+ import { ItemInCart } from "../../../../states/checkout.states.js";
4
3
  import { SelectedItem } from "../../../../states/checkout.mem-keys.js";
5
4
  import { collectAddableItems, InventorySel } from "./inventory-items.js";
6
5
 
7
- /** Showcase product for headed demos (matches shopFlow --data selectedItem). */
8
- const DEMO_PRODUCT_ID = "sauce-labs-backpack";
9
-
10
6
  /**
11
7
  * Kind: Effect
12
8
  * Helper: defineEffectBlock
@@ -15,91 +11,29 @@ const DEMO_PRODUCT_ID = "sauce-labs-backpack";
15
11
  * Mutates cart for the mem-picked product. waygraph auto lists one
16
12
  * "Add ..." row per live Add button via instanceOptions.
17
13
  */
18
- export const AddToCartBlock = defineEffectBlock<Checkpoint<string>, ItemInCart>({
14
+ export const AddToCartBlock = defineEffectBlock({
19
15
  name: "add-to-cart",
20
- description: "Adds the item named by mem (saucedemo.selectedItem) to the cart.",
16
+ description:
17
+ "Adds the item named by mem (saucedemo.selectedItem) to the cart.",
18
+ to: ItemInCart,
21
19
  requires: [SelectedItem.key],
22
20
  instruction: {
23
21
  async act(page, _input, mem) {
24
22
  const { id } = mem.get(SelectedItem.key);
25
23
  await page.locator(InventorySel.addBtn(id)).click();
26
24
  },
27
- resolve: () => checkpoint("ItemInCart"),
28
25
  verify: [
29
26
  {
30
27
  name: "item-added-to-cart",
31
28
  async check(page, mem) {
32
29
  const { id } = mem.get(SelectedItem.key);
33
- return await page.locator(InventorySel.removeBtn(id)).first().isVisible();
30
+ return await page
31
+ .locator(InventorySel.removeBtn(id))
32
+ .first()
33
+ .isVisible();
34
34
  },
35
35
  },
36
36
  ],
37
- // Demo: zoom product -> add (stay zoomed), then badge after act.
38
- stubBefore: (ctx: StubCtx) => {
39
- ctx.title("Pick a product · tablet");
40
- ctx.device("tablet");
41
- ctx.portrait();
42
- ctx.todos(
43
- "saucedemo",
44
- [
45
- { id: "login-user", text: "Enter username", done: true },
46
- { id: "login-pass", text: "Enter password", done: true },
47
- { id: "login-submit", text: "Tap Login", done: true },
48
- { id: "cart-find", text: "Find the product" },
49
- { id: "cart-add", text: "Add to cart" },
50
- { id: "cart-open", text: "Open cart" },
51
- ],
52
- { title: "Device showcase", index: 3 },
53
- );
54
- ctx.zoom(1.35);
55
- ctx.zoomOut(false);
56
- ctx.highlights({
57
- product: {
58
- selector: InventorySel.title(DEMO_PRODUCT_ID),
59
- label: "Sauce Labs Backpack",
60
- detail: "tone: info (blue)",
61
- tone: "info",
62
- focus: true,
63
- zoom: 1.45,
64
- zoomOut: false,
65
- },
66
- add: {
67
- selector: InventorySel.addBtn(DEMO_PRODUCT_ID),
68
- label: "Add to cart",
69
- detail: "tone: success (green)",
70
- tone: "success",
71
- focus: true,
72
- zoom: 1.5,
73
- zoomOut: false,
74
- weight: "bold",
75
- },
76
- });
77
- },
78
- stubAfter: (ctx: StubCtx) => {
79
- ctx.banner("In the cart");
80
- ctx.todos(
81
- "saucedemo",
82
- [
83
- { id: "login-user", text: "Enter username", done: true },
84
- { id: "login-pass", text: "Enter password", done: true },
85
- { id: "login-submit", text: "Tap Login", done: true },
86
- { id: "cart-find", text: "Find the product", done: true },
87
- { id: "cart-add", text: "Add to cart" },
88
- { id: "cart-open", text: "Open cart" },
89
- ],
90
- { title: "Device showcase", index: 4 },
91
- );
92
- ctx.zoomOut(false);
93
- ctx.ring("badge", {
94
- selector: InventorySel.cartBadge,
95
- label: "Cart badge",
96
- detail: "tone: success (green) - count updated",
97
- tone: "success",
98
- focus: true,
99
- zoomOut: false,
100
- duration: true,
101
- });
102
- },
103
37
  },
104
38
  async instanceOptions(page): Promise<readonly WaygraphInstanceOption[]> {
105
39
  const items = await collectAddableItems(page);
@@ -1,5 +1,5 @@
1
- import { defineMethodBlock, checkpoint, type Checkpoint } from "waygraph";
2
- import type { RemoveFromCartOutcome } from "../../../../states/checkout.states.js";
1
+ import { defineMethodBlock, checkpoint } from "waygraph";
2
+ import { RemoveFromCartOutcome } from "../../../../states/checkout.states.js";
3
3
  import { collectRemovableItems, InventorySel } from "./inventory-items.js";
4
4
 
5
5
  type BulkObserve = "still-has-items" | "cart-empty";
@@ -14,12 +14,10 @@ type BulkObserve = "still-has-items" | "cart-empty";
14
14
  * single-item remove. Out: LoggedIn when cart empty; ItemInCart if anything
15
15
  * remains (partial failure / race).
16
16
  */
17
- export const RemoveAllFromCartBlock = defineMethodBlock<
18
- Checkpoint<string>,
19
- RemoveFromCartOutcome
20
- >({
17
+ export const RemoveAllFromCartBlock = defineMethodBlock({
21
18
  name: "remove-all-from-cart",
22
19
  description: "Removes every product still showing Remove on this page.",
20
+ to: RemoveFromCartOutcome,
23
21
  instruction: {
24
22
  async act(page) {
25
23
  const items = await collectRemovableItems(page);
@@ -1,5 +1,5 @@
1
- import { defineEffectBlock, checkpoint, type Checkpoint, type WaygraphInstanceOption } from "waygraph";
2
- import type { RemoveFromCartOutcome } from "../../../../states/checkout.states.js";
1
+ import { defineEffectBlock, checkpoint, type WaygraphInstanceOption } from "waygraph";
2
+ import { RemoveFromCartOutcome } from "../../../../states/checkout.states.js";
3
3
  import { SelectedItem } from "../../../../states/checkout.mem-keys.js";
4
4
  import { collectRemovableItems, InventorySel } from "./inventory-items.js";
5
5
 
@@ -13,9 +13,10 @@ type RemoveObserve = "still-has-items" | "cart-empty";
13
13
  * Removes the mem-picked product. After Add, waygraph auto shows matching
14
14
  * "Remove ..." rows from live Remove buttons.
15
15
  */
16
- export const RemoveFromCartBlock = defineEffectBlock<Checkpoint<string>, RemoveFromCartOutcome>({
16
+ export const RemoveFromCartBlock = defineEffectBlock({
17
17
  name: "remove-from-cart",
18
18
  description: "Removes the item named by mem (saucedemo.selectedItem) from the cart.",
19
+ to: RemoveFromCartOutcome,
19
20
  requires: [SelectedItem.key],
20
21
  instruction: {
21
22
  async act(page, _input, mem) {
@@ -1,5 +1,5 @@
1
1
  import { defineMemNavBlock, Trait, type WaygraphInstanceOption } from "waygraph";
2
- import type { ItemDetailPage } from "../../../states/checkout.states.js";
2
+ import { ItemDetailPage } from "../../../states/checkout.states.js";
3
3
  import { SelectedItem } from "../../../states/checkout.mem-keys.js";
4
4
  import {
5
5
  collectInventoryItems,
@@ -14,10 +14,10 @@ import {
14
14
  * Opens the mem-picked product detail page. waygraph auto lists one
15
15
  * "Open ... details" row per inventory card via instanceOptions.
16
16
  */
17
- export const NavItemDetailBlock = defineMemNavBlock<ItemDetailPage>({
17
+ export const NavItemDetailBlock = defineMemNavBlock({
18
18
  name: "nav-item-detail",
19
19
  description: "Opens the product named by mem (saucedemo.selectedItem) on its detail page.",
20
- checkpoint: "ItemDetailPage",
20
+ checkpoint: ItemDetailPage,
21
21
  requires: [SelectedItem.key],
22
22
  click: (mem) => InventorySel.title(mem.get(SelectedItem.key).id),
23
23
  verify: [Trait.url({ pathname: "/inventory-item.html" })],
@@ -1,5 +1,5 @@
1
1
  import { defineNavClickBlock, Trait } from "waygraph";
2
- import type { LoggedIn } from "../../../states/checkout.states.js";
2
+ import { LoggedIn } from "../../../states/checkout.states.js";
3
3
  import { ItemDetailSel } from "./item-detail.sel.js";
4
4
 
5
5
  /**
@@ -10,10 +10,10 @@ import { ItemDetailSel } from "./item-detail.sel.js";
10
10
  * click, not url - detail page "Back to products". Separate Block from
11
11
  * nav-back-to-products (different From Checkpoint; atomic convention).
12
12
  */
13
- export const NavBackToInventoryBlock = defineNavClickBlock<LoggedIn>({
13
+ export const NavBackToInventoryBlock = defineNavClickBlock({
14
14
  name: "nav-back-to-inventory",
15
15
  description: "Clicks 'Back to products' on the item detail page.",
16
- checkpoint: "LoggedIn",
16
+ checkpoint: LoggedIn,
17
17
  click: ItemDetailSel.backToProductsBtn,
18
18
  verify: [Trait.url({ pathname: "/inventory.html" })],
19
19
  });
@@ -1,5 +1,5 @@
1
1
  import { defineNavClickBlock, Trait } from "waygraph";
2
- import type { LoggedIn } from "../../../states/checkout.states.js";
2
+ import { LoggedIn } from "../../../states/checkout.states.js";
3
3
  import { ItemDetailSel } from "./item-detail.sel.js";
4
4
 
5
5
  /**
@@ -10,10 +10,10 @@ import { ItemDetailSel } from "./item-detail.sel.js";
10
10
  * click, not url - order-complete "Back Home" proves the button path
11
11
  * (a url NavBlock would teleport without exercising the control).
12
12
  */
13
- export const NavBackToProductsBlock = defineNavClickBlock<LoggedIn>({
13
+ export const NavBackToProductsBlock = defineNavClickBlock({
14
14
  name: "nav-back-to-products",
15
15
  description: "Clicks 'Back Home' on the order confirmation page.",
16
- checkpoint: "LoggedIn",
16
+ checkpoint: LoggedIn,
17
17
  click: ItemDetailSel.backToProductsBtn,
18
18
  verify: [Trait.url({ pathname: "/inventory.html" })],
19
19
  });
@@ -1,5 +1,5 @@
1
1
  import { defineNavClickBlock, Trait } from "waygraph";
2
- import type { LoggedIn } from "../../../states/checkout.states.js";
2
+ import { LoggedIn } from "../../../states/checkout.states.js";
3
3
  import { ItemDetailSel } from "./item-detail.sel.js";
4
4
 
5
5
  /**
@@ -9,10 +9,10 @@ import { ItemDetailSel } from "./item-detail.sel.js";
9
9
  *
10
10
  * click, not url - cart page "Continue Shopping" proves the app's own path.
11
11
  */
12
- export const NavContinueShoppingBlock = defineNavClickBlock<LoggedIn>({
12
+ export const NavContinueShoppingBlock = defineNavClickBlock({
13
13
  name: "nav-continue-shopping",
14
14
  description: "Clicks 'Continue Shopping' on the cart page.",
15
- checkpoint: "LoggedIn",
15
+ checkpoint: LoggedIn,
16
16
  click: ItemDetailSel.continueShoppingBtn,
17
17
  verify: [Trait.url({ pathname: "/inventory.html" })],
18
18
  });
@@ -1,5 +1,5 @@
1
- import { defineMethodBlock, checkpoint, type StubCtx } from "waygraph";
2
- import type { LoginPage } from "../../../states/checkout.states.js";
1
+ import { defineMethodBlock } from "waygraph";
2
+ import { LoginPage } from "../../../states/checkout.states.js";
3
3
  import { LoginCreds } from "../../../states/checkout.mem-keys.js";
4
4
  import { LoginSel } from "./login.sel.js";
5
5
 
@@ -11,40 +11,16 @@ import { LoginSel } from "./login.sel.js";
11
11
  * Fills the password field only - self-loop on LoginPage. See
12
12
  * fill-username.method.block.ts for why this is split from submit.
13
13
  */
14
- export const FillPasswordBlock = defineMethodBlock<LoginPage, LoginPage>({
14
+ export const FillPasswordBlock = defineMethodBlock({
15
15
  name: "fill-password",
16
16
  description: "Fills the password field on the login form.",
17
+ from: LoginPage,
18
+ to: LoginPage,
17
19
  requires: [LoginCreds.key],
18
20
  instruction: {
19
21
  async act(page, _input, mem) {
20
22
  const { password } = mem.get(LoginCreds.key);
21
23
  await page.locator(LoginSel.password).fill(password);
22
24
  },
23
- resolve: () => checkpoint("LoginPage"),
24
- stubBefore: (ctx: StubCtx) => {
25
- ctx.ring("password", {
26
- selector: LoginSel.password,
27
- label: "Password",
28
- detail: "tone: planned (purple)",
29
- todo: "login-pass",
30
- tone: "planned",
31
- focus: true,
32
- zoom: 1.4,
33
- });
34
- },
35
- stubAfter: (ctx: StubCtx) => {
36
- ctx.todos(
37
- "saucedemo",
38
- [
39
- { id: "login-user", text: "Enter username", done: true },
40
- { id: "login-pass", text: "Enter password", done: true },
41
- { id: "login-submit", text: "Tap Login" },
42
- { id: "cart-find", text: "Find the product" },
43
- { id: "cart-add", text: "Add to cart" },
44
- { id: "cart-open", text: "Open cart" },
45
- ],
46
- { title: "Device showcase", index: 2 },
47
- );
48
- },
49
25
  },
50
26
  });
@@ -1,5 +1,5 @@
1
- import { defineMethodBlock, checkpoint, type StubCtx } from "waygraph";
2
- import type { LoginPage } from "../../../states/checkout.states.js";
1
+ import { defineMethodBlock } from "waygraph";
2
+ import { LoginPage } from "../../../states/checkout.states.js";
3
3
  import { LoginCreds } from "../../../states/checkout.mem-keys.js";
4
4
  import { LoginSel } from "./login.sel.js";
5
5
 
@@ -13,59 +13,16 @@ import { LoginSel } from "./login.sel.js";
13
13
  * graph/demo show fill vs submit as real, distinct steps instead of one
14
14
  * Block doing "input username and password and login at the same time".
15
15
  */
16
- export const FillUsernameBlock = defineMethodBlock<LoginPage, LoginPage>({
16
+ export const FillUsernameBlock = defineMethodBlock({
17
17
  name: "fill-username",
18
18
  description: "Fills the username field on the login form.",
19
+ from: LoginPage,
20
+ to: LoginPage,
19
21
  requires: [LoginCreds.key],
20
22
  instruction: {
21
23
  async act(page, _input, mem) {
22
24
  const { username } = mem.get(LoginCreds.key);
23
25
  await page.locator(LoginSel.username).fill(username);
24
26
  },
25
- resolve: () => checkpoint("LoginPage"),
26
- stubBefore: (ctx: StubCtx) => {
27
- ctx.title("Signing in · mobile");
28
- ctx.device("mobile");
29
- ctx.portrait();
30
- ctx.todos(
31
- "saucedemo",
32
- [
33
- { id: "login-user", text: "Enter username" },
34
- { id: "login-pass", text: "Enter password" },
35
- { id: "login-submit", text: "Tap Login" },
36
- { id: "cart-find", text: "Find the product" },
37
- { id: "cart-add", text: "Add to cart" },
38
- { id: "cart-open", text: "Open cart" },
39
- ],
40
- { title: "Device showcase", index: 0 },
41
- );
42
- ctx.zoom(1.35);
43
- const fromMem = ctx.mem?.get(LoginCreds.key)?.username;
44
- ctx.ring("username", {
45
- selector: LoginSel.username,
46
- label: "Username",
47
- detail: fromMem
48
- ? `tone: info (blue) - mem ${fromMem}`
49
- : "tone: info (blue)",
50
- tone: "info",
51
- todo: "login-user",
52
- focus: true,
53
- zoom: 1.4,
54
- });
55
- },
56
- stubAfter: (ctx: StubCtx) => {
57
- ctx.todos(
58
- "saucedemo",
59
- [
60
- { id: "login-user", text: "Enter username", done: true },
61
- { id: "login-pass", text: "Enter password" },
62
- { id: "login-submit", text: "Tap Login" },
63
- { id: "cart-find", text: "Find the product" },
64
- { id: "cart-add", text: "Add to cart" },
65
- { id: "cart-open", text: "Open cart" },
66
- ],
67
- { title: "Device showcase", index: 1 },
68
- );
69
- },
70
27
  },
71
28
  });
@@ -1,5 +1,8 @@
1
- import { defineMethodBlock, checkpoint, Trait, type StubCtx } from "waygraph";
2
- import type { LoginPage, LoginSubmitOutcome } from "../../../states/checkout.states.js";
1
+ import { defineMethodBlock, checkpoint, Trait } from "waygraph";
2
+ import {
3
+ LoginPage,
4
+ LoginSubmitOutcome,
5
+ } from "../../../states/checkout.states.js";
3
6
  import { LoginSel } from "./login.sel.js";
4
7
 
5
8
  type LoginObserve = "success" | "failure";
@@ -14,9 +17,11 @@ type LoginObserve = "success" | "failure";
14
17
  * already did that). One Block, one action: submit.
15
18
  * Branches: good creds -> LoggedIn; bad/locked -> LoginPage with error banner.
16
19
  */
17
- export const SubmitLoginBlock = defineMethodBlock<LoginPage, LoginSubmitOutcome>({
20
+ export const SubmitLoginBlock = defineMethodBlock({
18
21
  name: "submit-login",
19
22
  description: "Submits the login form; stays on LoginPage when auth fails.",
23
+ from: LoginPage,
24
+ to: LoginSubmitOutcome,
20
25
  instruction: {
21
26
  async act(page) {
22
27
  // noWaitAfter: observe owns the inventory URL wait. Default click
@@ -26,7 +31,9 @@ export const SubmitLoginBlock = defineMethodBlock<LoginPage, LoginSubmitOutcome>
26
31
  async observe(page): Promise<LoginObserve> {
27
32
  // Race inventory nav vs error banner - locked_out / wrong password show
28
33
  // Epic sadface immediately; do not burn the full inventory timeout.
29
- const inventory = page.waitForURL(/\/inventory\.html/, { timeout: 8_000 }).then(() => "success" as const);
34
+ const inventory = page
35
+ .waitForURL(/\/inventory\.html/, { timeout: 8_000 })
36
+ .then(() => "success" as const);
30
37
  const errorBanner = page
31
38
  .locator(LoginSel.errorBanner)
32
39
  .first()
@@ -38,82 +45,11 @@ export const SubmitLoginBlock = defineMethodBlock<LoginPage, LoginSubmitOutcome>
38
45
  return "failure";
39
46
  }
40
47
  },
41
- resolve: (observed) => checkpoint(observed === "success" ? "LoggedIn" : "LoginPage"),
48
+ resolve: (observed) =>
49
+ checkpoint(observed === "success" ? "LoggedIn" : "LoginPage"),
42
50
  verify: (out) =>
43
51
  out.__state === "LoggedIn"
44
52
  ? [Trait.url({ pathname: "/inventory.html" })]
45
53
  : [Trait.visible(LoginSel.errorBanner)],
46
- stubBefore: (ctx: StubCtx) => {
47
- ctx.highlights({
48
- submit: {
49
- selector: LoginSel.loginButton,
50
- label: "Login",
51
- detail: "tone: warning (yellow)",
52
- todo: "login-submit",
53
- tone: "warning",
54
- focus: true,
55
- zoom: 1.55,
56
- weight: "bold",
57
- gesture: "tap",
58
- },
59
- });
60
- },
61
- stubAfter: (ctx: StubCtx) => {
62
- if (ctx.out && ctx.out.__state === "LoginPage") {
63
- ctx.title("Login blocked");
64
- ctx.todos(
65
- "saucedemo",
66
- [
67
- { id: "login-user", text: "Enter username", done: true },
68
- { id: "login-pass", text: "Enter password", done: true },
69
- { id: "login-submit", text: "Click Login", done: true },
70
- ],
71
- { title: "Sign in", style: "checklist" },
72
- );
73
- ctx.ring("error", {
74
- selector: LoginSel.errorBanner,
75
- label: "Login error banner",
76
- detail: "tone: danger (red)",
77
- tone: "danger",
78
- focus: true,
79
- duration: true,
80
- });
81
- return;
82
- }
83
- ctx.banner("Inventory · landscape");
84
- ctx.landscape();
85
- ctx.todos(
86
- "saucedemo",
87
- [
88
- { id: "login-user", text: "Enter username", done: true },
89
- { id: "login-pass", text: "Enter password", done: true },
90
- { id: "login-submit", text: "Tap Login", done: true },
91
- { id: "cart-find", text: "Find the product" },
92
- { id: "cart-add", text: "Add to cart" },
93
- { id: "cart-open", text: "Open cart" },
94
- ],
95
- { title: "Device showcase", index: 3 },
96
- );
97
- ctx.ring("shelf", {
98
- selector: ".inventory_list",
99
- label: "Product shelf",
100
- detail: "tone: success (green) - ready to shop",
101
- tone: "success",
102
- focus: true,
103
- zoom: 1.25,
104
- duration: true,
105
- });
106
- },
107
- stubOnError: (ctx: StubCtx) => {
108
- ctx.title("Login failed");
109
- ctx.ring("error", {
110
- selector: LoginSel.errorBanner,
111
- label: "Login error banner",
112
- detail: "tone: danger (red)",
113
- tone: "danger",
114
- focus: true,
115
- duration: true,
116
- });
117
- },
118
54
  },
119
55
  });
@@ -1,5 +1,5 @@
1
- import { defineMethodBlock, checkpoint, Trait } from "waygraph";
2
- import type { LoggedIn, LoginPage } from "../../../states/checkout.states.js";
1
+ import { defineMethodBlock, Trait } from "waygraph";
2
+ import { LoggedIn, LoginPage } from "../../../states/checkout.states.js";
3
3
  import { LoginSel } from "./login.sel.js";
4
4
 
5
5
  /**
@@ -9,15 +9,16 @@ import { LoginSel } from "./login.sel.js";
9
9
  *
10
10
  * Burger menu Logout - real cycle back to LoginPage (same Checkpoint nav-login lands on).
11
11
  */
12
- export const SubmitLogoutBlock = defineMethodBlock<LoggedIn, LoginPage>({
12
+ export const SubmitLogoutBlock = defineMethodBlock({
13
13
  name: "submit-logout",
14
14
  description: "Opens the burger menu and logs out.",
15
+ from: LoggedIn,
16
+ to: LoginPage,
15
17
  instruction: {
16
18
  async act(page) {
17
19
  await page.locator(LoginSel.burgerMenuButton).click();
18
20
  await page.locator(LoginSel.logoutLink).click();
19
21
  },
20
- resolve: () => checkpoint("LoginPage"),
21
22
  verify: [Trait.visible(LoginSel.loginButton)],
22
23
  },
23
24
  });
@@ -1,5 +1,5 @@
1
1
  import { definePageBlock, Trait } from "waygraph";
2
- import type { LoginPage } from "../../states/checkout.states.js";
2
+ import { LoginPage } from "../../states/checkout.states.js";
3
3
  import { FillUsernameBlock } from "./methods/fill-username.method.block.js";
4
4
  import { FillPasswordBlock } from "./methods/fill-password.method.block.js";
5
5
  import { SubmitLoginBlock } from "./methods/submit-login.method.block.js";
@@ -17,10 +17,10 @@ import { LoginSel } from "./methods/login.sel.js";
17
17
  * and submits. Name stays `nav-login` so existing flows / chain specs keep
18
18
  * working.
19
19
  */
20
- export const NavLoginBlock = definePageBlock<LoginPage>({
20
+ export const NavLoginBlock = definePageBlock({
21
21
  name: "nav-login",
22
22
  description: "Goes to the Swag Labs login page.",
23
- checkpoint: "LoginPage",
23
+ checkpoint: LoginPage,
24
24
  url: "/",
25
25
  verify: [Trait.visible(LoginSel.loginButton)],
26
26
  methods: {