@grainql/analytics-web 2.5.3 → 2.6.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 (79) hide show
  1. package/README.md +3 -1
  2. package/dist/activity.js +1 -1
  3. package/dist/cjs/activity.js +1 -1
  4. package/dist/cjs/activity.js.map +1 -1
  5. package/dist/cjs/consent.js +4 -4
  6. package/dist/cjs/consent.js.map +1 -1
  7. package/dist/cjs/heartbeat.d.ts.map +1 -1
  8. package/dist/cjs/heartbeat.js +0 -6
  9. package/dist/cjs/heartbeat.js.map +1 -1
  10. package/dist/cjs/heatmap-tracking.d.ts +90 -0
  11. package/dist/cjs/heatmap-tracking.d.ts.map +1 -0
  12. package/dist/cjs/heatmap-tracking.js +465 -0
  13. package/dist/cjs/heatmap-tracking.js.map +1 -0
  14. package/dist/cjs/index.d.ts +6 -0
  15. package/dist/cjs/index.d.ts.map +1 -1
  16. package/dist/cjs/index.js.map +1 -1
  17. package/dist/cjs/interaction-tracking.d.ts.map +1 -1
  18. package/dist/cjs/interaction-tracking.js +9 -18
  19. package/dist/cjs/interaction-tracking.js.map +1 -1
  20. package/dist/cjs/page-tracking.d.ts.map +1 -1
  21. package/dist/cjs/page-tracking.js +0 -9
  22. package/dist/cjs/page-tracking.js.map +1 -1
  23. package/dist/cjs/section-tracking.d.ts.map +1 -1
  24. package/dist/cjs/section-tracking.js +1 -7
  25. package/dist/cjs/section-tracking.js.map +1 -1
  26. package/dist/cjs/types/heatmap-tracking.d.ts +41 -0
  27. package/dist/cjs/types/heatmap-tracking.d.ts.map +1 -0
  28. package/dist/cjs/types/heatmap-tracking.js +6 -0
  29. package/dist/cjs/types/heatmap-tracking.js.map +1 -0
  30. package/dist/consent.js +4 -4
  31. package/dist/esm/activity.js +1 -1
  32. package/dist/esm/activity.js.map +1 -1
  33. package/dist/esm/consent.js +4 -4
  34. package/dist/esm/consent.js.map +1 -1
  35. package/dist/esm/heartbeat.d.ts.map +1 -1
  36. package/dist/esm/heartbeat.js +0 -6
  37. package/dist/esm/heartbeat.js.map +1 -1
  38. package/dist/esm/heatmap-tracking.d.ts +90 -0
  39. package/dist/esm/heatmap-tracking.d.ts.map +1 -0
  40. package/dist/esm/heatmap-tracking.js +461 -0
  41. package/dist/esm/heatmap-tracking.js.map +1 -0
  42. package/dist/esm/index.d.ts +6 -0
  43. package/dist/esm/index.d.ts.map +1 -1
  44. package/dist/esm/index.js.map +1 -1
  45. package/dist/esm/interaction-tracking.d.ts.map +1 -1
  46. package/dist/esm/interaction-tracking.js +9 -18
  47. package/dist/esm/interaction-tracking.js.map +1 -1
  48. package/dist/esm/page-tracking.d.ts.map +1 -1
  49. package/dist/esm/page-tracking.js +0 -9
  50. package/dist/esm/page-tracking.js.map +1 -1
  51. package/dist/esm/section-tracking.d.ts.map +1 -1
  52. package/dist/esm/section-tracking.js +1 -7
  53. package/dist/esm/section-tracking.js.map +1 -1
  54. package/dist/esm/types/heatmap-tracking.d.ts +41 -0
  55. package/dist/esm/types/heatmap-tracking.d.ts.map +1 -0
  56. package/dist/esm/types/heatmap-tracking.js +5 -0
  57. package/dist/esm/types/heatmap-tracking.js.map +1 -0
  58. package/dist/heartbeat.d.ts.map +1 -1
  59. package/dist/heartbeat.js +0 -6
  60. package/dist/heatmap-tracking.d.ts +90 -0
  61. package/dist/heatmap-tracking.d.ts.map +1 -0
  62. package/dist/heatmap-tracking.js +465 -0
  63. package/dist/index.d.ts +6 -0
  64. package/dist/index.d.ts.map +1 -1
  65. package/dist/index.global.dev.js +534 -80
  66. package/dist/index.global.dev.js.map +4 -4
  67. package/dist/index.global.js +2 -2
  68. package/dist/index.global.js.map +4 -4
  69. package/dist/index.js +98 -39
  70. package/dist/index.mjs +99 -40
  71. package/dist/interaction-tracking.d.ts.map +1 -1
  72. package/dist/interaction-tracking.js +9 -18
  73. package/dist/page-tracking.d.ts.map +1 -1
  74. package/dist/page-tracking.js +0 -9
  75. package/dist/section-tracking.d.ts.map +1 -1
  76. package/dist/section-tracking.js +1 -7
  77. package/dist/types/heatmap-tracking.d.ts +41 -0
  78. package/dist/types/heatmap-tracking.d.ts.map +1 -0
  79. package/package.json +1 -1
@@ -40,7 +40,7 @@ class InteractionTrackingManager {
40
40
  attachAllListeners() {
41
41
  if (this.isDestroyed)
42
42
  return;
43
- this.log('Attaching interaction listeners for', this.interactions.length, 'interactions');
43
+ this.log('Attaching interaction listeners');
44
44
  for (const interaction of this.interactions) {
45
45
  this.attachInteractionListener(interaction);
46
46
  }
@@ -73,7 +73,6 @@ class InteractionTrackingManager {
73
73
  handlers.push({ event: 'focus', handler: focusHandler });
74
74
  }
75
75
  this.attachedListeners.set(element, handlers);
76
- this.log('Attached listeners to element for:', interaction.eventName);
77
76
  }
78
77
  /**
79
78
  * Handle click event on interaction
@@ -98,21 +97,15 @@ class InteractionTrackingManager {
98
97
  ...(isNavigationLink && { href: element.href }),
99
98
  timestamp: Date.now(),
100
99
  };
101
- // If it's a navigation link, flush immediately to ensure event is sent before navigation
102
- if (isNavigationLink) {
103
- // Use flush option to send immediately - handle promise if returned
104
- const result = this.tracker.track(interaction.eventName, eventProperties, { flush: true });
105
- if (result instanceof Promise) {
106
- result.catch((error) => {
107
- // Log error but don't block navigation
108
- this.log('Failed to track navigation click:', error);
109
- });
110
- }
111
- }
112
- else {
113
- this.tracker.track(interaction.eventName, eventProperties);
100
+ // Always use flush for auto-tracked clicks to ensure delivery
101
+ // This is especially important for navigation links and quick interactions
102
+ const result = this.tracker.track(interaction.eventName, eventProperties, { flush: true });
103
+ if (result instanceof Promise) {
104
+ result.catch((error) => {
105
+ // Log error but don't block interaction
106
+ this.log('Failed to track click:', error);
107
+ });
114
108
  }
115
- this.log('Tracked click interaction:', interaction.eventName);
116
109
  }
117
110
  /**
118
111
  * Handle focus event on interaction (for form fields)
@@ -133,7 +126,6 @@ class InteractionTrackingManager {
133
126
  element_class: element.className || undefined,
134
127
  timestamp: Date.now(),
135
128
  });
136
- this.log('Tracked focus interaction:', interaction.eventName);
137
129
  }
138
130
  /**
139
131
  * Find element by XPath selector
@@ -233,7 +225,6 @@ class InteractionTrackingManager {
233
225
  element.removeEventListener(event, handler);
234
226
  });
235
227
  this.attachedListeners.delete(element);
236
- this.log('Detached listeners from element');
237
228
  }
238
229
  /**
239
230
  * Log debug messages
@@ -1 +1 @@
1
- {"version":3,"file":"page-tracking.d.ts","sourceRoot":"","sources":["../src/page-tracking.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAaH,MAAM,WAAW,kBAAkB;IACjC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,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;CACxB;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,iBAAiB,CAAyC;IAClE,OAAO,CAAC,oBAAoB,CAA4C;IACxE,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,aAAa,CAAK;gBAEd,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,kBAAkB;IAY5D;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAqB7B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAK/B;;OAEG;IACH,OAAO,CAAC,cAAc,CAGpB;IAEF;;OAEG;IACH,OAAO,CAAC,gBAAgB,CAGtB;IAEF;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAgHxB;;OAEG;IACH,OAAO,CAAC,aAAa;IASrB;;OAEG;IACH,OAAO,CAAC,UAAU;IAUlB;;OAEG;IACH,OAAO,CAAC,KAAK;IAUb;;OAEG;IACH,OAAO,CAAC,aAAa;IAwBrB;;OAEG;IACH,OAAO,CAAC,WAAW;IAmBnB;;OAEG;IACH,cAAc,IAAI,MAAM,GAAG,IAAI;IAI/B;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAyCnE;;OAEG;IACH,gBAAgB,IAAI,MAAM;IAI1B;;OAEG;IACH,OAAO,IAAI,IAAI;CAyBhB"}
1
+ {"version":3,"file":"page-tracking.d.ts","sourceRoot":"","sources":["../src/page-tracking.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAaH,MAAM,WAAW,kBAAkB;IACjC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,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;CACxB;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,iBAAiB,CAAyC;IAClE,OAAO,CAAC,oBAAoB,CAA4C;IACxE,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,aAAa,CAAK;gBAEd,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,kBAAkB;IAY5D;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAqB7B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAK/B;;OAEG;IACH,OAAO,CAAC,cAAc,CAGpB;IAEF;;OAEG;IACH,OAAO,CAAC,gBAAgB,CAGtB;IAEF;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA4GxB;;OAEG;IACH,OAAO,CAAC,aAAa;IASrB;;OAEG;IACH,OAAO,CAAC,UAAU;IAUlB;;OAEG;IACH,OAAO,CAAC,KAAK;IAUb;;OAEG;IACH,OAAO,CAAC,aAAa;IAwBrB;;OAEG;IACH,OAAO,CAAC,WAAW;IAmBnB;;OAEG;IACH,cAAc,IAAI,MAAM,GAAG,IAAI;IAI/B;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAqCnE;;OAEG;IACH,gBAAgB,IAAI,MAAM;IAI1B;;OAEG;IACH,OAAO,IAAI,IAAI;CAqBhB"}
@@ -159,9 +159,6 @@ class PageTrackingManager {
159
159
  }
160
160
  // Track the page view event
161
161
  this.tracker.trackSystemEvent('page_view', properties);
162
- if (this.config.debug) {
163
- console.log('[Page Tracking] Tracked page view:', properties);
164
- }
165
162
  }
166
163
  /**
167
164
  * Extract domain from URL
@@ -293,9 +290,6 @@ class PageTrackingManager {
293
290
  }
294
291
  }
295
292
  this.tracker.trackSystemEvent('page_view', baseProperties);
296
- if (this.config.debug) {
297
- console.log('[Page Tracking] Manually tracked page:', baseProperties);
298
- }
299
293
  }
300
294
  /**
301
295
  * Get page view count for current session
@@ -324,9 +318,6 @@ class PageTrackingManager {
324
318
  window.removeEventListener('hashchange', this.handleHashChange);
325
319
  }
326
320
  this.isDestroyed = true;
327
- if (this.config.debug) {
328
- console.log('[Page Tracking] Destroyed');
329
- }
330
321
  }
331
322
  }
332
323
  exports.PageTrackingManager = PageTrackingManager;
@@ -1 +1 @@
1
- {"version":3,"file":"section-tracking.d.ts","sourceRoot":"","sources":["../src/section-tracking.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAmB,sBAAsB,EAAwB,MAAM,uBAAuB,CAAC;AAE1H,MAAM,WAAW,cAAc;IAC7B,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC/E,UAAU,CAAC,QAAQ,EAAE,WAAW,GAAG,WAAW,GAAG,YAAY,GAAG,OAAO,CAAC;IACxE,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;CAC/B;AAWD,qBAAa,sBAAsB;IACjC,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,OAAO,CAAyB;IACxC,OAAO,CAAC,WAAW,CAAS;IAG5B,OAAO,CAAC,aAAa,CAAgD;IACrE,OAAO,CAAC,oBAAoB,CAAqC;IACjE,OAAO,CAAC,UAAU,CAA0C;IAG5D,OAAO,CAAC,kBAAkB,CAAK;IAC/B,OAAO,CAAC,cAAc,CAAc;IACpC,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,mBAAmB,CAAuB;IAGlD,OAAO,CAAC,aAAa,CAAyB;IAC9C,OAAO,CAAC,UAAU,CAAuB;IAGzC,OAAO,CAAC,aAAa,CAAkC;IACvD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAQ;gBAGrC,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,aAAa,EAAE,EACzB,OAAO,GAAE,OAAO,CAAC,sBAAsB,CAAM;IAgB/C;;OAEG;IACH,OAAO,CAAC,UAAU;IAelB;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAqBjC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAkB3B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAkC1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA8B1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAa1B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA2D7B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAQ5B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAuCzB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAe5B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAoB5B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAqB1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAYxB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA+B1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAuC1B;;OAEG;IACH,OAAO,CAAC,GAAG;IAMX;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,IAAI;IAsB/C;;OAEG;IACH,OAAO,IAAI,IAAI;CAsChB"}
1
+ {"version":3,"file":"section-tracking.d.ts","sourceRoot":"","sources":["../src/section-tracking.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAmB,sBAAsB,EAAwB,MAAM,uBAAuB,CAAC;AAE1H,MAAM,WAAW,cAAc;IAC7B,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC/E,UAAU,CAAC,QAAQ,EAAE,WAAW,GAAG,WAAW,GAAG,YAAY,GAAG,OAAO,CAAC;IACxE,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;CAC/B;AAWD,qBAAa,sBAAsB;IACjC,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,OAAO,CAAyB;IACxC,OAAO,CAAC,WAAW,CAAS;IAG5B,OAAO,CAAC,aAAa,CAAgD;IACrE,OAAO,CAAC,oBAAoB,CAAqC;IACjE,OAAO,CAAC,UAAU,CAA0C;IAG5D,OAAO,CAAC,kBAAkB,CAAK;IAC/B,OAAO,CAAC,cAAc,CAAc;IACpC,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,mBAAmB,CAAuB;IAGlD,OAAO,CAAC,aAAa,CAAyB;IAC9C,OAAO,CAAC,UAAU,CAAuB;IAGzC,OAAO,CAAC,aAAa,CAAkC;IACvD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAQ;gBAGrC,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,aAAa,EAAE,EACzB,OAAO,GAAE,OAAO,CAAC,sBAAsB,CAAM;IAgB/C;;OAEG;IACH,OAAO,CAAC,UAAU;IAelB;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAqBjC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAkB3B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAgC1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA8B1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAW1B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAyD7B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAQ5B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAqCzB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAe5B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAoB5B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAqB1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAWxB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA6B1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAuC1B;;OAEG;IACH,OAAO,CAAC,GAAG;IAMX;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,IAAI;IAsB/C;;OAEG;IACH,OAAO,IAAI,IAAI;CAsChB"}
@@ -50,7 +50,7 @@ class SectionTrackingManager {
50
50
  initialize() {
51
51
  if (this.isDestroyed)
52
52
  return;
53
- this.log('Initializing section tracking for', this.sections.length, 'sections');
53
+ this.log('Initializing section tracking');
54
54
  // Setup intersection observer
55
55
  this.setupIntersectionObserver();
56
56
  // Setup scroll listener for velocity tracking
@@ -122,7 +122,6 @@ class SectionTrackingManager {
122
122
  if (this.intersectionObserver) {
123
123
  this.intersectionObserver.observe(element);
124
124
  }
125
- this.log('Section initialized and observed:', section.sectionName);
126
125
  }
127
126
  }
128
127
  /**
@@ -156,7 +155,6 @@ class SectionTrackingManager {
156
155
  * Handle section entry (became visible)
157
156
  */
158
157
  handleSectionEntry(state) {
159
- this.log('Section entered view:', state.config.sectionName);
160
158
  state.entryTime = Date.now();
161
159
  state.entryScrollSpeed = this.scrollVelocity;
162
160
  state.lastScrollPosition = window.scrollY;
@@ -210,7 +208,6 @@ class SectionTrackingManager {
210
208
  exit_timestamp: viewData.exitTime,
211
209
  is_split: true, // Flag to indicate this is a periodic split, not final exit
212
210
  });
213
- this.log('Tracked periodic section view split:', state.config.sectionName, 'duration:', duration);
214
211
  // Reset entry time for next split (but keep tracking)
215
212
  state.entryTime = now;
216
213
  state.entryScrollSpeed = this.scrollVelocity;
@@ -233,7 +230,6 @@ class SectionTrackingManager {
233
230
  * Handle section exit (became invisible)
234
231
  */
235
232
  handleSectionExit(state) {
236
- this.log('Section exited view:', state.config.sectionName);
237
233
  // Stop periodic tracking
238
234
  this.stopPeriodicTracking(state.config.sectionName);
239
235
  if (state.entryTime === null)
@@ -318,7 +314,6 @@ class SectionTrackingManager {
318
314
  */
319
315
  queueSectionView(viewData) {
320
316
  this.pendingEvents.push(viewData);
321
- this.log('Queued section view:', viewData.sectionName, 'duration:', viewData.duration);
322
317
  // Setup batch timer if not already set
323
318
  if (this.batchTimer === null) {
324
319
  this.batchTimer = window.setTimeout(() => {
@@ -336,7 +331,6 @@ class SectionTrackingManager {
336
331
  this.pendingEvents = [];
337
332
  return;
338
333
  }
339
- this.log('Flushing', this.pendingEvents.length, 'section view events');
340
334
  // Track each section view
341
335
  for (const viewData of this.pendingEvents) {
342
336
  this.tracker.trackSystemEvent('_grain_section_view', {
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Type definitions for Heatmap Tracking
3
+ */
4
+ export interface HeatmapClickData {
5
+ pageUrl: string;
6
+ xpath: string;
7
+ viewportX: number;
8
+ viewportY: number;
9
+ pageX: number;
10
+ pageY: number;
11
+ elementTag: string;
12
+ elementText?: string;
13
+ timestamp: number;
14
+ }
15
+ export interface HeatmapScrollData {
16
+ pageUrl: string;
17
+ viewportSection: number;
18
+ scrollDepthPx: number;
19
+ durationMs: number;
20
+ entryTimestamp: number;
21
+ exitTimestamp: number;
22
+ pageHeight: number;
23
+ viewportHeight: number;
24
+ }
25
+ export interface HeatmapTrackingOptions {
26
+ scrollDebounceDelay: number;
27
+ batchDelay: number;
28
+ maxBatchSize: number;
29
+ debug?: boolean;
30
+ }
31
+ export interface HeatmapScrollState {
32
+ viewportSection: number;
33
+ entryTime: number;
34
+ scrollDepthPx: number;
35
+ }
36
+ export interface HeatmapTrackingState {
37
+ currentScrollState: HeatmapScrollState | null;
38
+ pendingClicks: HeatmapClickData[];
39
+ pendingScrolls: HeatmapScrollData[];
40
+ }
41
+ //# sourceMappingURL=heatmap-tracking.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heatmap-tracking.d.ts","sourceRoot":"","sources":["../../src/types/heatmap-tracking.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,sBAAsB;IACrC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,oBAAoB;IACnC,kBAAkB,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAC9C,aAAa,EAAE,gBAAgB,EAAE,CAAC;IAClC,cAAc,EAAE,iBAAiB,EAAE,CAAC;CACrC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@grainql/analytics-web",
3
- "version": "2.5.3",
3
+ "version": "2.6.0",
4
4
  "description": "Lightweight TypeScript SDK for sending analytics events and managing remote configurations via Grain's REST API",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",