screenci 0.0.82 → 0.0.84
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 +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +57 -4
- package/dist/cli.js.map +1 -1
- package/dist/docs/manifest.d.ts +3 -3
- package/dist/docs/manifest.js +1 -1
- package/dist/docs/video-sources/camera-and-zooming.screenci.js +1 -2
- package/dist/docs/video-sources/camera-and-zooming.screenci.js.map +1 -1
- package/dist/docs/video-sources/installation.screenci.js +1 -2
- package/dist/docs/video-sources/installation.screenci.js.map +1 -1
- package/dist/docs/video-sources/languages.screenci.js +3 -1
- package/dist/docs/video-sources/languages.screenci.js.map +1 -1
- package/dist/docs/video-sources/locator-highlight-animated.screenci.js +0 -1
- package/dist/docs/video-sources/locator-highlight-animated.screenci.js.map +1 -1
- package/dist/docs/video-sources/locator-highlight-still.screenci.js +0 -1
- package/dist/docs/video-sources/locator-highlight-still.screenci.js.map +1 -1
- package/dist/docs/video-sources/narration.screenci.js +3 -1
- package/dist/docs/video-sources/narration.screenci.js.map +1 -1
- package/dist/docs/video-sources/public-urls-and-embeds.screenci.js +3 -1
- package/dist/docs/video-sources/public-urls-and-embeds.screenci.js.map +1 -1
- package/dist/docs/video-sources/studio.screenci.js +3 -1
- package/dist/docs/video-sources/studio.screenci.js.map +1 -1
- package/dist/src/asset.d.ts +38 -1
- package/dist/src/asset.d.ts.map +1 -1
- package/dist/src/asset.js +139 -50
- package/dist/src/asset.js.map +1 -1
- package/dist/src/disableAnimations.d.ts +33 -0
- package/dist/src/disableAnimations.d.ts.map +1 -0
- package/dist/src/disableAnimations.js +50 -0
- package/dist/src/disableAnimations.js.map +1 -0
- package/dist/src/events.d.ts +10 -0
- package/dist/src/events.d.ts.map +1 -1
- package/dist/src/events.js +4 -0
- package/dist/src/events.js.map +1 -1
- package/dist/src/init.d.ts +31 -7
- package/dist/src/init.d.ts.map +1 -1
- package/dist/src/init.js +128 -52
- package/dist/src/init.js.map +1 -1
- package/dist/src/instrument.d.ts.map +1 -1
- package/dist/src/instrument.js +5 -2
- package/dist/src/instrument.js.map +1 -1
- package/dist/src/linkSession.d.ts +24 -0
- package/dist/src/linkSession.d.ts.map +1 -1
- package/dist/src/linkSession.js +57 -0
- package/dist/src/linkSession.js.map +1 -1
- package/dist/src/runtimeContext.d.ts +17 -0
- package/dist/src/runtimeContext.d.ts.map +1 -1
- package/dist/src/runtimeContext.js +3 -0
- package/dist/src/runtimeContext.js.map +1 -1
- package/dist/src/runtimeMode.d.ts.map +1 -1
- package/dist/src/runtimeMode.js +8 -0
- package/dist/src/runtimeMode.js.map +1 -1
- package/dist/src/screenshot.d.ts.map +1 -1
- package/dist/src/screenshot.js +7 -0
- package/dist/src/screenshot.js.map +1 -1
- package/dist/src/types.d.ts +37 -1
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js.map +1 -1
- package/dist/src/video.d.ts.map +1 -1
- package/dist/src/video.js +7 -0
- package/dist/src/video.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/skills/screenci/references/init.md +3 -2
- package/dist/docs/video-sources/landing.screenci.d.ts +0 -2
- package/dist/docs/video-sources/landing.screenci.d.ts.map +0 -1
- package/dist/docs/video-sources/landing.screenci.js +0 -34
- package/dist/docs/video-sources/landing.screenci.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"camera-and-zooming.screenci.js","sourceRoot":"","sources":["../../../docs/video-sources/camera-and-zooming.screenci.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,IAAI,EACJ,kBAAkB,EAClB,SAAS,EACT,eAAe,EACf,KAAK,EACL,MAAM,EACN,MAAM,GACP,MAAM,UAAU,CAAA;AAEjB,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;QACD,MAAM,EAAE;YACN,UAAU,EAAE;gBACV,aAAa,EAAE,mDAAmD;aACnE;SACF;KACF;CACF,CAAC,CAAA;AAEF,6EAA6E;AAC7E,qEAAqE;AACrE,
|
|
1
|
+
{"version":3,"file":"camera-and-zooming.screenci.js","sourceRoot":"","sources":["../../../docs/video-sources/camera-and-zooming.screenci.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,IAAI,EACJ,kBAAkB,EAClB,SAAS,EACT,eAAe,EACf,KAAK,EACL,MAAM,EACN,MAAM,GACP,MAAM,UAAU,CAAA;AAEjB,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;QACD,MAAM,EAAE;YACN,UAAU,EAAE;gBACV,aAAa,EAAE,mDAAmD;aACnE;SACF;KACF;CACF,CAAC,CAAA;AAEF,6EAA6E;AAC7E,qEAAqE;AACrE,oFAAoF;AACpF,sBAAsB;AACtB,KAAK,CAAC,SAAS,CAAC;IACd,EAAE,EAAE;QACF,IAAI,EAAE,kFAAkF;QACxF,MAAM,EACJ,iFAAiF;QACnF,GAAG,EAAE,6DAA6D;QAClE,IAAI,EAAE,2FAA2F;QACjG,KAAK,EAAE,gDAAgD;KACxD;CACF,CAAC,CAAC,oBAAoB,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE;IACrD,MAAM,IAAI,CAAC,KAAK,IAAI,EAAE;QACpB,MAAM,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAA;IAC1C,CAAC,CAAC,CAAA;IAEF,uEAAuE;IACvE,MAAM,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,CAAA;IAC5B,MAAM,QAAQ,CAAC,KAAK,IAAI,EAAE;QACxB,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC,CAAC,KAAK,EAAE,CAAA;IACtE,CAAC,CAAC,CAAA;IACF,MAAM,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,CAAA;IAC1B,MAAM,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAA;IAE1C,4DAA4D;IAC5D,MAAM,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;IAC9B,MAAM,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAA;IAC7D,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAA;IAC9B,MAAM,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,CAAA;IAE5B,wEAAwE;IACxE,MAAM,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,CAAA;IAC3B,MAAM,MAAM,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAA;IACjC,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAA;IAC9B,MAAM,SAAS,EAAE,CAAA;IACjB,MAAM,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,CAAA;IAEzB,0EAA0E;IAC1E,MAAM,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,CAAA;IAC5B,MAAM,eAAe,CAAC,GAAG,CAAC,CAAA;IAC1B,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAA;IAC9B,MAAM,kBAAkB,EAAE,CAAA;IAC1B,MAAM,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,CAAA;IAE1B,MAAM,SAAS,CAAC,KAAK,EAAE,CAAA;AACzB,CAAC,CAAC,CAAA"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { autoZoom, hide, video } from 'screenci';
|
|
2
2
|
video
|
|
3
3
|
.overlays({
|
|
4
|
-
logo: { path: './assets/logo.png', duration: '2s' },
|
|
4
|
+
logo: { path: './assets/logo.png', duration: '2s', hideMouse: true },
|
|
5
5
|
})
|
|
6
6
|
.narration({
|
|
7
7
|
docs: 'Here is where to find ScreenCI [pronounce: screen see eye] docs.',
|
|
@@ -9,7 +9,6 @@ video
|
|
|
9
9
|
// Run setup without showing these actions in the final recording.
|
|
10
10
|
await hide(async () => {
|
|
11
11
|
await page.goto('https://screenci.com/');
|
|
12
|
-
await page.waitForLoadState('networkidle');
|
|
13
12
|
});
|
|
14
13
|
// Open with a brief brand intro card before the walkthrough begins.
|
|
15
14
|
await overlays.logo.for('2s');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"installation.screenci.js","sourceRoot":"","sources":["../../../docs/video-sources/installation.screenci.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,UAAU,CAAA;AAEhD,KAAK;KACF,QAAQ,CAAC;IACR,IAAI,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,QAAQ,EAAE,IAAI,EAAE;
|
|
1
|
+
{"version":3,"file":"installation.screenci.js","sourceRoot":"","sources":["../../../docs/video-sources/installation.screenci.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,UAAU,CAAA;AAEhD,KAAK;KACF,QAAQ,CAAC;IACR,IAAI,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE;CACrE,CAAC;KACD,SAAS,CAAC;IACT,IAAI,EAAE,kEAAkE;CACzE,CAAC,CAAC,kBAAkB,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE;IAC/D,kEAAkE;IAClE,MAAM,IAAI,CAAC,KAAK,IAAI,EAAE;QACpB,MAAM,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAA;IAC1C,CAAC,CAAC,CAAA;IAEF,oEAAoE;IACpE,MAAM,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAE7B,yCAAyC;IACzC,MAAM,SAAS,CAAC,IAAI,EAAE,CAAA;IAEtB,qEAAqE;IACrE,MAAM,QAAQ,CAAC,KAAK,IAAI,EAAE;QACxB,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC,CAAC,KAAK,EAAE,CAAA;IACtE,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -28,7 +28,9 @@ video
|
|
|
28
28
|
},
|
|
29
29
|
})('Languages walkthrough', async ({ page, narration, overlays }) => {
|
|
30
30
|
// Studio lives behind auth (SCREENCI_APP_STORAGE_STATE, see screenci.config.ts).
|
|
31
|
-
|
|
31
|
+
if (!process.env.SCREENCI_APP_STORAGE_STATE) {
|
|
32
|
+
throw new Error('Not logged in. Record via `scripts/screenci.sh docs <env> record` (it signs in first), or set SCREENCI_APP_STORAGE_STATE to a Playwright storageState.');
|
|
33
|
+
}
|
|
32
34
|
// Open a finished video's Studio page without showing the navigation.
|
|
33
35
|
await hide(async () => {
|
|
34
36
|
await page.goto(appUrl);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"languages.screenci.js","sourceRoot":"","sources":["../../../docs/video-sources/languages.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,iFAAiF;AACjF,iFAAiF;AACjF,gFAAgF;AAChF,8EAA8E;AAC9E,uEAAuE;AACvE,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,0DAA0D;QACjE,MAAM,EAAE,4DAA4D;QACpE,GAAG,EAAE,+EAA+E;QACpF,KAAK,EAAE,4DAA4D;KACpE;CACF,CAAC,CAAC,uBAAuB,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE;IACpE,iFAAiF;IACjF,
|
|
1
|
+
{"version":3,"file":"languages.screenci.js","sourceRoot":"","sources":["../../../docs/video-sources/languages.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,iFAAiF;AACjF,iFAAiF;AACjF,gFAAgF;AAChF,8EAA8E;AAC9E,uEAAuE;AACvE,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,0DAA0D;QACjE,MAAM,EAAE,4DAA4D;QACpE,GAAG,EAAE,+EAA+E;QACpF,KAAK,EAAE,4DAA4D;KACpE;CACF,CAAC,CAAC,uBAAuB,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE;IACpE,iFAAiF;IACjF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CACb,wJAAwJ,CACzJ,CAAA;IACH,CAAC;IAED,sEAAsE;IACtE,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;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,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC7B,MAAM,SAAS,CAAC,KAAK,EAAE,CAAA;IAEvB,6EAA6E;IAC7E,MAAM,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;IAC9B,MAAM,gBAAgB,GAAG,IAAI;SAC1B,SAAS,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;SAC5C,KAAK,EAAE,CAAA;IACV,IAAI,MAAM,gBAAgB,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1D,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAA;QAC9B,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,GAAG,EAAE,CAAA;IACrB,MAAM,SAAS,CAAC,KAAK,EAAE,CAAA;AACzB,CAAC,CAAC,CAAA"}
|
|
@@ -27,7 +27,6 @@ video.overlays({
|
|
|
27
27
|
}),
|
|
28
28
|
})('Locator highlight (animated)', async ({ page, overlays }) => {
|
|
29
29
|
await page.goto('https://screenci.com/');
|
|
30
|
-
await page.waitForLoadState('networkidle');
|
|
31
30
|
const cta = page.getByRole('link', { name: 'View Documentation' });
|
|
32
31
|
await cta.scrollIntoViewIfNeeded();
|
|
33
32
|
// The ring pulses while the page stays live. Every start() must be ended
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"locator-highlight-animated.screenci.js","sourceRoot":"","sources":["../../../docs/video-sources/locator-highlight-animated.screenci.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAA;AAEhC,+EAA+E;AAC/E,6EAA6E;AAC7E,8EAA8E;AAC9E,sBAAsB;AACtB,KAAK,CAAC,QAAQ,CAAC;IACb,IAAI,EAAE,CAAC,MAAe,EAAE,EAAE,CAAC,CAAC;QAC1B,IAAI,EAAE,0BAA0B;QAChC,GAAG,EAAE;;;;;;;;;;;;;KAaJ;QACD,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,CAAC;QACT,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,MAAM;KACjB,CAAC;CACH,CAAC,CAAC,8BAA8B,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;IAC9D,MAAM,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"locator-highlight-animated.screenci.js","sourceRoot":"","sources":["../../../docs/video-sources/locator-highlight-animated.screenci.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAA;AAEhC,+EAA+E;AAC/E,6EAA6E;AAC7E,8EAA8E;AAC9E,sBAAsB;AACtB,KAAK,CAAC,QAAQ,CAAC;IACb,IAAI,EAAE,CAAC,MAAe,EAAE,EAAE,CAAC,CAAC;QAC1B,IAAI,EAAE,0BAA0B;QAChC,GAAG,EAAE;;;;;;;;;;;;;KAaJ;QACD,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,CAAC;QACT,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,MAAM;KACjB,CAAC;CACH,CAAC,CAAC,8BAA8B,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;IAC9D,MAAM,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAA;IAExC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC,CAAA;IAClE,MAAM,GAAG,CAAC,sBAAsB,EAAE,CAAA;IAElC,yEAAyE;IACzE,qCAAqC;IACrC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC/B,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA;IAClB,MAAM,GAAG,CAAC,KAAK,EAAE,CAAA;IACjB,MAAM,IAAI,CAAC,GAAG,EAAE,CAAA;AAClB,CAAC,CAAC,CAAA"}
|
|
@@ -9,7 +9,6 @@ screenshot.overlays({
|
|
|
9
9
|
}),
|
|
10
10
|
})('Locator highlight', async ({ page, overlays }) => {
|
|
11
11
|
await page.goto('https://screenci.com/');
|
|
12
|
-
await page.waitForLoadState('networkidle');
|
|
13
12
|
const cta = page.getByRole('link', { name: 'View Documentation' });
|
|
14
13
|
await cta.scrollIntoViewIfNeeded();
|
|
15
14
|
// In a still, start the overlay and leave it open: it stays in the image.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"locator-highlight-still.screenci.js","sourceRoot":"","sources":["../../../docs/video-sources/locator-highlight-still.screenci.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAErC,+EAA+E;AAC/E,gDAAgD;AAChD,UAAU,CAAC,QAAQ,CAAC;IAClB,IAAI,EAAE,CAAC,MAAe,EAAE,EAAE,CAAC,CAAC;QAC1B,IAAI,EAAE,8GAA8G;QACpH,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,CAAC;KACV,CAAC;CACH,CAAC,CAAC,mBAAmB,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;IACnD,MAAM,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"locator-highlight-still.screenci.js","sourceRoot":"","sources":["../../../docs/video-sources/locator-highlight-still.screenci.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAErC,+EAA+E;AAC/E,gDAAgD;AAChD,UAAU,CAAC,QAAQ,CAAC;IAClB,IAAI,EAAE,CAAC,MAAe,EAAE,EAAE,CAAC,CAAC;QAC1B,IAAI,EAAE,8GAA8G;QACpH,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,CAAC;KACV,CAAC;CACH,CAAC,CAAC,mBAAmB,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;IACnD,MAAM,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAA;IAExC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC,CAAA;IAClE,MAAM,GAAG,CAAC,sBAAsB,EAAE,CAAA;IAElC,0EAA0E;IAC1E,MAAM,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAA;AAClC,CAAC,CAAC,CAAA"}
|
|
@@ -30,7 +30,9 @@ video
|
|
|
30
30
|
})('Narration walkthrough', async ({ page, narration, overlays }) => {
|
|
31
31
|
// Studio lives behind auth (SCREENCI_APP_STORAGE_STATE, see screenci.config.ts).
|
|
32
32
|
// Skip rather than stall on the login page when the session is not configured.
|
|
33
|
-
|
|
33
|
+
if (!process.env.SCREENCI_APP_STORAGE_STATE) {
|
|
34
|
+
throw new Error('Not logged in. Record via `scripts/screenci.sh docs <env> record` (it signs in first), or set SCREENCI_APP_STORAGE_STATE to a Playwright storageState.');
|
|
35
|
+
}
|
|
34
36
|
// Open a finished video's Studio page without showing the navigation.
|
|
35
37
|
await hide(async () => {
|
|
36
38
|
await page.goto(appUrl);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"narration.screenci.js","sourceRoot":"","sources":["../../../docs/video-sources/narration.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,iFAAiF;AACjF,gFAAgF;AAChF,+EAA+E;AAC/E,6EAA6E;AAC7E,oEAAoE;AACpE,kEAAkE;AAClE,EAAE;AACF,iFAAiF;AACjF,sEAAsE;AACtE,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,EACH,6EAA6E;QAC/E,OAAO,EACL,uEAAuE;QACzE,MAAM,EACJ,sEAAsE;QACxE,KAAK,EAAE,gEAAgE;KACxE;CACF,CAAC,CAAC,uBAAuB,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE;IACpE,iFAAiF;IACjF,+EAA+E;IAC/E,
|
|
1
|
+
{"version":3,"file":"narration.screenci.js","sourceRoot":"","sources":["../../../docs/video-sources/narration.screenci.ts"],"names":[],"mappings":"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"}
|
|
@@ -29,7 +29,9 @@ video
|
|
|
29
29
|
},
|
|
30
30
|
})('Public URLs and embeds', async ({ page, narration, overlays }) => {
|
|
31
31
|
// The public-delivery switch lives behind auth (SCREENCI_APP_STORAGE_STATE).
|
|
32
|
-
|
|
32
|
+
if (!process.env.SCREENCI_APP_STORAGE_STATE) {
|
|
33
|
+
throw new Error('Not logged in. Record via `scripts/screenci.sh docs <env> record` (it signs in first), or set SCREENCI_APP_STORAGE_STATE to a Playwright storageState.');
|
|
34
|
+
}
|
|
33
35
|
// Open a finished video page without showing the navigation.
|
|
34
36
|
await hide(async () => {
|
|
35
37
|
await page.goto(appUrl);
|
|
@@ -1 +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,
|
|
1
|
+
{"version":3,"file":"public-urls-and-embeds.screenci.js","sourceRoot":"","sources":["../../../docs/video-sources/public-urls-and-embeds.screenci.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,7 +26,9 @@ video.narration({
|
|
|
26
26
|
// session (SCREENCI_APP_STORAGE_STATE, see screenci.config.ts). When it is not
|
|
27
27
|
// configured (e.g. CI without the session secret), skip instead of timing out
|
|
28
28
|
// on the login page.
|
|
29
|
-
|
|
29
|
+
if (!process.env.SCREENCI_APP_STORAGE_STATE) {
|
|
30
|
+
throw new Error('Not logged in. Record via `scripts/screenci.sh docs <env> record` (it signs in first), or set SCREENCI_APP_STORAGE_STATE to a Playwright storageState.');
|
|
31
|
+
}
|
|
30
32
|
// Navigate from the dashboard into Studio without showing it in the recording.
|
|
31
33
|
await hide(async () => {
|
|
32
34
|
await page.goto(appUrl);
|
|
@@ -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,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,
|
|
1
|
+
{"version":3,"file":"studio.screenci.js","sourceRoot":"","sources":["../../../docs/video-sources/studio.screenci.ts"],"names":[],"mappings":"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"}
|
package/dist/src/asset.d.ts
CHANGED
|
@@ -110,6 +110,16 @@ type OverlayCommon = {
|
|
|
110
110
|
* recording as the camera zooms and pans.
|
|
111
111
|
*/
|
|
112
112
|
pinToScreen?: boolean;
|
|
113
|
+
/**
|
|
114
|
+
* Hide the synthetic mouse cursor while this overlay is displayed, restoring
|
|
115
|
+
* its prior visibility when the overlay ends. Useful for full-screen intro or
|
|
116
|
+
* outro cards where a cursor would be a distraction. Placement-agnostic, so it
|
|
117
|
+
* works for every overlay variant. Overlapping `hideMouse` overlays keep the
|
|
118
|
+
* cursor hidden until the last one ends, and a cursor already hidden (for
|
|
119
|
+
* example via `page.mouse.hide()`) is left hidden. Has no effect on
|
|
120
|
+
* screenshots, whose cursor is hidden by default.
|
|
121
|
+
*/
|
|
122
|
+
hideMouse?: boolean;
|
|
113
123
|
};
|
|
114
124
|
/** Fields that only apply to a `.mp4` video overlay (a file `path`). */
|
|
115
125
|
type OverlayVideoFields = {
|
|
@@ -220,7 +230,7 @@ export declare const MAX_AUDIO_LEVEL = 4;
|
|
|
220
230
|
* is a finished still or clip, so source-only fields (`over`/`margin`/`animate`/
|
|
221
231
|
* `css`/`capturePadding`) do not apply.
|
|
222
232
|
*/
|
|
223
|
-
export type DependencyOverlayOptions = Pick<OverlayCommon, 'relativeTo' | 'x' | 'y' | 'width' | 'height' | 'aspectRatio' | 'fill' | 'duration' | 'crop' | 'pinToScreen'> & {
|
|
233
|
+
export type DependencyOverlayOptions = Pick<OverlayCommon, 'relativeTo' | 'x' | 'y' | 'width' | 'height' | 'aspectRatio' | 'fill' | 'duration' | 'crop' | 'pinToScreen' | 'hideMouse'> & {
|
|
224
234
|
/**
|
|
225
235
|
* Late start into the embedded VIDEO (a `'2s'`/timecode/`'50%'` position).
|
|
226
236
|
* Video dependencies only; rejected when the target resolves to a screenshot.
|
|
@@ -236,6 +246,17 @@ export type DependencyOverlayOptions = Pick<OverlayCommon, 'relativeTo' | 'x' |
|
|
|
236
246
|
* has no competing narration of its own. Defaults to `false`.
|
|
237
247
|
*/
|
|
238
248
|
inheritSubtitles?: boolean;
|
|
249
|
+
/**
|
|
250
|
+
* Pin the embed to a specific language of the target (a language code such as
|
|
251
|
+
* `'fi'`), independent of the surrounding render's language. Use this to embed
|
|
252
|
+
* a fixed-language version of the target no matter which language the
|
|
253
|
+
* surrounding video is rendered in. When the target has no finished render in
|
|
254
|
+
* this language, the dependent render FAILS explicitly (the error lists the
|
|
255
|
+
* languages the target does have) rather than falling back to another one.
|
|
256
|
+
* Omit to inherit the surrounding render's language (embedding the target's
|
|
257
|
+
* output for the matching language, or its single language when unambiguous).
|
|
258
|
+
*/
|
|
259
|
+
language?: string;
|
|
239
260
|
};
|
|
240
261
|
/** Brand identifying a {@link selected} render-dependency overlay input. */
|
|
241
262
|
declare const DEPENDENCY_INPUT_BRAND: "__screenciSelectedDependency";
|
|
@@ -268,6 +289,11 @@ export type DependencyOverlayInput = {
|
|
|
268
289
|
* track for the window it plays, wherever the surrounding video has no competing
|
|
269
290
|
* narration of its own (off by default).
|
|
270
291
|
*
|
|
292
|
+
* By default the embed follows the surrounding render's language. Pass
|
|
293
|
+
* `{ language: 'fi' }` to pin a specific language of the target instead: the
|
|
294
|
+
* dependent render then fails explicitly (listing the target's available
|
|
295
|
+
* languages) when the target has no finished render in that language.
|
|
296
|
+
*
|
|
271
297
|
* @example
|
|
272
298
|
* ```ts
|
|
273
299
|
* video.overlays({ intro: selected('Intro Clip') })(
|
|
@@ -278,6 +304,17 @@ export type DependencyOverlayInput = {
|
|
|
278
304
|
* }
|
|
279
305
|
* )
|
|
280
306
|
* ```
|
|
307
|
+
*
|
|
308
|
+
* @example
|
|
309
|
+
* ```ts
|
|
310
|
+
* // Always embed the Finnish intro, whatever language the demo renders in.
|
|
311
|
+
* video.overlays({ intro: selected('Intro Clip', { language: 'fi' }) })(
|
|
312
|
+
* 'Full Demo',
|
|
313
|
+
* async ({ overlays }) => {
|
|
314
|
+
* await overlays.intro()
|
|
315
|
+
* }
|
|
316
|
+
* )
|
|
317
|
+
* ```
|
|
281
318
|
*/
|
|
282
319
|
export declare function selected(name: string, options?: DependencyOverlayOptions): DependencyOverlayInput;
|
|
283
320
|
/**
|
package/dist/src/asset.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"asset.d.ts","sourceRoot":"","sources":["../../src/asset.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AACrD,OAAO,EAEL,KAAK,cAAc,EAEnB,KAAK,WAAW,EAGjB,MAAM,aAAa,CAAA;AACpB,OAAO,EAAuB,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"asset.d.ts","sourceRoot":"","sources":["../../src/asset.ts"],"names":[],"mappings":"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"}
|
package/dist/src/asset.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { timelineAnchorFields, } from './events.js';
|
|
2
2
|
import { parseTimelineOffset } from './timelineOffset.js';
|
|
3
|
+
import { isMouseVisible } from './mouse.js';
|
|
3
4
|
import { validateCrop, resolveSourceTrim } from './sourceTrim.js';
|
|
4
5
|
import { overlayRect } from './overlayRect.js';
|
|
5
6
|
import { captureCallerFile } from './callerFile.js';
|
|
@@ -9,7 +10,7 @@ import { dirname, resolve } from 'path';
|
|
|
9
10
|
import { resolveRecordingTimingDuration } from './runtimeMode.js';
|
|
10
11
|
import { resolveOverlayCss, DEFAULT_OVERLAY_DEVICE_SCALE_FACTOR, DEFAULT_ANIMATION_FPS, } from './htmlRasterizer.js';
|
|
11
12
|
export { setOverlayCss } from './htmlRasterizer.js';
|
|
12
|
-
import { getScreenCIRuntimeContext, getRuntimeAssetRecorder, getRuntimePage, getRuntimeRecordingDir, setRuntimeAssetRecorder, resetAssetRuntimeState, } from './runtimeContext.js';
|
|
13
|
+
import { getScreenCIRuntimeContext, getRuntimeAssetRecorder, getRuntimePage, getRuntimeRecordingDir, setRuntimeAssetRecorder, resetAssetRuntimeState, isScreenshotCapture, } from './runtimeContext.js';
|
|
13
14
|
/**
|
|
14
15
|
* Upper bound for an audio level (linear gain). `4` is +12 dB, plenty of
|
|
15
16
|
* headroom for a boost while guarding against accidental extreme distortion.
|
|
@@ -33,6 +34,11 @@ const DEPENDENCY_INPUT_BRAND = '__screenciSelectedDependency';
|
|
|
33
34
|
* track for the window it plays, wherever the surrounding video has no competing
|
|
34
35
|
* narration of its own (off by default).
|
|
35
36
|
*
|
|
37
|
+
* By default the embed follows the surrounding render's language. Pass
|
|
38
|
+
* `{ language: 'fi' }` to pin a specific language of the target instead: the
|
|
39
|
+
* dependent render then fails explicitly (listing the target's available
|
|
40
|
+
* languages) when the target has no finished render in that language.
|
|
41
|
+
*
|
|
36
42
|
* @example
|
|
37
43
|
* ```ts
|
|
38
44
|
* video.overlays({ intro: selected('Intro Clip') })(
|
|
@@ -43,6 +49,17 @@ const DEPENDENCY_INPUT_BRAND = '__screenciSelectedDependency';
|
|
|
43
49
|
* }
|
|
44
50
|
* )
|
|
45
51
|
* ```
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* ```ts
|
|
55
|
+
* // Always embed the Finnish intro, whatever language the demo renders in.
|
|
56
|
+
* video.overlays({ intro: selected('Intro Clip', { language: 'fi' }) })(
|
|
57
|
+
* 'Full Demo',
|
|
58
|
+
* async ({ overlays }) => {
|
|
59
|
+
* await overlays.intro()
|
|
60
|
+
* }
|
|
61
|
+
* )
|
|
62
|
+
* ```
|
|
46
63
|
*/
|
|
47
64
|
export function selected(name, options) {
|
|
48
65
|
if (typeof name !== 'string' || name.trim().length === 0) {
|
|
@@ -260,6 +277,7 @@ function buildOverlayFromConfig(name, config) {
|
|
|
260
277
|
});
|
|
261
278
|
const fullScreen = config.fill === 'screen';
|
|
262
279
|
const pinToScreen = config.pinToScreen === true;
|
|
280
|
+
const hideMouse = config.hideMouse === true;
|
|
263
281
|
const animate = config.animate === true;
|
|
264
282
|
// Parse the relative `duration` string into ms once; reused by every branch.
|
|
265
283
|
const configDurationMs = resolveConfigDuration(name, config.duration);
|
|
@@ -295,9 +313,9 @@ function buildOverlayFromConfig(name, config) {
|
|
|
295
313
|
? () => renderElementToMarkup(name, config.element)
|
|
296
314
|
: () => Promise.resolve(config.html);
|
|
297
315
|
if (animate) {
|
|
298
|
-
return createAnimatedOverlayController(name, getMarkup, placementSource, fullScreen, pinToScreen, config.fps, configDurationMs, renderOpts);
|
|
316
|
+
return createAnimatedOverlayController(name, getMarkup, placementSource, fullScreen, pinToScreen, hideMouse, config.fps, configDurationMs, renderOpts);
|
|
299
317
|
}
|
|
300
|
-
return createRenderedOverlayController(name, getMarkup, placementSource, fullScreen, pinToScreen, configDurationMs, renderOpts);
|
|
318
|
+
return createRenderedOverlayController(name, getMarkup, placementSource, fullScreen, pinToScreen, hideMouse, configDurationMs, renderOpts);
|
|
301
319
|
}
|
|
302
320
|
const path = config.path;
|
|
303
321
|
const extension = getAssetExtension(path);
|
|
@@ -328,9 +346,9 @@ function buildOverlayFromConfig(name, config) {
|
|
|
328
346
|
registerAssetPath(path);
|
|
329
347
|
const getMarkup = () => readHtmlOverlayFile(path);
|
|
330
348
|
if (animate) {
|
|
331
|
-
return createAnimatedOverlayController(name, getMarkup, placementSource, fullScreen, pinToScreen, config.fps, configDurationMs, renderOpts);
|
|
349
|
+
return createAnimatedOverlayController(name, getMarkup, placementSource, fullScreen, pinToScreen, hideMouse, config.fps, configDurationMs, renderOpts);
|
|
332
350
|
}
|
|
333
|
-
return createRenderedOverlayController(name, getMarkup, placementSource, fullScreen, pinToScreen, configDurationMs, renderOpts);
|
|
351
|
+
return createRenderedOverlayController(name, getMarkup, placementSource, fullScreen, pinToScreen, hideMouse, configDurationMs, renderOpts);
|
|
334
352
|
}
|
|
335
353
|
// File-backed image / video overlays.
|
|
336
354
|
if (extension === '.svg' || extension === '.png') {
|
|
@@ -349,7 +367,7 @@ function buildOverlayFromConfig(name, config) {
|
|
|
349
367
|
...(pinToScreen && { pinToScreen: true }),
|
|
350
368
|
...(configDurationMs !== undefined && { durationMs: configDurationMs }),
|
|
351
369
|
...(config.crop !== undefined && { crop: config.crop }),
|
|
352
|
-
});
|
|
370
|
+
}, hideMouse);
|
|
353
371
|
}
|
|
354
372
|
if (extension === '.mp4') {
|
|
355
373
|
if (config.duration !== undefined) {
|
|
@@ -379,7 +397,7 @@ function buildOverlayFromConfig(name, config) {
|
|
|
379
397
|
...(config.crop !== undefined && { crop: config.crop }),
|
|
380
398
|
...(sourceStart !== undefined && { sourceStart }),
|
|
381
399
|
...(sourceEnd !== undefined && { sourceEnd }),
|
|
382
|
-
});
|
|
400
|
+
}, hideMouse);
|
|
383
401
|
}
|
|
384
402
|
throw new Error(`[screenci] Overlay "${name}" must use one of: .html, .svg, .png, .mp4. Received: ${path}`);
|
|
385
403
|
}
|
|
@@ -610,12 +628,17 @@ function resolveConfigDuration(name, duration) {
|
|
|
610
628
|
return undefined;
|
|
611
629
|
return resolveRelativeDuration(duration, `Overlay "${name}" duration`);
|
|
612
630
|
}
|
|
613
|
-
function createActiveAssetRun(startedWithExplicitStart) {
|
|
631
|
+
function createActiveAssetRun(startedWithExplicitStart, hideMouse) {
|
|
614
632
|
let resolve;
|
|
615
633
|
const finished = new Promise((resolveFn) => {
|
|
616
634
|
resolve = resolveFn;
|
|
617
635
|
});
|
|
618
|
-
return {
|
|
636
|
+
return {
|
|
637
|
+
finished,
|
|
638
|
+
resolveFinished: resolve,
|
|
639
|
+
startedWithExplicitStart,
|
|
640
|
+
hideMouse,
|
|
641
|
+
};
|
|
619
642
|
}
|
|
620
643
|
/**
|
|
621
644
|
* Ends a single live overlay identified by name, emitting its `assetEnd`,
|
|
@@ -630,15 +653,63 @@ function endLiveAsset(name, reason) {
|
|
|
630
653
|
getRuntimeAssetRecorder().addAssetEnd(name, reason);
|
|
631
654
|
sleepForAssetFrameGap();
|
|
632
655
|
context.asset.activeRuns.delete(name);
|
|
656
|
+
if (run.hideMouse)
|
|
657
|
+
performOverlayMouseShow();
|
|
633
658
|
run.resolveFinished();
|
|
634
659
|
}
|
|
635
|
-
function createAssetControllerCore(name, validate, emitStart,
|
|
636
660
|
/**
|
|
637
|
-
*
|
|
638
|
-
*
|
|
639
|
-
*
|
|
661
|
+
* Hide the cursor for a `hideMouse` overlay, ref-counted so overlapping overlays
|
|
662
|
+
* only hide once. Reuses the instrumented `page.mouse.hide()`, which records the
|
|
663
|
+
* `mouseHide` event on the shared recorder. When emitted before a blocking
|
|
664
|
+
* overlay's `assetStart`, that event brackets the frozen hold in the rendered
|
|
665
|
+
* timeline (the show emitted after `assetStart` lands past the hold).
|
|
666
|
+
*/
|
|
667
|
+
function performOverlayMouseHide() {
|
|
668
|
+
// Stills hide the cursor by default (see renderOptions.screenshot.mouse.show)
|
|
669
|
+
// and have no timeline to bracket, so hideMouse is a no-op for screenshots.
|
|
670
|
+
if (isScreenshotCapture())
|
|
671
|
+
return;
|
|
672
|
+
const page = getRuntimePage();
|
|
673
|
+
if (page === null)
|
|
674
|
+
return;
|
|
675
|
+
const state = getScreenCIRuntimeContext().asset.mouseHide;
|
|
676
|
+
state.count += 1;
|
|
677
|
+
// Only the first overlay in an overlapping group changes visibility.
|
|
678
|
+
if (state.count !== 1)
|
|
679
|
+
return;
|
|
680
|
+
// A cursor already hidden (e.g. via page.mouse.hide()) is left as-is, and we
|
|
681
|
+
// remember not to force it back on when the overlay ends.
|
|
682
|
+
if (!isMouseVisible(page)) {
|
|
683
|
+
state.hiddenByOverlay = false;
|
|
684
|
+
return;
|
|
685
|
+
}
|
|
686
|
+
state.hiddenByOverlay = true;
|
|
687
|
+
page.mouse.hide();
|
|
688
|
+
}
|
|
689
|
+
/**
|
|
690
|
+
* Restore the cursor when a `hideMouse` overlay ends. Only acts once the
|
|
691
|
+
* ref-count returns to 0, and only if an overlay was the one that hid it (so a
|
|
692
|
+
* cursor that was already hidden stays hidden).
|
|
640
693
|
*/
|
|
641
|
-
|
|
694
|
+
function performOverlayMouseShow() {
|
|
695
|
+
if (isScreenshotCapture())
|
|
696
|
+
return;
|
|
697
|
+
const page = getRuntimePage();
|
|
698
|
+
if (page === null)
|
|
699
|
+
return;
|
|
700
|
+
const state = getScreenCIRuntimeContext().asset.mouseHide;
|
|
701
|
+
if (state.count === 0)
|
|
702
|
+
return;
|
|
703
|
+
state.count -= 1;
|
|
704
|
+
if (state.count !== 0)
|
|
705
|
+
return;
|
|
706
|
+
if (!state.hiddenByOverlay)
|
|
707
|
+
return;
|
|
708
|
+
state.hiddenByOverlay = false;
|
|
709
|
+
page.mouse.show();
|
|
710
|
+
}
|
|
711
|
+
function createAssetControllerCore(name, validate, emitStart, options = {}) {
|
|
712
|
+
const { prepare, hideMouse = false } = options;
|
|
642
713
|
const start = async (startedWithExplicitStart = true) => {
|
|
643
714
|
await validate();
|
|
644
715
|
await prepare?.({ type: 'live' });
|
|
@@ -647,8 +718,10 @@ prepare) {
|
|
|
647
718
|
if (context.asset.activeRuns.has(name)) {
|
|
648
719
|
throw new Error(`[screenci] Overlay "${name}" is already started. Call end() for it before starting it again.`);
|
|
649
720
|
}
|
|
650
|
-
const run = createActiveAssetRun(startedWithExplicitStart);
|
|
721
|
+
const run = createActiveAssetRun(startedWithExplicitStart, hideMouse);
|
|
651
722
|
context.asset.activeRuns.set(name, run);
|
|
723
|
+
if (hideMouse)
|
|
724
|
+
performOverlayMouseHide();
|
|
652
725
|
emitStart(recorder, { type: 'live' });
|
|
653
726
|
};
|
|
654
727
|
const end = async () => {
|
|
@@ -667,7 +740,14 @@ prepare) {
|
|
|
667
740
|
await validate();
|
|
668
741
|
await prepare?.(mode);
|
|
669
742
|
const recorder = getRuntimeAssetRecorder();
|
|
743
|
+
// Order is load-bearing: the mouseHide must precede the assetStart and the
|
|
744
|
+
// mouseShow follow it, so the renderer's frozen hold (inserted at the
|
|
745
|
+
// assetStart) is bracketed by the hide/show in the final timeline.
|
|
746
|
+
if (hideMouse)
|
|
747
|
+
performOverlayMouseHide();
|
|
670
748
|
emitStart(recorder, mode);
|
|
749
|
+
if (hideMouse)
|
|
750
|
+
performOverlayMouseShow();
|
|
671
751
|
};
|
|
672
752
|
const controller = (async () => {
|
|
673
753
|
// Bare call: hold for the source's natural length. Length-less overlays
|
|
@@ -727,6 +807,9 @@ function createDependencyOverlayController(name, input) {
|
|
|
727
807
|
kind: 'dependency',
|
|
728
808
|
dependency: {
|
|
729
809
|
name: input.name,
|
|
810
|
+
...(input.config.language !== undefined && {
|
|
811
|
+
language: input.config.language,
|
|
812
|
+
}),
|
|
730
813
|
...(input.config.inheritSubtitles === true && {
|
|
731
814
|
inheritSubtitles: true,
|
|
732
815
|
}),
|
|
@@ -740,9 +823,9 @@ function createDependencyOverlayController(name, input) {
|
|
|
740
823
|
...(sourceStart !== undefined && { sourceStart }),
|
|
741
824
|
...(sourceEnd !== undefined && { sourceEnd }),
|
|
742
825
|
});
|
|
743
|
-
});
|
|
826
|
+
}, { hideMouse: input.config.hideMouse === true });
|
|
744
827
|
}
|
|
745
|
-
function createFileOverlayController(name, resolved) {
|
|
828
|
+
function createFileOverlayController(name, resolved, hideMouse) {
|
|
746
829
|
return createAssetControllerCore(name, async () => {
|
|
747
830
|
const testFilePath = getScreenCIRuntimeContext().testFilePath;
|
|
748
831
|
if (testFilePath !== null) {
|
|
@@ -750,13 +833,13 @@ function createFileOverlayController(name, resolved) {
|
|
|
750
833
|
}
|
|
751
834
|
}, (recorder, mode) => {
|
|
752
835
|
recorder.addAssetStart(name, toRecordedFileStart(name, resolved, mode));
|
|
753
|
-
});
|
|
836
|
+
}, { hideMouse });
|
|
754
837
|
}
|
|
755
838
|
/**
|
|
756
839
|
* An overlay rendered to a transparent PNG at recording time, from either an
|
|
757
840
|
* HTML file or a React element. `getMarkup` produces the HTML to rasterize.
|
|
758
841
|
*/
|
|
759
|
-
function createRenderedOverlayController(name, getMarkup, placementSource, fullScreen, pinToScreen, durationMs, renderOpts = {}) {
|
|
842
|
+
function createRenderedOverlayController(name, getMarkup, placementSource, fullScreen, pinToScreen, hideMouse, durationMs, renderOpts = {}) {
|
|
760
843
|
// The markup and placement are resolved during the test (cheap:
|
|
761
844
|
// renderToStaticMarkup / a string, plus a boundingBox read for `over`), but
|
|
762
845
|
// rasterization (a browser screenshot) is deferred to after the test so
|
|
@@ -804,21 +887,24 @@ function createRenderedOverlayController(name, getMarkup, placementSource, fullS
|
|
|
804
887
|
deviceScaleFactor: DEFAULT_OVERLAY_DEVICE_SCALE_FACTOR,
|
|
805
888
|
},
|
|
806
889
|
});
|
|
807
|
-
},
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
890
|
+
}, {
|
|
891
|
+
prepare: async () => {
|
|
892
|
+
if (resolvedHtml !== undefined || skipped)
|
|
893
|
+
return;
|
|
894
|
+
// Resolving an overlay needs an active recording page and output dir.
|
|
895
|
+
// Outside recording (e.g. plain test runs) there is nothing to upload,
|
|
896
|
+
// so the controller is a no-op, mirroring the no-op recorder.
|
|
897
|
+
if (getRuntimePage() === null || getRuntimeRecordingDir() === null) {
|
|
898
|
+
skipped = true;
|
|
899
|
+
return;
|
|
900
|
+
}
|
|
901
|
+
const { placement, sizePx } = await resolvePlacement(placementSource);
|
|
902
|
+
resolvedPlacement = placement;
|
|
903
|
+
const markup = await getMarkup();
|
|
904
|
+
resolvedHtml =
|
|
905
|
+
sizePx !== undefined ? sizeWrapMarkup(markup, sizePx) : markup;
|
|
906
|
+
},
|
|
907
|
+
hideMouse,
|
|
822
908
|
});
|
|
823
909
|
}
|
|
824
910
|
/**
|
|
@@ -832,7 +918,7 @@ function createRenderedOverlayController(name, getMarkup, placementSource, fullS
|
|
|
832
918
|
* the recording, the old "hide block" that cut capture wall-clock from the
|
|
833
919
|
* timeline is no longer needed.
|
|
834
920
|
*/
|
|
835
|
-
function createAnimatedOverlayController(name, getMarkup, placementSource, fullScreen, pinToScreen, fps, configDurationMs, renderOpts = {}) {
|
|
921
|
+
function createAnimatedOverlayController(name, getMarkup, placementSource, fullScreen, pinToScreen, hideMouse, fps, configDurationMs, renderOpts = {}) {
|
|
836
922
|
let resolved;
|
|
837
923
|
let skipped = false;
|
|
838
924
|
const resolveDurationMs = (mode) => {
|
|
@@ -879,21 +965,24 @@ function createAnimatedOverlayController(name, getMarkup, placementSource, fullS
|
|
|
879
965
|
durationMs: resolved.durationMs,
|
|
880
966
|
},
|
|
881
967
|
});
|
|
882
|
-
},
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
968
|
+
}, {
|
|
969
|
+
prepare: async (mode) => {
|
|
970
|
+
// Outside recording there is nothing to upload, so the controller is a
|
|
971
|
+
// no-op, mirroring the no-op recorder and the static rendered controller.
|
|
972
|
+
if (getRuntimePage() === null || getRuntimeRecordingDir() === null) {
|
|
973
|
+
skipped = true;
|
|
974
|
+
return;
|
|
975
|
+
}
|
|
976
|
+
const durationMs = resolveDurationMs(mode);
|
|
977
|
+
const { placement, sizePx } = await resolvePlacement(placementSource);
|
|
978
|
+
const markup = await getMarkup();
|
|
979
|
+
resolved = {
|
|
980
|
+
html: sizePx !== undefined ? sizeWrapMarkup(markup, sizePx) : markup,
|
|
981
|
+
durationMs,
|
|
982
|
+
...(placement !== undefined && { placement }),
|
|
983
|
+
};
|
|
984
|
+
},
|
|
985
|
+
hideMouse,
|
|
897
986
|
});
|
|
898
987
|
}
|
|
899
988
|
function getAssetExtension(path) {
|