@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
@@ -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;
@@ -3,9 +3,11 @@
3
3
  * Intelligent scroll tracking with viewport metrics, visible sections, and engagement analysis
4
4
  */
5
5
  import type { SectionConfig, SectionTrackingOptions } from './types/auto-tracking';
6
+ import type { ActivityDetector } from './activity';
6
7
  export interface SectionTracker {
7
8
  trackSystemEvent(eventName: string, properties: Record<string, unknown>): void;
8
9
  hasConsent(category: 'analytics' | 'marketing' | 'functional'): boolean;
10
+ getActivityDetector(): ActivityDetector;
9
11
  log(...args: unknown[]): void;
10
12
  }
11
13
  export declare class SectionTrackingManager {
@@ -24,6 +26,7 @@ export declare class SectionTrackingManager {
24
26
  private batchTimer;
25
27
  private sectionTimers;
26
28
  private readonly SPLIT_DURATION;
29
+ private attentionQuality;
27
30
  constructor(tracker: SectionTracker, sections: SectionConfig[], options?: Partial<SectionTrackingOptions>);
28
31
  /**
29
32
  * Initialize section tracking
@@ -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,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,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,mBAAmB,IAAI,gBAAgB,CAAC;IACxC,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;IAGvC,OAAO,CAAC,gBAAgB,CAA0B;gBAGhD,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,aAAa,EAAE,EACzB,OAAO,GAAE,OAAO,CAAC,sBAAsB,CAAM;IA2B/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;IAiF7B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAQ5B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAwCzB;;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;CAyChB"}
@@ -5,6 +5,7 @@
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.SectionTrackingManager = void 0;
8
+ const attention_quality_1 = require("./attention-quality");
8
9
  const DEFAULT_OPTIONS = {
9
10
  minDwellTime: 1000, // 1 second minimum
10
11
  scrollVelocityThreshold: 500, // 500px/s
@@ -34,6 +35,13 @@ class SectionTrackingManager {
34
35
  this.tracker = tracker;
35
36
  this.sections = sections;
36
37
  this.options = { ...DEFAULT_OPTIONS, ...options };
38
+ // Initialize attention quality manager
39
+ this.attentionQuality = new attention_quality_1.AttentionQualityManager(tracker.getActivityDetector(), {
40
+ maxSectionDuration: 9000, // 9 seconds
41
+ minScrollDistance: 100, // 100 pixels
42
+ idleThreshold: 30000, // 30 seconds
43
+ debug: this.options.debug,
44
+ });
37
45
  if (typeof window !== 'undefined' && typeof document !== 'undefined') {
38
46
  // Initialize after DOM is ready
39
47
  if (document.readyState === 'loading') {
@@ -50,7 +58,7 @@ class SectionTrackingManager {
50
58
  initialize() {
51
59
  if (this.isDestroyed)
52
60
  return;
53
- this.log('Initializing section tracking for', this.sections.length, 'sections');
61
+ this.log('Initializing section tracking');
54
62
  // Setup intersection observer
55
63
  this.setupIntersectionObserver();
56
64
  // Setup scroll listener for velocity tracking
@@ -122,7 +130,6 @@ class SectionTrackingManager {
122
130
  if (this.intersectionObserver) {
123
131
  this.intersectionObserver.observe(element);
124
132
  }
125
- this.log('Section initialized and observed:', section.sectionName);
126
133
  }
127
134
  }
128
135
  /**
@@ -156,7 +163,6 @@ class SectionTrackingManager {
156
163
  * Handle section entry (became visible)
157
164
  */
158
165
  handleSectionEntry(state) {
159
- this.log('Section entered view:', state.config.sectionName);
160
166
  state.entryTime = Date.now();
161
167
  state.entryScrollSpeed = this.scrollVelocity;
162
168
  state.lastScrollPosition = window.scrollY;
@@ -180,6 +186,21 @@ class SectionTrackingManager {
180
186
  const duration = now - state.entryTime;
181
187
  // Only track if minimum dwell time has passed
182
188
  if (duration >= this.options.minDwellTime) {
189
+ // Check attention quality policies
190
+ const currentScrollY = window.scrollY;
191
+ const attentionCheck = this.attentionQuality.shouldTrackSection(state.config.sectionName, currentScrollY);
192
+ // If attention was reset due to scroll, reset our entry time
193
+ if (attentionCheck.resetAttention) {
194
+ this.log(`Section "${state.config.sectionName}": Attention reset, restarting timer`);
195
+ state.entryTime = now;
196
+ state.entryScrollSpeed = this.scrollVelocity;
197
+ return;
198
+ }
199
+ // If tracking is not allowed (page hidden, idle, or max duration reached)
200
+ if (!attentionCheck.shouldTrack) {
201
+ this.log(`Section "${state.config.sectionName}": Tracking paused - ${attentionCheck.reason}`);
202
+ return;
203
+ }
183
204
  // Create partial section view data
184
205
  const viewData = {
185
206
  sectionName: state.config.sectionName,
@@ -210,7 +231,8 @@ class SectionTrackingManager {
210
231
  exit_timestamp: viewData.exitTime,
211
232
  is_split: true, // Flag to indicate this is a periodic split, not final exit
212
233
  });
213
- this.log('Tracked periodic section view split:', state.config.sectionName, 'duration:', duration);
234
+ // Update attention quality duration tracker
235
+ this.attentionQuality.updateSectionDuration(state.config.sectionName, duration);
214
236
  // Reset entry time for next split (but keep tracking)
215
237
  state.entryTime = now;
216
238
  state.entryScrollSpeed = this.scrollVelocity;
@@ -233,9 +255,10 @@ class SectionTrackingManager {
233
255
  * Handle section exit (became invisible)
234
256
  */
235
257
  handleSectionExit(state) {
236
- this.log('Section exited view:', state.config.sectionName);
237
258
  // Stop periodic tracking
238
259
  this.stopPeriodicTracking(state.config.sectionName);
260
+ // Reset attention for this section
261
+ this.attentionQuality.resetSection(state.config.sectionName);
239
262
  if (state.entryTime === null)
240
263
  return;
241
264
  state.exitTime = Date.now();
@@ -318,7 +341,6 @@ class SectionTrackingManager {
318
341
  */
319
342
  queueSectionView(viewData) {
320
343
  this.pendingEvents.push(viewData);
321
- this.log('Queued section view:', viewData.sectionName, 'duration:', viewData.duration);
322
344
  // Setup batch timer if not already set
323
345
  if (this.batchTimer === null) {
324
346
  this.batchTimer = window.setTimeout(() => {
@@ -336,7 +358,6 @@ class SectionTrackingManager {
336
358
  this.pendingEvents = [];
337
359
  return;
338
360
  }
339
- this.log('Flushing', this.pendingEvents.length, 'section view events');
340
361
  // Track each section view
341
362
  for (const viewData of this.pendingEvents) {
342
363
  this.tracker.trackSystemEvent('_grain_section_view', {
@@ -445,6 +466,8 @@ class SectionTrackingManager {
445
466
  this.intersectionObserver.disconnect();
446
467
  this.intersectionObserver = null;
447
468
  }
469
+ // Destroy attention quality manager
470
+ this.attentionQuality.destroy();
448
471
  // Clear state
449
472
  this.sectionStates.clear();
450
473
  this.xpathCache.clear();
@@ -39,6 +39,9 @@ export interface SectionTrackingOptions {
39
39
  debounceDelay: number;
40
40
  batchDelay: number;
41
41
  debug?: boolean;
42
+ maxSectionDuration?: number;
43
+ minScrollDistance?: number;
44
+ idleThreshold?: number;
42
45
  }
43
46
  export interface SectionTrackingState {
44
47
  element: Element;
@@ -1 +1 @@
1
- {"version":3,"file":"auto-tracking.d.ts","sourceRoot":"","sources":["../../src/types/auto-tracking.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,iBAAiB,EAAE,CAAC;IAClC,QAAQ,EAAE,aAAa,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,sBAAsB;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,uBAAuB,EAAE,MAAM,CAAC;IAChC,qBAAqB,EAAE,MAAM,CAAC;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,aAAa,CAAC;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;IACnB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;CACxB"}
1
+ {"version":3,"file":"auto-tracking.d.ts","sourceRoot":"","sources":["../../src/types/auto-tracking.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,iBAAiB,EAAE,CAAC;IAClC,QAAQ,EAAE,aAAa,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,sBAAsB;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,uBAAuB,EAAE,MAAM,CAAC;IAChC,qBAAqB,EAAE,MAAM,CAAC;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,aAAa,CAAC;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;IACnB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;CACxB"}
@@ -0,0 +1,44 @@
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
+ maxSectionDuration?: number;
31
+ minScrollDistance?: number;
32
+ idleThreshold?: number;
33
+ }
34
+ export interface HeatmapScrollState {
35
+ viewportSection: number;
36
+ entryTime: number;
37
+ scrollDepthPx: number;
38
+ }
39
+ export interface HeatmapTrackingState {
40
+ currentScrollState: HeatmapScrollState | null;
41
+ pendingClicks: HeatmapClickData[];
42
+ pendingScrolls: HeatmapScrollData[];
43
+ }
44
+ //# 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;IAEhB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;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.4",
3
+ "version": "2.7.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",