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