recordable 0.2.0 → 0.4.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 +49 -18
- package/dist/actions.d.ts +4 -0
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +7 -5
- package/dist/actions.js.map +1 -1
- package/dist/audio/track.d.ts.map +1 -1
- package/dist/audio/track.js.map +1 -1
- package/dist/browser/cursor.d.ts +6 -0
- package/dist/browser/cursor.d.ts.map +1 -1
- package/dist/browser/cursor.js +24 -6
- package/dist/browser/cursor.js.map +1 -1
- package/dist/browser/dom.d.ts +33 -13
- package/dist/browser/dom.d.ts.map +1 -1
- package/dist/browser/dom.js +158 -56
- package/dist/browser/dom.js.map +1 -1
- package/dist/browser/page-zoom.d.ts +11 -0
- package/dist/browser/page-zoom.d.ts.map +1 -0
- package/dist/browser/page-zoom.js +37 -0
- package/dist/browser/page-zoom.js.map +1 -0
- package/dist/browser/play-button.d.ts.map +1 -1
- package/dist/browser/play-button.js.map +1 -1
- package/dist/browser/runtime.d.ts +21 -1
- package/dist/browser/runtime.d.ts.map +1 -1
- package/dist/browser/runtime.js +91 -4
- package/dist/browser/runtime.js.map +1 -1
- package/dist/browser/targets.d.ts +17 -0
- package/dist/browser/targets.d.ts.map +1 -0
- package/dist/browser/targets.js +42 -0
- package/dist/browser/targets.js.map +1 -0
- package/dist/compose/mix.d.ts.map +1 -1
- package/dist/compose/mix.js +1 -1
- package/dist/compose/mix.js.map +1 -1
- package/dist/compose/recordable.d.ts +13 -7
- package/dist/compose/recordable.d.ts.map +1 -1
- package/dist/compose/recordable.js +28 -13
- package/dist/compose/recordable.js.map +1 -1
- package/dist/compose/session.d.ts +16 -1
- package/dist/compose/session.d.ts.map +1 -1
- package/dist/compose/session.js +76 -18
- package/dist/compose/session.js.map +1 -1
- package/dist/config.d.ts +9 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +10 -0
- package/dist/config.js.map +1 -1
- package/dist/errors.d.ts +1 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js.map +1 -1
- package/dist/ffmpeg.d.ts +3 -0
- package/dist/ffmpeg.d.ts.map +1 -1
- package/dist/ffmpeg.js +14 -1
- package/dist/ffmpeg.js.map +1 -1
- package/dist/formats/markdown/method.d.ts.map +1 -1
- package/dist/formats/markdown/method.js +4 -3
- package/dist/formats/markdown/method.js.map +1 -1
- package/dist/formats/markdown/parse.d.ts.map +1 -1
- package/dist/formats/markdown/parse.js +11 -1
- package/dist/formats/markdown/parse.js.map +1 -1
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +3 -1
- package/dist/logger.js.map +1 -1
- package/dist/timing.d.ts +2 -0
- package/dist/timing.d.ts.map +1 -1
- package/dist/timing.js +10 -4
- package/dist/timing.js.map +1 -1
- package/dist/validate.d.ts.map +1 -1
- package/dist/validate.js +11 -10
- package/dist/validate.js.map +1 -1
- package/dist/video/recorder.d.ts +4 -1
- package/dist/video/recorder.d.ts.map +1 -1
- package/dist/video/recorder.js +20 -16
- package/dist/video/recorder.js.map +1 -1
- package/dist/video/stitch.js +3 -17
- package/dist/video/stitch.js.map +1 -1
- package/dist/voiceover/compile.d.ts.map +1 -1
- package/dist/voiceover/compile.js +42 -24
- package/dist/voiceover/compile.js.map +1 -1
- package/dist/voiceover/elevenlabs.d.ts.map +1 -1
- package/dist/voiceover/elevenlabs.js +41 -11
- package/dist/voiceover/elevenlabs.js.map +1 -1
- package/dist/voiceover/mock.d.ts.map +1 -1
- package/dist/voiceover/mock.js +38 -15
- package/dist/voiceover/mock.js.map +1 -1
- package/package.json +3 -1
- package/recordable.schema.json +12 -0
- package/dist/targets.d.ts +0 -6
- package/dist/targets.d.ts.map +0 -1
- package/dist/targets.js +0 -13
- package/dist/targets.js.map +0 -1
package/README.md
CHANGED
|
@@ -36,9 +36,12 @@ want on camera; every captured segment is stitched into one seamless MP4.
|
|
|
36
36
|
- **Animated cursor overlay** with realistic movement and click feedback.
|
|
37
37
|
- **Smooth zoom & scroll** that animate origin and scale together.
|
|
38
38
|
- **Human-like typing** with jitter and natural pauses.
|
|
39
|
-
- **Element targeting** by CSS selector or visible text (`
|
|
39
|
+
- **Element targeting** by full CSS selector or visible text — `:text(…)`
|
|
40
|
+
composes with CSS, e.g. `button:text(Save)`.
|
|
40
41
|
- **Off-camera segments** — `pause()`/`resume()` skip setup, navigations, or whole
|
|
41
42
|
screens; segments are auto-stitched into one seamless video.
|
|
43
|
+
- **New-tab recording** — `click(target, { followNewTab: true })` follows a link
|
|
44
|
+
that opens in a new tab and keeps recording there, stitched into the same MP4.
|
|
42
45
|
- **Manual steps / logins** — `resumeOnPlay()` waits for an in-page ▶ Play button
|
|
43
46
|
(see below), so you can sign in by hand before recording.
|
|
44
47
|
- **Auto-scroll** to bring elements into view before interacting.
|
|
@@ -231,20 +234,24 @@ what lands on camera:
|
|
|
231
234
|
|
|
232
235
|
### Interactions
|
|
233
236
|
|
|
234
|
-
| Method
|
|
235
|
-
|
|
|
236
|
-
| `click(target, { waitForNav? })`
|
|
237
|
-
| `hover(target)`
|
|
238
|
-
| `type(target, text, { duration? })`
|
|
239
|
-
| `clear(target)`
|
|
240
|
-
| `select(target, value)`
|
|
241
|
-
| `key(key)`
|
|
242
|
-
| `mouse(target \| {x, y})`
|
|
237
|
+
| Method | Description |
|
|
238
|
+
| ----------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
239
|
+
| `click(target, { waitForNav?, followNewTab? })` | Click an element. Returns immediately by default; pass `{ waitForNav: true }` when the click triggers a full-page navigation, or `{ followNewTab: true }` to keep recording in a tab the click opens (see notes below). |
|
|
240
|
+
| `hover(target)` | Move onto an element to reveal `:hover` state (no click). |
|
|
241
|
+
| `type(target, text, { duration? })` | Type into a field with human-like timing; `duration` (ms) spreads keystrokes evenly with no jitter. |
|
|
242
|
+
| `clear(target)` | Select-all + delete the contents of a field. |
|
|
243
|
+
| `select(target, value)` | Choose an option in a native `<select>` by `value`, or by `:option-index(N)` / `:option-label(Text)` (see note below; OS-drawn list isn't captured). |
|
|
244
|
+
| `key(key)` | Press a key, e.g. `"Escape"`, `"Enter"`, `"Tab"`. |
|
|
245
|
+
| `mouse(target \| {x, y})` | Move the cursor to an element or coordinates. |
|
|
243
246
|
|
|
244
247
|
> The browser draws an open `<select>`'s option list with the OS, outside the page,
|
|
245
248
|
> so the screencast can't capture it — `select()` shows the cursor and the value
|
|
246
249
|
> changing, but not the dropdown. For an on-camera dropdown, build a custom one from
|
|
247
250
|
> `click()`s.
|
|
251
|
+
>
|
|
252
|
+
> `value` matches the `<option>`'s `value` attribute by default. To pick without
|
|
253
|
+
> knowing it, use `":option-index(1)"` (1-based, like `:nth-child`) or
|
|
254
|
+
> `":option-label(Pro tier)"` to match the option's visible text.
|
|
248
255
|
|
|
249
256
|
> A plain `click()` does not wait for navigation. If the click loads a new page
|
|
250
257
|
> (a link, a form submit), add `{ waitForNav: true }` so the next action lands on
|
|
@@ -253,21 +260,41 @@ what lands on camera:
|
|
|
253
260
|
> (no full-page load) there's nothing to wait on — follow the click with
|
|
254
261
|
> `waitFor("<selector>")` for an element on the new view instead.
|
|
255
262
|
|
|
263
|
+
> When a click opens a link in a **new tab**, pass `{ followNewTab: true }`:
|
|
264
|
+
> `recordable` switches capture to the new tab and stitches it into the same
|
|
265
|
+
> recording (the new tab's load happens off-camera, the old tab stays open).
|
|
266
|
+
> Without it, recording stays on the original tab.
|
|
267
|
+
|
|
256
268
|
### Camera
|
|
257
269
|
|
|
258
|
-
| Method
|
|
259
|
-
|
|
|
260
|
-
| `scroll(target, { duration? })`
|
|
261
|
-
| `zoom(level, { origin?, duration? })`
|
|
262
|
-
| `resetZoom({ duration? })`
|
|
263
|
-
| `setConfig(config)`
|
|
270
|
+
| Method | Description |
|
|
271
|
+
| ------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
272
|
+
| `scroll(target, { container?, duration? })` | Smooth-scroll to `"top"`/`"bottom"`, a selector, or a Y position. `container` scrolls a named overflow pane (modal, sidebar, list) instead of the window. |
|
|
273
|
+
| `zoom(level, { origin?, duration? })` | Smoothly scale from an origin (keyword, `%`, or selector). |
|
|
274
|
+
| `resetZoom({ duration? })` | Smoothly return to 1×. |
|
|
275
|
+
| `setConfig(config)` | Merge config mid-sequence (takes effect at that point). |
|
|
264
276
|
|
|
265
277
|
### Targeting
|
|
266
278
|
|
|
267
279
|
Anywhere a `target` is accepted you can pass:
|
|
268
280
|
|
|
269
|
-
- a **CSS selector** —
|
|
270
|
-
-
|
|
281
|
+
- a **full CSS selector** — IDs, classes, attributes, combinators, and
|
|
282
|
+
positional pseudo-classes all work: `"#id"`, `".card"`, `'[name="email"]'`,
|
|
283
|
+
`"nav > ul li[data-active]"`, `"table tr:nth-child(3) td:first-child"`,
|
|
284
|
+
`"section:has(> h2)"`.
|
|
285
|
+
- **visible text** with the `:text(…)` pseudo — `":text(Sign up)"` matches the
|
|
286
|
+
smallest element containing that text, and it **composes with CSS** so you can
|
|
287
|
+
scope it: `"button:text(Save)"`, `"nav a:text(Pricing)"`,
|
|
288
|
+
`"table tr:nth-child(3) td:text(Done)"`. The text is bare (unquoted); it can
|
|
289
|
+
hold spaces and commas but not a literal `)`.
|
|
290
|
+
- **Puppeteer selectors** also pass through untouched — `::-p-aria(Submit)` for
|
|
291
|
+
accessible name, `>>>` to pierce shadow DOM.
|
|
292
|
+
|
|
293
|
+
> The legacy whole-string `text:` prefix (`"text:Sign up"`) still works as an
|
|
294
|
+
> alias for `:text(…)`.
|
|
295
|
+
|
|
296
|
+
If a target matches more than one element, `recordable` logs a warning and acts
|
|
297
|
+
on the first — tighten the selector to silence it.
|
|
271
298
|
|
|
272
299
|
## Configuration
|
|
273
300
|
|
|
@@ -276,11 +303,13 @@ All options are optional; defaults shown.
|
|
|
276
303
|
```ts
|
|
277
304
|
new Recordable({
|
|
278
305
|
viewport: { width: 1920, height: 1080 },
|
|
306
|
+
pageZoom: 1, // browser page zoom (Ctrl +/−); <1 reflows to fit more on screen
|
|
279
307
|
fps: 30,
|
|
280
308
|
outputDir: "./output",
|
|
281
309
|
outputName: "recordable",
|
|
282
310
|
outputTimestamp: true, // prepend an ISO timestamp to the filename
|
|
283
311
|
headless: false,
|
|
312
|
+
language: "", // BCP-47 locale, e.g. "fr-FR" (--lang + Accept-Language); "" = system
|
|
284
313
|
typingSpeed: 7, // characters per second
|
|
285
314
|
videoCrf: 18, // lower = better quality, larger file
|
|
286
315
|
videoCodec: "libx264",
|
|
@@ -303,6 +332,8 @@ new Recordable({
|
|
|
303
332
|
npm install
|
|
304
333
|
npm run build # type-check + emit dist/ with .d.ts
|
|
305
334
|
npm run gen:schema # regenerate recordable.schema.json from the action manifest
|
|
335
|
+
npm test # unit + ffmpeg I/O tests
|
|
336
|
+
npm run test:e2e # opt-in end-to-end pipeline run (launches a browser)
|
|
306
337
|
npx tsx my-script.ts # run a recording script directly
|
|
307
338
|
node dist/cli.js demo.json # run a JSON script through the CLI locally
|
|
308
339
|
```
|
package/dist/actions.d.ts
CHANGED
|
@@ -28,6 +28,7 @@ declare const ACTIONS: {
|
|
|
28
28
|
width: z.ZodNumber;
|
|
29
29
|
height: z.ZodNumber;
|
|
30
30
|
}, z.core.$strict>>;
|
|
31
|
+
pageZoom: z.ZodDefault<z.ZodNumber>;
|
|
31
32
|
fps: z.ZodDefault<z.ZodNumber>;
|
|
32
33
|
outputDir: z.ZodDefault<z.ZodString>;
|
|
33
34
|
outputName: z.ZodDefault<z.ZodString>;
|
|
@@ -35,6 +36,7 @@ declare const ACTIONS: {
|
|
|
35
36
|
assetsDir: z.ZodDefault<z.ZodString>;
|
|
36
37
|
headless: z.ZodDefault<z.ZodBoolean>;
|
|
37
38
|
launchArgs: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
39
|
+
language: z.ZodDefault<z.ZodString>;
|
|
38
40
|
typingSpeed: z.ZodDefault<z.ZodNumber>;
|
|
39
41
|
videoCrf: z.ZodDefault<z.ZodNumber>;
|
|
40
42
|
videoCodec: z.ZodDefault<z.ZodString>;
|
|
@@ -70,6 +72,7 @@ declare const ACTIONS: {
|
|
|
70
72
|
target: z.ZodString;
|
|
71
73
|
waitForNav: z.ZodOptional<z.ZodBoolean>;
|
|
72
74
|
timeout: z.ZodOptional<z.ZodNumber>;
|
|
75
|
+
followNewTab: z.ZodOptional<z.ZodBoolean>;
|
|
73
76
|
}, z.core.$strict>;
|
|
74
77
|
hover: z.ZodObject<{
|
|
75
78
|
target: z.ZodString;
|
|
@@ -97,6 +100,7 @@ declare const ACTIONS: {
|
|
|
97
100
|
}, z.core.$strict>;
|
|
98
101
|
scroll: z.ZodObject<{
|
|
99
102
|
target: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
|
|
103
|
+
container: z.ZodOptional<z.ZodString>;
|
|
100
104
|
duration: z.ZodOptional<z.ZodNumber>;
|
|
101
105
|
}, z.core.$strict>;
|
|
102
106
|
zoom: z.ZodObject<{
|
package/dist/actions.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAezB;;;GAGG;AACH,QAAA,MAAM,OAAO
|
|
1
|
+
{"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAezB;;;GAGG;AACH,QAAA,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgE0B,CAAC;AAYxC,sEAAsE;AACtE,MAAM,MAAM,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CAAC;AAuChE;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAgBjD;AAED;;;;;;GAMG;AACH,iBAAS,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,EAAE,CAcxD;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,OAAO,EAAE,GAAG,MAAM,CAkD3E;AAED,wEAAwE;AACxE,OAAO,EAAE,OAAO,EAAE,CAAC;AAEnB,iFAAiF;AACjF,OAAO,EAAE,SAAS,EAAE,CAAC"}
|
package/dist/actions.js
CHANGED
|
@@ -48,6 +48,7 @@ const ACTIONS = {
|
|
|
48
48
|
target: z.string(),
|
|
49
49
|
waitForNav: z.boolean().optional(),
|
|
50
50
|
timeout: z.number().optional(),
|
|
51
|
+
followNewTab: z.boolean().optional(),
|
|
51
52
|
}),
|
|
52
53
|
hover: z.strictObject({ target: z.string() }),
|
|
53
54
|
type: z.strictObject({
|
|
@@ -62,6 +63,7 @@ const ACTIONS = {
|
|
|
62
63
|
// Scrolling / zoom
|
|
63
64
|
scroll: z.strictObject({
|
|
64
65
|
target: z.union([z.string(), z.number()]),
|
|
66
|
+
container: z.string().optional(),
|
|
65
67
|
duration: z.number().optional(),
|
|
66
68
|
}),
|
|
67
69
|
zoom: z.strictObject({
|
|
@@ -154,7 +156,7 @@ function buildArgs(step, name) {
|
|
|
154
156
|
export function callToAction(name, args) {
|
|
155
157
|
const schema = ACTIONS[name];
|
|
156
158
|
if (!schema) {
|
|
157
|
-
throw new
|
|
159
|
+
throw new RecordableError("CONFIG_INVALID", `Unknown action "${name}" — valid actions: ${Object.keys(ACTIONS).join(", ")}`);
|
|
158
160
|
}
|
|
159
161
|
const step = { action: name };
|
|
160
162
|
let i = 0;
|
|
@@ -162,23 +164,23 @@ export function callToAction(name, args) {
|
|
|
162
164
|
if (i < args.length)
|
|
163
165
|
step[key] = args[i++];
|
|
164
166
|
else if (!isOptional(name, key))
|
|
165
|
-
throw new
|
|
167
|
+
throw new RecordableError("CONFIG_INVALID", `Action "${name}" is missing required "${key}"`);
|
|
166
168
|
}
|
|
167
169
|
const bag = bagKeys(name);
|
|
168
170
|
if (i < args.length && bag.length) {
|
|
169
171
|
const obj = args[i++];
|
|
170
172
|
if (typeof obj !== "object" || obj === null || Array.isArray(obj)) {
|
|
171
|
-
throw new
|
|
173
|
+
throw new RecordableError("CONFIG_INVALID", `Action "${name}": expected a trailing options object, got ${JSON.stringify(obj)}`);
|
|
172
174
|
}
|
|
173
175
|
for (const [k, v] of Object.entries(obj)) {
|
|
174
176
|
if (!bag.includes(k)) {
|
|
175
|
-
throw new
|
|
177
|
+
throw new RecordableError("CONFIG_INVALID", `Action "${name}": unknown key "${k}" — valid keys: ${bag.join(", ")}`);
|
|
176
178
|
}
|
|
177
179
|
step[k] = v;
|
|
178
180
|
}
|
|
179
181
|
}
|
|
180
182
|
if (i < args.length) {
|
|
181
|
-
throw new
|
|
183
|
+
throw new RecordableError("CONFIG_INVALID", `Action "${name}": too many arguments (expected at most ${i}, got ${args.length})`);
|
|
182
184
|
}
|
|
183
185
|
validateAction(step);
|
|
184
186
|
return step;
|
package/dist/actions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AACzB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,gFAAgF;AAChF,EAAE;AACF,iFAAiF;AACjF,+EAA+E;AAC/E,iFAAiF;AACjF,8EAA8E;AAC9E,6EAA6E;AAE7E,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;AACvD,MAAM,EAAE,GAAG,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAE5D;;;GAGG;AACH,MAAM,OAAO,GAAG;IACd,oBAAoB;IACpB,KAAK,EAAE,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC;IACzB,MAAM,EAAE,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC;IAC1B,WAAW,EAAE,CAAC,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;IAC/D,YAAY,EAAE,CAAC,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;IAChE,MAAM,EAAE,CAAC,CAAC,YAAY,CAAC;QACrB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC7B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAC/B,CAAC;IACF,KAAK,EAAE,CAAC,CAAC,YAAY,CAAC;QACpB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;QAC5B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAC9B,CAAC;IACF,SAAS,EAAE,CAAC,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;IAEnD,aAAa;IACb,KAAK,EAAE,CAAC,CAAC,YAAY,CAAC;QACpB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;QACf,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAChC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC9B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAC/B,CAAC;IACF,OAAO,EAAE,CAAC,CAAC,YAAY,CAAC;QACtB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;QAClB,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE;QACvB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAC/B,CAAC;IAEF,eAAe;IACf,KAAK,EAAE,CAAC,CAAC,YAAY,CAAC;QACpB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;QAClB,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;QAClC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;
|
|
1
|
+
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"track.d.ts","sourceRoot":"","sources":["../../src/audio/track.ts"],"names":[],"mappings":"AAYA,oEAAoE;AACpE,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;uEACuE;AACvE,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmB;IAEzC,oCAAoC;IACpC,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,kEAAkE;IAClE,IAAI,IAAI,SAAS,SAAS,EAAE;IAI5B;;;OAGG;IACG,GAAG,CACP,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAO,GAChC,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"track.d.ts","sourceRoot":"","sources":["../../src/audio/track.ts"],"names":[],"mappings":"AAYA,oEAAoE;AACpE,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;uEACuE;AACvE,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmB;IAEzC,oCAAoC;IACpC,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,kEAAkE;IAClE,IAAI,IAAI,SAAS,SAAS,EAAE;IAI5B;;;OAGG;IACG,GAAG,CACP,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAO,GAChC,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;CAUpD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,GAAG;IAC7D,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAeA;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,SAAS,SAAS,EAAE,EAC3B,OAAO,EAAE,MAAM,EACf,KAAK,SAAK,GACT;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAAE,CAOpC"}
|
package/dist/audio/track.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"track.js","sourceRoot":"","sources":["../../src/audio/track.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAkB/C;uEACuE;AACvE,MAAM,OAAO,UAAU;IACJ,KAAK,GAAgB,EAAE,CAAC;IAEzC,oCAAoC;IACpC,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC3B,CAAC;IAED,kEAAkE;IAClE,IAAI;QACF,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,GAAG,CACP,IAAY,EACZ,OAAe,EACf,UAA+B,EAAE;QAEjC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YACnB,MAAM,IAAI,eAAe,
|
|
1
|
+
{"version":3,"file":"track.js","sourceRoot":"","sources":["../../src/audio/track.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAkB/C;uEACuE;AACvE,MAAM,OAAO,UAAU;IACJ,KAAK,GAAgB,EAAE,CAAC;IAEzC,oCAAoC;IACpC,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC3B,CAAC;IAED,kEAAkE;IAClE,IAAI;QACF,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,GAAG,CACP,IAAY,EACZ,OAAe,EACf,UAA+B,EAAE;QAEjC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YACnB,MAAM,IAAI,eAAe,CACvB,gBAAgB,EAChB,0BAA0B,IAAI,EAAE,CACjC,CAAC;QACJ,MAAM,UAAU,GAAG,CAAC,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;QACpD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QACvE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;IACjC,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAA2B;IAI1D,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACjC,MAAM,KAAK,GAAG,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,CAAC,MAAM,IAAI,IAAI,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QACzE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACvB,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAE3D,OAAO,CAAC,IAAI,CACV,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,eAAe,KAAK,CAAC,MAAM,oBAAoB,CAClE,CAAC;IACF,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;AACvC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAC3B,KAA2B,EAC3B,OAAe,EACf,KAAK,GAAG,EAAE;IAEV,MAAM,IAAI,GAAuC,EAAE,CAAC;IACpD,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,UAAU,GAAG,OAAO,CAAC,CAAC;QAC9D,IAAI,MAAM,GAAG,KAAK;YAAE,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/dist/browser/cursor.d.ts
CHANGED
|
@@ -33,6 +33,12 @@ export declare class Cursor {
|
|
|
33
33
|
* When documentElement has a CSS transform (zoom), position:fixed children
|
|
34
34
|
* are positioned relative to that ancestor (not the viewport) and scroll with
|
|
35
35
|
* the page, so we add scroll and apply the inverse zoom transform.
|
|
36
|
+
*
|
|
37
|
+
* Note: the `pageZoom` config (genuine browser zoom via chrome.tabs.setZoom)
|
|
38
|
+
* needs no handling here. Page zoom rescales the CSS pixel itself, so the
|
|
39
|
+
* overlay, the content, and Puppeteer's `boundingBox()`/`mouse` coords all share
|
|
40
|
+
* one post-zoom coordinate space — feeding the overlay those raw coords keeps it
|
|
41
|
+
* aligned with the target automatically.
|
|
36
42
|
*/
|
|
37
43
|
private _toDocCoords;
|
|
38
44
|
/** Briefly scale the cursor down to signal a press. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../src/browser/cursor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../src/browser/cursor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,WAAW,CAAC;AAiBtC,mFAAmF;AACnF,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,CAAC,EAAE,MAAM,CAAC;CACX;AAED;;;;GAIG;AACH,qBAAa,MAAM;IAIjB,OAAO,CAAC,GAAG,CAAkB;IAK7B,OAAO,CAAC,MAAM,CAAyC;IAEvD,4EAA4E;IAC5E,IAAI,IAAI,IAAI;IAIZ;0EACsE;IAChE,MAAM,CACV,IAAI,EAAE,IAAI,EACV,IAAI,GAAE,SAAkC,GACvC,OAAO,CAAC,IAAI,CAAC;IAQhB;;;;;;OAMG;IACG,MAAM,CACV,IAAI,EAAE,IAAI,EACV,IAAI,GAAE,SAAkC,GACvC,OAAO,CAAC,IAAI,CAAC;IA2EhB,0EAA0E;IACpE,MAAM,CACV,IAAI,EAAE,IAAI,EACV,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,SAAS,GACd,OAAO,CAAC,IAAI,CAAC;IAoChB;;;;;;;;;;;OAWG;YACW,YAAY;IAa1B,uDAAuD;IACjD,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;CAa7C"}
|
package/dist/browser/cursor.js
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import { sleep } from "../utils.js";
|
|
2
|
-
import { cursorMoveMs, PRESS_DOWN_MS, PRESS_SETTLE_MS } from "../timing.js";
|
|
2
|
+
import { cursorMoveMs, PRESS_DOWN_MS, PRESS_SETTLE_MS, PRESS_TRANSITION_MS, } from "../timing.js";
|
|
3
3
|
const CURSOR_ID = "__recordable_cursor__";
|
|
4
4
|
const CURSOR_STYLE_ID = "__recordable_cursor_style__";
|
|
5
|
+
/** Press-dip scale — presentation only. */
|
|
6
|
+
const CURSOR_PRESS_SCALE = 0.88;
|
|
7
|
+
/** Base move transition (ms) — presentation only. */
|
|
8
|
+
const CURSOR_MOVE_TRANSITION_MS = 150;
|
|
5
9
|
/**
|
|
6
10
|
* An animated cursor overlay drawn into the page. Tracks its own position so
|
|
7
11
|
* each move can ease from where it last was, and dips on click for a tactile
|
|
@@ -44,7 +48,7 @@ export class Cursor {
|
|
|
44
48
|
if (!ready)
|
|
45
49
|
return;
|
|
46
50
|
const { cx, cy } = await this._toDocCoords(page, this.pos.x, this.pos.y, zoom);
|
|
47
|
-
await page.evaluate(({ id, styleId, cx, cy }) => {
|
|
51
|
+
await page.evaluate(({ id, styleId, cx, cy, moveMs, pressScale, pressMs }) => {
|
|
48
52
|
// Note: we intentionally do NOT hide the native pointer. The screencast
|
|
49
53
|
// doesn't capture the OS cursor, so it never reaches the video; hiding it
|
|
50
54
|
// only blanked the real pointer in the live headful window (incl. during
|
|
@@ -60,12 +64,12 @@ export class Cursor {
|
|
|
60
64
|
z-index: 2147483647;
|
|
61
65
|
pointer-events: none;
|
|
62
66
|
will-change: transform;
|
|
63
|
-
transition: transform
|
|
67
|
+
transition: transform ${moveMs}ms;
|
|
64
68
|
filter: drop-shadow(0 1px 2px rgba(0,0,0,0.4));
|
|
65
69
|
}
|
|
66
70
|
#${id}.pressing {
|
|
67
|
-
transform: var(--recordable-pos) scale(
|
|
68
|
-
transition: transform
|
|
71
|
+
transform: var(--recordable-pos) scale(${pressScale}) !important;
|
|
72
|
+
transition: transform ${pressMs}ms !important;
|
|
69
73
|
}
|
|
70
74
|
`;
|
|
71
75
|
document.head.appendChild(style);
|
|
@@ -85,7 +89,15 @@ export class Cursor {
|
|
|
85
89
|
cursor.style.transition = "none";
|
|
86
90
|
cursor.style.setProperty("--recordable-pos", `translate(${cx}px, ${cy}px)`);
|
|
87
91
|
cursor.style.transform = `translate(${cx}px, ${cy}px)`;
|
|
88
|
-
}, {
|
|
92
|
+
}, {
|
|
93
|
+
id: CURSOR_ID,
|
|
94
|
+
styleId: CURSOR_STYLE_ID,
|
|
95
|
+
cx,
|
|
96
|
+
cy,
|
|
97
|
+
moveMs: CURSOR_MOVE_TRANSITION_MS,
|
|
98
|
+
pressScale: CURSOR_PRESS_SCALE,
|
|
99
|
+
pressMs: PRESS_TRANSITION_MS,
|
|
100
|
+
});
|
|
89
101
|
await page.mouse.move(this.pos.x, this.pos.y);
|
|
90
102
|
}
|
|
91
103
|
/** Ease the overlay (and the real mouse) to viewport coords `toX,toY`. */
|
|
@@ -118,6 +130,12 @@ export class Cursor {
|
|
|
118
130
|
* When documentElement has a CSS transform (zoom), position:fixed children
|
|
119
131
|
* are positioned relative to that ancestor (not the viewport) and scroll with
|
|
120
132
|
* the page, so we add scroll and apply the inverse zoom transform.
|
|
133
|
+
*
|
|
134
|
+
* Note: the `pageZoom` config (genuine browser zoom via chrome.tabs.setZoom)
|
|
135
|
+
* needs no handling here. Page zoom rescales the CSS pixel itself, so the
|
|
136
|
+
* overlay, the content, and Puppeteer's `boundingBox()`/`mouse` coords all share
|
|
137
|
+
* one post-zoom coordinate space — feeding the overlay those raw coords keeps it
|
|
138
|
+
* aligned with the target automatically.
|
|
121
139
|
*/
|
|
122
140
|
async _toDocCoords(page, x, y, { tx, ty, s }) {
|
|
123
141
|
const hasTransform = s !== 1 || tx !== 0 || ty !== 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/browser/cursor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,
|
|
1
|
+
{"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/browser/cursor.ts"],"names":[],"mappings":"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"}
|
package/dist/browser/dom.d.ts
CHANGED
|
@@ -1,11 +1,24 @@
|
|
|
1
|
-
import { type Page } from "puppeteer";
|
|
1
|
+
import { type ElementHandle, type Page } from "puppeteer";
|
|
2
2
|
/** Coordinates in viewport pixels. */
|
|
3
3
|
export interface Point {
|
|
4
4
|
x: number;
|
|
5
5
|
y: number;
|
|
6
6
|
}
|
|
7
|
-
/** Resolve a target and wait for the element to
|
|
8
|
-
|
|
7
|
+
/** Resolve a target and wait for the element to be *visible* in any frame, then
|
|
8
|
+
* return its handle.
|
|
9
|
+
*
|
|
10
|
+
* Two reasons this is more than a bare `page.locator(...).waitHandle()`:
|
|
11
|
+
* - Visibility (not mere existence): callers immediately read `boundingBox()`
|
|
12
|
+
* to click/scroll, but Puppeteer's default locator resolves the instant the
|
|
13
|
+
* node enters the DOM (`waitForSelector(..., {visible:false})`) — so an
|
|
14
|
+
* element inserted-but-not-yet-laid-out yields a null box. `setVisibility`
|
|
15
|
+
* makes it wait for a real layout box.
|
|
16
|
+
* - Frames: modal dialogs (e.g. APEX `apex.navigation.dialog`) render their
|
|
17
|
+
* content in an `<iframe>`. The top frame can hold a hidden placeholder with
|
|
18
|
+
* the same id, so we race every frame and take the first *visible* match.
|
|
19
|
+
* An iframe element's `boundingBox()` is reported in main-frame coordinates,
|
|
20
|
+
* so the coordinate-based click still lands correctly. */
|
|
21
|
+
export declare function getHandle(page: Page, target: string): Promise<ElementHandle<Element>>;
|
|
9
22
|
/** Centre coords of a target element, jittered up to 20% of each dimension. */
|
|
10
23
|
export declare function getElementCenter(page: Page, target: string): Promise<Point>;
|
|
11
24
|
/**
|
|
@@ -13,19 +26,26 @@ export declare function getElementCenter(page: Page, target: string): Promise<Po
|
|
|
13
26
|
* Accepts CSS position keywords/percentages or an element selector.
|
|
14
27
|
*/
|
|
15
28
|
export declare function originToCoords(page: Page, origin: string): Promise<Point>;
|
|
16
|
-
/** Animate the page's scroll position to `targetY` over `duration` ms with an ease curve. */
|
|
17
|
-
export declare function smoothScroll(page: Page, targetY: number, duration: number): Promise<void>;
|
|
18
29
|
/**
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
* - CSS selector or `text:` prefix → element centred in the viewport
|
|
30
|
+
* Animate a scroller's vertical position to `targetTop` over `duration` ms with an
|
|
31
|
+
* ease curve. `container` null scrolls the window; a handle scrolls that element's
|
|
32
|
+
* `scrollTop`. The target is clamped to the scroller's range.
|
|
23
33
|
*/
|
|
24
|
-
export declare function
|
|
34
|
+
export declare function smoothScroll(page: Page, targetTop: number, duration: number, container?: ElementHandle<Element> | null): Promise<void>;
|
|
25
35
|
/**
|
|
26
|
-
*
|
|
27
|
-
* `
|
|
28
|
-
*
|
|
36
|
+
* Smooth-scroll to an element or position. Without `container` the window scrolls;
|
|
37
|
+
* with one, `target` is resolved against that scroll container instead:
|
|
38
|
+
* - `"top"` / `"bottom"` → scroller extremes
|
|
39
|
+
* - number → absolute scrollTop (px)
|
|
40
|
+
* - CSS selector or `text:` prefix → element centred within the scroller
|
|
41
|
+
*/
|
|
42
|
+
export declare function smoothScrollToTarget(page: Page, target: string | number, duration: number, container?: string): Promise<void>;
|
|
43
|
+
/**
|
|
44
|
+
* Scroll `target` into view if it lies outside the visible area (keeping `margin`
|
|
45
|
+
* px clear on each side). No-op when already comfortably visible. `speed` (px/s)
|
|
46
|
+
* sets the scroll duration. Scrolls the target's nearest scrollable container
|
|
47
|
+
* first (so it's revealed inside a modal / sidebar / pane), then the window so the
|
|
48
|
+
* container itself is on screen.
|
|
29
49
|
*/
|
|
30
50
|
export declare function scrollIntoView(page: Page, target: string, margin: number, speed: number): Promise<void>;
|
|
31
51
|
//# sourceMappingURL=dom.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dom.d.ts","sourceRoot":"","sources":["../../src/browser/dom.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"dom.d.ts","sourceRoot":"","sources":["../../src/browser/dom.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,IAAI,EAAE,MAAM,WAAW,CAAC;AAW1D,sCAAsC;AACtC,MAAM,WAAW,KAAK;IACpB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED;;;;;;;;;;;;;6DAa6D;AAC7D,wBAAsB,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,mCAczD;AAED,+EAA+E;AAC/E,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,KAAK,CAAC,CAchB;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,KAAK,CAAC,CA4BhB;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,SAAS,GAAE,aAAa,CAAC,OAAO,CAAC,GAAG,IAAW,GAC9C,OAAO,CAAC,IAAI,CAAC,CAgCf;AAED;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,MAAM,GAAG,MAAM,EACvB,QAAQ,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAmCf;AAqFD;;;;;;GAMG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC,CAiBf"}
|