@amplifyup/sdk 0.1.20 → 0.1.22

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.
@@ -312,6 +312,7 @@ function isComposerPreview() {
312
312
  }
313
313
 
314
314
  // src/index.ts
315
+ var SESSION_IDLE_GAP_MS = 30 * 60 * 1e3;
315
316
  function readPreviewQueryOverrides() {
316
317
  if (typeof window === "undefined") return {};
317
318
  const params = new URLSearchParams(window.location.search);
@@ -378,7 +379,9 @@ var AmplifyUpSDK = class {
378
379
  reached: /* @__PURE__ */ new Set(),
379
380
  visibleMs: 0,
380
381
  visibleSince: null,
381
- lastDwellSecondsSent: 0
382
+ lastDwellSecondsSent: 0,
383
+ /** When the tab last became hidden — used for idle-resume re-page. */
384
+ hiddenAt: null
382
385
  };
383
386
  this.adapter = adapter || new AWSAdapter();
384
387
  if (typeof window !== "undefined") {
@@ -609,6 +612,7 @@ var AmplifyUpSDK = class {
609
612
  state.visibleMs = 0;
610
613
  state.visibleSince = document.visibilityState === "visible" ? Date.now() : null;
611
614
  state.lastDwellSecondsSent = 0;
615
+ state.hiddenAt = document.visibilityState === "hidden" ? Date.now() : null;
612
616
  let scrollRaf = null;
613
617
  const path = () => this.currentPath();
614
618
  const measureScrollPercent = () => {
@@ -651,12 +655,12 @@ var AmplifyUpSDK = class {
651
655
  state.visibleMs += Date.now() - state.visibleSince;
652
656
  state.visibleSince = Date.now();
653
657
  };
654
- const emitDwell = (force = false) => {
658
+ const emitDwell = (_force = false) => {
655
659
  if (this.isPreviewMode()) return;
656
660
  accumulateVisible();
657
661
  const seconds = Math.floor(state.visibleMs / 1e3);
658
662
  if (seconds <= 0) return;
659
- if (!force && seconds <= state.lastDwellSecondsSent) return;
663
+ if (seconds <= state.lastDwellSecondsSent) return;
660
664
  state.lastDwellSecondsSent = seconds;
661
665
  this.track("Time on Page", {
662
666
  seconds,
@@ -666,14 +670,34 @@ var AmplifyUpSDK = class {
666
670
  this._emitPageDwell = emitDwell;
667
671
  const onVisibility = () => {
668
672
  if (document.visibilityState === "visible") {
673
+ const idleMs = state.hiddenAt != null ? Date.now() - state.hiddenAt : 0;
674
+ state.hiddenAt = null;
675
+ if (idleMs >= SESSION_IDLE_GAP_MS) {
676
+ this.resetEngagementQuiet();
677
+ const resumePath = path();
678
+ this.page(resumePath, { resumed: true });
679
+ this.lastTrackedPath = resumePath;
680
+ if (this.config?.debug) {
681
+ console.log(
682
+ "[AmplifyUp SDK] Idle resume page view",
683
+ resumePath,
684
+ `(hidden ${Math.round(idleMs / 6e4)}m)`
685
+ );
686
+ }
687
+ }
669
688
  state.visibleSince = Date.now();
670
689
  } else {
671
690
  emitDwell(true);
691
+ state.hiddenAt = Date.now();
672
692
  state.visibleSince = null;
673
693
  }
674
694
  };
675
695
  const onPageHide = () => {
676
696
  emitDwell(true);
697
+ if (state.hiddenAt == null) {
698
+ state.hiddenAt = Date.now();
699
+ }
700
+ state.visibleSince = null;
677
701
  };
678
702
  window.addEventListener("scroll", onScroll, { passive: true });
679
703
  document.addEventListener("visibilitychange", onVisibility);
@@ -702,13 +726,19 @@ var AmplifyUpSDK = class {
702
726
  console.log("[AmplifyUp SDK] Page engagement tracking enabled");
703
727
  }
704
728
  }
729
+ /** Flush dwell then reset — used on SPA route changes. */
705
730
  resetEngagementForNewPage() {
706
731
  const emit = this._emitPageDwell;
707
732
  emit?.(true);
733
+ this.resetEngagementQuiet();
734
+ }
735
+ /** Reset dwell/scroll state without emitting (idle resume already flushed on hide). */
736
+ resetEngagementQuiet() {
708
737
  const state = this.pageEngagementState;
709
738
  state.reached = /* @__PURE__ */ new Set();
710
739
  state.visibleMs = 0;
711
740
  state.lastDwellSecondsSent = 0;
741
+ state.hiddenAt = null;
712
742
  state.visibleSince = typeof document !== "undefined" && document.visibilityState === "visible" ? Date.now() : null;
713
743
  this.componentViewSeen.clear();
714
744
  }