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
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
// The demo panel before a step: episode and step chips, pace, the mem it reads (editable), and the Run gate.
|
|
2
|
+
import { envFlag, envString } from "../../engine/env.js";
|
|
3
|
+
import { ignorePageGone, ignoreTimeout } from "../../engine/page-gone.js";
|
|
4
|
+
import { installOverlay } from "../overlay/overlay.js";
|
|
5
|
+
import { miniStepLabel } from "./step-panels.js";
|
|
6
|
+
export async function renderBeforeStep(page, info) {
|
|
7
|
+
await installOverlay(page, info.title, info.bannerUi, info.caption, info.networkTabVisible);
|
|
8
|
+
// A ring left highlighting the PREVIOUS step's element (and its live
|
|
9
|
+
// resize/scroll tracker) shouldn't linger once a new step's own panel is
|
|
10
|
+
// up - only relevant when a Block's act() doesn't navigate away, since a
|
|
11
|
+
// real navigation already wipes document.documentElement's children.
|
|
12
|
+
await page
|
|
13
|
+
.evaluate(() => {
|
|
14
|
+
if (window.__wgRingTrack) {
|
|
15
|
+
window.removeEventListener("resize", window.__wgRingTrack);
|
|
16
|
+
window.removeEventListener("scroll", window.__wgRingTrack, true);
|
|
17
|
+
window.__wgRingTrack = null;
|
|
18
|
+
}
|
|
19
|
+
if (window.__wgHideRing)
|
|
20
|
+
window.__wgHideRing();
|
|
21
|
+
if (window.__wgHideCursor)
|
|
22
|
+
window.__wgHideCursor();
|
|
23
|
+
})
|
|
24
|
+
.catch(ignorePageGone);
|
|
25
|
+
// miniStepLabel / todosHtmlFromInfo are Node-only — browser evaluate has no closure.
|
|
26
|
+
const payload = { ...info, stepLabel: miniStepLabel(info) };
|
|
27
|
+
await page
|
|
28
|
+
.evaluate((info) => {
|
|
29
|
+
// Reused in place, not removed + recreated, every step - the old
|
|
30
|
+
// remove()-then-fade-back-in cycle was a real flash on every single
|
|
31
|
+
// transition (the user: "the appear and disappear... hurts eyes and
|
|
32
|
+
// dizzy"). Updating one persistent element's content has nothing to
|
|
33
|
+
// flash - it only ever fades in ONCE, the first time this page
|
|
34
|
+
// genuinely has no panel yet (a real navigation wiped the whole
|
|
35
|
+
// document, or this is the very first step).
|
|
36
|
+
let panel = __wgById("wg-panel");
|
|
37
|
+
const isNewPanel = !panel;
|
|
38
|
+
if (!panel) {
|
|
39
|
+
panel = document.createElement("div");
|
|
40
|
+
panel.id = "wg-panel";
|
|
41
|
+
}
|
|
42
|
+
const pct = Math.round((info.index / info.total) * 100);
|
|
43
|
+
// A real tab bar, not a single text line - every episode this chain
|
|
44
|
+
// touches, the current one reading as active (the user: "if episode 1 is
|
|
45
|
+
// active, the episode 2 tab is inactive"). Absent entirely for an ad
|
|
46
|
+
// hoc block chain with no named Flows.
|
|
47
|
+
const episodes = info.allEpisodes && info.allEpisodes.length > 0
|
|
48
|
+
? __wgEl("div", { id: "wg-episodes" }, info.allEpisodes.map((e) => {
|
|
49
|
+
const cls = e.episodeNumber < (info.episodeNumber ?? 0) ? "wg-ep-done"
|
|
50
|
+
: e.episodeNumber === info.episodeNumber ? "wg-ep-current"
|
|
51
|
+
: "wg-ep-upcoming";
|
|
52
|
+
// The gentle one-time glow only plays on the tab actually
|
|
53
|
+
// being entered right now, not on every render of it.
|
|
54
|
+
const enteredCls = info.justEnteredEpisode && e.episodeNumber === info.episodeNumber
|
|
55
|
+
? " wg-ep-entered"
|
|
56
|
+
: "";
|
|
57
|
+
return __wgEl("span", { class: "wg-ep-tab " + cls + enteredCls }, "Episode " + e.episodeNumber + ": " + (e.episodeTitle || ""));
|
|
58
|
+
}))
|
|
59
|
+
: null;
|
|
60
|
+
// Scoped to THIS episode's own blocks (info.allNames is already the
|
|
61
|
+
// episode-local subset the caller computed) - moduleIndex is this
|
|
62
|
+
// step's position WITHIN that subset, not the whole chain's index -
|
|
63
|
+
// "in episode 2 it shows 2nd to the last... it should start from the
|
|
64
|
+
// first block" (the user).
|
|
65
|
+
const modulesClass = info.stepperMode === "full" ? "wg-modules-full" : "wg-modules-carousel";
|
|
66
|
+
const modules = info.allNames.map((name, idx) => {
|
|
67
|
+
const cls = idx < info.moduleIndex ? "wg-mod-done" : idx === info.moduleIndex ? "wg-mod-current" : "wg-mod-upcoming";
|
|
68
|
+
const desc = info.allDescriptions && info.allDescriptions[idx];
|
|
69
|
+
return __wgEl("span", { class: "wg-mod " + cls, title: desc || undefined }, String(name));
|
|
70
|
+
});
|
|
71
|
+
const pace = info.paceBadge || info.paceLabel
|
|
72
|
+
? __wgEl("div", { class: "wg-pace", data: { paceKind: info.paceKind || "normal" } }, __wgEl("span", { class: "wg-pace-badge" }, info.paceBadge || "1x"), __wgEl("span", null, info.paceLabel || ""))
|
|
73
|
+
: null;
|
|
74
|
+
const keys = info.keys.length === 0
|
|
75
|
+
? [__wgEl("div", { class: "wg-key" }, "(no MemKeys required)")]
|
|
76
|
+
: info.keys.map((k) => {
|
|
77
|
+
const field = __wgEl("textarea", { data: { key: k.name }, attrs: { rows: 2 } });
|
|
78
|
+
field.value = k.value;
|
|
79
|
+
return __wgEl("div", { class: "wg-key" }, __wgEl("label", null, k.name), field, __wgEl("div", { class: "wg-key-pretty", data: { prettyFor: k.name } }));
|
|
80
|
+
});
|
|
81
|
+
let autoNow = false;
|
|
82
|
+
try {
|
|
83
|
+
autoNow = localStorage.getItem("wg-autoplay") === "1";
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
/* private mode / blocked storage - defaults to manual */
|
|
87
|
+
}
|
|
88
|
+
const autoplay = __wgEl("input", { id: "wg-autoplay-cb", attrs: { type: "checkbox" } });
|
|
89
|
+
autoplay.checked = autoNow;
|
|
90
|
+
// Todos render into floating #wg-todo-dock via __wgSyncTodos - never
|
|
91
|
+
// inside .wg-body (would vanish under --mini / Hide collapse).
|
|
92
|
+
__wgSet(panel, __wgEl("div", { id: "wg-progress" }, __wgEl("div", { id: "wg-progress-bar", style: "width:" + pct + "%" })), episodes, pace, __wgEl("div", { id: "wg-modules", class: modulesClass }, modules), __wgEl("h3", null, "Step " + (info.index + 1) + " / " + info.total + " - " + info.blockName), info.description ? __wgEl("div", { class: "wg-narration" }, info.description) : null, keys, __wgEl("div", { class: "wg-autoplay-row" }, __wgEl("label", null, autoplay, " Auto-advance")), __wgEl("div", { id: "wg-gate-manual", style: autoNow ? "display:none" : "" }, __wgEl("button", { id: "wg-run" }, "Run this step \u25B6")), __wgEl("div", { id: "wg-gate-auto", class: "wg-auto", style: autoNow ? "" : "display:none" }, "Auto-advancing..."));
|
|
93
|
+
if (isNewPanel) {
|
|
94
|
+
__wgAdd(panel);
|
|
95
|
+
requestAnimationFrame(() => panel.classList.add("wg-in"));
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
panel.classList.add("wg-in");
|
|
99
|
+
}
|
|
100
|
+
if (window.__wgWirePanelChrome) {
|
|
101
|
+
window.__wgWirePanelChrome(panel, "wg-panel-hidden", "waygraph demo", {
|
|
102
|
+
stepLabel: info.stepLabel || "",
|
|
103
|
+
forceCollapsed: info.forceCollapsed === true ? true : undefined,
|
|
104
|
+
fastForward: !!info.fastForward,
|
|
105
|
+
isApi: !!info.isApi,
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
if (window.__wgSyncTodos) {
|
|
109
|
+
const sync = info.todoSync || (info.todos && info.todos.length ? "set" : "keep");
|
|
110
|
+
// Prefer dock-only payload. Passing list:[] with a dock used to clear
|
|
111
|
+
// marks a frame later (empty-list clear path).
|
|
112
|
+
if (sync === "keep" && !info.todoDock) {
|
|
113
|
+
/* leave floating dock alone */
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
const payload = {
|
|
117
|
+
sync: sync,
|
|
118
|
+
dock: info.todoDock || null,
|
|
119
|
+
pos: info.todoPos || null,
|
|
120
|
+
todoId: info.todoId || (info.todoDock && info.todoDock.id) || null,
|
|
121
|
+
};
|
|
122
|
+
if (!info.todoDock && info.todos && info.todos.length) {
|
|
123
|
+
payload.list = info.todos;
|
|
124
|
+
}
|
|
125
|
+
window.__wgSyncTodos(payload);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
if (window.__wgStampModal) {
|
|
129
|
+
window.__wgStampModal(panel, "panel", {
|
|
130
|
+
phase: "before",
|
|
131
|
+
step: info.index + 1,
|
|
132
|
+
total: info.total,
|
|
133
|
+
block: info.blockName || "",
|
|
134
|
+
ready: true,
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
// Live, human-readable preview of what a MemKey's raw JSON will
|
|
138
|
+
// actually write - object fields become "Field: value" lines
|
|
139
|
+
// (camelCase split the same way state tags already are); a
|
|
140
|
+
// non-object payload (a plain string/number/array) is shown as-is.
|
|
141
|
+
// Hidden entirely in JSON mode - shares the SAME global toggle the
|
|
142
|
+
// result display's own Pretty/JSON buttons already set, not a
|
|
143
|
+
// second, separate preference.
|
|
144
|
+
const prettyMemValue = (raw) => {
|
|
145
|
+
let parsed;
|
|
146
|
+
try {
|
|
147
|
+
parsed = JSON.parse(raw);
|
|
148
|
+
}
|
|
149
|
+
catch {
|
|
150
|
+
return [__wgEl("em", null, "(invalid JSON)")];
|
|
151
|
+
}
|
|
152
|
+
if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
153
|
+
return [JSON.stringify(parsed)];
|
|
154
|
+
}
|
|
155
|
+
return Object.entries(parsed).map(([field, value]) => {
|
|
156
|
+
const label = field.replace(/([a-z0-9])([A-Z])/g, "$1 $2").replace(/^./, (c) => c.toUpperCase());
|
|
157
|
+
return __wgEl("div", { class: "wg-key-pretty-row" }, __wgEl("span", { class: "wg-key-pretty-label" }, label + ":"), " " + String(value));
|
|
158
|
+
});
|
|
159
|
+
};
|
|
160
|
+
const applyKeyPretty = () => {
|
|
161
|
+
const prettyOn = window.__wgPretty !== false;
|
|
162
|
+
panel.querySelectorAll("textarea[data-key]").forEach((ta) => {
|
|
163
|
+
const previewEl = ta.parentElement?.querySelector(".wg-key-pretty");
|
|
164
|
+
if (!previewEl)
|
|
165
|
+
return;
|
|
166
|
+
previewEl.style.display = prettyOn ? "" : "none";
|
|
167
|
+
if (prettyOn)
|
|
168
|
+
__wgSet(previewEl, prettyMemValue(ta.value));
|
|
169
|
+
});
|
|
170
|
+
};
|
|
171
|
+
applyKeyPretty();
|
|
172
|
+
panel.querySelectorAll("textarea[data-key]").forEach((ta) => {
|
|
173
|
+
ta.addEventListener("input", applyKeyPretty);
|
|
174
|
+
});
|
|
175
|
+
const runBtn = __wgById("wg-run");
|
|
176
|
+
if (runBtn) {
|
|
177
|
+
runBtn.addEventListener("click", () => {
|
|
178
|
+
const edits = {};
|
|
179
|
+
panel.querySelectorAll("textarea[data-key]").forEach((el) => {
|
|
180
|
+
edits[el.getAttribute("data-key") ?? ""] = el.value;
|
|
181
|
+
});
|
|
182
|
+
window.__wgNext(edits);
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
// Live toggle - flips localStorage immediately so an in-flight gate()
|
|
186
|
+
// poll (on the Node side) picks it up within its next poll slice,
|
|
187
|
+
// without needing this whole panel to re-render. A manual click
|
|
188
|
+
// still always wins over an active autoplay wait, whichever the
|
|
189
|
+
// checkbox says - this is the "hybrid" control: autoplay is a
|
|
190
|
+
// default, not a lockout.
|
|
191
|
+
const cb = __wgById("wg-autoplay-cb");
|
|
192
|
+
if (cb) {
|
|
193
|
+
cb.addEventListener("change", () => {
|
|
194
|
+
try {
|
|
195
|
+
localStorage.setItem("wg-autoplay", cb.checked ? "1" : "0");
|
|
196
|
+
}
|
|
197
|
+
catch {
|
|
198
|
+
/* private mode / blocked storage - toggle still works this page */
|
|
199
|
+
}
|
|
200
|
+
const manual = __wgById("wg-gate-manual");
|
|
201
|
+
const auto = __wgById("wg-gate-auto");
|
|
202
|
+
if (manual)
|
|
203
|
+
manual.style.display = cb.checked ? "none" : "";
|
|
204
|
+
if (auto)
|
|
205
|
+
auto.style.display = cb.checked ? "" : "none";
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
}, payload)
|
|
209
|
+
.catch(ignorePageGone);
|
|
210
|
+
if (envString("WAYGRAPH_PROVE_SHOT") || envFlag("WAYGRAPH_PROVE_EXIT")) {
|
|
211
|
+
// Default: prove once on first painted panel. PROVE_EVERY=1 re-checks
|
|
212
|
+
// every step (noisy; useful when hunting a mid-chain blank).
|
|
213
|
+
const proveEvery = envFlag("WAYGRAPH_PROVE_EVERY");
|
|
214
|
+
const already = globalThis.__wgProveDone;
|
|
215
|
+
if (!already || proveEvery || envFlag("WAYGRAPH_PROVE_EXIT")) {
|
|
216
|
+
await page.waitForTimeout(500).catch(ignoreTimeout);
|
|
217
|
+
const shot = envString("WAYGRAPH_PROVE_SHOT");
|
|
218
|
+
if (shot)
|
|
219
|
+
await page.screenshot({ path: shot }).catch(ignorePageGone);
|
|
220
|
+
const ok = await page
|
|
221
|
+
.evaluate(() => {
|
|
222
|
+
const beacons = typeof window.__wgOverlayBeacon === "function" ? window.__wgOverlayBeacon() : [];
|
|
223
|
+
const panel = beacons.find((b) => b.modal === "panel" && b.ready && b.visible);
|
|
224
|
+
const textOk = panel && panel.textLen >= 12;
|
|
225
|
+
const opacityOk = panel && Number(panel.opacity) > 0.5;
|
|
226
|
+
return {
|
|
227
|
+
ok: !!(panel && textOk && opacityOk),
|
|
228
|
+
beacons,
|
|
229
|
+
hasRun: !!__wgById("wg-run"),
|
|
230
|
+
readyAttr: __wgById("wg-panel")?.getAttribute("data-wg-ready") || null,
|
|
231
|
+
};
|
|
232
|
+
})
|
|
233
|
+
.catch((e) => ({ ok: false, reason: String(e instanceof Error ? e.message : e) }));
|
|
234
|
+
console.error("WAYGRAPH_PROVE " + JSON.stringify(ok));
|
|
235
|
+
globalThis.__wgProveDone = true;
|
|
236
|
+
if (envFlag("WAYGRAPH_PROVE_EXIT")) {
|
|
237
|
+
process.exit(ok && ok.ok ? 0 : 2);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { WgPage } from "../types.js";
|
|
2
|
+
import { type WaygraphSlide } from "../../engine/stub/ring.js";
|
|
3
|
+
import type { DemoPace } from "../../engine/stub/pace.js";
|
|
4
|
+
/** Where the slides sit (title, Block, episode) and how fast they advance. */
|
|
5
|
+
export interface SlidesOptions {
|
|
6
|
+
title?: string | undefined;
|
|
7
|
+
blockName?: string | undefined;
|
|
8
|
+
episodeNumber?: number | undefined;
|
|
9
|
+
episodeTitle?: string | undefined;
|
|
10
|
+
fast?: boolean | undefined;
|
|
11
|
+
pace?: DemoPace | undefined;
|
|
12
|
+
autoplayMs?: number | undefined;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Multi-step yap captions - not block lifecycle. Each slide waits for Next
|
|
16
|
+
* (or auto-next), optional ring via slide.selector.
|
|
17
|
+
*
|
|
18
|
+
* Advance wait does NOT use exposeFunction/gate(): after a real navigation
|
|
19
|
+
* (e.g. finish-order -> checkout-complete) the panel can render while
|
|
20
|
+
* __wgNext is momentarily wedged, which left "Next slide" looking live but
|
|
21
|
+
* doing nothing. In-page data-wg-acked + autoplay poll is the source of truth.
|
|
22
|
+
*/
|
|
23
|
+
export declare function presentSlides(page: WgPage, slides: readonly WaygraphSlide[], opts?: SlidesOptions): Promise<void>;
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
import { demoPaceGateMs, formatDemoPaceBadge, formatDemoPaceLabel, normalizeDemoPace, resolveFixtureDwellMs } from "../narration/demo-pace.js";
|
|
2
|
+
import { formatHighlightCaption } from "../narration/style.js";
|
|
3
|
+
import { normalizeHighlightSize, normalizeHighlightTone, normalizeHighlightWeight } from "../../engine/stub/ring.js";
|
|
4
|
+
import { installOverlay } from "../overlay/overlay.js";
|
|
5
|
+
import { applyHighlightZoom, ensureSelectorInView, hideRing, showRing } from "../overlay/rings.js";
|
|
6
|
+
import { demoPaceKind } from "./demo-log.js";
|
|
7
|
+
import { envFlag, envNumber, envString } from "../../engine/env.js";
|
|
8
|
+
/**
|
|
9
|
+
* Multi-step yap captions - not block lifecycle. Each slide waits for Next
|
|
10
|
+
* (or auto-next), optional ring via slide.selector.
|
|
11
|
+
*
|
|
12
|
+
* Advance wait does NOT use exposeFunction/gate(): after a real navigation
|
|
13
|
+
* (e.g. finish-order -> checkout-complete) the panel can render while
|
|
14
|
+
* __wgNext is momentarily wedged, which left "Next slide" looking live but
|
|
15
|
+
* doing nothing. In-page data-wg-acked + autoplay poll is the source of truth.
|
|
16
|
+
*/
|
|
17
|
+
export async function presentSlides(page, slides, opts) {
|
|
18
|
+
const title = (opts && opts.title) || "waygraph demo";
|
|
19
|
+
const blockName = (opts && opts.blockName) || "";
|
|
20
|
+
const episodeNumber = opts && opts.episodeNumber;
|
|
21
|
+
const episodeTitle = (opts && opts.episodeTitle) || "";
|
|
22
|
+
const gatesFast = !!(opts && opts.fast);
|
|
23
|
+
const demoPace = normalizeDemoPace((opts && opts.pace) || (gatesFast ? "fast" : "normal"));
|
|
24
|
+
const baseAutoplay = opts && opts.autoplayMs
|
|
25
|
+
? Number(opts.autoplayMs)
|
|
26
|
+
: (envNumber("WAYGRAPH_AUTOPLAY_MS") ?? 1800);
|
|
27
|
+
const autoplayMs = demoPaceGateMs(demoPace, baseAutoplay);
|
|
28
|
+
for (let i = 0; i < slides.length; i++) {
|
|
29
|
+
const s = slides[i];
|
|
30
|
+
const caption = formatHighlightCaption(s);
|
|
31
|
+
const slideTone = normalizeHighlightTone(s.tone);
|
|
32
|
+
const slideStyle = {
|
|
33
|
+
size: normalizeHighlightSize(s.size),
|
|
34
|
+
weight: normalizeHighlightWeight(s.weight),
|
|
35
|
+
};
|
|
36
|
+
const isLast = i === slides.length - 1;
|
|
37
|
+
const dwellMs = resolveFixtureDwellMs(s, { gatesFast, pace: demoPace });
|
|
38
|
+
await installOverlay(page, title);
|
|
39
|
+
if (s.selector) {
|
|
40
|
+
try {
|
|
41
|
+
await ensureSelectorInView(page, s.selector);
|
|
42
|
+
await applyHighlightZoom(page, s.selector, s.zoom, undefined);
|
|
43
|
+
// Playwright's own locator (>> piercing / :has-text() / :visible support), not a raw
|
|
44
|
+
// querySelector string - see rings.js's showRing for the same fix, same reason. count()
|
|
45
|
+
// gate: Locator.evaluate() has no timeout option and auto-waits ~30s for a match to
|
|
46
|
+
// appear - count() never waits, keeping this an immediate "does it exist now" check.
|
|
47
|
+
const sLoc = page.locator(s.selector).first();
|
|
48
|
+
const box = (await sLoc.count().catch(() => 0)) > 0
|
|
49
|
+
? await sLoc
|
|
50
|
+
.evaluate((el) => {
|
|
51
|
+
const r = el.getBoundingClientRect();
|
|
52
|
+
return { x: r.x, y: r.y, width: r.width, height: r.height };
|
|
53
|
+
})
|
|
54
|
+
.catch(() => null)
|
|
55
|
+
: null;
|
|
56
|
+
if (box && box.width > 0 && box.height > 0) {
|
|
57
|
+
await showRing(page, box, caption, slideTone, {
|
|
58
|
+
...slideStyle,
|
|
59
|
+
selector: s.selector,
|
|
60
|
+
focus: false,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
await hideRing(page);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
await hideRing(page);
|
|
70
|
+
}
|
|
71
|
+
await page.evaluate((info) => {
|
|
72
|
+
let panel = __wgById("wg-panel");
|
|
73
|
+
const isNew = !panel;
|
|
74
|
+
if (!panel) {
|
|
75
|
+
panel = document.createElement("div");
|
|
76
|
+
panel.id = "wg-panel";
|
|
77
|
+
}
|
|
78
|
+
panel.classList.remove("wg-error", "wg-expected");
|
|
79
|
+
// Do not clear wg-collapsed - WirePanelChrome honors Hide (localStorage)
|
|
80
|
+
// unless forceCollapsed:true (--mini / --video).
|
|
81
|
+
const episodeLine = info.episodeNumber !== undefined && info.episodeNumber !== null
|
|
82
|
+
? __wgEl("div", { class: "wg-episode" }, "Episode " + info.episodeNumber + (info.episodeTitle ? ": " + info.episodeTitle : "") + " · yap slides")
|
|
83
|
+
: null;
|
|
84
|
+
const pace = info.paceBadge || info.paceLabel
|
|
85
|
+
? __wgEl("div", { class: "wg-pace", data: { paceKind: info.paceKind || "normal" } }, __wgEl("span", { class: "wg-pace-badge" }, info.paceBadge || "1x"), __wgEl("span", null, info.paceLabel || ""))
|
|
86
|
+
: null;
|
|
87
|
+
const autoplay = __wgEl("input", { id: "wg-autoplay-cb", attrs: { type: "checkbox" } });
|
|
88
|
+
autoplay.checked = !!info.autoNow;
|
|
89
|
+
const run = __wgEl("button", { id: "wg-run", attrs: { type: "button" } }, info.isLast ? "Continue \u25B6" : "Next slide \u25B6");
|
|
90
|
+
run.disabled = info.dwellMs != null;
|
|
91
|
+
__wgSet(panel, __wgEl("div", { class: "wg-chrome" }, __wgEl("span", { class: "wg-chrome-title" }, "waygraph demo"), __wgEl("button", { class: "wg-hide-btn", data: { wgToggle: "1" }, attrs: { type: "button" } }, "Hide")), __wgEl("div", { class: "wg-body" }, episodeLine, pace, __wgEl("h3", null, "Slide " + (info.index + 1) + " / " + info.total + (info.blockName ? " · " + info.blockName : "")), info.tag ? __wgEl("div", { style: "border:none;padding:0;margin:0 0 6px;font-size:11px;color:#c9a6ff" }, info.tag) : null, __wgEl("div", { class: "wg-narration" }, String(info.caption)), info.detail ? __wgEl("div", { class: "wg-result-pretty", style: "margin:0 0 12px;color:#f0e8ff" }, info.detail) : null, info.dwellMs != null
|
|
92
|
+
? __wgEl("div", { class: "wg-auto", id: "wg-dwell-hint", style: "margin:0 0 8px" }, "Hold " + (info.dwellMs / 1000).toFixed(1) + "s before next...")
|
|
93
|
+
: null, __wgEl("div", { class: "wg-autoplay-row" }, __wgEl("label", null, autoplay, " Auto-advance")), __wgEl("div", { id: "wg-gate-manual", style: info.autoNow ? "display:none" : "" }, run), __wgEl("div", { id: "wg-gate-auto", class: "wg-auto", style: info.autoNow ? "" : "display:none" }, "Auto-advancing...")));
|
|
94
|
+
if (isNew) {
|
|
95
|
+
__wgAdd(panel);
|
|
96
|
+
requestAnimationFrame(() => panel.classList.add("wg-in"));
|
|
97
|
+
}
|
|
98
|
+
if (window.__wgWirePanelChrome) {
|
|
99
|
+
window.__wgWirePanelChrome(panel, "wg-panel-hidden", "waygraph demo", {
|
|
100
|
+
stepLabel: (info.episodeNumber !== undefined && info.episodeNumber !== null
|
|
101
|
+
? "Ep " + info.episodeNumber + " \u00b7 "
|
|
102
|
+
: "") +
|
|
103
|
+
"Slide " +
|
|
104
|
+
(info.index + 1) +
|
|
105
|
+
" / " +
|
|
106
|
+
info.total +
|
|
107
|
+
(info.blockName ? " \u00b7 " + info.blockName : ""),
|
|
108
|
+
// Video / --mini: compact pill. Else omit so Hide sticks.
|
|
109
|
+
forceCollapsed: info.forceCollapsed === true ? true : undefined,
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
if (window.__wgStampModal) {
|
|
113
|
+
window.__wgStampModal(panel, "panel", {
|
|
114
|
+
phase: "slide",
|
|
115
|
+
step: info.index + 1,
|
|
116
|
+
total: info.total,
|
|
117
|
+
block: info.blockName || "",
|
|
118
|
+
ready: true,
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
let autoNow = false;
|
|
122
|
+
try {
|
|
123
|
+
autoNow = localStorage.getItem("wg-autoplay") === "1";
|
|
124
|
+
}
|
|
125
|
+
catch {
|
|
126
|
+
/* ignore */
|
|
127
|
+
}
|
|
128
|
+
const cb = __wgById("wg-autoplay-cb");
|
|
129
|
+
if (cb) {
|
|
130
|
+
cb.checked = autoNow;
|
|
131
|
+
cb.addEventListener("change", () => {
|
|
132
|
+
try {
|
|
133
|
+
localStorage.setItem("wg-autoplay", cb.checked ? "1" : "0");
|
|
134
|
+
}
|
|
135
|
+
catch {
|
|
136
|
+
/* ignore */
|
|
137
|
+
}
|
|
138
|
+
const manual = __wgById("wg-gate-manual");
|
|
139
|
+
const auto = __wgById("wg-gate-auto");
|
|
140
|
+
if (manual)
|
|
141
|
+
manual.style.display = cb.checked ? "none" : "";
|
|
142
|
+
if (auto)
|
|
143
|
+
auto.style.display = cb.checked ? "" : "none";
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
const manual = __wgById("wg-gate-manual");
|
|
147
|
+
const auto = __wgById("wg-gate-auto");
|
|
148
|
+
if (manual)
|
|
149
|
+
manual.style.display = autoNow ? "none" : "";
|
|
150
|
+
if (auto)
|
|
151
|
+
auto.style.display = autoNow ? "" : "none";
|
|
152
|
+
const runBtn = __wgById("wg-run");
|
|
153
|
+
if (runBtn) {
|
|
154
|
+
runBtn.removeAttribute("data-wg-acked");
|
|
155
|
+
runBtn.addEventListener("click", (e) => {
|
|
156
|
+
e.preventDefault();
|
|
157
|
+
e.stopPropagation();
|
|
158
|
+
if (runBtn.disabled)
|
|
159
|
+
return;
|
|
160
|
+
runBtn.setAttribute("data-wg-acked", "1");
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
if (info.dwellMs != null && info.dwellMs > 0) {
|
|
164
|
+
const unlockAt = Date.now() + info.dwellMs;
|
|
165
|
+
const tick = () => {
|
|
166
|
+
const left = Math.max(0, unlockAt - Date.now());
|
|
167
|
+
const hint = __wgById("wg-dwell-hint");
|
|
168
|
+
const btn = __wgById("wg-run");
|
|
169
|
+
if (left <= 0) {
|
|
170
|
+
if (hint)
|
|
171
|
+
hint.remove();
|
|
172
|
+
if (btn)
|
|
173
|
+
btn.disabled = false;
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
if (hint)
|
|
177
|
+
hint.textContent = "Hold " + (left / 1000).toFixed(1) + "s before next...";
|
|
178
|
+
setTimeout(tick, 100);
|
|
179
|
+
};
|
|
180
|
+
setTimeout(tick, 100);
|
|
181
|
+
}
|
|
182
|
+
}, {
|
|
183
|
+
index: i,
|
|
184
|
+
total: slides.length,
|
|
185
|
+
caption: s.caption,
|
|
186
|
+
detail: s.detail || "",
|
|
187
|
+
tag: s.tag || "",
|
|
188
|
+
blockName,
|
|
189
|
+
isLast,
|
|
190
|
+
autoNow: false,
|
|
191
|
+
dwellMs,
|
|
192
|
+
episodeNumber: episodeNumber !== undefined ? episodeNumber : null,
|
|
193
|
+
episodeTitle,
|
|
194
|
+
paceBadge: formatDemoPaceBadge(demoPace, baseAutoplay),
|
|
195
|
+
paceLabel: formatDemoPaceLabel(demoPace, baseAutoplay),
|
|
196
|
+
paceKind: demoPaceKind(demoPace),
|
|
197
|
+
forceCollapsed: !!envString("WAYGRAPH_VIDEO") ||
|
|
198
|
+
envFlag("WAYGRAPH_MINI")
|
|
199
|
+
? true
|
|
200
|
+
: undefined,
|
|
201
|
+
});
|
|
202
|
+
const started = Date.now();
|
|
203
|
+
// When duration is set: floor both manual Next and auto-next to dwellMs.
|
|
204
|
+
// When unset: auto uses autoplayMs, manual Next is immediate.
|
|
205
|
+
const autoWaitMs = dwellMs != null ? dwellMs : autoplayMs;
|
|
206
|
+
for (;;) {
|
|
207
|
+
const acked = await page
|
|
208
|
+
.evaluate(() => {
|
|
209
|
+
const btn = __wgById("wg-run");
|
|
210
|
+
return !!(btn && btn.getAttribute("data-wg-acked") === "1");
|
|
211
|
+
})
|
|
212
|
+
.catch(() => false);
|
|
213
|
+
if (acked) {
|
|
214
|
+
if (dwellMs == null || Date.now() - started >= dwellMs)
|
|
215
|
+
break;
|
|
216
|
+
}
|
|
217
|
+
const auto = await page
|
|
218
|
+
.evaluate(() => {
|
|
219
|
+
try {
|
|
220
|
+
return localStorage.getItem("wg-autoplay") === "1";
|
|
221
|
+
}
|
|
222
|
+
catch {
|
|
223
|
+
return false;
|
|
224
|
+
}
|
|
225
|
+
})
|
|
226
|
+
.catch(() => false);
|
|
227
|
+
if (auto && Date.now() - started >= autoWaitMs)
|
|
228
|
+
break;
|
|
229
|
+
await new Promise((res) => setTimeout(res, 100));
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
await hideRing(page);
|
|
233
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import type { SomeBlock } from "../../engine/block/block.js";
|
|
2
|
+
import type { Checkpoint } from "../../engine/checkpoint/checkpoint.js";
|
|
3
|
+
import type { MemPage } from "../../engine/mem/mem.js";
|
|
4
|
+
import type { HighlightStyleDefaults } from "../../engine/stub/ring.js";
|
|
5
|
+
import type { TodoDockState, WaygraphTodoItem } from "../../engine/stub/todos.js";
|
|
6
|
+
import type { DemoPace } from "../../engine/stub/pace.js";
|
|
7
|
+
import type { BannerUiState, WgPage } from "../types.js";
|
|
8
|
+
/** What every step panel shows: where the step sits in the run and its episode, its pace, and how the panel looks. */
|
|
9
|
+
export interface StepPanelInfo {
|
|
10
|
+
index: number;
|
|
11
|
+
total: number;
|
|
12
|
+
blockName: string;
|
|
13
|
+
allNames: readonly string[];
|
|
14
|
+
allDescriptions?: readonly string[] | undefined;
|
|
15
|
+
moduleIndex: number;
|
|
16
|
+
allEpisodes?: readonly {
|
|
17
|
+
episodeNumber: number;
|
|
18
|
+
episodeTitle: string;
|
|
19
|
+
}[] | undefined;
|
|
20
|
+
episodeNumber?: number | undefined;
|
|
21
|
+
episodeTitle?: string | undefined;
|
|
22
|
+
title?: string | undefined;
|
|
23
|
+
bannerUi?: BannerUiState | null | undefined;
|
|
24
|
+
caption?: string | undefined;
|
|
25
|
+
networkTabVisible?: boolean | undefined;
|
|
26
|
+
stepperMode?: "full" | "carousel" | undefined;
|
|
27
|
+
forceCollapsed?: boolean | undefined;
|
|
28
|
+
fastForward?: boolean | undefined;
|
|
29
|
+
isApi?: boolean | undefined;
|
|
30
|
+
paceBadge?: string | undefined;
|
|
31
|
+
paceLabel?: string | undefined;
|
|
32
|
+
paceKind?: string | undefined;
|
|
33
|
+
}
|
|
34
|
+
/** The todo dock a panel syncs when it paints. */
|
|
35
|
+
export interface PanelTodos {
|
|
36
|
+
todos?: readonly WaygraphTodoItem[] | undefined;
|
|
37
|
+
todoDock?: TodoDockState | undefined;
|
|
38
|
+
todoSync?: "set" | "clear" | "keep" | undefined;
|
|
39
|
+
todoId?: string | undefined;
|
|
40
|
+
todoPos?: string | undefined;
|
|
41
|
+
}
|
|
42
|
+
/** A failed step: what threw (or the expected-failure result), its stubOnError narration, and the Retry/Stop gate. */
|
|
43
|
+
export interface FailPanelOptions extends StepPanelInfo {
|
|
44
|
+
block: SomeBlock;
|
|
45
|
+
highlightStyle?: HighlightStyleDefaults | undefined;
|
|
46
|
+
error: unknown;
|
|
47
|
+
out?: Checkpoint<string>;
|
|
48
|
+
message: string;
|
|
49
|
+
expectedFailureReason?: string | undefined;
|
|
50
|
+
gatesFast?: boolean | undefined;
|
|
51
|
+
demoPace?: DemoPace | undefined;
|
|
52
|
+
gate: () => Promise<Record<string, string>>;
|
|
53
|
+
mem: MemPage;
|
|
54
|
+
}
|
|
55
|
+
export declare function miniStepLabel(info: Pick<StepPanelInfo, "episodeNumber" | "index" | "total" | "blockName" | "paceBadge">): string;
|
|
56
|
+
/**
|
|
57
|
+
* stubOnError rings + amber "expected outcome" / red error panel, then wait
|
|
58
|
+
* for Stop/Retry. Used when a step throws OR when a `map({ expectedFailure })` flow's last
|
|
59
|
+
* block succeeds on the intentional fail branch (e.g. LoginPage + error banner).
|
|
60
|
+
*/
|
|
61
|
+
export declare function presentFailPanel(page: WgPage, opts: FailPanelOptions): Promise<Record<string, string>>;
|
|
62
|
+
/**
|
|
63
|
+
* Recovers a DOM selector from a built-in Trait's own .name string -
|
|
64
|
+
* visible(sel) / text-equals(sel, "...") - since Trait.check itself is
|
|
65
|
+
* an opaque closure with no selector field of its own. Best-effort only: a
|
|
66
|
+
* hand-written bespoke Trait, or url-matches(...) (no DOM target), yields
|
|
67
|
+
* nothing to highlight, which is fine - the panel still shows the result.
|
|
68
|
+
*/
|
|
69
|
+
export declare function extractVerifyHighlights(block: SomeBlock, resultTag: string): import("../../engine/stub/ring.js").WaygraphHighlightStub[];
|