@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.
- package/README.md +3 -1
- package/dist/activity.js +1 -1
- package/dist/attention-quality.d.ts +128 -0
- package/dist/attention-quality.d.ts.map +1 -0
- package/dist/attention-quality.js +246 -0
- package/dist/cjs/activity.js +1 -1
- package/dist/cjs/activity.js.map +1 -1
- package/dist/cjs/attention-quality.d.ts +128 -0
- package/dist/cjs/attention-quality.d.ts.map +1 -0
- package/dist/cjs/attention-quality.js +246 -0
- package/dist/cjs/attention-quality.js.map +1 -0
- package/dist/cjs/consent.js +4 -4
- package/dist/cjs/consent.js.map +1 -1
- package/dist/cjs/heartbeat.d.ts.map +1 -1
- package/dist/cjs/heartbeat.js +0 -6
- package/dist/cjs/heartbeat.js.map +1 -1
- package/dist/cjs/heatmap-tracking.d.ts +93 -0
- package/dist/cjs/heatmap-tracking.d.ts.map +1 -0
- package/dist/cjs/heatmap-tracking.js +499 -0
- package/dist/cjs/heatmap-tracking.js.map +1 -0
- package/dist/cjs/index.d.ts +11 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/interaction-tracking.d.ts.map +1 -1
- package/dist/cjs/interaction-tracking.js +9 -18
- package/dist/cjs/interaction-tracking.js.map +1 -1
- package/dist/cjs/page-tracking.d.ts.map +1 -1
- package/dist/cjs/page-tracking.js +0 -9
- package/dist/cjs/page-tracking.js.map +1 -1
- package/dist/cjs/section-tracking.d.ts +3 -0
- package/dist/cjs/section-tracking.d.ts.map +1 -1
- package/dist/cjs/section-tracking.js +30 -7
- package/dist/cjs/section-tracking.js.map +1 -1
- package/dist/cjs/types/auto-tracking.d.ts +3 -0
- package/dist/cjs/types/auto-tracking.d.ts.map +1 -1
- package/dist/cjs/types/heatmap-tracking.d.ts +44 -0
- package/dist/cjs/types/heatmap-tracking.d.ts.map +1 -0
- package/dist/cjs/types/heatmap-tracking.js +6 -0
- package/dist/cjs/types/heatmap-tracking.js.map +1 -0
- package/dist/consent.js +4 -4
- package/dist/esm/activity.js +1 -1
- package/dist/esm/activity.js.map +1 -1
- package/dist/esm/attention-quality.d.ts +128 -0
- package/dist/esm/attention-quality.d.ts.map +1 -0
- package/dist/esm/attention-quality.js +242 -0
- package/dist/esm/attention-quality.js.map +1 -0
- package/dist/esm/consent.js +4 -4
- package/dist/esm/consent.js.map +1 -1
- package/dist/esm/heartbeat.d.ts.map +1 -1
- package/dist/esm/heartbeat.js +0 -6
- package/dist/esm/heartbeat.js.map +1 -1
- package/dist/esm/heatmap-tracking.d.ts +93 -0
- package/dist/esm/heatmap-tracking.d.ts.map +1 -0
- package/dist/esm/heatmap-tracking.js +495 -0
- package/dist/esm/heatmap-tracking.js.map +1 -0
- package/dist/esm/index.d.ts +11 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/interaction-tracking.d.ts.map +1 -1
- package/dist/esm/interaction-tracking.js +9 -18
- package/dist/esm/interaction-tracking.js.map +1 -1
- package/dist/esm/page-tracking.d.ts.map +1 -1
- package/dist/esm/page-tracking.js +0 -9
- package/dist/esm/page-tracking.js.map +1 -1
- package/dist/esm/section-tracking.d.ts +3 -0
- package/dist/esm/section-tracking.d.ts.map +1 -1
- package/dist/esm/section-tracking.js +30 -7
- package/dist/esm/section-tracking.js.map +1 -1
- package/dist/esm/types/auto-tracking.d.ts +3 -0
- package/dist/esm/types/auto-tracking.d.ts.map +1 -1
- package/dist/esm/types/heatmap-tracking.d.ts +44 -0
- package/dist/esm/types/heatmap-tracking.d.ts.map +1 -0
- package/dist/esm/types/heatmap-tracking.js +5 -0
- package/dist/esm/types/heatmap-tracking.js.map +1 -0
- package/dist/heartbeat.d.ts.map +1 -1
- package/dist/heartbeat.js +0 -6
- package/dist/heatmap-tracking.d.ts +93 -0
- package/dist/heatmap-tracking.d.ts.map +1 -0
- package/dist/heatmap-tracking.js +499 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.global.dev.js +801 -80
- package/dist/index.global.dev.js.map +4 -4
- package/dist/index.global.js +2 -2
- package/dist/index.global.js.map +4 -4
- package/dist/index.js +70 -38
- package/dist/index.mjs +70 -38
- package/dist/interaction-tracking.d.ts.map +1 -1
- package/dist/interaction-tracking.js +9 -18
- package/dist/page-tracking.d.ts.map +1 -1
- package/dist/page-tracking.js +0 -9
- package/dist/section-tracking.d.ts +3 -0
- package/dist/section-tracking.d.ts.map +1 -1
- package/dist/section-tracking.js +30 -7
- package/dist/types/auto-tracking.d.ts +3 -0
- package/dist/types/auto-tracking.d.ts.map +1 -1
- package/dist/types/heatmap-tracking.d.ts +44 -0
- package/dist/types/heatmap-tracking.d.ts.map +1 -0
- package/package.json +1 -1
package/dist/page-tracking.js
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/section-tracking.js
CHANGED
|
@@ -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
|
|
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
|
-
|
|
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;
|
|
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.
|
|
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",
|