@grainql/analytics-web 2.5.4 → 2.7.0

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.
Files changed (99) hide show
  1. package/README.md +3 -1
  2. package/dist/activity.js +1 -1
  3. package/dist/attention-quality.d.ts +128 -0
  4. package/dist/attention-quality.d.ts.map +1 -0
  5. package/dist/attention-quality.js +246 -0
  6. package/dist/cjs/activity.js +1 -1
  7. package/dist/cjs/activity.js.map +1 -1
  8. package/dist/cjs/attention-quality.d.ts +128 -0
  9. package/dist/cjs/attention-quality.d.ts.map +1 -0
  10. package/dist/cjs/attention-quality.js +246 -0
  11. package/dist/cjs/attention-quality.js.map +1 -0
  12. package/dist/cjs/consent.js +4 -4
  13. package/dist/cjs/consent.js.map +1 -1
  14. package/dist/cjs/heartbeat.d.ts.map +1 -1
  15. package/dist/cjs/heartbeat.js +0 -6
  16. package/dist/cjs/heartbeat.js.map +1 -1
  17. package/dist/cjs/heatmap-tracking.d.ts +93 -0
  18. package/dist/cjs/heatmap-tracking.d.ts.map +1 -0
  19. package/dist/cjs/heatmap-tracking.js +499 -0
  20. package/dist/cjs/heatmap-tracking.js.map +1 -0
  21. package/dist/cjs/index.d.ts +11 -0
  22. package/dist/cjs/index.d.ts.map +1 -1
  23. package/dist/cjs/index.js.map +1 -1
  24. package/dist/cjs/interaction-tracking.d.ts.map +1 -1
  25. package/dist/cjs/interaction-tracking.js +9 -18
  26. package/dist/cjs/interaction-tracking.js.map +1 -1
  27. package/dist/cjs/page-tracking.d.ts.map +1 -1
  28. package/dist/cjs/page-tracking.js +0 -9
  29. package/dist/cjs/page-tracking.js.map +1 -1
  30. package/dist/cjs/section-tracking.d.ts +3 -0
  31. package/dist/cjs/section-tracking.d.ts.map +1 -1
  32. package/dist/cjs/section-tracking.js +30 -7
  33. package/dist/cjs/section-tracking.js.map +1 -1
  34. package/dist/cjs/types/auto-tracking.d.ts +3 -0
  35. package/dist/cjs/types/auto-tracking.d.ts.map +1 -1
  36. package/dist/cjs/types/heatmap-tracking.d.ts +44 -0
  37. package/dist/cjs/types/heatmap-tracking.d.ts.map +1 -0
  38. package/dist/cjs/types/heatmap-tracking.js +6 -0
  39. package/dist/cjs/types/heatmap-tracking.js.map +1 -0
  40. package/dist/consent.js +4 -4
  41. package/dist/esm/activity.js +1 -1
  42. package/dist/esm/activity.js.map +1 -1
  43. package/dist/esm/attention-quality.d.ts +128 -0
  44. package/dist/esm/attention-quality.d.ts.map +1 -0
  45. package/dist/esm/attention-quality.js +242 -0
  46. package/dist/esm/attention-quality.js.map +1 -0
  47. package/dist/esm/consent.js +4 -4
  48. package/dist/esm/consent.js.map +1 -1
  49. package/dist/esm/heartbeat.d.ts.map +1 -1
  50. package/dist/esm/heartbeat.js +0 -6
  51. package/dist/esm/heartbeat.js.map +1 -1
  52. package/dist/esm/heatmap-tracking.d.ts +93 -0
  53. package/dist/esm/heatmap-tracking.d.ts.map +1 -0
  54. package/dist/esm/heatmap-tracking.js +495 -0
  55. package/dist/esm/heatmap-tracking.js.map +1 -0
  56. package/dist/esm/index.d.ts +11 -0
  57. package/dist/esm/index.d.ts.map +1 -1
  58. package/dist/esm/index.js.map +1 -1
  59. package/dist/esm/interaction-tracking.d.ts.map +1 -1
  60. package/dist/esm/interaction-tracking.js +9 -18
  61. package/dist/esm/interaction-tracking.js.map +1 -1
  62. package/dist/esm/page-tracking.d.ts.map +1 -1
  63. package/dist/esm/page-tracking.js +0 -9
  64. package/dist/esm/page-tracking.js.map +1 -1
  65. package/dist/esm/section-tracking.d.ts +3 -0
  66. package/dist/esm/section-tracking.d.ts.map +1 -1
  67. package/dist/esm/section-tracking.js +30 -7
  68. package/dist/esm/section-tracking.js.map +1 -1
  69. package/dist/esm/types/auto-tracking.d.ts +3 -0
  70. package/dist/esm/types/auto-tracking.d.ts.map +1 -1
  71. package/dist/esm/types/heatmap-tracking.d.ts +44 -0
  72. package/dist/esm/types/heatmap-tracking.d.ts.map +1 -0
  73. package/dist/esm/types/heatmap-tracking.js +5 -0
  74. package/dist/esm/types/heatmap-tracking.js.map +1 -0
  75. package/dist/heartbeat.d.ts.map +1 -1
  76. package/dist/heartbeat.js +0 -6
  77. package/dist/heatmap-tracking.d.ts +93 -0
  78. package/dist/heatmap-tracking.d.ts.map +1 -0
  79. package/dist/heatmap-tracking.js +499 -0
  80. package/dist/index.d.ts +11 -0
  81. package/dist/index.d.ts.map +1 -1
  82. package/dist/index.global.dev.js +801 -80
  83. package/dist/index.global.dev.js.map +4 -4
  84. package/dist/index.global.js +2 -2
  85. package/dist/index.global.js.map +4 -4
  86. package/dist/index.js +70 -38
  87. package/dist/index.mjs +70 -38
  88. package/dist/interaction-tracking.d.ts.map +1 -1
  89. package/dist/interaction-tracking.js +9 -18
  90. package/dist/page-tracking.d.ts.map +1 -1
  91. package/dist/page-tracking.js +0 -9
  92. package/dist/section-tracking.d.ts +3 -0
  93. package/dist/section-tracking.d.ts.map +1 -1
  94. package/dist/section-tracking.js +30 -7
  95. package/dist/types/auto-tracking.d.ts +3 -0
  96. package/dist/types/auto-tracking.d.ts.map +1 -1
  97. package/dist/types/heatmap-tracking.d.ts +44 -0
  98. package/dist/types/heatmap-tracking.d.ts.map +1 -0
  99. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"heartbeat.d.ts","sourceRoot":"","sources":["../../src/heartbeat.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,MAAM,WAAW,eAAe;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC/E,UAAU,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACvC,kBAAkB,IAAI,MAAM,CAAC;IAC7B,qBAAqB,IAAI,MAAM,CAAC;IAChC,YAAY,IAAI,MAAM,CAAC;IACvB,cAAc,IAAI,MAAM,GAAG,IAAI,CAAC;IAChC,+BAA+B,IAAI,MAAM,CAAC;IAC1C,iCAAiC,IAAI,IAAI,CAAC;CAC3C;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,wBAAwB,CAAS;gBAGvC,OAAO,EAAE,gBAAgB,EACzB,gBAAgB,EAAE,gBAAgB,EAClC,MAAM,EAAE,eAAe;IAezB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAkB7B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAyB7B;;OAEG;IACH,OAAO,CAAC,aAAa;IA2CrB;;OAEG;IACH,OAAO,IAAI,IAAI;CAchB"}
1
+ {"version":3,"file":"heartbeat.d.ts","sourceRoot":"","sources":["../../src/heartbeat.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,MAAM,WAAW,eAAe;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC/E,UAAU,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACvC,kBAAkB,IAAI,MAAM,CAAC;IAC7B,qBAAqB,IAAI,MAAM,CAAC;IAChC,YAAY,IAAI,MAAM,CAAC;IACvB,cAAc,IAAI,MAAM,GAAG,IAAI,CAAC;IAChC,+BAA+B,IAAI,MAAM,CAAC;IAC1C,iCAAiC,IAAI,IAAI,CAAC;CAC3C;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,wBAAwB,CAAS;gBAGvC,OAAO,EAAE,gBAAgB,EACzB,gBAAgB,EAAE,gBAAgB,EAClC,MAAM,EAAE,eAAe;IAezB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAkB7B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAyB7B;;OAEG;IACH,OAAO,CAAC,aAAa;IAuCrB;;OAEG;IACH,OAAO,IAAI,IAAI;CAUhB"}
@@ -93,9 +93,6 @@ export class HeartbeatManager {
93
93
  // Track the heartbeat event
94
94
  this.tracker.trackSystemEvent('_grain_heartbeat', properties);
95
95
  this.lastHeartbeatTime = now;
96
- if (this.config.debug) {
97
- console.log('[Heartbeat] Sent heartbeat:', properties);
98
- }
99
96
  }
100
97
  /**
101
98
  * Destroy the heartbeat manager
@@ -108,9 +105,6 @@ export class HeartbeatManager {
108
105
  this.heartbeatTimer = null;
109
106
  }
110
107
  this.isDestroyed = true;
111
- if (this.config.debug) {
112
- console.log('[Heartbeat] Destroyed');
113
- }
114
108
  }
115
109
  }
116
110
  //# sourceMappingURL=heartbeat.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"heartbeat.js","sourceRoot":"","sources":["../../src/heartbeat.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAqBH,MAAM,OAAO,gBAAgB;IAU3B,YACE,OAAyB,EACzB,gBAAkC,EAClC,MAAuB;QATjB,mBAAc,GAAkB,IAAI,CAAC;QACrC,gBAAW,GAAG,KAAK,CAAC;QAGpB,6BAAwB,GAAG,KAAK,CAAC;QAOvC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;QACzC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACpC,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,cAAc,CAAC;QAE7C,iEAAiE;QACjE,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAE7B,oCAAoC;QACpC,IAAI,CAAC,qBAAqB,EAAE,CAAC;IAC/B,CAAC;IAED;;OAEG;IACK,qBAAqB;QAC3B,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,wBAAwB;YAAE,OAAO;QAE9D,mCAAmC;QACnC,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,QAAQ,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;YACxE,MAAM,UAAU,GAAG,GAAG,EAAE;gBACtB,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;gBAChC,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC;gBACrC,MAAM,CAAC,mBAAmB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YACjD,CAAC,CAAC;YACF,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAC9C,CAAC;aAAM,CAAC;YACN,+DAA+D;YAC/D,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;YAChC,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC;QACvC,CAAC;IACH,CAAC;IAED;;OAEG;IACK,qBAAqB;QAC3B,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO;QAE7B,uBAAuB;QACvB,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI,EAAE,CAAC;YACjC,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACpC,CAAC;QAED,uCAAuC;QACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,qBAAqB;QAC7E,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC;QAE5F,0BAA0B;QAC1B,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE;YAC3C,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;YAC/B,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC/B,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;QAEzB,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CACT,2CAA2C,IAAI,CAAC,eAAe,GAAG,IAAI,MAAM,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,GAAG,CAChH,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,gBAA0C,UAAU;QACxE,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO;QAE7B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,qBAAqB;QAC7E,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QAExD,oCAAoC;QACpC,MAAM,UAAU,GAA4B;YAC1C,cAAc,EAAE,aAAa;YAC7B,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU;YACxC,SAAS,EAAE,GAAG;SACf,CAAC;QAEF,8CAA8C;QAC9C,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;YAC3C,IAAI,IAAI,EAAE,CAAC;gBACT,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC;YACzB,CAAC;YAED,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;YAEpD,gEAAgE;YAChE,IAAI,aAAa,KAAK,UAAU,EAAE,CAAC;gBACjC,UAAU,CAAC,QAAQ,GAAG,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC;gBACnD,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,+BAA+B,EAAE,CAAC;gBAExE,oBAAoB;gBACpB,IAAI,CAAC,OAAO,CAAC,iCAAiC,EAAE,CAAC;YACnD,CAAC;QACH,CAAC;QAED,4BAA4B;QAC5B,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,UAAU,CAAC,CAAC;QAE9D,IAAI,CAAC,iBAAiB,GAAG,GAAG,CAAC;QAE7B,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE,UAAU,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAED;;OAEG;IACH,OAAO;QACL,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO;QAE7B,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI,EAAE,CAAC;YACjC,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAClC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC7B,CAAC;QAED,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAExB,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"heartbeat.js","sourceRoot":"","sources":["../../src/heartbeat.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Heatmap Tracking Manager for Grain Analytics
3
+ * Tracks click interactions and scroll depth across all pages
4
+ */
5
+ import type { HeatmapTrackingOptions } from './types/heatmap-tracking';
6
+ import type { ActivityDetector } from './activity';
7
+ export interface SendEventOptions {
8
+ flush?: boolean;
9
+ }
10
+ export interface HeatmapTracker {
11
+ trackSystemEvent(eventName: string, properties?: Record<string, unknown>, options?: SendEventOptions): void | Promise<void>;
12
+ hasConsent(category: 'analytics' | 'marketing' | 'functional'): boolean;
13
+ getActivityDetector(): ActivityDetector;
14
+ log(...args: unknown[]): void;
15
+ }
16
+ export declare class HeatmapTrackingManager {
17
+ private tracker;
18
+ private options;
19
+ private isDestroyed;
20
+ private currentScrollState;
21
+ private pendingClicks;
22
+ private pendingScrolls;
23
+ private scrollDebounceTimer;
24
+ private batchTimer;
25
+ private scrollTrackingTimer;
26
+ private periodicScrollTimer;
27
+ private lastScrollPosition;
28
+ private lastScrollTime;
29
+ private readonly SPLIT_DURATION;
30
+ private attentionQuality;
31
+ constructor(tracker: HeatmapTracker, options?: Partial<HeatmapTrackingOptions>);
32
+ /**
33
+ * Initialize heatmap tracking
34
+ */
35
+ private initialize;
36
+ /**
37
+ * Setup click event tracking
38
+ */
39
+ private setupClickTracking;
40
+ /**
41
+ * Setup scroll event tracking
42
+ */
43
+ private setupScrollTracking;
44
+ /**
45
+ * Start periodic scroll state tracking
46
+ */
47
+ private startScrollTracking;
48
+ /**
49
+ * Start periodic scroll tracking (sends events every 3 seconds)
50
+ */
51
+ private startPeriodicScrollTracking;
52
+ /**
53
+ * Setup page unload handler to beacon remaining data
54
+ */
55
+ private setupUnloadHandler;
56
+ /**
57
+ * Handle click event
58
+ */
59
+ private handleClick;
60
+ /**
61
+ * Handle scroll event
62
+ */
63
+ private handleScroll;
64
+ /**
65
+ * Update current scroll state
66
+ */
67
+ private updateScrollState;
68
+ /**
69
+ * Generate XPath for an element
70
+ */
71
+ private generateXPath;
72
+ /**
73
+ * Consider flushing batched events
74
+ */
75
+ private considerBatchFlush;
76
+ /**
77
+ * Flush pending events
78
+ */
79
+ private flushPendingEvents;
80
+ /**
81
+ * Flush pending events with beacon (for page unload)
82
+ */
83
+ private flushPendingEventsWithBeacon;
84
+ /**
85
+ * Log debug message
86
+ */
87
+ private log;
88
+ /**
89
+ * Destroy the tracking manager
90
+ */
91
+ destroy(): void;
92
+ }
93
+ //# sourceMappingURL=heatmap-tracking.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heatmap-tracking.d.ts","sourceRoot":"","sources":["../../src/heatmap-tracking.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAGV,sBAAsB,EAEvB,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5H,UAAU,CAAC,QAAQ,EAAE,WAAW,GAAG,WAAW,GAAG,YAAY,GAAG,OAAO,CAAC;IACxE,mBAAmB,IAAI,gBAAgB,CAAC;IACxC,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;CAC/B;AASD,qBAAa,sBAAsB;IACjC,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,OAAO,CAAyB;IACxC,OAAO,CAAC,WAAW,CAAS;IAG5B,OAAO,CAAC,kBAAkB,CAAmC;IAC7D,OAAO,CAAC,aAAa,CAA0B;IAC/C,OAAO,CAAC,cAAc,CAA2B;IAGjD,OAAO,CAAC,mBAAmB,CAAuB;IAClD,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,mBAAmB,CAAuB;IAClD,OAAO,CAAC,mBAAmB,CAAuB;IAGlD,OAAO,CAAC,kBAAkB,CAAK;IAC/B,OAAO,CAAC,cAAc,CAAc;IACpC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAQ;IAGvC,OAAO,CAAC,gBAAgB,CAA0B;gBAGhD,OAAO,EAAE,cAAc,EACvB,OAAO,GAAE,OAAO,CAAC,sBAAsB,CAAM;IA0B/C;;OAEG;IACH,OAAO,CAAC,UAAU;IAkBlB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAa1B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAiB3B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAgB3B;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAwEnC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAkC1B;;OAEG;IACH,OAAO,CAAC,WAAW;IAwDnB;;OAEG;IACH,OAAO,CAAC,YAAY;IAKpB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAqDzB;;OAEG;IACH,OAAO,CAAC,aAAa;IAiCrB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAkB1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAqD1B;;OAEG;IACH,OAAO,CAAC,4BAA4B;IA6CpC;;OAEG;IACH,OAAO,CAAC,GAAG;IAMX;;OAEG;IACH,OAAO,IAAI,IAAI;CA8BhB"}
@@ -0,0 +1,495 @@
1
+ /**
2
+ * Heatmap Tracking Manager for Grain Analytics
3
+ * Tracks click interactions and scroll depth across all pages
4
+ */
5
+ import { AttentionQualityManager } from './attention-quality';
6
+ const DEFAULT_OPTIONS = {
7
+ scrollDebounceDelay: 100,
8
+ batchDelay: 2000,
9
+ maxBatchSize: 20,
10
+ debug: false,
11
+ };
12
+ export class HeatmapTrackingManager {
13
+ constructor(tracker, options = {}) {
14
+ this.isDestroyed = false;
15
+ // Tracking state
16
+ this.currentScrollState = null;
17
+ this.pendingClicks = [];
18
+ this.pendingScrolls = [];
19
+ // Timers
20
+ this.scrollDebounceTimer = null;
21
+ this.batchTimer = null;
22
+ this.scrollTrackingTimer = null;
23
+ this.periodicScrollTimer = null;
24
+ // Scroll tracking
25
+ this.lastScrollPosition = 0;
26
+ this.lastScrollTime = Date.now();
27
+ this.SPLIT_DURATION = 3000; // 3 seconds - same as section tracking
28
+ this.tracker = tracker;
29
+ this.options = { ...DEFAULT_OPTIONS, ...options };
30
+ // Initialize attention quality manager
31
+ this.attentionQuality = new AttentionQualityManager(tracker.getActivityDetector(), {
32
+ maxSectionDuration: 9000, // 9 seconds per viewport section
33
+ minScrollDistance: 100, // 100 pixels
34
+ idleThreshold: 30000, // 30 seconds
35
+ debug: this.options.debug,
36
+ });
37
+ if (typeof window !== 'undefined' && typeof document !== 'undefined') {
38
+ // Initialize after DOM is ready
39
+ if (document.readyState === 'loading') {
40
+ document.addEventListener('DOMContentLoaded', () => this.initialize());
41
+ }
42
+ else {
43
+ setTimeout(() => this.initialize(), 0);
44
+ }
45
+ }
46
+ }
47
+ /**
48
+ * Initialize heatmap tracking
49
+ */
50
+ initialize() {
51
+ if (this.isDestroyed)
52
+ return;
53
+ this.log('Initializing heatmap tracking');
54
+ // Setup click tracking
55
+ this.setupClickTracking();
56
+ // Setup scroll tracking
57
+ this.setupScrollTracking();
58
+ // Start periodic scroll state tracking
59
+ this.startScrollTracking();
60
+ // Setup page unload handler for beaconing
61
+ this.setupUnloadHandler();
62
+ }
63
+ /**
64
+ * Setup click event tracking
65
+ */
66
+ setupClickTracking() {
67
+ if (typeof document === 'undefined')
68
+ return;
69
+ const clickHandler = (event) => {
70
+ if (this.isDestroyed)
71
+ return;
72
+ if (!this.tracker.hasConsent('analytics'))
73
+ return;
74
+ this.handleClick(event);
75
+ };
76
+ document.addEventListener('click', clickHandler, { passive: true, capture: true });
77
+ }
78
+ /**
79
+ * Setup scroll event tracking
80
+ */
81
+ setupScrollTracking() {
82
+ if (typeof window === 'undefined')
83
+ return;
84
+ const scrollHandler = () => {
85
+ if (this.scrollDebounceTimer !== null) {
86
+ clearTimeout(this.scrollDebounceTimer);
87
+ }
88
+ this.scrollDebounceTimer = window.setTimeout(() => {
89
+ this.handleScroll();
90
+ this.scrollDebounceTimer = null;
91
+ }, this.options.scrollDebounceDelay);
92
+ };
93
+ window.addEventListener('scroll', scrollHandler, { passive: true });
94
+ }
95
+ /**
96
+ * Start periodic scroll state tracking
97
+ */
98
+ startScrollTracking() {
99
+ if (typeof window === 'undefined')
100
+ return;
101
+ // Track initial scroll position
102
+ this.updateScrollState();
103
+ // Update scroll state every 500ms (for detecting section changes)
104
+ this.scrollTrackingTimer = window.setInterval(() => {
105
+ if (this.isDestroyed)
106
+ return;
107
+ this.updateScrollState();
108
+ }, 500);
109
+ // Start periodic 3-second scroll duration tracking
110
+ this.startPeriodicScrollTracking();
111
+ }
112
+ /**
113
+ * Start periodic scroll tracking (sends events every 3 seconds)
114
+ */
115
+ startPeriodicScrollTracking() {
116
+ if (typeof window === 'undefined')
117
+ return;
118
+ this.periodicScrollTimer = window.setInterval(() => {
119
+ if (this.isDestroyed || !this.currentScrollState)
120
+ return;
121
+ if (!this.tracker.hasConsent('analytics'))
122
+ return;
123
+ // Check attention quality policies
124
+ if (!this.attentionQuality.shouldTrack()) {
125
+ this.log('Scroll tracking paused:', this.attentionQuality.getLastFilterReason());
126
+ return;
127
+ }
128
+ const currentTime = Date.now();
129
+ const duration = currentTime - this.currentScrollState.entryTime;
130
+ // Only send if meaningful duration (> 1 second)
131
+ if (duration > 1000) {
132
+ const scrollY = window.scrollY || window.pageYOffset;
133
+ const viewportHeight = window.innerHeight;
134
+ const pageHeight = document.documentElement.scrollHeight;
135
+ // Check section-specific attention quality
136
+ const sectionKey = `viewport_section_${this.currentScrollState.viewportSection}`;
137
+ const attentionCheck = this.attentionQuality.shouldTrackSection(sectionKey, scrollY);
138
+ // If attention was reset due to scroll, reset our entry time
139
+ if (attentionCheck.resetAttention) {
140
+ this.log(`Viewport section ${this.currentScrollState.viewportSection}: Attention reset`);
141
+ this.currentScrollState.entryTime = currentTime;
142
+ return;
143
+ }
144
+ // If max duration reached for this viewport section
145
+ if (!attentionCheck.shouldTrack) {
146
+ this.log(`Viewport section ${this.currentScrollState.viewportSection}: ${attentionCheck.reason}`);
147
+ return;
148
+ }
149
+ const scrollData = {
150
+ pageUrl: window.location.href,
151
+ viewportSection: this.currentScrollState.viewportSection,
152
+ scrollDepthPx: scrollY,
153
+ durationMs: duration,
154
+ entryTimestamp: this.currentScrollState.entryTime,
155
+ exitTimestamp: currentTime,
156
+ pageHeight,
157
+ viewportHeight,
158
+ };
159
+ // Send immediately using beacon to ensure delivery
160
+ this.tracker.trackSystemEvent('_grain_heatmap_scroll', {
161
+ page_url: scrollData.pageUrl,
162
+ viewport_section: scrollData.viewportSection,
163
+ scroll_depth_px: scrollData.scrollDepthPx,
164
+ duration_ms: scrollData.durationMs,
165
+ entry_timestamp: scrollData.entryTimestamp,
166
+ exit_timestamp: scrollData.exitTimestamp,
167
+ page_height: scrollData.pageHeight,
168
+ viewport_height: scrollData.viewportHeight,
169
+ is_split: true, // Flag to indicate periodic tracking, not final exit
170
+ }, { flush: true });
171
+ // Update attention quality duration tracker
172
+ this.attentionQuality.updateSectionDuration(sectionKey, duration);
173
+ // Reset entry time for next period
174
+ this.currentScrollState.entryTime = currentTime;
175
+ }
176
+ }, this.SPLIT_DURATION);
177
+ }
178
+ /**
179
+ * Setup page unload handler to beacon remaining data
180
+ */
181
+ setupUnloadHandler() {
182
+ if (typeof window === 'undefined')
183
+ return;
184
+ const unloadHandler = () => {
185
+ // Finalize current scroll state
186
+ if (this.currentScrollState) {
187
+ const currentTime = Date.now();
188
+ const duration = currentTime - this.currentScrollState.entryTime;
189
+ if (duration > 100) {
190
+ const scrollData = {
191
+ pageUrl: window.location.href,
192
+ viewportSection: this.currentScrollState.viewportSection,
193
+ scrollDepthPx: this.currentScrollState.scrollDepthPx,
194
+ durationMs: duration,
195
+ entryTimestamp: this.currentScrollState.entryTime,
196
+ exitTimestamp: currentTime,
197
+ pageHeight: document.documentElement.scrollHeight,
198
+ viewportHeight: window.innerHeight,
199
+ };
200
+ this.pendingScrolls.push(scrollData);
201
+ }
202
+ }
203
+ // Flush all pending events with beacon
204
+ this.flushPendingEventsWithBeacon();
205
+ };
206
+ // Use both events for better compatibility
207
+ window.addEventListener('beforeunload', unloadHandler);
208
+ window.addEventListener('pagehide', unloadHandler);
209
+ }
210
+ /**
211
+ * Handle click event
212
+ */
213
+ handleClick(event) {
214
+ if (!this.tracker.hasConsent('analytics'))
215
+ return;
216
+ const element = event.target;
217
+ if (!element)
218
+ return;
219
+ const pageUrl = window.location.href;
220
+ const xpath = this.generateXPath(element);
221
+ // Get viewport coordinates
222
+ const viewportX = Math.round(event.clientX);
223
+ const viewportY = Math.round(event.clientY);
224
+ // Get page coordinates (including scroll offset)
225
+ const pageX = Math.round(event.pageX);
226
+ const pageY = Math.round(event.pageY);
227
+ const elementTag = element.tagName?.toLowerCase() || 'unknown';
228
+ const elementText = element.textContent?.trim().substring(0, 100);
229
+ const clickData = {
230
+ pageUrl,
231
+ xpath,
232
+ viewportX,
233
+ viewportY,
234
+ pageX,
235
+ pageY,
236
+ elementTag,
237
+ elementText: elementText || undefined,
238
+ timestamp: Date.now(),
239
+ };
240
+ // Check if this is a navigation link
241
+ const isNavigationLink = element instanceof HTMLAnchorElement && element.href;
242
+ // Send immediately with beacon for navigation links to ensure delivery
243
+ if (isNavigationLink) {
244
+ this.tracker.trackSystemEvent('_grain_heatmap_click', {
245
+ page_url: clickData.pageUrl,
246
+ xpath: clickData.xpath,
247
+ viewport_x: clickData.viewportX,
248
+ viewport_y: clickData.viewportY,
249
+ page_x: clickData.pageX,
250
+ page_y: clickData.pageY,
251
+ element_tag: clickData.elementTag,
252
+ element_text: clickData.elementText,
253
+ timestamp: clickData.timestamp,
254
+ }, { flush: true });
255
+ }
256
+ else {
257
+ this.pendingClicks.push(clickData);
258
+ // Check if we should flush
259
+ this.considerBatchFlush();
260
+ }
261
+ }
262
+ /**
263
+ * Handle scroll event
264
+ */
265
+ handleScroll() {
266
+ if (!this.tracker.hasConsent('analytics'))
267
+ return;
268
+ this.updateScrollState();
269
+ }
270
+ /**
271
+ * Update current scroll state
272
+ */
273
+ updateScrollState() {
274
+ if (typeof window === 'undefined')
275
+ return;
276
+ if (!this.tracker.hasConsent('analytics'))
277
+ return;
278
+ const currentTime = Date.now();
279
+ const scrollY = window.scrollY || window.pageYOffset;
280
+ const viewportHeight = window.innerHeight;
281
+ const pageHeight = document.documentElement.scrollHeight;
282
+ // Calculate which viewport section we're in
283
+ const viewportSection = Math.floor(scrollY / viewportHeight);
284
+ // If we're in a new section, record the previous one
285
+ if (this.currentScrollState && this.currentScrollState.viewportSection !== viewportSection) {
286
+ const duration = currentTime - this.currentScrollState.entryTime;
287
+ // Only record if duration is meaningful (> 100ms)
288
+ if (duration > 100) {
289
+ const scrollData = {
290
+ pageUrl: window.location.href,
291
+ viewportSection: this.currentScrollState.viewportSection,
292
+ scrollDepthPx: this.currentScrollState.scrollDepthPx,
293
+ durationMs: duration,
294
+ entryTimestamp: this.currentScrollState.entryTime,
295
+ exitTimestamp: currentTime,
296
+ pageHeight,
297
+ viewportHeight,
298
+ };
299
+ this.pendingScrolls.push(scrollData);
300
+ }
301
+ // Reset attention for previous viewport section
302
+ const prevSectionKey = `viewport_section_${this.currentScrollState.viewportSection}`;
303
+ this.attentionQuality.resetSection(prevSectionKey);
304
+ }
305
+ // Update current state
306
+ if (!this.currentScrollState || this.currentScrollState.viewportSection !== viewportSection) {
307
+ this.currentScrollState = {
308
+ viewportSection,
309
+ entryTime: currentTime,
310
+ scrollDepthPx: scrollY,
311
+ };
312
+ }
313
+ this.lastScrollPosition = scrollY;
314
+ this.lastScrollTime = currentTime;
315
+ // Check if we should flush
316
+ this.considerBatchFlush();
317
+ }
318
+ /**
319
+ * Generate XPath for an element
320
+ */
321
+ generateXPath(element) {
322
+ if (!element)
323
+ return '';
324
+ // If element has an ID, use that for simpler XPath
325
+ if (element.id) {
326
+ return `//*[@id="${element.id}"]`;
327
+ }
328
+ const paths = [];
329
+ let currentElement = element;
330
+ while (currentElement && currentElement.nodeType === Node.ELEMENT_NODE) {
331
+ let index = 0;
332
+ let sibling = currentElement;
333
+ // Count preceding siblings of the same tag
334
+ while (sibling) {
335
+ sibling = sibling.previousElementSibling;
336
+ if (sibling && sibling.nodeName === currentElement.nodeName) {
337
+ index++;
338
+ }
339
+ }
340
+ const tagName = currentElement.nodeName.toLowerCase();
341
+ const pathIndex = index > 0 ? `[${index + 1}]` : '';
342
+ paths.unshift(`${tagName}${pathIndex}`);
343
+ currentElement = currentElement.parentElement;
344
+ }
345
+ return paths.length ? `/${paths.join('/')}` : '';
346
+ }
347
+ /**
348
+ * Consider flushing batched events
349
+ */
350
+ considerBatchFlush() {
351
+ const totalEvents = this.pendingClicks.length + this.pendingScrolls.length;
352
+ // Flush if we've hit the batch size
353
+ if (totalEvents >= this.options.maxBatchSize) {
354
+ this.flushPendingEvents();
355
+ return;
356
+ }
357
+ // Otherwise, schedule a batch flush
358
+ if (this.batchTimer === null && totalEvents > 0) {
359
+ this.batchTimer = window.setTimeout(() => {
360
+ this.flushPendingEvents();
361
+ this.batchTimer = null;
362
+ }, this.options.batchDelay);
363
+ }
364
+ }
365
+ /**
366
+ * Flush pending events
367
+ */
368
+ flushPendingEvents() {
369
+ if (this.isDestroyed)
370
+ return;
371
+ if (!this.tracker.hasConsent('analytics')) {
372
+ // Clear pending events if consent is revoked
373
+ this.pendingClicks = [];
374
+ this.pendingScrolls = [];
375
+ return;
376
+ }
377
+ // Send click events
378
+ if (this.pendingClicks.length > 0) {
379
+ for (const clickData of this.pendingClicks) {
380
+ this.tracker.trackSystemEvent('_grain_heatmap_click', {
381
+ page_url: clickData.pageUrl,
382
+ xpath: clickData.xpath,
383
+ viewport_x: clickData.viewportX,
384
+ viewport_y: clickData.viewportY,
385
+ page_x: clickData.pageX,
386
+ page_y: clickData.pageY,
387
+ element_tag: clickData.elementTag,
388
+ element_text: clickData.elementText,
389
+ timestamp: clickData.timestamp,
390
+ });
391
+ }
392
+ this.pendingClicks = [];
393
+ }
394
+ // Send scroll events
395
+ if (this.pendingScrolls.length > 0) {
396
+ for (const scrollData of this.pendingScrolls) {
397
+ this.tracker.trackSystemEvent('_grain_heatmap_scroll', {
398
+ page_url: scrollData.pageUrl,
399
+ viewport_section: scrollData.viewportSection,
400
+ scroll_depth_px: scrollData.scrollDepthPx,
401
+ duration_ms: scrollData.durationMs,
402
+ entry_timestamp: scrollData.entryTimestamp,
403
+ exit_timestamp: scrollData.exitTimestamp,
404
+ page_height: scrollData.pageHeight,
405
+ viewport_height: scrollData.viewportHeight,
406
+ });
407
+ }
408
+ this.pendingScrolls = [];
409
+ }
410
+ // Clear batch timer
411
+ if (this.batchTimer !== null) {
412
+ clearTimeout(this.batchTimer);
413
+ this.batchTimer = null;
414
+ }
415
+ }
416
+ /**
417
+ * Flush pending events with beacon (for page unload)
418
+ */
419
+ flushPendingEventsWithBeacon() {
420
+ if (!this.tracker.hasConsent('analytics')) {
421
+ this.pendingClicks = [];
422
+ this.pendingScrolls = [];
423
+ return;
424
+ }
425
+ // Send click events with beacon
426
+ if (this.pendingClicks.length > 0) {
427
+ for (const clickData of this.pendingClicks) {
428
+ this.tracker.trackSystemEvent('_grain_heatmap_click', {
429
+ page_url: clickData.pageUrl,
430
+ xpath: clickData.xpath,
431
+ viewport_x: clickData.viewportX,
432
+ viewport_y: clickData.viewportY,
433
+ page_x: clickData.pageX,
434
+ page_y: clickData.pageY,
435
+ element_tag: clickData.elementTag,
436
+ element_text: clickData.elementText,
437
+ timestamp: clickData.timestamp,
438
+ }, { flush: true });
439
+ }
440
+ this.pendingClicks = [];
441
+ }
442
+ // Send scroll events with beacon
443
+ if (this.pendingScrolls.length > 0) {
444
+ for (const scrollData of this.pendingScrolls) {
445
+ this.tracker.trackSystemEvent('_grain_heatmap_scroll', {
446
+ page_url: scrollData.pageUrl,
447
+ viewport_section: scrollData.viewportSection,
448
+ scroll_depth_px: scrollData.scrollDepthPx,
449
+ duration_ms: scrollData.durationMs,
450
+ entry_timestamp: scrollData.entryTimestamp,
451
+ exit_timestamp: scrollData.exitTimestamp,
452
+ page_height: scrollData.pageHeight,
453
+ viewport_height: scrollData.viewportHeight,
454
+ }, { flush: true });
455
+ }
456
+ this.pendingScrolls = [];
457
+ }
458
+ }
459
+ /**
460
+ * Log debug message
461
+ */
462
+ log(...args) {
463
+ if (this.options.debug) {
464
+ this.tracker.log('[Heatmap Tracking]', ...args);
465
+ }
466
+ }
467
+ /**
468
+ * Destroy the tracking manager
469
+ */
470
+ destroy() {
471
+ this.isDestroyed = true;
472
+ // Clear timers
473
+ if (this.scrollDebounceTimer !== null) {
474
+ clearTimeout(this.scrollDebounceTimer);
475
+ this.scrollDebounceTimer = null;
476
+ }
477
+ if (this.batchTimer !== null) {
478
+ clearTimeout(this.batchTimer);
479
+ this.batchTimer = null;
480
+ }
481
+ if (this.scrollTrackingTimer !== null) {
482
+ clearInterval(this.scrollTrackingTimer);
483
+ this.scrollTrackingTimer = null;
484
+ }
485
+ if (this.periodicScrollTimer !== null) {
486
+ clearInterval(this.periodicScrollTimer);
487
+ this.periodicScrollTimer = null;
488
+ }
489
+ // Destroy attention quality manager
490
+ this.attentionQuality.destroy();
491
+ // Flush any remaining events
492
+ this.flushPendingEvents();
493
+ }
494
+ }
495
+ //# sourceMappingURL=heatmap-tracking.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heatmap-tracking.js","sourceRoot":"","sources":["../../src/heatmap-tracking.ts"],"names":[],"mappings":"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"}