@skrillex1224/playwright-toolkit 2.1.233 → 2.1.234

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/index.cjs CHANGED
@@ -312,6 +312,7 @@ var ActorInfo = {
312
312
  name: "\u901A\u4E49\u5343\u95EE",
313
313
  domain: "www.qianwen.com",
314
314
  path: "/chat",
315
+ device: Device.Mobile,
315
316
  share: {
316
317
  mode: "response",
317
318
  prefix: "https://www.qianwen.com/share/chat/",
@@ -469,6 +470,9 @@ function createInternalLogger(moduleName, explicitLogger) {
469
470
  // src/internals/screenshot.js
470
471
  var import_delay = __toESM(require("delay"), 1);
471
472
 
473
+ // src/internals/constants.js
474
+ var PageRuntimeStateKey = "__playwright_toolkit_runtime_state__";
475
+
472
476
  // src/internals/viewport.js
473
477
  var toPositiveInt = (value) => {
474
478
  const number = Math.round(Number(value) || 0);
@@ -505,6 +509,7 @@ var SUPPORTED_TYPES = /* @__PURE__ */ new Set(["png", "jpeg", "webp"]);
505
509
  var EXPANDED_SCROLLABLE_CLASS = "__pk_expanded__";
506
510
  var DEFAULT_MAX_HEIGHT = 8e3;
507
511
  var DEFAULT_SETTLE_MS = 1e3;
512
+ var DEFAULT_MOBILE_SETTLE_MS = 50;
508
513
  var toPositiveNumber = (value, fallback = 0) => {
509
514
  const n = Number(value);
510
515
  if (!Number.isFinite(n) || n <= 0) return fallback;
@@ -527,6 +532,7 @@ var normalizeQuality = (value, type) => {
527
532
  if (rounded < 0 || rounded > 100) return void 0;
528
533
  return rounded;
529
534
  };
535
+ var resolvePageDevice = (page) => normalizeDevice(page?.[PageRuntimeStateKey]?.device);
530
536
  var buildFullPageClip = (metrics, viewport, maxClipHeight) => {
531
537
  const contentSize = metrics && typeof metrics === "object" ? metrics.contentSize || null : null;
532
538
  const width = Math.max(1, Math.ceil(viewport.width || contentSize?.width || 1));
@@ -543,7 +549,7 @@ var buildFullPageClip = (metrics, viewport, maxClipHeight) => {
543
549
  };
544
550
  };
545
551
  var expandScrollableContent = async (page, options = {}) => {
546
- return await page.evaluate(({ className, forceScrollableHeight, visibleOnly }) => {
552
+ return await page.evaluate(({ className, forceScrollableHeight, visibleOnly, expandDocumentElements }) => {
547
553
  const body = document.body;
548
554
  const root = document.documentElement;
549
555
  const scrollingElement = document.scrollingElement;
@@ -568,8 +574,8 @@ var expandScrollableContent = async (page, options = {}) => {
568
574
  if (Number(style.opacity) === 0) return false;
569
575
  return rect.width > 0 && rect.height > 0;
570
576
  };
571
- const rememberOriginalBoxStyles = (el) => {
572
- if (!el || isDocumentElement(el) || el.classList.contains(className)) {
577
+ const rememberOriginalBoxStyles = (el, { includeDocumentElement = false } = {}) => {
578
+ if (!el || !includeDocumentElement && isDocumentElement(el) || el.classList.contains(className)) {
573
579
  return;
574
580
  }
575
581
  el.dataset.pkOrigOverflow = el.style.overflow;
@@ -582,6 +588,19 @@ var expandScrollableContent = async (page, options = {}) => {
582
588
  el.dataset.pkOrigMaxHeightPriority = el.style.getPropertyPriority("max-height") || "";
583
589
  el.classList.add(className);
584
590
  };
591
+ const expandDocumentElementsToHeight = (height) => {
592
+ if (!expandDocumentElements) return;
593
+ const targetHeight = Math.ceil(Number(height) || 0);
594
+ if (targetHeight <= 0) return;
595
+ [root, body, scrollingElement].forEach((el) => {
596
+ if (!el) return;
597
+ rememberOriginalBoxStyles(el, { includeDocumentElement: true });
598
+ el.style.setProperty("overflow", "visible", "important");
599
+ el.style.setProperty("height", `${targetHeight}px`, "important");
600
+ el.style.setProperty("min-height", `${targetHeight}px`, "important");
601
+ el.style.setProperty("max-height", "none", "important");
602
+ });
603
+ };
585
604
  const isScrollableY = (el, style, rect) => {
586
605
  if (!el || el.scrollHeight <= el.clientHeight + 1) {
587
606
  return false;
@@ -717,38 +736,61 @@ var expandScrollableContent = async (page, options = {}) => {
717
736
  }
718
737
  });
719
738
  maxHeight = Math.max(maxHeight, measureDocumentScrollHeight(), measureExpandedRenderedBottom());
739
+ if (expandDocumentElements) {
740
+ for (let pass = 0; pass < 2; pass += 1) {
741
+ expandDocumentElementsToHeight(maxHeight);
742
+ maxHeight = Math.max(maxHeight, measureDocumentScrollHeight(), measureExpandedRenderedBottom());
743
+ }
744
+ }
720
745
  return Math.ceil(maxHeight);
721
746
  }, {
722
747
  className: EXPANDED_SCROLLABLE_CLASS,
723
748
  forceScrollableHeight: options.forceScrollableHeight !== false,
724
- visibleOnly: options.visibleOnly !== false
749
+ visibleOnly: options.visibleOnly !== false,
750
+ expandDocumentElements: options.expandDocumentElements === true
725
751
  });
726
752
  };
727
753
  var prepareExpandedFullPageScreenshot = async (page, options = {}) => {
728
754
  const originalViewport = await resolveCurrentViewportSize(page);
729
755
  const maxHeight = toPositiveInteger(options.maxHeight, DEFAULT_MAX_HEIGHT);
730
- const settleMs = Math.max(0, Number(options.settleMs ?? DEFAULT_SETTLE_MS) || 0);
756
+ const preserveViewport = options.preserveViewport ?? resolvePageDevice(page) === Device.Mobile;
757
+ const defaultSettleMs = preserveViewport ? DEFAULT_MOBILE_SETTLE_MS : DEFAULT_SETTLE_MS;
758
+ const requestedSettleMs = Math.max(0, Number(options.settleMs ?? defaultSettleMs) || 0);
759
+ const settleMs = preserveViewport ? Math.min(requestedSettleMs, DEFAULT_MOBILE_SETTLE_MS) : requestedSettleMs;
731
760
  const maxScrollHeight = await expandScrollableContent(page, {
732
761
  forceScrollableHeight: options.forceScrollableHeight,
733
- visibleOnly: options.visibleOnly !== false
762
+ visibleOnly: options.visibleOnly !== false,
763
+ expandDocumentElements: preserveViewport
734
764
  });
735
765
  const targetHeight = Math.min(maxScrollHeight, maxHeight);
736
- await page.setViewportSize({
737
- width: originalViewport.width,
738
- height: targetHeight
739
- });
766
+ let viewportResized = false;
767
+ if (!preserveViewport) {
768
+ await page.setViewportSize({
769
+ width: originalViewport.width,
770
+ height: targetHeight
771
+ });
772
+ viewportResized = true;
773
+ }
740
774
  if (settleMs > 0) {
741
775
  await (0, import_delay.default)(settleMs);
742
776
  }
743
777
  return {
744
778
  originalViewport,
745
779
  maxScrollHeight,
746
- targetHeight
780
+ targetHeight,
781
+ preserveViewport,
782
+ viewportResized
747
783
  };
748
784
  };
749
785
  var restoreExpandedFullPageScreenshot = async (page, state = {}) => {
750
786
  await page.evaluate((className) => {
751
- document.querySelectorAll(`.${className}`).forEach((el) => {
787
+ const targets = new Set([
788
+ ...document.querySelectorAll(`.${className}`),
789
+ document.documentElement,
790
+ document.body,
791
+ document.scrollingElement
792
+ ].filter((el) => el?.classList?.contains(className)));
793
+ targets.forEach((el) => {
752
794
  el.style.setProperty("overflow", el.dataset.pkOrigOverflow || "", el.dataset.pkOrigOverflowPriority || "");
753
795
  el.style.setProperty("height", el.dataset.pkOrigHeight || "", el.dataset.pkOrigHeightPriority || "");
754
796
  el.style.setProperty("min-height", el.dataset.pkOrigMinHeight || "", el.dataset.pkOrigMinHeightPriority || "");
@@ -764,7 +806,7 @@ var restoreExpandedFullPageScreenshot = async (page, state = {}) => {
764
806
  el.classList.remove(className);
765
807
  });
766
808
  }, EXPANDED_SCROLLABLE_CLASS);
767
- if (state?.originalViewport) {
809
+ if (state?.originalViewport && state?.viewportResized) {
768
810
  await page.setViewportSize(state.originalViewport);
769
811
  }
770
812
  };
@@ -1262,9 +1304,6 @@ var ProxyMeterRuntime = {
1262
1304
  getProxyMeterSnapshot
1263
1305
  };
1264
1306
 
1265
- // src/internals/constants.js
1266
- var PageRuntimeStateKey = "__playwright_toolkit_runtime_state__";
1267
-
1268
1307
  // src/runtime-env.js
1269
1308
  var BROWSER_PROFILE_SCHEMA_VERSION = 1;
1270
1309
  var rememberedRuntimeState = null;
@@ -7379,11 +7418,11 @@ var resolveScreenshotWatermarkifyMeta = async (page, options = {}) => {
7379
7418
  watermark: options.watermark,
7380
7419
  strip: options.strip,
7381
7420
  stripLogoSrc,
7382
- device: resolvePageDevice(page)
7421
+ device: resolvePageDevice2(page)
7383
7422
  };
7384
7423
  };
7385
7424
  var buildFontFamily = () => 'MiSans, "SF Pro Display", "PingFang SC", "Helvetica Neue", Arial, sans-serif';
7386
- var resolvePageDevice = (page) => normalizeDevice(page?.[PageRuntimeStateKey]?.device);
7425
+ var resolvePageDevice2 = (page) => normalizeDevice(page?.[PageRuntimeStateKey]?.device);
7387
7426
  var findStripSegment = (segments, kind) => {
7388
7427
  const found = Array.isArray(segments) ? segments.find((segment) => segment?.kind === kind) : null;
7389
7428
  return found && typeof found === "object" ? found : {};