@uxbertlabs/reportly 1.0.30 → 1.0.32
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/components/ReportlyProvider.d.ts.map +1 -1
- package/dist/features/screenshot.d.ts +24 -1
- package/dist/features/screenshot.d.ts.map +1 -1
- package/dist/index.cjs.js +82 -4
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.esm.js +82 -4
- package/dist/index.esm.js.map +1 -1
- package/dist/index.min.js +2 -2
- package/dist/index.min.js.map +1 -1
- package/dist/types.d.ts +19 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReportlyProvider.d.ts","sourceRoot":"","sources":["../../src/components/ReportlyProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAyC,SAAS,EAAwB,MAAM,OAAO,CAAC;AACtG,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AACzF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAI/D,OAAO,iBAAiB,MAAM,wBAAwB,CAAC;AAEvD,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,UAAU,GAAG,UAAU,CAAC;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,cAAc,CAAC;CACxB;AAmED,UAAU,mBAAmB;IAC3B,KAAK,EAAE,aAAa,CAAC;IACrB,iBAAiB,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC5C,oBAAoB,EAAE,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI,KAAK,IAAI,CAAC;IAClE,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,iBAAiB,EAAE,CAAC,IAAI,CAAC,EAAE,UAAU,GAAG,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrE,gBAAgB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,OAAO,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;IACxC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,WAAW,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,IAAI,CAAC;IAC5C,WAAW,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;IAC5D,YAAY,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IAC7C,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;IACxD,gBAAgB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/C,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAID,UAAU,qBAAqB;IAC7B,QAAQ,EAAE,SAAS,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;CAClC;AAED,wBAAgB,gBAAgB,CAAC,EAAE,QAAQ,EAAE,MAAW,EAAE,EAAE,qBAAqB,
|
|
1
|
+
{"version":3,"file":"ReportlyProvider.d.ts","sourceRoot":"","sources":["../../src/components/ReportlyProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAyC,SAAS,EAAwB,MAAM,OAAO,CAAC;AACtG,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AACzF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAI/D,OAAO,iBAAiB,MAAM,wBAAwB,CAAC;AAEvD,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,UAAU,GAAG,UAAU,CAAC;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,cAAc,CAAC;CACxB;AAmED,UAAU,mBAAmB;IAC3B,KAAK,EAAE,aAAa,CAAC;IACrB,iBAAiB,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC5C,oBAAoB,EAAE,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI,KAAK,IAAI,CAAC;IAClE,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,iBAAiB,EAAE,CAAC,IAAI,CAAC,EAAE,UAAU,GAAG,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrE,gBAAgB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,OAAO,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;IACxC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,WAAW,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,IAAI,CAAC;IAC5C,WAAW,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;IAC5D,YAAY,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IAC7C,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;IACxD,gBAAgB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/C,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAID,UAAU,qBAAqB;IAC7B,QAAQ,EAAE,SAAS,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;CAClC;AAED,wBAAgB,gBAAgB,CAAC,EAAE,QAAQ,EAAE,MAAW,EAAE,EAAE,qBAAqB,qBAiMhF;AAED,wBAAgB,WAAW,IAAI,mBAAmB,CAMjD"}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
|
+
import type { ScreenshotHooks } from "../types";
|
|
1
2
|
declare class Screenshot {
|
|
2
3
|
private currentScreenshot;
|
|
3
4
|
private captureDelay;
|
|
4
|
-
|
|
5
|
+
private hooks;
|
|
6
|
+
private quality;
|
|
7
|
+
private format;
|
|
8
|
+
constructor(hooks?: ScreenshotHooks, captureDelay?: number, quality?: number, format?: "png" | "jpeg" | "webp");
|
|
5
9
|
/**
|
|
6
10
|
* Wait for specified milliseconds
|
|
7
11
|
*/
|
|
@@ -36,6 +40,25 @@ declare class Screenshot {
|
|
|
36
40
|
* Get the current capture delay
|
|
37
41
|
*/
|
|
38
42
|
getCaptureDelay(): number;
|
|
43
|
+
/**
|
|
44
|
+
* Update screenshot hooks dynamically
|
|
45
|
+
* @param hooks - New hooks configuration
|
|
46
|
+
*/
|
|
47
|
+
setHooks(hooks: ScreenshotHooks): void;
|
|
48
|
+
/**
|
|
49
|
+
* Get current hooks configuration
|
|
50
|
+
*/
|
|
51
|
+
getHooks(): ScreenshotHooks;
|
|
52
|
+
/**
|
|
53
|
+
* Set screenshot format
|
|
54
|
+
* @param format - Image format (png, jpeg, webp)
|
|
55
|
+
*/
|
|
56
|
+
setFormat(format: "png" | "jpeg" | "webp"): void;
|
|
57
|
+
/**
|
|
58
|
+
* Set screenshot quality (for JPEG/WebP)
|
|
59
|
+
* @param quality - Quality between 0 and 1
|
|
60
|
+
*/
|
|
61
|
+
setQuality(quality: number): void;
|
|
39
62
|
getScreenshot(): string | null;
|
|
40
63
|
clear(): void;
|
|
41
64
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screenshot.d.ts","sourceRoot":"","sources":["../../src/features/screenshot.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"screenshot.d.ts","sourceRoot":"","sources":["../../src/features/screenshot.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAyB,MAAM,UAAU,CAAC;AAEvE,cAAM,UAAU;IACd,OAAO,CAAC,iBAAiB,CAAgB;IACzC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,MAAM,CAAkC;gBAEpC,KAAK,CAAC,EAAE,eAAe,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM;IAQ9G;;OAEG;IACH,OAAO,CAAC,IAAI;IAIZ;;OAEG;YACW,gBAAgB;IAc9B;;OAEG;YACW,aAAa;IAgB3B;;OAEG;YACW,YAAY;IAc1B;;OAEG;IACH,OAAO,CAAC,WAAW;IAKb,OAAO,CAAC,IAAI,GAAE,UAAU,GAAG,UAAuB,GAAG,OAAO,CAAC,MAAM,CAAC;IAuO1E,OAAO,CAAC,kBAAkB;IAS1B,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,iBAAiB;IA6DzB,OAAO,CAAC,iBAAiB;IAOzB;;;OAGG;IACH,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAIjC;;OAEG;IACH,eAAe,IAAI,MAAM;IAIzB;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI;IAItC;;OAEG;IACH,QAAQ,IAAI,eAAe;IAI3B;;;OAGG;IACH,SAAS,CAAC,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI;IAIhD;;;OAGG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIjC,aAAa,IAAI,MAAM,GAAG,IAAI;IAI9B,KAAK,IAAI,IAAI;CAGd;AAED,eAAe,UAAU,CAAC"}
|
package/dist/index.cjs.js
CHANGED
|
@@ -9301,9 +9301,16 @@ var parseBackgroundColor = function (context, element, backgroundColorOverride)
|
|
|
9301
9301
|
|
|
9302
9302
|
// Screenshot capture using html2canvas
|
|
9303
9303
|
class Screenshot {
|
|
9304
|
-
constructor() {
|
|
9304
|
+
constructor(hooks, captureDelay, quality, format) {
|
|
9305
9305
|
this.captureDelay = 500; // Default delay before capture
|
|
9306
|
+
this.hooks = {};
|
|
9307
|
+
this.quality = 0.95; // Default quality for JPEG/WebP
|
|
9308
|
+
this.format = "png"; // Default format
|
|
9306
9309
|
this.currentScreenshot = null;
|
|
9310
|
+
if (hooks) this.hooks = hooks;
|
|
9311
|
+
if (captureDelay !== undefined) this.captureDelay = captureDelay;
|
|
9312
|
+
if (quality !== undefined) this.quality = quality;
|
|
9313
|
+
if (format) this.format = format;
|
|
9307
9314
|
}
|
|
9308
9315
|
/**
|
|
9309
9316
|
* Wait for specified milliseconds
|
|
@@ -9368,7 +9375,15 @@ class Screenshot {
|
|
|
9368
9375
|
document.body.offsetHeight;
|
|
9369
9376
|
}
|
|
9370
9377
|
async capture(mode = "fullpage") {
|
|
9378
|
+
const context = {
|
|
9379
|
+
mode,
|
|
9380
|
+
timestamp: Date.now()
|
|
9381
|
+
};
|
|
9371
9382
|
try {
|
|
9383
|
+
// Hook: onCaptureStart - notify that capture is starting
|
|
9384
|
+
if (this.hooks.onCaptureStart) {
|
|
9385
|
+
await Promise.resolve(this.hooks.onCaptureStart(context));
|
|
9386
|
+
}
|
|
9372
9387
|
// Show loading screen immediately (before hiding UI)
|
|
9373
9388
|
this.showLoadingScreen();
|
|
9374
9389
|
// Wait for DOM to stabilize, animations to complete, and assets to load
|
|
@@ -9378,6 +9393,10 @@ class Screenshot {
|
|
|
9378
9393
|
this.hideUXbertElements();
|
|
9379
9394
|
// Force a reflow to ensure all styles are computed
|
|
9380
9395
|
this.forceReflow();
|
|
9396
|
+
// Hook: beforeCapture - allow developers to modify DOM before capture
|
|
9397
|
+
if (this.hooks.beforeCapture) {
|
|
9398
|
+
await Promise.resolve(this.hooks.beforeCapture(context));
|
|
9399
|
+
}
|
|
9381
9400
|
let canvas;
|
|
9382
9401
|
if (mode === "viewport") {
|
|
9383
9402
|
// Capture only the current viewport
|
|
@@ -9512,13 +9531,40 @@ class Screenshot {
|
|
|
9512
9531
|
}
|
|
9513
9532
|
// Show UXbert UI elements again
|
|
9514
9533
|
this.showUXbertElements();
|
|
9515
|
-
//
|
|
9516
|
-
|
|
9534
|
+
// Add canvas to context for afterCapture hook
|
|
9535
|
+
context.canvas = canvas;
|
|
9536
|
+
// Convert to base64 with configurable format and quality
|
|
9537
|
+
let screenshotData;
|
|
9538
|
+
if (this.format === "png") {
|
|
9539
|
+
screenshotData = canvas.toDataURL("image/png");
|
|
9540
|
+
} else if (this.format === "jpeg") {
|
|
9541
|
+
screenshotData = canvas.toDataURL("image/jpeg", this.quality);
|
|
9542
|
+
} else {
|
|
9543
|
+
screenshotData = canvas.toDataURL("image/webp", this.quality);
|
|
9544
|
+
}
|
|
9545
|
+
context.screenshot = screenshotData;
|
|
9546
|
+
// Hook: afterCapture - allow developers to modify the screenshot or canvas
|
|
9547
|
+
if (this.hooks.afterCapture) {
|
|
9548
|
+
const result = await Promise.resolve(this.hooks.afterCapture(context));
|
|
9549
|
+
// If hook returns a string, use it as the screenshot; otherwise use the original
|
|
9550
|
+
if (typeof result === "string" && result.length > 0) {
|
|
9551
|
+
screenshotData = result;
|
|
9552
|
+
}
|
|
9553
|
+
}
|
|
9554
|
+
this.currentScreenshot = screenshotData;
|
|
9555
|
+
// Hook: onCaptureComplete - notify that capture completed successfully
|
|
9556
|
+
if (this.hooks.onCaptureComplete) {
|
|
9557
|
+
await Promise.resolve(this.hooks.onCaptureComplete(context));
|
|
9558
|
+
}
|
|
9517
9559
|
return this.currentScreenshot;
|
|
9518
9560
|
} catch (error) {
|
|
9519
9561
|
console.error("Screenshot capture failed:", error);
|
|
9520
9562
|
this.hideLoadingScreen();
|
|
9521
9563
|
this.showUXbertElements();
|
|
9564
|
+
// Hook: onCaptureError - notify about the error
|
|
9565
|
+
if (this.hooks.onCaptureError) {
|
|
9566
|
+
await Promise.resolve(this.hooks.onCaptureError(error, context));
|
|
9567
|
+
}
|
|
9522
9568
|
throw error;
|
|
9523
9569
|
}
|
|
9524
9570
|
}
|
|
@@ -9615,6 +9661,38 @@ class Screenshot {
|
|
|
9615
9661
|
getCaptureDelay() {
|
|
9616
9662
|
return this.captureDelay;
|
|
9617
9663
|
}
|
|
9664
|
+
/**
|
|
9665
|
+
* Update screenshot hooks dynamically
|
|
9666
|
+
* @param hooks - New hooks configuration
|
|
9667
|
+
*/
|
|
9668
|
+
setHooks(hooks) {
|
|
9669
|
+
this.hooks = {
|
|
9670
|
+
...this.hooks,
|
|
9671
|
+
...hooks
|
|
9672
|
+
};
|
|
9673
|
+
}
|
|
9674
|
+
/**
|
|
9675
|
+
* Get current hooks configuration
|
|
9676
|
+
*/
|
|
9677
|
+
getHooks() {
|
|
9678
|
+
return {
|
|
9679
|
+
...this.hooks
|
|
9680
|
+
};
|
|
9681
|
+
}
|
|
9682
|
+
/**
|
|
9683
|
+
* Set screenshot format
|
|
9684
|
+
* @param format - Image format (png, jpeg, webp)
|
|
9685
|
+
*/
|
|
9686
|
+
setFormat(format) {
|
|
9687
|
+
this.format = format;
|
|
9688
|
+
}
|
|
9689
|
+
/**
|
|
9690
|
+
* Set screenshot quality (for JPEG/WebP)
|
|
9691
|
+
* @param quality - Quality between 0 and 1
|
|
9692
|
+
*/
|
|
9693
|
+
setQuality(quality) {
|
|
9694
|
+
this.quality = Math.max(0, Math.min(quality, 1));
|
|
9695
|
+
}
|
|
9618
9696
|
getScreenshot() {
|
|
9619
9697
|
return this.currentScreenshot;
|
|
9620
9698
|
}
|
|
@@ -9738,7 +9816,7 @@ function ReportlyProvider({
|
|
|
9738
9816
|
// Initialize services with useMemo to ensure they're only created once and support SSR
|
|
9739
9817
|
const deviceInfo = React.useMemo(() => new DeviceInfo(), []);
|
|
9740
9818
|
const exportService = React.useMemo(() => new Export(config.integrations?.n8n), [config.integrations?.n8n]);
|
|
9741
|
-
const screenshot = React.useMemo(() => new Screenshot(), []);
|
|
9819
|
+
const screenshot = React.useMemo(() => new Screenshot(config.screenshot?.hooks, config.screenshot?.captureDelay, config.screenshot?.quality, config.screenshot?.format), [config.screenshot?.hooks, config.screenshot?.captureDelay, config.screenshot?.quality, config.screenshot?.format]);
|
|
9742
9820
|
const openModal = React.useCallback(() => {
|
|
9743
9821
|
dispatch({
|
|
9744
9822
|
type: "OPEN_MODAL"
|