@merittdev/horus-lens 0.5.1 → 0.5.2

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/browser.cjs CHANGED
@@ -29082,7 +29082,7 @@ var ApiErrorSchema = external_exports.object({
29082
29082
 
29083
29083
  // ../core/dist/index.js
29084
29084
  var SDK_NAME = "@merittdev/horus-lens";
29085
- var SDK_VERSION = true ? "0.5.1" : "0.0.0-dev";
29085
+ var SDK_VERSION = true ? "0.5.2" : "0.0.0-dev";
29086
29086
  var DEFAULT_ENDPOINT = "https://api.horus.sh";
29087
29087
  var DEFAULT_REPLAY_WINDOW_MS = 15e3;
29088
29088
  var DEFAULT_MAX_CONSOLE_ENTRIES = 200;
@@ -29094,6 +29094,7 @@ var MAX_SERIALIZED_ARG_CHARS = 2e3;
29094
29094
  var MAX_DOM_BYTES = 2 * 1024 * 1024;
29095
29095
  var MAX_TARGET_TEXT_CHARS = 200;
29096
29096
  var SCREENSHOT_TIMEOUT_MS = 2e4;
29097
+ var SCREENSHOT_RESOURCE_TIMEOUT_MS = 3500;
29097
29098
  var SCREENSHOT_MAX_SCALE = 2;
29098
29099
  var SCREENSHOT_MAX_PIXELS = 25e5;
29099
29100
  var AUTO_CAPTURE_COOLDOWN_MS = 10 * 60 * 1e3;
@@ -29648,6 +29649,14 @@ var ReplayRecorder = class {
29648
29649
  }
29649
29650
  };
29650
29651
  var SVG_RASTERIZE_TIMEOUT_MS = 3e3;
29652
+ function isOffscreenMedia(node2) {
29653
+ if (!(node2 instanceof HTMLImageElement) && !(node2 instanceof HTMLIFrameElement) && !(typeof HTMLVideoElement !== "undefined" && node2 instanceof HTMLVideoElement)) {
29654
+ return false;
29655
+ }
29656
+ const r = node2.getBoundingClientRect();
29657
+ if (r.width === 0 && r.height === 0) return false;
29658
+ return r.bottom < 0 || r.top > window.innerHeight || r.right < 0 || r.left > window.innerWidth;
29659
+ }
29651
29660
  function computeCropRect(crop, scale, rasterWidth, rasterHeight) {
29652
29661
  let sx = Math.round(crop.x * scale);
29653
29662
  let sy = Math.round(crop.y * scale);
@@ -29689,12 +29698,22 @@ async function captureScreenshot(excludeHost, crop, composite) {
29689
29698
  transformOrigin: "top left"
29690
29699
  }
29691
29700
  } : {},
29692
- // Exclude the overlay from the capture CLONE — never hide the live node.
29693
- filter: (node2) => node2 !== excludeHost,
29694
- // Per-resource fetch budget: a single slow cross-origin image must not
29695
- // consume the whole capture window.
29701
+ // Exclude the overlay from the capture CLONE (never hide the live node),
29702
+ // and — for a plain viewport report — drop images/iframes entirely outside
29703
+ // the viewport so we don't fetch dozens of off-screen cross-origin assets.
29704
+ filter: (node2) => {
29705
+ if (node2 === excludeHost) return false;
29706
+ if (viewportOnly && isOffscreenMedia(node2)) return false;
29707
+ return true;
29708
+ },
29709
+ // Skip web-font download/embed. On font-heavy pages (multiple custom
29710
+ // families) this is a dominant, flaky cost; fallback fonts are fine for a
29711
+ // bug-report screenshot and capture becomes far more reliable.
29712
+ font: false,
29696
29713
  fetch: { requestInit: { cache: "force-cache" }, bypassingCache: false },
29697
- timeout: SCREENSHOT_TIMEOUT_MS - 1e3
29714
+ // PER-RESOURCE cap (NOT the overall budget): a hanging asset fails fast to
29715
+ // a placeholder instead of stalling the whole capture.
29716
+ timeout: SCREENSHOT_RESOURCE_TIMEOUT_MS
29698
29717
  });
29699
29718
  const started = Date.now();
29700
29719
  const timeout = new Promise((resolve) => {