screenci 0.0.76 → 0.0.79
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.d.ts +58 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +584 -200
- package/dist/cli.js.map +1 -1
- package/dist/docs/manifest.d.ts +253 -98
- package/dist/docs/manifest.d.ts.map +1 -1
- package/dist/docs/manifest.js +92 -32
- package/dist/docs/manifest.js.map +1 -1
- package/dist/docs/video-sources/camera-and-zooming.screenci.d.ts +2 -0
- package/dist/docs/video-sources/camera-and-zooming.screenci.d.ts.map +1 -0
- package/dist/docs/video-sources/camera-and-zooming.screenci.js +57 -0
- package/dist/docs/video-sources/camera-and-zooming.screenci.js.map +1 -0
- package/dist/docs/video-sources/installation.screenci.js +9 -6
- package/dist/docs/video-sources/installation.screenci.js.map +1 -1
- package/dist/docs/video-sources/languages.screenci.d.ts +2 -0
- package/dist/docs/video-sources/languages.screenci.d.ts.map +1 -0
- package/dist/docs/video-sources/languages.screenci.js +68 -0
- package/dist/docs/video-sources/languages.screenci.js.map +1 -0
- package/dist/docs/video-sources/locator-highlight-animated.screenci.js +1 -1
- package/dist/docs/video-sources/locator-highlight-animated.screenci.js.map +1 -1
- package/dist/docs/video-sources/narration.screenci.d.ts +2 -0
- package/dist/docs/video-sources/narration.screenci.d.ts.map +1 -0
- package/dist/docs/video-sources/narration.screenci.js +71 -0
- package/dist/docs/video-sources/narration.screenci.js.map +1 -0
- package/dist/docs/video-sources/public-urls-and-embeds.screenci.d.ts +2 -0
- package/dist/docs/video-sources/public-urls-and-embeds.screenci.d.ts.map +1 -0
- package/dist/docs/video-sources/public-urls-and-embeds.screenci.js +60 -0
- package/dist/docs/video-sources/public-urls-and-embeds.screenci.js.map +1 -0
- package/dist/docs/video-sources/speaking-style.screenci.d.ts +2 -0
- package/dist/docs/video-sources/speaking-style.screenci.d.ts.map +1 -0
- package/dist/docs/video-sources/speaking-style.screenci.js +76 -0
- package/dist/docs/video-sources/speaking-style.screenci.js.map +1 -0
- package/dist/docs/video-sources/vertical-video.screenci.d.ts +2 -0
- package/dist/docs/video-sources/vertical-video.screenci.d.ts.map +1 -0
- package/dist/docs/video-sources/vertical-video.screenci.js +58 -0
- package/dist/docs/video-sources/vertical-video.screenci.js.map +1 -0
- package/dist/docs/videos.d.ts +20 -0
- package/dist/docs/videos.d.ts.map +1 -1
- package/dist/docs/videos.js +25 -0
- package/dist/docs/videos.js.map +1 -1
- package/dist/e2e/instrument.e2e.js +8 -0
- package/dist/e2e/instrument.e2e.js.map +1 -1
- package/dist/e2e/redact.e2e.d.ts +2 -0
- package/dist/e2e/redact.e2e.d.ts.map +1 -0
- package/dist/e2e/redact.e2e.js +161 -0
- package/dist/e2e/redact.e2e.js.map +1 -0
- package/dist/index.d.ts +10 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -1
- package/dist/index.js.map +1 -1
- package/dist/src/asset.d.ts +154 -13
- package/dist/src/asset.d.ts.map +1 -1
- package/dist/src/asset.js +262 -32
- package/dist/src/asset.js.map +1 -1
- package/dist/src/assetHash.d.ts +27 -0
- package/dist/src/assetHash.d.ts.map +1 -0
- package/dist/src/assetHash.js +0 -0
- package/dist/src/assetHash.js.map +1 -0
- package/dist/src/audio.d.ts +8 -5
- package/dist/src/audio.d.ts.map +1 -1
- package/dist/src/audio.js +56 -31
- package/dist/src/audio.js.map +1 -1
- package/dist/src/builder.d.ts +132 -32
- package/dist/src/builder.d.ts.map +1 -1
- package/dist/src/builder.js +66 -20
- package/dist/src/builder.js.map +1 -1
- package/dist/src/changeFocus.d.ts.map +1 -1
- package/dist/src/changeFocus.js +103 -34
- package/dist/src/changeFocus.js.map +1 -1
- package/dist/src/cue.d.ts +29 -17
- package/dist/src/cue.d.ts.map +1 -1
- package/dist/src/cue.js +138 -61
- package/dist/src/cue.js.map +1 -1
- package/dist/src/declare.d.ts +8 -4
- package/dist/src/declare.d.ts.map +1 -1
- package/dist/src/declare.js +28 -10
- package/dist/src/declare.js.map +1 -1
- package/dist/src/defaults.d.ts +23 -0
- package/dist/src/defaults.d.ts.map +1 -1
- package/dist/src/defaults.js +23 -0
- package/dist/src/defaults.js.map +1 -1
- package/dist/src/events.d.ts +289 -25
- package/dist/src/events.d.ts.map +1 -1
- package/dist/src/events.js +145 -13
- package/dist/src/events.js.map +1 -1
- package/dist/src/htmlRasterizer.d.ts +10 -0
- package/dist/src/htmlRasterizer.d.ts.map +1 -1
- package/dist/src/htmlRasterizer.js +12 -2
- package/dist/src/htmlRasterizer.js.map +1 -1
- package/dist/src/init.d.ts +2 -0
- package/dist/src/init.d.ts.map +1 -1
- package/dist/src/init.js +60 -28
- package/dist/src/init.js.map +1 -1
- package/dist/src/instrument.d.ts.map +1 -1
- package/dist/src/instrument.js +25 -7
- package/dist/src/instrument.js.map +1 -1
- package/dist/src/locales.d.ts.map +1 -1
- package/dist/src/locales.js +1 -0
- package/dist/src/locales.js.map +1 -1
- package/dist/src/localize.d.ts +25 -17
- package/dist/src/localize.d.ts.map +1 -1
- package/dist/src/localize.js +18 -10
- package/dist/src/localize.js.map +1 -1
- package/dist/src/localizeRuntime.d.ts +18 -13
- package/dist/src/localizeRuntime.d.ts.map +1 -1
- package/dist/src/localizeRuntime.js +28 -18
- package/dist/src/localizeRuntime.js.map +1 -1
- package/dist/src/logger.d.ts +5 -0
- package/dist/src/logger.d.ts.map +1 -1
- package/dist/src/logger.js +7 -0
- package/dist/src/logger.js.map +1 -1
- package/dist/src/narrationVisibility.d.ts +19 -0
- package/dist/src/narrationVisibility.d.ts.map +1 -0
- package/dist/src/narrationVisibility.js +26 -0
- package/dist/src/narrationVisibility.js.map +1 -0
- package/dist/src/recordingData.d.ts +7 -0
- package/dist/src/recordingData.d.ts.map +1 -1
- package/dist/src/recordingSize.d.ts +32 -0
- package/dist/src/recordingSize.d.ts.map +1 -0
- package/dist/src/recordingSize.js +54 -0
- package/dist/src/recordingSize.js.map +1 -0
- package/dist/src/redact.d.ts +68 -0
- package/dist/src/redact.d.ts.map +1 -0
- package/dist/src/redact.js +138 -0
- package/dist/src/redact.js.map +1 -0
- package/dist/src/redactController.d.ts +61 -0
- package/dist/src/redactController.d.ts.map +1 -0
- package/dist/src/redactController.js +232 -0
- package/dist/src/redactController.js.map +1 -0
- package/dist/src/runtimeContext.d.ts +32 -0
- package/dist/src/runtimeContext.d.ts.map +1 -1
- package/dist/src/runtimeContext.js +21 -0
- package/dist/src/runtimeContext.js.map +1 -1
- package/dist/src/runtimeMode.d.ts +15 -7
- package/dist/src/runtimeMode.d.ts.map +1 -1
- package/dist/src/runtimeMode.js +17 -6
- package/dist/src/runtimeMode.js.map +1 -1
- package/dist/src/screenAudio.d.ts +34 -4
- package/dist/src/screenAudio.d.ts.map +1 -1
- package/dist/src/screenAudio.js +0 -0
- package/dist/src/screenAudio.js.map +1 -1
- package/dist/src/screenAudioSink.d.ts +12 -0
- package/dist/src/screenAudioSink.d.ts.map +1 -1
- package/dist/src/screenAudioSink.js +30 -0
- package/dist/src/screenAudioSink.js.map +1 -1
- package/dist/src/screenshot.d.ts +16 -14
- package/dist/src/screenshot.d.ts.map +1 -1
- package/dist/src/screenshot.js +11 -11
- package/dist/src/screenshot.js.map +1 -1
- package/dist/src/sourceTrim.d.ts +29 -0
- package/dist/src/sourceTrim.d.ts.map +1 -0
- package/dist/src/sourceTrim.js +76 -0
- package/dist/src/sourceTrim.js.map +1 -0
- package/dist/src/studio.d.ts +71 -3
- package/dist/src/studio.d.ts.map +1 -1
- package/dist/src/studio.js +19 -1
- package/dist/src/studio.js.map +1 -1
- package/dist/src/timelineOffset.d.ts +46 -0
- package/dist/src/timelineOffset.d.ts.map +1 -0
- package/dist/src/timelineOffset.js +66 -0
- package/dist/src/timelineOffset.js.map +1 -0
- package/dist/src/titleValidation.d.ts +38 -0
- package/dist/src/titleValidation.d.ts.map +1 -1
- package/dist/src/titleValidation.js +42 -0
- package/dist/src/titleValidation.js.map +1 -1
- package/dist/src/types.d.ts +85 -0
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js +1 -1
- package/dist/src/types.js.map +1 -1
- package/dist/src/video.d.ts +37 -34
- package/dist/src/video.d.ts.map +1 -1
- package/dist/src/video.js +99 -48
- package/dist/src/video.js.map +1 -1
- package/dist/src/voiceSampleAudio.d.ts +34 -0
- package/dist/src/voiceSampleAudio.d.ts.map +1 -0
- package/dist/src/voiceSampleAudio.js +105 -0
- package/dist/src/voiceSampleAudio.js.map +1 -0
- package/dist/src/voices.d.ts +2 -2
- package/dist/src/voices.d.ts.map +1 -1
- package/dist/src/voices.js +8 -3
- package/dist/src/voices.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -2
- package/templates/recordings/assets/logo.png +0 -0
package/dist/src/logger.d.ts
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
export declare const logger: {
|
|
2
2
|
info: (...args: unknown[]) => void;
|
|
3
3
|
warn: (...args: unknown[]) => void;
|
|
4
|
+
/**
|
|
5
|
+
* Informational message printed in cyan. Use for non-error notices surfaced
|
|
6
|
+
* to the author (for example, backend `notices` shown at record time).
|
|
7
|
+
*/
|
|
8
|
+
notice: (message: string) => void;
|
|
4
9
|
error: (...args: unknown[]) => void;
|
|
5
10
|
};
|
|
6
11
|
export default logger;
|
package/dist/src/logger.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,MAAM;oBACD,OAAO,EAAE;oBAGT,OAAO,EAAE;
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,MAAM;oBACD,OAAO,EAAE;oBAGT,OAAO,EAAE;IAGzB;;;OAGG;sBACe,MAAM;qBAGP,OAAO,EAAE;CAG3B,CAAA;AAED,eAAe,MAAM,CAAA"}
|
package/dist/src/logger.js
CHANGED
|
@@ -6,6 +6,13 @@ export const logger = {
|
|
|
6
6
|
warn: (...args) => {
|
|
7
7
|
console.warn(pc.yellow('WARNING'), ...args);
|
|
8
8
|
},
|
|
9
|
+
/**
|
|
10
|
+
* Informational message printed in cyan. Use for non-error notices surfaced
|
|
11
|
+
* to the author (for example, backend `notices` shown at record time).
|
|
12
|
+
*/
|
|
13
|
+
notice: (message) => {
|
|
14
|
+
console.log(pc.cyan(message));
|
|
15
|
+
},
|
|
9
16
|
error: (...args) => {
|
|
10
17
|
console.error(...args);
|
|
11
18
|
},
|
package/dist/src/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAA;AAE3B,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,IAAI,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE;QAC3B,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAA;IACtB,CAAC;IACD,IAAI,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE;QAC3B,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,GAAG,IAAI,CAAC,CAAA;IAC7C,CAAC;IACD,KAAK,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE;QAC5B,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAA;IACxB,CAAC;CACF,CAAA;AAED,eAAe,MAAM,CAAA"}
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAA;AAE3B,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,IAAI,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE;QAC3B,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAA;IACtB,CAAC;IACD,IAAI,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE;QAC3B,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,GAAG,IAAI,CAAC,CAAA;IAC7C,CAAC;IACD;;;OAGG;IACH,MAAM,EAAE,CAAC,OAAe,EAAE,EAAE;QAC1B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAA;IAC/B,CAAC;IACD,KAAK,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE;QAC5B,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAA;IACxB,CAAC;CACF,CAAA;AAED,eAAe,MAAM,CAAA"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hides the narration (camera PIP) from this point on.
|
|
3
|
+
*
|
|
4
|
+
* Call {@link showNarration} to make it visible again.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```ts
|
|
8
|
+
* await hideNarration()
|
|
9
|
+
* await page.getByRole('button', { name: 'Submit' }).click()
|
|
10
|
+
* await showNarration()
|
|
11
|
+
* ```
|
|
12
|
+
*/
|
|
13
|
+
export declare function hideNarration(): Promise<void>;
|
|
14
|
+
/**
|
|
15
|
+
* Shows the narration (camera PIP) after it was hidden by {@link hideNarration}.
|
|
16
|
+
* No-op when the narration is already visible.
|
|
17
|
+
*/
|
|
18
|
+
export declare function showNarration(): Promise<void>;
|
|
19
|
+
//# sourceMappingURL=narrationVisibility.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"narrationVisibility.d.ts","sourceRoot":"","sources":["../../src/narrationVisibility.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAGnD;AAED;;;GAGG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAGnD"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { getActiveHideRecorder } from './timelineBlock.js';
|
|
2
|
+
/**
|
|
3
|
+
* Hides the narration (camera PIP) from this point on.
|
|
4
|
+
*
|
|
5
|
+
* Call {@link showNarration} to make it visible again.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```ts
|
|
9
|
+
* await hideNarration()
|
|
10
|
+
* await page.getByRole('button', { name: 'Submit' }).click()
|
|
11
|
+
* await showNarration()
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
export async function hideNarration() {
|
|
15
|
+
const recorder = getActiveHideRecorder();
|
|
16
|
+
recorder.addNarrationHide();
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Shows the narration (camera PIP) after it was hidden by {@link hideNarration}.
|
|
20
|
+
* No-op when the narration is already visible.
|
|
21
|
+
*/
|
|
22
|
+
export async function showNarration() {
|
|
23
|
+
const recorder = getActiveHideRecorder();
|
|
24
|
+
recorder.addNarrationShow();
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=narrationVisibility.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"narrationVisibility.js","sourceRoot":"","sources":["../../src/narrationVisibility.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAE1D;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,MAAM,QAAQ,GAAG,qBAAqB,EAAE,CAAA;IACxC,QAAQ,CAAC,gBAAgB,EAAE,CAAA;AAC7B,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,MAAM,QAAQ,GAAG,qBAAqB,EAAE,CAAA;IACxC,QAAQ,CAAC,gBAAgB,EAAE,CAAA;AAC7B,CAAC"}
|
|
@@ -131,6 +131,10 @@ export type CueEndEvent = {
|
|
|
131
131
|
reason?: 'auto' | 'wait';
|
|
132
132
|
};
|
|
133
133
|
export type VideoCueTranslationFile = {
|
|
134
|
+
assetPath: string;
|
|
135
|
+
assetHash?: string;
|
|
136
|
+
subtitle?: string;
|
|
137
|
+
} | {
|
|
134
138
|
assetHash: string;
|
|
135
139
|
assetPath?: string;
|
|
136
140
|
subtitle?: string;
|
|
@@ -281,6 +285,9 @@ export type RecordingMetadata = {
|
|
|
281
285
|
renderOptions?: boolean;
|
|
282
286
|
narration?: boolean;
|
|
283
287
|
assets?: boolean;
|
|
288
|
+
/** Web-owned language set (`video.languages(studio())`): the app may add and
|
|
289
|
+
* render languages for this video. Absent for code-defined language sets. */
|
|
290
|
+
languages?: boolean;
|
|
284
291
|
};
|
|
285
292
|
};
|
|
286
293
|
export type RecordingData = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recordingData.d.ts","sourceRoot":"","sources":["../../src/recordingData.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"recordingData.d.ts","sourceRoot":"","sources":["../../src/recordingData.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { Easing } from './types.js';
|
|
2
|
+
export type ResizeRecordingOptions = {
|
|
3
|
+
/** Transition duration in milliseconds. 0 or omitted = instant cut. */
|
|
4
|
+
duration?: number;
|
|
5
|
+
/** Easing function for the transition. Defaults to 'ease-out'. */
|
|
6
|
+
easing?: Easing;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Shrinks the recording to a limited size, revealing the styled background
|
|
10
|
+
* around it from this point on.
|
|
11
|
+
*
|
|
12
|
+
* `size` is a 0-1 fraction of the full frame: `1` is full screen, `0.8` shows
|
|
13
|
+
* the recording at 80% of the frame, centered. Call {@link resetRecordingSize}
|
|
14
|
+
* to return to full screen.
|
|
15
|
+
*
|
|
16
|
+
* Pass `duration` to animate the transition over that many milliseconds.
|
|
17
|
+
* Use `easing` to control the animation curve (defaults to `'ease-out'`).
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```ts
|
|
21
|
+
* await resizeRecording(0.8, { duration: 400, easing: 'ease-in-out' })
|
|
22
|
+
* await page.getByRole('button', { name: 'Continue' }).click()
|
|
23
|
+
* await resetRecordingSize()
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export declare function resizeRecording(size: number, options?: ResizeRecordingOptions): Promise<void>;
|
|
27
|
+
/**
|
|
28
|
+
* Returns the recording to full screen (size 1) from this point on. No-op when
|
|
29
|
+
* the recording is already full screen.
|
|
30
|
+
*/
|
|
31
|
+
export declare function resetRecordingSize(): Promise<void>;
|
|
32
|
+
//# sourceMappingURL=recordingSize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recordingSize.d.ts","sourceRoot":"","sources":["../../src/recordingSize.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAgBxC,MAAM,MAAM,sBAAsB,GAAG;IACnC,uEAAuE;IACvE,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,kEAAkE;IAClE,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,CAAA;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,sBAAsB,GAC/B,OAAO,CAAC,IAAI,CAAC,CASf;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAKxD"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { ScreenciError } from './errors.js';
|
|
2
|
+
import { getActiveHideRecorder } from './timelineBlock.js';
|
|
3
|
+
import { getRuntimeRecordingSize, setRuntimeRecordingSize, } from './runtimeContext.js';
|
|
4
|
+
/**
|
|
5
|
+
* Full-screen size: the recording fills the output frame, with one side
|
|
6
|
+
* touching the background edge.
|
|
7
|
+
*/
|
|
8
|
+
const FULL_SCREEN_SIZE = 1;
|
|
9
|
+
function assertValidSize(size) {
|
|
10
|
+
if (!Number.isFinite(size) || size <= 0 || size > 1) {
|
|
11
|
+
throw new ScreenciError(`resizeRecording(size) requires size in (0, 1]; received ${size}`);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Shrinks the recording to a limited size, revealing the styled background
|
|
16
|
+
* around it from this point on.
|
|
17
|
+
*
|
|
18
|
+
* `size` is a 0-1 fraction of the full frame: `1` is full screen, `0.8` shows
|
|
19
|
+
* the recording at 80% of the frame, centered. Call {@link resetRecordingSize}
|
|
20
|
+
* to return to full screen.
|
|
21
|
+
*
|
|
22
|
+
* Pass `duration` to animate the transition over that many milliseconds.
|
|
23
|
+
* Use `easing` to control the animation curve (defaults to `'ease-out'`).
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```ts
|
|
27
|
+
* await resizeRecording(0.8, { duration: 400, easing: 'ease-in-out' })
|
|
28
|
+
* await page.getByRole('button', { name: 'Continue' }).click()
|
|
29
|
+
* await resetRecordingSize()
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
export async function resizeRecording(size, options) {
|
|
33
|
+
assertValidSize(size);
|
|
34
|
+
const recorder = getActiveHideRecorder();
|
|
35
|
+
if (options !== undefined) {
|
|
36
|
+
recorder.addRecordingSizeStart(size, options);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
recorder.addRecordingSizeStart(size);
|
|
40
|
+
}
|
|
41
|
+
setRuntimeRecordingSize(size);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Returns the recording to full screen (size 1) from this point on. No-op when
|
|
45
|
+
* the recording is already full screen.
|
|
46
|
+
*/
|
|
47
|
+
export async function resetRecordingSize() {
|
|
48
|
+
if (getRuntimeRecordingSize() === FULL_SCREEN_SIZE)
|
|
49
|
+
return;
|
|
50
|
+
const recorder = getActiveHideRecorder();
|
|
51
|
+
recorder.addRecordingSizeEnd();
|
|
52
|
+
setRuntimeRecordingSize(FULL_SCREEN_SIZE);
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=recordingSize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recordingSize.js","sourceRoot":"","sources":["../../src/recordingSize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAC1D,OAAO,EACL,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,qBAAqB,CAAA;AAG5B;;;GAGG;AACH,MAAM,gBAAgB,GAAG,CAAC,CAAA;AAE1B,SAAS,eAAe,CAAC,IAAY;IACnC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,aAAa,CACrB,2DAA2D,IAAI,EAAE,CAClE,CAAA;IACH,CAAC;AACH,CAAC;AASD;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAAY,EACZ,OAAgC;IAEhC,eAAe,CAAC,IAAI,CAAC,CAAA;IACrB,MAAM,QAAQ,GAAG,qBAAqB,EAAE,CAAA;IACxC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,QAAQ,CAAC,qBAAqB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IAC/C,CAAC;SAAM,CAAC;QACN,QAAQ,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAA;IACtC,CAAC;IACD,uBAAuB,CAAC,IAAI,CAAC,CAAA;AAC/B,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,IAAI,uBAAuB,EAAE,KAAK,gBAAgB;QAAE,OAAM;IAC1D,MAAM,QAAQ,GAAG,qBAAqB,EAAE,CAAA;IACxC,QAAQ,CAAC,mBAAmB,EAAE,CAAA;IAC9B,uBAAuB,CAAC,gBAAgB,CAAC,CAAA;AAC3C,CAAC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import type { Locator, Page } from '@playwright/test';
|
|
2
|
+
import type { RedactHandle, RedactOptions } from './types.js';
|
|
3
|
+
import { type ResolvedRedactStyle } from './redactController.js';
|
|
4
|
+
/** Default corner radius (px) for the mask. */
|
|
5
|
+
export declare const DEFAULT_REDACT_RADIUS = 12;
|
|
6
|
+
/** Default mask shadow. Reads as a raised chip so a redaction is obvious. */
|
|
7
|
+
export declare const DEFAULT_REDACT_SHADOW = "0 2px 8px rgba(0,0,0,0.25)";
|
|
8
|
+
/**
|
|
9
|
+
* How long `redact()` waits for at least one matching element before masking,
|
|
10
|
+
* so a redact issued just before the element renders does not silently no-op.
|
|
11
|
+
*/
|
|
12
|
+
export declare const REDACT_ATTACH_TIMEOUT_MS = 5000;
|
|
13
|
+
/**
|
|
14
|
+
* Resolve user-facing {@link RedactOptions} to the concrete pixel values the
|
|
15
|
+
* in-page controller applies. Pure (no page access), so it is unit-testable on
|
|
16
|
+
* its own.
|
|
17
|
+
*/
|
|
18
|
+
export declare function resolveRedactStyle(options?: RedactOptions): ResolvedRedactStyle;
|
|
19
|
+
/**
|
|
20
|
+
* Make sure the in-page controller is installed. `addInitScript` covers every
|
|
21
|
+
* future document (registered once per recording); the extra `evaluate` covers
|
|
22
|
+
* the document that is already open when `redact()` is first called. Both are
|
|
23
|
+
* idempotent.
|
|
24
|
+
*/
|
|
25
|
+
export declare function ensureRedactControllerInstalled(page: Page): Promise<void>;
|
|
26
|
+
/**
|
|
27
|
+
* Install the in-page controller on a freshly created page, before its first
|
|
28
|
+
* navigation, so masks apply from the first painted frame. Also registers the
|
|
29
|
+
* `recordOptions.redact` first-paint selectors. Called once per page from the
|
|
30
|
+
* video fixture; the runtime flag is set on the passed context (which is not yet
|
|
31
|
+
* the active context at page-creation time).
|
|
32
|
+
*/
|
|
33
|
+
export declare function installRedactController(page: Page, redactState: {
|
|
34
|
+
controllerInstalled: boolean;
|
|
35
|
+
}, configSelectors?: string[]): Promise<void>;
|
|
36
|
+
/**
|
|
37
|
+
* Mask the element(s) matched by `locator` so the content never enters the
|
|
38
|
+
* recording. The mask is applied client side in the live DOM, so the obscured
|
|
39
|
+
* pixels are never captured and never uploaded to screenci. This is true
|
|
40
|
+
* redaction, unlike {@link cover}, which only hides content in the published
|
|
41
|
+
* output.
|
|
42
|
+
*
|
|
43
|
+
* To hide a secret that is already on screen without a visible flash, register
|
|
44
|
+
* the mask before revealing it (inside `hide()` or via the `recordOptions.redact`
|
|
45
|
+
* config for always-secret elements).
|
|
46
|
+
*
|
|
47
|
+
* @example Persistent
|
|
48
|
+
* ```ts
|
|
49
|
+
* const handle = await redact(page.getByTestId('api-key'))
|
|
50
|
+
* // ... later
|
|
51
|
+
* await handle.unredact()
|
|
52
|
+
* ```
|
|
53
|
+
*
|
|
54
|
+
* @example Scoped
|
|
55
|
+
* ```ts
|
|
56
|
+
* await redact(page.getByTestId('balance'), async () => {
|
|
57
|
+
* await page.getByRole('button', { name: 'Reveal' }).click()
|
|
58
|
+
* })
|
|
59
|
+
* ```
|
|
60
|
+
*/
|
|
61
|
+
export declare function redact(locator: Locator, options?: RedactOptions): Promise<RedactHandle>;
|
|
62
|
+
export declare function redact(locator: Locator, fn: () => Promise<void> | void, options?: RedactOptions): Promise<void>;
|
|
63
|
+
/**
|
|
64
|
+
* Remove every active mask. Called automatically at the end of each recording
|
|
65
|
+
* so masks never leak across recordings that share a browser worker.
|
|
66
|
+
*/
|
|
67
|
+
export declare function unredactAll(): Promise<void>;
|
|
68
|
+
//# sourceMappingURL=redact.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redact.d.ts","sourceRoot":"","sources":["../../src/redact.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC7D,OAAO,EAIL,KAAK,mBAAmB,EACzB,MAAM,uBAAuB,CAAA;AAI9B,+CAA+C;AAC/C,eAAO,MAAM,qBAAqB,KAAK,CAAA;AACvC,6EAA6E;AAC7E,eAAO,MAAM,qBAAqB,+BAA+B,CAAA;AAEjE;;;GAGG;AACH,eAAO,MAAM,wBAAwB,OAAO,CAAA;AAE5C;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,CAAC,EAAE,aAAa,GACtB,mBAAmB,CAUrB;AAWD;;;;;GAKG;AACH,wBAAsB,+BAA+B,CACnD,IAAI,EAAE,IAAI,GACT,OAAO,CAAC,IAAI,CAAC,CAOf;AAED;;;;;;GAMG;AACH,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,IAAI,EACV,WAAW,EAAE;IAAE,mBAAmB,EAAE,OAAO,CAAA;CAAE,EAC7C,eAAe,CAAC,EAAE,MAAM,EAAE,GACzB,OAAO,CAAC,IAAI,CAAC,CASf;AAqDD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,MAAM,CACpB,OAAO,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,YAAY,CAAC,CAAA;AACxB,wBAAgB,MAAM,CACpB,OAAO,EAAE,OAAO,EAChB,EAAE,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,EAC9B,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,IAAI,CAAC,CAAA;AAkBhB;;;GAGG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAYjD"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { redactApplyConfigSelectors, redactControllerBootstrap, } from './redactController.js';
|
|
2
|
+
import { getRuntimePage, getRuntimeRedactState } from './runtimeContext.js';
|
|
3
|
+
import { logger } from './logger.js';
|
|
4
|
+
/** Default corner radius (px) for the mask. */
|
|
5
|
+
export const DEFAULT_REDACT_RADIUS = 12;
|
|
6
|
+
/** Default mask shadow. Reads as a raised chip so a redaction is obvious. */
|
|
7
|
+
export const DEFAULT_REDACT_SHADOW = '0 2px 8px rgba(0,0,0,0.25)';
|
|
8
|
+
/**
|
|
9
|
+
* How long `redact()` waits for at least one matching element before masking,
|
|
10
|
+
* so a redact issued just before the element renders does not silently no-op.
|
|
11
|
+
*/
|
|
12
|
+
export const REDACT_ATTACH_TIMEOUT_MS = 5000;
|
|
13
|
+
/**
|
|
14
|
+
* Resolve user-facing {@link RedactOptions} to the concrete pixel values the
|
|
15
|
+
* in-page controller applies. Pure (no page access), so it is unit-testable on
|
|
16
|
+
* its own.
|
|
17
|
+
*/
|
|
18
|
+
export function resolveRedactStyle(options) {
|
|
19
|
+
const style = options?.style;
|
|
20
|
+
return {
|
|
21
|
+
// null means "sample a color from underneath" in the page.
|
|
22
|
+
color: style?.color ?? null,
|
|
23
|
+
radiusPx: style?.radius ?? DEFAULT_REDACT_RADIUS,
|
|
24
|
+
shadow: style?.shadow === false ? null : (style?.shadow ?? DEFAULT_REDACT_SHADOW),
|
|
25
|
+
css: style?.css ?? null,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
let redactCounter = 0;
|
|
29
|
+
function nextRedactId() {
|
|
30
|
+
redactCounter += 1;
|
|
31
|
+
return `__screenci_redact_${redactCounter}`;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Make sure the in-page controller is installed. `addInitScript` covers every
|
|
35
|
+
* future document (registered once per recording); the extra `evaluate` covers
|
|
36
|
+
* the document that is already open when `redact()` is first called. Both are
|
|
37
|
+
* idempotent.
|
|
38
|
+
*/
|
|
39
|
+
export async function ensureRedactControllerInstalled(page) {
|
|
40
|
+
const state = getRuntimeRedactState();
|
|
41
|
+
if (!state.controllerInstalled) {
|
|
42
|
+
await page.addInitScript(redactControllerBootstrap);
|
|
43
|
+
state.controllerInstalled = true;
|
|
44
|
+
}
|
|
45
|
+
await page.evaluate(redactControllerBootstrap);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Install the in-page controller on a freshly created page, before its first
|
|
49
|
+
* navigation, so masks apply from the first painted frame. Also registers the
|
|
50
|
+
* `recordOptions.redact` first-paint selectors. Called once per page from the
|
|
51
|
+
* video fixture; the runtime flag is set on the passed context (which is not yet
|
|
52
|
+
* the active context at page-creation time).
|
|
53
|
+
*/
|
|
54
|
+
export async function installRedactController(page, redactState, configSelectors) {
|
|
55
|
+
await page.addInitScript(redactControllerBootstrap);
|
|
56
|
+
redactState.controllerInstalled = true;
|
|
57
|
+
if (configSelectors && configSelectors.length > 0) {
|
|
58
|
+
await page.addInitScript(redactApplyConfigSelectors, {
|
|
59
|
+
selectors: configSelectors,
|
|
60
|
+
style: resolveRedactStyle(),
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
async function applyRedact(locator, options) {
|
|
65
|
+
const page = locator.page();
|
|
66
|
+
const resolved = resolveRedactStyle(options);
|
|
67
|
+
const id = nextRedactId();
|
|
68
|
+
await ensureRedactControllerInstalled(page);
|
|
69
|
+
// Wait for at least one match so a redact issued a beat before the element
|
|
70
|
+
// renders still masks it instead of silently doing nothing.
|
|
71
|
+
try {
|
|
72
|
+
await locator
|
|
73
|
+
.first()
|
|
74
|
+
.waitFor({ state: 'attached', timeout: REDACT_ATTACH_TIMEOUT_MS });
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
logger.warn('[screenci] redact() found no matching element to mask. The selector may be wrong or the element may not have rendered yet.');
|
|
78
|
+
}
|
|
79
|
+
// Register inside the page so the controller receives the real elements
|
|
80
|
+
// (this pierces shadow DOM, which a selector re-query could not). The
|
|
81
|
+
// controller positions the mask synchronously here, so no unmasked frame
|
|
82
|
+
// escapes once this resolves.
|
|
83
|
+
await locator.evaluateAll((elements, arg) => {
|
|
84
|
+
const api = window.__screenci_redact;
|
|
85
|
+
if (api)
|
|
86
|
+
api.addElements(arg.id, elements, arg.style);
|
|
87
|
+
}, { id, style: resolved });
|
|
88
|
+
getRuntimeRedactState().activeMasks.set(id, resolved);
|
|
89
|
+
return {
|
|
90
|
+
async unredact() {
|
|
91
|
+
getRuntimeRedactState().activeMasks.delete(id);
|
|
92
|
+
try {
|
|
93
|
+
await page.evaluate((maskId) => {
|
|
94
|
+
const api = window.__screenci_redact;
|
|
95
|
+
if (api)
|
|
96
|
+
api.remove(maskId);
|
|
97
|
+
}, id);
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
// The page may already be closing; the mask dies with it.
|
|
101
|
+
}
|
|
102
|
+
},
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
export async function redact(locator, optionsOrFn, maybeOptions) {
|
|
106
|
+
if (typeof optionsOrFn === 'function') {
|
|
107
|
+
const handle = await applyRedact(locator, maybeOptions);
|
|
108
|
+
try {
|
|
109
|
+
await optionsOrFn();
|
|
110
|
+
}
|
|
111
|
+
finally {
|
|
112
|
+
await handle.unredact();
|
|
113
|
+
}
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
return applyRedact(locator, optionsOrFn);
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Remove every active mask. Called automatically at the end of each recording
|
|
120
|
+
* so masks never leak across recordings that share a browser worker.
|
|
121
|
+
*/
|
|
122
|
+
export async function unredactAll() {
|
|
123
|
+
getRuntimeRedactState().activeMasks.clear();
|
|
124
|
+
const page = getRuntimePage();
|
|
125
|
+
if (!page)
|
|
126
|
+
return;
|
|
127
|
+
try {
|
|
128
|
+
await page.evaluate(() => {
|
|
129
|
+
const api = window.__screenci_redact;
|
|
130
|
+
if (api)
|
|
131
|
+
api.clear();
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
catch {
|
|
135
|
+
// Best effort; the page may already be closing.
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=redact.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redact.js","sourceRoot":"","sources":["../../src/redact.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-page redaction controller.
|
|
3
|
+
*
|
|
4
|
+
* screenci records the live browser page, so the only way to keep a secret out
|
|
5
|
+
* of `recording.mp4` (and therefore out of the upload) is to mask it in the DOM
|
|
6
|
+
* before Chrome captures the frame. This module is the browser-side half: a
|
|
7
|
+
* self-contained controller installed via `addInitScript` that covers target
|
|
8
|
+
* elements with an opaque panel (by default tinted to match the surface beneath
|
|
9
|
+
* them), tracking their position every animation frame so the mask follows
|
|
10
|
+
* scroll, layout, and animation.
|
|
11
|
+
*
|
|
12
|
+
* The functions here are serialized and shipped to the page by Playwright, so
|
|
13
|
+
* they must not reference anything outside their own bodies.
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* A redact style resolved to concrete pixel values, ready to apply in the page.
|
|
17
|
+
* `RedactStyle` (the user-facing option) is resolved to this by
|
|
18
|
+
* `resolveRedactStyle` in `redact.ts`.
|
|
19
|
+
*/
|
|
20
|
+
export type ResolvedRedactStyle = {
|
|
21
|
+
/** Fixed fill color, or null to sample one from underneath in the page. */
|
|
22
|
+
color: string | null;
|
|
23
|
+
radiusPx: number;
|
|
24
|
+
shadow: string | null;
|
|
25
|
+
/** Extra CSS for the mask panel, or null. */
|
|
26
|
+
css: string | null;
|
|
27
|
+
};
|
|
28
|
+
/** Window global exposed by the controller for the Node side to drive. */
|
|
29
|
+
export type RedactWindowApi = {
|
|
30
|
+
/** Mask specific element handles (used by runtime `redact`; pierces shadow DOM). */
|
|
31
|
+
addElements: (id: string, elements: Element[], style: ResolvedRedactStyle) => void;
|
|
32
|
+
/** Mask everything matching a CSS selector, re-queried each frame. */
|
|
33
|
+
addSelector: (id: string, selector: string, style: ResolvedRedactStyle) => void;
|
|
34
|
+
/** Remove a mask by id, restoring the element. */
|
|
35
|
+
remove: (id: string) => void;
|
|
36
|
+
/** Remove every mask. */
|
|
37
|
+
clear: () => void;
|
|
38
|
+
};
|
|
39
|
+
/** Attribute stamped on elements masked by a runtime `redact` call. */
|
|
40
|
+
export declare const REDACT_ID_ATTRIBUTE = "data-screenci-redact-id";
|
|
41
|
+
/** Id of the fixed-position container that holds every tint div. */
|
|
42
|
+
export declare const REDACT_ROOT_ID = "__screenci_redact_root";
|
|
43
|
+
/** Name of the window global the controller installs. */
|
|
44
|
+
export declare const REDACT_WINDOW_KEY = "__screenci_redact";
|
|
45
|
+
/**
|
|
46
|
+
* The controller bootstrap. Runs in the page (via `addInitScript`) on every
|
|
47
|
+
* document. Idempotent: a second run is a no-op, so it is safe to inject more
|
|
48
|
+
* than once.
|
|
49
|
+
*/
|
|
50
|
+
export declare function redactControllerBootstrap(): void;
|
|
51
|
+
/**
|
|
52
|
+
* Init script that masks the configured first-paint selectors. Registered after
|
|
53
|
+
* the bootstrap so `window.__screenci_redact` already exists. A CSS rule hides
|
|
54
|
+
* matches the instant they paint (race free, no JS timing), and the controller
|
|
55
|
+
* lays the opaque panel over them a frame later.
|
|
56
|
+
*/
|
|
57
|
+
export declare function redactApplyConfigSelectors(config: {
|
|
58
|
+
selectors: string[];
|
|
59
|
+
style: ResolvedRedactStyle;
|
|
60
|
+
}): void;
|
|
61
|
+
//# sourceMappingURL=redactController.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redactController.d.ts","sourceRoot":"","sources":["../../src/redactController.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH;;;;GAIG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,2EAA2E;IAC3E,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,6CAA6C;IAC7C,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;CACnB,CAAA;AAED,0EAA0E;AAC1E,MAAM,MAAM,eAAe,GAAG;IAC5B,oFAAoF;IACpF,WAAW,EAAE,CACX,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,OAAO,EAAE,EACnB,KAAK,EAAE,mBAAmB,KACvB,IAAI,CAAA;IACT,sEAAsE;IACtE,WAAW,EAAE,CACX,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,mBAAmB,KACvB,IAAI,CAAA;IACT,kDAAkD;IAClD,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IAC5B,yBAAyB;IACzB,KAAK,EAAE,MAAM,IAAI,CAAA;CAClB,CAAA;AAED,uEAAuE;AACvE,eAAO,MAAM,mBAAmB,4BAA4B,CAAA;AAE5D,oEAAoE;AACpE,eAAO,MAAM,cAAc,2BAA2B,CAAA;AAEtD,yDAAyD;AACzD,eAAO,MAAM,iBAAiB,sBAAsB,CAAA;AAEpD;;;;GAIG;AACH,wBAAgB,yBAAyB,IAAI,IAAI,CAiMhD;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE;IACjD,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,KAAK,EAAE,mBAAmB,CAAA;CAC3B,GAAG,IAAI,CA0BP"}
|