screenci 0.0.75 → 0.0.78
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.d.ts +62 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +699 -229
- package/dist/cli.js.map +1 -1
- package/dist/docs/manifest.d.ts +277 -91
- package/dist/docs/manifest.d.ts.map +1 -1
- package/dist/docs/manifest.js +101 -30
- package/dist/docs/manifest.js.map +1 -1
- package/dist/docs/video-sources/camera-and-zooming.screenci.d.ts +2 -0
- package/dist/docs/video-sources/camera-and-zooming.screenci.d.ts.map +1 -0
- package/dist/docs/video-sources/camera-and-zooming.screenci.js +57 -0
- package/dist/docs/video-sources/camera-and-zooming.screenci.js.map +1 -0
- package/dist/docs/video-sources/installation.screenci.js +19 -10
- package/dist/docs/video-sources/installation.screenci.js.map +1 -1
- package/dist/docs/video-sources/landing.screenci.js +6 -8
- package/dist/docs/video-sources/landing.screenci.js.map +1 -1
- package/dist/docs/video-sources/languages.screenci.d.ts +2 -0
- package/dist/docs/video-sources/languages.screenci.d.ts.map +1 -0
- package/dist/docs/video-sources/languages.screenci.js +68 -0
- package/dist/docs/video-sources/languages.screenci.js.map +1 -0
- package/dist/docs/video-sources/locator-highlight-animated.screenci.js +4 -5
- package/dist/docs/video-sources/locator-highlight-animated.screenci.js.map +1 -1
- package/dist/docs/video-sources/locator-highlight-still.screenci.js +3 -4
- package/dist/docs/video-sources/locator-highlight-still.screenci.js.map +1 -1
- package/dist/docs/video-sources/narration.screenci.d.ts +2 -0
- package/dist/docs/video-sources/narration.screenci.d.ts.map +1 -0
- package/dist/docs/video-sources/narration.screenci.js +71 -0
- package/dist/docs/video-sources/narration.screenci.js.map +1 -0
- package/dist/docs/video-sources/public-urls-and-embeds.screenci.d.ts +2 -0
- package/dist/docs/video-sources/public-urls-and-embeds.screenci.d.ts.map +1 -0
- package/dist/docs/video-sources/public-urls-and-embeds.screenci.js +60 -0
- package/dist/docs/video-sources/public-urls-and-embeds.screenci.js.map +1 -0
- package/dist/docs/video-sources/speaking-style.screenci.d.ts +2 -0
- package/dist/docs/video-sources/speaking-style.screenci.d.ts.map +1 -0
- package/dist/docs/video-sources/speaking-style.screenci.js +76 -0
- package/dist/docs/video-sources/speaking-style.screenci.js.map +1 -0
- package/dist/docs/video-sources/studio.screenci.js +8 -10
- package/dist/docs/video-sources/studio.screenci.js.map +1 -1
- package/dist/docs/video-sources/vertical-video.screenci.d.ts +2 -0
- package/dist/docs/video-sources/vertical-video.screenci.d.ts.map +1 -0
- package/dist/docs/video-sources/vertical-video.screenci.js +58 -0
- package/dist/docs/video-sources/vertical-video.screenci.js.map +1 -0
- package/dist/docs/videos.d.ts +20 -0
- package/dist/docs/videos.d.ts.map +1 -1
- package/dist/docs/videos.js +25 -0
- package/dist/docs/videos.js.map +1 -1
- package/dist/e2e/instrument.e2e.js +60 -1
- package/dist/e2e/instrument.e2e.js.map +1 -1
- package/dist/e2e/redact.e2e.d.ts +2 -0
- package/dist/e2e/redact.e2e.d.ts.map +1 -0
- package/dist/e2e/redact.e2e.js +161 -0
- package/dist/e2e/redact.e2e.js.map +1 -0
- package/dist/index.d.ts +12 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -2
- package/dist/index.js.map +1 -1
- package/dist/src/asset.d.ts +174 -14
- package/dist/src/asset.d.ts.map +1 -1
- package/dist/src/asset.js +320 -39
- package/dist/src/asset.js.map +1 -1
- package/dist/src/assetHash.d.ts +27 -0
- package/dist/src/assetHash.d.ts.map +1 -0
- package/dist/src/assetHash.js +0 -0
- package/dist/src/assetHash.js.map +1 -0
- package/dist/src/audio.d.ts +20 -1
- package/dist/src/audio.d.ts.map +1 -1
- package/dist/src/audio.js +126 -24
- package/dist/src/audio.js.map +1 -1
- package/dist/src/autoZoom.d.ts.map +1 -1
- package/dist/src/autoZoom.js +3 -1
- package/dist/src/autoZoom.js.map +1 -1
- package/dist/src/browserLaunchOptions.d.ts +24 -2
- package/dist/src/browserLaunchOptions.d.ts.map +1 -1
- package/dist/src/browserLaunchOptions.js +57 -3
- package/dist/src/browserLaunchOptions.js.map +1 -1
- package/dist/src/builder.d.ts +229 -136
- package/dist/src/builder.d.ts.map +1 -1
- package/dist/src/builder.js +264 -77
- package/dist/src/builder.js.map +1 -1
- package/dist/src/callerFile.d.ts +12 -0
- package/dist/src/callerFile.d.ts.map +1 -0
- package/dist/src/callerFile.js +46 -0
- package/dist/src/callerFile.js.map +1 -0
- package/dist/src/changeFocus.d.ts.map +1 -1
- package/dist/src/changeFocus.js +109 -36
- package/dist/src/changeFocus.js.map +1 -1
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/config.js +15 -0
- package/dist/src/config.js.map +1 -1
- package/dist/src/cue.d.ts +29 -17
- package/dist/src/cue.d.ts.map +1 -1
- package/dist/src/cue.js +138 -61
- package/dist/src/cue.js.map +1 -1
- package/dist/src/declare.d.ts +63 -0
- package/dist/src/declare.d.ts.map +1 -0
- package/dist/src/declare.js +111 -0
- package/dist/src/declare.js.map +1 -0
- package/dist/src/defaults.d.ts +23 -0
- package/dist/src/defaults.d.ts.map +1 -1
- package/dist/src/defaults.js +27 -3
- package/dist/src/defaults.js.map +1 -1
- package/dist/src/events.d.ts +339 -25
- package/dist/src/events.d.ts.map +1 -1
- package/dist/src/events.js +250 -26
- package/dist/src/events.js.map +1 -1
- package/dist/src/htmlRasterizer.d.ts +10 -0
- package/dist/src/htmlRasterizer.d.ts.map +1 -1
- package/dist/src/htmlRasterizer.js +12 -2
- package/dist/src/htmlRasterizer.js.map +1 -1
- package/dist/src/init.d.ts +2 -0
- package/dist/src/init.d.ts.map +1 -1
- package/dist/src/init.js +81 -33
- package/dist/src/init.js.map +1 -1
- package/dist/src/instrument.d.ts.map +1 -1
- package/dist/src/instrument.js +164 -8
- package/dist/src/instrument.js.map +1 -1
- package/dist/src/locales.d.ts.map +1 -1
- package/dist/src/locales.js +1 -0
- package/dist/src/locales.js.map +1 -1
- package/dist/src/localize.d.ts +26 -17
- package/dist/src/localize.d.ts.map +1 -1
- package/dist/src/localize.js +19 -11
- package/dist/src/localize.js.map +1 -1
- package/dist/src/localizeRuntime.d.ts +29 -33
- package/dist/src/localizeRuntime.d.ts.map +1 -1
- package/dist/src/localizeRuntime.js +74 -49
- package/dist/src/localizeRuntime.js.map +1 -1
- package/dist/src/logger.d.ts +5 -0
- package/dist/src/logger.d.ts.map +1 -1
- package/dist/src/logger.js +7 -0
- package/dist/src/logger.js.map +1 -1
- package/dist/src/manualZoom.d.ts.map +1 -1
- package/dist/src/manualZoom.js +8 -5
- package/dist/src/manualZoom.js.map +1 -1
- package/dist/src/narrationVisibility.d.ts +19 -0
- package/dist/src/narrationVisibility.d.ts.map +1 -0
- package/dist/src/narrationVisibility.js +26 -0
- package/dist/src/narrationVisibility.js.map +1 -0
- package/dist/src/openBrowser.d.ts +34 -0
- package/dist/src/openBrowser.d.ts.map +1 -0
- package/dist/src/openBrowser.js +62 -0
- package/dist/src/openBrowser.js.map +1 -0
- package/dist/src/recordingData.d.ts +27 -0
- package/dist/src/recordingData.d.ts.map +1 -1
- package/dist/src/recordingSize.d.ts +32 -0
- package/dist/src/recordingSize.d.ts.map +1 -0
- package/dist/src/recordingSize.js +54 -0
- package/dist/src/recordingSize.js.map +1 -0
- package/dist/src/redact.d.ts +68 -0
- package/dist/src/redact.d.ts.map +1 -0
- package/dist/src/redact.js +138 -0
- package/dist/src/redact.js.map +1 -0
- package/dist/src/redactController.d.ts +61 -0
- package/dist/src/redactController.d.ts.map +1 -0
- package/dist/src/redactController.js +232 -0
- package/dist/src/redactController.js.map +1 -0
- package/dist/src/runtimeContext.d.ts +32 -0
- package/dist/src/runtimeContext.d.ts.map +1 -1
- package/dist/src/runtimeContext.js +21 -0
- package/dist/src/runtimeContext.js.map +1 -1
- package/dist/src/runtimeMode.d.ts +15 -7
- package/dist/src/runtimeMode.d.ts.map +1 -1
- package/dist/src/runtimeMode.js +17 -6
- package/dist/src/runtimeMode.js.map +1 -1
- package/dist/src/screenAudio.d.ts +88 -0
- package/dist/src/screenAudio.d.ts.map +1 -0
- package/dist/src/screenAudio.js +0 -0
- package/dist/src/screenAudio.js.map +1 -0
- package/dist/src/screenAudioSink.d.ts +46 -0
- package/dist/src/screenAudioSink.d.ts.map +1 -0
- package/dist/src/screenAudioSink.js +77 -0
- package/dist/src/screenAudioSink.js.map +1 -0
- package/dist/src/screenshot.d.ts +27 -29
- package/dist/src/screenshot.d.ts.map +1 -1
- package/dist/src/screenshot.js +39 -24
- package/dist/src/screenshot.js.map +1 -1
- package/dist/src/sourceTrim.d.ts +29 -0
- package/dist/src/sourceTrim.d.ts.map +1 -0
- package/dist/src/sourceTrim.js +76 -0
- package/dist/src/sourceTrim.js.map +1 -0
- package/dist/src/stillCapture.d.ts +5 -0
- package/dist/src/stillCapture.d.ts.map +1 -1
- package/dist/src/stillCapture.js +11 -1
- package/dist/src/stillCapture.js.map +1 -1
- package/dist/src/studio.d.ts +69 -57
- package/dist/src/studio.d.ts.map +1 -1
- package/dist/src/studio.js +16 -38
- package/dist/src/studio.js.map +1 -1
- package/dist/src/timelineOffset.d.ts +46 -0
- package/dist/src/timelineOffset.d.ts.map +1 -0
- package/dist/src/timelineOffset.js +66 -0
- package/dist/src/timelineOffset.js.map +1 -0
- package/dist/src/titleValidation.d.ts +38 -0
- package/dist/src/titleValidation.d.ts.map +1 -1
- package/dist/src/titleValidation.js +42 -0
- package/dist/src/titleValidation.js.map +1 -1
- package/dist/src/types.d.ts +218 -2
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js +1 -1
- package/dist/src/types.js.map +1 -1
- package/dist/src/video.d.ts +74 -60
- package/dist/src/video.d.ts.map +1 -1
- package/dist/src/video.js +201 -39
- package/dist/src/video.js.map +1 -1
- package/dist/src/voiceSampleAudio.d.ts +34 -0
- package/dist/src/voiceSampleAudio.d.ts.map +1 -0
- package/dist/src/voiceSampleAudio.js +105 -0
- package/dist/src/voiceSampleAudio.js.map +1 -0
- package/dist/src/voices.d.ts +2 -2
- package/dist/src/voices.d.ts.map +1 -1
- package/dist/src/voices.js +8 -3
- package/dist/src/voices.js.map +1 -1
- package/dist/src/zoom.d.ts +1 -0
- package/dist/src/zoom.d.ts.map +1 -1
- package/dist/src/zoom.js +3 -0
- package/dist/src/zoom.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -2
- package/skills/screenci/SKILL.md +2 -2
- package/skills/screenci/references/init.md +4 -3
- package/skills/screenci/references/record.md +1 -1
- package/templates/recordings/assets/logo.png +0 -0
- package/dist/docs/video-sources/public-urls.screenci.d.ts +0 -2
- package/dist/docs/video-sources/public-urls.screenci.d.ts.map +0 -1
- package/dist/docs/video-sources/public-urls.screenci.js +0 -41
- package/dist/docs/video-sources/public-urls.screenci.js.map +0 -1
package/dist/src/localize.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { supportedLanguages } from './voices.js';
|
|
2
|
+
import { validateCrop, resolveSourceTrim } from './sourceTrim.js';
|
|
2
3
|
const SUPPORTED_LANGUAGE_SET = new Set(supportedLanguages);
|
|
3
4
|
function dedupe(values) {
|
|
4
5
|
const seen = new Set();
|
|
@@ -27,7 +28,7 @@ function collectSeededNames(seed) {
|
|
|
27
28
|
}
|
|
28
29
|
return out;
|
|
29
30
|
}
|
|
30
|
-
function normalizeCueValue(name, value) {
|
|
31
|
+
export function normalizeCueValue(name, value) {
|
|
31
32
|
if (typeof value === 'string') {
|
|
32
33
|
return { kind: 'text', text: value };
|
|
33
34
|
}
|
|
@@ -44,11 +45,18 @@ function normalizeCueValue(name, value) {
|
|
|
44
45
|
throw new Error(`localize(): narration cue "${name}" must be a string, a { cue } object, or a { media | path } object.`);
|
|
45
46
|
}
|
|
46
47
|
const path = 'media' in value ? value.media : value.path;
|
|
48
|
+
const label = `localize() narration cue "${name}" media "${path}"`;
|
|
49
|
+
if (value.crop !== undefined)
|
|
50
|
+
validateCrop(label, value.crop);
|
|
51
|
+
const { sourceStart, sourceEnd } = resolveSourceTrim(label, value.start, value.end);
|
|
47
52
|
return {
|
|
48
53
|
kind: 'media',
|
|
49
54
|
path,
|
|
50
55
|
...(value.subtitle !== undefined && { subtitle: value.subtitle }),
|
|
51
56
|
...(value.volume !== undefined && { volume: value.volume }),
|
|
57
|
+
...(value.crop !== undefined && { crop: value.crop }),
|
|
58
|
+
...(sourceStart !== undefined && { sourceStart }),
|
|
59
|
+
...(sourceEnd !== undefined && { sourceEnd }),
|
|
52
60
|
};
|
|
53
61
|
}
|
|
54
62
|
/** Languages a seeded map provides values for, in first-seen order. */
|
|
@@ -107,7 +115,7 @@ function normalizeNarration(input) {
|
|
|
107
115
|
seedLangs: seedLanguages(input),
|
|
108
116
|
};
|
|
109
117
|
}
|
|
110
|
-
function
|
|
118
|
+
function normalizeValues(input) {
|
|
111
119
|
const hasSeed = input !== undefined && Object.keys(input).length > 0;
|
|
112
120
|
if (!hasSeed) {
|
|
113
121
|
return { normalized: null, seedLangs: [] };
|
|
@@ -147,19 +155,19 @@ function normalizeVoice(voice, languages) {
|
|
|
147
155
|
return out;
|
|
148
156
|
}
|
|
149
157
|
/**
|
|
150
|
-
* Normalize and validate a localize spec: resolve narration/
|
|
158
|
+
* Normalize and validate a localize spec: resolve narration/values into seeded
|
|
151
159
|
* values + Studio name lists, infer the language set (union of seeded keys and
|
|
152
160
|
* the explicit `languages`), and validate disjointness, identical seeded keys,
|
|
153
161
|
* and voice coverage. Pure and exported for testing.
|
|
154
162
|
*/
|
|
155
163
|
export function normalizeLocalizeSpec(spec) {
|
|
156
164
|
const { normalized: narration, seedLangs: narrationLangs } = normalizeNarration(spec.narration);
|
|
157
|
-
const { normalized:
|
|
165
|
+
const { normalized: values, seedLangs: valuesLangs } = normalizeValues(spec.values);
|
|
158
166
|
const hasExplicitLanguages = spec.languages !== undefined && spec.languages.length > 0;
|
|
159
|
-
if (narration === null &&
|
|
160
|
-
throw new Error('localize(): nothing to localize. Provide narration and/or
|
|
167
|
+
if (narration === null && values === null && !hasExplicitLanguages) {
|
|
168
|
+
throw new Error('localize(): nothing to localize. Provide narration and/or values (seeded maps), or pass `languages: [...]` when every cue/field is Studio-managed via video.studio({...}).');
|
|
161
169
|
}
|
|
162
|
-
const seededLanguages = dedupe([...narrationLangs, ...
|
|
170
|
+
const seededLanguages = dedupe([...narrationLangs, ...valuesLangs]);
|
|
163
171
|
let languages;
|
|
164
172
|
if (hasExplicitLanguages) {
|
|
165
173
|
languages = dedupe([...spec.languages, ...seededLanguages]);
|
|
@@ -168,7 +176,7 @@ export function normalizeLocalizeSpec(spec) {
|
|
|
168
176
|
languages = seededLanguages;
|
|
169
177
|
}
|
|
170
178
|
else {
|
|
171
|
-
throw new Error('localize(): no languages. Pass `languages: [...]`, or seed narration/
|
|
179
|
+
throw new Error('localize(): no languages. Pass `languages: [...]`, or seed narration/values with per-language values.');
|
|
172
180
|
}
|
|
173
181
|
for (const lang of languages) {
|
|
174
182
|
if (!SUPPORTED_LANGUAGE_SET.has(lang)) {
|
|
@@ -178,8 +186,8 @@ export function normalizeLocalizeSpec(spec) {
|
|
|
178
186
|
if (narration !== null) {
|
|
179
187
|
assertIdenticalSeededKeys('narration', narration.seedByLang, narration.seededNames, languages);
|
|
180
188
|
}
|
|
181
|
-
if (
|
|
182
|
-
assertIdenticalSeededKeys('
|
|
189
|
+
if (values !== null) {
|
|
190
|
+
assertIdenticalSeededKeys('values', values.seedByLang, values.seededNames, languages);
|
|
183
191
|
}
|
|
184
192
|
const voiceByLang = normalizeVoice(spec.voice, languages);
|
|
185
193
|
return {
|
|
@@ -188,7 +196,7 @@ export function normalizeLocalizeSpec(spec) {
|
|
|
188
196
|
browserLocale: spec.browserLocale ?? true,
|
|
189
197
|
...(spec.locales !== undefined && { locales: spec.locales }),
|
|
190
198
|
narration,
|
|
191
|
-
|
|
199
|
+
values,
|
|
192
200
|
voiceByLang,
|
|
193
201
|
};
|
|
194
202
|
}
|
package/dist/src/localize.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"localize.js","sourceRoot":"","sources":["../../src/localize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAa,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"localize.js","sourceRoot":"","sources":["../../src/localize.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,53 +1,49 @@
|
|
|
1
1
|
import { type NarrationCue } from './cue.js';
|
|
2
|
-
import type
|
|
3
|
-
import type {
|
|
2
|
+
import { type LocalizeNarrationValue, type VoiceConfig } from './localize.js';
|
|
3
|
+
import type { NormalizedFeature } from './declare.js';
|
|
4
|
+
import type { ValuesOverrides } from './runtimeMode.js';
|
|
4
5
|
import type { TopLevelVoiceConfig } from './voiceConfig.js';
|
|
5
6
|
import type { RenderOptions } from './types.js';
|
|
6
7
|
/**
|
|
7
8
|
* The config/global default narration voice from a recording's render options.
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* deferred to Studio (`video.studio({ renderOptions: true })`) there is no code
|
|
11
|
-
* voice here (Studio owns it at render).
|
|
9
|
+
* Lowest-priority entry in the voice cascade: the per-cue `voice` overrides it.
|
|
10
|
+
* When render options are deferred to Studio there is no code voice here.
|
|
12
11
|
*/
|
|
13
12
|
export declare function narrationVoiceConfigFromRenderOptions(renderOptions: RenderOptions | undefined, studioRenderOptions: boolean): TopLevelVoiceConfig | undefined;
|
|
14
13
|
/** Narration markers keyed by cue name. Markers carry timing, never text. */
|
|
15
14
|
export type NarrationMarkers = Record<string, NarrationCue>;
|
|
16
|
-
/** Per-language
|
|
17
|
-
export type
|
|
15
|
+
/** Per-language values fields, keyed by field name. */
|
|
16
|
+
export type Values = Record<string, string>;
|
|
18
17
|
/**
|
|
19
|
-
* Build the `narration` marker object
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
* text is owned by Studio. The markers expose only timing, never the text.
|
|
23
|
-
*
|
|
24
|
-
* The narration voice is resolved per `(cue, language)`: per-cue `voice` →
|
|
25
|
-
* localize `voiceByLang` → the config/global `defaultVoice` → a built-in voice.
|
|
18
|
+
* Build the `narration` marker object. Code cues emit translations (resolved per
|
|
19
|
+
* `(cue, language)`, filtered to the active language by the recorder); studio
|
|
20
|
+
* (array) cues emit studio cue starts whose text is owned by the web app.
|
|
26
21
|
*/
|
|
27
|
-
export declare function buildNarrationMarkers(
|
|
22
|
+
export declare function buildNarrationMarkers(narration: NormalizedFeature<LocalizeNarrationValue> | null | undefined, languages: string[], defaultVoice?: TopLevelVoiceConfig, voiceByLang?: Partial<Record<string, VoiceConfig>>, anchorFile?: string): NarrationMarkers;
|
|
28
23
|
/**
|
|
29
|
-
* Resolve the `
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
* to the empty string (the recording still succeeds, and Studio learns the field
|
|
33
|
-
* from the emitted declaration and flags it as needing input).
|
|
24
|
+
* Resolve the `values` fields for the active language: a Studio override wins
|
|
25
|
+
* over the per-language seed, which wins over the shared value, then the empty
|
|
26
|
+
* string (Studio-owned fields stay empty until set in the web app).
|
|
34
27
|
*/
|
|
35
|
-
export declare function
|
|
36
|
-
/** A localized
|
|
37
|
-
export type
|
|
38
|
-
/** Every field name (
|
|
28
|
+
export declare function buildValues(feature: NormalizedFeature<string> | null | undefined, language: string | undefined, overrides?: ValuesOverrides | null): Values;
|
|
29
|
+
/** A localized values declaration emitted to the backend at recording start. */
|
|
30
|
+
export type ValuesDeclaration = {
|
|
31
|
+
/** Every field name (code then Studio-managed), in declared order. */
|
|
39
32
|
fields: string[];
|
|
40
|
-
/** Studio-managed field names (
|
|
33
|
+
/** Studio-managed field names (`studio([...])`/`studio({...})`). */
|
|
41
34
|
studioFields: string[];
|
|
42
|
-
/**
|
|
35
|
+
/**
|
|
36
|
+
* Seeds keyed `{ [language]: { [field]: value } }`: code-owned fields and seeded
|
|
37
|
+
* Studio fields (`studio({...})`). A seeded Studio field appears in both
|
|
38
|
+
* `studioFields` (the web app owns it) and `seed` (its initial value). Omitted
|
|
39
|
+
* when empty.
|
|
40
|
+
*/
|
|
43
41
|
seed?: Record<string, Record<string, string>>;
|
|
44
42
|
};
|
|
45
43
|
/**
|
|
46
|
-
* Build the declaration of `
|
|
47
|
-
* backend learns which fields exist and their code seeds
|
|
48
|
-
*
|
|
49
|
-
* how cue translations carry a single language). Returns `null` when the spec
|
|
50
|
-
* declares no `text`.
|
|
44
|
+
* Build the declaration of `values` fields to emit at recording start so the
|
|
45
|
+
* backend learns which fields exist (and their code seeds) and can present the
|
|
46
|
+
* Studio-managed ones for the user to fill. Returns `null` when none declared.
|
|
51
47
|
*/
|
|
52
|
-
export declare function
|
|
48
|
+
export declare function buildValuesDeclaration(feature: NormalizedFeature<string> | null | undefined, language: string | undefined): ValuesDeclaration | null;
|
|
53
49
|
//# sourceMappingURL=localizeRuntime.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"localizeRuntime.d.ts","sourceRoot":"","sources":["../../src/localizeRuntime.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"localizeRuntime.d.ts","sourceRoot":"","sources":["../../src/localizeRuntime.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,YAAY,EAAE,MAAM,UAAU,CAAA;AACzE,OAAO,EAEL,KAAK,sBAAsB,EAG3B,KAAK,WAAW,EACjB,MAAM,eAAe,CAAA;AACtB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAErD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/C;;;;GAIG;AACH,wBAAgB,qCAAqC,CACnD,aAAa,EAAE,aAAa,GAAG,SAAS,EACxC,mBAAmB,EAAE,OAAO,GAC3B,mBAAmB,GAAG,SAAS,CAKjC;AAED,6EAA6E;AAC7E,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;AAE3D,uDAAuD;AACvD,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAkC3C;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,iBAAiB,CAAC,sBAAsB,CAAC,GAAG,IAAI,GAAG,SAAS,EACvE,SAAS,EAAE,MAAM,EAAE,EACnB,YAAY,CAAC,EAAE,mBAAmB,EAClC,WAAW,GAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAM,EAItD,UAAU,CAAC,EAAE,MAAM,GAClB,gBAAgB,CAQlB;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE,iBAAiB,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,SAAS,EACrD,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,SAAS,CAAC,EAAE,eAAe,GAAG,IAAI,GACjC,MAAM,CAUR;AAED,gFAAgF;AAChF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,sEAAsE;IACtE,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,oEAAoE;IACpE,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;CAC9C,CAAA;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,iBAAiB,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,SAAS,EACrD,QAAQ,EAAE,MAAM,GAAG,SAAS,GAC3B,iBAAiB,GAAG,IAAI,CAyB1B"}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import { buildLocalizedNarrationCues
|
|
1
|
+
import { buildLocalizedNarrationCues } from './cue.js';
|
|
2
|
+
import { normalizeCueValue, } from './localize.js';
|
|
2
3
|
/**
|
|
3
4
|
* The config/global default narration voice from a recording's render options.
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* deferred to Studio (`video.studio({ renderOptions: true })`) there is no code
|
|
7
|
-
* voice here (Studio owns it at render).
|
|
5
|
+
* Lowest-priority entry in the voice cascade: the per-cue `voice` overrides it.
|
|
6
|
+
* When render options are deferred to Studio there is no code voice here.
|
|
8
7
|
*/
|
|
9
8
|
export function narrationVoiceConfigFromRenderOptions(renderOptions, studioRenderOptions) {
|
|
10
9
|
if (studioRenderOptions || renderOptions === undefined) {
|
|
@@ -13,65 +12,91 @@ export function narrationVoiceConfigFromRenderOptions(renderOptions, studioRende
|
|
|
13
12
|
return renderOptions.narration?.voice;
|
|
14
13
|
}
|
|
15
14
|
/**
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
* text is owned by Studio. The markers expose only timing, never the text.
|
|
20
|
-
*
|
|
21
|
-
* The narration voice is resolved per `(cue, language)`: per-cue `voice` →
|
|
22
|
-
* localize `voiceByLang` → the config/global `defaultVoice` → a built-in voice.
|
|
15
|
+
* Convert a per-feature narration declaration into the normalized shape the voice
|
|
16
|
+
* / translation pipeline consumes. Each language resolves `byLang[lang] ?? shared`
|
|
17
|
+
* (the fallback-to-shared rule); a studio (array) declaration carries names only.
|
|
23
18
|
*/
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
19
|
+
function featureToNormalizedNarration(feature, languages) {
|
|
20
|
+
if (feature === null)
|
|
21
|
+
return null;
|
|
22
|
+
const seedByLang = {};
|
|
23
|
+
for (const lang of languages) {
|
|
24
|
+
const cues = {};
|
|
25
|
+
// Seed every named cue that has a value: code-owned cues and seeded Studio
|
|
26
|
+
// cues (`studio({...})`). Blank Studio cues (`studio([...])`) have no value, so
|
|
27
|
+
// they carry no seed (the web app owns their text). `buildLocalizedNarrationCues`
|
|
28
|
+
// short-circuits Studio names, so a seed here is backend-facing metadata only.
|
|
29
|
+
for (const name of feature.names) {
|
|
30
|
+
const value = feature.byLang[lang]?.[name] ?? feature.shared[name];
|
|
31
|
+
if (value !== undefined)
|
|
32
|
+
cues[name] = normalizeCueValue(name, value);
|
|
33
|
+
}
|
|
34
|
+
if (Object.keys(cues).length > 0)
|
|
35
|
+
seedByLang[lang] = cues;
|
|
36
|
+
}
|
|
37
|
+
return {
|
|
38
|
+
cueNames: feature.names,
|
|
39
|
+
studioNames: feature.studioNames,
|
|
40
|
+
seededNames: feature.codeNames,
|
|
41
|
+
seedByLang,
|
|
42
|
+
};
|
|
31
43
|
}
|
|
32
44
|
/**
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
* to the empty string (the recording still succeeds, and Studio learns the field
|
|
37
|
-
* from the emitted declaration and flags it as needing input).
|
|
45
|
+
* Build the `narration` marker object. Code cues emit translations (resolved per
|
|
46
|
+
* `(cue, language)`, filtered to the active language by the recorder); studio
|
|
47
|
+
* (array) cues emit studio cue starts whose text is owned by the web app.
|
|
38
48
|
*/
|
|
39
|
-
export function
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
49
|
+
export function buildNarrationMarkers(narration, languages, defaultVoice, voiceByLang = {},
|
|
50
|
+
// The `.screenci` script that media paths resolve against. When provided, the
|
|
51
|
+
// file-backed cues' media is pre-warmed (hashed) up front so their start()
|
|
52
|
+
// does not pay the read on the recording timeline. Omitted outside recording.
|
|
53
|
+
anchorFile) {
|
|
54
|
+
const normalized = featureToNormalizedNarration(narration ?? null, languages);
|
|
55
|
+
return buildLocalizedNarrationCues(normalized, voiceByLang, defaultVoice, anchorFile);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Resolve the `values` fields for the active language: a Studio override wins
|
|
59
|
+
* over the per-language seed, which wins over the shared value, then the empty
|
|
60
|
+
* string (Studio-owned fields stay empty until set in the web app).
|
|
61
|
+
*/
|
|
62
|
+
export function buildValues(feature, language, overrides) {
|
|
63
|
+
if (!feature || feature.names.length === 0)
|
|
43
64
|
return {};
|
|
44
65
|
const override = language !== undefined ? overrides?.[language] : undefined;
|
|
45
|
-
const
|
|
46
|
-
? text.seedByLang[language]
|
|
47
|
-
: undefined;
|
|
66
|
+
const langSeed = language !== undefined ? feature.byLang[language] : undefined;
|
|
48
67
|
const values = {};
|
|
49
|
-
for (const field of
|
|
50
|
-
values[field] =
|
|
68
|
+
for (const field of feature.names) {
|
|
69
|
+
values[field] =
|
|
70
|
+
override?.[field] ?? langSeed?.[field] ?? feature.shared[field] ?? '';
|
|
51
71
|
}
|
|
52
72
|
return values;
|
|
53
73
|
}
|
|
54
74
|
/**
|
|
55
|
-
* Build the declaration of `
|
|
56
|
-
* backend learns which fields exist and their code seeds
|
|
57
|
-
*
|
|
58
|
-
* how cue translations carry a single language). Returns `null` when the spec
|
|
59
|
-
* declares no `text`.
|
|
75
|
+
* Build the declaration of `values` fields to emit at recording start so the
|
|
76
|
+
* backend learns which fields exist (and their code seeds) and can present the
|
|
77
|
+
* Studio-managed ones for the user to fill. Returns `null` when none declared.
|
|
60
78
|
*/
|
|
61
|
-
export function
|
|
62
|
-
|
|
63
|
-
const seededFields = text?.fieldNames ?? [];
|
|
64
|
-
const fields = [...seededFields, ...studioText];
|
|
65
|
-
if (fields.length === 0)
|
|
79
|
+
export function buildValuesDeclaration(feature, language) {
|
|
80
|
+
if (!feature || feature.names.length === 0)
|
|
66
81
|
return null;
|
|
67
82
|
const declaration = {
|
|
68
|
-
fields,
|
|
69
|
-
studioFields:
|
|
83
|
+
fields: feature.names,
|
|
84
|
+
studioFields: feature.studioNames,
|
|
70
85
|
};
|
|
71
|
-
if (language !== undefined
|
|
72
|
-
const
|
|
73
|
-
|
|
74
|
-
|
|
86
|
+
if (language !== undefined) {
|
|
87
|
+
const merged = {
|
|
88
|
+
...feature.shared,
|
|
89
|
+
...(feature.byLang[language] ?? {}),
|
|
90
|
+
};
|
|
91
|
+
// Seed every named field that has a value: code-owned fields and seeded Studio
|
|
92
|
+
// fields (`studio({...})`). Blank Studio fields (`studio([...])`) have no value.
|
|
93
|
+
const codeSeed = {};
|
|
94
|
+
for (const field of feature.names) {
|
|
95
|
+
if (merged[field] !== undefined)
|
|
96
|
+
codeSeed[field] = merged[field];
|
|
97
|
+
}
|
|
98
|
+
if (Object.keys(codeSeed).length > 0) {
|
|
99
|
+
declaration.seed = { [language]: codeSeed };
|
|
75
100
|
}
|
|
76
101
|
}
|
|
77
102
|
return declaration;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"localizeRuntime.js","sourceRoot":"","sources":["../../src/localizeRuntime.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"localizeRuntime.js","sourceRoot":"","sources":["../../src/localizeRuntime.ts"],"names":[],"mappings":"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"}
|
package/dist/src/logger.d.ts
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
export declare const logger: {
|
|
2
2
|
info: (...args: unknown[]) => void;
|
|
3
3
|
warn: (...args: unknown[]) => void;
|
|
4
|
+
/**
|
|
5
|
+
* Informational message printed in cyan. Use for non-error notices surfaced
|
|
6
|
+
* to the author (for example, backend `notices` shown at record time).
|
|
7
|
+
*/
|
|
8
|
+
notice: (message: string) => void;
|
|
4
9
|
error: (...args: unknown[]) => void;
|
|
5
10
|
};
|
|
6
11
|
export default logger;
|
package/dist/src/logger.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,MAAM;oBACD,OAAO,EAAE;oBAGT,OAAO,EAAE;
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,MAAM;oBACD,OAAO,EAAE;oBAGT,OAAO,EAAE;IAGzB;;;OAGG;sBACe,MAAM;qBAGP,OAAO,EAAE;CAG3B,CAAA;AAED,eAAe,MAAM,CAAA"}
|
package/dist/src/logger.js
CHANGED
|
@@ -6,6 +6,13 @@ export const logger = {
|
|
|
6
6
|
warn: (...args) => {
|
|
7
7
|
console.warn(pc.yellow('WARNING'), ...args);
|
|
8
8
|
},
|
|
9
|
+
/**
|
|
10
|
+
* Informational message printed in cyan. Use for non-error notices surfaced
|
|
11
|
+
* to the author (for example, backend `notices` shown at record time).
|
|
12
|
+
*/
|
|
13
|
+
notice: (message) => {
|
|
14
|
+
console.log(pc.cyan(message));
|
|
15
|
+
},
|
|
9
16
|
error: (...args) => {
|
|
10
17
|
console.error(...args);
|
|
11
18
|
},
|
package/dist/src/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAA;AAE3B,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,IAAI,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE;QAC3B,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAA;IACtB,CAAC;IACD,IAAI,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE;QAC3B,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,GAAG,IAAI,CAAC,CAAA;IAC7C,CAAC;IACD,KAAK,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE;QAC5B,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAA;IACxB,CAAC;CACF,CAAA;AAED,eAAe,MAAM,CAAA"}
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAA;AAE3B,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,IAAI,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE;QAC3B,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAA;IACtB,CAAC;IACD,IAAI,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE;QAC3B,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,GAAG,IAAI,CAAC,CAAA;IAC7C,CAAC;IACD;;;OAGG;IACH,MAAM,EAAE,CAAC,OAAe,EAAE,EAAE;QAC1B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAA;IAC/B,CAAC;IACD,KAAK,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE;QAC5B,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAA;IACxB,CAAC;CACF,CAAA;AAED,eAAe,MAAM,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manualZoom.d.ts","sourceRoot":"","sources":["../../src/manualZoom.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAQ,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"manualZoom.d.ts","sourceRoot":"","sources":["../../src/manualZoom.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAQ,MAAM,kBAAkB,CAAA;AAsBrD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AASjD,MAAM,MAAM,eAAe,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AACtD,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,eAAe,CAAA;AAoIlD,wBAAsB,MAAM,CAC1B,MAAM,EAAE,UAAU,EAClB,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAkBf;AAED,wBAAsB,SAAS,CAAC,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8D5E"}
|
package/dist/src/manualZoom.js
CHANGED
|
@@ -2,7 +2,7 @@ import { DEFAULT_ZOOM_OPTIONS } from './defaults.js';
|
|
|
2
2
|
import { ScreenciError } from './errors.js';
|
|
3
3
|
import { changeFocus, resolveFixedFocusViewportSize, resolveTargetRectPosition, } from './changeFocus.js';
|
|
4
4
|
import { getActiveAutoZoomRecorder, getActiveZoomPage, getAutoZoomState, setCurrentZoomViewport, setZoomMode, } from './autoZoom.js';
|
|
5
|
-
import { buildZoomEvent, resolveAutoZoomOptions, resolveZoomTarget, } from './zoom.js';
|
|
5
|
+
import { buildZoomEvent, resolveAutoZoomOptions, resolveEffectiveDuration, resolveZoomTarget, } from './zoom.js';
|
|
6
6
|
import { resolveRecordingTimingDuration } from './runtimeMode.js';
|
|
7
7
|
function sleep(ms) {
|
|
8
8
|
return new Promise((resolve) => setTimeout(resolve, resolveRecordingTimingDuration(ms)));
|
|
@@ -59,13 +59,15 @@ async function zoomToPoint(point, options = {}) {
|
|
|
59
59
|
}),
|
|
60
60
|
currentZoomEnd,
|
|
61
61
|
});
|
|
62
|
+
const isZoomOut = targetViewport.width >= currentZoomEnd.size.widthPx;
|
|
63
|
+
const effectiveDuration = resolveEffectiveDuration(resolvedOptions, isZoomOut);
|
|
62
64
|
const focusChangeStartMs = Date.now();
|
|
63
65
|
if (resolvedOptions.preZoomDelay > 0) {
|
|
64
66
|
await sleep(resolvedOptions.preZoomDelay);
|
|
65
67
|
}
|
|
66
68
|
const zoomStartMs = Date.now();
|
|
67
|
-
if (
|
|
68
|
-
await sleep(
|
|
69
|
+
if (effectiveDuration > 0) {
|
|
70
|
+
await sleep(effectiveDuration);
|
|
69
71
|
}
|
|
70
72
|
const zoomEndMs = Date.now();
|
|
71
73
|
if (resolvedOptions.postZoomDelay > 0) {
|
|
@@ -142,13 +144,14 @@ export async function resetZoom(options = {}) {
|
|
|
142
144
|
heightPx: viewport.viewportSize.height,
|
|
143
145
|
},
|
|
144
146
|
};
|
|
147
|
+
const resetDuration = resolvedOptions.zoomOutDuration;
|
|
145
148
|
const focusChangeStartMs = Date.now();
|
|
146
149
|
if (resolvedOptions.preZoomDelay > 0) {
|
|
147
150
|
await sleep(resolvedOptions.preZoomDelay);
|
|
148
151
|
}
|
|
149
152
|
const zoomStartMs = Date.now();
|
|
150
|
-
if (
|
|
151
|
-
await sleep(
|
|
153
|
+
if (resetDuration > 0) {
|
|
154
|
+
await sleep(resetDuration);
|
|
152
155
|
}
|
|
153
156
|
const zoomEndMs = Date.now();
|
|
154
157
|
if (resolvedOptions.postZoomDelay > 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manualZoom.js","sourceRoot":"","sources":["../../src/manualZoom.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"manualZoom.js","sourceRoot":"","sources":["../../src/manualZoom.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hides the narration (camera PIP) from this point on.
|
|
3
|
+
*
|
|
4
|
+
* Call {@link showNarration} to make it visible again.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```ts
|
|
8
|
+
* await hideNarration()
|
|
9
|
+
* await page.getByRole('button', { name: 'Submit' }).click()
|
|
10
|
+
* await showNarration()
|
|
11
|
+
* ```
|
|
12
|
+
*/
|
|
13
|
+
export declare function hideNarration(): Promise<void>;
|
|
14
|
+
/**
|
|
15
|
+
* Shows the narration (camera PIP) after it was hidden by {@link hideNarration}.
|
|
16
|
+
* No-op when the narration is already visible.
|
|
17
|
+
*/
|
|
18
|
+
export declare function showNarration(): Promise<void>;
|
|
19
|
+
//# sourceMappingURL=narrationVisibility.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"narrationVisibility.d.ts","sourceRoot":"","sources":["../../src/narrationVisibility.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAGnD;AAED;;;GAGG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAGnD"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { getActiveHideRecorder } from './timelineBlock.js';
|
|
2
|
+
/**
|
|
3
|
+
* Hides the narration (camera PIP) from this point on.
|
|
4
|
+
*
|
|
5
|
+
* Call {@link showNarration} to make it visible again.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```ts
|
|
9
|
+
* await hideNarration()
|
|
10
|
+
* await page.getByRole('button', { name: 'Submit' }).click()
|
|
11
|
+
* await showNarration()
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
export async function hideNarration() {
|
|
15
|
+
const recorder = getActiveHideRecorder();
|
|
16
|
+
recorder.addNarrationHide();
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Shows the narration (camera PIP) after it was hidden by {@link hideNarration}.
|
|
20
|
+
* No-op when the narration is already visible.
|
|
21
|
+
*/
|
|
22
|
+
export async function showNarration() {
|
|
23
|
+
const recorder = getActiveHideRecorder();
|
|
24
|
+
recorder.addNarrationShow();
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=narrationVisibility.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"narrationVisibility.js","sourceRoot":"","sources":["../../src/narrationVisibility.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAE1D;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,MAAM,QAAQ,GAAG,qBAAqB,EAAE,CAAA;IACxC,QAAQ,CAAC,gBAAgB,EAAE,CAAA;AAC7B,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,MAAM,QAAQ,GAAG,qBAAqB,EAAE,CAAA;IACxC,QAAQ,CAAC,gBAAgB,EAAE,CAAA;AAC7B,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { spawn } from 'child_process';
|
|
2
|
+
export type BrowserOpenSpec = {
|
|
3
|
+
command: string;
|
|
4
|
+
args: string[];
|
|
5
|
+
};
|
|
6
|
+
export type OpenBrowserResult = {
|
|
7
|
+
opened: true;
|
|
8
|
+
} | {
|
|
9
|
+
opened: false;
|
|
10
|
+
reason: string;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Resolve the platform-specific command that opens a URL in the default
|
|
14
|
+
* browser: `open` on macOS, `cmd /c start` on Windows, and `xdg-open`
|
|
15
|
+
* everywhere else (Linux, BSD). The empty `""` on Windows is `start`'s window
|
|
16
|
+
* title argument, so a quoted URL is not consumed as the title.
|
|
17
|
+
*/
|
|
18
|
+
export declare function resolveBrowserOpenSpec(url: string, platform?: NodeJS.Platform): BrowserOpenSpec;
|
|
19
|
+
/**
|
|
20
|
+
* Try to open `url` in the user's default browser. Best-effort: a synchronous
|
|
21
|
+
* spawn failure or an asynchronous launch error (e.g. `xdg-open` missing on a
|
|
22
|
+
* minimal Linux box) resolves to `{ opened: false, reason }` instead of
|
|
23
|
+
* throwing. A resolved `{ opened: true }` only means the launch was dispatched,
|
|
24
|
+
* not that a browser window actually appeared, so callers still surface the
|
|
25
|
+
* link as a fallback.
|
|
26
|
+
*
|
|
27
|
+
* Dependency-injected (`platform`, `spawnFn`) so tests can drive both outcomes
|
|
28
|
+
* without a real terminal or browser.
|
|
29
|
+
*/
|
|
30
|
+
export declare function openUrlInBrowser(url: string, options?: {
|
|
31
|
+
platform?: NodeJS.Platform;
|
|
32
|
+
spawnFn?: typeof spawn;
|
|
33
|
+
}): Promise<OpenBrowserResult>;
|
|
34
|
+
//# sourceMappingURL=openBrowser.d.ts.map
|