screenci 0.0.71 → 0.0.72

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 (95) hide show
  1. package/README.md +12 -12
  2. package/dist/cli.d.ts +8 -0
  3. package/dist/cli.d.ts.map +1 -1
  4. package/dist/cli.js +133 -10
  5. package/dist/cli.js.map +1 -1
  6. package/dist/docs/manifest.d.ts +3 -3
  7. package/dist/docs/manifest.js +1 -1
  8. package/dist/docs/manifest.js.map +1 -1
  9. package/dist/docs/video-sources/installation.screenci.js +13 -12
  10. package/dist/docs/video-sources/installation.screenci.js.map +1 -1
  11. package/dist/docs/video-sources/landing.screenci.js +16 -9
  12. package/dist/docs/video-sources/landing.screenci.js.map +1 -1
  13. package/dist/docs/video-sources/product-pitch.screenci.js +97 -32
  14. package/dist/docs/video-sources/product-pitch.screenci.js.map +1 -1
  15. package/dist/docs/video-sources/public-urls.screenci.js +16 -9
  16. package/dist/docs/video-sources/public-urls.screenci.js.map +1 -1
  17. package/dist/docs/video-sources/studio.screenci.js +42 -27
  18. package/dist/docs/video-sources/studio.screenci.js.map +1 -1
  19. package/dist/index.d.ts +7 -5
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +3 -4
  22. package/dist/index.js.map +1 -1
  23. package/dist/src/asset.d.ts +8 -23
  24. package/dist/src/asset.d.ts.map +1 -1
  25. package/dist/src/asset.js +10 -32
  26. package/dist/src/asset.js.map +1 -1
  27. package/dist/src/audio.d.ts +6 -24
  28. package/dist/src/audio.d.ts.map +1 -1
  29. package/dist/src/audio.js +10 -35
  30. package/dist/src/audio.js.map +1 -1
  31. package/dist/src/builder.d.ts +214 -0
  32. package/dist/src/builder.d.ts.map +1 -0
  33. package/dist/src/builder.js +212 -0
  34. package/dist/src/builder.js.map +1 -0
  35. package/dist/src/cue.d.ts +40 -123
  36. package/dist/src/cue.d.ts.map +1 -1
  37. package/dist/src/cue.js +190 -30
  38. package/dist/src/cue.js.map +1 -1
  39. package/dist/src/events.d.ts +80 -15
  40. package/dist/src/events.d.ts.map +1 -1
  41. package/dist/src/events.js +72 -6
  42. package/dist/src/events.js.map +1 -1
  43. package/dist/src/init.d.ts.map +1 -1
  44. package/dist/src/init.js +14 -13
  45. package/dist/src/init.js.map +1 -1
  46. package/dist/src/locales.d.ts +19 -0
  47. package/dist/src/locales.d.ts.map +1 -0
  48. package/dist/src/locales.js +60 -0
  49. package/dist/src/locales.js.map +1 -0
  50. package/dist/src/localize.d.ts +135 -0
  51. package/dist/src/localize.d.ts.map +1 -0
  52. package/dist/src/localize.js +195 -0
  53. package/dist/src/localize.js.map +1 -0
  54. package/dist/src/localizeRuntime.d.ts +53 -0
  55. package/dist/src/localizeRuntime.d.ts.map +1 -0
  56. package/dist/src/localizeRuntime.js +79 -0
  57. package/dist/src/localizeRuntime.js.map +1 -0
  58. package/dist/src/recordingData.d.ts +5 -4
  59. package/dist/src/recordingData.d.ts.map +1 -1
  60. package/dist/src/runtimeContext.d.ts +3 -4
  61. package/dist/src/runtimeContext.d.ts.map +1 -1
  62. package/dist/src/runtimeContext.js.map +1 -1
  63. package/dist/src/runtimeMode.d.ts +47 -0
  64. package/dist/src/runtimeMode.d.ts.map +1 -1
  65. package/dist/src/runtimeMode.js +124 -0
  66. package/dist/src/runtimeMode.js.map +1 -1
  67. package/dist/src/screenshot.d.ts +56 -2
  68. package/dist/src/screenshot.d.ts.map +1 -1
  69. package/dist/src/screenshot.js +47 -10
  70. package/dist/src/screenshot.js.map +1 -1
  71. package/dist/src/stillCapture.d.ts +2 -3
  72. package/dist/src/stillCapture.d.ts.map +1 -1
  73. package/dist/src/stillCapture.js.map +1 -1
  74. package/dist/src/studio.d.ts +55 -22
  75. package/dist/src/studio.d.ts.map +1 -1
  76. package/dist/src/studio.js +38 -12
  77. package/dist/src/studio.js.map +1 -1
  78. package/dist/src/types.d.ts +18 -5
  79. package/dist/src/types.d.ts.map +1 -1
  80. package/dist/src/types.js.map +1 -1
  81. package/dist/src/video.d.ts +149 -13
  82. package/dist/src/video.d.ts.map +1 -1
  83. package/dist/src/video.js +91 -24
  84. package/dist/src/video.js.map +1 -1
  85. package/dist/src/voiceConfig.d.ts +110 -0
  86. package/dist/src/voiceConfig.d.ts.map +1 -0
  87. package/dist/src/voiceConfig.js +2 -0
  88. package/dist/src/voiceConfig.js.map +1 -0
  89. package/dist/src/voices.d.ts +27 -23
  90. package/dist/src/voices.d.ts.map +1 -1
  91. package/dist/src/voices.js +7 -4
  92. package/dist/src/voices.js.map +1 -1
  93. package/dist/tsconfig.tsbuildinfo +1 -1
  94. package/package.json +1 -1
  95. package/skills/screenci/SKILL.md +39 -30
@@ -1,5 +1,9 @@
1
+ import type { AspectRatio, FPS, Quality } from './types.js';
1
2
  export declare const SCREENCI_RECORDING_ENV = "SCREENCI_RECORDING";
2
3
  export declare const SCREENCI_MOCK_RECORD_ENV = "SCREENCI_MOCK_RECORD";
4
+ export declare const SCREENCI_LANGUAGES_ENV = "SCREENCI_LANGUAGES";
5
+ export declare const SCREENCI_TEXT_OVERRIDES_ENV = "SCREENCI_TEXT_OVERRIDES";
6
+ export declare const SCREENCI_RECORD_OPTIONS_ENV = "SCREENCI_RECORD_OPTIONS";
3
7
  export declare const SCREENCI_DISABLE_RECORDING_TIMINGS_ENV = "SCREENCI_DISABLE_RECORDING_TIMINGS";
4
8
  export declare const SCREENCI_DEBUG_TIMING_ENV = "SCREENCI_DEBUG_TIMING";
5
9
  /**
@@ -12,4 +16,47 @@ export declare function isScreenciRecordingEnabled(env?: NodeJS.ProcessEnv): boo
12
16
  export declare function isScreenciMockRecordEnabled(env?: NodeJS.ProcessEnv): boolean;
13
17
  export declare function shouldSimulateRecordingTimings(env?: NodeJS.ProcessEnv): boolean;
14
18
  export declare function resolveRecordingTimingDuration(durationMs: number, env?: NodeJS.ProcessEnv): number;
19
+ /**
20
+ * Parse the comma-separated language filter set by `screenci record
21
+ * --languages fi,en`. Returns `null` when unset or empty (meaning "record every
22
+ * declared language"); otherwise the trimmed, de-duplicated list in the order
23
+ * given. The per-language builder intersects this with each video's declared
24
+ * languages so a run never records or renders more than was asked for.
25
+ */
26
+ export declare function parseRequestedLanguages(env?: NodeJS.ProcessEnv): string[] | null;
27
+ /** Per-language text field overrides: `{ [language]: { [field]: value } }`. */
28
+ export type TextOverrides = Record<string, Record<string, string>>;
29
+ /**
30
+ * Parse Studio text-field overrides injected for a re-record. Because the
31
+ * recording process never reaches the backend, Studio edits are passed in via
32
+ * `SCREENCI_TEXT_OVERRIDES` (a JSON map of language -> field -> value), set by
33
+ * the CLI from the backend before the recording runs. Returns `null` when unset
34
+ * or malformed, so the `text` fixture falls back to the code-declared seed.
35
+ */
36
+ export declare function parseTextOverrides(env?: NodeJS.ProcessEnv): TextOverrides | null;
37
+ /** Studio record-option overrides per video name: `{ [videoName]: {...} }`. */
38
+ export type RecordOptionsOverrides = Record<string, {
39
+ aspectRatio?: AspectRatio;
40
+ quality?: Quality;
41
+ fps?: FPS;
42
+ }>;
43
+ /**
44
+ * Parse Studio record-option overrides injected for a re-record. Record options
45
+ * (aspect ratio, quality, fps) change the captured viewport/encode, so Studio
46
+ * edits are fetched by the CLI before recording and passed in via
47
+ * `SCREENCI_RECORD_OPTIONS` (a JSON map of video name -> options). Returns `null`
48
+ * when unset or malformed, so the `recordOptions` fixture keeps the code values.
49
+ * Unknown fields/values are dropped.
50
+ */
51
+ export declare function parseRecordOptions(env?: NodeJS.ProcessEnv): RecordOptionsOverrides | null;
52
+ /**
53
+ * Merge Studio record-option overrides over the code-declared record options.
54
+ * Only the Studio-owned fields (aspect ratio, quality, fps) are overridden; the
55
+ * rest (encoder, performance, deviceScaleFactor) stay from code. Pure.
56
+ */
57
+ export declare function mergeStudioRecordOptions<T extends {
58
+ aspectRatio?: AspectRatio;
59
+ quality?: Quality;
60
+ fps?: FPS;
61
+ }>(codeRecordOptions: T, studio: RecordOptionsOverrides[string] | undefined): T;
15
62
  //# sourceMappingURL=runtimeMode.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"runtimeMode.d.ts","sourceRoot":"","sources":["../../src/runtimeMode.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,sBAAsB,uBAAuB,CAAA;AAC1D,eAAO,MAAM,wBAAwB,yBAAyB,CAAA;AAC9D,eAAO,MAAM,sCAAsC,uCACb,CAAA;AACtC,eAAO,MAAM,yBAAyB,0BAA0B,CAAA;AAEhE;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,OAAO,CAKT;AAED,wBAAgB,0BAA0B,CACxC,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,OAAO,CAET;AAED,wBAAgB,2BAA2B,CACzC,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,OAAO,CAET;AAED,wBAAgB,8BAA8B,CAC5C,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,OAAO,CAUT;AAED,wBAAgB,8BAA8B,CAC5C,UAAU,EAAE,MAAM,EAClB,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,MAAM,CAER"}
1
+ {"version":3,"file":"runtimeMode.d.ts","sourceRoot":"","sources":["../../src/runtimeMode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAE3D,eAAO,MAAM,sBAAsB,uBAAuB,CAAA;AAC1D,eAAO,MAAM,wBAAwB,yBAAyB,CAAA;AAC9D,eAAO,MAAM,sBAAsB,uBAAuB,CAAA;AAC1D,eAAO,MAAM,2BAA2B,4BAA4B,CAAA;AACpE,eAAO,MAAM,2BAA2B,4BAA4B,CAAA;AACpE,eAAO,MAAM,sCAAsC,uCACb,CAAA;AACtC,eAAO,MAAM,yBAAyB,0BAA0B,CAAA;AAEhE;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,OAAO,CAKT;AAED,wBAAgB,0BAA0B,CACxC,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,OAAO,CAET;AAED,wBAAgB,2BAA2B,CACzC,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,OAAO,CAET;AAED,wBAAgB,8BAA8B,CAC5C,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,OAAO,CAUT;AAED,wBAAgB,8BAA8B,CAC5C,UAAU,EAAE,MAAM,EAClB,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,MAAM,CAER;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,MAAM,EAAE,GAAG,IAAI,CAcjB;AAED,+EAA+E;AAC/E,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;AAElE;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,aAAa,GAAG,IAAI,CAqBtB;AAED,+EAA+E;AAC/E,MAAM,MAAM,sBAAsB,GAAG,MAAM,CACzC,MAAM,EACN;IAAE,WAAW,CAAC,EAAE,WAAW,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,GAAG,CAAA;CAAE,CAC5D,CAAA;AAcD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,sBAAsB,GAAG,IAAI,CA4B/B;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,CAAC,SAAS;IAAE,WAAW,CAAC,EAAE,WAAW,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,GAAG,CAAA;CAAE,EACrE,iBAAiB,EAAE,CAAC,EAAE,MAAM,EAAE,sBAAsB,CAAC,MAAM,CAAC,GAAG,SAAS,GAAG,CAAC,CAU7E"}
@@ -1,5 +1,8 @@
1
1
  export const SCREENCI_RECORDING_ENV = 'SCREENCI_RECORDING';
2
2
  export const SCREENCI_MOCK_RECORD_ENV = 'SCREENCI_MOCK_RECORD';
3
+ export const SCREENCI_LANGUAGES_ENV = 'SCREENCI_LANGUAGES';
4
+ export const SCREENCI_TEXT_OVERRIDES_ENV = 'SCREENCI_TEXT_OVERRIDES';
5
+ export const SCREENCI_RECORD_OPTIONS_ENV = 'SCREENCI_RECORD_OPTIONS';
3
6
  export const SCREENCI_DISABLE_RECORDING_TIMINGS_ENV = 'SCREENCI_DISABLE_RECORDING_TIMINGS';
4
7
  export const SCREENCI_DEBUG_TIMING_ENV = 'SCREENCI_DEBUG_TIMING';
5
8
  /**
@@ -29,4 +32,125 @@ export function shouldSimulateRecordingTimings(env = process.env) {
29
32
  export function resolveRecordingTimingDuration(durationMs, env = process.env) {
30
33
  return shouldSimulateRecordingTimings(env) ? durationMs : 0;
31
34
  }
35
+ /**
36
+ * Parse the comma-separated language filter set by `screenci record
37
+ * --languages fi,en`. Returns `null` when unset or empty (meaning "record every
38
+ * declared language"); otherwise the trimmed, de-duplicated list in the order
39
+ * given. The per-language builder intersects this with each video's declared
40
+ * languages so a run never records or renders more than was asked for.
41
+ */
42
+ export function parseRequestedLanguages(env = process.env) {
43
+ const raw = env[SCREENCI_LANGUAGES_ENV];
44
+ if (raw === undefined)
45
+ return null;
46
+ const seen = new Set();
47
+ const languages = [];
48
+ for (const part of raw.split(',')) {
49
+ const trimmed = part.trim();
50
+ if (trimmed.length === 0 || seen.has(trimmed))
51
+ continue;
52
+ seen.add(trimmed);
53
+ languages.push(trimmed);
54
+ }
55
+ return languages.length > 0 ? languages : null;
56
+ }
57
+ /**
58
+ * Parse Studio text-field overrides injected for a re-record. Because the
59
+ * recording process never reaches the backend, Studio edits are passed in via
60
+ * `SCREENCI_TEXT_OVERRIDES` (a JSON map of language -> field -> value), set by
61
+ * the CLI from the backend before the recording runs. Returns `null` when unset
62
+ * or malformed, so the `text` fixture falls back to the code-declared seed.
63
+ */
64
+ export function parseTextOverrides(env = process.env) {
65
+ const raw = env[SCREENCI_TEXT_OVERRIDES_ENV];
66
+ if (raw === undefined || raw.trim().length === 0)
67
+ return null;
68
+ try {
69
+ const parsed = JSON.parse(raw);
70
+ if (typeof parsed !== 'object' || parsed === null)
71
+ return null;
72
+ const result = {};
73
+ for (const [language, fields] of Object.entries(parsed)) {
74
+ if (typeof fields !== 'object' || fields === null)
75
+ continue;
76
+ const perLanguage = {};
77
+ for (const [field, value] of Object.entries(fields)) {
78
+ if (typeof value === 'string')
79
+ perLanguage[field] = value;
80
+ }
81
+ result[language] = perLanguage;
82
+ }
83
+ return result;
84
+ }
85
+ catch {
86
+ return null;
87
+ }
88
+ }
89
+ const VALID_ASPECT_RATIOS = new Set([
90
+ '16:9',
91
+ '9:16',
92
+ '1:1',
93
+ '4:3',
94
+ '3:4',
95
+ '5:4',
96
+ '4:5',
97
+ ]);
98
+ const VALID_QUALITIES = new Set(['720p', '1080p', '1440p', '2160p']);
99
+ const VALID_FPS = new Set([24, 30, 60]);
100
+ /**
101
+ * Parse Studio record-option overrides injected for a re-record. Record options
102
+ * (aspect ratio, quality, fps) change the captured viewport/encode, so Studio
103
+ * edits are fetched by the CLI before recording and passed in via
104
+ * `SCREENCI_RECORD_OPTIONS` (a JSON map of video name -> options). Returns `null`
105
+ * when unset or malformed, so the `recordOptions` fixture keeps the code values.
106
+ * Unknown fields/values are dropped.
107
+ */
108
+ export function parseRecordOptions(env = process.env) {
109
+ const raw = env[SCREENCI_RECORD_OPTIONS_ENV];
110
+ if (raw === undefined || raw.trim().length === 0)
111
+ return null;
112
+ try {
113
+ const parsed = JSON.parse(raw);
114
+ if (typeof parsed !== 'object' || parsed === null)
115
+ return null;
116
+ const result = {};
117
+ for (const [videoName, options] of Object.entries(parsed)) {
118
+ if (typeof options !== 'object' || options === null)
119
+ continue;
120
+ const o = options;
121
+ const entry = {};
122
+ if (VALID_ASPECT_RATIOS.has(o.aspectRatio)) {
123
+ entry.aspectRatio = o.aspectRatio;
124
+ }
125
+ if (VALID_QUALITIES.has(o.quality)) {
126
+ entry.quality = o.quality;
127
+ }
128
+ if (typeof o.fps === 'number' && VALID_FPS.has(o.fps)) {
129
+ entry.fps = o.fps;
130
+ }
131
+ result[videoName] = entry;
132
+ }
133
+ return result;
134
+ }
135
+ catch {
136
+ return null;
137
+ }
138
+ }
139
+ /**
140
+ * Merge Studio record-option overrides over the code-declared record options.
141
+ * Only the Studio-owned fields (aspect ratio, quality, fps) are overridden; the
142
+ * rest (encoder, performance, deviceScaleFactor) stay from code. Pure.
143
+ */
144
+ export function mergeStudioRecordOptions(codeRecordOptions, studio) {
145
+ if (studio === undefined)
146
+ return codeRecordOptions;
147
+ return {
148
+ ...codeRecordOptions,
149
+ ...(studio.aspectRatio !== undefined && {
150
+ aspectRatio: studio.aspectRatio,
151
+ }),
152
+ ...(studio.quality !== undefined && { quality: studio.quality }),
153
+ ...(studio.fps !== undefined && { fps: studio.fps }),
154
+ };
155
+ }
32
156
  //# sourceMappingURL=runtimeMode.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"runtimeMode.js","sourceRoot":"","sources":["../../src/runtimeMode.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,sBAAsB,GAAG,oBAAoB,CAAA;AAC1D,MAAM,CAAC,MAAM,wBAAwB,GAAG,sBAAsB,CAAA;AAC9D,MAAM,CAAC,MAAM,sCAAsC,GACjD,oCAAoC,CAAA;AACtC,MAAM,CAAC,MAAM,yBAAyB,GAAG,uBAAuB,CAAA;AAEhE;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAClC,MAAyB,OAAO,CAAC,GAAG;IAEpC,OAAO,CACL,GAAG,CAAC,yBAAyB,CAAC,KAAK,MAAM;QACzC,GAAG,CAAC,yBAAyB,CAAC,KAAK,GAAG,CACvC,CAAA;AACH,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,MAAyB,OAAO,CAAC,GAAG;IAEpC,OAAO,GAAG,CAAC,sBAAsB,CAAC,KAAK,MAAM,CAAA;AAC/C,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,MAAyB,OAAO,CAAC,GAAG;IAEpC,OAAO,GAAG,CAAC,wBAAwB,CAAC,KAAK,MAAM,CAAA;AACjD,CAAC;AAED,MAAM,UAAU,8BAA8B,CAC5C,MAAyB,OAAO,CAAC,GAAG;IAEpC,IAAI,0BAA0B,CAAC,GAAG,CAAC,IAAI,2BAA2B,CAAC,GAAG,CAAC,EAAE,CAAC;QACxE,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,GAAG,CAAC,sCAAsC,CAAC,KAAK,MAAM,EAAE,CAAC;QAC3D,OAAO,KAAK,CAAA;IACd,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,UAAU,8BAA8B,CAC5C,UAAkB,EAClB,MAAyB,OAAO,CAAC,GAAG;IAEpC,OAAO,8BAA8B,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;AAC7D,CAAC"}
1
+ {"version":3,"file":"runtimeMode.js","sourceRoot":"","sources":["../../src/runtimeMode.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,sBAAsB,GAAG,oBAAoB,CAAA;AAC1D,MAAM,CAAC,MAAM,wBAAwB,GAAG,sBAAsB,CAAA;AAC9D,MAAM,CAAC,MAAM,sBAAsB,GAAG,oBAAoB,CAAA;AAC1D,MAAM,CAAC,MAAM,2BAA2B,GAAG,yBAAyB,CAAA;AACpE,MAAM,CAAC,MAAM,2BAA2B,GAAG,yBAAyB,CAAA;AACpE,MAAM,CAAC,MAAM,sCAAsC,GACjD,oCAAoC,CAAA;AACtC,MAAM,CAAC,MAAM,yBAAyB,GAAG,uBAAuB,CAAA;AAEhE;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAClC,MAAyB,OAAO,CAAC,GAAG;IAEpC,OAAO,CACL,GAAG,CAAC,yBAAyB,CAAC,KAAK,MAAM;QACzC,GAAG,CAAC,yBAAyB,CAAC,KAAK,GAAG,CACvC,CAAA;AACH,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,MAAyB,OAAO,CAAC,GAAG;IAEpC,OAAO,GAAG,CAAC,sBAAsB,CAAC,KAAK,MAAM,CAAA;AAC/C,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,MAAyB,OAAO,CAAC,GAAG;IAEpC,OAAO,GAAG,CAAC,wBAAwB,CAAC,KAAK,MAAM,CAAA;AACjD,CAAC;AAED,MAAM,UAAU,8BAA8B,CAC5C,MAAyB,OAAO,CAAC,GAAG;IAEpC,IAAI,0BAA0B,CAAC,GAAG,CAAC,IAAI,2BAA2B,CAAC,GAAG,CAAC,EAAE,CAAC;QACxE,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,GAAG,CAAC,sCAAsC,CAAC,KAAK,MAAM,EAAE,CAAC;QAC3D,OAAO,KAAK,CAAA;IACd,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,UAAU,8BAA8B,CAC5C,UAAkB,EAClB,MAAyB,OAAO,CAAC,GAAG;IAEpC,OAAO,8BAA8B,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;AAC7D,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CACrC,MAAyB,OAAO,CAAC,GAAG;IAEpC,MAAM,GAAG,GAAG,GAAG,CAAC,sBAAsB,CAAC,CAAA;IACvC,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,IAAI,CAAA;IAElC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;IAC9B,MAAM,SAAS,GAAa,EAAE,CAAA;IAC9B,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;QAC3B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;YAAE,SAAQ;QACvD,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QACjB,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACzB,CAAC;IAED,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAA;AAChD,CAAC;AAKD;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAChC,MAAyB,OAAO,CAAC,GAAG;IAEpC,MAAM,GAAG,GAAG,GAAG,CAAC,2BAA2B,CAAC,CAAA;IAC5C,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IAE7D,IAAI,CAAC;QACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACvC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,IAAI,CAAA;QAE9D,MAAM,MAAM,GAAkB,EAAE,CAAA;QAChC,KAAK,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACxD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI;gBAAE,SAAQ;YAC3D,MAAM,WAAW,GAA2B,EAAE,CAAA;YAC9C,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBACpD,IAAI,OAAO,KAAK,KAAK,QAAQ;oBAAE,WAAW,CAAC,KAAK,CAAC,GAAG,KAAK,CAAA;YAC3D,CAAC;YACD,MAAM,CAAC,QAAQ,CAAC,GAAG,WAAW,CAAA;QAChC,CAAC;QACD,OAAO,MAAM,CAAA;IACf,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAQD,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAc;IAC/C,MAAM;IACN,MAAM;IACN,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;CACN,CAAC,CAAA;AACF,MAAM,eAAe,GAAG,IAAI,GAAG,CAAU,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAA;AAC7E,MAAM,SAAS,GAAG,IAAI,GAAG,CAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;AAE5C;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAChC,MAAyB,OAAO,CAAC,GAAG;IAEpC,MAAM,GAAG,GAAG,GAAG,CAAC,2BAA2B,CAAC,CAAA;IAC5C,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IAE7D,IAAI,CAAC;QACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACvC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,IAAI,CAAA;QAE9D,MAAM,MAAM,GAA2B,EAAE,CAAA;QACzC,KAAK,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1D,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI;gBAAE,SAAQ;YAC7D,MAAM,CAAC,GAAG,OAAkC,CAAA;YAC5C,MAAM,KAAK,GAAmC,EAAE,CAAA;YAChD,IAAI,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,WAA0B,CAAC,EAAE,CAAC;gBAC1D,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC,WAA0B,CAAA;YAClD,CAAC;YACD,IAAI,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,OAAkB,CAAC,EAAE,CAAC;gBAC9C,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,OAAkB,CAAA;YACtC,CAAC;YACD,IAAI,OAAO,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,GAAU,CAAC,EAAE,CAAC;gBAC7D,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,GAAU,CAAA;YAC1B,CAAC;YACD,MAAM,CAAC,SAAS,CAAC,GAAG,KAAK,CAAA;QAC3B,CAAC;QACD,OAAO,MAAM,CAAA;IACf,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CAEtC,iBAAoB,EAAE,MAAkD;IACxE,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,iBAAiB,CAAA;IAClD,OAAO;QACL,GAAG,iBAAiB;QACpB,GAAG,CAAC,MAAM,CAAC,WAAW,KAAK,SAAS,IAAI;YACtC,WAAW,EAAE,MAAM,CAAC,WAAW;SAChC,CAAC;QACF,GAAG,CAAC,MAAM,CAAC,OAAO,KAAK,SAAS,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;QAChE,GAAG,CAAC,MAAM,CAAC,GAAG,KAAK,SAAS,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC;KACrD,CAAA;AACH,CAAC"}
@@ -1,7 +1,11 @@
1
1
  import type { TestType, PlaywrightTestArgs, PlaywrightTestOptions, PlaywrightWorkerArgs, PlaywrightWorkerOptions, TestDetails, TestInfo } from '@playwright/test';
2
2
  import type { RecordOptions, RenderOptions, ScreenCIPage } from './types.js';
3
- import type { StudioRenderOptionsSentinel } from './studio.js';
3
+ import type { StudioDeclaration } from './studio.js';
4
+ import { type OverlayController } from './asset.js';
4
5
  import type { CropTarget, CropOptions } from './crop.js';
6
+ import type { VideoBuilder } from './builder.js';
7
+ import type { NormalizedLocalize } from './localize.js';
8
+ import { type TextValues } from './localizeRuntime.js';
5
9
  /**
6
10
  * The `crop` fixture argument. Call it inside a `screenshot()` body to crop the
7
11
  * implicit end-of-body capture to a locator or pixel region. Replaces the
@@ -10,10 +14,42 @@ import type { CropTarget, CropOptions } from './crop.js';
10
14
  export type CropFixture = (target: CropTarget, options?: CropOptions) => Promise<void>;
11
15
  type ScreenshotFixtureOptions = {
12
16
  recordOptions: RecordOptions;
13
- renderOptions: RenderOptions | StudioRenderOptionsSentinel | undefined;
17
+ renderOptions: RenderOptions | undefined;
18
+ /** Active language for this pass; see {@link video} for details. Internal. */
19
+ _screenciLanguage: string | undefined;
20
+ /** Grouping name written to `metadata.videoName`. Internal. */
21
+ _screenciVideoName: string | undefined;
22
+ /** The normalized localize spec, set by `screenshot.localize(...)`. Internal. */
23
+ _screenciLocalize: NormalizedLocalize | undefined;
24
+ /**
25
+ * The studio declaration, set by `screenshot.studio(...)`. Drives the
26
+ * render/record deferral flags and the Studio-managed `text` and `overlays`
27
+ * fixtures. A still is silent, so narration/audio declarations are ignored.
28
+ * Internal.
29
+ */
30
+ _screenciStudio: StudioDeclaration | undefined;
31
+ /**
32
+ * Absolute path of the `.screenci` script that registered this test, captured
33
+ * by the fan-out builder. Asset paths are resolved relative to it, since
34
+ * `testInfo.file` points at the builder module, not the script. Internal.
35
+ */
36
+ _screenciSourceFile: string | undefined;
14
37
  };
15
38
  type ScreenshotFixtures = {
16
39
  crop: CropFixture;
40
+ /** The language being captured in this pass; `undefined` outside per-language mode. */
41
+ language: string | undefined;
42
+ /**
43
+ * Injected text field values for the active language, keyed by the field names
44
+ * declared in `screenshot.localize(...)`. A still is silent, so there is no
45
+ * `narration` fixture.
46
+ */
47
+ text: TextValues;
48
+ /**
49
+ * Overlay controllers for the Studio-managed overlay names declared in
50
+ * `screenshot.studio({ overlays: [...] })`. Empty when none are declared.
51
+ */
52
+ overlays: Record<string, OverlayController>;
17
53
  };
18
54
  type ScreenshotType = TestType<PlaywrightTestArgs & PlaywrightTestOptions & ScreenshotFixtureOptions & ScreenshotFixtures & PlaywrightWorkerArgs & PlaywrightWorkerOptions, PlaywrightWorkerArgs & PlaywrightWorkerOptions>;
19
55
  type ScreenshotArgs = Omit<PlaywrightTestArgs, 'page'> & {
@@ -60,6 +96,24 @@ interface Screenshot extends ScreenshotCallSignatures {
60
96
  fixme: Screenshot & ConditionalOverloads;
61
97
  fail: Screenshot & ConditionalOverloads;
62
98
  slow: Screenshot & ((condition?: boolean, description?: string) => void);
99
+ /**
100
+ * Capture one localized screenshot per declared language. By default each
101
+ * language is captured in its own pass with the browser `locale` set from the
102
+ * language, and the body receives the active `language` and `text` values.
103
+ * Chainable with `.each(...)`.
104
+ */
105
+ localize: VideoBuilder<ScreenshotArgs>['localize'];
106
+ /**
107
+ * Defer render/record options and declare Studio-managed text and overlays,
108
+ * configured in the ScreenCI web app. Stills are silent, so narration and
109
+ * audio declarations are ignored. Chainable with `.localize(...)` / `.each(...)`.
110
+ */
111
+ studio: VideoBuilder<ScreenshotArgs>['studio'];
112
+ /**
113
+ * Produce a separate screenshot per variant (viewport, theme, ...). Each
114
+ * variant has its own identity and history. Chainable with `.languages(...)`.
115
+ */
116
+ each: VideoBuilder<ScreenshotArgs>['each'];
63
117
  beforeEach(inner: (args: ScreenshotArgs, testInfo: TestInfo) => Promise<void> | void): void;
64
118
  beforeEach(title: string, inner: (args: ScreenshotArgs, testInfo: TestInfo) => Promise<void> | void): void;
65
119
  afterEach(inner: (args: ScreenshotArgs, testInfo: TestInfo) => Promise<void> | void): void;
@@ -1 +1 @@
1
- {"version":3,"file":"screenshot.d.ts","sourceRoot":"","sources":["../../src/screenshot.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"screenshot.d.ts","sourceRoot":"","sources":["../../src/screenshot.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,8 @@
1
1
  import { test as base } from '@playwright/test';
2
2
  import { mkdir, rm } from 'fs/promises';
3
3
  import { join, relative } from 'path';
4
+ import { studioOptionFlags } from './studio.js';
5
+ import { buildStudioOverlays } from './asset.js';
4
6
  import { getDimensions } from './dimensions.js';
5
7
  import { DEFAULT_VIDEO_OPTIONS, DEFAULT_ASPECT_RATIO, DEFAULT_QUALITY, DEFAULT_SCREENSHOT_DEVICE_SCALE_FACTOR, } from './defaults.js';
6
8
  import { EventRecorder } from './events.js';
@@ -12,12 +14,29 @@ import { buildScreenCIContextOptions, resolveDeviceScaleFactor, } from './contex
12
14
  import { resolveCrop } from './crop.js';
13
15
  import { getRuntimePage, setRuntimeCrop } from './runtimeContext.js';
14
16
  import { ScreenciError } from './errors.js';
15
- import { withActiveRecordingContext } from './video.js';
17
+ import { withActiveRecordingContext, resolveEffectiveRecordOptions, } from './video.js';
18
+ import { createVideoBuilder } from './builder.js';
19
+ import { buildTextDeclaration, buildTextValues, } from './localizeRuntime.js';
20
+ import { parseTextOverrides } from './runtimeMode.js';
16
21
  /** File name of the raw page capture written beside `data.json`. */
17
22
  const SCREENSHOT_FILE_NAME = 'screenshot.png';
18
23
  const _screenshotBase = base.extend({
19
24
  recordOptions: [DEFAULT_VIDEO_OPTIONS, { option: true }],
20
25
  renderOptions: [undefined, { option: true }],
26
+ _screenciLanguage: [undefined, { option: true }],
27
+ _screenciVideoName: [undefined, { option: true }],
28
+ _screenciLocalize: [undefined, { option: true }],
29
+ _screenciStudio: [undefined, { option: true }],
30
+ _screenciSourceFile: [undefined, { option: true }],
31
+ language: async ({ _screenciLanguage }, use) => {
32
+ await use(_screenciLanguage);
33
+ },
34
+ text: async ({ _screenciLocalize, _screenciStudio, _screenciLanguage }, use) => {
35
+ await use(buildTextValues(_screenciLocalize, _screenciLanguage, parseTextOverrides(), _screenciStudio?.text ?? []));
36
+ },
37
+ overlays: async ({ _screenciStudio }, use) => {
38
+ await use(buildStudioOverlays(_screenciStudio?.overlays ?? []));
39
+ },
21
40
  crop: async ({}, use) => {
22
41
  await use(async (target, options) => {
23
42
  const page = getRuntimePage();
@@ -37,16 +56,17 @@ const _screenshotBase = base.extend({
37
56
  await browser.close();
38
57
  }
39
58
  },
40
- context: async ({ browser, recordOptions, colorScheme, locale, timezoneId, userAgent, geolocation, permissions, extraHTTPHeaders, httpCredentials, ignoreHTTPSErrors, offline, storageState, baseURL, bypassCSP, acceptDownloads, javaScriptEnabled, hasTouch, isMobile, deviceScaleFactor, }, use) => {
41
- const aspectRatio = recordOptions.aspectRatio ?? DEFAULT_ASPECT_RATIO;
42
- const quality = recordOptions.quality ?? DEFAULT_QUALITY;
59
+ context: async ({ browser, recordOptions, _screenciStudio, _screenciVideoName, colorScheme, locale, timezoneId, userAgent, geolocation, permissions, extraHTTPHeaders, httpCredentials, ignoreHTTPSErrors, offline, storageState, baseURL, bypassCSP, acceptDownloads, javaScriptEnabled, hasTouch, isMobile, deviceScaleFactor, }, use, testInfo) => {
60
+ const effectiveRecordOptions = resolveEffectiveRecordOptions(recordOptions, _screenciStudio, _screenciVideoName ?? testInfo.title);
61
+ const aspectRatio = effectiveRecordOptions.aspectRatio ?? DEFAULT_ASPECT_RATIO;
62
+ const quality = effectiveRecordOptions.quality ?? DEFAULT_QUALITY;
43
63
  const dimensions = getDimensions(aspectRatio, quality);
44
64
  const shouldRecord = process.env.SCREENCI_RECORDING === 'true';
45
65
  // Screenshots honor deviceScaleFactor for higher-DPI stills.
46
66
  const context = await browser.newContext(buildScreenCIContextOptions({
47
67
  dimensions,
48
68
  applyLocaleDefault: shouldRecord,
49
- deviceScaleFactor: resolveDeviceScaleFactor(recordOptions, deviceScaleFactor, DEFAULT_SCREENSHOT_DEVICE_SCALE_FACTOR),
69
+ deviceScaleFactor: resolveDeviceScaleFactor(effectiveRecordOptions, deviceScaleFactor, DEFAULT_SCREENSHOT_DEVICE_SCALE_FACTOR),
50
70
  forwarded: {
51
71
  colorScheme,
52
72
  locale,
@@ -75,16 +95,26 @@ const _screenshotBase = base.extend({
75
95
  await context.close();
76
96
  }
77
97
  },
78
- page: async ({ context, recordOptions, renderOptions, deviceScaleFactor }, use, testInfo) => {
98
+ page: async ({ context, recordOptions: codeRecordOptions, renderOptions, deviceScaleFactor, _screenciLanguage, _screenciLocalize, _screenciStudio, _screenciVideoName, _screenciSourceFile, }, use, testInfo) => {
79
99
  const shouldRecord = process.env.SCREENCI_RECORDING === 'true';
80
- const recorder = new EventRecorder(renderOptions, recordOptions);
100
+ const recordOptions = resolveEffectiveRecordOptions(codeRecordOptions, _screenciStudio, _screenciVideoName ?? testInfo.title);
101
+ const recorder = new EventRecorder(renderOptions, recordOptions, studioOptionFlags(_screenciStudio));
102
+ recorder.setActiveLanguage(_screenciLanguage ?? null);
103
+ // Declared `text` fields (and the active language's seeds) emitted once at
104
+ // recording start so the backend/Studio learn them.
105
+ const textDeclaration = buildTextDeclaration(_screenciLocalize, _screenciLanguage, _screenciStudio?.text ?? []);
106
+ const videoName = _screenciVideoName ?? testInfo.title;
107
+ // Asset paths are authored relative to the user's script. Playwright reports
108
+ // `testInfo.file` as the builder module that registered the test, so prefer
109
+ // the script path captured at the call site.
110
+ const testFilePath = _screenciSourceFile ?? testInfo.file;
81
111
  if (!shouldRecord) {
82
112
  // Preview run (`screenci test`): exercise the body without capturing.
83
113
  const page = await context.newPage();
84
114
  const runtimeContext = createScreenCIRuntimeContext({
85
115
  recorder,
86
116
  page,
87
- testFilePath: testInfo.file,
117
+ testFilePath,
88
118
  });
89
119
  recorder.start();
90
120
  await withActiveRecordingContext({
@@ -92,6 +122,7 @@ const _screenshotBase = base.extend({
92
122
  page,
93
123
  recorder,
94
124
  unendedOverlays: 'autoEnd',
125
+ textDeclaration,
95
126
  fn: async () => {
96
127
  await use(page);
97
128
  },
@@ -117,7 +148,7 @@ const _screenshotBase = base.extend({
117
148
  const runtimeContext = createScreenCIRuntimeContext({
118
149
  recorder,
119
150
  page,
120
- testFilePath: testInfo.file,
151
+ testFilePath,
121
152
  recordingDir: screenshotDir,
122
153
  });
123
154
  recorder.start();
@@ -127,6 +158,7 @@ const _screenshotBase = base.extend({
127
158
  page,
128
159
  recorder,
129
160
  unendedOverlays: 'autoEnd',
161
+ textDeclaration,
130
162
  fn: async () => {
131
163
  await use(page);
132
164
  },
@@ -147,7 +179,7 @@ const _screenshotBase = base.extend({
147
179
  const configDir = process.env.SCREENCI_CONFIG_DIR ?? process.cwd();
148
180
  // The crop (from the `crop` fixture) is a render option, so it goes into
149
181
  // renderOptions.screenshot.crop (editable in Studio), not ScreenshotInfo.
150
- await recorder.writeToFile(screenshotDir, testInfo.title, relative(configDir, testInfo.file), {
182
+ await recorder.writeToFile(screenshotDir, videoName, relative(configDir, testFilePath), {
151
183
  output: 'screenshot',
152
184
  screenshot,
153
185
  ...(crop !== undefined && { crop }),
@@ -185,4 +217,9 @@ const _screenshotBase = base.extend({
185
217
  * ```
186
218
  */
187
219
  export const screenshot = _screenshotBase;
220
+ // Attach the chainable fan-out builders, mirroring `video`.
221
+ const _screenshotRootBuilder = createVideoBuilder(_screenshotBase);
222
+ screenshot.localize = _screenshotRootBuilder.localize;
223
+ screenshot.studio = _screenshotRootBuilder.studio;
224
+ screenshot.each = _screenshotRootBuilder.each;
188
225
  //# sourceMappingURL=screenshot.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"screenshot.js","sourceRoot":"","sources":["../../src/screenshot.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"screenshot.js","sourceRoot":"","sources":["../../src/screenshot.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,6 @@ import type { Page } from '@playwright/test';
2
2
  import type { IEventRecorder } from './events.js';
3
3
  import type { CropTarget, ScreenshotCropRecord } from './crop.js';
4
4
  import type { RecordOptions, RenderOptions } from './types.js';
5
- import type { StudioRenderOptionsSentinel } from './studio.js';
6
5
  /**
7
6
  * The screenci-specific options added to `page.screenshot()` inside a `video()`.
8
7
  * Everything else is forwarded to Playwright's native screenshot.
@@ -31,7 +30,7 @@ export type StillCaptureDeps = {
31
30
  rm: (path: string) => Promise<void>;
32
31
  mkdir: (path: string) => Promise<void>;
33
32
  };
34
- makeRecorder?: (renderOptions: RenderOptions | StudioRenderOptionsSentinel | undefined, recordOptions: RecordOptions | undefined) => IEventRecorder;
33
+ makeRecorder?: (renderOptions: RenderOptions | undefined, recordOptions: RecordOptions | undefined) => IEventRecorder;
35
34
  };
36
35
  /**
37
36
  * Write a standalone screenshot recording (its own `.screenci/<title>/` dir with
@@ -51,7 +50,7 @@ export declare function writeStillRecording(params: {
51
50
  testFilePath: string | null;
52
51
  configDir: string;
53
52
  recordOptions: RecordOptions | undefined;
54
- renderOptions: RenderOptions | StudioRenderOptionsSentinel | undefined;
53
+ renderOptions: RenderOptions | undefined;
55
54
  deps: StillCaptureDeps;
56
55
  }): Promise<Buffer>;
57
56
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"stillCapture.d.ts","sourceRoot":"","sources":["../../src/stillCapture.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAI5C,OAAO,KAAK,EAAE,cAAc,EAAkB,MAAM,aAAa,CAAA;AAEjE,OAAO,KAAK,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAOjE,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC9D,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAA;AAK9D;;;GAGG;AACH,MAAM,MAAM,sBAAsB,GAAG;IACnC;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,+EAA+E;IAC/E,IAAI,CAAC,EAAE,UAAU,CAAA;CAClB,CAAA;AAQD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,GAChB,MAAM,CAqBR;AAED,kFAAkF;AAClF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,gEAAgE;IAChE,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;IAC7C,EAAE,CAAC,EAAE;QACH,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;QACnC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;KACvC,CAAA;IACD,YAAY,CAAC,EAAE,CACb,aAAa,EAAE,aAAa,GAAG,2BAA2B,GAAG,SAAS,EACtE,aAAa,EAAE,aAAa,GAAG,SAAS,KACrC,cAAc,CAAA;CACpB,CAAA;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,EAAE;IAChD,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;IAC7C,iBAAiB,EAAE,MAAM,CAAA;IACzB,IAAI,CAAC,EAAE,oBAAoB,CAAA;IAC3B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,SAAS,EAAE,MAAM,CAAA;IACjB,aAAa,EAAE,aAAa,GAAG,SAAS,CAAA;IACxC,aAAa,EAAE,aAAa,GAAG,2BAA2B,GAAG,SAAS,CAAA;IACtE,IAAI,EAAE,gBAAgB,CAAA;CACvB,GAAG,OAAO,CAAC,MAAM,CAAC,CAmDlB;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAqDvD"}
1
+ {"version":3,"file":"stillCapture.d.ts","sourceRoot":"","sources":["../../src/stillCapture.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAI5C,OAAO,KAAK,EAAE,cAAc,EAAkB,MAAM,aAAa,CAAA;AAEjE,OAAO,KAAK,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAOjE,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAK9D;;;GAGG;AACH,MAAM,MAAM,sBAAsB,GAAG;IACnC;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,+EAA+E;IAC/E,IAAI,CAAC,EAAE,UAAU,CAAA;CAClB,CAAA;AAQD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,GAChB,MAAM,CAqBR;AAED,kFAAkF;AAClF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,gEAAgE;IAChE,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;IAC7C,EAAE,CAAC,EAAE;QACH,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;QACnC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;KACvC,CAAA;IACD,YAAY,CAAC,EAAE,CACb,aAAa,EAAE,aAAa,GAAG,SAAS,EACxC,aAAa,EAAE,aAAa,GAAG,SAAS,KACrC,cAAc,CAAA;CACpB,CAAA;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,EAAE;IAChD,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;IAC7C,iBAAiB,EAAE,MAAM,CAAA;IACzB,IAAI,CAAC,EAAE,oBAAoB,CAAA;IAC3B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,SAAS,EAAE,MAAM,CAAA;IACjB,aAAa,EAAE,aAAa,GAAG,SAAS,CAAA;IACxC,aAAa,EAAE,aAAa,GAAG,SAAS,CAAA;IACxC,IAAI,EAAE,gBAAgB,CAAA;CACvB,GAAG,OAAO,CAAC,MAAM,CAAC,CAmDlB;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAqDvD"}
@@ -1 +1 @@
1
- {"version":3,"file":"stillCapture.js","sourceRoot":"","sources":["../../src/stillCapture.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stillCapture.js","sourceRoot":"","sources":["../../src/stillCapture.ts"],"names":[],"mappings":"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"}
@@ -1,33 +1,66 @@
1
1
  /**
2
- * Studio mode — configure narration and render options from the ScreenCI web
3
- * app instead of code. Business tier only.
2
+ * Studio mode — configure render/record options, narration, on-screen text,
3
+ * overlays, and background audio from the ScreenCI web app instead of code.
4
+ * Business tier only.
4
5
  *
5
- * Code opts in per concern:
6
- * - `createStudioNarration('intro', 'outro')` declares cue keys whose text and
7
- * voice are filled in on the Studio page.
8
- * - `renderOptions: 'studio'` defers render options to Studio.
6
+ * Opt in with a single `video.studio({...})` (or `screenshot.studio({...})`)
7
+ * declaration, chainable with `.localize()` / `.each()`:
9
8
  *
10
- * On the first upload of a studio-mode video, rendering is held until the
11
- * video is configured in Studio; later uploads reuse the saved configuration.
12
- */
13
- /**
14
- * Sentinel value for the `renderOptions` fixture/config option meaning
15
- * "render options are configured in Studio".
9
+ * - `renderOptions: true` / `recordOptions: true` defer those option groups to
10
+ * Studio. `recordOptions` (aspect ratio, quality, fps) changes the capture, so
11
+ * it is fetched before recording; `renderOptions` is applied at render.
12
+ * - `narration`, `text`, `overlays`, `audio` are name lists declaring the cues /
13
+ * fields / overlays / tracks whose content is owned by Studio. The matching
14
+ * `narration` / `text` / `overlays` / `audio` fixtures expose typed
15
+ * controllers/values for them.
16
16
  *
17
- * A plain string literal (not an object or symbol) so it survives Playwright's
18
- * serialization of `use` options between the config file and test workers, and
19
- * cannot collide with a real {@link import('./types.js').RenderOptions} value,
20
- * which is always an object.
17
+ * On the first upload of a studio-mode video, rendering is held until the video
18
+ * is configured in Studio (the CLI prints a direct link); later uploads reuse
19
+ * the saved configuration automatically.
21
20
  *
22
21
  * @example
23
22
  * ```ts
24
- * import { defineConfig } from 'screenci'
23
+ * import { video } from 'screenci'
25
24
  *
26
- * export default defineConfig({
27
- * use: { renderOptions: 'studio' },
28
- * })
25
+ * video
26
+ * .studio({ renderOptions: true, narration: ['intro'], overlays: ['logo'] })
27
+ * .localize({ languages: ['en', 'fi'] })(
28
+ * 'Product demo',
29
+ * async ({ page, narration, overlays }) => {
30
+ * await overlays.logo()
31
+ * await narration.intro()
32
+ * }
33
+ * )
29
34
  * ```
30
35
  */
31
- export type StudioRenderOptionsSentinel = 'studio';
32
- export declare function isStudioRenderOptions(value: unknown): value is StudioRenderOptionsSentinel;
36
+ export type StudioDeclaration = {
37
+ /** Defer render options to Studio. Applied at render time. */
38
+ renderOptions?: boolean;
39
+ /**
40
+ * Defer record options (aspect ratio, quality, fps) to Studio. Fetched before
41
+ * recording, since they change the captured viewport/encode.
42
+ */
43
+ recordOptions?: boolean;
44
+ /** Studio-managed narration cue names (text and voice configured in Studio). */
45
+ narration?: readonly string[];
46
+ /** Studio-managed on-screen text field names (values configured in Studio). */
47
+ text?: readonly string[];
48
+ /** Studio-managed overlay names (file and placement configured in Studio). */
49
+ overlays?: readonly string[];
50
+ /** Studio-managed background-audio track names (file/volume configured in Studio). */
51
+ audio?: readonly string[];
52
+ };
53
+ /** The studio option groups deferred to render/record. */
54
+ export type StudioOptionFlags = {
55
+ renderOptions: boolean;
56
+ recordOptions: boolean;
57
+ };
58
+ /** Returns the render/record deferral flags for a (possibly absent) declaration. */
59
+ export declare function studioOptionFlags(declaration: StudioDeclaration | undefined): StudioOptionFlags;
60
+ /**
61
+ * Validates a studio declaration against the seeded localize names: each name
62
+ * list is unique and non-empty, and Studio-managed narration/text names are
63
+ * disjoint from the names seeded in `localize()`. Pure; throws on violation.
64
+ */
65
+ export declare function validateStudioDeclaration(declaration: StudioDeclaration | null, seededNarrationNames: readonly string[], seededTextNames: readonly string[]): void;
33
66
  //# sourceMappingURL=studio.d.ts.map