waygraph 0.15.54 → 0.16.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -3
- package/bin/waygraph +2 -2
- package/dist/analysis/check.d.ts +38 -0
- package/dist/analysis/check.js +87 -0
- package/dist/analysis/coverage-gap.d.ts +1 -1
- package/dist/analysis/coverage-gap.js +14 -37
- package/dist/analysis/flow-source.d.ts +9 -0
- package/dist/analysis/flow-source.js +25 -0
- package/dist/analysis/graph.d.ts +10 -14
- package/dist/analysis/graph.js +48 -371
- package/dist/analysis/map-check.js +4 -39
- package/dist/analysis/practices-check.d.ts +1 -1
- package/dist/analysis/practices-check.js +24 -45
- package/dist/cli/args.d.ts +23 -0
- package/dist/cli/args.js +20 -0
- package/dist/{cli.d.ts → cli/cli.d.ts} +0 -1
- package/dist/{cli.js → cli/cli.js} +10 -9
- package/dist/{commands → cli/commands}/agent-dive-scaffold.js +35 -64
- package/dist/cli/commands/agent-dive.js +42 -0
- package/dist/cli/commands/browser.d.ts +2 -0
- package/dist/cli/commands/browser.js +109 -0
- package/dist/{commands → cli/commands}/check.d.ts +0 -1
- package/dist/cli/commands/check.js +104 -0
- package/dist/cli/commands/codemod-checkpoints.d.ts +18 -0
- package/dist/cli/commands/codemod-checkpoints.js +186 -0
- package/dist/cli/commands/codemod-flows.d.ts +18 -0
- package/dist/cli/commands/codemod-flows.js +284 -0
- package/dist/cli/commands/codemod-stubs.d.ts +10 -0
- package/dist/cli/commands/codemod-stubs.js +187 -0
- package/dist/{commands → cli/commands}/extensions.js +5 -4
- package/dist/{commands → cli/commands}/init.js +1 -2
- package/dist/{commands → cli/commands}/list.js +9 -7
- package/dist/cli/commands/manifest.d.ts +2 -0
- package/dist/cli/commands/manifest.js +20 -0
- package/dist/cli/commands/map.js +57 -0
- package/dist/cli/commands/pilot.d.ts +2 -0
- package/dist/cli/commands/pilot.js +102 -0
- package/dist/{commands → cli/commands}/run.d.ts +0 -1
- package/dist/cli/commands/run.js +64 -0
- package/dist/cli/commands/session-ops.d.ts +3 -0
- package/dist/cli/commands/session-ops.js +257 -0
- package/dist/cli/commands/session.js +132 -0
- package/dist/{commands → cli/commands}/test.js +11 -14
- package/dist/cli/commands/traverse.js +105 -0
- package/dist/{commands → cli/commands}/try.js +29 -25
- package/dist/{commands → cli/commands}/upgrade.js +40 -4
- package/dist/cli/flags.d.ts +193 -16
- package/dist/cli/flags.js +179 -234
- package/dist/cli/run-chain.d.ts +1 -0
- package/dist/cli/run-chain.js +42 -7
- package/dist/cli/usage.d.ts +1 -1
- package/dist/cli/usage.js +21 -53
- package/dist/cli/util.d.ts +2 -2
- package/dist/cli/util.js +2 -3
- package/dist/{highlights → demo/narration}/css.d.ts +1 -1
- package/dist/{highlights → demo/narration}/css.js +2 -3
- package/dist/{highlights → demo/narration}/demo-pace.d.ts +4 -12
- package/dist/{highlights → demo/narration}/demo-pace.js +5 -11
- package/dist/{highlights → demo/narration}/device.d.ts +4 -4
- package/dist/{highlights → demo/narration}/device.js +1 -1
- package/dist/demo/narration/merge.d.ts +10 -0
- package/dist/demo/narration/merge.js +67 -0
- package/dist/demo/narration/narration.d.ts +39 -0
- package/dist/{highlights/run-phase.js → demo/narration/narration.js} +25 -94
- package/dist/{highlights → demo/narration}/shorthand.d.ts +1 -1
- package/dist/demo/narration/stub-ctx.d.ts +8 -0
- package/dist/demo/narration/stub-ctx.js +164 -0
- package/dist/{highlights → demo/narration}/style.d.ts +1 -7
- package/dist/{highlights → demo/narration}/style.js +1 -41
- package/dist/{highlights → demo/narration}/todo-dock.d.ts +8 -8
- package/dist/{highlights → demo/narration}/todo-dock.js +13 -30
- package/dist/demo/overlay/auto-chrome.d.ts +7 -0
- package/dist/demo/overlay/auto-chrome.js +97 -0
- package/dist/demo/overlay/cursor.d.ts +19 -0
- package/dist/demo/overlay/cursor.js +142 -0
- package/dist/demo/overlay/device-stage.d.ts +26 -0
- package/dist/demo/overlay/device-stage.js +396 -0
- package/dist/demo/overlay/inpage/banner.d.ts +2 -0
- package/dist/demo/overlay/inpage/banner.js +160 -0
- package/dist/demo/overlay/inpage/caption.d.ts +2 -0
- package/dist/demo/overlay/inpage/caption.js +24 -0
- package/dist/demo/overlay/inpage/core.d.ts +2 -0
- package/dist/demo/overlay/inpage/core.js +345 -0
- package/dist/demo/overlay/inpage/device-chip.d.ts +1 -0
- package/dist/demo/overlay/inpage/device-chip.js +191 -0
- package/dist/demo/overlay/inpage/network.d.ts +10 -0
- package/dist/demo/overlay/inpage/network.js +189 -0
- package/dist/demo/overlay/inpage/panel-chrome.d.ts +1 -0
- package/dist/demo/overlay/inpage/panel-chrome.js +203 -0
- package/dist/demo/overlay/inpage/stamp.d.ts +1 -0
- package/dist/demo/overlay/inpage/stamp.js +46 -0
- package/dist/demo/overlay/inpage/swipe-zoom.d.ts +1 -0
- package/dist/demo/overlay/inpage/swipe-zoom.js +220 -0
- package/dist/demo/overlay/inpage/todos.d.ts +2 -0
- package/dist/demo/overlay/inpage/todos.js +293 -0
- package/dist/demo/overlay/locator-theater.d.ts +25 -0
- package/dist/demo/overlay/locator-theater.js +76 -0
- package/dist/demo/overlay/network-capture.d.ts +22 -0
- package/dist/demo/overlay/network-capture.js +127 -0
- package/dist/demo/overlay/overlay-css.d.ts +3 -0
- package/dist/demo/overlay/overlay-css.js +369 -0
- package/dist/demo/overlay/overlay-stage.d.ts +31 -0
- package/dist/demo/overlay/overlay-stage.js +106 -0
- package/dist/demo/overlay/overlay.d.ts +10 -0
- package/dist/demo/overlay/overlay.js +89 -0
- package/dist/{pilot-overlay/overlay-fixtures.d.ts → demo/overlay/phase-fixtures.d.ts} +2 -2
- package/dist/{pilot-overlay/overlay-fixtures.js → demo/overlay/phase-fixtures.js} +2 -2
- package/dist/{pilot-overlay/action-ring.js → demo/overlay/pilot/actions.js} +2 -1
- package/dist/{pilot-overlay → demo/overlay/pilot}/fixtures.d.ts +6 -5
- package/dist/{pilot-overlay → demo/overlay/pilot}/fixtures.js +19 -18
- package/dist/{pilot-overlay → demo/overlay/pilot}/shell.d.ts +2 -2
- package/dist/{pilot-overlay → demo/overlay/pilot}/shell.js +13 -22
- package/dist/demo/overlay/reattach.d.ts +7 -0
- package/dist/demo/overlay/reattach.js +23 -0
- package/dist/demo/overlay/rings.d.ts +61 -0
- package/dist/demo/overlay/rings.js +422 -0
- package/dist/{ui → demo/overlay/ui}/components/ring.js +2 -2
- package/dist/{ui → demo/overlay/ui}/overlay.css +4 -4
- package/dist/{ui → demo/overlay/ui}/shadow.d.ts +1 -1
- package/dist/{ui → demo/overlay/ui}/shadow.js +39 -2
- package/dist/demo/stepper/after.d.ts +3 -0
- package/dist/demo/stepper/after.js +103 -0
- package/dist/demo/stepper/banner-log.d.ts +35 -0
- package/dist/demo/stepper/banner-log.js +65 -0
- package/dist/demo/stepper/before.d.ts +4 -0
- package/dist/demo/stepper/before.js +110 -0
- package/dist/demo/stepper/demo-log.d.ts +48 -0
- package/dist/demo/stepper/demo-log.js +292 -0
- package/dist/demo/stepper/gate.d.ts +11 -0
- package/dist/demo/stepper/gate.js +78 -0
- package/dist/demo/stepper/interaction-patch.d.ts +4 -0
- package/dist/demo/stepper/interaction-patch.js +323 -0
- package/dist/demo/stepper/pacing.d.ts +21 -0
- package/dist/demo/stepper/pacing.js +23 -0
- package/dist/demo/stepper/panel-after.d.ts +17 -0
- package/dist/demo/stepper/panel-after.js +166 -0
- package/dist/demo/stepper/panel-before.d.ts +12 -0
- package/dist/demo/stepper/panel-before.js +241 -0
- package/dist/demo/stepper/slides.d.ts +23 -0
- package/dist/demo/stepper/slides.js +233 -0
- package/dist/demo/stepper/step-panels.d.ts +69 -0
- package/dist/demo/stepper/step-panels.js +172 -0
- package/dist/demo/stepper/stepper.d.ts +24 -0
- package/dist/demo/stepper/stepper.js +122 -0
- package/dist/demo/stepper/teardown.d.ts +47 -0
- package/dist/demo/stepper/teardown.js +178 -0
- package/dist/demo/stepper/todo-advance.d.ts +15 -0
- package/dist/demo/stepper/todo-advance.js +110 -0
- package/dist/demo/stepper/view.d.ts +58 -0
- package/dist/demo/stepper/view.js +31 -0
- package/dist/demo/types.d.ts +85 -0
- package/dist/demo/verbose-log.js +15 -0
- package/dist/engine/block/action-page.d.ts +53 -0
- package/dist/engine/block/action-page.js +1 -0
- package/dist/{types.d.ts → engine/block/block.d.ts} +102 -142
- package/dist/{core → engine/block}/block.js +12 -130
- package/dist/engine/block/branch.d.ts +17 -0
- package/dist/engine/block/branch.js +40 -0
- package/dist/{core → engine/block}/compose.d.ts +9 -7
- package/dist/{core → engine/block}/compose.js +1 -1
- package/dist/engine/block/dialog.d.ts +13 -0
- package/dist/engine/block/dialog.js +37 -0
- package/dist/{core/blocks → engine/block/kinds}/api.d.ts +16 -12
- package/dist/{core/blocks → engine/block/kinds}/api.js +26 -18
- package/dist/{core/blocks → engine/block/kinds}/effect.d.ts +13 -18
- package/dist/engine/block/kinds/effect.js +17 -0
- package/dist/{core/blocks → engine/block/kinds}/method.d.ts +17 -29
- package/dist/{core/blocks → engine/block/kinds}/method.js +6 -21
- package/dist/{core/blocks → engine/block/kinds}/nav.d.ts +21 -31
- package/dist/{core/blocks → engine/block/kinds}/nav.js +6 -12
- package/dist/{core/blocks → engine/block/kinds}/page.d.ts +14 -20
- package/dist/{core/blocks → engine/block/kinds}/page.js +5 -7
- package/dist/engine/checkpoint/checkpoint.d.ts +22 -0
- package/dist/engine/checkpoint/checkpoint.js +8 -0
- package/dist/engine/checkpoint/route.d.ts +28 -0
- package/dist/engine/checkpoint/route.js +28 -0
- package/dist/{core → engine}/config.d.ts +7 -2
- package/dist/engine/config.js +6 -0
- package/dist/engine/engine.d.ts +45 -0
- package/dist/{core → engine}/engine.js +6 -10
- package/dist/engine/env.d.ts +59 -0
- package/dist/engine/env.js +83 -0
- package/dist/{errors.d.ts → engine/errors.d.ts} +22 -22
- package/dist/{errors.js → engine/errors.js} +22 -22
- package/dist/{core → engine/flow}/branch-regression.d.ts +7 -7
- package/dist/{core → engine/flow}/branch-regression.js +4 -3
- package/dist/engine/flow/flow.d.ts +162 -0
- package/dist/engine/flow/flow.js +244 -0
- package/dist/engine/flow/map-branch.d.ts +9 -0
- package/dist/engine/flow/map-branch.js +57 -0
- package/dist/{core → engine/flow}/map-builder.d.ts +34 -54
- package/dist/engine/flow/map-builder.js +242 -0
- package/dist/engine/flow/map-steps.d.ts +30 -0
- package/dist/engine/flow/map-steps.js +87 -0
- package/dist/{core → engine}/locate.d.ts +1 -1
- package/dist/{core → engine}/locate.js +1 -2
- package/dist/{mem-stub.d.ts → engine/mem/mem-stub.d.ts} +9 -8
- package/dist/{mem-stub.js → engine/mem/mem-stub.js} +2 -2
- package/dist/{mem-page.d.ts → engine/mem/mem.d.ts} +1 -1
- package/dist/{mem-page.js → engine/mem/mem.js} +2 -1
- package/dist/engine/page-gone.d.ts +5 -0
- package/dist/engine/page-gone.js +20 -0
- package/dist/engine/run/connect.d.ts +28 -0
- package/dist/{types.js → engine/run/connect.js} +11 -10
- package/dist/engine/run/events.d.ts +67 -0
- package/dist/engine/run/events.js +90 -0
- package/dist/engine/run/hooks.d.ts +16 -0
- package/dist/engine/run/hooks.js +8 -0
- package/dist/engine/run/launch.d.ts +13 -0
- package/dist/engine/run/launch.js +27 -0
- package/dist/{core/run-graph.d.ts → engine/run/run.d.ts} +8 -12
- package/dist/{core/run-graph.js → engine/run/run.js} +22 -12
- package/dist/engine/stub/pace.d.ts +12 -0
- package/dist/engine/stub/pace.js +2 -0
- package/dist/engine/stub/ring.d.ts +130 -0
- package/dist/engine/stub/ring.js +41 -0
- package/dist/engine/stub/stub.d.ts +268 -0
- package/dist/engine/stub/stub.js +1 -0
- package/dist/engine/stub/todos.d.ts +104 -0
- package/dist/engine/stub/todos.js +2 -0
- package/dist/engine/stub/viewport.d.ts +26 -0
- package/dist/engine/stub/viewport.js +2 -0
- package/dist/{trait.d.ts → engine/trait/trait.d.ts} +1 -1
- package/dist/{trait.js → engine/trait/trait.js} +1 -1
- package/dist/index.d.ts +88 -36
- package/dist/index.js +46 -19
- package/dist/live/auto/auto.d.ts +22 -0
- package/dist/live/auto/auto.js +207 -0
- package/dist/{session/auto-explore.d.ts → live/auto/explore.d.ts} +4 -14
- package/dist/{session/auto-explore.js → live/auto/explore.js} +21 -127
- package/dist/live/auto/mem.d.ts +11 -0
- package/dist/live/auto/mem.js +85 -0
- package/dist/live/auto/menu.d.ts +30 -0
- package/dist/live/auto/menu.js +335 -0
- package/dist/live/auto-session/auto-session.d.ts +113 -0
- package/dist/live/auto-session/auto-session.js +452 -0
- package/dist/live/auto-session/console.d.ts +4 -0
- package/dist/live/auto-session/console.js +41 -0
- package/dist/live/auto-session/files.d.ts +44 -0
- package/dist/live/auto-session/files.js +145 -0
- package/dist/{auto-session → live/auto-session}/helpers.d.ts +9 -5
- package/dist/{auto-session → live/auto-session}/helpers.js +18 -1
- package/dist/live/auto-session/inspect.d.ts +4 -0
- package/dist/live/auto-session/inspect.js +75 -0
- package/dist/{session/auto-session-ipc.d.ts → live/auto-session/ipc.d.ts} +8 -25
- package/dist/{session/auto-session-ipc.js → live/auto-session/ipc.js} +36 -161
- package/dist/live/auto-session/open-browser.d.ts +6 -0
- package/dist/live/auto-session/open-browser.js +47 -0
- package/dist/{session/browser.d.ts → live/auto-session/start.d.ts} +1 -2
- package/dist/{session/browser.js → live/auto-session/start.js} +2 -3
- package/dist/{pilot-overlay → live/pilot}/panel.d.ts +1 -1
- package/dist/{pilot-overlay → live/pilot}/panel.js +23 -31
- package/dist/{session → live/pilot}/pilot.d.ts +3 -3
- package/dist/{session → live/pilot}/pilot.js +5 -4
- package/dist/{traverse/run.d.ts → live/traverse/traverse.d.ts} +1 -1
- package/dist/live/traverse/traverse.js +212 -0
- package/dist/live/traverse/worker.d.ts +37 -0
- package/dist/live/traverse/worker.js +200 -0
- package/dist/manifest/manifest.d.ts +52 -0
- package/dist/manifest/manifest.js +93 -0
- package/dist/manifest/map-imports.d.ts +7 -0
- package/dist/manifest/map-imports.js +22 -0
- package/dist/manifest/maps.d.ts +33 -0
- package/dist/manifest/maps.js +62 -0
- package/dist/manifest/pack.d.ts +21 -0
- package/dist/manifest/pack.js +109 -0
- package/dist/manifest/project.d.ts +60 -0
- package/dist/manifest/project.js +101 -0
- package/dist/{session/block-inject.js → manifest/roots.js} +1 -18
- package/dist/manifest/scan.d.ts +19 -0
- package/dist/manifest/scan.js +57 -0
- package/dist/manifest/source.d.ts +23 -0
- package/dist/manifest/source.js +86 -0
- package/dist/runner/mode.d.ts +71 -0
- package/dist/runner/mode.js +1 -0
- package/dist/runner/modes/branches.d.ts +5 -0
- package/dist/runner/modes/branches.js +37 -0
- package/dist/runner/modes/demo.d.ts +3 -0
- package/dist/runner/modes/demo.js +13 -0
- package/dist/runner/modes/report.d.ts +2 -0
- package/dist/runner/modes/report.js +54 -0
- package/dist/runner/modes/run.d.ts +2 -0
- package/dist/runner/modes/run.js +3 -0
- package/dist/runner/options.d.ts +31 -0
- package/dist/runner/options.js +42 -0
- package/dist/runner/plan/find.d.ts +18 -0
- package/dist/runner/plan/find.js +65 -0
- package/dist/runner/plan/plan.d.ts +11 -0
- package/dist/runner/plan/plan.js +97 -0
- package/dist/runner/plan/seed-mem.d.ts +12 -0
- package/dist/runner/plan/seed-mem.js +98 -0
- package/dist/runner/plan/spec.d.ts +5 -0
- package/dist/runner/plan/spec.js +17 -0
- package/dist/runner/play-steps.d.ts +2 -0
- package/dist/runner/play-steps.js +59 -0
- package/dist/runner/runner.d.ts +4 -0
- package/dist/runner/runner.js +64 -0
- package/dist/runner/session.d.ts +9 -0
- package/dist/runner/session.js +87 -0
- package/dist/{browser.js → runtime/browser.js} +4 -2
- package/dist/{env-file.js → runtime/env-file.js} +7 -12
- package/dist/{extensions.d.ts → runtime/extensions.d.ts} +1 -5
- package/dist/{extensions.js → runtime/extensions.js} +2 -1
- package/dist/runtime/full-launch.d.ts +1 -0
- package/dist/runtime/full-launch.js +34 -0
- package/dist/runtime/global-flag.d.ts +5 -0
- package/dist/runtime/global-flag.js +18 -0
- package/dist/{playwright-config.d.ts → runtime/playwright-config.d.ts} +1 -1
- package/dist/{playwright.config.js → runtime/playwright.config.js} +3 -2
- package/dist/runtime/run-log.d.ts +2 -0
- package/dist/runtime/run-log.js +17 -0
- package/dist/{video-dir.js → runtime/video-dir.js} +3 -2
- package/dist/{config.d.ts → runtime/waygraph-config.d.ts} +6 -9
- package/dist/{config.js → runtime/waygraph-config.js} +21 -51
- package/dist/{webserver.js → runtime/webserver.js} +5 -30
- package/examples/routed-demo/config/waygraph.config.ts +20 -0
- package/examples/routed-demo/package.json +1 -4
- package/examples/routed-demo/scripts/fixture-server.mjs +1 -1
- package/examples/routed-demo/src/flows/routed-demo-map.flow.ts +2 -4
- package/examples/routed-demo/src/flows/routed-demo.flow.ts +1 -2
- package/examples/routed-demo/src/map/(app_base)/dashboard/_methods/click-widget.block.ts +5 -4
- package/examples/routed-demo/src/map/(app_base)/dashboard/_nav.block.ts +3 -3
- package/examples/routed-demo/src/map/(app_base)/dashboard/_page.block.ts +3 -3
- package/examples/routed-demo/src/map/(external)/docs/_nav.block.ts +3 -3
- package/examples/routed-demo/src/map/(external)/docs/_page.block.ts +3 -3
- package/examples/routed-demo/src/states/routed-demo.states.ts +5 -3
- package/examples/routed-demo/tests/routed-demo.spec.ts +4 -4
- package/examples/routed-demo/tsconfig.json +1 -1
- package/examples/saucedemo/docs/CONVENTION.md +4 -5
- package/examples/saucedemo/docs/HELPERS.md +11 -11
- package/examples/saucedemo/src/blocks/SITE-MAP.md +0 -1
- package/examples/saucedemo/src/blocks/saucedemo-web/NAV.md +1 -5
- package/examples/saucedemo/src/blocks/saucedemo-web/cart/nav-cart.block.ts +3 -3
- package/examples/saucedemo/src/blocks/saucedemo-web/cart/nav-checkout-info.block.ts +3 -3
- package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-one/methods/fill-first-name.method.block.ts +5 -4
- package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-one/methods/fill-last-name.method.block.ts +5 -4
- package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-one/methods/fill-postal-code.method.block.ts +5 -4
- package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-one/methods/submit-checkout-info.method.block.ts +5 -4
- package/examples/saucedemo/src/blocks/saucedemo-web/checkout-step-two/methods/finish-order.method.block.ts +5 -8
- package/examples/saucedemo/src/blocks/saucedemo-web/inventory/inventory.page.block.ts +3 -3
- package/examples/saucedemo/src/blocks/saucedemo-web/inventory/methods/add-all-to-cart.method.block.ts +4 -6
- package/examples/saucedemo/src/blocks/saucedemo-web/inventory/methods/add-to-cart.effect.block.ts +35 -43
- package/examples/saucedemo/src/blocks/saucedemo-web/inventory/methods/remove-all-from-cart.method.block.ts +4 -6
- package/examples/saucedemo/src/blocks/saucedemo-web/inventory/methods/remove-from-cart.effect.block.ts +4 -3
- package/examples/saucedemo/src/blocks/saucedemo-web/inventory/nav-item-detail.block.ts +3 -3
- package/examples/saucedemo/src/blocks/saucedemo-web/inventory-item/nav-back-to-inventory.block.ts +3 -3
- package/examples/saucedemo/src/blocks/saucedemo-web/inventory-item/nav-back-to-products.block.ts +3 -3
- package/examples/saucedemo/src/blocks/saucedemo-web/inventory-item/nav-continue-shopping.block.ts +3 -3
- package/examples/saucedemo/src/blocks/saucedemo-web/methods/fill-password.method.block.ts +5 -4
- package/examples/saucedemo/src/blocks/saucedemo-web/methods/fill-username.method.block.ts +5 -4
- package/examples/saucedemo/src/blocks/saucedemo-web/methods/submit-login.method.block.ts +4 -5
- package/examples/saucedemo/src/blocks/saucedemo-web/methods/submit-logout.method.block.ts +5 -4
- package/examples/saucedemo/src/blocks/saucedemo-web/nav-login.block.ts +3 -3
- package/examples/saucedemo/src/flows/api-demo.flow.ts +12 -10
- package/examples/saucedemo/src/states/checkout.states.ts +21 -11
- package/examples/saucedemo/src/stubs/device-showcase.ts +8 -10
- package/examples/saucedemo/tests/auto-graph.spec.ts +4 -12
- package/package.json +14 -6
- package/templates/agents/waygraph-planner.agent.md +2 -2
- package/templates/quickstart/docs/CONVENTION.md +4 -4
- package/templates/quickstart/docs/HELPERS.md +10 -8
- package/templates/quickstart/package.json +0 -3
- package/templates/quickstart/src/blocks/SITE-MAP.md +0 -1
- package/templates/quickstart/src/blocks/saucedemo-web/NAV.md +1 -5
- package/templates/quickstart/src/blocks/saucedemo-web/cart/nav-cart.block.ts +3 -3
- package/templates/quickstart/src/blocks/saucedemo-web/cart/nav-checkout-info.block.ts +3 -3
- package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-one/methods/fill-first-name.method.block.ts +5 -4
- package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-one/methods/fill-last-name.method.block.ts +5 -4
- package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-one/methods/fill-postal-code.method.block.ts +5 -4
- package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-one/methods/submit-checkout-info.method.block.ts +5 -4
- package/templates/quickstart/src/blocks/saucedemo-web/checkout-step-two/methods/finish-order.method.block.ts +5 -8
- package/templates/quickstart/src/blocks/saucedemo-web/inventory/inventory.page.block.ts +3 -3
- package/templates/quickstart/src/blocks/saucedemo-web/inventory/methods/add-all-to-cart.method.block.ts +4 -6
- package/templates/quickstart/src/blocks/saucedemo-web/inventory/methods/add-to-cart.effect.block.ts +35 -43
- package/templates/quickstart/src/blocks/saucedemo-web/inventory/methods/remove-all-from-cart.method.block.ts +4 -6
- package/templates/quickstart/src/blocks/saucedemo-web/inventory/methods/remove-from-cart.effect.block.ts +4 -3
- package/templates/quickstart/src/blocks/saucedemo-web/inventory/nav-item-detail.block.ts +3 -3
- package/templates/quickstart/src/blocks/saucedemo-web/inventory-item/nav-back-to-inventory.block.ts +3 -3
- package/templates/quickstart/src/blocks/saucedemo-web/inventory-item/nav-back-to-products.block.ts +3 -3
- package/templates/quickstart/src/blocks/saucedemo-web/inventory-item/nav-continue-shopping.block.ts +3 -3
- package/templates/quickstart/src/blocks/saucedemo-web/methods/fill-password.method.block.ts +5 -4
- package/templates/quickstart/src/blocks/saucedemo-web/methods/fill-username.method.block.ts +5 -4
- package/templates/quickstart/src/blocks/saucedemo-web/methods/submit-login.method.block.ts +4 -5
- package/templates/quickstart/src/blocks/saucedemo-web/methods/submit-logout.method.block.ts +5 -4
- package/templates/quickstart/src/blocks/saucedemo-web/nav-login.block.ts +3 -3
- package/templates/quickstart/src/flows/api-demo.flow.ts +12 -10
- package/templates/quickstart/src/states/checkout.states.ts +21 -11
- package/templates/quickstart/src/stubs/device-showcase.ts +8 -10
- package/templates/scaffold/README.md +2 -1
- package/templates/scaffold/STRUCTURE.md +5 -4
- package/templates/scaffold/config/waygraph.config.ts +1 -0
- package/templates/scaffold/gitignore +1 -0
- package/templates/scaffold/src/flows/README.md +2 -2
- package/templates/scaffold/src/map/(app_base)/docs/_nav.block.ts +3 -3
- package/templates/scaffold/src/map/(app_base)/docs/_page.block.ts +3 -3
- package/templates/scaffold/src/map/(app_base)/home/_methods/add-item.effect.block.ts +4 -4
- package/templates/scaffold/src/map/(app_base)/home/_methods/assert-hello.method.block.ts +3 -3
- package/templates/scaffold/src/map/(app_base)/home/_methods/assert-item-added.method.block.ts +3 -3
- package/templates/scaffold/src/map/(app_base)/home/_methods/clear-cart.method.block.ts +5 -4
- package/templates/scaffold/src/map/(app_base)/home/_methods/remove-item.effect.block.ts +4 -4
- package/templates/scaffold/src/map/(app_base)/home/_nav.block.ts +3 -3
- package/templates/scaffold/src/map/(app_base)/home/_page.block.ts +3 -3
- package/templates/scaffold/src/map/(app_base)/home/nav-verification-link.block.ts +4 -4
- package/templates/scaffold/src/map/(external)/hoppscotch/_keys.ts +21 -0
- package/templates/scaffold/src/map/(external)/hoppscotch/_methods/assert-response-body.method.block.ts +4 -4
- package/templates/scaffold/src/map/(external)/hoppscotch/_methods/assert-response-header.method.block.ts +4 -4
- package/templates/scaffold/src/map/(external)/hoppscotch/_methods/assert-status.method.block.ts +4 -4
- package/templates/scaffold/src/map/(external)/hoppscotch/_methods/pick-extension-interceptor.method.block.ts +5 -4
- package/templates/scaffold/src/map/(external)/hoppscotch/_methods/read-response-body.method.block.ts +6 -5
- package/templates/scaffold/src/map/(external)/hoppscotch/_methods/read-response-headers.method.block.ts +6 -5
- package/templates/scaffold/src/map/(external)/hoppscotch/_methods/send-request.method.block.ts +5 -4
- package/templates/scaffold/src/map/(external)/hoppscotch/_methods/set-bearer-token.method.block.ts +6 -5
- package/templates/scaffold/src/map/(external)/hoppscotch/_methods/set-headers.method.block.ts +6 -5
- package/templates/scaffold/src/map/(external)/hoppscotch/_methods/set-json-body.method.block.ts +6 -5
- package/templates/scaffold/src/map/(external)/hoppscotch/_methods/set-method.method.block.ts +6 -5
- package/templates/scaffold/src/map/(external)/hoppscotch/_methods/set-query-params.method.block.ts +6 -5
- package/templates/scaffold/src/map/(external)/hoppscotch/_methods/set-url.method.block.ts +6 -5
- package/templates/scaffold/src/map/(external)/hoppscotch/_nav.block.ts +3 -3
- package/templates/scaffold/src/map/(external)/hoppscotch/_page.block.ts +3 -3
- package/templates/scaffold/src/map/(external)/hoppscotch/_states.ts +6 -0
- package/templates/scaffold/src/map/(external)/hoppscotch/settings/_nav.block.ts +3 -3
- package/templates/scaffold/src/map/(external)/mailpit/_keys.ts +13 -0
- package/templates/scaffold/src/map/(external)/mailpit/_methods/assert-email-content.method.block.ts +4 -4
- package/templates/scaffold/src/map/(external)/mailpit/_methods/assert-email-received.method.block.ts +4 -4
- package/templates/scaffold/src/map/(external)/mailpit/_methods/extract-email-link.method.block.ts +6 -5
- package/templates/scaffold/src/map/(external)/mailpit/_methods/open-message.method.block.ts +6 -5
- package/templates/scaffold/src/map/(external)/mailpit/_nav.block.ts +3 -3
- package/templates/scaffold/src/map/(external)/mailpit/_page.block.ts +3 -3
- package/templates/scaffold/src/map/(external)/mailpit/_states.ts +9 -0
- package/templates/scaffold/src/map/README.md +7 -0
- package/templates/scaffold/src/states/README.md +4 -1
- package/templates/scaffold/src/states/demo.mem-keys.ts +1 -29
- package/templates/scaffold/src/states/demo.states.ts +14 -20
- package/templates/scaffold/tests/hoppscotch.spec.ts +1 -11
- package/templates/scaffold/tests/mail-verify.spec.ts +2 -2
- package/templates/skills/waygraph-blind-pilot.skill.md +2 -6
- package/templates/skills/waygraph-convention.skill.md +23 -14
- package/templates/skills/waygraph-pilot.skill.md +7 -4
- package/dist/auto-session/session.d.ts +0 -193
- package/dist/auto-session/session.js +0 -719
- package/dist/auto-session/verbose-log.js +0 -16
- package/dist/auto-session.d.ts +0 -2
- package/dist/auto-session.js +0 -3
- package/dist/cli/discover.d.ts +0 -40
- package/dist/cli/discover.js +0 -148
- package/dist/commands/agent-dive.js +0 -52
- package/dist/commands/check.js +0 -192
- package/dist/commands/map.js +0 -29
- package/dist/commands/run.js +0 -104
- package/dist/commands/session.js +0 -600
- package/dist/commands/traverse.js +0 -177
- package/dist/core/block.d.ts +0 -109
- package/dist/core/blocks/effect.js +0 -23
- package/dist/core/config.js +0 -17
- package/dist/core/engine.d.ts +0 -198
- package/dist/core/flow.d.ts +0 -294
- package/dist/core/flow.js +0 -432
- package/dist/core/map-builder.js +0 -383
- package/dist/core.d.ts +0 -14
- package/dist/core.js +0 -15
- package/dist/highlights/merge.d.ts +0 -8
- package/dist/highlights/merge.js +0 -173
- package/dist/highlights/run-phase.d.ts +0 -43
- package/dist/highlights/stub-ctx.d.ts +0 -10
- package/dist/highlights/stub-ctx.js +0 -331
- package/dist/highlights/types.d.ts +0 -613
- package/dist/highlights.d.ts +0 -9
- package/dist/highlights.js +0 -10
- package/dist/pilot-overlay.d.ts +0 -5
- package/dist/pilot-overlay.js +0 -6
- package/dist/runner/banner-log.js +0 -63
- package/dist/runner/chain-run.js +0 -102
- package/dist/runner/cursor.js +0 -140
- package/dist/runner/demo-log.js +0 -316
- package/dist/runner/device-stage.d.ts +0 -9
- package/dist/runner/device-stage.js +0 -420
- package/dist/runner/discovery.js +0 -105
- package/dist/runner/index.js +0 -2
- package/dist/runner/inpage/banner.d.ts +0 -21
- package/dist/runner/inpage/banner.js +0 -156
- package/dist/runner/inpage/caption.d.ts +0 -3
- package/dist/runner/inpage/caption.js +0 -23
- package/dist/runner/inpage/core.d.ts +0 -4
- package/dist/runner/inpage/core.js +0 -316
- package/dist/runner/inpage/device.d.ts +0 -3
- package/dist/runner/inpage/device.js +0 -211
- package/dist/runner/inpage/network.d.ts +0 -15
- package/dist/runner/inpage/network.js +0 -217
- package/dist/runner/inpage/panel-chrome.js +0 -192
- package/dist/runner/inpage/stamp.js +0 -46
- package/dist/runner/inpage/swipe-zoom.js +0 -220
- package/dist/runner/inpage/todos.js +0 -337
- package/dist/runner/interaction-patch.js +0 -384
- package/dist/runner/main.js +0 -469
- package/dist/runner/network-capture.d.ts +0 -9
- package/dist/runner/network-capture.js +0 -126
- package/dist/runner/overlay-css.d.ts +0 -3
- package/dist/runner/overlay-css.js +0 -377
- package/dist/runner/overlay-install.js +0 -90
- package/dist/runner/overlay-stage.js +0 -110
- package/dist/runner/rings.js +0 -514
- package/dist/runner/seed-mem.js +0 -110
- package/dist/runner/slides.js +0 -278
- package/dist/runner/step-mode.js +0 -703
- package/dist/runner/step-panels.js +0 -729
- package/dist/runner/teardown.js +0 -202
- package/dist/runner/todo-dock.js +0 -142
- package/dist/session/auto-explore-run.d.ts +0 -40
- package/dist/session/auto-explore-run.js +0 -707
- package/dist/session/step-overlay.d.ts +0 -37
- package/dist/session/step-overlay.js +0 -244
- package/dist/traverse/run.js +0 -423
- package/examples/routed-demo/playwright.config.ts +0 -21
- package/examples/saucedemo/src/blocks/saucedemo-web/ff-owner-auth.block.ts +0 -22
- package/templates/quickstart/src/blocks/saucedemo-web/ff-owner-auth.block.ts +0 -22
- /package/dist/{commands → cli/commands}/agent-dive-scaffold.d.ts +0 -0
- /package/dist/{commands → cli/commands}/agent-dive.d.ts +0 -0
- /package/dist/{commands → cli/commands}/extensions.d.ts +0 -0
- /package/dist/{commands → cli/commands}/init.d.ts +0 -0
- /package/dist/{commands → cli/commands}/list.d.ts +0 -0
- /package/dist/{commands → cli/commands}/map.d.ts +0 -0
- /package/dist/{commands → cli/commands}/session.d.ts +0 -0
- /package/dist/{commands → cli/commands}/test.d.ts +0 -0
- /package/dist/{commands → cli/commands}/traverse.d.ts +0 -0
- /package/dist/{commands → cli/commands}/try.d.ts +0 -0
- /package/dist/{commands → cli/commands}/upgrade.d.ts +0 -0
- /package/dist/{highlights → demo/narration}/shorthand.js +0 -0
- /package/dist/{session/overlay-beacon.d.ts → demo/overlay/beacon.d.ts} +0 -0
- /package/dist/{session/overlay-beacon.js → demo/overlay/beacon.js} +0 -0
- /package/dist/{pilot-overlay/action-ring.d.ts → demo/overlay/pilot/actions.d.ts} +0 -0
- /package/dist/{ui → demo/overlay/ui}/components/ring.d.ts +0 -0
- /package/dist/{ui → demo/overlay/ui}/stylesheet.d.ts +0 -0
- /package/dist/{ui → demo/overlay/ui}/stylesheet.js +0 -0
- /package/dist/{ui → demo/overlay/ui}/tokens.d.ts +0 -0
- /package/dist/{ui → demo/overlay/ui}/tokens.js +0 -0
- /package/dist/{highlights → demo}/types.js +0 -0
- /package/dist/{auto-session → demo}/verbose-log.d.ts +0 -0
- /package/dist/{selector.d.ts → engine/trait/selector.d.ts} +0 -0
- /package/dist/{selector.js → engine/trait/selector.js} +0 -0
- /package/dist/{traverse → live/traverse}/coverage.d.ts +0 -0
- /package/dist/{traverse → live/traverse}/coverage.js +0 -0
- /package/dist/{traverse → live/traverse}/lease.d.ts +0 -0
- /package/dist/{traverse → live/traverse}/lease.js +0 -0
- /package/dist/{session/block-inject.d.ts → manifest/roots.d.ts} +0 -0
- /package/dist/{blocks-select.d.ts → manifest/select.d.ts} +0 -0
- /package/dist/{blocks-select.js → manifest/select.js} +0 -0
- /package/dist/{browser.d.ts → runtime/browser.d.ts} +0 -0
- /package/dist/{env-file.d.ts → runtime/env-file.d.ts} +0 -0
- /package/dist/{playwright-config.js → runtime/playwright-config.js} +0 -0
- /package/dist/{playwright.config.d.ts → runtime/playwright.config.d.ts} +0 -0
- /package/dist/{video-dir.d.ts → runtime/video-dir.d.ts} +0 -0
- /package/dist/{webserver.d.ts → runtime/webserver.d.ts} +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { defineMethodBlock
|
|
2
|
-
import
|
|
1
|
+
import { defineMethodBlock } from "waygraph";
|
|
2
|
+
import { CheckoutInfoPage } from "../../../../states/checkout.states.js";
|
|
3
3
|
import { CheckoutInfoSel } from "./checkout-info.sel.js";
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -9,13 +9,14 @@ import { CheckoutInfoSel } from "./checkout-info.sel.js";
|
|
|
9
9
|
*
|
|
10
10
|
* Fills the postal code field only - self-loop on CheckoutInfoPage.
|
|
11
11
|
*/
|
|
12
|
-
export const FillPostalCodeBlock = defineMethodBlock
|
|
12
|
+
export const FillPostalCodeBlock = defineMethodBlock({
|
|
13
13
|
name: "fill-postal-code",
|
|
14
14
|
description: "Fills the postal code field on the shipping info form.",
|
|
15
|
+
from: CheckoutInfoPage,
|
|
16
|
+
to: CheckoutInfoPage,
|
|
15
17
|
instruction: {
|
|
16
18
|
async act(page) {
|
|
17
19
|
await page.locator(CheckoutInfoSel.postalCode).fill("1000");
|
|
18
20
|
},
|
|
19
|
-
resolve: () => checkpoint("CheckoutInfoPage"),
|
|
20
21
|
},
|
|
21
22
|
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { defineMethodBlock,
|
|
2
|
-
import
|
|
1
|
+
import { defineMethodBlock, Trait } from "waygraph";
|
|
2
|
+
import { CheckoutInfoPage, CheckoutOverviewPage } from "../../../../states/checkout.states.js";
|
|
3
3
|
import { CheckoutInfoSel } from "./checkout-info.sel.js";
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -11,14 +11,15 @@ import { CheckoutInfoSel } from "./checkout-info.sel.js";
|
|
|
11
11
|
* fill-last-name / fill-postal-code (each its own Block). One Block, one
|
|
12
12
|
* action: submit.
|
|
13
13
|
*/
|
|
14
|
-
export const SubmitCheckoutInfoBlock = defineMethodBlock
|
|
14
|
+
export const SubmitCheckoutInfoBlock = defineMethodBlock({
|
|
15
15
|
name: "submit-checkout-info",
|
|
16
16
|
description: "Continues from the shipping info form to the order overview.",
|
|
17
|
+
from: CheckoutInfoPage,
|
|
18
|
+
to: CheckoutOverviewPage,
|
|
17
19
|
instruction: {
|
|
18
20
|
async act(page) {
|
|
19
21
|
await page.locator(CheckoutInfoSel.continueBtn).click();
|
|
20
22
|
},
|
|
21
|
-
resolve: () => checkpoint("CheckoutOverviewPage"),
|
|
22
23
|
verify: [Trait.url({ pathname: "/checkout-step-two.html" })],
|
|
23
24
|
},
|
|
24
25
|
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { defineMethodBlock,
|
|
2
|
-
import
|
|
1
|
+
import { defineMethodBlock, Trait, narrate } from "waygraph";
|
|
2
|
+
import {
|
|
3
3
|
CheckoutOverviewPage,
|
|
4
4
|
OrderComplete,
|
|
5
5
|
} from "../../../../states/checkout.states.js";
|
|
@@ -11,15 +11,13 @@ import { CheckoutOverviewSel } from "./checkout-overview.sel.js";
|
|
|
11
11
|
* Route: saucedemo-web/checkout-step-two/methods/ (= /checkout-step-two.html)
|
|
12
12
|
*
|
|
13
13
|
* Places the order on the overview page - form/finish click, not a NavBlock.
|
|
14
|
-
* Stubs use open ctx lifecycles (preferred) - not static slot maps.
|
|
15
14
|
*/
|
|
16
|
-
export const FinishOrderBlock = defineMethodBlock
|
|
17
|
-
CheckoutOverviewPage,
|
|
18
|
-
OrderComplete
|
|
19
|
-
>({
|
|
15
|
+
export const FinishOrderBlock = defineMethodBlock({
|
|
20
16
|
name: "finish-order",
|
|
21
17
|
description:
|
|
22
18
|
"Places the order and confirms the 'Thank you for your order!' completion page.",
|
|
19
|
+
from: CheckoutOverviewPage,
|
|
20
|
+
to: OrderComplete,
|
|
23
21
|
instruction: {
|
|
24
22
|
async act(page) {
|
|
25
23
|
const finishButton = page.locator(CheckoutOverviewSel.finishBtn);
|
|
@@ -27,7 +25,6 @@ export const FinishOrderBlock = defineMethodBlock<
|
|
|
27
25
|
finishButton.click(),
|
|
28
26
|
);
|
|
29
27
|
},
|
|
30
|
-
resolve: () => checkpoint("OrderComplete"),
|
|
31
28
|
verify: [
|
|
32
29
|
Trait.text(
|
|
33
30
|
CheckoutOverviewSel.completeHeader,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { definePageBlock, Trait } from "waygraph";
|
|
2
|
-
import
|
|
2
|
+
import { LoggedIn } from "../../../states/checkout.states.js";
|
|
3
3
|
import { AddToCartBlock } from "./methods/add-to-cart.effect.block.js";
|
|
4
4
|
import { RemoveFromCartBlock } from "./methods/remove-from-cart.effect.block.js";
|
|
5
5
|
import { AddAllToCartBlock } from "./methods/add-all-to-cart.method.block.js";
|
|
@@ -18,11 +18,11 @@ import { InventorySel } from "./methods/inventory-items.js";
|
|
|
18
18
|
* to LoggedIn. Cart Effects/Methods use In Checkpoint<string> (from: "*") so
|
|
19
19
|
* auto still offers them after leave/return - menu follows live DOM buttons.
|
|
20
20
|
*/
|
|
21
|
-
export const InventoryPageBlock = definePageBlock
|
|
21
|
+
export const InventoryPageBlock = definePageBlock({
|
|
22
22
|
name: "page-inventory",
|
|
23
23
|
description:
|
|
24
24
|
"Inventory catalog hub - per-item and bulk add/remove, open item detail.",
|
|
25
|
-
checkpoint:
|
|
25
|
+
checkpoint: LoggedIn,
|
|
26
26
|
verify: [
|
|
27
27
|
Trait.url({ pathname: "/inventory.html" }),
|
|
28
28
|
Trait.visible(InventorySel.list),
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { defineMethodBlock, checkpoint
|
|
2
|
-
import
|
|
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);
|
package/examples/saucedemo/src/blocks/saucedemo-web/inventory/methods/add-to-cart.effect.block.ts
CHANGED
|
@@ -1,14 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
checkpoint,
|
|
4
|
-
type Checkpoint,
|
|
5
|
-
type WaygraphInstanceOption,
|
|
6
|
-
} from "waygraph";
|
|
7
|
-
import type { ItemInCart } from "../../../../states/checkout.states.js";
|
|
1
|
+
import { defineEffectBlock, type WaygraphInstanceOption } from "waygraph";
|
|
2
|
+
import { ItemInCart } from "../../../../states/checkout.states.js";
|
|
8
3
|
import { SelectedItem } from "../../../../states/checkout.mem-keys.js";
|
|
9
4
|
import { collectAddableItems, InventorySel } from "./inventory-items.js";
|
|
10
5
|
|
|
11
|
-
|
|
12
6
|
/**
|
|
13
7
|
* Kind: Effect
|
|
14
8
|
* Helper: defineEffectBlock
|
|
@@ -17,40 +11,38 @@ import { collectAddableItems, InventorySel } from "./inventory-items.js";
|
|
|
17
11
|
* Mutates cart for the mem-picked product. waygraph auto lists one
|
|
18
12
|
* "Add ..." row per live Add button via instanceOptions.
|
|
19
13
|
*/
|
|
20
|
-
export const AddToCartBlock = defineEffectBlock
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
},
|
|
31
|
-
resolve: () => checkpoint("ItemInCart"),
|
|
32
|
-
verify: [
|
|
33
|
-
{
|
|
34
|
-
name: "item-added-to-cart",
|
|
35
|
-
async check(page, mem) {
|
|
36
|
-
const { id } = mem.get(SelectedItem.key);
|
|
37
|
-
return await page
|
|
38
|
-
.locator(InventorySel.removeBtn(id))
|
|
39
|
-
.first()
|
|
40
|
-
.isVisible();
|
|
41
|
-
},
|
|
42
|
-
},
|
|
43
|
-
],
|
|
44
|
-
},
|
|
45
|
-
async instanceOptions(page): Promise<readonly WaygraphInstanceOption[]> {
|
|
46
|
-
const items = await collectAddableItems(page);
|
|
47
|
-
return items.map((item) => ({
|
|
48
|
-
id: item.id,
|
|
49
|
-
label: `Add "${item.name}" to cart`,
|
|
50
|
-
key: SelectedItem.key,
|
|
51
|
-
value: item,
|
|
52
|
-
highlight: InventorySel.addBtn(item.id),
|
|
53
|
-
}));
|
|
14
|
+
export const AddToCartBlock = defineEffectBlock({
|
|
15
|
+
name: "add-to-cart",
|
|
16
|
+
description:
|
|
17
|
+
"Adds the item named by mem (saucedemo.selectedItem) to the cart.",
|
|
18
|
+
to: ItemInCart,
|
|
19
|
+
requires: [SelectedItem.key],
|
|
20
|
+
instruction: {
|
|
21
|
+
async act(page, _input, mem) {
|
|
22
|
+
const { id } = mem.get(SelectedItem.key);
|
|
23
|
+
await page.locator(InventorySel.addBtn(id)).click();
|
|
54
24
|
},
|
|
25
|
+
verify: [
|
|
26
|
+
{
|
|
27
|
+
name: "item-added-to-cart",
|
|
28
|
+
async check(page, mem) {
|
|
29
|
+
const { id } = mem.get(SelectedItem.key);
|
|
30
|
+
return await page
|
|
31
|
+
.locator(InventorySel.removeBtn(id))
|
|
32
|
+
.first()
|
|
33
|
+
.isVisible();
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
],
|
|
37
|
+
},
|
|
38
|
+
async instanceOptions(page): Promise<readonly WaygraphInstanceOption[]> {
|
|
39
|
+
const items = await collectAddableItems(page);
|
|
40
|
+
return items.map((item) => ({
|
|
41
|
+
id: item.id,
|
|
42
|
+
label: `Add "${item.name}" to cart`,
|
|
43
|
+
key: SelectedItem.key,
|
|
44
|
+
value: item,
|
|
45
|
+
highlight: InventorySel.addBtn(item.id),
|
|
46
|
+
}));
|
|
55
47
|
},
|
|
56
|
-
);
|
|
48
|
+
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { defineMethodBlock, checkpoint
|
|
2
|
-
import
|
|
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
|
|
2
|
-
import
|
|
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
|
|
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
|
|
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
|
|
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:
|
|
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" })],
|
package/examples/saucedemo/src/blocks/saucedemo-web/inventory-item/nav-back-to-inventory.block.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { defineNavClickBlock, Trait } from "waygraph";
|
|
2
|
-
import
|
|
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
|
|
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:
|
|
16
|
+
checkpoint: LoggedIn,
|
|
17
17
|
click: ItemDetailSel.backToProductsBtn,
|
|
18
18
|
verify: [Trait.url({ pathname: "/inventory.html" })],
|
|
19
19
|
});
|
package/examples/saucedemo/src/blocks/saucedemo-web/inventory-item/nav-back-to-products.block.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { defineNavClickBlock, Trait } from "waygraph";
|
|
2
|
-
import
|
|
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
|
|
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:
|
|
16
|
+
checkpoint: LoggedIn,
|
|
17
17
|
click: ItemDetailSel.backToProductsBtn,
|
|
18
18
|
verify: [Trait.url({ pathname: "/inventory.html" })],
|
|
19
19
|
});
|
package/examples/saucedemo/src/blocks/saucedemo-web/inventory-item/nav-continue-shopping.block.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { defineNavClickBlock, Trait } from "waygraph";
|
|
2
|
-
import
|
|
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
|
|
12
|
+
export const NavContinueShoppingBlock = defineNavClickBlock({
|
|
13
13
|
name: "nav-continue-shopping",
|
|
14
14
|
description: "Clicks 'Continue Shopping' on the cart page.",
|
|
15
|
-
checkpoint:
|
|
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
|
|
2
|
-
import
|
|
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,15 +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
|
|
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
25
|
},
|
|
25
26
|
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { defineMethodBlock
|
|
2
|
-
import
|
|
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,15 +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
|
|
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
27
|
},
|
|
27
28
|
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { defineMethodBlock, checkpoint, Trait } from "waygraph";
|
|
2
|
-
import
|
|
2
|
+
import {
|
|
3
3
|
LoginPage,
|
|
4
4
|
LoginSubmitOutcome,
|
|
5
5
|
} from "../../../states/checkout.states.js";
|
|
@@ -17,12 +17,11 @@ type LoginObserve = "success" | "failure";
|
|
|
17
17
|
* already did that). One Block, one action: submit.
|
|
18
18
|
* Branches: good creds -> LoggedIn; bad/locked -> LoginPage with error banner.
|
|
19
19
|
*/
|
|
20
|
-
export const SubmitLoginBlock = defineMethodBlock
|
|
21
|
-
LoginPage,
|
|
22
|
-
LoginSubmitOutcome
|
|
23
|
-
>({
|
|
20
|
+
export const SubmitLoginBlock = defineMethodBlock({
|
|
24
21
|
name: "submit-login",
|
|
25
22
|
description: "Submits the login form; stays on LoginPage when auth fails.",
|
|
23
|
+
from: LoginPage,
|
|
24
|
+
to: LoginSubmitOutcome,
|
|
26
25
|
instruction: {
|
|
27
26
|
async act(page) {
|
|
28
27
|
// noWaitAfter: observe owns the inventory URL wait. Default click
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { defineMethodBlock,
|
|
2
|
-
import
|
|
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
|
|
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
|
|
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
|
|
20
|
+
export const NavLoginBlock = definePageBlock({
|
|
21
21
|
name: "nav-login",
|
|
22
22
|
description: "Goes to the Swag Labs login page.",
|
|
23
|
-
checkpoint:
|
|
23
|
+
checkpoint: LoginPage,
|
|
24
24
|
url: "/",
|
|
25
25
|
verify: [Trait.visible(LoginSel.loginButton)],
|
|
26
26
|
methods: {
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { checkpoint, defineApiBlock } from "waygraph";
|
|
2
|
-
import type { Checkpoint, StubCtx } from "waygraph";
|
|
3
2
|
import { engine } from "../../config/waygraph.config.js";
|
|
4
3
|
import { loginFlow } from "./login.flow.js";
|
|
5
4
|
|
|
@@ -15,24 +14,27 @@ import { loginFlow } from "./login.flow.js";
|
|
|
15
14
|
* hits a well-known public REST test API (jsonplaceholder) purely to prove
|
|
16
15
|
* the mechanism - a real project would point `call` at its own backend.
|
|
17
16
|
*/
|
|
18
|
-
export
|
|
19
|
-
export type
|
|
17
|
+
export const BackendHealthy = checkpoint("BackendHealthy");
|
|
18
|
+
export type BackendHealthy = typeof BackendHealthy;
|
|
19
|
+
export const BackendDown = checkpoint("BackendDown");
|
|
20
|
+
export type BackendDown = typeof BackendDown;
|
|
20
21
|
|
|
21
|
-
const CheckBackendHealth = defineApiBlock
|
|
22
|
+
const CheckBackendHealth = defineApiBlock({
|
|
22
23
|
name: "check-backend-health",
|
|
24
|
+
to: [BackendHealthy, BackendDown],
|
|
23
25
|
call: ({ request }) =>
|
|
24
26
|
request.get("https://jsonplaceholder.typicode.com/todos/1"),
|
|
25
|
-
resolve: (result) =>
|
|
26
|
-
result.ok ? checkpoint("BackendHealthy") : checkpoint("BackendDown"),
|
|
27
|
-
stubBefore: (ctx: StubCtx<BackendHealthy | BackendDown>) => {
|
|
28
|
-
ctx.title("Checking backend health · real HTTP request, no browser");
|
|
29
|
-
},
|
|
27
|
+
resolve: (result) => (result.ok ? BackendHealthy : BackendDown),
|
|
30
28
|
});
|
|
31
29
|
|
|
32
30
|
export const apiDemoEpisode = engine
|
|
33
31
|
.map()
|
|
34
32
|
.start()
|
|
35
|
-
.method(
|
|
33
|
+
.method(
|
|
34
|
+
CheckBackendHealth.stubBefore((ctx) => {
|
|
35
|
+
ctx.title("Checking backend health · real HTTP request, no browser");
|
|
36
|
+
}),
|
|
37
|
+
)
|
|
36
38
|
.end();
|
|
37
39
|
|
|
38
40
|
export const apiDemoFlow = engine
|
|
@@ -1,19 +1,29 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { checkpoint } from "waygraph";
|
|
2
2
|
|
|
3
3
|
// One Checkpoint per real state the target app can be in - kept together so the
|
|
4
4
|
// whole checkout flow's state space reads in one place, the same reason a
|
|
5
5
|
// backend keeps its models together instead of scattered across handlers.
|
|
6
6
|
// `Start` is waygraph's own exported type, not redeclared here.
|
|
7
7
|
|
|
8
|
-
export
|
|
9
|
-
export type
|
|
8
|
+
export const LoginPage = checkpoint("LoginPage");
|
|
9
|
+
export type LoginPage = typeof LoginPage;
|
|
10
|
+
export const LoggedIn = checkpoint("LoggedIn");
|
|
11
|
+
export type LoggedIn = typeof LoggedIn;
|
|
10
12
|
/** submit-login: inventory on success, login form + error banner on auth failure. */
|
|
11
|
-
export
|
|
12
|
-
export type
|
|
13
|
+
export const LoginSubmitOutcome = [LoggedIn, LoginPage] as const;
|
|
14
|
+
export type LoginSubmitOutcome = (typeof LoginSubmitOutcome)[number];
|
|
15
|
+
export const ItemInCart = checkpoint("ItemInCart");
|
|
16
|
+
export type ItemInCart = typeof ItemInCart;
|
|
13
17
|
/** remove-from-cart: still has items → ItemInCart; empty cart → LoggedIn. */
|
|
14
|
-
export
|
|
15
|
-
export type
|
|
16
|
-
export
|
|
17
|
-
export type
|
|
18
|
-
export
|
|
19
|
-
export type
|
|
18
|
+
export const RemoveFromCartOutcome = [ItemInCart, LoggedIn] as const;
|
|
19
|
+
export type RemoveFromCartOutcome = (typeof RemoveFromCartOutcome)[number];
|
|
20
|
+
export const CartPage = checkpoint("CartPage");
|
|
21
|
+
export type CartPage = typeof CartPage;
|
|
22
|
+
export const CheckoutInfoPage = checkpoint("CheckoutInfoPage");
|
|
23
|
+
export type CheckoutInfoPage = typeof CheckoutInfoPage;
|
|
24
|
+
export const CheckoutOverviewPage = checkpoint("CheckoutOverviewPage");
|
|
25
|
+
export type CheckoutOverviewPage = typeof CheckoutOverviewPage;
|
|
26
|
+
export const ItemDetailPage = checkpoint("ItemDetailPage");
|
|
27
|
+
export type ItemDetailPage = typeof ItemDetailPage;
|
|
28
|
+
export const OrderComplete = checkpoint("OrderComplete");
|
|
29
|
+
export type OrderComplete = typeof OrderComplete;
|
|
@@ -40,7 +40,7 @@ export const deviceShowcase = {
|
|
|
40
40
|
before: (ctx: StubCtx) => {
|
|
41
41
|
ctx.title("Signing in · mobile");
|
|
42
42
|
ctx.device("mobile");
|
|
43
|
-
ctx.portrait
|
|
43
|
+
ctx.orientation("portrait");
|
|
44
44
|
ctx.todos("saucedemo", ...checklist(0, 0));
|
|
45
45
|
ctx.zoom(1.35);
|
|
46
46
|
const fromMem = ctx.mem?.get(LoginCreds.key)?.username;
|
|
@@ -93,8 +93,8 @@ export const deviceShowcase = {
|
|
|
93
93
|
});
|
|
94
94
|
},
|
|
95
95
|
after: (ctx: StubCtx) => {
|
|
96
|
-
ctx.
|
|
97
|
-
ctx.landscape
|
|
96
|
+
ctx.title("Inventory · landscape");
|
|
97
|
+
ctx.orientation("landscape");
|
|
98
98
|
ctx.todos("saucedemo", ...checklist(3, 3));
|
|
99
99
|
ctx.ring("shelf", {
|
|
100
100
|
selector: ".inventory_list",
|
|
@@ -111,7 +111,7 @@ export const deviceShowcase = {
|
|
|
111
111
|
before: (ctx: StubCtx) => {
|
|
112
112
|
ctx.title("Pick a product · tablet");
|
|
113
113
|
ctx.device("tablet");
|
|
114
|
-
ctx.portrait
|
|
114
|
+
ctx.orientation("portrait");
|
|
115
115
|
ctx.todos("saucedemo", ...checklist(3, 3));
|
|
116
116
|
ctx.zoom(1.35);
|
|
117
117
|
ctx.zoomOut(false);
|
|
@@ -138,7 +138,7 @@ export const deviceShowcase = {
|
|
|
138
138
|
});
|
|
139
139
|
},
|
|
140
140
|
after: (ctx: StubCtx) => {
|
|
141
|
-
ctx.
|
|
141
|
+
ctx.title("In the cart");
|
|
142
142
|
ctx.todos("saucedemo", ...checklist(4, 4));
|
|
143
143
|
ctx.zoomOut(false);
|
|
144
144
|
ctx.ring("badge", {
|
|
@@ -155,7 +155,7 @@ export const deviceShowcase = {
|
|
|
155
155
|
openCart: {
|
|
156
156
|
before: (ctx: StubCtx) => {
|
|
157
157
|
ctx.title("Open cart · landscape");
|
|
158
|
-
ctx.landscape
|
|
158
|
+
ctx.orientation("landscape");
|
|
159
159
|
ctx.todos("saucedemo", ...checklist(5, 5));
|
|
160
160
|
ctx.zoom(1.4);
|
|
161
161
|
ctx.zoomOut(false);
|
|
@@ -167,15 +167,14 @@ export const deviceShowcase = {
|
|
|
167
167
|
tone: "planned",
|
|
168
168
|
focus: true,
|
|
169
169
|
zoomOut: false,
|
|
170
|
-
followMouse: false,
|
|
171
170
|
weight: "bold",
|
|
172
171
|
gesture: "tap",
|
|
173
172
|
},
|
|
174
173
|
});
|
|
175
174
|
},
|
|
176
175
|
after: (ctx: StubCtx) => {
|
|
177
|
-
ctx.
|
|
178
|
-
ctx.
|
|
176
|
+
ctx.title("Your cart · desktop");
|
|
177
|
+
ctx.hideDevice();
|
|
179
178
|
ctx.hideTodos();
|
|
180
179
|
ctx.zoomOut(true);
|
|
181
180
|
ctx.ring("items", {
|
|
@@ -185,7 +184,6 @@ export const deviceShowcase = {
|
|
|
185
184
|
tone: "success",
|
|
186
185
|
focus: true,
|
|
187
186
|
zoomOut: true,
|
|
188
|
-
followMouse: false,
|
|
189
187
|
duration: true,
|
|
190
188
|
});
|
|
191
189
|
},
|