screenci 0.0.70 → 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 (108) hide show
  1. package/README.md +13 -13
  2. package/dist/cli.d.ts +9 -0
  3. package/dist/cli.d.ts.map +1 -1
  4. package/dist/cli.js +184 -5
  5. package/dist/cli.js.map +1 -1
  6. package/dist/docs/manifest.d.ts +34 -34
  7. package/dist/docs/manifest.d.ts.map +1 -1
  8. package/dist/docs/manifest.js +20 -12
  9. package/dist/docs/manifest.js.map +1 -1
  10. package/dist/docs/video-sources/installation.screenci.js +13 -12
  11. package/dist/docs/video-sources/installation.screenci.js.map +1 -1
  12. package/dist/docs/video-sources/landing.screenci.js +16 -9
  13. package/dist/docs/video-sources/landing.screenci.js.map +1 -1
  14. package/dist/docs/video-sources/locator-highlight-animated.screenci.js +14 -26
  15. package/dist/docs/video-sources/locator-highlight-animated.screenci.js.map +1 -1
  16. package/dist/docs/video-sources/locator-highlight-still.screenci.js +5 -10
  17. package/dist/docs/video-sources/locator-highlight-still.screenci.js.map +1 -1
  18. package/dist/docs/video-sources/product-pitch.screenci.js +97 -32
  19. package/dist/docs/video-sources/product-pitch.screenci.js.map +1 -1
  20. package/dist/docs/video-sources/public-urls.screenci.js +16 -9
  21. package/dist/docs/video-sources/public-urls.screenci.js.map +1 -1
  22. package/dist/docs/video-sources/studio.screenci.js +42 -27
  23. package/dist/docs/video-sources/studio.screenci.js.map +1 -1
  24. package/dist/docs/videos.d.ts +4 -15
  25. package/dist/docs/videos.d.ts.map +1 -1
  26. package/dist/docs/videos.js +6 -22
  27. package/dist/docs/videos.js.map +1 -1
  28. package/dist/index.d.ts +7 -5
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.js +3 -4
  31. package/dist/index.js.map +1 -1
  32. package/dist/src/asset.d.ts +8 -23
  33. package/dist/src/asset.d.ts.map +1 -1
  34. package/dist/src/asset.js +10 -32
  35. package/dist/src/asset.js.map +1 -1
  36. package/dist/src/audio.d.ts +6 -24
  37. package/dist/src/audio.d.ts.map +1 -1
  38. package/dist/src/audio.js +10 -35
  39. package/dist/src/audio.js.map +1 -1
  40. package/dist/src/builder.d.ts +214 -0
  41. package/dist/src/builder.d.ts.map +1 -0
  42. package/dist/src/builder.js +212 -0
  43. package/dist/src/builder.js.map +1 -0
  44. package/dist/src/cue.d.ts +40 -123
  45. package/dist/src/cue.d.ts.map +1 -1
  46. package/dist/src/cue.js +190 -30
  47. package/dist/src/cue.js.map +1 -1
  48. package/dist/src/events.d.ts +80 -15
  49. package/dist/src/events.d.ts.map +1 -1
  50. package/dist/src/events.js +72 -6
  51. package/dist/src/events.js.map +1 -1
  52. package/dist/src/init.d.ts.map +1 -1
  53. package/dist/src/init.js +26 -14
  54. package/dist/src/init.js.map +1 -1
  55. package/dist/src/locales.d.ts +19 -0
  56. package/dist/src/locales.d.ts.map +1 -0
  57. package/dist/src/locales.js +60 -0
  58. package/dist/src/locales.js.map +1 -0
  59. package/dist/src/localize.d.ts +135 -0
  60. package/dist/src/localize.d.ts.map +1 -0
  61. package/dist/src/localize.js +195 -0
  62. package/dist/src/localize.js.map +1 -0
  63. package/dist/src/localizeRuntime.d.ts +53 -0
  64. package/dist/src/localizeRuntime.d.ts.map +1 -0
  65. package/dist/src/localizeRuntime.js +79 -0
  66. package/dist/src/localizeRuntime.js.map +1 -0
  67. package/dist/src/recordingData.d.ts +5 -4
  68. package/dist/src/recordingData.d.ts.map +1 -1
  69. package/dist/src/runtimeContext.d.ts +3 -4
  70. package/dist/src/runtimeContext.d.ts.map +1 -1
  71. package/dist/src/runtimeContext.js.map +1 -1
  72. package/dist/src/runtimeMode.d.ts +47 -0
  73. package/dist/src/runtimeMode.d.ts.map +1 -1
  74. package/dist/src/runtimeMode.js +124 -0
  75. package/dist/src/runtimeMode.js.map +1 -1
  76. package/dist/src/screenshot.d.ts +56 -2
  77. package/dist/src/screenshot.d.ts.map +1 -1
  78. package/dist/src/screenshot.js +47 -10
  79. package/dist/src/screenshot.js.map +1 -1
  80. package/dist/src/stillCapture.d.ts +2 -3
  81. package/dist/src/stillCapture.d.ts.map +1 -1
  82. package/dist/src/stillCapture.js.map +1 -1
  83. package/dist/src/studio.d.ts +55 -22
  84. package/dist/src/studio.d.ts.map +1 -1
  85. package/dist/src/studio.js +38 -12
  86. package/dist/src/studio.js.map +1 -1
  87. package/dist/src/types.d.ts +18 -5
  88. package/dist/src/types.d.ts.map +1 -1
  89. package/dist/src/types.js.map +1 -1
  90. package/dist/src/video.d.ts +149 -13
  91. package/dist/src/video.d.ts.map +1 -1
  92. package/dist/src/video.js +91 -24
  93. package/dist/src/video.js.map +1 -1
  94. package/dist/src/voiceConfig.d.ts +110 -0
  95. package/dist/src/voiceConfig.d.ts.map +1 -0
  96. package/dist/src/voiceConfig.js +2 -0
  97. package/dist/src/voiceConfig.js.map +1 -0
  98. package/dist/src/voices.d.ts +27 -23
  99. package/dist/src/voices.d.ts.map +1 -1
  100. package/dist/src/voices.js +7 -4
  101. package/dist/src/voices.js.map +1 -1
  102. package/dist/tsconfig.tsbuildinfo +1 -1
  103. package/package.json +1 -1
  104. package/skills/screenci/SKILL.md +39 -30
  105. package/dist/docs/video-sources/cli.screenci.d.ts +0 -2
  106. package/dist/docs/video-sources/cli.screenci.d.ts.map +0 -1
  107. package/dist/docs/video-sources/cli.screenci.js +0 -36
  108. package/dist/docs/video-sources/cli.screenci.js.map +0 -1
@@ -2,11 +2,23 @@ import type { TestType, PlaywrightTestArgs, PlaywrightTestOptions, PlaywrightWor
2
2
  import type { Recorder } from 'playwright-recorder-plus';
3
3
  import type { RecordOptions, RenderOptions, ScreenCIPage, VideoEncoderPreset } from './types.js';
4
4
  import type { Page } from '@playwright/test';
5
- import type { StudioRenderOptionsSentinel } from './studio.js';
5
+ import type { StudioDeclaration } from './studio.js';
6
6
  export { getDimensions } from './dimensions.js';
7
+ import type { VideoBuilder } from './builder.js';
8
+ import type { NormalizedLocalize } from './localize.js';
9
+ import { type NarrationMarkers, type TextDeclaration, type TextValues } from './localizeRuntime.js';
10
+ import { type OverlayController } from './asset.js';
11
+ import { type AudioController } from './audio.js';
7
12
  import { EventRecorder } from './events.js';
8
13
  import { createScreenCIRuntimeContext } from './runtimeContext.js';
9
14
  export declare const POST_VIDEO_PAUSE = 500;
15
+ /**
16
+ * The record options actually used for the capture: when record options are
17
+ * deferred to Studio (`video.studio({ recordOptions: true })`), the values
18
+ * fetched before recording (keyed by video name) override the code-declared
19
+ * aspect ratio, quality, and fps. Otherwise the code values are used as-is.
20
+ */
21
+ export declare function resolveEffectiveRecordOptions(recordOptions: RecordOptions, studio: StudioDeclaration | undefined, videoName: string): RecordOptions;
10
22
  type DeferredRecordingStop = {
11
23
  recorder: Recorder;
12
24
  };
@@ -68,15 +80,82 @@ export declare function withActiveRecordingContext<T>(params: {
68
80
  * `.start()`ed without `.end()` stays visible in the still.
69
81
  */
70
82
  unendedOverlays?: 'throw' | 'autoEnd';
83
+ /**
84
+ * Localized `text` field declaration to emit once at recording start so the
85
+ * backend learns which fields exist and their seeds. `null`/omitted when the
86
+ * spec declares no `text`.
87
+ */
88
+ textDeclaration?: TextDeclaration | null;
71
89
  }): Promise<T>;
72
90
  type VideoFixtureOptions = {
73
91
  recordOptions: RecordOptions;
74
- renderOptions: RenderOptions | StudioRenderOptionsSentinel | undefined;
92
+ renderOptions: RenderOptions | undefined;
93
+ /**
94
+ * Active language for this recording pass, set by `video.languages(...)` in
95
+ * per-language mode. `undefined` in shared mode and single-language videos.
96
+ * Internal: prefer the `language` fixture in test bodies.
97
+ */
98
+ _screenciLanguage: string | undefined;
99
+ /**
100
+ * Grouping name written to `metadata.videoName`, set by the fan-out builders
101
+ * so per-language passes (which use unique test titles) still group into one
102
+ * video. Falls back to the test title. Internal.
103
+ */
104
+ _screenciVideoName: string | undefined;
105
+ /**
106
+ * The normalized localize spec for this video, set by `video.localize(...)`.
107
+ * Drives the `narration` and `text` fixtures. Internal.
108
+ */
109
+ _screenciLocalize: NormalizedLocalize | undefined;
110
+ /**
111
+ * The studio declaration for this video, set by `video.studio(...)`. Drives
112
+ * the render/record deferral flags and the Studio-managed `narration`, `text`,
113
+ * `overlays`, and `audio` fixtures. Internal.
114
+ */
115
+ _screenciStudio: StudioDeclaration | undefined;
116
+ /**
117
+ * Absolute path of the `.screenci` script that registered this test, captured
118
+ * by the fan-out builder. Asset paths are resolved relative to it, since
119
+ * `testInfo.file` points at the builder module, not the script. Internal.
120
+ */
121
+ _screenciSourceFile: string | undefined;
122
+ };
123
+ type VideoRuntimeFixtures = {
124
+ /**
125
+ * The language being recorded in this pass, for per-language navigation
126
+ * (e.g. `page.goto('/' + language)`). `undefined` in shared mode and
127
+ * non-localized videos.
128
+ */
129
+ language: string | undefined;
130
+ /**
131
+ * Narration markers keyed by the cue names declared in `video.localize(...)`.
132
+ * Each marker records timing (`()`, `.start()`, `.end()`); the text is owned by
133
+ * the localize spec / Studio and is never exposed here.
134
+ */
135
+ narration: NarrationMarkers;
136
+ /**
137
+ * Injected text field values for the active language, keyed by the field names
138
+ * declared in `video.localize(...)`. Use them to fill localized content into
139
+ * the page.
140
+ */
141
+ text: TextValues;
142
+ /**
143
+ * Overlay controllers for the Studio-managed overlay names declared in
144
+ * `video.studio({ overlays: [...] })`. Each is callable with `start()`/`end()`;
145
+ * the file and placement come from Studio. Empty when none are declared.
146
+ */
147
+ overlays: Record<string, OverlayController>;
148
+ /**
149
+ * Background-audio controllers for the Studio-managed track names declared in
150
+ * `video.studio({ audio: [...] })`. Each is callable with `start()`/`end()`;
151
+ * the file, volume, and repeat come from Studio. Empty when none are declared.
152
+ */
153
+ audio: Record<string, AudioController>;
75
154
  };
76
- type VideoType = TestType<PlaywrightTestArgs & PlaywrightTestOptions & VideoFixtureOptions & PlaywrightWorkerArgs & PlaywrightWorkerOptions, PlaywrightWorkerArgs & PlaywrightWorkerOptions>;
155
+ type VideoType = TestType<PlaywrightTestArgs & PlaywrightTestOptions & VideoFixtureOptions & VideoRuntimeFixtures & PlaywrightWorkerArgs & PlaywrightWorkerOptions, PlaywrightWorkerArgs & PlaywrightWorkerOptions>;
77
156
  type VideoArgs = Omit<PlaywrightTestArgs, 'page'> & {
78
157
  page: ScreenCIPage;
79
- } & PlaywrightTestOptions & VideoFixtureOptions & PlaywrightWorkerArgs & PlaywrightWorkerOptions;
158
+ } & PlaywrightTestOptions & VideoFixtureOptions & VideoRuntimeFixtures & PlaywrightWorkerArgs & PlaywrightWorkerOptions;
80
159
  type VideoBody = (args: VideoArgs, testInfo: TestInfo) => void | Promise<void>;
81
160
  /** Conditional overloads shared by skip / fixme / fail */
82
161
  type ConditionalOverloads = ((condition?: boolean, description?: string) => void) & ((condition?: boolean, callback?: () => string) => void);
@@ -165,6 +244,61 @@ interface Video extends VideoCallSignatures {
165
244
  fail: Video & ConditionalOverloads;
166
245
  /** Mark this test as slow, with optional conditional overload. */
167
246
  slow: Video & ((condition?: boolean, description?: string) => void);
247
+ /**
248
+ * Record one localized pass per language. By default each language is recorded
249
+ * in its own pass with the browser `locale` set from the language; the body
250
+ * receives the active `language`, the `narration` markers, and the `text`
251
+ * values. Pass `mode: 'shared'` for a single capture shared across languages.
252
+ *
253
+ * Chainable with `.each(...)`.
254
+ *
255
+ * @example
256
+ * ```ts
257
+ * video.localize({
258
+ * narration: { en: { intro: 'Welcome.' }, fi: { intro: 'Tervetuloa.' } },
259
+ * text: { en: { heading: 'Dashboard' }, fi: { heading: 'Hallinta' } },
260
+ * })('Tutorial', async ({ page, language, narration, text }) => {
261
+ * await page.goto('/' + language)
262
+ * await page.getByTestId('heading').fill(text.heading ?? '')
263
+ * await narration.intro()
264
+ * })
265
+ * ```
266
+ */
267
+ localize: VideoBuilder<VideoArgs>['localize'];
268
+ /**
269
+ * Defer render/record options and declare Studio-managed narration, text,
270
+ * overlays, and audio, configured in the ScreenCI web app. Chainable with
271
+ * `.localize(...)` / `.each(...)`.
272
+ *
273
+ * @example
274
+ * ```ts
275
+ * video
276
+ * .studio({ recordOptions: true, narration: ['intro'], overlays: ['logo'] })
277
+ * .localize({ languages: ['en', 'fi'] })(
278
+ * 'Product demo',
279
+ * async ({ page, narration, overlays }) => {
280
+ * await overlays.logo()
281
+ * await narration.intro()
282
+ * }
283
+ * )
284
+ * ```
285
+ */
286
+ studio: VideoBuilder<VideoArgs>['studio'];
287
+ /**
288
+ * Produce a separate video per variant (viewport, theme, ...). Each variant
289
+ * has its own video identity and history. Chainable with `.languages(...)`.
290
+ *
291
+ * @example
292
+ * ```ts
293
+ * video.each([
294
+ * { key: 'mobile', recordOptions: { aspectRatio: '9:16' } },
295
+ * { key: 'desktop', recordOptions: { aspectRatio: '16:9' } },
296
+ * ])('Landing', async ({ page }) => {
297
+ * await page.goto('/')
298
+ * })
299
+ * ```
300
+ */
301
+ each: VideoBuilder<VideoArgs>['each'];
168
302
  /** Run a hook before each test in the current suite. */
169
303
  beforeEach(inner: (args: VideoArgs, testInfo: TestInfo) => Promise<void> | void): void;
170
304
  beforeEach(title: string, inner: (args: VideoArgs, testInfo: TestInfo) => Promise<void> | void): void;
@@ -190,17 +324,19 @@ interface Video extends VideoCallSignatures {
190
324
  * @example
191
325
  * Basic usage:
192
326
  * ```ts
193
- * import { createNarration, video, voices } from 'screenci'
327
+ * import { video, voices } from 'screenci'
194
328
  *
195
- * const narration = createNarration({
196
- * voice: { name: voices.Ava },
197
- * en: {
198
- * homepage: 'User navigates to homepage.',
199
- * signup: 'Clicks the sign up button.',
200
- * },
201
- * })
329
+ * // Voice is a render option; the localized text is declared with localize.
330
+ * video.use({ renderOptions: { narration: { voice: { name: voices.Ava } } } })
202
331
  *
203
- * video('Tutorial', async ({ page }) => {
332
+ * video.localize({
333
+ * narration: {
334
+ * en: {
335
+ * homepage: 'User navigates to homepage.',
336
+ * signup: 'Clicks the sign up button.',
337
+ * },
338
+ * },
339
+ * })('Tutorial', async ({ page, narration }) => {
204
340
  * await page.goto('https://example.com')
205
341
  * await narration.homepage()
206
342
  *
@@ -1 +1 @@
1
- {"version":3,"file":"video.d.ts","sourceRoot":"","sources":["../../src/video.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,QAAQ,EACR,kBAAkB,EAClB,qBAAqB,EACrB,oBAAoB,EACpB,uBAAuB,EACvB,WAAW,EACX,QAAQ,EACT,MAAM,kBAAkB,CAAA;AAIzB,OAAO,KAAK,EAAE,QAAQ,EAAc,MAAM,0BAA0B,CAAA;AAEpE,OAAO,KAAK,EAIV,aAAa,EACb,aAAa,EACb,YAAY,EACZ,kBAAkB,EACnB,MAAM,YAAY,CAAA;AACnB,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAC5C,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAA;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAgB/C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAU3C,OAAO,EACL,4BAA4B,EAU7B,MAAM,qBAAqB,CAAA;AAM5B,eAAO,MAAM,gBAAgB,MAAM,CAAA;AAEnC,KAAK,qBAAqB,GAAG;IAC3B,QAAQ,EAAE,QAAQ,CAAA;CACnB,CAAA;AAID,wBAAsB,8BAA8B,CAClD,OAAO,EAAE,qBAAqB,EAAE,GAC/B,OAAO,CAAC,IAAI,CAAC,CAYf;AA0CD,wBAAsB,6BAA6B,CACjD,IAAI,EAAE,IAAI,EACV,UAAU,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC5C,OAAO,CAAC;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAUnC;AAuDD;;GAEG;AACH,wBAAgB,6BAA6B,CAC3C,OAAO,GAAE,kBAA0C,GAClD,SAAS,MAAM,EAAE,CAEnB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,4BAA4B,CAC1C,WAAW,EAAE,SAAS,MAAM,EAAE,EAC9B,WAAW,EAAE,SAAS,MAAM,EAAE,GAC7B,MAAM,EAAE,CASV;AAOD;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,SAAS,MAAM,EAAE,GAC7B,IAAI,CAaN;AAsCD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,cAAc,EAAE,UAAU,CAAC,OAAO,4BAA4B,CAAC,GAC9D,IAAI,CAON;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,cAAc,EAAE,UAAU,CAAC,OAAO,4BAA4B,CAAC,EAC/D,QAAQ,EAAE,aAAa,GACtB,IAAI,CAMN;AAED,wBAAsB,0BAA0B,CAAC,CAAC,EAAE,MAAM,EAAE;IAC1D,cAAc,EAAE,UAAU,CAAC,OAAO,4BAA4B,CAAC,CAAA;IAC/D,IAAI,EAAE,IAAI,CAAA;IACV,QAAQ,EAAE,aAAa,CAAA;IACvB,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,CAAA;IACpB;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CACtC,GAAG,OAAO,CAAC,CAAC,CAAC,CA+Cb;AAED,KAAK,mBAAmB,GAAG;IACzB,aAAa,EAAE,aAAa,CAAA;IAC5B,aAAa,EAAE,aAAa,GAAG,2BAA2B,GAAG,SAAS,CAAA;CACvE,CAAA;AAkOD,KAAK,SAAS,GAAG,QAAQ,CACvB,kBAAkB,GAChB,qBAAqB,GACrB,mBAAmB,GACnB,oBAAoB,GACpB,uBAAuB,EACzB,oBAAoB,GAAG,uBAAuB,CAC/C,CAAA;AAED,KAAK,SAAS,GAAG,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAC,GAAG;IAClD,IAAI,EAAE,YAAY,CAAA;CACnB,GAAG,qBAAqB,GACvB,mBAAmB,GACnB,oBAAoB,GACpB,uBAAuB,CAAA;AAEzB,KAAK,SAAS,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;AAE9E,0DAA0D;AAC1D,KAAK,oBAAoB,GAAG,CAAC,CAC3B,SAAS,CAAC,EAAE,OAAO,EACnB,WAAW,CAAC,EAAE,MAAM,KACjB,IAAI,CAAC,GACR,CAAC,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,MAAM,KAAK,IAAI,CAAC,CAAA;AAE1D,UAAU,mBAAmB;IAC3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACH,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI,CAAA;IAEtC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA+BG;IACH,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI,CAAA;CAC7D;AAED;;;;;;;GAOG;AACH,UAAU,KAAM,SAAQ,mBAAmB;IACzC,0BAA0B;IAC1B,IAAI,EAAE,KAAK,CAAA;IACX,2DAA2D;IAC3D,IAAI,EAAE,KAAK,GAAG,oBAAoB,CAAA;IAClC,oEAAoE;IACpE,KAAK,EAAE,KAAK,GAAG,oBAAoB,CAAA;IACnC,+EAA+E;IAC/E,IAAI,EAAE,KAAK,GAAG,oBAAoB,CAAA;IAClC,kEAAkE;IAClE,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC,CAAA;IAEnE,wDAAwD;IACxD,UAAU,CACR,KAAK,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GACnE,IAAI,CAAA;IACP,UAAU,CACR,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GACnE,IAAI,CAAA;IACP,uDAAuD;IACvD,SAAS,CACP,KAAK,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GACnE,IAAI,CAAA;IACP,SAAS,CACP,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GACnE,IAAI,CAAA;IAGP,QAAQ,EAAE,SAAS,CAAC,UAAU,CAAC,CAAA;IAC/B,SAAS,EAAE,SAAS,CAAC,WAAW,CAAC,CAAA;IACjC,QAAQ,EAAE,SAAS,CAAC,UAAU,CAAC,CAAA;IAC/B,GAAG,EAAE,SAAS,CAAC,KAAK,CAAC,CAAA;IACrB,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAA;IAC3B,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,CAAA;IACvB,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,CAAA;IACvB,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAA;IAC3B,UAAU,EAAE,SAAS,CAAC,YAAY,CAAC,CAAA;CACpC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,eAAO,MAAM,KAAK,EAA4B,KAAK,CAAA"}
1
+ {"version":3,"file":"video.d.ts","sourceRoot":"","sources":["../../src/video.ts"],"names":[],"mappings":"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"}
package/dist/src/video.js CHANGED
@@ -2,15 +2,18 @@ import { test as base } from '@playwright/test';
2
2
  import { mkdir, rm } from 'fs/promises';
3
3
  import { join, relative } from 'path';
4
4
  import { attachRecorder } from 'playwright-recorder-plus';
5
+ import { studioOptionFlags } from './studio.js';
5
6
  export { getDimensions } from './dimensions.js';
6
7
  import { getDimensions, getViewportCenter } from './dimensions.js';
7
8
  import { resetCueChain } from './cue.js';
8
9
  import { setActiveCueRecorder } from './cue.js';
10
+ import { createVideoBuilder } from './builder.js';
11
+ import { buildNarrationMarkers, buildTextDeclaration, buildTextValues, narrationVoiceConfigFromRenderOptions, } from './localizeRuntime.js';
9
12
  import { setActiveHideRecorder } from './hide.js';
10
13
  import { setActiveAutoZoomRecorder, setActiveZoomPage } from './autoZoom.js';
11
- import { setActiveAssetRecorder } from './asset.js';
14
+ import { setActiveAssetRecorder, buildStudioOverlays, } from './asset.js';
12
15
  import { flushPendingOverlays } from './overlayFlush.js';
13
- import { setActiveAudioRecorder } from './audio.js';
16
+ import { setActiveAudioRecorder, buildStudioAudioTracks, } from './audio.js';
14
17
  import { DEFAULT_VIDEO_OPTIONS, DEFAULT_ASPECT_RATIO, DEFAULT_QUALITY, DEFAULT_FPS, DEFAULT_VIDEO_ENCODER, } from './defaults.js';
15
18
  import { EventRecorder } from './events.js';
16
19
  import { bindClickRecorderToPage, instrumentBrowser, instrumentContext, setActiveClickRecorder, } from './instrument.js';
@@ -19,10 +22,21 @@ import { setMousePosition } from './mouse.js';
19
22
  import { getChromiumLaunchOptions } from './browserLaunchOptions.js';
20
23
  import { createScreenCIRuntimeContext, runWithScreenCIRuntimeContext, setActiveScreenCIRuntimeContext, setRuntimeAssetRecorder, setRuntimeAudioRecorder, setRuntimeAutoZoomRecorder, setRuntimeClickRecorder, setRuntimeCueRecorder, setRuntimeHideRecorder, setRuntimePage, } from './runtimeContext.js';
21
24
  import { escapeFileSystemPathSegment } from './fileSystemName.js';
22
- import { resolveRecordingTimingDuration } from './runtimeMode.js';
25
+ import { resolveRecordingTimingDuration, parseTextOverrides, parseRecordOptions, mergeStudioRecordOptions, } from './runtimeMode.js';
23
26
  import { buildScreenCIContextOptions } from './contextOptions.js';
24
27
  import { bindStillCaptureToPage } from './stillCapture.js';
25
28
  export const POST_VIDEO_PAUSE = 500;
29
+ /**
30
+ * The record options actually used for the capture: when record options are
31
+ * deferred to Studio (`video.studio({ recordOptions: true })`), the values
32
+ * fetched before recording (keyed by video name) override the code-declared
33
+ * aspect ratio, quality, and fps. Otherwise the code values are used as-is.
34
+ */
35
+ export function resolveEffectiveRecordOptions(recordOptions, studio, videoName) {
36
+ if (!studioOptionFlags(studio).recordOptions)
37
+ return recordOptions;
38
+ return mergeStudioRecordOptions(recordOptions, parseRecordOptions()?.[videoName]);
39
+ }
26
40
  export async function finalizeDeferredRecordingStops(entries) {
27
41
  await Promise.all(entries.map(async ({ recorder }) => {
28
42
  const stopResult = await recorder.stop();
@@ -206,7 +220,7 @@ export function autoEndOpenOverlays(runtimeContext, recorder) {
206
220
  runtimeContext.asset.activeRuns.clear();
207
221
  }
208
222
  export async function withActiveRecordingContext(params) {
209
- const { runtimeContext, page, recorder, fn, unendedOverlays = 'throw', } = params;
223
+ const { runtimeContext, page, recorder, fn, unendedOverlays = 'throw', textDeclaration, } = params;
210
224
  setActiveScreenCIRuntimeContext(runtimeContext);
211
225
  try {
212
226
  return await runWithScreenCIRuntimeContext(runtimeContext, async () => {
@@ -226,6 +240,9 @@ export async function withActiveRecordingContext(params) {
226
240
  setActiveClickRecorder(recorder);
227
241
  bindClickRecorderToPage(page, recorder);
228
242
  setRuntimePage(page);
243
+ if (textDeclaration) {
244
+ recorder.addTextDeclare(textDeclaration.fields, textDeclaration.studioFields, textDeclaration.seed);
245
+ }
229
246
  const result = await fn();
230
247
  if (unendedOverlays === 'autoEnd') {
231
248
  autoEndOpenOverlays(runtimeContext, recorder);
@@ -249,6 +266,26 @@ export async function withActiveRecordingContext(params) {
249
266
  const _videoBase = base.extend({
250
267
  recordOptions: [DEFAULT_VIDEO_OPTIONS, { option: true }],
251
268
  renderOptions: [undefined, { option: true }],
269
+ _screenciLanguage: [undefined, { option: true }],
270
+ _screenciVideoName: [undefined, { option: true }],
271
+ _screenciLocalize: [undefined, { option: true }],
272
+ _screenciStudio: [undefined, { option: true }],
273
+ _screenciSourceFile: [undefined, { option: true }],
274
+ language: async ({ _screenciLanguage }, use) => {
275
+ await use(_screenciLanguage);
276
+ },
277
+ narration: async ({ _screenciLocalize, _screenciStudio, renderOptions }, use) => {
278
+ await use(buildNarrationMarkers(_screenciLocalize, narrationVoiceConfigFromRenderOptions(renderOptions, studioOptionFlags(_screenciStudio).renderOptions), _screenciStudio?.narration ?? []));
279
+ },
280
+ text: async ({ _screenciLocalize, _screenciStudio, _screenciLanguage }, use) => {
281
+ await use(buildTextValues(_screenciLocalize, _screenciLanguage, parseTextOverrides(), _screenciStudio?.text ?? []));
282
+ },
283
+ overlays: async ({ _screenciStudio }, use) => {
284
+ await use(buildStudioOverlays(_screenciStudio?.overlays ?? []));
285
+ },
286
+ audio: async ({ _screenciStudio }, use) => {
287
+ await use(buildStudioAudioTracks(_screenciStudio?.audio ?? []));
288
+ },
252
289
  recordingFinalizationQueue: [
253
290
  async ({}, use) => {
254
291
  const queue = [];
@@ -270,12 +307,14 @@ const _videoBase = base.extend({
270
307
  await browser.close();
271
308
  }
272
309
  },
273
- context: async ({ browser, recordOptions, colorScheme, locale, timezoneId, userAgent, geolocation, permissions, extraHTTPHeaders, httpCredentials, ignoreHTTPSErrors, offline, storageState, baseURL, bypassCSP, acceptDownloads, javaScriptEnabled, hasTouch, isMobile, }, use) => {
274
- // Configure browser context. The viewport is derived from recordOptions;
275
- // other Playwright `use` options (colorScheme, locale, storageState, ...)
276
- // are forwarded so they take effect on the context screenci creates.
277
- const aspectRatio = recordOptions.aspectRatio ?? DEFAULT_ASPECT_RATIO;
278
- const quality = recordOptions.quality ?? DEFAULT_QUALITY;
310
+ context: async ({ browser, recordOptions, _screenciStudio, _screenciVideoName, colorScheme, locale, timezoneId, userAgent, geolocation, permissions, extraHTTPHeaders, httpCredentials, ignoreHTTPSErrors, offline, storageState, baseURL, bypassCSP, acceptDownloads, javaScriptEnabled, hasTouch, isMobile, }, use, testInfo) => {
311
+ // Configure browser context. The viewport is derived from recordOptions
312
+ // (with Studio record-option overrides applied when deferred); other
313
+ // Playwright `use` options (colorScheme, locale, storageState, ...) are
314
+ // forwarded so they take effect on the context screenci creates.
315
+ const effectiveRecordOptions = resolveEffectiveRecordOptions(recordOptions, _screenciStudio, _screenciVideoName ?? testInfo.title);
316
+ const aspectRatio = effectiveRecordOptions.aspectRatio ?? DEFAULT_ASPECT_RATIO;
317
+ const quality = effectiveRecordOptions.quality ?? DEFAULT_QUALITY;
279
318
  const dimensions = getDimensions(aspectRatio, quality);
280
319
  const shouldRecord = process.env.SCREENCI_RECORDING === 'true';
281
320
  // deviceScaleFactor is intentionally not applied to video: the screencast
@@ -311,16 +350,34 @@ const _videoBase = base.extend({
311
350
  await context.close();
312
351
  }
313
352
  },
314
- page: async ({ context, recordOptions, renderOptions, recordingFinalizationQueue }, use, testInfo) => {
353
+ page: async ({ context, recordOptions: codeRecordOptions, renderOptions, recordingFinalizationQueue, _screenciLanguage, _screenciLocalize, _screenciStudio, _screenciVideoName, _screenciSourceFile, }, use, testInfo) => {
315
354
  // Only record when explicitly enabled (record command)
316
355
  const shouldRecord = process.env.SCREENCI_RECORDING === 'true';
317
- const recorder = new EventRecorder(renderOptions, recordOptions);
356
+ // Apply Studio record-option overrides (when deferred) so the capture,
357
+ // serialized recordOptions, and viewport all use the effective values.
358
+ const recordOptions = resolveEffectiveRecordOptions(codeRecordOptions, _screenciStudio, _screenciVideoName ?? testInfo.title);
359
+ const recorder = new EventRecorder(renderOptions, recordOptions, studioOptionFlags(_screenciStudio));
360
+ // Declared `text` fields (and the active language's seeds) emitted once at
361
+ // recording start so the backend/Studio learn them.
362
+ const textDeclaration = buildTextDeclaration(_screenciLocalize, _screenciLanguage, _screenciStudio?.text ?? []);
363
+ // Asset paths are authored relative to the user's script. Playwright reports
364
+ // `testInfo.file` as the builder module that registered the test, so prefer
365
+ // the script path captured at the call site.
366
+ const testFilePath = _screenciSourceFile ?? testInfo.file;
367
+ // In per-language mode each pass records one language; this filters cue
368
+ // translations and stamps metadata so the upload becomes a single language
369
+ // version. `null` (shared / single-language) keeps every language.
370
+ recorder.setActiveLanguage(_screenciLanguage ?? null);
371
+ // Per-language passes use a unique test title (so each gets its own
372
+ // recording directory) but share one `videoName` so they group as language
373
+ // versions of one video. Plain videos fall back to the test title.
374
+ const videoName = _screenciVideoName ?? testInfo.title;
318
375
  if (!shouldRecord) {
319
376
  const page = await context.newPage();
320
377
  const runtimeContext = createScreenCIRuntimeContext({
321
378
  recorder,
322
379
  page,
323
- testFilePath: testInfo.file,
380
+ testFilePath,
324
381
  recordOptions,
325
382
  renderOptions,
326
383
  });
@@ -331,6 +388,7 @@ const _videoBase = base.extend({
331
388
  runtimeContext,
332
389
  page,
333
390
  recorder,
391
+ textDeclaration,
334
392
  fn: async () => {
335
393
  await use(page);
336
394
  },
@@ -363,7 +421,7 @@ const _videoBase = base.extend({
363
421
  const runtimeContext = createScreenCIRuntimeContext({
364
422
  recorder,
365
423
  page,
366
- testFilePath: testInfo.file,
424
+ testFilePath,
367
425
  recordingDir: videoDir,
368
426
  recordOptions,
369
427
  renderOptions,
@@ -385,6 +443,7 @@ const _videoBase = base.extend({
385
443
  runtimeContext,
386
444
  page,
387
445
  recorder,
446
+ textDeclaration,
388
447
  fn: async () => {
389
448
  await use(page);
390
449
  // Do not end video abruptly.
@@ -398,7 +457,7 @@ const _videoBase = base.extend({
398
457
  await page.close();
399
458
  if (testInfo.status === 'passed') {
400
459
  const configDir = process.env.SCREENCI_CONFIG_DIR ?? process.cwd();
401
- await recorder.writeToFile(videoDir, testInfo.title, relative(configDir, testInfo.file));
460
+ await recorder.writeToFile(videoDir, videoName, relative(configDir, testFilePath));
402
461
  }
403
462
  }
404
463
  },
@@ -412,17 +471,19 @@ const _videoBase = base.extend({
412
471
  * @example
413
472
  * Basic usage:
414
473
  * ```ts
415
- * import { createNarration, video, voices } from 'screenci'
474
+ * import { video, voices } from 'screenci'
416
475
  *
417
- * const narration = createNarration({
418
- * voice: { name: voices.Ava },
419
- * en: {
420
- * homepage: 'User navigates to homepage.',
421
- * signup: 'Clicks the sign up button.',
422
- * },
423
- * })
476
+ * // Voice is a render option; the localized text is declared with localize.
477
+ * video.use({ renderOptions: { narration: { voice: { name: voices.Ava } } } })
424
478
  *
425
- * video('Tutorial', async ({ page }) => {
479
+ * video.localize({
480
+ * narration: {
481
+ * en: {
482
+ * homepage: 'User navigates to homepage.',
483
+ * signup: 'Clicks the sign up button.',
484
+ * },
485
+ * },
486
+ * })('Tutorial', async ({ page, narration }) => {
426
487
  * await page.goto('https://example.com')
427
488
  * await narration.homepage()
428
489
  *
@@ -432,4 +493,10 @@ const _videoBase = base.extend({
432
493
  * ```
433
494
  */
434
495
  export const video = _videoBase;
496
+ // Attach the chainable fan-out builders. They register through the same test
497
+ // instance, so per-language / per-variant passes inherit every video fixture.
498
+ const _rootBuilder = createVideoBuilder(_videoBase);
499
+ video.localize = _rootBuilder.localize;
500
+ video.studio = _rootBuilder.studio;
501
+ video.each = _rootBuilder.each;
435
502
  //# sourceMappingURL=video.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"video.js","sourceRoot":"","sources":["../../src/video.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,IAAI,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAU/C,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAA;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAczD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAC/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAA;AACjD,OAAO,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAA;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAA;AACnD,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,eAAe,EACf,WAAW,EACX,qBAAqB,GACtB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EACL,uBAAuB,EACvB,iBAAiB,EACjB,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAC7C,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAA;AACpE,OAAO,EACL,4BAA4B,EAC5B,6BAA6B,EAC7B,+BAA+B,EAC/B,uBAAuB,EACvB,uBAAuB,EACvB,0BAA0B,EAC1B,uBAAuB,EACvB,qBAAqB,EACrB,sBAAsB,EACtB,cAAc,GACf,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAA;AACjE,OAAO,EAAE,8BAA8B,EAAE,MAAM,kBAAkB,CAAA;AACjE,OAAO,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAA;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAA;AAE1D,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAA;AAQnC,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAClD,OAAgC;IAEhC,MAAM,OAAO,CAAC,GAAG,CACf,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;QACjC,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;QACxC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YACxB,MAAM,CAAC,IAAI,CACT,kFAAkF,CACnF,CAAA;QACH,CAAC;QACD,MAAM,QAAQ,CAAC,SAAS,CAAA;IAC1B,CAAC,CAAC,CACH,CAAA;AACH,CAAC;AAED,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAC7B,UAAU,CAAC,OAAO,EAAE,8BAA8B,CAAC,EAAE,CAAC,CAAC,CACxD,CAAA;AACH,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,KAAW,EACX,SAAwB;IAExB;;;;;;;;;;;;;;;;;;;;;;;;;;;MA2BE;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,IAAU,EACV,UAA6C;IAE7C,MAAM,cAAc,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAA;IACpD,MACE,IAAI,CAAC,KAGN,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,CAAA;IAC3C,gBAAgB,CAAC,IAAI,EAAE,cAAc,CAAC,CAAA;IAEtC,OAAO,cAAc,CAAA;AACvB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,0BAA0B,GAG5B;IACF,KAAK,EAAE;QACL,MAAM;QACN,SAAS;QACT,SAAS;QACT,UAAU;QACV,MAAM;QACN,IAAI;QACJ,OAAO;QACP,YAAY;QACZ,UAAU;QACV,SAAS;QACT,WAAW;QACX,YAAY;KACb;IACD,IAAI,EAAE;QACJ,MAAM;QACN,SAAS;QACT,SAAS;QACT,WAAW;QACX,MAAM;QACN,IAAI;QACJ,UAAU;QACV,SAAS;QACT,WAAW;QACX,YAAY;KACb;CACF,CAAA;AAED;;GAEG;AACH,MAAM,UAAU,6BAA6B,CAC3C,UAA8B,qBAAqB;IAEnD,OAAO,0BAA0B,CAAC,OAAO,CAAC,CAAA;AAC5C,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,4BAA4B,CAC1C,WAA8B,EAC9B,WAA8B;IAE9B,MAAM,YAAY,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;IACpD,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CACb,+EAA+E;YAC7E,uFAAuF,CAC1F,CAAA;IACH,CAAC;IACD,OAAO,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,EAAE,GAAG,WAAW,CAAC,CAAA;AAChE,CAAC;AAOD;;;;;;GAMG;AACH,MAAM,UAAU,yBAAyB,CACvC,QAAkB,EAClB,WAA8B;IAE9B,MAAM,MAAM,GAAI,QAAwC,CAAC,MAAM,CAAA;IAC/D,MAAM,OAAO,GAAG,MAAM,EAAE,aAAa,CAAA;IACrC,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CACb,yEAAyE;YACvE,uFAAuF,CAC1F,CAAA;IACH,CAAC;IACD,MAAM,CAAC,aAAa,GAAG,4BAA4B,CACjD,OAAmB,EACnB,WAAW,CACZ,CAAA;AACH,CAAC;AAED,KAAK,UAAU,wBAAwB,CACrC,IAAU,EACV,UAAkB,EAClB,GAAQ,EACR,OAAgB,EAChB,WAAwB,EACxB,OAA2B;IAE3B,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,aAAa,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;IAE7D,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,IAA+B,EAAE;QACrE,IAAI,EAAE,UAAU;QAChB,gBAAgB,EAAE,UAAU;QAC5B,SAAS,EAAE,KAAK;QAChB,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;QACvB,GAAG;QACH,WAAW,EAAE,GAAG;KACjB,CAAC,CAAA;IAEF,6EAA6E;IAC7E,4EAA4E;IAC5E,qEAAqE;IACrE,yBAAyB,CAAC,QAAQ,EAAE,6BAA6B,CAAC,OAAO,CAAC,CAAC,CAK1E;IACC,QAGD,CAAC,aAAa,GAAG,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC,SAAS,CAAA;IAEhD,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CACpC,cAA+D;IAE/D,MAAM,IAAI,GAAG,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAA;IACxD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAM;IAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACxD,MAAM,IAAI,KAAK,CACb,yBAAyB,KAAK,6GAA6G,CAC5I,CAAA;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CACjC,cAA+D,EAC/D,QAAuB;IAEvB,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,cAAc,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QAC1D,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QAClC,GAAG,CAAC,eAAe,EAAE,CAAA;IACvB,CAAC;IACD,cAAc,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE,CAAA;AACzC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAI,MAWnD;IACC,MAAM,EACJ,cAAc,EACd,IAAI,EACJ,QAAQ,EACR,EAAE,EACF,eAAe,GAAG,OAAO,GAC1B,GAAG,MAAM,CAAA;IAEV,+BAA+B,CAAC,cAAc,CAAC,CAAA;IAE/C,IAAI,CAAC;QACH,OAAO,MAAM,6BAA6B,CAAC,cAAc,EAAE,KAAK,IAAI,EAAE;YACpE,aAAa,EAAE,CAAA;YACf,qBAAqB,CAAC,QAAQ,CAAC,CAAA;YAC/B,sBAAsB,CAAC,QAAQ,CAAC,CAAA;YAChC,0BAA0B,CAAC,QAAQ,CAAC,CAAA;YACpC,uBAAuB,CAAC,QAAQ,CAAC,CAAA;YACjC,uBAAuB,CAAC,QAAQ,CAAC,CAAA;YACjC,uBAAuB,CAAC,QAAQ,CAAC,CAAA;YACjC,oBAAoB,CAAC,QAAQ,CAAC,CAAA;YAC9B,qBAAqB,CAAC,QAAQ,CAAC,CAAA;YAC/B,yBAAyB,CAAC,QAAQ,CAAC,CAAA;YACnC,iBAAiB,CAAC,IAAI,CAAC,CAAA;YACvB,sBAAsB,CAAC,QAAQ,CAAC,CAAA;YAChC,sBAAsB,CAAC,QAAQ,CAAC,CAAA;YAChC,sBAAsB,CAAC,QAAQ,CAAC,CAAA;YAChC,uBAAuB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;YACvC,cAAc,CAAC,IAAI,CAAC,CAAA;YAEpB,MAAM,MAAM,GAAG,MAAM,EAAE,EAAE,CAAA;YACzB,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;gBAClC,mBAAmB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAA;YAC/C,CAAC;iBAAM,CAAC;gBACN,sBAAsB,CAAC,cAAc,CAAC,CAAA;YACxC,CAAC;YACD,uEAAuE;YACvE,yEAAyE;YACzE,sEAAsE;YACtE,0EAA0E;YAC1E,iBAAiB;YACjB,MAAM,oBAAoB,CAAC,QAAQ,CAAC,CAAA;YACpC,OAAO,MAAM,CAAA;QACf,CAAC,CAAC,CAAA;IACJ,CAAC;YAAS,CAAC;QACT,+BAA+B,CAAC,IAAI,CAAC,CAAA;IACvC,CAAC;AACH,CAAC;AAOD,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAG5B;IACA,aAAa,EAAE,CAAC,qBAAqB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACxD,aAAa,EAAE,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAC5C,0BAA0B,EAAE;QAC1B,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE;YAChB,MAAM,KAAK,GAA4B,EAAE,CAAA;YACzC,MAAM,GAAG,CAAC,KAAK,CAAC,CAAA;YAEhB,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,MAAM,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACpE,OAAM;YACR,CAAC;YAED,MAAM,8BAA8B,CAAC,KAAK,CAAC,CAAA;QAC7C,CAAC;QACD,EAAE,KAAK,EAAE,QAAQ,EAAE;KACpB;IAED,OAAO,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,GAAG,EAAE,EAAE;QACrC,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,MAAM,CAAA;QAC9D,MAAM,aAAa,GAAG,wBAAwB,CAAC,YAAY,CAAC,CAAA;QAE5D,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA;QAC/D,iBAAiB,CAAC,OAAO,CAAC,CAAA;QAC1B,MAAM,GAAG,CAAC,OAAO,CAAC,CAAA;QAClB,IAAI,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;YAC1B,MAAM,OAAO,CAAC,KAAK,EAAE,CAAA;QACvB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EACZ,EACE,OAAO,EACP,aAAa,EACb,WAAW,EACX,MAAM,EACN,UAAU,EACV,SAAS,EACT,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,OAAO,EACP,YAAY,EACZ,OAAO,EACP,SAAS,EACT,eAAe,EACf,iBAAiB,EACjB,QAAQ,EACR,QAAQ,GACT,EACD,GAAG,EACH,EAAE;QACF,yEAAyE;QACzE,0EAA0E;QAC1E,qEAAqE;QACrE,MAAM,WAAW,GAAG,aAAa,CAAC,WAAW,IAAI,oBAAoB,CAAA;QACrE,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,IAAI,eAAe,CAAA;QACxD,MAAM,UAAU,GAAG,aAAa,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;QACtD,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,MAAM,CAAA;QAE9D,0EAA0E;QAC1E,qDAAqD;QACrD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CACtC,2BAA2B,CAAC;YAC1B,UAAU;YACV,kBAAkB,EAAE,YAAY;YAChC,SAAS,EAAE;gBACT,WAAW;gBACX,MAAM;gBACN,UAAU;gBACV,SAAS;gBACT,WAAW;gBACX,WAAW;gBACX,gBAAgB;gBAChB,eAAe;gBACf,iBAAiB;gBACjB,OAAO;gBACP,YAAY;gBACZ,OAAO;gBACP,SAAS;gBACT,eAAe;gBACf,iBAAiB;gBACjB,QAAQ;gBACR,QAAQ;aACT;SACF,CAAC,CACH,CAAA;QAED,iBAAiB,CAAC,OAAO,CAAC,CAAA;QAE1B,IAAI,CAAC;YACH,MAAM,GAAG,CAAC,OAAO,CAAC,CAAA;QACpB,CAAC;gBAAS,CAAC;YACT,MAAM,OAAO,CAAC,KAAK,EAAE,CAAA;QACvB,CAAC;IACH,CAAC;IAED,IAAI,EAAE,KAAK,EACT,EAAE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,0BAA0B,EAAE,EACrE,GAAG,EACH,QAAQ,EACR,EAAE;QACF,uDAAuD;QACvD,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,MAAM,CAAA;QAC9D,MAAM,QAAQ,GAAG,IAAI,aAAa,CAAC,aAAa,EAAE,aAAa,CAAC,CAAA;QAEhE,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAA;YACpC,MAAM,cAAc,GAAG,4BAA4B,CAAC;gBAClD,QAAQ;gBACR,IAAI;gBACJ,YAAY,EAAE,QAAQ,CAAC,IAAI;gBAC3B,aAAa;gBACb,aAAa;aACd,CAAC,CAAA;YACF,sBAAsB,CAAC,IAAI,CAAC,CAAA;YAC5B,MAAM,kBAAkB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;YACxC,QAAQ,CAAC,KAAK,EAAE,CAAA;YAChB,MAAM,0BAA0B,CAAC;gBAC/B,cAAc;gBACd,IAAI;gBACJ,QAAQ;gBACR,EAAE,EAAE,KAAK,IAAI,EAAE;oBACb,MAAM,GAAG,CAAC,IAAI,CAAC,CAAA;gBACjB,CAAC;aACF,CAAC,CAAA;YACF,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA;YAClB,OAAM;QACR,CAAC;QAED,oBAAoB;QACpB,MAAM,WAAW,GAAG,aAAa,CAAC,WAAW,IAAI,oBAAoB,CAAA;QACrE,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,IAAI,eAAe,CAAA;QACxD,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,IAAI,WAAW,CAAA;QAC5C,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,IAAI,qBAAqB,CAAA;QAC9D,MAAM,UAAU,GAAG,aAAa,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;QAEtD,MAAM,aAAa,GAAG,2BAA2B,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;QAEjE,kDAAkD;QAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,aAAa,CAAC,CAAA;QAEhE,kDAAkD;QAClD,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;QACtD,CAAC;QAAC,MAAM,CAAC;YACP,2CAA2C;QAC7C,CAAC;QAED,uBAAuB;QACvB,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAE1C,+CAA+C;QAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAA;QAEjD,yDAAyD;QACzD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAA;QACpC,MAAM,cAAc,GAAG,4BAA4B,CAAC;YAClD,QAAQ;YACR,IAAI;YACJ,YAAY,EAAE,QAAQ,CAAC,IAAI;YAC3B,YAAY,EAAE,QAAQ;YACtB,aAAa;YACb,aAAa;SACd,CAAC,CAAA;QAEF,sBAAsB,CAAC,IAAI,CAAC,CAAA;QAC5B,MAAM,kBAAkB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;QAExC,gEAAgE;QAChE,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;QAE9B,yEAAyE;QACzE,sCAAsC;QACtC,MAAM,IAAI,CAAC,cAAc,CAAC,8BAA8B,CAAC,IAAI,CAAC,CAAC,CAAA;QAE/D,MAAM,cAAc,GAAG,MAAM,wBAAwB,CACnD,IAAI,EACJ,SAAS,EACT,GAAG,EACH,OAAO,EACP,WAAW,EACX,OAAO,CACR,CAAA;QAED,MAAM,6BAA6B,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;QACrD,MAAM,cAAc,CAAC,KAAK,EAAE,CAAA;QAC5B,sFAAsF;QACtF,QAAQ,CAAC,KAAK,EAAE,CAAA;QAEhB,IAAI,CAAC;YACH,MAAM,0BAA0B,CAAC;gBAC/B,cAAc;gBACd,IAAI;gBACJ,QAAQ;gBACR,EAAE,EAAE,KAAK,IAAI,EAAE;oBACb,MAAM,GAAG,CAAC,IAAI,CAAC,CAAA;oBAEf,6BAA6B;oBAC7B,MAAM,KAAK,CAAC,gBAAgB,CAAC,CAAA;gBAC/B,CAAC;aACF,CAAC,CAAA;QACJ,CAAC;gBAAS,CAAC;YACT,MAAM,cAAc,CAAC,KAAK,EAAE,CAAA;YAC5B,0BAA0B,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC,CAAA;YAE7D,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA;YAElB,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBACjC,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,OAAO,CAAC,GAAG,EAAE,CAAA;gBAClE,MAAM,QAAQ,CAAC,WAAW,CACxB,QAAQ,EACR,QAAQ,CAAC,KAAK,EACd,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC,CACnC,CAAA;YACH,CAAC;QACH,CAAC;IACH,CAAC;CACF,CAAC,CAAA;AAgJF;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,UAA8B,CAAA"}
1
+ {"version":3,"file":"video.js","sourceRoot":"","sources":["../../src/video.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,110 @@
1
+ import type { ModelVoiceKey, ElevenLabsVoiceKey, CustomVoiceRef, ModelType } from './voices.js';
2
+ /**
3
+ * Voice configuration types. Kept in a leaf module (depends only on `voices.ts`)
4
+ * so both `cue.ts` and `types.ts` can import them: voice is configured as a
5
+ * render option (`renderOptions.narration`), which lives in `types.ts`, while
6
+ * the narration runtime in `cue.ts` consumes the same shapes.
7
+ *
8
+ * ElevenLabs voices support only the numeric `eleven_multilingual_v2` settings;
9
+ * built-in model voices support expressive/consistent model controls.
10
+ */
11
+ type ElevenLabsVoiceSettings = {
12
+ /** Voice stability for ElevenLabs `eleven_multilingual_v2`. Valid range: 0 to 1. */
13
+ stability?: number;
14
+ /** Similarity enhancement for ElevenLabs `eleven_multilingual_v2`. Valid range: 0 to 1. */
15
+ similarityBoost?: number;
16
+ /** Style exaggeration for ElevenLabs `eleven_multilingual_v2`. Valid range: 0 to 1. */
17
+ style?: number;
18
+ /** Playback speed for ElevenLabs `eleven_multilingual_v2`. Valid range: 0.7 to 1.2. */
19
+ speed?: number;
20
+ /** Enables ElevenLabs speaker boost. Defaults to `true`. */
21
+ useSpeakerBoost?: boolean;
22
+ };
23
+ type ElevenLabsVoiceConfig = ElevenLabsVoiceSettings & {
24
+ name: ElevenLabsVoiceKey | CustomVoiceRef;
25
+ modelType?: never;
26
+ accent?: never;
27
+ pacing?: never;
28
+ };
29
+ /**
30
+ * Default voice shared across all languages. `seed` is not allowed here — use a
31
+ * per-language voice override instead.
32
+ */
33
+ export type TopLevelVoiceConfig = ElevenLabsVoiceConfig | {
34
+ name: ModelVoiceKey;
35
+ /** Speaking style prompt for expressive synthesis. Business tier only. Implies `expressive` model type. */
36
+ style: string;
37
+ /** Can be omitted when `style` is set — `expressive` is implied. Business tier only. */
38
+ modelType?: 'expressive';
39
+ /**
40
+ * Accent description for expressive synthesis.
41
+ * The more specific, the better — e.g. `'Southern American English'` or `'Received Pronunciation British'`.
42
+ * Omitted from the prompt when not set — the voice uses its natural default.
43
+ */
44
+ accent?: string;
45
+ /**
46
+ * Pacing description for expressive synthesis.
47
+ * Describes the overall speed and tempo — e.g. `'Measured and deliberate'` or `'Brisk and energetic'`.
48
+ */
49
+ pacing?: string;
50
+ } | {
51
+ name: ModelVoiceKey;
52
+ style?: never;
53
+ accent?: never;
54
+ /** Speaking rate for consistent synthesis. Valid range: 0.25 to 2. */
55
+ pacing?: number;
56
+ /** TTS model type — `modelTypes.expressive` or `modelTypes.consistent`. Defaults to `consistent`. */
57
+ modelType?: Exclude<ModelType, 'expressive'> | undefined;
58
+ };
59
+ /**
60
+ * Per-language voice override. Can override the default voice name and set a
61
+ * `seed` for TTS generation.
62
+ *
63
+ * The voice name discriminates provider-specific settings: built-in model voices
64
+ * use expressive/consistent controls, ElevenLabs voices use the numeric
65
+ * `eleven_multilingual_v2` controls.
66
+ */
67
+ export type LangNarrationOverride = (ElevenLabsVoiceConfig & {
68
+ /**
69
+ * Integer seed included in the audio cache key and forwarded to ElevenLabs.
70
+ * A different seed always forces regeneration.
71
+ */
72
+ seed?: number;
73
+ }) | {
74
+ name: ModelVoiceKey;
75
+ /**
76
+ * Integer seed included in the audio cache key. A different seed always forces
77
+ * regeneration. Consistent output is not guaranteed across all voice types.
78
+ */
79
+ seed?: number;
80
+ /** Speaking style prompt for expressive synthesis. Business tier only. Implies `expressive` model type. */
81
+ style: string;
82
+ /** Can be omitted when `style` is set — `expressive` is implied. Business tier only. */
83
+ modelType?: 'expressive';
84
+ /**
85
+ * Accent description for expressive synthesis.
86
+ * The more specific, the better — e.g. `'Southern American English'` or `'Received Pronunciation British'`.
87
+ * Omitted from the prompt when not set — the voice uses its natural default.
88
+ */
89
+ accent?: string;
90
+ /**
91
+ * Pacing description for expressive synthesis.
92
+ * Describes the overall speed and tempo — e.g. `'Measured and deliberate'` or `'Brisk and energetic'`.
93
+ */
94
+ pacing?: string;
95
+ } | {
96
+ name: ModelVoiceKey;
97
+ /**
98
+ * Integer seed included in the audio cache key. A different seed always forces
99
+ * regeneration. Consistent output is not guaranteed across all voice types.
100
+ */
101
+ seed?: number;
102
+ style?: never;
103
+ accent?: never;
104
+ /** Speaking rate for consistent synthesis. Valid range: 0.25 to 2. */
105
+ pacing?: number;
106
+ /** TTS model type — `modelTypes.expressive` or `modelTypes.consistent`. Defaults to `consistent`. */
107
+ modelType?: Exclude<ModelType, 'expressive'> | undefined;
108
+ };
109
+ export {};
110
+ //# sourceMappingURL=voiceConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voiceConfig.d.ts","sourceRoot":"","sources":["../../src/voiceConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,kBAAkB,EAClB,cAAc,EACd,SAAS,EACV,MAAM,aAAa,CAAA;AAEpB;;;;;;;;GAQG;AACH,KAAK,uBAAuB,GAAG;IAC7B,oFAAoF;IACpF,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,2FAA2F;IAC3F,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,uFAAuF;IACvF,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,uFAAuF;IACvF,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,4DAA4D;IAC5D,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B,CAAA;AAED,KAAK,qBAAqB,GAAG,uBAAuB,GAAG;IACrD,IAAI,EAAE,kBAAkB,GAAG,cAAc,CAAA;IACzC,SAAS,CAAC,EAAE,KAAK,CAAA;IACjB,MAAM,CAAC,EAAE,KAAK,CAAA;IACd,MAAM,CAAC,EAAE,KAAK,CAAA;CACf,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAC3B,qBAAqB,GACrB;IACE,IAAI,EAAE,aAAa,CAAA;IACnB,2GAA2G;IAC3G,KAAK,EAAE,MAAM,CAAA;IACb,wFAAwF;IACxF,SAAS,CAAC,EAAE,YAAY,CAAA;IACxB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,GACD;IACE,IAAI,EAAE,aAAa,CAAA;IACnB,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,MAAM,CAAC,EAAE,KAAK,CAAA;IACd,sEAAsE;IACtE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,qGAAqG;IACrG,SAAS,CAAC,EAAE,OAAO,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,SAAS,CAAA;CACzD,CAAA;AAEL;;;;;;;GAOG;AACH,MAAM,MAAM,qBAAqB,GAC7B,CAAC,qBAAqB,GAAG;IACvB;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,CAAC,GACF;IACE,IAAI,EAAE,aAAa,CAAA;IACnB;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,2GAA2G;IAC3G,KAAK,EAAE,MAAM,CAAA;IACb,wFAAwF;IACxF,SAAS,CAAC,EAAE,YAAY,CAAA;IACxB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,GACD;IACE,IAAI,EAAE,aAAa,CAAA;IACnB;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,MAAM,CAAC,EAAE,KAAK,CAAA;IACd,sEAAsE;IACtE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,qGAAqG;IACrG,SAAS,CAAC,EAAE,OAAO,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,SAAS,CAAA;CACzD,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=voiceConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voiceConfig.js","sourceRoot":"","sources":["../../src/voiceConfig.ts"],"names":[],"mappings":""}