@argo-video/cli 0.9.0 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +35 -34
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +25 -1
- package/dist/cli.js.map +1 -1
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +29 -47
- package/dist/init.js.map +1 -1
- package/dist/overlays/index.d.ts +7 -2
- package/dist/overlays/index.d.ts.map +1 -1
- package/dist/overlays/index.js +49 -4
- package/dist/overlays/index.js.map +1 -1
- package/dist/overlays/manifest-loader.d.ts +4 -0
- package/dist/overlays/manifest-loader.d.ts.map +1 -0
- package/dist/overlays/manifest-loader.js +22 -0
- package/dist/overlays/manifest-loader.js.map +1 -0
- package/dist/overlays/manifest.d.ts.map +1 -1
- package/dist/overlays/manifest.js +4 -19
- package/dist/overlays/manifest.js.map +1 -1
- package/dist/overlays/types.d.ts +10 -0
- package/dist/overlays/types.d.ts.map +1 -1
- package/dist/overlays/types.js.map +1 -1
- package/dist/parse-playwright.d.ts +15 -0
- package/dist/parse-playwright.d.ts.map +1 -1
- package/dist/parse-playwright.js +17 -0
- package/dist/parse-playwright.js.map +1 -1
- package/dist/pipeline.d.ts.map +1 -1
- package/dist/pipeline.js +36 -3
- package/dist/pipeline.js.map +1 -1
- package/dist/preview.d.ts +29 -0
- package/dist/preview.d.ts.map +1 -0
- package/dist/preview.js +2137 -0
- package/dist/preview.js.map +1 -0
- package/dist/record.d.ts.map +1 -1
- package/dist/record.js +12 -4
- package/dist/record.js.map +1 -1
- package/dist/tts/engine.d.ts +8 -0
- package/dist/tts/engine.d.ts.map +1 -1
- package/dist/tts/engine.js.map +1 -1
- package/dist/tts/engines/elevenlabs.d.ts +2 -1
- package/dist/tts/engines/elevenlabs.d.ts.map +1 -1
- package/dist/tts/engines/elevenlabs.js +6 -3
- package/dist/tts/engines/elevenlabs.js.map +1 -1
- package/dist/tts/engines/gemini.d.ts +2 -1
- package/dist/tts/engines/gemini.d.ts.map +1 -1
- package/dist/tts/engines/gemini.js +3 -0
- package/dist/tts/engines/gemini.js.map +1 -1
- package/dist/tts/engines/kokoro.d.ts +2 -1
- package/dist/tts/engines/kokoro.d.ts.map +1 -1
- package/dist/tts/engines/kokoro.js +3 -0
- package/dist/tts/engines/kokoro.js.map +1 -1
- package/dist/tts/engines/mlx-audio.d.ts +2 -1
- package/dist/tts/engines/mlx-audio.d.ts.map +1 -1
- package/dist/tts/engines/mlx-audio.js +6 -0
- package/dist/tts/engines/mlx-audio.js.map +1 -1
- package/dist/tts/engines/openai.d.ts +7 -2
- package/dist/tts/engines/openai.d.ts.map +1 -1
- package/dist/tts/engines/openai.js +13 -2
- package/dist/tts/engines/openai.js.map +1 -1
- package/dist/tts/engines/sarvam.d.ts +2 -1
- package/dist/tts/engines/sarvam.d.ts.map +1 -1
- package/dist/tts/engines/sarvam.js +3 -0
- package/dist/tts/engines/sarvam.js.map +1 -1
- package/dist/tts/generate.d.ts.map +1 -1
- package/dist/tts/generate.js +16 -11
- package/dist/tts/generate.js.map +1 -1
- package/dist/validate.d.ts.map +1 -1
- package/dist/validate.js +36 -54
- package/dist/validate.js.map +1 -1
- package/package.json +3 -3
- package/scripts/setup-mlx-audio.sh +1 -1
- package/scripts/voice-clone-preview.sh +1 -1
package/README.md
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
|
|
16
16
|
**Turn Playwright demo scripts into polished product demo videos with AI voiceover.**
|
|
17
17
|
|
|
18
|
-
Write a demo script with Playwright. Add a
|
|
18
|
+
Write a demo script with Playwright. Add a scenes manifest. Run one command. Get an MP4 with overlays and narration.
|
|
19
19
|
|
|
20
20
|
## Showcase
|
|
21
21
|
|
|
@@ -35,7 +35,7 @@ https://gist.github.com/user-attachments/assets/ba009e90-0310-454b-833e-e0d71d4d
|
|
|
35
35
|
clips scene marks audio
|
|
36
36
|
│ │
|
|
37
37
|
▼ ▼
|
|
38
|
-
.
|
|
38
|
+
.scenes.json → narration-aligned.wav → final.mp4
|
|
39
39
|
```
|
|
40
40
|
|
|
41
41
|
## Quick start
|
|
@@ -56,13 +56,13 @@ npx argo pipeline example
|
|
|
56
56
|
|
|
57
57
|
# Or run steps individually
|
|
58
58
|
npx argo record example
|
|
59
|
-
npx argo tts generate demos/example.
|
|
59
|
+
npx argo tts generate demos/example.scenes.json
|
|
60
60
|
npx argo export example
|
|
61
61
|
```
|
|
62
62
|
|
|
63
63
|
## Writing a demo
|
|
64
64
|
|
|
65
|
-
A demo is two files: a **script** and a **
|
|
65
|
+
A demo is two files: a **script** and a **scenes manifest**.
|
|
66
66
|
|
|
67
67
|
### Demo script (`demos/my-feature.demo.ts`)
|
|
68
68
|
|
|
@@ -74,46 +74,43 @@ test('my-feature', async ({ page, narration }) => {
|
|
|
74
74
|
await page.goto('/');
|
|
75
75
|
|
|
76
76
|
narration.mark('intro');
|
|
77
|
-
await showOverlay(page, 'intro',
|
|
78
|
-
type: 'lower-third',
|
|
79
|
-
text: 'Welcome to our product',
|
|
80
|
-
placement: 'bottom-center',
|
|
81
|
-
motion: 'fade-in',
|
|
82
|
-
autoBackground: true,
|
|
83
|
-
}, narration.durationFor('intro'));
|
|
77
|
+
await showOverlay(page, 'intro', narration.durationFor('intro'));
|
|
84
78
|
|
|
85
79
|
narration.mark('action');
|
|
86
|
-
await withOverlay(page, 'action', {
|
|
87
|
-
type: 'headline-card',
|
|
88
|
-
title: 'Watch this',
|
|
89
|
-
placement: 'top-right',
|
|
90
|
-
motion: 'slide-in',
|
|
91
|
-
}, async () => {
|
|
80
|
+
await withOverlay(page, 'action', async () => {
|
|
92
81
|
await page.click('#get-started');
|
|
93
82
|
await page.waitForTimeout(narration.durationFor('action'));
|
|
94
83
|
});
|
|
95
84
|
|
|
96
85
|
narration.mark('done');
|
|
97
|
-
await showOverlay(page, 'done',
|
|
98
|
-
type: 'callout',
|
|
99
|
-
text: "That's it!",
|
|
100
|
-
placement: 'top-left',
|
|
101
|
-
motion: 'fade-in',
|
|
102
|
-
}, narration.durationFor('done'));
|
|
86
|
+
await showOverlay(page, 'done', narration.durationFor('done'));
|
|
103
87
|
});
|
|
104
88
|
```
|
|
105
89
|
|
|
106
|
-
###
|
|
90
|
+
### Scenes manifest (`demos/my-feature.scenes.json`)
|
|
107
91
|
|
|
108
92
|
```json
|
|
109
93
|
[
|
|
110
|
-
{
|
|
111
|
-
|
|
112
|
-
|
|
94
|
+
{
|
|
95
|
+
"scene": "intro",
|
|
96
|
+
"text": "Welcome to our product — let me show you around.",
|
|
97
|
+
"overlay": { "type": "lower-third", "text": "Welcome to our product", "placement": "bottom-center", "motion": "fade-in", "autoBackground": true }
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
"scene": "action",
|
|
101
|
+
"text": "Just click get started and you're off.",
|
|
102
|
+
"overlay": { "type": "headline-card", "title": "Watch this", "placement": "top-right", "motion": "slide-in" }
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
"scene": "done",
|
|
106
|
+
"text": "And that's all there is to it.",
|
|
107
|
+
"voice": "af_heart",
|
|
108
|
+
"overlay": { "type": "callout", "text": "That's it!", "placement": "top-left", "motion": "fade-in" }
|
|
109
|
+
}
|
|
113
110
|
]
|
|
114
111
|
```
|
|
115
112
|
|
|
116
|
-
Each `scene` in the manifest maps to a `narration.mark()` call in the script. Argo records the timestamp of each mark, generates TTS clips, and aligns them to produce the final narrated video.
|
|
113
|
+
Each `scene` in the manifest maps to a `narration.mark()` call in the script. The `text` field is spoken narration; the optional `overlay` sub-object defines what appears on screen. Argo records the timestamp of each mark, generates TTS clips, and aligns them to produce the final narrated video.
|
|
117
114
|
|
|
118
115
|
## Configuration
|
|
119
116
|
|
|
@@ -181,6 +178,7 @@ argo tts generate <manifest> Generate TTS clips from manifest
|
|
|
181
178
|
argo export <demo> Merge video + audio to MP4
|
|
182
179
|
argo pipeline <demo> Run all steps end-to-end
|
|
183
180
|
argo validate <demo> Check scene name consistency (no TTS/recording)
|
|
181
|
+
argo preview <demo> Browser-based editor for voiceover, overlays, timing
|
|
184
182
|
argo doctor Check environment (ffmpeg, Playwright, config)
|
|
185
183
|
argo --config <path> <command> Use a custom config file
|
|
186
184
|
|
|
@@ -188,6 +186,7 @@ Options:
|
|
|
188
186
|
--browser <engine> chromium | webkit | firefox (overrides config)
|
|
189
187
|
--base-url <url> Override baseURL from config
|
|
190
188
|
--headed Run browser in visible mode
|
|
189
|
+
--port <number> Preview server port (default: auto)
|
|
191
190
|
```
|
|
192
191
|
|
|
193
192
|
## API
|
|
@@ -208,8 +207,10 @@ import { defineConfig, demosProject, engines } from '@argo-video/cli';
|
|
|
208
207
|
| `test` | Playwright `test` with `narration` fixture injected |
|
|
209
208
|
| `expect` | Re-exported from Playwright |
|
|
210
209
|
| `demoType(page, selectorOrLocator, text, delay?)` | Type character-by-character — accepts CSS selector or Playwright Locator |
|
|
211
|
-
| `showOverlay(page, scene,
|
|
212
|
-
| `
|
|
210
|
+
| `showOverlay(page, scene, durationMs)` | Show overlay from manifest for a fixed duration |
|
|
211
|
+
| `showOverlay(page, scene, cue, durationMs)` | Show overlay with inline cue (backward compat) |
|
|
212
|
+
| `withOverlay(page, scene, action)` | Show overlay from manifest during an async action |
|
|
213
|
+
| `withOverlay(page, scene, cue, action)` | Show overlay with inline cue during action (backward compat) |
|
|
213
214
|
| `hideOverlay(page, zone?)` | Remove overlay from a zone |
|
|
214
215
|
| `showConfetti(page, opts?)` | Non-blocking confetti animation (`spread: 'burst' \| 'rain'`, `wait: true` to block) |
|
|
215
216
|
| `spotlight(page, selector, opts?)` | Dark overlay with hole around target element |
|
|
@@ -240,7 +241,7 @@ choco install ffmpeg # Windows
|
|
|
240
241
|
|
|
241
242
|
## How the pipeline works
|
|
242
243
|
|
|
243
|
-
1. **TTS** — Generates WAV clips from the
|
|
244
|
+
1. **TTS** — Generates WAV clips from the scenes manifest. Kokoro is the default (local, free), but you can swap in OpenAI, ElevenLabs, Gemini, Sarvam, or mlx-audio via `engines.*` factories. Clips are cached by content hash in `.argo/<demo>/clips/`.
|
|
244
245
|
|
|
245
246
|
```js
|
|
246
247
|
import { defineConfig, engines } from '@argo-video/cli';
|
|
@@ -254,7 +255,7 @@ choco install ffmpeg # Windows
|
|
|
254
255
|
| `engines.kokoro()` | local | built-in | none |
|
|
255
256
|
| `engines.mlxAudio()` | local | `pip install mlx-audio` | none |
|
|
256
257
|
| `engines.openai()` | cloud | `npm i openai` | `OPENAI_API_KEY` |
|
|
257
|
-
| `engines.elevenlabs()` | cloud | `npm i elevenlabs` | `ELEVENLABS_API_KEY` |
|
|
258
|
+
| `engines.elevenlabs()` | cloud | `npm i @elevenlabs/elevenlabs-js` | `ELEVENLABS_API_KEY` |
|
|
258
259
|
| `engines.gemini()` | cloud | `npm i @google/genai` | `GEMINI_API_KEY` |
|
|
259
260
|
| `engines.sarvam()` | cloud | `npm i sarvamai` | `SARVAM_API_KEY` |
|
|
260
261
|
|
|
@@ -268,7 +269,7 @@ choco install ffmpeg # Windows
|
|
|
268
269
|
bash $(npm root)/@argo-video/cli/scripts/voice-clone-preview.sh \
|
|
269
270
|
--ref-audio assets/ref-voice.wav \
|
|
270
271
|
--ref-text "Transcript of what I said." \
|
|
271
|
-
--voiceover demos/showcase.
|
|
272
|
+
--voiceover demos/showcase.scenes.json --play
|
|
272
273
|
```
|
|
273
274
|
|
|
274
275
|
```js
|
|
@@ -306,7 +307,7 @@ Argo ships as a **Claude Code skill** so LLMs can create demo videos autonomousl
|
|
|
306
307
|
/plugin marketplace add shreyaskarnik/argo
|
|
307
308
|
```
|
|
308
309
|
|
|
309
|
-
The skill teaches Claude how to write demo scripts,
|
|
310
|
+
The skill teaches Claude how to write demo scripts, scenes manifests, overlay cues, and run the pipeline — no manual guidance needed.
|
|
310
311
|
|
|
311
312
|
## License
|
|
312
313
|
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AA6B5C,wBAAgB,aAAa,IAAI,OAAO,CAyKvC"}
|
package/dist/cli.js
CHANGED
|
@@ -6,6 +6,7 @@ import { generateClips } from './tts/generate.js';
|
|
|
6
6
|
import { exportVideo } from './export.js';
|
|
7
7
|
import { runPipeline } from './pipeline.js';
|
|
8
8
|
import { init, initFrom } from './init.js';
|
|
9
|
+
import { startPreviewServer } from './preview.js';
|
|
9
10
|
import { validateDemo } from './validate.js';
|
|
10
11
|
import { runDoctor, formatDoctorResults } from './doctor.js';
|
|
11
12
|
function validateDemoName(name) {
|
|
@@ -64,7 +65,7 @@ export function createProgram() {
|
|
|
64
65
|
const config = await ensureTTSEngine(await loadConfig(process.cwd(), configPath));
|
|
65
66
|
await generateClips({
|
|
66
67
|
manifestPath: manifest,
|
|
67
|
-
demoName: basename(manifest).replace(/\.voiceover\.json$/, '').replace(/\.json$/, ''),
|
|
68
|
+
demoName: basename(manifest).replace(/\.scenes\.json$/, '').replace(/\.voiceover\.json$/, '').replace(/\.json$/, ''),
|
|
68
69
|
engine: config.tts.engine,
|
|
69
70
|
projectRoot: '.',
|
|
70
71
|
defaults: { voice: config.tts.defaultVoice, speed: config.tts.defaultSpeed },
|
|
@@ -143,6 +144,29 @@ export function createProgram() {
|
|
|
143
144
|
if (fails > 0)
|
|
144
145
|
process.exitCode = 1;
|
|
145
146
|
});
|
|
147
|
+
program
|
|
148
|
+
.command('preview <demo>')
|
|
149
|
+
.description('Start a browser-based preview server to tweak voiceover, overlays, and timing without re-recording')
|
|
150
|
+
.option('--port <number>', 'server port (default: auto)', parseInt)
|
|
151
|
+
.action(async (demo, cmdOpts) => {
|
|
152
|
+
validateDemoName(demo);
|
|
153
|
+
const configPath = program.opts().config;
|
|
154
|
+
const config = await loadConfig(process.cwd(), configPath);
|
|
155
|
+
const { url } = await startPreviewServer({
|
|
156
|
+
demoName: demo,
|
|
157
|
+
argoDir: '.argo',
|
|
158
|
+
demosDir: config.demosDir,
|
|
159
|
+
port: cmdOpts.port,
|
|
160
|
+
ttsDefaults: {
|
|
161
|
+
voice: config.tts.defaultVoice,
|
|
162
|
+
speed: config.tts.defaultSpeed,
|
|
163
|
+
},
|
|
164
|
+
});
|
|
165
|
+
console.log(`\nArgo Preview running at: ${url}`);
|
|
166
|
+
console.log('Press Ctrl+C to stop.\n');
|
|
167
|
+
// Keep process alive
|
|
168
|
+
await new Promise(() => { });
|
|
169
|
+
});
|
|
146
170
|
program
|
|
147
171
|
.command('init')
|
|
148
172
|
.description('Initialize a new Argo project')
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/init.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAiIA,wBAAsB,IAAI,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAarE;AAED,MAAM,WAAW,eAAe;IAC9B,mDAAmD;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,kEAAkE;IAClE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oDAAoD;IACpD,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;;;GAKG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAsDtE"}
|
package/dist/init.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { mkdir, writeFile, readFile, access } from 'node:fs/promises';
|
|
2
2
|
import { join, basename } from 'node:path';
|
|
3
|
-
import { parsePlaywrightTest, generateDemoScript,
|
|
3
|
+
import { parsePlaywrightTest, generateDemoScript, generateScenesSkeleton, } from './parse-playwright.js';
|
|
4
4
|
async function writeIfMissing(filePath, content) {
|
|
5
5
|
try {
|
|
6
6
|
await access(filePath);
|
|
@@ -23,52 +23,40 @@ test('example', async ({ page, narration }) => {
|
|
|
23
23
|
await page.goto('/');
|
|
24
24
|
|
|
25
25
|
narration.mark('welcome');
|
|
26
|
-
await showOverlay(page, 'welcome',
|
|
27
|
-
type: 'lower-third',
|
|
28
|
-
text: 'Welcome to our app',
|
|
29
|
-
motion: 'fade-in',
|
|
30
|
-
autoBackground: true,
|
|
31
|
-
}, narration.durationFor('welcome'));
|
|
26
|
+
await showOverlay(page, 'welcome', narration.durationFor('welcome'));
|
|
32
27
|
|
|
33
28
|
narration.mark('action');
|
|
34
|
-
await withOverlay(page, 'action', {
|
|
35
|
-
type: 'headline-card',
|
|
36
|
-
title: 'Watch this',
|
|
37
|
-
placement: 'top-right',
|
|
38
|
-
motion: 'slide-in',
|
|
39
|
-
autoBackground: true,
|
|
40
|
-
}, async () => {
|
|
29
|
+
await withOverlay(page, 'action', async () => {
|
|
41
30
|
await page.click('button');
|
|
42
31
|
await page.waitForTimeout(narration.durationFor('action'));
|
|
43
32
|
});
|
|
44
33
|
|
|
45
34
|
narration.mark('done');
|
|
46
|
-
await showOverlay(page, 'done',
|
|
47
|
-
type: 'callout',
|
|
48
|
-
text: 'All done!',
|
|
49
|
-
motion: 'fade-in',
|
|
50
|
-
autoBackground: true,
|
|
51
|
-
}, narration.durationFor('done'));
|
|
35
|
+
await showOverlay(page, 'done', narration.durationFor('done'));
|
|
52
36
|
});
|
|
53
37
|
`;
|
|
54
|
-
const
|
|
55
|
-
{ scene: 'welcome', text: 'Welcome to our app — let me show you around.' },
|
|
56
|
-
{ scene: 'action', text: 'It only takes one click to get started.' },
|
|
57
|
-
{ scene: 'done', text: "And that's it. You're all set.", voice: 'af_heart' },
|
|
58
|
-
], null, 2) + '\n';
|
|
59
|
-
const EXAMPLE_OVERLAYS = JSON.stringify([
|
|
38
|
+
const EXAMPLE_SCENES = JSON.stringify([
|
|
60
39
|
{
|
|
61
40
|
scene: 'welcome',
|
|
62
|
-
|
|
63
|
-
text: 'Welcome to our app',
|
|
41
|
+
text: 'Welcome to our app — let me show you around.',
|
|
42
|
+
overlay: { type: 'lower-third', text: 'Welcome to our app', motion: 'fade-in' },
|
|
64
43
|
},
|
|
65
44
|
{
|
|
66
45
|
scene: 'action',
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
46
|
+
text: 'It only takes one click to get started.',
|
|
47
|
+
voice: 'af_heart',
|
|
48
|
+
overlay: {
|
|
49
|
+
type: 'headline-card',
|
|
50
|
+
title: 'One-click setup',
|
|
51
|
+
body: 'Just press the button to get started.',
|
|
52
|
+
placement: 'top-left',
|
|
53
|
+
motion: 'slide-in',
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
scene: 'done',
|
|
58
|
+
text: "And that's it. You're all set.",
|
|
59
|
+
voice: 'af_heart',
|
|
72
60
|
},
|
|
73
61
|
], null, 2) + '\n';
|
|
74
62
|
const ARGO_CONFIG = `import { defineConfig } from '@argo-video/cli';
|
|
@@ -130,8 +118,7 @@ export async function init(cwd = process.cwd()) {
|
|
|
130
118
|
const demosDir = join(cwd, 'demos');
|
|
131
119
|
await mkdir(demosDir, { recursive: true });
|
|
132
120
|
await writeIfMissing(join(demosDir, 'example.demo.ts'), EXAMPLE_DEMO);
|
|
133
|
-
await writeIfMissing(join(demosDir, 'example.
|
|
134
|
-
await writeIfMissing(join(demosDir, 'example.overlays.json'), EXAMPLE_OVERLAYS);
|
|
121
|
+
await writeIfMissing(join(demosDir, 'example.scenes.json'), EXAMPLE_SCENES);
|
|
135
122
|
await writeIfMissing(join(cwd, 'argo.config.mjs'), ARGO_CONFIG);
|
|
136
123
|
await writeIfMissing(join(cwd, 'playwright.config.ts'), PLAYWRIGHT_CONFIG);
|
|
137
124
|
console.log('\nArgo initialized! Next steps:');
|
|
@@ -171,24 +158,19 @@ export async function initFrom(options) {
|
|
|
171
158
|
// Generate demo script
|
|
172
159
|
const demoScript = generateDemoScript(parsed);
|
|
173
160
|
await writeIfMissing(join(demosDir, `${demoName}.demo.ts`), demoScript);
|
|
174
|
-
// Generate
|
|
175
|
-
const
|
|
176
|
-
const
|
|
177
|
-
await writeIfMissing(join(demosDir, `${demoName}.
|
|
178
|
-
// Generate overlays skeleton
|
|
179
|
-
const overlays = generateOverlaysSkeleton(parsed);
|
|
180
|
-
const overlaysJson = JSON.stringify(overlays, null, 2) + '\n';
|
|
181
|
-
await writeIfMissing(join(demosDir, `${demoName}.overlays.json`), overlaysJson);
|
|
161
|
+
// Generate unified scenes skeleton with hints
|
|
162
|
+
const scenes = generateScenesSkeleton(parsed);
|
|
163
|
+
const scenesJson = JSON.stringify(scenes, null, 2) + '\n';
|
|
164
|
+
await writeIfMissing(join(demosDir, `${demoName}.scenes.json`), scenesJson);
|
|
182
165
|
// Scaffold config files if they don't exist
|
|
183
166
|
await writeIfMissing(join(cwd, 'argo.config.mjs'), ARGO_CONFIG);
|
|
184
167
|
await writeIfMissing(join(cwd, 'playwright.config.ts'), PLAYWRIGHT_CONFIG);
|
|
185
168
|
console.log(`\nConverted ${options.from} → ${demoName} (${parsed.scenes.length} scenes)`);
|
|
186
169
|
console.log('\nNext steps:');
|
|
187
|
-
console.log(` 1. Fill in
|
|
170
|
+
console.log(` 1. Fill in scenes manifest: demos/${demoName}.scenes.json`);
|
|
188
171
|
console.log(` (use _hint fields as context, then remove them)`);
|
|
189
|
-
console.log(` 2.
|
|
190
|
-
console.log(
|
|
191
|
-
console.log(`\nTip: Ask your LLM to "flesh out the voiceover for ${demoName}" — it can`);
|
|
172
|
+
console.log(` 2. Run: npx argo pipeline ${demoName}`);
|
|
173
|
+
console.log(`\nTip: Ask your LLM to "flesh out the scenes for ${demoName}" — it can`);
|
|
192
174
|
console.log('read the _hint fields and write natural narration text for each scene.');
|
|
193
175
|
}
|
|
194
176
|
//# sourceMappingURL=init.js.map
|
package/dist/init.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"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"}
|
package/dist/overlays/index.d.ts
CHANGED
|
@@ -1,13 +1,18 @@
|
|
|
1
1
|
import type { Page } from '@playwright/test';
|
|
2
2
|
import type { OverlayCue, Zone } from './types.js';
|
|
3
3
|
export type { OverlayCue, OverlayManifestEntry, Zone, TemplateType, MotionPreset } from './types.js';
|
|
4
|
+
export type { SceneEntry } from './types.js';
|
|
4
5
|
export { renderTemplate } from './templates.js';
|
|
5
6
|
export type { BackgroundTheme } from './zones.js';
|
|
6
|
-
export
|
|
7
|
+
export { resetManifestCache } from './manifest-loader.js';
|
|
8
|
+
export declare function resolveCue(scene: string, cueOrPartial?: OverlayCue | Partial<OverlayCue>): OverlayCue;
|
|
9
|
+
export declare function showOverlay(page: Page, scene: string, durationMs: number): Promise<void>;
|
|
10
|
+
export declare function showOverlay(page: Page, scene: string, cue: OverlayCue | Partial<OverlayCue>, durationMs: number, options?: {
|
|
7
11
|
autoBackground?: boolean;
|
|
8
12
|
}): Promise<void>;
|
|
9
13
|
export declare function hideOverlay(page: Page, zone?: Zone): Promise<void>;
|
|
10
|
-
export declare function withOverlay(page: Page,
|
|
14
|
+
export declare function withOverlay(page: Page, scene: string, action: () => Promise<void>): Promise<void>;
|
|
15
|
+
export declare function withOverlay(page: Page, scene: string, cue: OverlayCue | Partial<OverlayCue>, action: () => Promise<void>, options?: {
|
|
11
16
|
autoBackground?: boolean;
|
|
12
17
|
}): Promise<void>;
|
|
13
18
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/overlays/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/overlays/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAOnD,YAAY,EAAE,UAAU,EAAE,oBAAoB,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACrG,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAyB1D,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,UAAU,CAcrG;AAGD,wBAAsB,WAAW,CAC/B,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAAC;AACjB,wBAAsB,WAAW,CAC/B,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,EACrC,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE;IAAE,cAAc,CAAC,EAAE,OAAO,CAAA;CAAE,GACrC,OAAO,CAAC,IAAI,CAAC,CAAC;AAqCjB,wBAAsB,WAAW,CAC/B,IAAI,EAAE,IAAI,EACV,IAAI,GAAE,IAAsB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAEf;AAGD,wBAAsB,WAAW,CAC/B,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAC1B,OAAO,CAAC,IAAI,CAAC,CAAC;AACjB,wBAAsB,WAAW,CAC/B,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,EACrC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EAC3B,OAAO,CAAC,EAAE;IAAE,cAAc,CAAC,EAAE,OAAO,CAAA;CAAE,GACrC,OAAO,CAAC,IAAI,CAAC,CAAC"}
|
package/dist/overlays/index.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { injectIntoZone, removeZone, ZONE_ID_PREFIX, detectBackgroundTheme } from './zones.js';
|
|
2
2
|
import { renderTemplate } from './templates.js';
|
|
3
3
|
import { getMotionCSS, getMotionStyles } from './motion.js';
|
|
4
|
+
import { loadOverlayFromManifest } from './manifest-loader.js';
|
|
4
5
|
export { renderTemplate } from './templates.js';
|
|
6
|
+
export { resetManifestCache } from './manifest-loader.js';
|
|
5
7
|
function getConfigAutoBackground() {
|
|
6
8
|
return process.env.ARGO_AUTO_BACKGROUND === '1';
|
|
7
9
|
}
|
|
@@ -18,10 +20,38 @@ async function resolveTheme(page, cue, zone, optionsAutoBackground) {
|
|
|
18
20
|
return 'dark';
|
|
19
21
|
return detectBackgroundTheme(page, zone);
|
|
20
22
|
}
|
|
21
|
-
export
|
|
23
|
+
export function resolveCue(scene, cueOrPartial) {
|
|
24
|
+
const manifestCue = loadOverlayFromManifest(scene);
|
|
25
|
+
if (cueOrPartial && 'type' in cueOrPartial && cueOrPartial.type) {
|
|
26
|
+
// Full inline cue — merge with manifest if available
|
|
27
|
+
return manifestCue ? { ...manifestCue, ...cueOrPartial } : cueOrPartial;
|
|
28
|
+
}
|
|
29
|
+
if (manifestCue) {
|
|
30
|
+
// Manifest cue with optional overrides
|
|
31
|
+
return cueOrPartial ? { ...manifestCue, ...cueOrPartial } : manifestCue;
|
|
32
|
+
}
|
|
33
|
+
throw new Error(`No overlay found for scene "${scene}". ` +
|
|
34
|
+
`Either add an overlay entry in your .scenes.json manifest, or pass an inline cue.`);
|
|
35
|
+
}
|
|
36
|
+
export async function showOverlay(page, scene, cueOrDuration, durationMsOrOptions, options) {
|
|
37
|
+
let cue;
|
|
38
|
+
let durationMs;
|
|
39
|
+
let opts;
|
|
40
|
+
if (typeof cueOrDuration === 'number') {
|
|
41
|
+
// showOverlay(page, scene, durationMs)
|
|
42
|
+
cue = resolveCue(scene);
|
|
43
|
+
durationMs = cueOrDuration;
|
|
44
|
+
opts = undefined;
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
// showOverlay(page, scene, cue, durationMs, options?)
|
|
48
|
+
cue = resolveCue(scene, cueOrDuration);
|
|
49
|
+
durationMs = durationMsOrOptions;
|
|
50
|
+
opts = options;
|
|
51
|
+
}
|
|
22
52
|
const zone = cue.placement ?? getConfigDefaultPlacement() ?? 'bottom-center';
|
|
23
53
|
const motion = cue.motion ?? 'none';
|
|
24
|
-
const theme = await resolveTheme(page, cue, zone,
|
|
54
|
+
const theme = await resolveTheme(page, cue, zone, opts?.autoBackground);
|
|
25
55
|
const { contentHtml, styles } = renderTemplate(cue, theme);
|
|
26
56
|
const zoneId = ZONE_ID_PREFIX + zone;
|
|
27
57
|
const motionCSS = getMotionCSS(motion, zoneId);
|
|
@@ -33,10 +63,25 @@ export async function showOverlay(page, _scene, cue, durationMs, options) {
|
|
|
33
63
|
export async function hideOverlay(page, zone = 'bottom-center') {
|
|
34
64
|
await removeZone(page, zone);
|
|
35
65
|
}
|
|
36
|
-
export async function withOverlay(page,
|
|
66
|
+
export async function withOverlay(page, scene, cueOrAction, actionOrOptions, options) {
|
|
67
|
+
let cue;
|
|
68
|
+
let action;
|
|
69
|
+
let opts;
|
|
70
|
+
if (typeof cueOrAction === 'function') {
|
|
71
|
+
// withOverlay(page, scene, action)
|
|
72
|
+
cue = resolveCue(scene);
|
|
73
|
+
action = cueOrAction;
|
|
74
|
+
opts = undefined;
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
// withOverlay(page, scene, cue, action, options?)
|
|
78
|
+
cue = resolveCue(scene, cueOrAction);
|
|
79
|
+
action = actionOrOptions;
|
|
80
|
+
opts = options;
|
|
81
|
+
}
|
|
37
82
|
const zone = cue.placement ?? getConfigDefaultPlacement() ?? 'bottom-center';
|
|
38
83
|
const motion = cue.motion ?? 'none';
|
|
39
|
-
const theme = await resolveTheme(page, cue, zone,
|
|
84
|
+
const theme = await resolveTheme(page, cue, zone, opts?.autoBackground);
|
|
40
85
|
const { contentHtml, styles } = renderTemplate(cue, theme);
|
|
41
86
|
const zoneId = ZONE_ID_PREFIX + zone;
|
|
42
87
|
const motionCSS = getMotionCSS(motion, zoneId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/overlays/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAE/F,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/overlays/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest-loader.d.ts","sourceRoot":"","sources":["../../src/overlays/manifest-loader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAc,MAAM,YAAY,CAAC;AAIzD,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AAUD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAK7E"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { readFileSync, existsSync } from 'node:fs';
|
|
2
|
+
let cachedManifest = null;
|
|
3
|
+
export function resetManifestCache() {
|
|
4
|
+
cachedManifest = null;
|
|
5
|
+
}
|
|
6
|
+
function getManifest() {
|
|
7
|
+
if (cachedManifest !== null)
|
|
8
|
+
return cachedManifest;
|
|
9
|
+
const manifestPath = process.env.ARGO_OVERLAYS_PATH;
|
|
10
|
+
if (!manifestPath || !existsSync(manifestPath))
|
|
11
|
+
return null;
|
|
12
|
+
cachedManifest = JSON.parse(readFileSync(manifestPath, 'utf-8'));
|
|
13
|
+
return cachedManifest;
|
|
14
|
+
}
|
|
15
|
+
export function loadOverlayFromManifest(scene) {
|
|
16
|
+
const manifest = getManifest();
|
|
17
|
+
if (!manifest)
|
|
18
|
+
return undefined;
|
|
19
|
+
const entry = manifest.find((e) => e.scene === scene);
|
|
20
|
+
return entry?.overlay;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=manifest-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest-loader.js","sourceRoot":"","sources":["../../src/overlays/manifest-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAGnD,IAAI,cAAc,GAAwB,IAAI,CAAC;AAE/C,MAAM,UAAU,kBAAkB;IAChC,cAAc,GAAG,IAAI,CAAC;AACxB,CAAC;AAED,SAAS,WAAW;IAClB,IAAI,cAAc,KAAK,IAAI;QAAE,OAAO,cAAc,CAAC;IACnD,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;IACpD,IAAI,CAAC,YAAY,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5D,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAiB,CAAC;IACjF,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAAa;IACnD,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,IAAI,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChC,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;IACtD,OAAO,KAAK,EAAE,OAAO,CAAC;AACxB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/overlays/manifest.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/overlays/manifest.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAc,MAAM,YAAY,CAAC;AAEnE,wBAAsB,mBAAmB,CACvC,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,oBAAoB,EAAE,GAAG,IAAI,CAAC,CA2BxC;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,oBAAoB,EAAE,GAAG,OAAO,CAEvE;AAED,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,oBAAoB,EAAE,EAC/B,YAAY,EAAE,MAAM,GACnB,oBAAoB,EAAE,CAOxB"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { readFile } from 'node:fs/promises';
|
|
2
2
|
import { existsSync } from 'node:fs';
|
|
3
|
-
import { isValidTemplateType, isValidZone, isValidMotion } from './types.js';
|
|
4
3
|
export async function loadOverlayManifest(manifestPath) {
|
|
5
4
|
if (!existsSync(manifestPath))
|
|
6
5
|
return null;
|
|
@@ -15,26 +14,12 @@ export async function loadOverlayManifest(manifestPath) {
|
|
|
15
14
|
if (!Array.isArray(parsed)) {
|
|
16
15
|
throw new Error(`Overlay manifest ${manifestPath} must contain a JSON array`);
|
|
17
16
|
}
|
|
17
|
+
// Extract overlay entries from unified .scenes.json format (overlay nested under entry.overlay)
|
|
18
18
|
const entries = [];
|
|
19
|
-
for (
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
if (!entry.scene || typeof entry.scene !== 'string') {
|
|
23
|
-
throw new Error(`${prefix}: missing required field "scene"`);
|
|
19
|
+
for (const entry of parsed) {
|
|
20
|
+
if (entry.overlay && entry.scene) {
|
|
21
|
+
entries.push({ ...entry.overlay, scene: entry.scene });
|
|
24
22
|
}
|
|
25
|
-
if (!entry.type || typeof entry.type !== 'string') {
|
|
26
|
-
throw new Error(`${prefix}: missing required field "type"`);
|
|
27
|
-
}
|
|
28
|
-
if (!isValidTemplateType(entry.type)) {
|
|
29
|
-
throw new Error(`${prefix}: unknown overlay type "${entry.type}"`);
|
|
30
|
-
}
|
|
31
|
-
if (entry.placement && !isValidZone(entry.placement)) {
|
|
32
|
-
throw new Error(`${prefix}: unknown placement "${entry.placement}"`);
|
|
33
|
-
}
|
|
34
|
-
if (entry.motion && !isValidMotion(entry.motion)) {
|
|
35
|
-
throw new Error(`${prefix}: unknown motion "${entry.motion}"`);
|
|
36
|
-
}
|
|
37
|
-
entries.push(entry);
|
|
38
23
|
}
|
|
39
24
|
return entries;
|
|
40
25
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/overlays/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/overlays/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAGrC,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,YAAoB;IAEpB,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;QAAE,OAAO,IAAI,CAAC;IAE3C,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAElD,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,oCAAoC,YAAY,KAAM,GAAa,CAAC,OAAO,EAAE,CAC9E,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,oBAAoB,YAAY,4BAA4B,CAAC,CAAC;IAChF,CAAC;IAED,gGAAgG;IAChG,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,KAAK,MAAM,KAAK,IAAI,MAAsB,EAAE,CAAC;QAC3C,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YACjC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAA0B,CAAC,CAAC;QACjF,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAA+B;IAC5D,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,OAA+B,EAC/B,YAAoB;IAEpB,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACvB,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAClE,OAAO,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,YAAY,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5E,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC,CAAC,CAAC;AACL,CAAC"}
|