screenci 0.0.89 → 0.0.90
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/docs/video-sources/assets/StyleCard.d.ts +4 -0
- package/dist/docs/video-sources/assets/StyleCard.d.ts.map +1 -0
- package/dist/docs/video-sources/assets/StyleCard.js +27 -0
- package/dist/docs/video-sources/assets/StyleCard.js.map +1 -0
- package/dist/docs/video-sources/locator-highlight-animated.screenci.js +2 -15
- package/dist/docs/video-sources/locator-highlight-animated.screenci.js.map +1 -1
- package/dist/docs/video-sources/locator-highlight-still.screenci.js +2 -1
- package/dist/docs/video-sources/locator-highlight-still.screenci.js.map +1 -1
- package/dist/docs/video-sources/speaking-style.screenci.js +4 -28
- package/dist/docs/video-sources/speaking-style.screenci.js.map +1 -1
- package/dist/e2e/fixtures/ClientCounter.d.ts +5 -0
- package/dist/e2e/fixtures/ClientCounter.d.ts.map +1 -0
- package/dist/e2e/fixtures/ClientCounter.js +29 -0
- package/dist/e2e/fixtures/ClientCounter.js.map +1 -0
- package/dist/e2e/htmlRasterizer.e2e.js +104 -23
- package/dist/e2e/htmlRasterizer.e2e.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/src/asset.d.ts +50 -85
- package/dist/src/asset.d.ts.map +1 -1
- package/dist/src/asset.js +116 -278
- package/dist/src/asset.js.map +1 -1
- package/dist/src/clientOverlay.d.ts +29 -0
- package/dist/src/clientOverlay.d.ts.map +1 -0
- package/dist/src/clientOverlay.js +82 -0
- package/dist/src/clientOverlay.js.map +1 -0
- package/dist/src/events.d.ts +6 -4
- package/dist/src/events.d.ts.map +1 -1
- package/dist/src/events.js.map +1 -1
- package/dist/src/htmlRasterizer.d.ts +21 -42
- package/dist/src/htmlRasterizer.d.ts.map +1 -1
- package/dist/src/htmlRasterizer.js +47 -66
- package/dist/src/htmlRasterizer.js.map +1 -1
- package/dist/src/init.d.ts.map +1 -1
- package/dist/src/init.js +56 -13
- package/dist/src/init.js.map +1 -1
- package/dist/src/overlayFlush.js +6 -6
- package/dist/src/overlayFlush.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +6 -1
- package/skills/screenci/references/init.md +8 -1
package/dist/src/asset.d.ts
CHANGED
|
@@ -2,20 +2,7 @@ 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
|
-
};
|
|
19
6
|
/**
|
|
20
7
|
* Placement and capture fields shared by every overlay variant. Placement is
|
|
21
8
|
* flat (not nested) and uses CSS pixels in the recording viewport (the same
|
|
@@ -76,25 +63,14 @@ type OverlayCommon = {
|
|
|
76
63
|
duration?: TimelineOffset;
|
|
77
64
|
/**
|
|
78
65
|
* Capture the overlay as an animation so its CSS/JS animation plays back in
|
|
79
|
-
* the video (
|
|
80
|
-
*
|
|
66
|
+
* the video (`.html`/`.tsx` page overlays only). The animation is sampled over
|
|
67
|
+
* the resolved duration with a transparent background preserved. The page's own
|
|
68
|
+
* `<script>` / React effects are advanced by a deterministic virtual clock, so
|
|
69
|
+
* `setTimeout`/`requestAnimationFrame`-driven animation is reproducible.
|
|
81
70
|
*/
|
|
82
71
|
animate?: boolean;
|
|
83
72
|
/** Animation capture frame rate. Only valid with `animate`. Defaults to `30`. */
|
|
84
73
|
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
74
|
/**
|
|
99
75
|
* Crop a rectangle of the SOURCE file before it is placed/scaled, in the
|
|
100
76
|
* source's own pixels (top-left origin), like Playwright's
|
|
@@ -162,64 +138,55 @@ type OverlayVideoFields = {
|
|
|
162
138
|
end?: TimelineOffset;
|
|
163
139
|
};
|
|
164
140
|
/**
|
|
165
|
-
*
|
|
166
|
-
*
|
|
167
|
-
*
|
|
168
|
-
*
|
|
141
|
+
* A full React page overlay: `path` ends in `.tsx`. The module default-exports a
|
|
142
|
+
* React component that screenci bundles (with esbuild, an optional peer
|
|
143
|
+
* dependency) and renders CLIENT-SIDE in the browser during capture, so the full
|
|
144
|
+
* React runtime runs: function components with hooks and effects, class
|
|
145
|
+
* components with lifecycle and state, inline styles, and `className`. With
|
|
146
|
+
* `animate: true` the mounted app is advanced by the deterministic virtual clock
|
|
147
|
+
* that samples each frame, so effect timers / `requestAnimationFrame` / state
|
|
148
|
+
* updates drive the captured frames reproducibly.
|
|
149
|
+
*
|
|
150
|
+
* `props` are passed to the component. They are the ONLY overlay variant that
|
|
151
|
+
* accepts `props`, enforced at the type level by the `.tsx` path suffix.
|
|
169
152
|
*/
|
|
170
|
-
export type
|
|
171
|
-
/**
|
|
172
|
-
path: string
|
|
173
|
-
|
|
174
|
-
|
|
153
|
+
export type TsxOverlayConfig = OverlayCommon & {
|
|
154
|
+
/** Path to a `.tsx` module that default-exports a React component, resolved relative to the recording file. */
|
|
155
|
+
path: `${string}.tsx`;
|
|
156
|
+
/** Serializable props passed to the component (a `.tsx` overlay only). */
|
|
157
|
+
props?: Record<string, unknown>;
|
|
175
158
|
};
|
|
176
159
|
/**
|
|
177
|
-
*
|
|
178
|
-
*
|
|
179
|
-
*
|
|
160
|
+
* A full HTML page overlay: `path` ends in `.html`. The file is loaded as a
|
|
161
|
+
* complete standalone document, so its own `<style>` and `<script>` run (the
|
|
162
|
+
* script is advanced by the virtual clock when `animate: true`). Author the page
|
|
163
|
+
* with a transparent background (`html,body{background:transparent}`) and, for
|
|
164
|
+
* tight sizing, wrap the content in `<div id="screenci-overlay-root">`. No
|
|
165
|
+
* `props` (a full page owns its own content).
|
|
180
166
|
*/
|
|
181
|
-
export type
|
|
182
|
-
/**
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
html?: never;
|
|
186
|
-
volume?: never;
|
|
187
|
-
speed?: never;
|
|
188
|
-
time?: never;
|
|
189
|
-
start?: never;
|
|
190
|
-
end?: never;
|
|
191
|
-
crop?: never;
|
|
167
|
+
export type HtmlPageOverlayConfig = OverlayCommon & {
|
|
168
|
+
/** Path to a full `.html` document, resolved relative to the recording file. */
|
|
169
|
+
path: `${string}.html`;
|
|
170
|
+
props?: never;
|
|
192
171
|
};
|
|
193
172
|
/**
|
|
194
|
-
* An
|
|
195
|
-
*
|
|
196
|
-
*
|
|
197
|
-
*
|
|
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.
|
|
173
|
+
* An image (`.svg`/`.png`) or video (`.mp4`) file overlay. Only this variant
|
|
174
|
+
* accepts the {@link OverlayVideoFields} (`volume`/`speed`/`time`/`start`/`end`),
|
|
175
|
+
* which apply to `.mp4` files and are rejected at recording time for images. No
|
|
176
|
+
* `props`.
|
|
201
177
|
*/
|
|
202
|
-
export type
|
|
203
|
-
/**
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
element?: never;
|
|
207
|
-
volume?: never;
|
|
208
|
-
speed?: never;
|
|
209
|
-
time?: never;
|
|
210
|
-
start?: never;
|
|
211
|
-
end?: never;
|
|
212
|
-
crop?: never;
|
|
178
|
+
export type MediaOverlayConfig = OverlayCommon & OverlayVideoFields & {
|
|
179
|
+
/** File path: `.svg`/`.png` (image) or `.mp4` (video). */
|
|
180
|
+
path: string;
|
|
181
|
+
props?: never;
|
|
213
182
|
};
|
|
214
183
|
/**
|
|
215
|
-
* Display options for an overlay.
|
|
216
|
-
*
|
|
217
|
-
*
|
|
218
|
-
*
|
|
219
|
-
* accepts the video-only `volume`/`speed`/`time` fields (for `.mp4` files); the
|
|
220
|
-
* others reject them at compile time.
|
|
184
|
+
* Display options for an overlay. Content always comes from a file `path`; the
|
|
185
|
+
* extension selects the variant: `.tsx` (a client-rendered React page, the only
|
|
186
|
+
* variant accepting `props`), `.html` (a full HTML document), or `.svg`/`.png`/
|
|
187
|
+
* `.mp4` (image/video, the only variant accepting the video-only fields).
|
|
221
188
|
*/
|
|
222
|
-
export type OverlayConfig =
|
|
189
|
+
export type OverlayConfig = TsxOverlayConfig | HtmlPageOverlayConfig | MediaOverlayConfig;
|
|
223
190
|
/**
|
|
224
191
|
* Upper bound for an audio level (linear gain). `4` is +12 dB, plenty of
|
|
225
192
|
* headroom for a boost while guarding against accidental extreme distortion.
|
|
@@ -321,25 +288,23 @@ export declare function selected(name: string, options?: DependencyOverlayOption
|
|
|
321
288
|
/**
|
|
322
289
|
* A value accepted by {@link createOverlays} for each key:
|
|
323
290
|
*
|
|
324
|
-
* - a `string` file path (`.html`/`.svg`/`.png`/`.mp4`),
|
|
325
|
-
* - a React element,
|
|
291
|
+
* - a `string` file path (`.tsx`/`.html`/`.svg`/`.png`/`.mp4`),
|
|
326
292
|
* - an {@link OverlayConfig} object, or
|
|
327
293
|
* - a {@link selected} render dependency.
|
|
328
294
|
*/
|
|
329
|
-
export type OverlayInput = string |
|
|
295
|
+
export type OverlayInput = string | OverlayConfig | DependencyOverlayInput;
|
|
330
296
|
/**
|
|
331
297
|
* A factory that builds an {@link OverlayConfig} from caller-supplied props.
|
|
332
|
-
* Use this to make an overlay programmatic: the returned config (its
|
|
333
|
-
*
|
|
334
|
-
* locator's position captured with {@link overlayRect}.
|
|
335
|
-
* content and the placement may vary per call.
|
|
298
|
+
* Use this to make an overlay programmatic: the returned config (its `path`,
|
|
299
|
+
* `props`, and placement) can depend on values only known at runtime, for
|
|
300
|
+
* example a locator's position captured with {@link overlayRect}.
|
|
336
301
|
*
|
|
337
302
|
* @example
|
|
338
303
|
* ```tsx
|
|
339
304
|
* const overlays = createOverlays({
|
|
340
|
-
*
|
|
305
|
+
* ring: (t: Locator) => ({ path: './ring.html', over: t, margin: 6 }),
|
|
341
306
|
* })
|
|
342
|
-
* await overlays.
|
|
307
|
+
* await overlays.ring(saveButton).for('1.2s')
|
|
343
308
|
* ```
|
|
344
309
|
*/
|
|
345
310
|
export type OverlayConfigFactory<P = unknown> = (props: P) => OverlayConfig;
|
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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"}
|