playwright-director 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -17,6 +17,7 @@ An AI agent can also write or adapt the test for a specific communication goal
17
17
  - [Installation](#installation)
18
18
  - [Quick Start](#quick-start)
19
19
  - [API Reference](#api-reference)
20
+ - [Zooming on an element](#zooming-on-an-element)
20
21
  - [Multiple user profiles](#multiple-user-profiles)
21
22
  - [Variants — record the same tutorial for mobile](#variants--record-the-same-tutorial-for-mobile)
22
23
  - [TTS Configuration](#tts-configuration)
@@ -47,6 +48,8 @@ Most software teams maintain **tests** and **documentation** separately. Tests v
47
48
  - **Step overlays** — On-screen banners showing current step, progress bar, and descriptions
48
49
  - **Context screens** — Goal / clarification / attention cards between steps to explain what's happening
49
50
  - **Background music** — Looping audio with fade-out on completion
51
+ - **Camera zoom** — `zoom()` pushes in on a button, a field or a whole panel, optionally blurring the rest, then zooms back out
52
+ - **Blurred secrets** — `typeBlurred()` types passwords and API keys into a field that stays blurred in the video
50
53
  - **Email previews** — Simulated email popups for verification flow demos
51
54
  - **Multiple user profiles** — Two signed-in personas as browser-like tabs in one video, with an optional side-by-side moment
52
55
  - **ffmpeg post-processing** — Automatic video + audio merge with timeline-accurate voice placement
@@ -220,8 +223,12 @@ const tutorial = new Tutorial(page, options);
220
223
  | `click(locator)` | Click with cursor animation and highlight |
221
224
  | `fill(locator, value)` | Fill input with highlight |
222
225
  | `typeSlowly(locator, value, delay?)` | Type character by character (visual effect) |
226
+ | `typeBlurred(locator, value, options?)` | Type a secret into a field that stays blurred — options `{ delay?: 50, blur?: 4 (px), reveal?: false }` (or a number = `delay`). The blur is **not** removed afterwards unless `reveal: true` |
227
+ | `unblur(locator)` | Remove the blur left by `typeBlurred()` |
223
228
  | `selectOption(locator, value)` | Select dropdown option with highlight |
224
229
  | `highlight(locator, duration?)` | Highlight an element |
230
+ | `zoom(locator, options?)` | Camera zoom on an element, hold, zoom back out — see [Zooming on an element](#zooming-on-an-element) |
231
+ | `zoomIn(locator, options?)` / `zoomOut()` | Zoom in and stay zoomed (interact while zoomed), then zoom back out |
225
232
  | `moveMouseToElement(locator)` | Animate cursor to element |
226
233
  | `showEmailPreview(options)` | Show simulated email popup |
227
234
  | `switchPage(page)` | Switch recording to another tab/window |
@@ -251,6 +258,41 @@ const tutorial = new Tutorial(page, options);
251
258
  | `style` | `'goal' \| 'clarification' \| 'attention'` | Visual style |
252
259
  | `voiceText` | `string` | Custom TTS text |
253
260
 
261
+ ### Zooming on an element
262
+
263
+ `zoom()` pushes the camera in on an element — a button, a form field, a whole
264
+ card or panel — holds, then zooms back out. Optionally the rest of the page is
265
+ blurred. The step banner and cursor stay crisp and in place: only the page
266
+ zooms.
267
+
268
+ ```typescript
269
+ tutorial.step('The Pro plan', async () => {
270
+ await tutorial.zoom(page.locator('#pro-plan'), { blur: true });
271
+ });
272
+
273
+ // Stay zoomed while acting — clicks and the cursor work in the zoomed view
274
+ tutorial.step('Pick it', async () => {
275
+ await tutorial.zoomIn(page.locator('#pick-pro'));
276
+ await tutorial.click(page.locator('#pick-pro'));
277
+ await tutorial.zoomOut();
278
+ });
279
+ ```
280
+
281
+ ![Camera zoom on a settings panel while typing, rest of the page blurred](docs/images/zoom.png)
282
+
283
+ | Option | Type | Default | Description |
284
+ |---|---|---|---|
285
+ | `scale` | `number` | auto | Zoom factor. Auto fits the element to ~70% of the viewport, capped at 2.5× (never below 1× — a huge element just gets the blur) |
286
+ | `duration` | `number` | `1500` | `zoom()` only: how long to hold the zoomed view (ms) |
287
+ | `blur` | `boolean \| number` | `false` | Blur and slightly dim everything but the element. `true` = 4px, a number sets the radius |
288
+ | `transition` | `number` | `600` | Duration of each zoom-in / zoom-out animation (ms) |
289
+
290
+ The zoom stays "reasonable": the view never pans past the page edge, so an
291
+ element near a corner stays off-center instead of revealing blank canvas.
292
+ It works across scenes (the whole stage zooms) and on scrolled pages with
293
+ fixed headers. Like the rest of the tutorial layer, it is a no-op when
294
+ `TUTORIAL_MODE` is off. Keep a `zoomIn()`/`zoomOut()` pair inside one step.
295
+
254
296
  ## Multiple user profiles
255
297
 
256
298
  Some stories need two people: an accountant issues an invoice, a client pays it.
@@ -593,8 +635,8 @@ The skill bundles two reference documents that Claude reads before tutorializing
593
635
  | File | Content |
594
636
  |---|---|
595
637
  | `SKILL.md` | 4-phase process: understand the viewer → design the arc → implement with `playwright-director` → verify |
596
- | `references/storytelling.md` | Who is watching (role, expertise, emotional state), narration voice rules, pacing decisions, when to use context screens vs steps, multi-profile scene heuristics |
597
- | `references/api.md` | Complete `Tutorial` class API with timing model, critical rules (e.g., navigate before any tutorial call, never override `--reporter`), and a pre-commit checklist |
638
+ | `references/storytelling.md` | Who is watching (role, expertise, emotional state), narration voice rules, pacing decisions, when to use context screens vs steps, multi-profile scene heuristics, directing attention (highlight vs camera zoom vs blur, secrets typed blurred) |
639
+ | `references/api.md` | Complete `Tutorial` class API with timing model, critical rules (e.g., navigate before any tutorial call, never override `--reporter`), camera zoom options and rules, and a pre-commit checklist |
598
640
 
599
641
  ### Setup
600
642
 
@@ -628,7 +670,7 @@ This interactively copies the skill and agent into your `.claude/` directory. Ex
628
670
  Claude will:
629
671
  1. Read the test and identify the viewer persona
630
672
  2. Design a storytelling arc (goal → steps → completion)
631
- 3. Write the tutorial code with `tutorial.context()`, `tutorial.step()`, voice narration text, and `tutorial.complete()`
673
+ 3. Write the tutorial code with `tutorial.context()`, `tutorial.step()`, voice narration text, camera zooms on the key moments, and `tutorial.complete()`
632
674
  4. Verify the test still passes in both normal and tutorial mode
633
675
 
634
676
  ### Keeping them up to date
@@ -1,6 +1,7 @@
1
1
  import type { Page, Locator, FrameLocator } from '@playwright/test';
2
2
  import type { TutorialOptions, StepOptions, ContextOptions, SceneFocus, FocusOptions } from './types.js';
3
3
  import { TutorialTimeline } from './timeline.js';
4
+ import { type ZoomOptions } from './zoom.js';
4
5
  /**
5
6
  * When to start a step's action inside its narration clip (option B of
6
7
  * docs/narration-action-overlap.md — one merged clip, computed offset).
@@ -20,6 +21,7 @@ export declare class Tutorial {
20
21
  private music;
21
22
  private cursor;
22
23
  private overlay;
24
+ private zoomer;
23
25
  private timeline;
24
26
  private pendingItems;
25
27
  private stepCounter;
@@ -70,6 +72,17 @@ export declare class Tutorial {
70
72
  step(key: string, action: () => Promise<void>, options?: StepOptions): void;
71
73
  highlight(selector: string | Locator, duration?: number): Promise<void>;
72
74
  unhighlight(selector: string | Locator): Promise<void>;
75
+ /**
76
+ * Camera zoom on an element — a button, a card, a whole panel: the page
77
+ * zooms in around it (optionally blurring everything else), holds for
78
+ * `duration` ms, then zooms back out. The step banner and cursor stay
79
+ * crisp and unscaled. No-op outside tutorial mode.
80
+ */
81
+ zoom(selector: string | Locator, options?: ZoomOptions): Promise<void>;
82
+ /** Zoom in and stay zoomed — interact with the page, then call `zoomOut()` (same step). */
83
+ zoomIn(selector: string | Locator, options?: ZoomOptions): Promise<void>;
84
+ /** Undo `zoomIn()`. Safe to call when not zoomed. */
85
+ zoomOut(): Promise<void>;
73
86
  moveMouseToElement(locator: Locator): Promise<void>;
74
87
  moveMouse(targetX: number, targetY: number): Promise<void>;
75
88
  animateClick(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"Tutorial.d.ts","sourceRoot":"","sources":["../src/Tutorial.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Tutorial.d.ts","sourceRoot":"","sources":["../src/Tutorial.ts"],"names":[],"mappings":"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"}
package/dist/Tutorial.js CHANGED
@@ -7,6 +7,7 @@ import { TutorialMusic } from './music.js';
7
7
  import { TutorialCursor } from './cursor.js';
8
8
  import { TutorialOverlay } from './overlay.js';
9
9
  import { TutorialTimeline } from './timeline.js';
10
+ import { TutorialZoom } from './zoom.js';
10
11
  const __filename = fileURLToPath(import.meta.url);
11
12
  const __dirname = dirname(__filename);
12
13
  const TUTORIAL_MODE = process.env.TUTORIAL_MODE === 'true';
@@ -58,6 +59,7 @@ export class Tutorial {
58
59
  music;
59
60
  cursor;
60
61
  overlay;
62
+ zoomer;
61
63
  timeline;
62
64
  pendingItems = [];
63
65
  stepCounter = 0;
@@ -123,6 +125,7 @@ export class Tutorial {
123
125
  highlightDuration: this.options.highlightDuration,
124
126
  position: this.options.overlayPosition ?? 'TR'
125
127
  });
128
+ this.zoomer = new TutorialZoom(page);
126
129
  this.timeline = new TutorialTimeline(this.testName, this.options.testFile, this.options.projectName, this.options.lang, options.testTitle ?? '', options.feature ?? '', {
127
130
  musicFile: this.options.backgroundMusic?.startsWith('http')
128
131
  ? 'static/audio/tutorial-background.mp3'
@@ -259,6 +262,7 @@ export class Tutorial {
259
262
  this.music.switchPage(page);
260
263
  this.cursor.switchPage(page);
261
264
  this.overlay.switchPage(page);
265
+ this.zoomer.switchPage(page);
262
266
  }
263
267
  /** @deprecated Total steps are now calculated automatically. */
264
268
  setTotalSteps(total) {
@@ -405,6 +409,43 @@ export class Tutorial {
405
409
  return;
406
410
  await this.overlay.unhighlight(selector);
407
411
  }
412
+ /**
413
+ * Camera zoom on an element — a button, a card, a whole panel: the page
414
+ * zooms in around it (optionally blurring everything else), holds for
415
+ * `duration` ms, then zooms back out. The step banner and cursor stay
416
+ * crisp and unscaled. No-op outside tutorial mode.
417
+ */
418
+ async zoom(selector, options = {}) {
419
+ if (!TUTORIAL_MODE)
420
+ return;
421
+ await this.zoomIn(selector, options);
422
+ await this.page.waitForTimeout(options.duration ?? 1500);
423
+ await this.zoomOut();
424
+ }
425
+ /** Zoom in and stay zoomed — interact with the page, then call `zoomOut()` (same step). */
426
+ async zoomIn(selector, options = {}) {
427
+ if (!TUTORIAL_MODE)
428
+ return;
429
+ const locator = typeof selector === 'string' ? this.page.locator(selector) : selector;
430
+ await this.zoomer.zoomOut();
431
+ await locator.scrollIntoViewIfNeeded();
432
+ const box = await locator.boundingBox();
433
+ if (!box)
434
+ return;
435
+ const viewport = this.page.viewportSize()
436
+ ?? await this.page.evaluate(() => ({ width: innerWidth, height: innerHeight }));
437
+ const cursor = await this.zoomer.zoomIn(box, viewport, options);
438
+ if (cursor)
439
+ this.cursor.setPosition(cursor.x, cursor.y);
440
+ }
441
+ /** Undo `zoomIn()`. Safe to call when not zoomed. */
442
+ async zoomOut() {
443
+ if (!TUTORIAL_MODE)
444
+ return;
445
+ const cursor = await this.zoomer.zoomOut();
446
+ if (cursor)
447
+ this.cursor.setPosition(cursor.x, cursor.y);
448
+ }
408
449
  async moveMouseToElement(locator) {
409
450
  if (!TUTORIAL_MODE)
410
451
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"Tutorial.js","sourceRoot":"","sources":["../src/Tutorial.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Tutorial.js","sourceRoot":"","sources":["../src/Tutorial.ts"],"names":[],"mappings":"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"}
package/dist/cursor.d.ts CHANGED
@@ -16,6 +16,8 @@ export declare class TutorialCursor {
16
16
  private injectCursor;
17
17
  /** Ensure cursor is visible (re-inject after navigation) */
18
18
  ensureVisible(): Promise<void>;
19
+ /** Sync the tracked position after the cursor was moved in-page (e.g. by a zoom). */
20
+ setPosition(x: number, y: number): void;
19
21
  moveToElement(locator: Locator): Promise<void>;
20
22
  moveTo(targetX: number, targetY: number): Promise<void>;
21
23
  animateClick(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../src/cursor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAGtD,MAAM,WAAW,aAAa;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,cAAc;IAC1B,OAAO,CAAC,IAAI,CAAO;IACnB,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,CAAC,CAAK;IACd,OAAO,CAAC,CAAC,CAAK;IACd,OAAO,CAAC,WAAW,CAAS;gBAEhB,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa;IAK9C,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAKtB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAcjC,sCAAsC;YACxB,YAAY;IAY1B,4DAA4D;IACtD,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAM9C,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiCvD,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAW7B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAM3B"}
1
+ {"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../src/cursor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAGtD,MAAM,WAAW,aAAa;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,cAAc;IAC1B,OAAO,CAAC,IAAI,CAAO;IACnB,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,CAAC,CAAK;IACd,OAAO,CAAC,CAAC,CAAK;IACd,OAAO,CAAC,WAAW,CAAS;gBAEhB,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa;IAK9C,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAKtB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAcjC,sCAAsC;YACxB,YAAY;IAY1B,4DAA4D;IACtD,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAIpC,qFAAqF;IACrF,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAKjC,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAM9C,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiCvD,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAW7B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAM3B"}
package/dist/cursor.js CHANGED
@@ -34,13 +34,18 @@ export class TutorialCursor {
34
34
  cursor.className = 'tutorial-cursor';
35
35
  cursor.innerHTML = cursorSvg;
36
36
  cursor.style.display = 'none';
37
- document.body.appendChild(cursor);
37
+ (document.getElementById('tutorial-zoom-layer') ?? document.body).appendChild(cursor);
38
38
  }, CURSOR_SVG);
39
39
  }
40
40
  /** Ensure cursor is visible (re-inject after navigation) */
41
41
  async ensureVisible() {
42
42
  await this.injectCursor();
43
43
  }
44
+ /** Sync the tracked position after the cursor was moved in-page (e.g. by a zoom). */
45
+ setPosition(x, y) {
46
+ this.x = x;
47
+ this.y = y;
48
+ }
44
49
  async moveToElement(locator) {
45
50
  const box = await locator.boundingBox();
46
51
  if (!box)
@@ -1 +1 @@
1
- {"version":3,"file":"cursor.js","sourceRoot":"","sources":["../src/cursor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cursor.js","sourceRoot":"","sources":["../src/cursor.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -11,6 +11,8 @@ export { TutorialMusic } from './music.js';
11
11
  export { TutorialCursor } from './cursor.js';
12
12
  export { TutorialOverlay } from './overlay.js';
13
13
  export { TutorialTimeline } from './timeline.js';
14
+ export { TutorialZoom, zoomScale, zoomFrame, zoomFrames } from './zoom.js';
15
+ export type { ZoomOptions } from './zoom.js';
14
16
  export { buildTranscriptMarkdown, parseTranscript, applyCorrections, TranscriptCorrections } from './transcript.js';
15
17
  export type { TranscriptEntry, ApplyReport, ApplyChange, ApplyProblem, ApplyIO } from './transcript.js';
16
18
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAChE,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEtJ,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC3F,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEpF,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,OAAO,EAAE,uBAAuB,EAAE,eAAe,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACpH,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAChE,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEtJ,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC3F,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEpF,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC3E,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE7C,OAAO,EAAE,uBAAuB,EAAE,eAAe,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACpH,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC"}
package/dist/index.js CHANGED
@@ -8,5 +8,6 @@ export { TutorialMusic } from './music.js';
8
8
  export { TutorialCursor } from './cursor.js';
9
9
  export { TutorialOverlay } from './overlay.js';
10
10
  export { TutorialTimeline } from './timeline.js';
11
+ export { TutorialZoom, zoomScale, zoomFrame, zoomFrames } from './zoom.js';
11
12
  export { buildTranscriptMarkdown, parseTranscript, applyCorrections, TranscriptCorrections } from './transcript.js';
12
13
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAGhE,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAG/C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAG3F,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,OAAO,EAAE,uBAAuB,EAAE,eAAe,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAGhE,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAG/C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAG3F,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAG3E,OAAO,EAAE,uBAAuB,EAAE,eAAe,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC"}
package/dist/overlay.js CHANGED
@@ -42,7 +42,7 @@ export class TutorialOverlay {
42
42
  const container = document.createElement('div');
43
43
  container.innerHTML = html;
44
44
  const overlay = container.firstElementChild;
45
- document.body.appendChild(overlay);
45
+ (document.getElementById('tutorial-zoom-layer') ?? document.body).appendChild(overlay);
46
46
  }, html);
47
47
  }
48
48
  async showContext(contextTitle, text, style = 'goal') {
@@ -61,7 +61,7 @@ export class TutorialOverlay {
61
61
  const container = document.createElement('div');
62
62
  container.innerHTML = html;
63
63
  const overlay = container.firstElementChild;
64
- document.body.appendChild(overlay);
64
+ (document.getElementById('tutorial-zoom-layer') ?? document.body).appendChild(overlay);
65
65
  }, html);
66
66
  }
67
67
  async showComplete(message) {
@@ -99,7 +99,7 @@ export class TutorialOverlay {
99
99
  const container = document.createElement('div');
100
100
  container.innerHTML = html;
101
101
  const preview = container.firstElementChild;
102
- document.body.appendChild(preview);
102
+ (document.getElementById('tutorial-zoom-layer') ?? document.body).appendChild(preview);
103
103
  }, html);
104
104
  }
105
105
  async hideEmailPreview() {
@@ -1 +1 @@
1
- {"version":3,"file":"overlay.js","sourceRoot":"","sources":["../src/overlay.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"overlay.js","sourceRoot":"","sources":["../src/overlay.ts"],"names":[],"mappings":"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"}
package/dist/zoom.d.ts ADDED
@@ -0,0 +1,65 @@
1
+ import type { Page } from '@playwright/test';
2
+ export interface ZoomOptions {
3
+ /** Zoom factor. Default: auto — the target fills ~70% of the viewport, capped at 2.5×, never below 1×. */
4
+ scale?: number;
5
+ /** `zoom()` only: how long to hold the zoomed view, in ms (default: 1500). */
6
+ duration?: number;
7
+ /** Blur (and slightly dim) everything but the target. `true` = 4px; a number sets the radius in px. Default: false. */
8
+ blur?: boolean | number;
9
+ /** Duration of each zoom-in / zoom-out animation, in ms (default: 600). */
10
+ transition?: number;
11
+ }
12
+ export interface ZoomRect {
13
+ x: number;
14
+ y: number;
15
+ width: number;
16
+ height: number;
17
+ }
18
+ export interface ZoomViewport {
19
+ width: number;
20
+ height: number;
21
+ }
22
+ /** One animation frame: the page is drawn at `k`× with its viewport origin at (`ox`, `oy`); `e` is the eased progress. */
23
+ export interface ZoomFrame {
24
+ k: number;
25
+ ox: number;
26
+ oy: number;
27
+ e: number;
28
+ }
29
+ export declare const ZOOM_MAX_SCALE = 2.5;
30
+ /** The zoom factor for a target: explicit `scale` wins, otherwise fit the target to ~70% of the viewport. */
31
+ export declare function zoomScale(rect: ZoomRect, viewport: ZoomViewport, scale?: number): number;
32
+ /**
33
+ * The camera at progress `e` (0 → 1): scale grows from 1 to `scale` while the
34
+ * target's center glides toward the viewport center. The origin is clamped so
35
+ * the scaled page always covers the viewport — a target near an edge stays
36
+ * off-center rather than exposing blank canvas.
37
+ */
38
+ export declare function zoomFrame(rect: ZoomRect, viewport: ZoomViewport, scale: number, e: number): ZoomFrame;
39
+ /** Precomputed zoom-in frames (~60fps); zoom-out plays them backwards. */
40
+ export declare function zoomFrames(rect: ZoomRect, viewport: ZoomViewport, scale: number, transitionMs: number): ZoomFrame[];
41
+ export declare function zoomBlurPx(blur: ZoomOptions['blur']): number;
42
+ /**
43
+ * Camera zoom on the top-level page. The page (iframes and scenes included) is
44
+ * scaled with a CSS transform on `<html>`, while the tutorial UI (step banner,
45
+ * cursor, email preview, debug clock) is lifted into a top-layer popover so it
46
+ * stays crisp and in place. Returns the cursor's on-screen position at the end,
47
+ * so the Node-side cursor can continue from there.
48
+ */
49
+ export declare class TutorialZoom {
50
+ private page;
51
+ private active;
52
+ constructor(page: Page);
53
+ switchPage(page: Page): void;
54
+ get isZoomed(): boolean;
55
+ zoomIn(rect: ZoomRect, viewport: ZoomViewport, options?: ZoomOptions): Promise<{
56
+ x: number;
57
+ y: number;
58
+ } | null>;
59
+ zoomOut(): Promise<{
60
+ x: number;
61
+ y: number;
62
+ } | null>;
63
+ private run;
64
+ }
65
+ //# sourceMappingURL=zoom.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zoom.d.ts","sourceRoot":"","sources":["../src/zoom.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAE7C,MAAM,WAAW,WAAW;IAC3B,0GAA0G;IAC1G,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uHAAuH;IACvH,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACxB,2EAA2E;IAC3E,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,QAAQ;IACxB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CACf;AAED,0HAA0H;AAC1H,MAAM,WAAW,SAAS;IACzB,CAAC,EAAE,MAAM,CAAC;IACV,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,CAAC,EAAE,MAAM,CAAC;CACV;AAED,eAAO,MAAM,cAAc,MAAM,CAAC;AAIlC,6GAA6G;AAC7G,wBAAgB,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAQxF;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,CAYrG;AAID,0EAA0E;AAC1E,wBAAgB,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,SAAS,EAAE,CAGnH;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,MAAM,CAI5D;AAUD;;;;;;GAMG;AACH,qBAAa,YAAY;IACxB,OAAO,CAAC,IAAI,CAAO;IACnB,OAAO,CAAC,MAAM,CAA4F;gBAE9F,IAAI,EAAE,IAAI;IAItB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAK5B,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAEK,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAUnH,OAAO,IAAI,OAAO,CAAC;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAiBzD,OAAO,CAAC,GAAG;CAgMX"}
package/dist/zoom.js ADDED
@@ -0,0 +1,295 @@
1
+ export const ZOOM_MAX_SCALE = 2.5;
2
+ const ZOOM_FILL = 0.7;
3
+ const ZOOM_DEFAULT_BLUR = 4;
4
+ /** The zoom factor for a target: explicit `scale` wins, otherwise fit the target to ~70% of the viewport. */
5
+ export function zoomScale(rect, viewport, scale) {
6
+ if (scale !== undefined)
7
+ return Math.max(1, scale);
8
+ if (rect.width <= 0 || rect.height <= 0)
9
+ return 1;
10
+ const fit = Math.min((viewport.width * ZOOM_FILL) / rect.width, (viewport.height * ZOOM_FILL) / rect.height);
11
+ return Math.min(ZOOM_MAX_SCALE, Math.max(1, fit));
12
+ }
13
+ /**
14
+ * The camera at progress `e` (0 → 1): scale grows from 1 to `scale` while the
15
+ * target's center glides toward the viewport center. The origin is clamped so
16
+ * the scaled page always covers the viewport — a target near an edge stays
17
+ * off-center rather than exposing blank canvas.
18
+ */
19
+ export function zoomFrame(rect, viewport, scale, e) {
20
+ const k = 1 + (scale - 1) * e;
21
+ const axis = (center, size) => {
22
+ const target = center + (size / 2 - center) * e;
23
+ return Math.min(0, Math.max(size * (1 - k), target - k * center));
24
+ };
25
+ return {
26
+ k,
27
+ ox: axis(rect.x + rect.width / 2, viewport.width),
28
+ oy: axis(rect.y + rect.height / 2, viewport.height),
29
+ e
30
+ };
31
+ }
32
+ const easeInOut = (t) => (t < 0.5 ? 4 * t * t * t : 1 - Math.pow(-2 * t + 2, 3) / 2);
33
+ /** Precomputed zoom-in frames (~60fps); zoom-out plays them backwards. */
34
+ export function zoomFrames(rect, viewport, scale, transitionMs) {
35
+ const n = Math.max(1, Math.round(transitionMs / 16));
36
+ return Array.from({ length: n + 1 }, (_, i) => zoomFrame(rect, viewport, scale, easeInOut(i / n)));
37
+ }
38
+ export function zoomBlurPx(blur) {
39
+ if (blur === true)
40
+ return ZOOM_DEFAULT_BLUR;
41
+ if (typeof blur === 'number' && blur > 0)
42
+ return blur;
43
+ return 0;
44
+ }
45
+ /**
46
+ * Camera zoom on the top-level page. The page (iframes and scenes included) is
47
+ * scaled with a CSS transform on `<html>`, while the tutorial UI (step banner,
48
+ * cursor, email preview, debug clock) is lifted into a top-layer popover so it
49
+ * stays crisp and in place. Returns the cursor's on-screen position at the end,
50
+ * so the Node-side cursor can continue from there.
51
+ */
52
+ export class TutorialZoom {
53
+ page;
54
+ active = null;
55
+ constructor(page) {
56
+ this.page = page;
57
+ }
58
+ switchPage(page) {
59
+ this.page = page;
60
+ this.active = null;
61
+ }
62
+ get isZoomed() {
63
+ return this.active !== null;
64
+ }
65
+ async zoomIn(rect, viewport, options = {}) {
66
+ if (this.active)
67
+ await this.zoomOut();
68
+ const scale = zoomScale(rect, viewport, options.scale);
69
+ const durationMs = options.transition ?? 600;
70
+ const frames = zoomFrames(rect, viewport, scale, durationMs);
71
+ const blurPx = zoomBlurPx(options.blur);
72
+ this.active = { frames, rect, blurPx, durationMs };
73
+ return this.run({ frames, durationMs, rect, blurPx, direction: 'in' });
74
+ }
75
+ async zoomOut() {
76
+ if (!this.active)
77
+ return null;
78
+ const { frames, rect, blurPx, durationMs } = this.active;
79
+ this.active = null;
80
+ try {
81
+ return await this.run({ frames, durationMs, rect, blurPx, direction: 'out' });
82
+ }
83
+ catch (error) {
84
+ // Usually the page navigated or closed while zoomed — nothing left to restore.
85
+ console.warn(`[Tutorial] zoomOut failed: ${error.message}`);
86
+ // Best effort: put the page back without animating.
87
+ await this.page
88
+ .evaluate(() => window.__tutorialZoom?.restore?.())
89
+ .catch(() => { });
90
+ return null;
91
+ }
92
+ }
93
+ run(args) {
94
+ return this.page.evaluate(async ({ frames, durationMs, rect, blurPx, direction }) => {
95
+ const UI_IDS = ['tutorial-overlay', 'tutorial-email-preview', 'tutorial-cursor', 'tutorial-debug-clock'];
96
+ const html = document.documentElement;
97
+ const w = window;
98
+ let state = w.__tutorialZoom;
99
+ // Re-inserting a node restarts its CSS entrance animation (banner fade-in):
100
+ // jump finite ones to their end so moving the UI never flashes it.
101
+ const settle = (el) => {
102
+ for (const a of el.getAnimations({ subtree: true })) {
103
+ if (a.effect?.getComputedTiming().iterations !== Infinity)
104
+ a.finish();
105
+ }
106
+ };
107
+ const restore = (st) => {
108
+ removeEventListener('scroll', st.onScroll);
109
+ html.style.transform = st.prevTransform;
110
+ html.style.transformOrigin = st.prevOrigin;
111
+ html.removeAttribute('data-tutorial-zoom');
112
+ for (const { el, prev } of st.fixed)
113
+ el.style.translate = prev;
114
+ // Everything in the layer (incl. a banner shown while zoomed) goes back to <body>.
115
+ for (const el of Array.from(st.layer.children)) {
116
+ if (el === st.blur)
117
+ continue;
118
+ document.body.appendChild(el);
119
+ settle(el);
120
+ }
121
+ if (st.layer.matches(':popover-open'))
122
+ st.layer.hidePopover();
123
+ st.layer.remove();
124
+ if (w.__tutorialZoom === st)
125
+ delete w.__tutorialZoom;
126
+ };
127
+ if (direction === 'in') {
128
+ if (state)
129
+ restore(state); // a zoom left behind (e.g. a failed zoomOut)
130
+ // <html> becomes the containing block of fixed elements once it has a
131
+ // transform: each frame shifts them back by the live scroll offset so
132
+ // fixed headers (and the stage) stay put.
133
+ const htmlRect = html.getBoundingClientRect();
134
+ const base = { x: htmlRect.left + scrollX, y: htmlRect.top + scrollY };
135
+ const establishesBlock = (el) => {
136
+ const cs = getComputedStyle(el);
137
+ return cs.transform !== 'none' || cs.filter !== 'none' || cs.perspective !== 'none'
138
+ || cs.backdropFilter !== 'none' || /paint|layout|strict|content/.test(cs.contain)
139
+ || /transform|filter|perspective/.test(cs.willChange);
140
+ };
141
+ const fixed = [];
142
+ for (const el of Array.from(document.body.querySelectorAll('*'))) {
143
+ if (UI_IDS.includes(el.id) || getComputedStyle(el).position !== 'fixed')
144
+ continue;
145
+ let contained = false;
146
+ for (let p = el.parentElement; p && p !== html; p = p.parentElement) {
147
+ if (establishesBlock(p)) {
148
+ contained = true;
149
+ break;
150
+ }
151
+ }
152
+ if (contained)
153
+ continue;
154
+ const translate = getComputedStyle(el).translate;
155
+ const [tx = '0px', ty = '0px'] = translate === 'none' ? [] : translate.split(' ');
156
+ fixed.push({ el, prev: el.style.translate, tx, ty });
157
+ }
158
+ const layer = document.createElement('div');
159
+ layer.id = 'tutorial-zoom-layer';
160
+ layer.className = 'tutorial-zoom-layer';
161
+ layer.style.cssText = 'position:fixed;inset:0;width:auto;height:auto;margin:0;padding:0;border:0;'
162
+ + 'background:transparent;overflow:visible;pointer-events:none;color:inherit;';
163
+ let blur = null;
164
+ if (blurPx > 0) {
165
+ blur = document.createElement('div');
166
+ blur.className = 'tutorial-zoom-blur';
167
+ blur.style.cssText = `position:fixed;inset:0;pointer-events:none;opacity:0;`
168
+ + `backdrop-filter:blur(${blurPx}px);-webkit-backdrop-filter:blur(${blurPx}px);`;
169
+ layer.appendChild(blur);
170
+ }
171
+ document.body.appendChild(layer);
172
+ for (const id of UI_IDS) {
173
+ const el = document.getElementById(id);
174
+ if (el) {
175
+ layer.appendChild(el);
176
+ settle(el);
177
+ }
178
+ }
179
+ if (typeof layer.showPopover === 'function') {
180
+ layer.setAttribute('popover', 'manual');
181
+ layer.showPopover();
182
+ }
183
+ const cursor = document.getElementById('tutorial-cursor');
184
+ const cursorBase = cursor && cursor.style.left
185
+ ? { x: parseFloat(cursor.style.left), y: parseFloat(cursor.style.top) }
186
+ : null;
187
+ state = w.__tutorialZoom = {
188
+ base,
189
+ fixed,
190
+ layer,
191
+ blur,
192
+ cursorBase,
193
+ frame: null,
194
+ onScroll: null,
195
+ restore: null,
196
+ prevTransform: html.style.transform,
197
+ prevOrigin: html.style.transformOrigin
198
+ };
199
+ html.style.transformOrigin = '0 0';
200
+ html.setAttribute('data-tutorial-zoom', '');
201
+ }
202
+ else {
203
+ if (!state)
204
+ return null;
205
+ // The cursor may have moved while zoomed: map it back into page space.
206
+ const last = frames[frames.length - 1];
207
+ const cursor = document.getElementById('tutorial-cursor');
208
+ state.cursorBase = cursor && cursor.style.left
209
+ ? { x: (parseFloat(cursor.style.left) - last.ox) / last.k, y: (parseFloat(cursor.style.top) - last.oy) / last.k }
210
+ : null;
211
+ }
212
+ const st = state;
213
+ const apply = (f) => {
214
+ st.frame = f;
215
+ // The zoomed page can overflow, and a Playwright action may scroll it:
216
+ // use the live scroll so the picture stays put whatever happens.
217
+ const tl = { x: st.base.x - scrollX, y: st.base.y - scrollY };
218
+ html.style.transform = `translate(${f.ox - tl.x * (1 - f.k)}px, ${f.oy - tl.y * (1 - f.k)}px) scale(${f.k})`;
219
+ for (const { el, tx, ty } of st.fixed) {
220
+ el.style.translate = `calc(${tx} + ${-tl.x}px) calc(${ty} + ${-tl.y}px)`;
221
+ }
222
+ const cursor = document.getElementById('tutorial-cursor');
223
+ if (cursor && st.cursorBase) {
224
+ cursor.style.left = `${f.ox + f.k * st.cursorBase.x}px`;
225
+ cursor.style.top = `${f.oy + f.k * st.cursorBase.y}px`;
226
+ }
227
+ if (st.blur) {
228
+ const pad = 6 * f.k;
229
+ const x1 = f.ox + f.k * rect.x - pad;
230
+ const y1 = f.oy + f.k * rect.y - pad;
231
+ const x2 = f.ox + f.k * (rect.x + rect.width) + pad;
232
+ const y2 = f.oy + f.k * (rect.y + rect.height) + pad;
233
+ st.blur.style.opacity = String(f.e);
234
+ st.blur.style.clipPath = `polygon(evenodd, 0 0, 100% 0, 100% 100%, 0 100%, 0 0, `
235
+ + `${x1}px ${y1}px, ${x2}px ${y1}px, ${x2}px ${y2}px, ${x1}px ${y2}px, ${x1}px ${y1}px)`;
236
+ }
237
+ };
238
+ if (direction === 'in') {
239
+ st.restore = () => restore(st);
240
+ st.onScroll = () => {
241
+ if (w.__tutorialZoom === st && st.frame)
242
+ apply(st.frame);
243
+ };
244
+ addEventListener('scroll', st.onScroll, { passive: true });
245
+ }
246
+ const sequence = direction === 'in' ? frames : [...frames].reverse();
247
+ await new Promise((resolve) => {
248
+ const start = performance.now();
249
+ const tick = (now) => {
250
+ // A newer zoom took over (or this one was torn down): stop touching the page.
251
+ if (w.__tutorialZoom !== st)
252
+ return resolve();
253
+ const t = Math.min(1, (now - start) / durationMs);
254
+ const pos = t * (sequence.length - 1);
255
+ const i = Math.min(sequence.length - 2, Math.floor(pos));
256
+ const a = sequence[Math.max(0, i)];
257
+ const b = sequence[Math.min(sequence.length - 1, i + 1)];
258
+ const u = pos - Math.max(0, i);
259
+ apply({
260
+ k: a.k + (b.k - a.k) * u,
261
+ ox: a.ox + (b.ox - a.ox) * u,
262
+ oy: a.oy + (b.oy - a.oy) * u,
263
+ e: a.e + (b.e - a.e) * u
264
+ });
265
+ if (t < 1)
266
+ schedule();
267
+ else
268
+ resolve();
269
+ };
270
+ // rAF drives the animation; a timer takes over if frames stall, so
271
+ // the zoom always completes instead of hanging the step.
272
+ const schedule = () => {
273
+ let fired = false;
274
+ const go = () => {
275
+ if (fired)
276
+ return;
277
+ fired = true;
278
+ tick(performance.now());
279
+ };
280
+ requestAnimationFrame(go);
281
+ setTimeout(go, 50);
282
+ };
283
+ schedule();
284
+ });
285
+ const cursor = document.getElementById('tutorial-cursor');
286
+ const cursorPos = cursor && cursor.style.left
287
+ ? { x: parseFloat(cursor.style.left), y: parseFloat(cursor.style.top) }
288
+ : null;
289
+ if (direction === 'out' && w.__tutorialZoom === st)
290
+ restore(st);
291
+ return cursorPos;
292
+ }, args);
293
+ }
294
+ }
295
+ //# sourceMappingURL=zoom.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zoom.js","sourceRoot":"","sources":["../src/zoom.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "playwright-director",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "description": "AI-assisted Playwright tool that turns executable tests into directed video guides — demos, tutorials, and documentation that never lag behind the product.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -43,6 +43,9 @@ COMPLETE: Celebrate the outcome, suggest what's next
43
43
  ### 3. Implement (read `api.md`)
44
44
  - Use the Tutorial API: `context()`, `step()`, `complete()`
45
45
  - Follow timing rules, blank-screen prevention, navigation handling
46
+ - Direct attention sparingly: `zoom()` (optionally `blur`) on the 1–3 moments
47
+ the viewer must not miss (`storytelling.md` §9, `api.md` §13); secrets go
48
+ through `typeBlurred()`
46
49
  - Apply the polish checklist before submitting
47
50
 
48
51
  ### 4. Verify
@@ -44,6 +44,11 @@ Follow all rules from `api.md`:
44
44
  - Dual-mode (test works with and without TUTORIAL_MODE)
45
45
  - `@tutorial` tag on the test
46
46
  - Acronyms have `voiceText` where TTS mispronounces
47
+ - Camera zooms (`tutorial.zoom()`, `zoomIn()`/`zoomOut()`, optional `blur`) on
48
+ the 1–3 moments the narration names — a total, a status, a tiny badge, a
49
+ panel filled while zoomed (`storytelling.md` §9, `api.md` §13). Never on
50
+ every step
51
+ - Passwords, API keys and tokens typed with `tutorial.typeBlurred()`
47
52
  - Multi-scene only: every step touching a scene carries `{ scene }`, scenes sit
48
53
  on distinct origins, each tab switch is acknowledged in the narration, and
49
54
  split ratios (`focus(['a','b'], { ratio: [30, 70] })`) are used to keep the
@@ -124,9 +124,13 @@ Use these inside step actions instead of raw Playwright calls — they add curso
124
124
  | `tutorial.click(locator)` | `page.click(...)` | Cursor animation → highlight → click |
125
125
  | `tutorial.fill(locator, value)` | `page.fill(...)` | Highlight → fill |
126
126
  | `tutorial.typeSlowly(locator, value, delay?)` | `page.fill(...)` | Highlight → character-by-character typing |
127
+ | `tutorial.typeBlurred(locator, value, options?)` | `page.fill(...)` | Highlight → blur the field → type. Options `{ delay?: 50, blur?: 4, reveal?: false }`; the field **stays blurred** afterwards (use for passwords, API keys, tokens) |
128
+ | `tutorial.unblur(locator)` | — | Remove the blur left by `typeBlurred` |
127
129
  | `tutorial.selectOption(locator, value)` | `page.selectOption(...)` | Highlight → select |
128
130
  | `tutorial.highlight(locator, duration?)` | — | Pulsing highlight around element |
129
131
  | `tutorial.unhighlight(locator)` | — | Remove highlight |
132
+ | `tutorial.zoom(locator, options?)` | — | Camera zoom on the element (button, field, whole card), hold `duration` (1500ms), zoom back out. Options: `scale` (auto: fit ~70% of viewport, max 2.5×), `blur` (`true` = 4px, or px), `transition` (600ms per direction) |
133
+ | `tutorial.zoomIn(locator, options?)` / `tutorial.zoomOut()` | — | Zoom in and stay zoomed — `tutorial.click()` etc. work in the zoomed view — then zoom out. Keep the pair inside one step |
130
134
  | `tutorial.moveMouseToElement(locator)` | — | Animate cursor to element |
131
135
  | `tutorial.showEmailPreview(options)` | — | Simulated email popup |
132
136
  | `tutorial.switchPage(page)` | — | Switch recording to another tab |
@@ -134,6 +138,8 @@ Use these inside step actions instead of raw Playwright calls — they add curso
134
138
 
135
139
  `locator` can be a Playwright `Locator` or a CSS selector string.
136
140
 
141
+ **Zoom timing:** `zoom()` takes `2 × transition + duration` (default 2.7s) of the step's action time. In a voiced step it runs inside the narration like any action; pick `duration` so the zoom covers the sentence that talks about the element. Use it for "look here" moments (a total, a setting, a whole panel) — not on every click.
142
+
137
143
  ## 4. Timing Model
138
144
 
139
145
  ### Single-phase step (no `do`/`explain`)
@@ -464,7 +470,44 @@ Any other variant name only suffixes outputs and stamps `data-tutorial-variant`
464
470
 
465
471
  In tutorial mode `mobileStage()` records **oversampled 2× by default** (Playwright never upscales video, so 1× phone video is blurry): it forces `--force-device-scale-factor=2`, aligns `deviceScaleFactor` and doubles `video.size` — layout unchanged. Tune with `mobileStage(2, 'Pixel 7', { scale })`. Caveat: `test.use()` replaces the config's `launchOptions`; repeat any tutorial-mode Chromium args via `{ launchArgs: [...] }`.
466
472
 
467
- ## 13. Checklist
473
+ ## 13. Camera zoom
474
+
475
+ `zoom()` is a camera push-in: the whole top-level page (stage and scenes included) scales up around an element, holds, and scales back. The step banner and cursor stay crisp and unscaled.
476
+
477
+ ```typescript
478
+ // One-shot: zoom in, hold `duration`, zoom out
479
+ tutorial.step('Your total includes VAT', async () => {
480
+ await tutorial.zoom(page.locator('.invoice-total'), { blur: true });
481
+ }, { explain: 'That is the amount your client will pay.' });
482
+
483
+ // Stay zoomed while acting — clicks, typing and the cursor all work zoomed
484
+ tutorial.step('Turn on reminders', async () => {
485
+ await tutorial.zoomIn(page.locator('#reminders'), { blur: true });
486
+ await tutorial.click(page.locator('#auto-remind'));
487
+ await tutorial.typeSlowly(page.locator('#cc'), 'finance@acme.com');
488
+ await tutorial.zoomOut();
489
+ });
490
+ ```
491
+
492
+ | Option | Default | Effect |
493
+ |---|---|---|
494
+ | `scale` | auto | Auto fits the element to ~70% of the viewport, capped at 2.5×, never below 1× (a huge element only gets the blur) |
495
+ | `duration` | `1500` | `zoom()` only — hold time in ms |
496
+ | `blur` | `false` | Blur + slight dim of everything but the element. `true` = 4px, a number = radius in px |
497
+ | `transition` | `600` | Each zoom-in / zoom-out animation in ms |
498
+
499
+ ### Rules
500
+
501
+ - **Timing:** `zoom()` costs `2 × transition + duration` (2.7s by default) of action time. In a voiced step the action starts inside the narration — make the zoom cover the sentence that talks about the element.
502
+ - **Pair `zoomIn()` / `zoomOut()` in the same step.** A new step's banner shown while zoomed would be scaled with the page.
503
+ - **Target what the narration names.** Zoom on the total the narration mentions, not the whole invoice; on a whole panel when the narration is about the panel.
504
+ - **Small targets get big:** a badge or icon goes straight to 2.5×. Pass `scale: 1.5`–`2` when context around it matters.
505
+ - **Blur when the page is busy**, or when the element must read as "the only thing that matters". Skip it on sparse pages — it adds nothing.
506
+ - **Highlight + zoom combine:** `highlight(el, 600)` then `zoom(el)` reads as "look here… closer".
507
+ - Pure decoration: no-op without `TUTORIAL_MODE`, not recorded in the timeline, safe in plain E2E runs.
508
+ - Don't zoom on every step — 1 to 3 zooms per tutorial, on the moments the viewer must not miss (see `storytelling.md` §9).
509
+
510
+ ## 14. Checklist
468
511
 
469
512
  Before submitting a tutorialized test:
470
513
 
@@ -480,6 +523,8 @@ Before submitting a tutorialized test:
480
523
  - [ ] Test passes without `TUTORIAL_MODE` (plain E2E)
481
524
  - [ ] Test passes with `TUTORIAL_MODE=true` (video generation)
482
525
  - [ ] Video watched — does it feel human?
526
+ - [ ] Zooms (if any) land on what the narration names, ≤ 3 per tutorial, each `zoomIn` paired with a `zoomOut` in the same step
527
+ - [ ] Secrets (passwords, API keys) typed with `typeBlurred`, never `fill`/`typeSlowly`
483
528
 
484
529
  Multi-scene tutorials, additionally:
485
530
 
@@ -191,3 +191,33 @@ Labels are on screen the whole tutorial, so they carry the cast:
191
191
 
192
192
  A named person makes the handoff feel like a story rather than a demo of two
193
193
  browser windows.
194
+
195
+ ## 9. Directing Attention — Highlight, Zoom, Blur
196
+
197
+ The viewer's eye goes where the screen moves. You have three tools, from soft to strong:
198
+
199
+ | Tool | What it says | Use for |
200
+ |---|---|---|
201
+ | `highlight()` (also implicit in `click`/`fill`) | "This is what we touch" | Every interaction — it's automatic |
202
+ | `zoom()` | "Look closer — this matters" | A number, a status, a setting the story hinges on |
203
+ | `zoom(…, { blur: true })` | "Nothing else matters right now" | The one thing on a busy screen the viewer must not miss |
204
+
205
+ ### When a zoom earns its place
206
+
207
+ - **The payoff:** the total after adding lines, the "Paid" status after the client pays, the generated reference number.
208
+ - **The tiny thing:** a badge, a toggle, an icon that is unreadable at video resolution.
209
+ - **The panel in focus:** a settings block filled in while zoomed (`zoomIn` → actions → `zoomOut`), so the viewer reads the fields instead of hunting for them.
210
+
211
+ ### When it doesn't
212
+
213
+ - Something the narration doesn't mention — the camera and the voice must point at the same thing.
214
+ - Every step. Zooms lose their meaning by repetition: **1 to 3 per tutorial**.
215
+ - Large, obvious elements on a sparse page — the viewer already sees them.
216
+
217
+ ### Pace it with the words
218
+
219
+ A zoom is a beat. Let the narration name the thing *while* the camera pushes in — "your total, VAT included" — and let the hold breathe for the explain sentence. If the narration has moved on, the zoom has lasted too long.
220
+
221
+ ### Secrets stay secret
222
+
223
+ Passwords, API keys and tokens are typed with `typeBlurred()` — the field is blurred before the first keystroke and stays blurred. Say so in the narration ("type your password — it stays hidden") so the blur reads as intentional, not as a glitch.