versioncam 0.5.3 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +71 -0
- package/README.md +82 -2
- package/dist/cli/commands/check.js +25 -0
- package/dist/cli/commands/check.js.map +1 -1
- package/dist/cli/commands/doctor.js +54 -1
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/record.d.ts +6 -0
- package/dist/cli/commands/record.js +24 -3
- package/dist/cli/commands/record.js.map +1 -1
- package/dist/cli/commands/stability.js +10 -3
- package/dist/cli/commands/stability.js.map +1 -1
- package/dist/cli/usage.d.ts +1 -1
- package/dist/cli/usage.js +2 -0
- package/dist/cli/usage.js.map +1 -1
- package/dist/config.d.ts +37 -1
- package/dist/config.js +115 -3
- package/dist/config.js.map +1 -1
- package/dist/core/cursor.d.ts +22 -0
- package/dist/core/cursor.js +6 -0
- package/dist/core/cursor.js.map +1 -1
- package/dist/core/motion-defaults.d.ts +8 -0
- package/dist/core/motion-defaults.js +8 -0
- package/dist/core/motion-defaults.js.map +1 -1
- package/dist/core/timeline.d.ts +24 -0
- package/dist/core/timeline.js.map +1 -1
- package/dist/driver/clip.d.ts +6 -0
- package/dist/driver/clip.js +33 -2
- package/dist/driver/clip.js.map +1 -1
- package/dist/driver/file-window.d.ts +66 -0
- package/dist/driver/file-window.js +245 -0
- package/dist/driver/file-window.js.map +1 -0
- package/dist/driver/page-hooks.d.ts +23 -1
- package/dist/driver/page-hooks.js +36 -1
- package/dist/driver/page-hooks.js.map +1 -1
- package/dist/driver/replay.d.ts +263 -0
- package/dist/driver/replay.js +558 -0
- package/dist/driver/replay.js.map +1 -0
- package/dist/driver/session.d.ts +70 -4
- package/dist/driver/session.js +267 -29
- package/dist/driver/session.js.map +1 -1
- package/dist/driver/settle.js +6 -0
- package/dist/driver/settle.js.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.js.map +1 -1
- package/dist/page/assets/index-CnRDAiUz.js +2 -0
- package/dist/page/index.html +1 -1
- package/dist/publish/protocol.d.ts +12 -1
- package/dist/publish/protocol.js.map +1 -1
- package/dsl.md +68 -1
- package/package.json +1 -1
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/skills/versioncam/authoring.md +6 -1
- package/plugin/skills/versioncam/onboarding.md +9 -3
- package/dist/page/assets/index-BtUbUEdN.js +0 -2
package/dist/config.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type { Page } from "playwright";
|
|
2
|
+
import type { CursorLook, CursorStyle } from "./core/cursor.js";
|
|
2
3
|
import { MOTION } from "./core/motion-defaults.js";
|
|
4
|
+
import type { ReplayConfig, ReplayMode, ResolvedReplay } from "./driver/replay.js";
|
|
3
5
|
/**
|
|
4
6
|
* The one place an app describes itself to the recorder.
|
|
5
7
|
*
|
|
@@ -205,6 +207,16 @@ export type RecorderConfig = {
|
|
|
205
207
|
/** Click ripple and highlight ring. */
|
|
206
208
|
accent?: string;
|
|
207
209
|
cursorScale?: number;
|
|
210
|
+
/**
|
|
211
|
+
* The pointer's look: `style` `"light"`, the white arrow, or `"dark"`,
|
|
212
|
+
* the system's black one; `ripple`, whether a click draws a ring.
|
|
213
|
+
* Default `{ style: "light", ripple: true }`, as every version before
|
|
214
|
+
* 0.6.0 drew it.
|
|
215
|
+
*/
|
|
216
|
+
cursor?: {
|
|
217
|
+
style?: CursorStyle;
|
|
218
|
+
ripple?: boolean;
|
|
219
|
+
};
|
|
208
220
|
presentation?: Presentation;
|
|
209
221
|
};
|
|
210
222
|
/**
|
|
@@ -220,6 +232,12 @@ export type RecorderConfig = {
|
|
|
220
232
|
threads?: number;
|
|
221
233
|
};
|
|
222
234
|
motion?: Partial<Motion>;
|
|
235
|
+
/**
|
|
236
|
+
* Responses recorded once and served on every run after: a map's tiles, a
|
|
237
|
+
* model's answer, a job's status. See `ReplayConfig` and the README's
|
|
238
|
+
* *Live data*.
|
|
239
|
+
*/
|
|
240
|
+
replay?: ReplayConfig;
|
|
223
241
|
/** Module whose default export is `Record<string, Scene>`. */
|
|
224
242
|
scenes?: string;
|
|
225
243
|
/** Clip ids, in order, for `versioncam render --sequence`. */
|
|
@@ -255,6 +273,7 @@ export type ResolvedConfig = {
|
|
|
255
273
|
theme: {
|
|
256
274
|
accent: string;
|
|
257
275
|
cursorScale: number;
|
|
276
|
+
cursor: CursorLook;
|
|
258
277
|
presentation: Presentation | null;
|
|
259
278
|
};
|
|
260
279
|
output: {
|
|
@@ -264,11 +283,13 @@ export type ResolvedConfig = {
|
|
|
264
283
|
/** Threads per encoder, or null for ffmpeg's own choice. */
|
|
265
284
|
encoderThreads: number | null;
|
|
266
285
|
motion: Motion;
|
|
286
|
+
replay: ResolvedReplay | null;
|
|
267
287
|
scenes: string | null;
|
|
268
288
|
sequence: string[] | null;
|
|
269
289
|
};
|
|
270
290
|
/** Typed identity, so a config file gets completion and checking. */
|
|
271
291
|
export declare function defineRecorder(config: RecorderConfig): RecorderConfig;
|
|
292
|
+
export declare function isReplayMode(value: unknown): value is ReplayMode;
|
|
272
293
|
/**
|
|
273
294
|
* Output dimensions follow the viewport's aspect.
|
|
274
295
|
*
|
|
@@ -293,13 +314,28 @@ export type RenderConfig = {
|
|
|
293
314
|
theme: {
|
|
294
315
|
accent: string;
|
|
295
316
|
cursorScale: number;
|
|
317
|
+
/** Absent while it is the default: see `renderConfigOf`. */
|
|
318
|
+
cursor?: CursorLook;
|
|
296
319
|
presentation: Presentation | null;
|
|
297
320
|
};
|
|
298
|
-
|
|
321
|
+
/** Every setting, but `scrollDurationMs` only when it is not the default. */
|
|
322
|
+
motion: Omit<Motion, "scrollDurationMs"> & Partial<Pick<Motion, "scrollDurationMs">>;
|
|
299
323
|
/**
|
|
300
324
|
* The scenes module's path. The page is served a bundle of it, and names
|
|
301
325
|
* the file it came from when it cannot read the scenes out of it.
|
|
302
326
|
*/
|
|
303
327
|
scenes: string | null;
|
|
304
328
|
};
|
|
329
|
+
/**
|
|
330
|
+
* A setting added since 0.5.3 is left out while it holds its default.
|
|
331
|
+
*
|
|
332
|
+
* This is also what `versioncam publish` sends, and version.cam holds a
|
|
333
|
+
* published render config to the keys its renderer knows, refusing any
|
|
334
|
+
* other. A key that every publish from 0.6.0 carried would have been
|
|
335
|
+
* refused by every version.cam before cloud-v1.8.0, for configs that
|
|
336
|
+
* changed nothing. Left out, a default config publishes exactly what 0.5.3
|
|
337
|
+
* did, and a renderer takes a missing setting as its default, which draws
|
|
338
|
+
* the same video. A config that does change one sends it, and needs a
|
|
339
|
+
* version.cam that knows it.
|
|
340
|
+
*/
|
|
305
341
|
export declare function renderConfigOf(config: ResolvedConfig): RenderConfig;
|
package/dist/config.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { isAbsolute, resolve } from "node:path";
|
|
2
|
+
import { DEFAULT_CURSOR } from "./core/cursor.js";
|
|
2
3
|
import { MOTION } from "./core/motion-defaults.js";
|
|
4
|
+
import { patternOf } from "./driver/replay.js";
|
|
3
5
|
/**
|
|
4
6
|
* Checked where a value enters: in the config here, and in a clip's own
|
|
5
7
|
* `capture` by `runClip`, since nothing else checks a clip's options.
|
|
@@ -21,6 +23,86 @@ export function defineRecorder(config) {
|
|
|
21
23
|
function fail(field, why) {
|
|
22
24
|
throw new Error(`versioncam config: \`${field}\` ${why}`);
|
|
23
25
|
}
|
|
26
|
+
/**
|
|
27
|
+
* Checked here, by name, because a style the renderer does not know would
|
|
28
|
+
* otherwise fail every render of every clip, inside the render page, far
|
|
29
|
+
* from the line of config that caused it.
|
|
30
|
+
*/
|
|
31
|
+
function cursorOf(given) {
|
|
32
|
+
const style = given?.style ?? DEFAULT_CURSOR.style;
|
|
33
|
+
if (style !== "light" && style !== "dark") {
|
|
34
|
+
fail("theme.cursor.style", `must be "light" or "dark", got ${JSON.stringify(style)}`);
|
|
35
|
+
}
|
|
36
|
+
const ripple = given?.ripple ?? DEFAULT_CURSOR.ripple;
|
|
37
|
+
if (typeof ripple !== "boolean") {
|
|
38
|
+
fail("theme.cursor.ripple", `must be true or false, got ${JSON.stringify(ripple)}`);
|
|
39
|
+
}
|
|
40
|
+
return { style, ripple };
|
|
41
|
+
}
|
|
42
|
+
const REPLAY_MODES = [
|
|
43
|
+
"auto",
|
|
44
|
+
"record",
|
|
45
|
+
"replay",
|
|
46
|
+
"live",
|
|
47
|
+
];
|
|
48
|
+
export function isReplayMode(value) {
|
|
49
|
+
return REPLAY_MODES.includes(value);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Checked field by field, because each wrong value fails far from here and
|
|
53
|
+
* quietly: a pattern that is not a string or a RegExp matches nothing, so the
|
|
54
|
+
* clip goes live without a word; a pace of no milliseconds delivers a whole
|
|
55
|
+
* stream in one frame.
|
|
56
|
+
*/
|
|
57
|
+
function replayOf(given, root) {
|
|
58
|
+
if (given === undefined)
|
|
59
|
+
return null;
|
|
60
|
+
const patterns = (field, list) => {
|
|
61
|
+
if (!Array.isArray(list))
|
|
62
|
+
fail(field, "must be a list of URL globs or regular expressions");
|
|
63
|
+
return list.map((item, i) => {
|
|
64
|
+
if (typeof item === "string" && item.length > 0)
|
|
65
|
+
return patternOf(item);
|
|
66
|
+
if (item instanceof RegExp)
|
|
67
|
+
return item;
|
|
68
|
+
fail(`${field}[${i}]`, `must be a URL glob or a regular expression, got ${JSON.stringify(item)}`);
|
|
69
|
+
});
|
|
70
|
+
};
|
|
71
|
+
const record = patterns("replay.record", given.record);
|
|
72
|
+
if (record.length === 0)
|
|
73
|
+
fail("replay.record", "must name at least one URL");
|
|
74
|
+
const mode = given.mode ?? "auto";
|
|
75
|
+
if (!isReplayMode(mode)) {
|
|
76
|
+
fail("replay.mode", `must be "auto", "record", "replay" or "live", got ${JSON.stringify(mode)}`);
|
|
77
|
+
}
|
|
78
|
+
const pace = (given.pace ?? []).map((rule, i) => {
|
|
79
|
+
const [url] = patterns(`replay.pace[${i}].url`, [rule?.url]);
|
|
80
|
+
const chunkMs = rule?.chunkMs;
|
|
81
|
+
if (typeof chunkMs !== "number" ||
|
|
82
|
+
!Number.isFinite(chunkMs) ||
|
|
83
|
+
chunkMs <= 0) {
|
|
84
|
+
fail(`replay.pace[${i}].chunkMs`, `must be milliseconds, more than 0, got ${JSON.stringify(chunkMs)}`);
|
|
85
|
+
}
|
|
86
|
+
return { url, chunkMs };
|
|
87
|
+
});
|
|
88
|
+
const redact = given.redact ?? [];
|
|
89
|
+
if (!Array.isArray(redact) ||
|
|
90
|
+
redact.some((name) => typeof name !== "string")) {
|
|
91
|
+
fail("replay.redact", "must be a list of query parameter names");
|
|
92
|
+
}
|
|
93
|
+
const onMissing = given.onMissing ?? "fail";
|
|
94
|
+
if (onMissing !== "fail" && onMissing !== "live") {
|
|
95
|
+
fail("replay.onMissing", `must be "fail" or "live", got ${JSON.stringify(onMissing)}`);
|
|
96
|
+
}
|
|
97
|
+
return {
|
|
98
|
+
record,
|
|
99
|
+
mode,
|
|
100
|
+
dir: resolve(root, given.dir ?? "replay"),
|
|
101
|
+
pace,
|
|
102
|
+
redact,
|
|
103
|
+
onMissing,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
24
106
|
/**
|
|
25
107
|
* The environment wins over the config, so a machine (version.cam's renderer,
|
|
26
108
|
* a CI job) can pin the thread count of a repository that does not.
|
|
@@ -146,6 +228,16 @@ export function resolveConfig(config, root) {
|
|
|
146
228
|
if (presentation?.captionInset !== undefined) {
|
|
147
229
|
checkCaptionInset(presentation.captionInset, outputWidth);
|
|
148
230
|
}
|
|
231
|
+
const motion = { ...MOTION, ...config.motion };
|
|
232
|
+
// Checked because a scroll's duration decides how many frames it takes,
|
|
233
|
+
// and a negative or missing one would make every scroll a two-frame jump
|
|
234
|
+
// without a word. The settings older than this one are taken as given.
|
|
235
|
+
const scrollMs = motion.scrollDurationMs;
|
|
236
|
+
if (typeof scrollMs !== "number" ||
|
|
237
|
+
!(scrollMs >= 0) ||
|
|
238
|
+
!Number.isFinite(scrollMs)) {
|
|
239
|
+
fail("motion.scrollDurationMs", `must be milliseconds, 0 or more, got ${JSON.stringify(scrollMs)}`);
|
|
240
|
+
}
|
|
149
241
|
return {
|
|
150
242
|
root,
|
|
151
243
|
baseUrl,
|
|
@@ -193,20 +285,40 @@ export function resolveConfig(config, root) {
|
|
|
193
285
|
// A neutral blue, not anyone's brand. An app says its own accent.
|
|
194
286
|
accent: config.theme?.accent ?? "#2f6fed",
|
|
195
287
|
cursorScale: config.theme?.cursorScale ?? 2.1,
|
|
288
|
+
cursor: cursorOf(config.theme?.cursor),
|
|
196
289
|
presentation: presentation ?? null,
|
|
197
290
|
},
|
|
198
291
|
output: outputSize(viewport, outputWidth),
|
|
199
292
|
encoderThreads,
|
|
200
|
-
motion
|
|
293
|
+
motion,
|
|
294
|
+
replay: replayOf(config.replay, root),
|
|
201
295
|
scenes: config.scenes ? abs(config.scenes) : null,
|
|
202
296
|
sequence: config.sequence ?? null,
|
|
203
297
|
};
|
|
204
298
|
}
|
|
299
|
+
/**
|
|
300
|
+
* A setting added since 0.5.3 is left out while it holds its default.
|
|
301
|
+
*
|
|
302
|
+
* This is also what `versioncam publish` sends, and version.cam holds a
|
|
303
|
+
* published render config to the keys its renderer knows, refusing any
|
|
304
|
+
* other. A key that every publish from 0.6.0 carried would have been
|
|
305
|
+
* refused by every version.cam before cloud-v1.8.0, for configs that
|
|
306
|
+
* changed nothing. Left out, a default config publishes exactly what 0.5.3
|
|
307
|
+
* did, and a renderer takes a missing setting as its default, which draws
|
|
308
|
+
* the same video. A config that does change one sends it, and needs a
|
|
309
|
+
* version.cam that knows it.
|
|
310
|
+
*/
|
|
205
311
|
export function renderConfigOf(config) {
|
|
312
|
+
const { cursor, ...theme } = config.theme;
|
|
313
|
+
const { scrollDurationMs, ...motion } = config.motion;
|
|
314
|
+
const defaultCursor = cursor.style === DEFAULT_CURSOR.style &&
|
|
315
|
+
cursor.ripple === DEFAULT_CURSOR.ripple;
|
|
206
316
|
return {
|
|
207
317
|
output: config.output,
|
|
208
|
-
theme:
|
|
209
|
-
motion:
|
|
318
|
+
theme: defaultCursor ? theme : { ...theme, cursor },
|
|
319
|
+
motion: scrollDurationMs === MOTION.scrollDurationMs
|
|
320
|
+
? motion
|
|
321
|
+
: { ...motion, scrollDurationMs },
|
|
210
322
|
scenes: config.scenes,
|
|
211
323
|
};
|
|
212
324
|
}
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/core/cursor.d.ts
CHANGED
|
@@ -36,3 +36,25 @@ export declare function planMove(from: Vec2, to: Vec2, t0: number, rng: () => nu
|
|
|
36
36
|
export declare function evalCursor(track: CursorTrack, t: number): Vec2;
|
|
37
37
|
/** Where the cursor ends up once the whole track has played. */
|
|
38
38
|
export declare function cursorEnd(track: CursorTrack, fallback: Vec2): Vec2;
|
|
39
|
+
/**
|
|
40
|
+
* How the renderer draws the pointer: its arrow, and whether a click
|
|
41
|
+
* ripples.
|
|
42
|
+
*
|
|
43
|
+
* `"light"` is the white arrow with a dark outline every version has drawn;
|
|
44
|
+
* `"dark"` is the system's own, black with a hairline of white, which is
|
|
45
|
+
* what a screen recording of a Mac shows, and what a recording laid beside
|
|
46
|
+
* one has to show not to read as a different kind of video first. The
|
|
47
|
+
* ripple marks a click for a viewer who cannot hear it; a screen recording
|
|
48
|
+
* has none.
|
|
49
|
+
*/
|
|
50
|
+
export type CursorStyle = "light" | "dark";
|
|
51
|
+
export type CursorLook = {
|
|
52
|
+
style: CursorStyle;
|
|
53
|
+
ripple: boolean;
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* What a config that says nothing about the cursor gets, and so what every
|
|
57
|
+
* recording rendered before 0.6.0 shows. Here, in a module the render page
|
|
58
|
+
* also reads, so the two sides cannot disagree about it.
|
|
59
|
+
*/
|
|
60
|
+
export declare const DEFAULT_CURSOR: CursorLook;
|
package/dist/core/cursor.js
CHANGED
|
@@ -100,4 +100,10 @@ export function cursorEnd(track, fallback) {
|
|
|
100
100
|
const last = track[track.length - 1];
|
|
101
101
|
return last.kind === "move" ? last.to : last.at;
|
|
102
102
|
}
|
|
103
|
+
/**
|
|
104
|
+
* What a config that says nothing about the cursor gets, and so what every
|
|
105
|
+
* recording rendered before 0.6.0 shows. Here, in a module the render page
|
|
106
|
+
* also reads, so the two sides cannot disagree about it.
|
|
107
|
+
*/
|
|
108
|
+
export const DEFAULT_CURSOR = { style: "light", ripple: true };
|
|
103
109
|
//# sourceMappingURL=cursor.js.map
|
package/dist/core/cursor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/core/cursor.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/core/cursor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAIlC,iDAAiD;AACjD,MAAM,UAAU,QAAQ,CAAC,CAAO,EAAE,CAAO;IACvC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,UAAkB;IAC3D,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;IACnD,MAAM,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;IACnD,OAAO,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,eAAe,GAAG,EAAE,CAAC;AAC3B,MAAM,OAAO,GAAG,IAAI,CAAC;AACrB,MAAM,OAAO,GAAG,GAAG,CAAC;AAEpB;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,GAAS,EAAE,GAAiB;IACtD,OAAO;QACL,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;QAC7C,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,EAAE,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;KAC9C,CAAC;AACJ,CAAC;AASD;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CACtB,IAAU,EACV,EAAQ,EACR,EAAU,EACV,GAAiB,EACjB,UAA2B,EAAE;IAE7B,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAChC,MAAM,UAAU,GACd,OAAO,CAAC,QAAQ;QAChB,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,UAAU,IAAI,eAAe,CAAC,CAAC;IAE5D,MAAM,GAAG,GAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACjE,IAAI,IAAI,GAAS,GAAG,CAAC;IACrB,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,OAAO,GAAG,GAAG,EAAE,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC,CAAC;QAClD,MAAM,IAAI,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClC,uCAAuC;QACvC,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;QACrC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;QACpC,MAAM,MAAM,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC;QACjC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC;IACtD,CAAC;IAED,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,EAAE;QACF,EAAE,EAAE,EAAE,GAAG,UAAU,GAAG,IAAI;QAC1B,IAAI;QACJ,EAAE;QACF,IAAI;QACJ,IAAI,EAAE,SAAS;KAChB,CAAC;AACJ,CAAC;AAED,SAAS,MAAM,CAAC,IAAU,EAAE,IAAU,EAAE,EAAQ,EAAE,CAAS;IACzD,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IAClB,MAAM,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;IACpB,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;IACtB,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChB,OAAO;QACL,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACrC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;KACtC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,KAAkB,EAAE,CAAS;IACtD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAEtC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACvB,IAAI,CAAC,IAAI,KAAK,CAAC,EAAE;QAAE,OAAO,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;IAExE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE;YAAE,SAAS;QAC1B,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO,IAAI,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;QAC/B,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;QAC/C,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACrC,OAAO,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AAClD,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,SAAS,CAAC,KAAkB,EAAE,QAAc;IAC1D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC;IACxC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACrC,OAAO,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AAClD,CAAC;AAgBD;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAAe,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC"}
|
|
@@ -23,6 +23,14 @@ export declare const MOTION: {
|
|
|
23
23
|
* slower and the clip has no room for anything else.
|
|
24
24
|
*/
|
|
25
25
|
readonly lassoDurationMs: 1400;
|
|
26
|
+
/**
|
|
27
|
+
* A `scroll()`. Slow enough that a viewer's eye can follow the content up
|
|
28
|
+
* the pane instead of losing its place, which much below half a second it
|
|
29
|
+
* cannot; much past a second and the page reads as crawling. The same
|
|
30
|
+
* judgement as a camera move, for a smaller thing moving. Two frames at
|
|
31
|
+
* the least, whatever is asked: a scroll in one frame is a jump.
|
|
32
|
+
*/
|
|
33
|
+
readonly scrollDurationMs: 700;
|
|
26
34
|
/**
|
|
27
35
|
* Camera moves. Longer than a cursor move on purpose: the camera carries the
|
|
28
36
|
* whole frame, so at 700ms it reads as a snap even with min-jerk easing and
|
|
@@ -23,6 +23,14 @@ export const MOTION = {
|
|
|
23
23
|
* slower and the clip has no room for anything else.
|
|
24
24
|
*/
|
|
25
25
|
lassoDurationMs: 1400,
|
|
26
|
+
/**
|
|
27
|
+
* A `scroll()`. Slow enough that a viewer's eye can follow the content up
|
|
28
|
+
* the pane instead of losing its place, which much below half a second it
|
|
29
|
+
* cannot; much past a second and the page reads as crawling. The same
|
|
30
|
+
* judgement as a camera move, for a smaller thing moving. Two frames at
|
|
31
|
+
* the least, whatever is asked: a scroll in one frame is a jump.
|
|
32
|
+
*/
|
|
33
|
+
scrollDurationMs: 700,
|
|
26
34
|
/**
|
|
27
35
|
* Camera moves. Longer than a cursor move on purpose: the camera carries the
|
|
28
36
|
* whole frame, so at 700ms it reads as a snap even with min-jerk easing and
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"motion-defaults.js","sourceRoot":"","sources":["../../src/core/motion-defaults.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB;;;;OAIG;IACH,YAAY,EAAE,GAAG;IAEjB,6EAA6E;IAC7E,eAAe,EAAE,EAAE;IACnB,eAAe,EAAE,GAAG;IAEpB,2EAA2E;IAC3E,UAAU,EAAE,EAAE;IACd,UAAU,EAAE,GAAG;IAEf;;;OAGG;IACH,eAAe,EAAE,IAAI;IAErB;;;;;OAKG;IACH,cAAc,EAAE,IAAI;IAEpB;;;;;;;;;;OAUG;IACH,WAAW,EAAE,GAAG;IAChB,OAAO,EAAE,IAAI;IAEb,+DAA+D;IAC/D,OAAO,EAAE,IAAI;IAEb;;;;;;OAMG;IACH,UAAU,EAAE,IAAI;IAEhB;;;;;;OAMG;IACH,cAAc,EAAE,GAAG;IAEnB;;;;;;;;;;;OAWG;IACH,iBAAiB,EAAE,GAAG;IAEtB,gEAAgE;IAChE,WAAW,EAAE,IAAI;IAEjB,qCAAqC;IACrC,QAAQ,EAAE,GAAG;IACb,kDAAkD;IAClD,YAAY,EAAE,EAAE;IAEhB,4EAA4E;IAC5E,UAAU,EAAE,GAAG;IACf,YAAY,EAAE,GAAG;IAEjB,qEAAqE;IACrE,eAAe,EAAE,CAAC;IAElB,gCAAgC;IAChC,YAAY,EAAE,GAAG;CACT,CAAC"}
|
|
1
|
+
{"version":3,"file":"motion-defaults.js","sourceRoot":"","sources":["../../src/core/motion-defaults.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB;;;;OAIG;IACH,YAAY,EAAE,GAAG;IAEjB,6EAA6E;IAC7E,eAAe,EAAE,EAAE;IACnB,eAAe,EAAE,GAAG;IAEpB,2EAA2E;IAC3E,UAAU,EAAE,EAAE;IACd,UAAU,EAAE,GAAG;IAEf;;;OAGG;IACH,eAAe,EAAE,IAAI;IAErB;;;;;;OAMG;IACH,gBAAgB,EAAE,GAAG;IAErB;;;;;OAKG;IACH,cAAc,EAAE,IAAI;IAEpB;;;;;;;;;;OAUG;IACH,WAAW,EAAE,GAAG;IAChB,OAAO,EAAE,IAAI;IAEb,+DAA+D;IAC/D,OAAO,EAAE,IAAI;IAEb;;;;;;OAMG;IACH,UAAU,EAAE,IAAI;IAEhB;;;;;;OAMG;IACH,cAAc,EAAE,GAAG;IAEnB;;;;;;;;;;;OAWG;IACH,iBAAiB,EAAE,GAAG;IAEtB,gEAAgE;IAChE,WAAW,EAAE,IAAI;IAEjB,qCAAqC;IACrC,QAAQ,EAAE,GAAG;IACb,kDAAkD;IAClD,YAAY,EAAE,EAAE;IAEhB,4EAA4E;IAC5E,UAAU,EAAE,GAAG;IACf,YAAY,EAAE,GAAG;IAEjB,qEAAqE;IACrE,eAAe,EAAE,CAAC;IAElB,gCAAgC;IAChC,YAAY,EAAE,GAAG;CACT,CAAC"}
|
package/dist/core/timeline.d.ts
CHANGED
|
@@ -95,6 +95,25 @@ export type Step = {
|
|
|
95
95
|
frame: number;
|
|
96
96
|
call: string;
|
|
97
97
|
};
|
|
98
|
+
/**
|
|
99
|
+
* One `scroll()`: the element it moved, along which axis, and from where to
|
|
100
|
+
* where, in that element's scroll offsets.
|
|
101
|
+
*
|
|
102
|
+
* The renderer draws nothing from it, since the scroll is in the captured
|
|
103
|
+
* pages already. It is here so a reader of the timeline can tell a page that
|
|
104
|
+
* moved because the clip scrolled it from one that moved by itself, and so
|
|
105
|
+
* the recorded `to` is the position the page really reached: clamped to what
|
|
106
|
+
* the element can scroll, not the number the script asked for.
|
|
107
|
+
*/
|
|
108
|
+
export type Scroll = {
|
|
109
|
+
t0: number;
|
|
110
|
+
t1: number;
|
|
111
|
+
/** The scrolling element's box, or the viewport for the page. */
|
|
112
|
+
rect: Rect;
|
|
113
|
+
axis: "x" | "y";
|
|
114
|
+
from: number;
|
|
115
|
+
to: number;
|
|
116
|
+
};
|
|
98
117
|
export type Timeline = {
|
|
99
118
|
version: 1;
|
|
100
119
|
clipId: string;
|
|
@@ -119,6 +138,11 @@ export type Timeline = {
|
|
|
119
138
|
marks: Mark[];
|
|
120
139
|
/** The script's calls, in order. Absent from recordings made before 0.1.3. */
|
|
121
140
|
steps?: Step[];
|
|
141
|
+
/**
|
|
142
|
+
* The clip's scrolls, in order. Absent from a recording that has none, so
|
|
143
|
+
* a recording without one is the same bytes it was before 0.6.0.
|
|
144
|
+
*/
|
|
145
|
+
scrolls?: Scroll[];
|
|
122
146
|
cursor: CursorTrack;
|
|
123
147
|
pointer: PointerAction[];
|
|
124
148
|
camera: CameraKey[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timeline.js","sourceRoot":"","sources":["../../src/core/timeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;
|
|
1
|
+
{"version":3,"file":"timeline.js","sourceRoot":"","sources":["../../src/core/timeline.ts"],"names":[],"mappings":"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"}
|
package/dist/driver/clip.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import type { Browser } from "playwright";
|
|
|
2
2
|
import type { CaptureConfig, ResolvedConfig } from "../config.js";
|
|
3
3
|
import type { Timeline } from "../core/timeline.js";
|
|
4
4
|
import type { RecordingTiming } from "../core/timing.js";
|
|
5
|
+
import type { ReplayMode } from "./replay.js";
|
|
5
6
|
import type { SettleReport } from "./settle.js";
|
|
6
7
|
import { RecordingSession } from "./session.js";
|
|
7
8
|
export type ClipOptions = {
|
|
@@ -78,5 +79,10 @@ export type RunClipOptions = {
|
|
|
78
79
|
* capture it stands in for fails on a media query.
|
|
79
80
|
*/
|
|
80
81
|
draft?: boolean;
|
|
82
|
+
/**
|
|
83
|
+
* The replay's mode for this run, over the config's: what `--replay` on
|
|
84
|
+
* the command line sets.
|
|
85
|
+
*/
|
|
86
|
+
replay?: ReplayMode;
|
|
81
87
|
};
|
|
82
88
|
export declare function runClip(browser: Browser, config: ResolvedConfig, definition: ClipDefinition, runOptions?: RunClipOptions): Promise<RunClipResult>;
|
package/dist/driver/clip.js
CHANGED
|
@@ -2,7 +2,8 @@ import { execFileSync } from "node:child_process";
|
|
|
2
2
|
import { createRequire } from "node:module";
|
|
3
3
|
import { join } from "node:path";
|
|
4
4
|
import { isTransitions } from "../config.js";
|
|
5
|
-
import { MUTATION_COUNTER_SCRIPT, TRANSITION_CLOCK_SCRIPT, freezeCssScript, } from "./page-hooks.js";
|
|
5
|
+
import { INSTANT_SCROLL_SCRIPT, MUTATION_COUNTER_SCRIPT, TRANSITION_CLOCK_SCRIPT, freezeCssScript, } from "./page-hooks.js";
|
|
6
|
+
import { ClipReplay } from "./replay.js";
|
|
6
7
|
import { writeFailure, writeSettles, writeTargets } from "./reports.js";
|
|
7
8
|
import { RecordingSession } from "./session.js";
|
|
8
9
|
/**
|
|
@@ -43,6 +44,11 @@ export async function runClip(browser, config, definition, runOptions = {}) {
|
|
|
43
44
|
// clip asking for 60 would quietly cost four times what the flag promises.
|
|
44
45
|
const fps = draft ? 15 : (options.fps ?? config.fps);
|
|
45
46
|
const capture = { ...config.capture, ...options.capture };
|
|
47
|
+
// Made first, because it refuses a clip told to replay a file that does
|
|
48
|
+
// not exist, and nothing is open yet to close.
|
|
49
|
+
const replay = config.replay
|
|
50
|
+
? new ClipReplay(config.replay, id, RECORDER_VERSION, runOptions.replay)
|
|
51
|
+
: null;
|
|
46
52
|
const context = await browser.newContext({
|
|
47
53
|
viewport,
|
|
48
54
|
deviceScaleFactor: dpr,
|
|
@@ -54,6 +60,11 @@ export async function runClip(browser, config, definition, runOptions = {}) {
|
|
|
54
60
|
locale: config.clock.locale,
|
|
55
61
|
storageState: config.auth?.storageState,
|
|
56
62
|
});
|
|
63
|
+
// Installed on the context before the page exists, so the page's first
|
|
64
|
+
// request is caught. A clip's own `page.route` mocks are tried before it,
|
|
65
|
+
// as Playwright tries a page's routes before its context's: what a clip
|
|
66
|
+
// answers itself never reaches the replay.
|
|
67
|
+
await replay?.install(context);
|
|
57
68
|
const page = await context.newPage();
|
|
58
69
|
// A clip's own `capture` is merged over the config's unchecked, so its
|
|
59
70
|
// switch is checked here, where a typo would otherwise play by default.
|
|
@@ -63,8 +74,12 @@ export async function runClip(browser, config, definition, runOptions = {}) {
|
|
|
63
74
|
}
|
|
64
75
|
await page.addInitScript(MUTATION_COUNTER_SCRIPT);
|
|
65
76
|
await page.addInitScript(freezeCssScript(transitions));
|
|
77
|
+
await page.addInitScript(INSTANT_SCROLL_SCRIPT);
|
|
66
78
|
if (transitions === "play")
|
|
67
79
|
await page.addInitScript(TRANSITION_CLOCK_SCRIPT);
|
|
80
|
+
const pacing = replay?.pacingScript();
|
|
81
|
+
if (pacing)
|
|
82
|
+
await page.addInitScript(pacing);
|
|
68
83
|
// Paused, not just installed. `clock.install()` leaves Playwright's fake
|
|
69
84
|
// clock running on real time between the driver's own `runFor` calls, so
|
|
70
85
|
// every screenshot, every probe and every stall of the machine reached the
|
|
@@ -101,9 +116,24 @@ export async function runClip(browser, config, definition, runOptions = {}) {
|
|
|
101
116
|
capture,
|
|
102
117
|
draft,
|
|
103
118
|
config,
|
|
119
|
+
replay,
|
|
104
120
|
});
|
|
105
121
|
try {
|
|
106
|
-
|
|
122
|
+
try {
|
|
123
|
+
await body(session.forClipBody());
|
|
124
|
+
}
|
|
125
|
+
catch (error) {
|
|
126
|
+
// A request the replay could not answer failed in the page, and the
|
|
127
|
+
// page then failed the clip somewhere else: a locator that never
|
|
128
|
+
// appeared, a settle that ran out. The missing response is the cause.
|
|
129
|
+
const missing = replay?.failure();
|
|
130
|
+
if (missing)
|
|
131
|
+
error.message += `\n\n${missing}`;
|
|
132
|
+
throw error;
|
|
133
|
+
}
|
|
134
|
+
const missing = replay?.failure();
|
|
135
|
+
if (missing)
|
|
136
|
+
throw new Error(missing);
|
|
107
137
|
if (documentLoads > 1) {
|
|
108
138
|
throw new Error(`The document reloaded ${documentLoads - 1} time(s) during "${id}". ` +
|
|
109
139
|
"The usual cause is editing a file while recording: a dev server " +
|
|
@@ -113,6 +143,7 @@ export async function runClip(browser, config, definition, runOptions = {}) {
|
|
|
113
143
|
const timeline = session.finish();
|
|
114
144
|
writeSettles(dir, session.settles);
|
|
115
145
|
writeTargets(dir, session.evidence().targets);
|
|
146
|
+
replay?.write();
|
|
116
147
|
return { timeline, dir, cost: session.cost, settles: session.settles };
|
|
117
148
|
}
|
|
118
149
|
catch (error) {
|
package/dist/driver/clip.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clip.js","sourceRoot":"","sources":["../../src/driver/clip.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAI7C,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,eAAe,GAChB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAExE,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AA+BhD;;;;;;GAMG;AACH,MAAM,UAAU,IAAI,CAClB,EAAU,EACV,OAAoB,EACpB,IAAc;IAEd,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC/B,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAC3B,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,oBAAoB,CACpD,CAAC,OAAO,CAAC;AAEV,qEAAqE;AACrE,SAAS,SAAS,CAAC,GAAW;IAC5B,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE;YAC3D,GAAG;YACH,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;SACpC,CAAC,CAAC,IAAI,EAAE,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;
|
|
1
|
+
{"version":3,"file":"clip.js","sourceRoot":"","sources":["../../src/driver/clip.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A file window drawn over the page, to drag files from.
|
|
3
|
+
*
|
|
4
|
+
* Uploading is half of what a data app does, and the browser's own file
|
|
5
|
+
* dialog is outside the page: nothing can film it, and a file that simply
|
|
6
|
+
* appears in an upload list reads as a cut. The first app this recorded
|
|
7
|
+
* solved it with a small window drawn in the page, listing the files, from
|
|
8
|
+
* which the cursor drags them onto the app's own dropzone; nothing in it was
|
|
9
|
+
* that app's, so it is here. It looks like a Finder window, because the
|
|
10
|
+
* clips it sits in show a Mac's cursor.
|
|
11
|
+
*
|
|
12
|
+
* It is staged, and a clip that uses it should say so where its clips are
|
|
13
|
+
* shown. What is real is the drop: letting go over the page sends the
|
|
14
|
+
* element under the pointer the `dragenter`, `dragover` and `drop` events a
|
|
15
|
+
* real drag sends, carrying `File` objects with the names, types and
|
|
16
|
+
* contents given, so the app takes them through its own dropzone, its own
|
|
17
|
+
* accept rules and its own list, as it takes a person's.
|
|
18
|
+
*
|
|
19
|
+
* Selection works as in Finder: a click selects one row, a click with Shift
|
|
20
|
+
* extends to it, a click with Meta or Control adds or removes it, and a
|
|
21
|
+
* press on a selected row drags the whole selection. Its motion runs on
|
|
22
|
+
* `requestAnimationFrame`, which the recorder's clock drives, so it opens
|
|
23
|
+
* and closes at the same pace on every run.
|
|
24
|
+
*/
|
|
25
|
+
export type StagedFile = {
|
|
26
|
+
/** What the window lists, and the dropped `File`'s name. */
|
|
27
|
+
name: string;
|
|
28
|
+
/** The dropped file's contents. Default empty. */
|
|
29
|
+
content?: string;
|
|
30
|
+
/** Its MIME type. Default from the extension. */
|
|
31
|
+
type?: string;
|
|
32
|
+
/** The Size column. Default from the contents. */
|
|
33
|
+
size?: string;
|
|
34
|
+
};
|
|
35
|
+
export type FileWindowOptions = {
|
|
36
|
+
/** The title bar. Default "Files". */
|
|
37
|
+
title?: string;
|
|
38
|
+
/**
|
|
39
|
+
* Where the window's top left corner sits, as fractions of the viewport.
|
|
40
|
+
* Default `{ x: 0.52, y: 0.42 }`, to the right of centre, where a sidebar's
|
|
41
|
+
* dropzone on the left stays in view.
|
|
42
|
+
*/
|
|
43
|
+
at?: {
|
|
44
|
+
x: number;
|
|
45
|
+
y: number;
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
/** A row as the page draws it: every column worked out here, not there. */
|
|
49
|
+
export type FileRow = {
|
|
50
|
+
name: string;
|
|
51
|
+
content: string;
|
|
52
|
+
type: string;
|
|
53
|
+
size: string;
|
|
54
|
+
kind: string;
|
|
55
|
+
};
|
|
56
|
+
export declare function fileRows(files: readonly StagedFile[]): FileRow[];
|
|
57
|
+
/**
|
|
58
|
+
* Runs in the page: draws the window and wires its selection and its drag.
|
|
59
|
+
* Self-contained, as everything handed to `page.evaluate` must be.
|
|
60
|
+
*/
|
|
61
|
+
export declare function drawFileWindow(args: {
|
|
62
|
+
rows: FileRow[];
|
|
63
|
+
title: string;
|
|
64
|
+
left: number;
|
|
65
|
+
top: number;
|
|
66
|
+
}): void;
|