screenci 0.0.75 → 0.0.78
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/dist/cli.d.ts +62 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +699 -229
- package/dist/cli.js.map +1 -1
- package/dist/docs/manifest.d.ts +277 -91
- package/dist/docs/manifest.d.ts.map +1 -1
- package/dist/docs/manifest.js +101 -30
- package/dist/docs/manifest.js.map +1 -1
- package/dist/docs/video-sources/camera-and-zooming.screenci.d.ts +2 -0
- package/dist/docs/video-sources/camera-and-zooming.screenci.d.ts.map +1 -0
- package/dist/docs/video-sources/camera-and-zooming.screenci.js +57 -0
- package/dist/docs/video-sources/camera-and-zooming.screenci.js.map +1 -0
- package/dist/docs/video-sources/installation.screenci.js +19 -10
- package/dist/docs/video-sources/installation.screenci.js.map +1 -1
- package/dist/docs/video-sources/landing.screenci.js +6 -8
- package/dist/docs/video-sources/landing.screenci.js.map +1 -1
- package/dist/docs/video-sources/languages.screenci.d.ts +2 -0
- package/dist/docs/video-sources/languages.screenci.d.ts.map +1 -0
- package/dist/docs/video-sources/languages.screenci.js +68 -0
- package/dist/docs/video-sources/languages.screenci.js.map +1 -0
- package/dist/docs/video-sources/locator-highlight-animated.screenci.js +4 -5
- package/dist/docs/video-sources/locator-highlight-animated.screenci.js.map +1 -1
- package/dist/docs/video-sources/locator-highlight-still.screenci.js +3 -4
- package/dist/docs/video-sources/locator-highlight-still.screenci.js.map +1 -1
- package/dist/docs/video-sources/narration.screenci.d.ts +2 -0
- package/dist/docs/video-sources/narration.screenci.d.ts.map +1 -0
- package/dist/docs/video-sources/narration.screenci.js +71 -0
- package/dist/docs/video-sources/narration.screenci.js.map +1 -0
- package/dist/docs/video-sources/public-urls-and-embeds.screenci.d.ts +2 -0
- package/dist/docs/video-sources/public-urls-and-embeds.screenci.d.ts.map +1 -0
- package/dist/docs/video-sources/public-urls-and-embeds.screenci.js +60 -0
- package/dist/docs/video-sources/public-urls-and-embeds.screenci.js.map +1 -0
- package/dist/docs/video-sources/speaking-style.screenci.d.ts +2 -0
- package/dist/docs/video-sources/speaking-style.screenci.d.ts.map +1 -0
- package/dist/docs/video-sources/speaking-style.screenci.js +76 -0
- package/dist/docs/video-sources/speaking-style.screenci.js.map +1 -0
- package/dist/docs/video-sources/studio.screenci.js +8 -10
- package/dist/docs/video-sources/studio.screenci.js.map +1 -1
- package/dist/docs/video-sources/vertical-video.screenci.d.ts +2 -0
- package/dist/docs/video-sources/vertical-video.screenci.d.ts.map +1 -0
- package/dist/docs/video-sources/vertical-video.screenci.js +58 -0
- package/dist/docs/video-sources/vertical-video.screenci.js.map +1 -0
- package/dist/docs/videos.d.ts +20 -0
- package/dist/docs/videos.d.ts.map +1 -1
- package/dist/docs/videos.js +25 -0
- package/dist/docs/videos.js.map +1 -1
- package/dist/e2e/instrument.e2e.js +60 -1
- package/dist/e2e/instrument.e2e.js.map +1 -1
- package/dist/e2e/redact.e2e.d.ts +2 -0
- package/dist/e2e/redact.e2e.d.ts.map +1 -0
- package/dist/e2e/redact.e2e.js +161 -0
- package/dist/e2e/redact.e2e.js.map +1 -0
- package/dist/index.d.ts +12 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -2
- package/dist/index.js.map +1 -1
- package/dist/src/asset.d.ts +174 -14
- package/dist/src/asset.d.ts.map +1 -1
- package/dist/src/asset.js +320 -39
- package/dist/src/asset.js.map +1 -1
- package/dist/src/assetHash.d.ts +27 -0
- package/dist/src/assetHash.d.ts.map +1 -0
- package/dist/src/assetHash.js +0 -0
- package/dist/src/assetHash.js.map +1 -0
- package/dist/src/audio.d.ts +20 -1
- package/dist/src/audio.d.ts.map +1 -1
- package/dist/src/audio.js +126 -24
- package/dist/src/audio.js.map +1 -1
- package/dist/src/autoZoom.d.ts.map +1 -1
- package/dist/src/autoZoom.js +3 -1
- package/dist/src/autoZoom.js.map +1 -1
- package/dist/src/browserLaunchOptions.d.ts +24 -2
- package/dist/src/browserLaunchOptions.d.ts.map +1 -1
- package/dist/src/browserLaunchOptions.js +57 -3
- package/dist/src/browserLaunchOptions.js.map +1 -1
- package/dist/src/builder.d.ts +229 -136
- package/dist/src/builder.d.ts.map +1 -1
- package/dist/src/builder.js +264 -77
- package/dist/src/builder.js.map +1 -1
- package/dist/src/callerFile.d.ts +12 -0
- package/dist/src/callerFile.d.ts.map +1 -0
- package/dist/src/callerFile.js +46 -0
- package/dist/src/callerFile.js.map +1 -0
- package/dist/src/changeFocus.d.ts.map +1 -1
- package/dist/src/changeFocus.js +109 -36
- package/dist/src/changeFocus.js.map +1 -1
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/config.js +15 -0
- package/dist/src/config.js.map +1 -1
- package/dist/src/cue.d.ts +29 -17
- package/dist/src/cue.d.ts.map +1 -1
- package/dist/src/cue.js +138 -61
- package/dist/src/cue.js.map +1 -1
- package/dist/src/declare.d.ts +63 -0
- package/dist/src/declare.d.ts.map +1 -0
- package/dist/src/declare.js +111 -0
- package/dist/src/declare.js.map +1 -0
- package/dist/src/defaults.d.ts +23 -0
- package/dist/src/defaults.d.ts.map +1 -1
- package/dist/src/defaults.js +27 -3
- package/dist/src/defaults.js.map +1 -1
- package/dist/src/events.d.ts +339 -25
- package/dist/src/events.d.ts.map +1 -1
- package/dist/src/events.js +250 -26
- package/dist/src/events.js.map +1 -1
- package/dist/src/htmlRasterizer.d.ts +10 -0
- package/dist/src/htmlRasterizer.d.ts.map +1 -1
- package/dist/src/htmlRasterizer.js +12 -2
- package/dist/src/htmlRasterizer.js.map +1 -1
- package/dist/src/init.d.ts +2 -0
- package/dist/src/init.d.ts.map +1 -1
- package/dist/src/init.js +81 -33
- package/dist/src/init.js.map +1 -1
- package/dist/src/instrument.d.ts.map +1 -1
- package/dist/src/instrument.js +164 -8
- package/dist/src/instrument.js.map +1 -1
- package/dist/src/locales.d.ts.map +1 -1
- package/dist/src/locales.js +1 -0
- package/dist/src/locales.js.map +1 -1
- package/dist/src/localize.d.ts +26 -17
- package/dist/src/localize.d.ts.map +1 -1
- package/dist/src/localize.js +19 -11
- package/dist/src/localize.js.map +1 -1
- package/dist/src/localizeRuntime.d.ts +29 -33
- package/dist/src/localizeRuntime.d.ts.map +1 -1
- package/dist/src/localizeRuntime.js +74 -49
- package/dist/src/localizeRuntime.js.map +1 -1
- package/dist/src/logger.d.ts +5 -0
- package/dist/src/logger.d.ts.map +1 -1
- package/dist/src/logger.js +7 -0
- package/dist/src/logger.js.map +1 -1
- package/dist/src/manualZoom.d.ts.map +1 -1
- package/dist/src/manualZoom.js +8 -5
- package/dist/src/manualZoom.js.map +1 -1
- package/dist/src/narrationVisibility.d.ts +19 -0
- package/dist/src/narrationVisibility.d.ts.map +1 -0
- package/dist/src/narrationVisibility.js +26 -0
- package/dist/src/narrationVisibility.js.map +1 -0
- package/dist/src/openBrowser.d.ts +34 -0
- package/dist/src/openBrowser.d.ts.map +1 -0
- package/dist/src/openBrowser.js +62 -0
- package/dist/src/openBrowser.js.map +1 -0
- package/dist/src/recordingData.d.ts +27 -0
- package/dist/src/recordingData.d.ts.map +1 -1
- package/dist/src/recordingSize.d.ts +32 -0
- package/dist/src/recordingSize.d.ts.map +1 -0
- package/dist/src/recordingSize.js +54 -0
- package/dist/src/recordingSize.js.map +1 -0
- package/dist/src/redact.d.ts +68 -0
- package/dist/src/redact.d.ts.map +1 -0
- package/dist/src/redact.js +138 -0
- package/dist/src/redact.js.map +1 -0
- package/dist/src/redactController.d.ts +61 -0
- package/dist/src/redactController.d.ts.map +1 -0
- package/dist/src/redactController.js +232 -0
- package/dist/src/redactController.js.map +1 -0
- package/dist/src/runtimeContext.d.ts +32 -0
- package/dist/src/runtimeContext.d.ts.map +1 -1
- package/dist/src/runtimeContext.js +21 -0
- package/dist/src/runtimeContext.js.map +1 -1
- package/dist/src/runtimeMode.d.ts +15 -7
- package/dist/src/runtimeMode.d.ts.map +1 -1
- package/dist/src/runtimeMode.js +17 -6
- package/dist/src/runtimeMode.js.map +1 -1
- package/dist/src/screenAudio.d.ts +88 -0
- package/dist/src/screenAudio.d.ts.map +1 -0
- package/dist/src/screenAudio.js +0 -0
- package/dist/src/screenAudio.js.map +1 -0
- package/dist/src/screenAudioSink.d.ts +46 -0
- package/dist/src/screenAudioSink.d.ts.map +1 -0
- package/dist/src/screenAudioSink.js +77 -0
- package/dist/src/screenAudioSink.js.map +1 -0
- package/dist/src/screenshot.d.ts +27 -29
- package/dist/src/screenshot.d.ts.map +1 -1
- package/dist/src/screenshot.js +39 -24
- package/dist/src/screenshot.js.map +1 -1
- package/dist/src/sourceTrim.d.ts +29 -0
- package/dist/src/sourceTrim.d.ts.map +1 -0
- package/dist/src/sourceTrim.js +76 -0
- package/dist/src/sourceTrim.js.map +1 -0
- package/dist/src/stillCapture.d.ts +5 -0
- package/dist/src/stillCapture.d.ts.map +1 -1
- package/dist/src/stillCapture.js +11 -1
- package/dist/src/stillCapture.js.map +1 -1
- package/dist/src/studio.d.ts +69 -57
- package/dist/src/studio.d.ts.map +1 -1
- package/dist/src/studio.js +16 -38
- package/dist/src/studio.js.map +1 -1
- package/dist/src/timelineOffset.d.ts +46 -0
- package/dist/src/timelineOffset.d.ts.map +1 -0
- package/dist/src/timelineOffset.js +66 -0
- package/dist/src/timelineOffset.js.map +1 -0
- package/dist/src/titleValidation.d.ts +38 -0
- package/dist/src/titleValidation.d.ts.map +1 -1
- package/dist/src/titleValidation.js +42 -0
- package/dist/src/titleValidation.js.map +1 -1
- package/dist/src/types.d.ts +218 -2
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js +1 -1
- package/dist/src/types.js.map +1 -1
- package/dist/src/video.d.ts +74 -60
- package/dist/src/video.d.ts.map +1 -1
- package/dist/src/video.js +201 -39
- package/dist/src/video.js.map +1 -1
- package/dist/src/voiceSampleAudio.d.ts +34 -0
- package/dist/src/voiceSampleAudio.d.ts.map +1 -0
- package/dist/src/voiceSampleAudio.js +105 -0
- package/dist/src/voiceSampleAudio.js.map +1 -0
- package/dist/src/voices.d.ts +2 -2
- package/dist/src/voices.d.ts.map +1 -1
- package/dist/src/voices.js +8 -3
- package/dist/src/voices.js.map +1 -1
- package/dist/src/zoom.d.ts +1 -0
- package/dist/src/zoom.d.ts.map +1 -1
- package/dist/src/zoom.js +3 -0
- package/dist/src/zoom.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -2
- package/skills/screenci/SKILL.md +2 -2
- package/skills/screenci/references/init.md +4 -3
- package/skills/screenci/references/record.md +1 -1
- package/templates/recordings/assets/logo.png +0 -0
- package/dist/docs/video-sources/public-urls.screenci.d.ts +0 -2
- package/dist/docs/video-sources/public-urls.screenci.d.ts.map +0 -1
- package/dist/docs/video-sources/public-urls.screenci.js +0 -41
- package/dist/docs/video-sources/public-urls.screenci.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"public-urls-and-embeds.screenci.d.ts","sourceRoot":"","sources":["../../../docs/video-sources/public-urls-and-embeds.screenci.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { hide, resetZoom, video, voices, zoomTo } from 'screenci';
|
|
2
|
+
video.use({
|
|
3
|
+
renderOptions: {
|
|
4
|
+
narration: {
|
|
5
|
+
voice: { name: voices.Sophie, style: 'Friendly product guide' },
|
|
6
|
+
},
|
|
7
|
+
},
|
|
8
|
+
});
|
|
9
|
+
const appUrl = process.env.SCREENCI_APP_URL ?? 'https://app.screenci.com/';
|
|
10
|
+
// Public URLs walkthrough recorded against the ScreenCI app (app.screenci.com) for
|
|
11
|
+
// the Public URLs and Embeds guide. It opens a finished video and highlights the
|
|
12
|
+
// Enable public URL switch that mints stable, language-specific delivery URLs.
|
|
13
|
+
// Recording needs a logged-in session: set SCREENCI_APP_STORAGE_STATE (see
|
|
14
|
+
// screenci.config.ts). The navigation mirrors studio.screenci.ts up to the video
|
|
15
|
+
// page.
|
|
16
|
+
//
|
|
17
|
+
// The logo intro (assets/logo.png) is gitignored: it is uploaded on the first
|
|
18
|
+
// record and reused on later runs (CI included).
|
|
19
|
+
video
|
|
20
|
+
.overlays({
|
|
21
|
+
logo: { path: './assets/logo.png', fill: 'recording', duration: '2s' },
|
|
22
|
+
})
|
|
23
|
+
.narration({
|
|
24
|
+
en: {
|
|
25
|
+
intro: 'Public URLs give a finished video a stable delivery surface.',
|
|
26
|
+
enable: 'Turn on Enable public URL to mint a route for each language.',
|
|
27
|
+
auto: 'Auto-select keeps every language on its latest finished render.',
|
|
28
|
+
outro: 'Embed the URL in docs, changelogs, or release pages.',
|
|
29
|
+
},
|
|
30
|
+
})('Public URLs and embeds', async ({ page, narration, overlays }) => {
|
|
31
|
+
// The public-delivery switch lives behind auth (SCREENCI_APP_STORAGE_STATE).
|
|
32
|
+
video.skip(!process.env.SCREENCI_APP_STORAGE_STATE, 'Requires SCREENCI_APP_STORAGE_STATE (a logged-in app session).');
|
|
33
|
+
// Open a finished video page without showing the navigation.
|
|
34
|
+
await hide(async () => {
|
|
35
|
+
await page.goto(appUrl);
|
|
36
|
+
await page.waitForLoadState('networkidle');
|
|
37
|
+
await page
|
|
38
|
+
.getByRole('heading', { name: 'Projects' })
|
|
39
|
+
.waitFor({ timeout: 30000 });
|
|
40
|
+
await page.getByTestId('projects-list').getByRole('link').first().click();
|
|
41
|
+
await page.locator('a[href*="/video/"]').first().click();
|
|
42
|
+
await page
|
|
43
|
+
.getByRole('heading', { name: /language versions/i })
|
|
44
|
+
.waitFor({ timeout: 15000 });
|
|
45
|
+
});
|
|
46
|
+
await overlays.logo.for('2s');
|
|
47
|
+
await narration.intro();
|
|
48
|
+
// Frame the public-delivery control, identified by its label text.
|
|
49
|
+
await narration.enable.start();
|
|
50
|
+
const enableControl = page.getByText(/enable public url/i).first();
|
|
51
|
+
if (await enableControl.isVisible().catch(() => false)) {
|
|
52
|
+
await zoomTo(enableControl);
|
|
53
|
+
await page.waitForTimeout(900);
|
|
54
|
+
await resetZoom();
|
|
55
|
+
}
|
|
56
|
+
await narration.enable.end();
|
|
57
|
+
await narration.auto();
|
|
58
|
+
await narration.outro();
|
|
59
|
+
});
|
|
60
|
+
//# sourceMappingURL=public-urls-and-embeds.screenci.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"public-urls-and-embeds.screenci.js","sourceRoot":"","sources":["../../../docs/video-sources/public-urls-and-embeds.screenci.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEjE,KAAK,CAAC,GAAG,CAAC;IACR,aAAa,EAAE;QACb,SAAS,EAAE;YACT,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,wBAAwB,EAAE;SAChE;KACF;CACF,CAAC,CAAA;AAEF,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,2BAA2B,CAAA;AAE1E,mFAAmF;AACnF,iFAAiF;AACjF,+EAA+E;AAC/E,2EAA2E;AAC3E,iFAAiF;AACjF,QAAQ;AACR,EAAE;AACF,8EAA8E;AAC9E,iDAAiD;AACjD,KAAK;KACF,QAAQ,CAAC;IACR,IAAI,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE;CACvE,CAAC;KACD,SAAS,CAAC;IACT,EAAE,EAAE;QACF,KAAK,EAAE,8DAA8D;QACrE,MAAM,EAAE,8DAA8D;QACtE,IAAI,EAAE,iEAAiE;QACvE,KAAK,EAAE,sDAAsD;KAC9D;CACF,CAAC,CAAC,wBAAwB,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE;IACrE,6EAA6E;IAC7E,KAAK,CAAC,IAAI,CACR,CAAC,OAAO,CAAC,GAAG,CAAC,0BAA0B,EACvC,gEAAgE,CACjE,CAAA;IAED,6DAA6D;IAC7D,MAAM,IAAI,CAAC,KAAK,IAAI,EAAE;QACpB,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACvB,MAAM,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAA;QAE1C,MAAM,IAAI;aACP,SAAS,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;aAC1C,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;QAC9B,MAAM,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAA;QACzE,MAAM,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAA;QACxD,MAAM,IAAI;aACP,SAAS,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC;aACpD,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;IAChC,CAAC,CAAC,CAAA;IAEF,MAAM,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC7B,MAAM,SAAS,CAAC,KAAK,EAAE,CAAA;IAEvB,mEAAmE;IACnE,MAAM,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;IAC9B,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC,KAAK,EAAE,CAAA;IAClE,IAAI,MAAM,aAAa,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;QACvD,MAAM,MAAM,CAAC,aAAa,CAAC,CAAA;QAC3B,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAA;QAC9B,MAAM,SAAS,EAAE,CAAA;IACnB,CAAC;IACD,MAAM,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,CAAA;IAE5B,MAAM,SAAS,CAAC,IAAI,EAAE,CAAA;IACtB,MAAM,SAAS,CAAC,KAAK,EAAE,CAAA;AACzB,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"speaking-style.screenci.d.ts","sourceRoot":"","sources":["../../../docs/video-sources/speaking-style.screenci.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { hide, video, voices } from 'screenci';
|
|
2
|
+
video.use({
|
|
3
|
+
renderOptions: {
|
|
4
|
+
recording: {
|
|
5
|
+
size: 0.85,
|
|
6
|
+
shape: 'rounded',
|
|
7
|
+
roundness: 0.05,
|
|
8
|
+
dropShadow: 'drop-shadow(0 22px 49px rgba(0,0,0,0.28)) drop-shadow(0 6px 15px rgba(0,0,0,0.17))',
|
|
9
|
+
},
|
|
10
|
+
narration: {
|
|
11
|
+
voice: {
|
|
12
|
+
name: voices.Nora,
|
|
13
|
+
style: 'Clear and professional product narrator.',
|
|
14
|
+
},
|
|
15
|
+
size: 0.3,
|
|
16
|
+
shape: 'rounded',
|
|
17
|
+
roundness: 0,
|
|
18
|
+
corner: 'bottom-right',
|
|
19
|
+
padding: 0.04,
|
|
20
|
+
dropShadow: 1,
|
|
21
|
+
},
|
|
22
|
+
output: {
|
|
23
|
+
aspectRatio: '16:9',
|
|
24
|
+
quality: '1080p',
|
|
25
|
+
background: {
|
|
26
|
+
backgroundCss: 'linear-gradient(313deg, #ffffff 0%, #d6d6d6 100%)',
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
// Each cue carries its own style prompt, so the voice adapts its delivery per
|
|
32
|
+
// line without any audio editing.
|
|
33
|
+
video.narration({
|
|
34
|
+
en: {
|
|
35
|
+
hook: {
|
|
36
|
+
cue: 'Every narration line can have its own speaking style.',
|
|
37
|
+
voice: {
|
|
38
|
+
name: voices.Nora,
|
|
39
|
+
style: 'Warm and intriguing, drawing the viewer in.',
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
explain: {
|
|
43
|
+
cue: 'You write a style prompt alongside the text. The same voice reads the line, but the delivery follows the prompt you wrote.',
|
|
44
|
+
voice: {
|
|
45
|
+
name: voices.Nora,
|
|
46
|
+
style: 'Measured and instructional, making a point clearly.',
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
reveal: {
|
|
50
|
+
cue: 'One script can have a calm explainer, then shift to an excited reveal, all in the same render.',
|
|
51
|
+
voice: {
|
|
52
|
+
name: voices.Nora,
|
|
53
|
+
style: 'Energetic and enthusiastic, building into a reveal.',
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
outro: {
|
|
57
|
+
cue: 'Write the style in plain English. The voice does the rest.',
|
|
58
|
+
voice: {
|
|
59
|
+
name: voices.Nora,
|
|
60
|
+
style: 'Confident and conclusive, landing the final thought.',
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
},
|
|
64
|
+
})('Per-cue speaking style', async ({ page, narration }) => {
|
|
65
|
+
await hide(async () => {
|
|
66
|
+
await page.goto('https://screenci.com/docs/guides/narration');
|
|
67
|
+
await page.waitForLoadState('networkidle');
|
|
68
|
+
});
|
|
69
|
+
await narration.hook();
|
|
70
|
+
await narration.explain();
|
|
71
|
+
await page.evaluate(() => window.scrollBy({ top: 400, behavior: 'smooth' }));
|
|
72
|
+
await page.waitForTimeout(1200);
|
|
73
|
+
await narration.reveal();
|
|
74
|
+
await narration.outro();
|
|
75
|
+
});
|
|
76
|
+
//# sourceMappingURL=speaking-style.screenci.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"speaking-style.screenci.js","sourceRoot":"","sources":["../../../docs/video-sources/speaking-style.screenci.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAE9C,KAAK,CAAC,GAAG,CAAC;IACR,aAAa,EAAE;QACb,SAAS,EAAE;YACT,IAAI,EAAE,IAAI;YACV,KAAK,EAAE,SAAS;YAChB,SAAS,EAAE,IAAI;YACf,UAAU,EACR,oFAAoF;SACvF;QACD,SAAS,EAAE;YACT,KAAK,EAAE;gBACL,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,KAAK,EAAE,0CAA0C;aAClD;YACD,IAAI,EAAE,GAAG;YACT,KAAK,EAAE,SAAS;YAChB,SAAS,EAAE,CAAC;YACZ,MAAM,EAAE,cAAc;YACtB,OAAO,EAAE,IAAI;YACb,UAAU,EAAE,CAAC;SACd;QACD,MAAM,EAAE;YACN,WAAW,EAAE,MAAM;YACnB,OAAO,EAAE,OAAO;YAChB,UAAU,EAAE;gBACV,aAAa,EAAE,mDAAmD;aACnE;SACF;KACF;CACF,CAAC,CAAA;AAEF,8EAA8E;AAC9E,kCAAkC;AAClC,KAAK,CAAC,SAAS,CAAC;IACd,EAAE,EAAE;QACF,IAAI,EAAE;YACJ,GAAG,EAAE,uDAAuD;YAC5D,KAAK,EAAE;gBACL,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,KAAK,EAAE,6CAA6C;aACrD;SACF;QACD,OAAO,EAAE;YACP,GAAG,EAAE,4HAA4H;YACjI,KAAK,EAAE;gBACL,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,KAAK,EAAE,qDAAqD;aAC7D;SACF;QACD,MAAM,EAAE;YACN,GAAG,EAAE,gGAAgG;YACrG,KAAK,EAAE;gBACL,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,KAAK,EAAE,qDAAqD;aAC7D;SACF;QACD,KAAK,EAAE;YACL,GAAG,EAAE,4DAA4D;YACjE,KAAK,EAAE;gBACL,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,KAAK,EAAE,sDAAsD;aAC9D;SACF;KACF;CACF,CAAC,CAAC,wBAAwB,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE;IACzD,MAAM,IAAI,CAAC,KAAK,IAAI,EAAE;QACpB,MAAM,IAAI,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAA;QAC7D,MAAM,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAA;IAC5C,CAAC,CAAC,CAAA;IAEF,MAAM,SAAS,CAAC,IAAI,EAAE,CAAA;IACtB,MAAM,SAAS,CAAC,OAAO,EAAE,CAAA;IAEzB,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAA;IAC5E,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;IAE/B,MAAM,SAAS,CAAC,MAAM,EAAE,CAAA;IACxB,MAAM,SAAS,CAAC,KAAK,EAAE,CAAA;AACzB,CAAC,CAAC,CAAA"}
|
|
@@ -12,16 +12,14 @@ const appUrl = process.env.SCREENCI_APP_URL ?? 'https://app.screenci.com/';
|
|
|
12
12
|
// auth, so recording this needs a logged-in session: set SCREENCI_APP_STORAGE_STATE
|
|
13
13
|
// to a Playwright storageState JSON (see screenci.config.ts). The walkthrough is
|
|
14
14
|
// self-contained: it opens the first project and video, then enters Studio.
|
|
15
|
-
video.
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
edit: 'Revisa las opciones de render en el panel de Studio y genera una nueva version. Sin codigo y sin volver a grabar.',
|
|
24
|
-
},
|
|
15
|
+
video.narration({
|
|
16
|
+
en: {
|
|
17
|
+
intro: 'Open any finished video in Studio to edit it right in the browser.',
|
|
18
|
+
edit: 'Review render options in the Studio panel, then render a new version. No code, no re-recording.',
|
|
19
|
+
},
|
|
20
|
+
es: {
|
|
21
|
+
intro: 'Abre cualquier video terminado en Studio para editarlo directamente en el navegador.',
|
|
22
|
+
edit: 'Revisa las opciones de render en el panel de Studio y genera una nueva version. Sin codigo y sin volver a grabar.',
|
|
25
23
|
},
|
|
26
24
|
})('Studio web editing', async ({ page, narration }) => {
|
|
27
25
|
// Studio lives behind auth, so this recording only works with a logged-in
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"studio.screenci.js","sourceRoot":"","sources":["../../../docs/video-sources/studio.screenci.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEjE,KAAK,CAAC,GAAG,CAAC;IACR,aAAa,EAAE;QACb,SAAS,EAAE;YACT,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,wBAAwB,EAAE;SAChE;KACF;CACF,CAAC,CAAA;AAEF,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,2BAA2B,CAAA;AAE1E,+EAA+E;AAC/E,iFAAiF;AACjF,oFAAoF;AACpF,iFAAiF;AACjF,4EAA4E;AAC5E,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"studio.screenci.js","sourceRoot":"","sources":["../../../docs/video-sources/studio.screenci.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEjE,KAAK,CAAC,GAAG,CAAC;IACR,aAAa,EAAE;QACb,SAAS,EAAE;YACT,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,wBAAwB,EAAE;SAChE;KACF;CACF,CAAC,CAAA;AAEF,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,2BAA2B,CAAA;AAE1E,+EAA+E;AAC/E,iFAAiF;AACjF,oFAAoF;AACpF,iFAAiF;AACjF,4EAA4E;AAC5E,KAAK,CAAC,SAAS,CAAC;IACd,EAAE,EAAE;QACF,KAAK,EAAE,oEAAoE;QAC3E,IAAI,EAAE,iGAAiG;KACxG;IACD,EAAE,EAAE;QACF,KAAK,EACH,sFAAsF;QACxF,IAAI,EAAE,mHAAmH;KAC1H;CACF,CAAC,CAAC,oBAAoB,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE;IACrD,0EAA0E;IAC1E,+EAA+E;IAC/E,8EAA8E;IAC9E,qBAAqB;IACrB,KAAK,CAAC,IAAI,CACR,CAAC,OAAO,CAAC,GAAG,CAAC,0BAA0B,EACvC,gEAAgE,CACjE,CAAA;IAED,+EAA+E;IAC/E,MAAM,IAAI,CAAC,KAAK,IAAI,EAAE;QACpB,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACvB,MAAM,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAA;QAE1C,MAAM,IAAI;aACP,SAAS,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;aAC1C,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;QAC9B,MAAM,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAA;QAEzE,2EAA2E;QAC3E,4BAA4B;QAC5B,MAAM,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAA;QACxD,MAAM,IAAI;aACP,SAAS,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC;aACpD,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;QAC9B,MAAM,IAAI;aACP,SAAS,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;aACtC,KAAK,EAAE;aACP,KAAK,EAAE,CAAA;QACV,MAAM,IAAI;aACP,SAAS,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;aAC3C,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;IAChC,CAAC,CAAC,CAAA;IAEF,MAAM,SAAS,CAAC,KAAK,EAAE,CAAA;IAEvB,8EAA8E;IAC9E,yCAAyC;IACzC,MAAM,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,CAAA;IAC5B,MAAM,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,CAAA;IAC9D,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAA;IAC9B,MAAM,SAAS,EAAE,CAAA;IACjB,MAAM,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,CAAA;IAE1B,MAAM,kBAAkB,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;QAClD,IAAI,EAAE,wBAAwB;KAC/B,CAAC,CAAA;IACF,IAAI,MAAM,kBAAkB,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5D,wDAAwD;QACxD,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAA;QAChC,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAA;QAC9B,MAAM,SAAS,EAAE,CAAA;IACnB,CAAC;AACH,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vertical-video.screenci.d.ts","sourceRoot":"","sources":["../../../docs/video-sources/vertical-video.screenci.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { hide, video, voices } from 'screenci';
|
|
2
|
+
video.use({
|
|
3
|
+
renderOptions: {
|
|
4
|
+
recording: {
|
|
5
|
+
size: 0.82,
|
|
6
|
+
shape: 'rounded',
|
|
7
|
+
roundness: 0.05,
|
|
8
|
+
dropShadow: 'drop-shadow(0 20px 44px rgba(0,0,0,0.30)) drop-shadow(0 5px 12px rgba(0,0,0,0.16))',
|
|
9
|
+
},
|
|
10
|
+
narration: {
|
|
11
|
+
voice: {
|
|
12
|
+
name: voices.Sophie,
|
|
13
|
+
style: 'Calm and direct, presenting a product feature to developers.',
|
|
14
|
+
},
|
|
15
|
+
size: 0.26,
|
|
16
|
+
shape: 'rounded',
|
|
17
|
+
roundness: 0,
|
|
18
|
+
corner: 'bottom-right',
|
|
19
|
+
padding: 0.04,
|
|
20
|
+
dropShadow: 1,
|
|
21
|
+
},
|
|
22
|
+
output: {
|
|
23
|
+
aspectRatio: '9:16',
|
|
24
|
+
quality: '1080p',
|
|
25
|
+
background: {
|
|
26
|
+
backgroundCss: 'linear-gradient(170deg, #0f0c1e 0%, #1b1040 55%, #0d0b1a 100%)',
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
recordOptions: {
|
|
31
|
+
aspectRatio: '9:16',
|
|
32
|
+
// 720px wide viewport triggers mobile/responsive layout on the site.
|
|
33
|
+
// The render output stays at 1080p (1080x1920) via renderOptions.output.
|
|
34
|
+
quality: '720p',
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
video.narration({
|
|
38
|
+
en: {
|
|
39
|
+
hook: 'Most product videos are built for landscape. But social, ads, and mobile all need vertical.',
|
|
40
|
+
config: 'ScreenCI handles vertical natively. Set the aspect ratio to nine-sixteen and the recorder opens a portrait viewport automatically.',
|
|
41
|
+
demo: 'No cropping, no reframing. The whole walkthrough was captured vertically from frame one.',
|
|
42
|
+
outro: 'Same script, same narration, new format. One config change, re-render, done.',
|
|
43
|
+
},
|
|
44
|
+
})('Vertical video output', async ({ page, narration }) => {
|
|
45
|
+
await hide(async () => {
|
|
46
|
+
await page.goto('https://screenci.com/');
|
|
47
|
+
await page.waitForLoadState('networkidle');
|
|
48
|
+
});
|
|
49
|
+
await narration.hook();
|
|
50
|
+
await narration.config();
|
|
51
|
+
await page.evaluate(() => window.scrollBy({ top: 320, behavior: 'smooth' }));
|
|
52
|
+
await page.waitForTimeout(1600);
|
|
53
|
+
await narration.demo();
|
|
54
|
+
await page.evaluate(() => window.scrollBy({ top: 280, behavior: 'smooth' }));
|
|
55
|
+
await page.waitForTimeout(1400);
|
|
56
|
+
await narration.outro();
|
|
57
|
+
});
|
|
58
|
+
//# sourceMappingURL=vertical-video.screenci.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vertical-video.screenci.js","sourceRoot":"","sources":["../../../docs/video-sources/vertical-video.screenci.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAE9C,KAAK,CAAC,GAAG,CAAC;IACR,aAAa,EAAE;QACb,SAAS,EAAE;YACT,IAAI,EAAE,IAAI;YACV,KAAK,EAAE,SAAS;YAChB,SAAS,EAAE,IAAI;YACf,UAAU,EACR,oFAAoF;SACvF;QACD,SAAS,EAAE;YACT,KAAK,EAAE;gBACL,IAAI,EAAE,MAAM,CAAC,MAAM;gBACnB,KAAK,EAAE,8DAA8D;aACtE;YACD,IAAI,EAAE,IAAI;YACV,KAAK,EAAE,SAAS;YAChB,SAAS,EAAE,CAAC;YACZ,MAAM,EAAE,cAAc;YACtB,OAAO,EAAE,IAAI;YACb,UAAU,EAAE,CAAC;SACd;QACD,MAAM,EAAE;YACN,WAAW,EAAE,MAAM;YACnB,OAAO,EAAE,OAAO;YAChB,UAAU,EAAE;gBACV,aAAa,EACX,gEAAgE;aACnE;SACF;KACF;IACD,aAAa,EAAE;QACb,WAAW,EAAE,MAAM;QACnB,qEAAqE;QACrE,yEAAyE;QACzE,OAAO,EAAE,MAAM;KAChB;CACF,CAAC,CAAA;AAEF,KAAK,CAAC,SAAS,CAAC;IACd,EAAE,EAAE;QACF,IAAI,EAAE,6FAA6F;QACnG,MAAM,EACJ,oIAAoI;QACtI,IAAI,EAAE,0FAA0F;QAChG,KAAK,EACH,8EAA8E;KACjF;CACF,CAAC,CAAC,uBAAuB,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE;IACxD,MAAM,IAAI,CAAC,KAAK,IAAI,EAAE;QACpB,MAAM,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAA;QACxC,MAAM,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAA;IAC5C,CAAC,CAAC,CAAA;IAEF,MAAM,SAAS,CAAC,IAAI,EAAE,CAAA;IACtB,MAAM,SAAS,CAAC,MAAM,EAAE,CAAA;IAExB,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAA;IAC5E,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;IAE/B,MAAM,SAAS,CAAC,IAAI,EAAE,CAAA;IAEtB,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAA;IAC5E,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;IAE/B,MAAM,SAAS,CAAC,KAAK,EAAE,CAAA;AACzB,CAAC,CAAC,CAAA"}
|
package/dist/docs/videos.d.ts
CHANGED
|
@@ -34,6 +34,26 @@ export declare const docsVideoRegistry: {
|
|
|
34
34
|
readonly alt: "A marketing-site link highlighted by a pink ring with margin around it, framed as a branded still";
|
|
35
35
|
readonly sourcePath: "screenci/docs/video-sources/locator-highlight-still.screenci.ts";
|
|
36
36
|
};
|
|
37
|
+
readonly 'docs/guides/narration': {
|
|
38
|
+
readonly sourcePath: "screenci/docs/video-sources/narration.screenci.ts";
|
|
39
|
+
readonly showSource: false;
|
|
40
|
+
};
|
|
41
|
+
readonly 'docs/guides/camera-and-zooming': {
|
|
42
|
+
readonly sourcePath: "screenci/docs/video-sources/camera-and-zooming.screenci.ts";
|
|
43
|
+
readonly showSource: false;
|
|
44
|
+
};
|
|
45
|
+
readonly 'docs/guides/languages': {
|
|
46
|
+
readonly sourcePath: "screenci/docs/video-sources/languages.screenci.ts";
|
|
47
|
+
readonly showSource: false;
|
|
48
|
+
};
|
|
49
|
+
readonly 'docs/guides/studio': {
|
|
50
|
+
readonly sourcePath: "screenci/docs/video-sources/studio.screenci.ts";
|
|
51
|
+
readonly showSource: false;
|
|
52
|
+
};
|
|
53
|
+
readonly 'docs/guides/public-urls-and-embeds': {
|
|
54
|
+
readonly sourcePath: "screenci/docs/video-sources/public-urls-and-embeds.screenci.ts";
|
|
55
|
+
readonly showSource: false;
|
|
56
|
+
};
|
|
37
57
|
};
|
|
38
58
|
export declare function getDocVideo(slug: string): DocVideo | null;
|
|
39
59
|
export declare function hasPublicId(video: DocVideo): video is PublishedDocVideo;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"videos.d.ts","sourceRoot":"","sources":["../../docs/videos.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,YAAY,CAAA;AAEjD,KAAK,cAAc,GAAG;IACpB,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,6BAA6B;IAC7B,IAAI,CAAC,EAAE,YAAY,CAAA;IACnB,gDAAgD;IAChD,GAAG,CAAC,EAAE,MAAM,CAAA;CACb,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG,cAAc,GAAG;IAC/C,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG,cAAc,CAAA;AAEhD,MAAM,MAAM,QAAQ,GAAG,iBAAiB,GAAG,mBAAmB,CAAA;AAE9D,eAAO,MAAM,iBAAiB
|
|
1
|
+
{"version":3,"file":"videos.d.ts","sourceRoot":"","sources":["../../docs/videos.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,YAAY,CAAA;AAEjD,KAAK,cAAc,GAAG;IACpB,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,6BAA6B;IAC7B,IAAI,CAAC,EAAE,YAAY,CAAA;IACnB,gDAAgD;IAChD,GAAG,CAAC,EAAE,MAAM,CAAA;CACb,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG,cAAc,GAAG;IAC/C,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG,cAAc,CAAA;AAEhD,MAAM,MAAM,QAAQ,GAAG,iBAAiB,GAAG,mBAAmB,CAAA;AAE9D,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+Ce,CAAA;AAE7C,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAEzD;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,QAAQ,GAAG,KAAK,IAAI,iBAAiB,CAEvE"}
|
package/dist/docs/videos.js
CHANGED
|
@@ -17,6 +17,31 @@ export const docsVideoRegistry = {
|
|
|
17
17
|
alt: 'A marketing-site link highlighted by a pink ring with margin around it, framed as a branded still',
|
|
18
18
|
sourcePath: 'screenci/docs/video-sources/locator-highlight-still.screenci.ts',
|
|
19
19
|
},
|
|
20
|
+
// The narrated walkthroughs below are authored but not yet recorded: they have
|
|
21
|
+
// no publicId, so the page injects an invisible placeholder until the video is
|
|
22
|
+
// recorded and published, then a publicId is added here (see videos.ts docs).
|
|
23
|
+
// The four app demos record the authenticated app via shared auth
|
|
24
|
+
// (SCREENCI_APP_STORAGE_STATE); camera-and-zooming records the public site.
|
|
25
|
+
'docs/guides/narration': {
|
|
26
|
+
sourcePath: 'screenci/docs/video-sources/narration.screenci.ts',
|
|
27
|
+
showSource: false,
|
|
28
|
+
},
|
|
29
|
+
'docs/guides/camera-and-zooming': {
|
|
30
|
+
sourcePath: 'screenci/docs/video-sources/camera-and-zooming.screenci.ts',
|
|
31
|
+
showSource: false,
|
|
32
|
+
},
|
|
33
|
+
'docs/guides/languages': {
|
|
34
|
+
sourcePath: 'screenci/docs/video-sources/languages.screenci.ts',
|
|
35
|
+
showSource: false,
|
|
36
|
+
},
|
|
37
|
+
'docs/guides/studio': {
|
|
38
|
+
sourcePath: 'screenci/docs/video-sources/studio.screenci.ts',
|
|
39
|
+
showSource: false,
|
|
40
|
+
},
|
|
41
|
+
'docs/guides/public-urls-and-embeds': {
|
|
42
|
+
sourcePath: 'screenci/docs/video-sources/public-urls-and-embeds.screenci.ts',
|
|
43
|
+
showSource: false,
|
|
44
|
+
},
|
|
20
45
|
};
|
|
21
46
|
export function getDocVideo(slug) {
|
|
22
47
|
return docsVideoRegistry[slug] ?? null;
|
package/dist/docs/videos.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"videos.js","sourceRoot":"","sources":["../../docs/videos.ts"],"names":[],"mappings":"AAyBA,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,mBAAmB,EAAE;QACnB,QAAQ,EAAE,kCAAkC;QAC5C,UAAU,EAAE,sDAAsD;QAClE,UAAU,EAAE,KAAK;KAClB;IACD,gEAAgE;IAChE,sBAAsB,EAAE;QACtB,QAAQ,EAAE,kCAAkC;QAC5C,UAAU,EACR,oEAAoE;KACvE;IACD,uEAAuE;IACvE,wBAAwB;IACxB,yBAAyB,EAAE;QACzB,QAAQ,EAAE,kCAAkC;QAC5C,IAAI,EAAE,YAAY;QAClB,GAAG,EAAE,mGAAmG;QACxG,UAAU,EACR,iEAAiE;KACpE;CAC0C,CAAA;AAE7C,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,OAAO,iBAAiB,CAAC,IAAsC,CAAC,IAAI,IAAI,CAAA;AAC1E,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAe;IACzC,OAAO,UAAU,IAAI,KAAK,CAAA;AAC5B,CAAC"}
|
|
1
|
+
{"version":3,"file":"videos.js","sourceRoot":"","sources":["../../docs/videos.ts"],"names":[],"mappings":"AAyBA,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,mBAAmB,EAAE;QACnB,QAAQ,EAAE,kCAAkC;QAC5C,UAAU,EAAE,sDAAsD;QAClE,UAAU,EAAE,KAAK;KAClB;IACD,gEAAgE;IAChE,sBAAsB,EAAE;QACtB,QAAQ,EAAE,kCAAkC;QAC5C,UAAU,EACR,oEAAoE;KACvE;IACD,uEAAuE;IACvE,wBAAwB;IACxB,yBAAyB,EAAE;QACzB,QAAQ,EAAE,kCAAkC;QAC5C,IAAI,EAAE,YAAY;QAClB,GAAG,EAAE,mGAAmG;QACxG,UAAU,EACR,iEAAiE;KACpE;IACD,+EAA+E;IAC/E,+EAA+E;IAC/E,8EAA8E;IAC9E,kEAAkE;IAClE,4EAA4E;IAC5E,uBAAuB,EAAE;QACvB,UAAU,EAAE,mDAAmD;QAC/D,UAAU,EAAE,KAAK;KAClB;IACD,gCAAgC,EAAE;QAChC,UAAU,EAAE,4DAA4D;QACxE,UAAU,EAAE,KAAK;KAClB;IACD,uBAAuB,EAAE;QACvB,UAAU,EAAE,mDAAmD;QAC/D,UAAU,EAAE,KAAK;KAClB;IACD,oBAAoB,EAAE;QACpB,UAAU,EAAE,gDAAgD;QAC5D,UAAU,EAAE,KAAK;KAClB;IACD,oCAAoC,EAAE;QACpC,UAAU,EACR,gEAAgE;QAClE,UAAU,EAAE,KAAK;KAClB;CAC0C,CAAA;AAE7C,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,OAAO,iBAAiB,CAAC,IAAsC,CAAC,IAAI,IAAI,CAAA;AAC1E,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAe;IACzC,OAAO,UAAU,IAAI,KAAK,CAAA;AAC5B,CAAC"}
|
|
@@ -122,6 +122,14 @@ test.describe('click instrumentation', () => {
|
|
|
122
122
|
});
|
|
123
123
|
expect(await scrollY(page)).toBeGreaterThan(0);
|
|
124
124
|
});
|
|
125
|
+
test('does not scroll when clicking an already-visible element', async ({ page, }) => {
|
|
126
|
+
expect(await scrollY(page)).toBe(0);
|
|
127
|
+
await clickableLocator(page.locator('#click-button')).click({
|
|
128
|
+
moveDuration: 50,
|
|
129
|
+
});
|
|
130
|
+
// The button is already on screen, so a plain click must not move the page.
|
|
131
|
+
expect(await scrollY(page)).toBe(0);
|
|
132
|
+
});
|
|
125
133
|
test('actually clicks an off-screen button after scrolling', async ({ page, }) => {
|
|
126
134
|
await clickableLocator(page.locator('#offscreen-click-button')).click({
|
|
127
135
|
moveDuration: 50,
|
|
@@ -641,12 +649,25 @@ test.describe('mouse.move instrumentation', () => {
|
|
|
641
649
|
? events[0].easing
|
|
642
650
|
: events[0].mouse?.easing).toBe('ease-out');
|
|
643
651
|
});
|
|
644
|
-
test('
|
|
652
|
+
test('a bare move animates by default with default easing', async ({ page, }) => {
|
|
645
653
|
await page.mouse.move(100, 150);
|
|
646
654
|
const events = mouseMoveEvents();
|
|
647
655
|
expect(events).toHaveLength(1);
|
|
648
656
|
expect(events[0].x).toBe(100);
|
|
649
657
|
expect(events[0].y).toBe(150);
|
|
658
|
+
expect(moveEndMs(events[0]) - moveStartMs(events[0])).toBeGreaterThan(0);
|
|
659
|
+
expect(events[0].type === 'mouseMove'
|
|
660
|
+
? events[0].easing
|
|
661
|
+
: events[0].mouse?.easing).toBe('ease-in-out');
|
|
662
|
+
});
|
|
663
|
+
test('records mouseMove without easing for an explicit instant move', async ({ page, }) => {
|
|
664
|
+
await page.mouse.move(100, 150, {
|
|
665
|
+
duration: 0,
|
|
666
|
+
});
|
|
667
|
+
const events = mouseMoveEvents();
|
|
668
|
+
expect(events).toHaveLength(1);
|
|
669
|
+
expect(events[0].x).toBe(100);
|
|
670
|
+
expect(events[0].y).toBe(150);
|
|
650
671
|
expect(events[0].type === 'mouseMove'
|
|
651
672
|
? events[0].easing
|
|
652
673
|
: events[0].mouse?.easing).toBeUndefined();
|
|
@@ -670,6 +691,44 @@ test.describe('mouse.move instrumentation', () => {
|
|
|
670
691
|
});
|
|
671
692
|
});
|
|
672
693
|
// ---------------------------------------------------------------------------
|
|
694
|
+
// page.mouse press methods (down / up / click / dblclick)
|
|
695
|
+
// ---------------------------------------------------------------------------
|
|
696
|
+
test.describe('mouse press instrumentation', () => {
|
|
697
|
+
async function clickButtonCenter(page) {
|
|
698
|
+
const bb = await page.locator('#click-button').boundingBox();
|
|
699
|
+
return { x: bb.x + bb.width / 2, y: bb.y + bb.height / 2 };
|
|
700
|
+
}
|
|
701
|
+
test('records page.mouse.down and page.mouse.up as their own input events', async ({ page, }) => {
|
|
702
|
+
const mouse = page.mouse;
|
|
703
|
+
await mouse.down();
|
|
704
|
+
await mouse.up();
|
|
705
|
+
const subTypes = inputEvents().map((e) => e.subType);
|
|
706
|
+
expect(subTypes).toEqual(['mouseDown', 'mouseUp']);
|
|
707
|
+
});
|
|
708
|
+
test('page.mouse.click actually clicks at the coordinates', async ({ page, }) => {
|
|
709
|
+
const { x, y } = await clickButtonCenter(page);
|
|
710
|
+
await page.mouse.click(x, y, {
|
|
711
|
+
moveDuration: 50,
|
|
712
|
+
});
|
|
713
|
+
await expect(page.locator('#click-status')).not.toHaveText('Not clicked');
|
|
714
|
+
expect(clickEvents()).toHaveLength(1);
|
|
715
|
+
});
|
|
716
|
+
test('fake page.mouse.click records a click but does not click the page', async ({ page, }) => {
|
|
717
|
+
const { x, y } = await clickButtonCenter(page);
|
|
718
|
+
await page.mouse.click(x, y, {
|
|
719
|
+
moveDuration: 50,
|
|
720
|
+
fake: true,
|
|
721
|
+
});
|
|
722
|
+
// The page was never actually clicked...
|
|
723
|
+
await expect(page.locator('#click-status')).toHaveText('Not clicked');
|
|
724
|
+
// ...but the click is still recorded for the video.
|
|
725
|
+
const events = clickEvents();
|
|
726
|
+
expect(events).toHaveLength(1);
|
|
727
|
+
expect(events[0].events.some((e) => e.type === 'mouseDown')).toBe(true);
|
|
728
|
+
expect(events[0].events.some((e) => e.type === 'mouseUp')).toBe(true);
|
|
729
|
+
});
|
|
730
|
+
});
|
|
731
|
+
// ---------------------------------------------------------------------------
|
|
673
732
|
// hover
|
|
674
733
|
// ---------------------------------------------------------------------------
|
|
675
734
|
function hoverableLocator(locator) {
|