screenci 0.0.89 → 0.0.91

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.
Files changed (130) hide show
  1. package/dist/cli.d.ts +39 -1
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +357 -75
  4. package/dist/cli.js.map +1 -1
  5. package/dist/docs/manifest.d.ts +29 -29
  6. package/dist/docs/manifest.js +9 -9
  7. package/dist/docs/manifest.js.map +1 -1
  8. package/dist/docs/video-sources/assets/StyleCard.d.ts +4 -0
  9. package/dist/docs/video-sources/assets/StyleCard.d.ts.map +1 -0
  10. package/dist/docs/video-sources/assets/StyleCard.js +27 -0
  11. package/dist/docs/video-sources/assets/StyleCard.js.map +1 -0
  12. package/dist/docs/video-sources/camera-and-zooming.screenci.js +2 -9
  13. package/dist/docs/video-sources/camera-and-zooming.screenci.js.map +1 -1
  14. package/dist/docs/video-sources/editor.screenci.d.ts +2 -0
  15. package/dist/docs/video-sources/editor.screenci.d.ts.map +1 -0
  16. package/dist/docs/video-sources/{studio.screenci.js → editor.screenci.js} +18 -19
  17. package/dist/docs/video-sources/editor.screenci.js.map +1 -0
  18. package/dist/docs/video-sources/languages.screenci.js +12 -12
  19. package/dist/docs/video-sources/languages.screenci.js.map +1 -1
  20. package/dist/docs/video-sources/locator-highlight-animated.screenci.js +2 -15
  21. package/dist/docs/video-sources/locator-highlight-animated.screenci.js.map +1 -1
  22. package/dist/docs/video-sources/locator-highlight-still.screenci.js +2 -1
  23. package/dist/docs/video-sources/locator-highlight-still.screenci.js.map +1 -1
  24. package/dist/docs/video-sources/narration.screenci.js +11 -11
  25. package/dist/docs/video-sources/narration.screenci.js.map +1 -1
  26. package/dist/docs/video-sources/public-urls-and-embeds.screenci.js +2 -2
  27. package/dist/docs/video-sources/public-urls-and-embeds.screenci.js.map +1 -1
  28. package/dist/docs/video-sources/speaking-style.screenci.js +4 -28
  29. package/dist/docs/video-sources/speaking-style.screenci.js.map +1 -1
  30. package/dist/docs/videos.d.ts +2 -2
  31. package/dist/docs/videos.js +2 -2
  32. package/dist/e2e/fixtures/ClientCounter.d.ts +5 -0
  33. package/dist/e2e/fixtures/ClientCounter.d.ts.map +1 -0
  34. package/dist/e2e/fixtures/ClientCounter.js +29 -0
  35. package/dist/e2e/fixtures/ClientCounter.js.map +1 -0
  36. package/dist/e2e/htmlRasterizer.e2e.js +104 -23
  37. package/dist/e2e/htmlRasterizer.e2e.js.map +1 -1
  38. package/dist/index.d.ts +4 -5
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/index.js +4 -5
  41. package/dist/index.js.map +1 -1
  42. package/dist/src/anonSession.d.ts +20 -6
  43. package/dist/src/anonSession.d.ts.map +1 -1
  44. package/dist/src/anonSession.js +60 -13
  45. package/dist/src/anonSession.js.map +1 -1
  46. package/dist/src/asset.d.ts +68 -100
  47. package/dist/src/asset.d.ts.map +1 -1
  48. package/dist/src/asset.js +134 -289
  49. package/dist/src/asset.js.map +1 -1
  50. package/dist/src/audio.d.ts +1 -1
  51. package/dist/src/audio.js +1 -1
  52. package/dist/src/builder.d.ts +25 -25
  53. package/dist/src/builder.d.ts.map +1 -1
  54. package/dist/src/builder.js +8 -8
  55. package/dist/src/builder.js.map +1 -1
  56. package/dist/src/clientOverlay.d.ts +29 -0
  57. package/dist/src/clientOverlay.d.ts.map +1 -0
  58. package/dist/src/clientOverlay.js +83 -0
  59. package/dist/src/clientOverlay.js.map +1 -0
  60. package/dist/src/cue.d.ts +9 -9
  61. package/dist/src/cue.d.ts.map +1 -1
  62. package/dist/src/cue.js +6 -6
  63. package/dist/src/cue.js.map +1 -1
  64. package/dist/src/declare.d.ts +6 -6
  65. package/dist/src/declare.d.ts.map +1 -1
  66. package/dist/src/declare.js +9 -9
  67. package/dist/src/declare.js.map +1 -1
  68. package/dist/src/events.d.ts +14 -46
  69. package/dist/src/events.d.ts.map +1 -1
  70. package/dist/src/events.js +14 -24
  71. package/dist/src/events.js.map +1 -1
  72. package/dist/src/htmlRasterizer.d.ts +21 -42
  73. package/dist/src/htmlRasterizer.d.ts.map +1 -1
  74. package/dist/src/htmlRasterizer.js +47 -66
  75. package/dist/src/htmlRasterizer.js.map +1 -1
  76. package/dist/src/init.d.ts +2 -1
  77. package/dist/src/init.d.ts.map +1 -1
  78. package/dist/src/init.js +131 -137
  79. package/dist/src/init.js.map +1 -1
  80. package/dist/src/instrument.d.ts.map +1 -1
  81. package/dist/src/instrument.js +146 -0
  82. package/dist/src/instrument.js.map +1 -1
  83. package/dist/src/localize.d.ts +17 -11
  84. package/dist/src/localize.d.ts.map +1 -1
  85. package/dist/src/localize.js +1 -1
  86. package/dist/src/localize.js.map +1 -1
  87. package/dist/src/localizeRuntime.d.ts +8 -8
  88. package/dist/src/localizeRuntime.d.ts.map +1 -1
  89. package/dist/src/localizeRuntime.js +4 -4
  90. package/dist/src/localizeRuntime.js.map +1 -1
  91. package/dist/src/manualZoom.d.ts.map +1 -1
  92. package/dist/src/manualZoom.js +8 -3
  93. package/dist/src/manualZoom.js.map +1 -1
  94. package/dist/src/overlayFlush.js +6 -6
  95. package/dist/src/overlayFlush.js.map +1 -1
  96. package/dist/src/recordingData.d.ts +2 -2
  97. package/dist/src/runtimeContext.d.ts +0 -11
  98. package/dist/src/runtimeContext.d.ts.map +1 -1
  99. package/dist/src/runtimeContext.js +0 -7
  100. package/dist/src/runtimeContext.js.map +1 -1
  101. package/dist/src/screenshot.d.ts +7 -7
  102. package/dist/src/screenshot.d.ts.map +1 -1
  103. package/dist/src/studio.d.ts +41 -38
  104. package/dist/src/studio.d.ts.map +1 -1
  105. package/dist/src/studio.js +9 -9
  106. package/dist/src/studio.js.map +1 -1
  107. package/dist/src/types.d.ts +19 -10
  108. package/dist/src/types.d.ts.map +1 -1
  109. package/dist/src/video.d.ts +15 -15
  110. package/dist/src/video.d.ts.map +1 -1
  111. package/dist/src/video.js +10 -10
  112. package/dist/src/video.js.map +1 -1
  113. package/dist/src/voiceConfig.d.ts +26 -7
  114. package/dist/src/voiceConfig.d.ts.map +1 -1
  115. package/dist/src/voices.d.ts +22 -2
  116. package/dist/src/voices.d.ts.map +1 -1
  117. package/dist/src/voices.js +18 -0
  118. package/dist/src/voices.js.map +1 -1
  119. package/dist/tsconfig.tsbuildinfo +1 -1
  120. package/package.json +6 -1
  121. package/skills/screenci/SKILL.md +1 -1
  122. package/skills/screenci/references/init.md +8 -1
  123. package/skills/screenci/references/record.md +1 -1
  124. package/dist/docs/video-sources/studio.screenci.d.ts +0 -2
  125. package/dist/docs/video-sources/studio.screenci.d.ts.map +0 -1
  126. package/dist/docs/video-sources/studio.screenci.js.map +0 -1
  127. package/dist/src/recordingSize.d.ts +0 -32
  128. package/dist/src/recordingSize.d.ts.map +0 -1
  129. package/dist/src/recordingSize.js +0 -54
  130. package/dist/src/recordingSize.js.map +0 -1
@@ -15,6 +15,7 @@ import { getDevBackendUrl } from './linkSession.js';
15
15
  export const ANON_SESSION_FILE = 'anon-session.json';
16
16
  export const ANON_TOKEN_HEADER = 'X-ScreenCI-Anon-Token';
17
17
  export const SECRET_HEADER = 'X-ScreenCI-Secret';
18
+ export const ANON_MAX_VIDEOS_PER_RECORDING = 3;
18
19
  // Canonical Terms of Service URL. Hardcoded like the docs links elsewhere in
19
20
  // the CLI (the legal pages are not environment-specific). Anonymous trial
20
21
  // recordings upload to our servers without an account, so the CLI surfaces this
@@ -42,15 +43,22 @@ async function readAnonSessionFile(screenciDir) {
42
43
  try {
43
44
  const raw = await readFile(getAnonSessionFilePath(screenciDir), 'utf-8');
44
45
  const parsed = JSON.parse(raw);
45
- return typeof parsed.token === 'string' ? parsed.token : null;
46
+ if (typeof parsed.token !== 'string')
47
+ return null;
48
+ return {
49
+ token: parsed.token,
50
+ ...(typeof parsed.recordUrl === 'string'
51
+ ? { recordUrl: parsed.recordUrl }
52
+ : {}),
53
+ };
46
54
  }
47
55
  catch {
48
56
  return null;
49
57
  }
50
58
  }
51
- async function writeAnonSessionFile(screenciDir, token) {
59
+ async function writeAnonSessionFile(screenciDir, session) {
52
60
  mkdirSync(screenciDir, { recursive: true });
53
- await writeFile(getAnonSessionFilePath(screenciDir), `${JSON.stringify({ token }, null, 2)}\n`);
61
+ await writeFile(getAnonSessionFilePath(screenciDir), `${JSON.stringify(session, null, 2)}\n`);
54
62
  }
55
63
  export async function deleteAnonSessionFile(screenciDir) {
56
64
  const path = getAnonSessionFilePath(screenciDir);
@@ -72,11 +80,45 @@ export async function deleteAnonSessionFile(screenciDir) {
72
80
  export async function getOrCreateAnonToken(screenciDir) {
73
81
  const existing = await readAnonSessionFile(screenciDir);
74
82
  if (existing)
75
- return existing;
83
+ return existing.token;
76
84
  const token = randomUUID();
77
- await writeAnonSessionFile(screenciDir, token);
85
+ await writeAnonSessionFile(screenciDir, { token });
78
86
  return token;
79
87
  }
88
+ /**
89
+ * Remembers the successful anonymous recording URL locally so a second
90
+ * anonymous `record` attempt can point back to the trial recording instead of
91
+ * only showing the sign-up URL.
92
+ */
93
+ export async function saveAnonSessionRecordUrl(screenciDir, token, recordUrl) {
94
+ const existing = await readAnonSessionFile(screenciDir);
95
+ await writeAnonSessionFile(screenciDir, {
96
+ ...(existing?.token === token ? existing : {}),
97
+ token,
98
+ recordUrl,
99
+ });
100
+ }
101
+ export async function readAnonSessionRecordUrl(screenciDir) {
102
+ const existing = await readAnonSessionFile(screenciDir);
103
+ return existing?.recordUrl ?? null;
104
+ }
105
+ // How many separate `screenci record` runs an anonymous trial may upload before
106
+ // it must sign up. Kept in sync with ANON_MAX_RECORDINGS server-side.
107
+ export const ANON_MAX_RECORDINGS = 3;
108
+ /** A short "N recordings left" phrase for the anonymous trial. */
109
+ export function formatAnonRecordingsLeft(remaining) {
110
+ if (remaining <= 0) {
111
+ return 'That was your last free trial recording. Sign up to record more.';
112
+ }
113
+ return `${remaining} free trial recording${remaining === 1 ? '' : 's'} left. Sign up to record without limits.`;
114
+ }
115
+ /** A single-line notice shown after an anonymous recording succeeds. */
116
+ export function formatAnonPostRecordNotice(remaining) {
117
+ if (remaining <= 0) {
118
+ return 'Recorded without an account. That was your last free trial recording. Sign up to keep it and record more.';
119
+ }
120
+ return `Recorded without an account. ${remaining} free trial recording${remaining === 1 ? '' : 's'} left. Sign up to keep it and record without limits.`;
121
+ }
80
122
  /**
81
123
  * Checks the server-side status of a locally stored anon token: still pending
82
124
  * (with `used` telling whether the one free trial recording is already spent),
@@ -101,21 +143,26 @@ export async function checkAnonSessionStatus(token, options = {}) {
101
143
  return { status: 'expired' };
102
144
  if (body.status === 'not_found')
103
145
  return { status: 'not_found' };
104
- return { status: 'pending', used: body.used === true };
146
+ const remaining = typeof body.remaining === 'number'
147
+ ? body.remaining
148
+ : body.used === true
149
+ ? 0
150
+ : ANON_MAX_RECORDINGS;
151
+ return { status: 'pending', used: remaining <= 0, remaining };
105
152
  }
106
153
  catch {
107
- return { status: 'pending', used: false };
154
+ return { status: 'pending', used: false, remaining: ANON_MAX_RECORDINGS };
108
155
  }
109
156
  }
110
157
  /**
111
158
  * Decides whether a fresh anonymous `record` is allowed to START, given the
112
- * session's current status. An anonymous trial gets exactly one recording:
113
- * once it is used (a pending session that already spent its trial) or the
114
- * session has expired, a second recording is refused up front so the user is
115
- * told to sign up before anything renders, rather than silently minting a new
159
+ * session's current status. An anonymous trial gets up to ANON_MAX_RECORDINGS
160
+ * recordings: once all are used (a pending session that has spent its trial) or
161
+ * the session has expired, a further recording is refused up front so the user
162
+ * is told to sign up before anything renders, rather than silently minting a new
116
163
  * trial or only failing after the whole recording ran. A first-run token the
117
- * server has not seen yet (`not_found`), a pending-but-unused session, and a
118
- * `claimed` session (the upload path self-upgrades to the real secret) all
164
+ * server has not seen yet (`not_found`), a pending session with recordings left,
165
+ * and a `claimed` session (the upload path self-upgrades to the real secret) all
119
166
  * proceed.
120
167
  */
121
168
  export function evaluateAnonRecordingGate(status) {
@@ -1 +1 @@
1
- {"version":3,"file":"anonSession.js","sourceRoot":"","sources":["../../src/anonSession.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"anonSession.js","sourceRoot":"","sources":["../../src/anonSession.ts"],"names":[],"mappings":"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"}
@@ -2,20 +2,9 @@ import type { Locator } from '@playwright/test';
2
2
  import type { NormalizedFeature } from './declare.js';
3
3
  import { type IEventRecorder, type OverlayCrop } from './events.js';
4
4
  import { type TimelineOffset } from './timelineOffset.js';
5
- export { setOverlayCss } from './htmlRasterizer.js';
6
5
  export type { OverlayPlacement, OverlayCrop } from './events.js';
7
- /**
8
- * Minimal structural stand-in for a React element. Defined here so the core SDK
9
- * never has to depend on `@types/react`: any JSX element is assignable to this,
10
- * while a plain {@link OverlayConfig} object is not (it has no `type`/`props`).
11
- * React itself is detected structurally at runtime and rendered lazily, so it
12
- * stays an optional peer dependency.
13
- */
14
- export type ReactElementLike = {
15
- type: unknown;
16
- props: unknown;
17
- key?: string | null;
18
- };
6
+ /** A relative overlay length: a time string (`'2s'`, `'0:02'`) or milliseconds. */
7
+ export type OverlayDuration = TimelineOffset | number;
19
8
  /**
20
9
  * Placement and capture fields shared by every overlay variant. Placement is
21
10
  * flat (not nested) and uses CSS pixels in the recording viewport (the same
@@ -64,37 +53,27 @@ type OverlayCommon = {
64
53
  */
65
54
  margin?: number;
66
55
  /**
67
- * Default visible length, as a relative time string (`'2s'`, `'0:02'`), used
68
- * when the overlay is shown with a bare call (`await overlays.logo()`) or
69
- * `.for()` without its own length. Seconds/timecode only (no percentage).
70
- * Omit when driving with `start()`/`end()`. Image/HTML/React overlays only.
56
+ * Default visible length, as a relative time string (`'2s'`, `'0:02'`) or a
57
+ * number of milliseconds, used when the overlay is shown with a bare call
58
+ * (`await overlays.logo()`) or `.for()` without its own length.
59
+ * Seconds/timecode only (no percentage). Omit when driving with
60
+ * `start()`/`end()`. Image/HTML/React overlays only.
71
61
  *
72
62
  * For animated overlays (`animate: true`) this is also the capture length: it
73
63
  * is required when driving with `start()`/`end()` (the capture length is
74
64
  * otherwise unknown).
75
65
  */
76
- duration?: TimelineOffset;
66
+ duration?: OverlayDuration;
77
67
  /**
78
68
  * Capture the overlay as an animation so its CSS/JS animation plays back in
79
- * the video (HTML files and React elements only). The animation is sampled
80
- * over the resolved duration with a transparent background preserved.
69
+ * the video (`.html`/`.tsx` page overlays only). The animation is sampled over
70
+ * the resolved duration with a transparent background preserved. The page's own
71
+ * `<script>` / React effects are advanced by a deterministic virtual clock, so
72
+ * `setTimeout`/`requestAnimationFrame`-driven animation is reproducible.
81
73
  */
82
74
  animate?: boolean;
83
75
  /** Animation capture frame rate. Only valid with `animate`. Defaults to `30`. */
84
76
  fps?: number;
85
- /**
86
- * Extra CSS injected into the overlay document so it can be styled with
87
- * `className` (for example a compiled Tailwind stylesheet). Merged on top of
88
- * any global CSS set via `setOverlayCss`. HTML files and React elements only.
89
- */
90
- css?: string;
91
- /**
92
- * Transparent padding (CSS px) added around the overlay content. Lets an
93
- * animation move, scale, or rotate beyond its box without being clipped (an
94
- * automatic "stage"), at the cost of the placement sizing the padded box.
95
- * HTML files and React elements only.
96
- */
97
- capturePadding?: number;
98
77
  /**
99
78
  * Crop a rectangle of the SOURCE file before it is placed/scaled, in the
100
79
  * source's own pixels (top-left origin), like Playwright's
@@ -162,64 +141,55 @@ type OverlayVideoFields = {
162
141
  end?: TimelineOffset;
163
142
  };
164
143
  /**
165
- * An overlay drawn from a file `path`: `.svg`/`.png` (image), `.mp4` (video),
166
- * or `.html` (rendered). Only this variant accepts the {@link OverlayVideoFields}
167
- * (`volume`/`speed`/`time`), which apply to `.mp4` files; they are rejected at
168
- * recording time for image and HTML files.
144
+ * A full React page overlay: `path` ends in `.tsx`. The module default-exports a
145
+ * React component that screenci bundles (with esbuild, an optional peer
146
+ * dependency) and renders CLIENT-SIDE in the browser during capture, so the full
147
+ * React runtime runs: function components with hooks and effects, class
148
+ * components with lifecycle and state, inline styles, and `className`. With
149
+ * `animate: true` the mounted app is advanced by the deterministic virtual clock
150
+ * that samples each frame, so effect timers / `requestAnimationFrame` / state
151
+ * updates drive the captured frames reproducibly.
152
+ *
153
+ * `props` are passed to the component. They are the ONLY overlay variant that
154
+ * accepts `props`, enforced at the type level by the `.tsx` path suffix.
169
155
  */
170
- export type FileOverlayConfig = OverlayCommon & OverlayVideoFields & {
171
- /** File path: `.html` (rendered), `.svg`/`.png` (image), or `.mp4` (video). */
172
- path: string;
173
- element?: never;
174
- html?: never;
156
+ export type TsxOverlayConfig = OverlayCommon & {
157
+ /** Path to a `.tsx` module that default-exports a React component, resolved relative to the recording file. */
158
+ path: `${string}.tsx`;
159
+ /** Serializable props passed to the component (a `.tsx` overlay only). */
160
+ props?: Record<string, unknown>;
175
161
  };
176
162
  /**
177
- * An overlay rendered from a React `element` to a transparent PNG (or animated
178
- * clip). Use this for overlays built in JSX. Video-only fields
179
- * (`volume`/`speed`/`time`) do not apply.
163
+ * A full HTML page overlay: `path` ends in `.html`. The file is loaded as a
164
+ * complete standalone document, so its own `<style>` and `<script>` run (the
165
+ * script is advanced by the virtual clock when `animate: true`). Author the page
166
+ * with a transparent background (`html,body{background:transparent}`) and, for
167
+ * tight sizing, wrap the content in `<div id="screenci-overlay-root">`. No
168
+ * `props` (a full page owns its own content).
180
169
  */
181
- export type ElementOverlayConfig = OverlayCommon & {
182
- /** A React element, rendered to a transparent PNG. */
183
- element: ReactElementLike;
184
- path?: never;
185
- html?: never;
186
- volume?: never;
187
- speed?: never;
188
- time?: never;
189
- start?: never;
190
- end?: never;
191
- crop?: never;
170
+ export type HtmlPageOverlayConfig = OverlayCommon & {
171
+ /** Path to a full `.html` document, resolved relative to the recording file. */
172
+ path: `${string}.html`;
173
+ props?: never;
192
174
  };
193
175
  /**
194
- * An overlay rendered from an inline `html` fragment to a transparent PNG (or
195
- * animated clip). Use this when you want plain HTML without a React dependency
196
- * or a separate `.html` file. The markup must be a single-rooted fragment (for
197
- * example `'<div class="badge">New</div>'`), never a full document: it must
198
- * contain exactly one top-level element, and `<!doctype>`, `<html>`, `<head>`,
199
- * and `<body>` tags are rejected because screenci wraps the markup in its own
200
- * document. Video-only fields (`volume`/`speed`/`time`) do not apply.
176
+ * An image (`.svg`/`.png`) or video (`.mp4`) file overlay. Only this variant
177
+ * accepts the {@link OverlayVideoFields} (`volume`/`speed`/`time`/`start`/`end`),
178
+ * which apply to `.mp4` files and are rejected at recording time for images. No
179
+ * `props`.
201
180
  */
202
- export type HtmlOverlayConfig = OverlayCommon & {
203
- /** An inline HTML fragment (single root element), rendered to a PNG. */
204
- html: string;
205
- path?: never;
206
- element?: never;
207
- volume?: never;
208
- speed?: never;
209
- time?: never;
210
- start?: never;
211
- end?: never;
212
- crop?: never;
181
+ export type MediaOverlayConfig = OverlayCommon & OverlayVideoFields & {
182
+ /** File path: `.svg`/`.png` (image) or `.mp4` (video). */
183
+ path: string;
184
+ props?: never;
213
185
  };
214
186
  /**
215
- * Display options for an overlay. An overlay draws its content from exactly one
216
- * source, which selects the variant: a file {@link FileOverlayConfig.path}, a
217
- * React {@link ElementOverlayConfig.element}, or an inline
218
- * {@link HtmlOverlayConfig.html} fragment. The `path` variant additionally
219
- * accepts the video-only `volume`/`speed`/`time` fields (for `.mp4` files); the
220
- * others reject them at compile time.
187
+ * Display options for an overlay. Content always comes from a file `path`; the
188
+ * extension selects the variant: `.tsx` (a client-rendered React page, the only
189
+ * variant accepting `props`), `.html` (a full HTML document), or `.svg`/`.png`/
190
+ * `.mp4` (image/video, the only variant accepting the video-only fields).
221
191
  */
222
- export type OverlayConfig = FileOverlayConfig | ElementOverlayConfig | HtmlOverlayConfig;
192
+ export type OverlayConfig = TsxOverlayConfig | HtmlPageOverlayConfig | MediaOverlayConfig;
223
193
  /**
224
194
  * Upper bound for an audio level (linear gain). `4` is +12 dB, plenty of
225
195
  * headroom for a boost while guarding against accidental extreme distortion.
@@ -321,25 +291,23 @@ export declare function selected(name: string, options?: DependencyOverlayOption
321
291
  /**
322
292
  * A value accepted by {@link createOverlays} for each key:
323
293
  *
324
- * - a `string` file path (`.html`/`.svg`/`.png`/`.mp4`),
325
- * - a React element,
294
+ * - a `string` file path (`.tsx`/`.html`/`.svg`/`.png`/`.mp4`),
326
295
  * - an {@link OverlayConfig} object, or
327
296
  * - a {@link selected} render dependency.
328
297
  */
329
- export type OverlayInput = string | ReactElementLike | OverlayConfig | DependencyOverlayInput;
298
+ export type OverlayInput = string | OverlayConfig | DependencyOverlayInput;
330
299
  /**
331
300
  * A factory that builds an {@link OverlayConfig} from caller-supplied props.
332
- * Use this to make an overlay programmatic: the returned config (its content and
333
- * its placement) can depend on values only known at runtime, for example a
334
- * locator's position captured with {@link overlayRect}. Both the `element`/`html`
335
- * content and the placement may vary per call.
301
+ * Use this to make an overlay programmatic: the returned config (its `path`,
302
+ * `props`, and placement) can depend on values only known at runtime, for
303
+ * example a locator's position captured with {@link overlayRect}.
336
304
  *
337
305
  * @example
338
306
  * ```tsx
339
307
  * const overlays = createOverlays({
340
- * note: (p: { text: string }) => ({ html: `<div class="note">${p.text}</div>` }),
308
+ * ring: (t: Locator) => ({ path: './ring.html', over: t, margin: 6 }),
341
309
  * })
342
- * await overlays.note({ text: 'Saved' })(1200)
310
+ * await overlays.ring(saveButton).for('1.2s')
343
311
  * ```
344
312
  */
345
313
  export type OverlayConfigFactory<P = unknown> = (props: P) => OverlayConfig;
@@ -413,12 +381,12 @@ export type OverlayController = {
413
381
  */
414
382
  (): Promise<void>;
415
383
  /**
416
- * Hold the overlay for a relative length, e.g. `.for('2s')` or `.for('0:02')`.
417
- * Seconds and timecodes only; a percentage is rejected (a relative length has
418
- * nothing to take a percentage of). Not for `.mp4`/animated overlays, whose
419
- * length is fixed.
384
+ * Hold the overlay for a relative length, e.g. `.for('2s')`, `.for('0:02')`,
385
+ * or `.for(2000)`. String seconds/timecodes and numeric milliseconds are
386
+ * accepted; a percentage is rejected (a relative length has nothing to take a
387
+ * percentage of). Not for `.mp4`/animated overlays, whose length is fixed.
420
388
  */
421
- for(duration: TimelineOffset): Promise<void>;
389
+ for(duration: OverlayDuration): Promise<void>;
422
390
  /**
423
391
  * Keep the overlay visible until this absolute point in the final video (a
424
392
  * `'<n>s'`/timecode position, or a `'<n>%'` fraction). Supported for image,
@@ -457,8 +425,8 @@ export type Overlays<T extends Record<string, OverlayInputOrFactory>> = {
457
425
  * `element`, or an inline `html` fragment.
458
426
  *
459
427
  * Calling a controller shows the overlay in the recording timeline. Image
460
- * (`.svg`/`.png`), HTML, and React overlays need a `durationMs` (in the config
461
- * or passed to the blocking call) unless driven with `start()`/`end()`; `.mp4`
428
+ * (`.svg`/`.png`), HTML, and React overlays need a `duration` (in the config
429
+ * or passed to `.for(...)`) unless driven with `start()`/`end()`; `.mp4`
462
430
  * overlays use their natural duration and default `audio` to `1` (natural level).
463
431
  *
464
432
  * Placement defaults to the full recording area (`relativeTo: 'recording'`);
@@ -478,20 +446,20 @@ export type Overlays<T extends Record<string, OverlayInputOrFactory>> = {
478
446
  * video('Product demo', async ({ page }) => {
479
447
  * await overlays.intro()
480
448
  * await page.goto('/dashboard')
481
- * await overlays.logo(1200)
449
+ * await overlays.logo.for(1200)
482
450
  * })
483
451
  * ```
484
452
  *
485
453
  * A value can also be an {@link OverlayConfigFactory} `(props) => OverlayConfig`,
486
454
  * making the overlay programmatic. Calling `overlays.name(props)` builds and
487
- * returns a controller you then drive with `(durationMs)`, `start()`, or
455
+ * returns a controller you then drive with `.for(...)`, `start()`, or
488
456
  * `end()`. The factory runs (and its config is validated) on each call, so
489
457
  * content and placement can depend on runtime values.
490
458
  */
491
459
  export declare function createOverlays<const T extends Record<string, OverlayInputOrFactory>>(overlays: T): Overlays<T>;
492
460
  /**
493
461
  * Builds overlay controllers for Studio-managed overlays declared via
494
- * `video.studio({ overlays: [...] })`. Their file (`.svg`, `.png`, or `.mp4`),
462
+ * `video.overlays(editable([...]))`. Their file (`.svg`, `.png`, or `.mp4`),
495
463
  * placement, image duration, and video audio level are configured on the
496
464
  * ScreenCI Studio page instead of in code. Each name becomes a callable overlay
497
465
  * controller with the same timeline behavior as a {@link createOverlays}
@@ -1 +1 @@
1
- {"version":3,"file":"asset.d.ts","sourceRoot":"","sources":["../../src/asset.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"asset.d.ts","sourceRoot":"","sources":["../../src/asset.ts"],"names":[],"mappings":"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"}