@zaplier/sdk 1.6.7 → 1.6.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +116 -78
- package/dist/index.cjs.map +1 -1
- package/dist/index.esm.js +116 -78
- package/dist/index.esm.js.map +1 -1
- package/dist/sdk.js +116 -78
- package/dist/sdk.js.map +1 -1
- package/dist/sdk.min.js +1 -1
- package/dist/src/modules/auto-tracker.d.ts +2 -14
- package/dist/src/modules/auto-tracker.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -19265,21 +19265,85 @@ class SessionReplayEngine {
|
|
|
19265
19265
|
class AutoTracker {
|
|
19266
19266
|
constructor(sdkInstance, config = {}) {
|
|
19267
19267
|
this.observedElements = new Set();
|
|
19268
|
-
|
|
19269
|
-
* Event handlers (bound to this)
|
|
19270
|
-
*/
|
|
19271
|
-
this.handleClick = (event) => {
|
|
19272
|
-
const target = event.target;
|
|
19273
|
-
if (target.hasAttribute("data-track-click")) ;
|
|
19274
|
-
};
|
|
19268
|
+
this.scrollThrottle = 0;
|
|
19275
19269
|
this.handleScroll = () => {
|
|
19276
|
-
|
|
19277
|
-
|
|
19278
|
-
|
|
19279
|
-
|
|
19270
|
+
if (!this.config.trackScrolls)
|
|
19271
|
+
return;
|
|
19272
|
+
// Throttle scroll events for performance
|
|
19273
|
+
const now = Date.now();
|
|
19274
|
+
if (now - this.scrollThrottle < 100)
|
|
19275
|
+
return; // 100ms throttle
|
|
19276
|
+
this.scrollThrottle = now;
|
|
19277
|
+
const scrollElements = document.querySelectorAll('[data-track-scroll]');
|
|
19278
|
+
if (this.config.debug && scrollElements.length > 0) {
|
|
19279
|
+
console.log(`[AutoTracker] Checking ${scrollElements.length} scroll elements`, {
|
|
19280
|
+
scrollY: window.scrollY,
|
|
19281
|
+
innerHeight: window.innerHeight
|
|
19282
|
+
});
|
|
19283
|
+
}
|
|
19284
|
+
scrollElements.forEach((element) => {
|
|
19285
|
+
let hasTriggered = element.getAttribute('data-scroll-triggered') === 'true';
|
|
19286
|
+
if (hasTriggered)
|
|
19287
|
+
return;
|
|
19288
|
+
const threshold = parseFloat(element.getAttribute("data-scroll-threshold") || "0.5");
|
|
19289
|
+
const rect = element.getBoundingClientRect();
|
|
19290
|
+
const elementHeight = rect.height;
|
|
19291
|
+
const visibleHeight = Math.min(rect.bottom, window.innerHeight) - Math.max(rect.top, 0);
|
|
19292
|
+
const visibilityRatio = Math.max(0, visibleHeight) / elementHeight;
|
|
19293
|
+
if (this.config.debug) {
|
|
19294
|
+
console.log(`[AutoTracker] Element check:`, {
|
|
19295
|
+
elementId: element.id || element.className,
|
|
19296
|
+
visibilityRatio: Math.round(visibilityRatio * 100) / 100,
|
|
19297
|
+
threshold,
|
|
19298
|
+
triggered: hasTriggered
|
|
19299
|
+
});
|
|
19300
|
+
}
|
|
19301
|
+
if (visibilityRatio >= threshold) {
|
|
19302
|
+
element.setAttribute('data-scroll-triggered', 'true');
|
|
19303
|
+
const eventName = element.getAttribute("data-track-scroll");
|
|
19304
|
+
if (!eventName)
|
|
19305
|
+
return;
|
|
19306
|
+
const metadata = this.extractMetadata(element);
|
|
19307
|
+
this.trackEvent(eventName, {
|
|
19308
|
+
type: "scroll",
|
|
19309
|
+
element: element.tagName.toLowerCase(),
|
|
19310
|
+
threshold,
|
|
19311
|
+
scrollDepth: window.scrollY,
|
|
19312
|
+
visibilityRatio: Math.round(visibilityRatio * 100) / 100,
|
|
19313
|
+
...metadata,
|
|
19314
|
+
});
|
|
19315
|
+
if (this.config.debug) {
|
|
19316
|
+
console.log(`[AutoTracker] Scroll tracked: ${eventName}`, {
|
|
19317
|
+
threshold,
|
|
19318
|
+
visibilityRatio,
|
|
19319
|
+
scrollDepth: window.scrollY,
|
|
19320
|
+
...metadata
|
|
19321
|
+
});
|
|
19322
|
+
}
|
|
19323
|
+
}
|
|
19324
|
+
});
|
|
19280
19325
|
};
|
|
19281
|
-
this.
|
|
19282
|
-
|
|
19326
|
+
this.handleClick = (event) => {
|
|
19327
|
+
if (!this.config.trackClicks)
|
|
19328
|
+
return;
|
|
19329
|
+
const target = event.target;
|
|
19330
|
+
if (!target || !target.hasAttribute("data-track-click"))
|
|
19331
|
+
return;
|
|
19332
|
+
const eventName = target.getAttribute("data-track-click");
|
|
19333
|
+
if (!eventName)
|
|
19334
|
+
return;
|
|
19335
|
+
const metadata = this.extractMetadata(target);
|
|
19336
|
+
this.trackEvent(eventName, {
|
|
19337
|
+
type: "click",
|
|
19338
|
+
element: target.tagName.toLowerCase(),
|
|
19339
|
+
...metadata,
|
|
19340
|
+
});
|
|
19341
|
+
if (this.config.debug) {
|
|
19342
|
+
console.log(`[AutoTracker] Click tracked: ${eventName}`, {
|
|
19343
|
+
element: target.tagName.toLowerCase(),
|
|
19344
|
+
...metadata
|
|
19345
|
+
});
|
|
19346
|
+
}
|
|
19283
19347
|
};
|
|
19284
19348
|
this.sdkInstance = sdkInstance;
|
|
19285
19349
|
this.config = {
|
|
@@ -19300,7 +19364,36 @@ class AutoTracker {
|
|
|
19300
19364
|
if (!this.config.enabled)
|
|
19301
19365
|
return;
|
|
19302
19366
|
if (this.config.debug) {
|
|
19303
|
-
console.log("[Zaplier AutoTracker] Iniciando auto tracking"
|
|
19367
|
+
console.log("[Zaplier AutoTracker] Iniciando auto tracking", {
|
|
19368
|
+
enabled: this.config.enabled,
|
|
19369
|
+
trackClicks: this.config.trackClicks,
|
|
19370
|
+
trackScrolls: this.config.trackScrolls,
|
|
19371
|
+
trackViews: this.config.trackViews,
|
|
19372
|
+
trackHovers: this.config.trackHovers,
|
|
19373
|
+
trackForms: this.config.trackForms
|
|
19374
|
+
});
|
|
19375
|
+
// Log elementos existentes encontrados
|
|
19376
|
+
setTimeout(() => {
|
|
19377
|
+
const clickElements = document.querySelectorAll('[data-track-click]');
|
|
19378
|
+
const scrollElements = document.querySelectorAll('[data-track-scroll]');
|
|
19379
|
+
const viewElements = document.querySelectorAll('[data-track-view]');
|
|
19380
|
+
const hoverElements = document.querySelectorAll('[data-track-hover]');
|
|
19381
|
+
const formElements = document.querySelectorAll('[data-track-form]');
|
|
19382
|
+
console.log("[Zaplier AutoTracker] Elementos encontrados:", {
|
|
19383
|
+
clickElements: clickElements.length,
|
|
19384
|
+
scrollElements: scrollElements.length,
|
|
19385
|
+
viewElements: viewElements.length,
|
|
19386
|
+
hoverElements: hoverElements.length,
|
|
19387
|
+
formElements: formElements.length
|
|
19388
|
+
});
|
|
19389
|
+
if (scrollElements.length > 0) {
|
|
19390
|
+
console.log("[Zaplier AutoTracker] Elementos de scroll:", Array.from(scrollElements).map(el => ({
|
|
19391
|
+
tagName: el.tagName,
|
|
19392
|
+
trackEvent: el.getAttribute('data-track-scroll'),
|
|
19393
|
+
threshold: el.getAttribute('data-scroll-threshold') || '0.5'
|
|
19394
|
+
})));
|
|
19395
|
+
}
|
|
19396
|
+
}, 100);
|
|
19304
19397
|
}
|
|
19305
19398
|
// Observer para novos elementos no DOM
|
|
19306
19399
|
this.observeDOM();
|
|
@@ -19310,6 +19403,13 @@ class AutoTracker {
|
|
|
19310
19403
|
if (this.config.trackViews) {
|
|
19311
19404
|
this.setupViewTracking();
|
|
19312
19405
|
}
|
|
19406
|
+
// Setup global event listeners
|
|
19407
|
+
if (this.config.trackClicks) {
|
|
19408
|
+
document.addEventListener("click", this.handleClick, { passive: true });
|
|
19409
|
+
}
|
|
19410
|
+
if (this.config.trackScrolls) {
|
|
19411
|
+
document.addEventListener("scroll", this.handleScroll, { passive: true });
|
|
19412
|
+
}
|
|
19313
19413
|
}
|
|
19314
19414
|
/**
|
|
19315
19415
|
* Parar auto tracking
|
|
@@ -19317,8 +19417,6 @@ class AutoTracker {
|
|
|
19317
19417
|
stop() {
|
|
19318
19418
|
document.removeEventListener("click", this.handleClick);
|
|
19319
19419
|
document.removeEventListener("scroll", this.handleScroll);
|
|
19320
|
-
document.removeEventListener("mouseover", this.handleHover);
|
|
19321
|
-
document.removeEventListener("submit", this.handleForm);
|
|
19322
19420
|
if (this.intersectionObserver) {
|
|
19323
19421
|
this.intersectionObserver.disconnect();
|
|
19324
19422
|
}
|
|
@@ -19356,14 +19454,8 @@ class AutoTracker {
|
|
|
19356
19454
|
* Processar um elemento específico
|
|
19357
19455
|
*/
|
|
19358
19456
|
processElement(element) {
|
|
19359
|
-
// Click tracking
|
|
19360
|
-
|
|
19361
|
-
this.setupClickTracking(element);
|
|
19362
|
-
}
|
|
19363
|
-
// Scroll tracking
|
|
19364
|
-
if (this.config.trackScrolls && element.hasAttribute("data-track-scroll")) {
|
|
19365
|
-
this.setupScrollTracking(element);
|
|
19366
|
-
}
|
|
19457
|
+
// Click tracking - handled by global listener
|
|
19458
|
+
// Scroll tracking - handled by global listener
|
|
19367
19459
|
// View tracking
|
|
19368
19460
|
if (this.config.trackViews && element.hasAttribute("data-track-view")) {
|
|
19369
19461
|
this.setupElementViewTracking(element);
|
|
@@ -19377,60 +19469,6 @@ class AutoTracker {
|
|
|
19377
19469
|
this.setupFormTracking(element);
|
|
19378
19470
|
}
|
|
19379
19471
|
}
|
|
19380
|
-
/**
|
|
19381
|
-
* Setup click tracking
|
|
19382
|
-
*/
|
|
19383
|
-
setupClickTracking(element) {
|
|
19384
|
-
element.addEventListener("click", (event) => {
|
|
19385
|
-
const eventName = element.getAttribute("data-track-click");
|
|
19386
|
-
if (!eventName)
|
|
19387
|
-
return;
|
|
19388
|
-
const metadata = this.extractMetadata(element);
|
|
19389
|
-
this.trackEvent(eventName, {
|
|
19390
|
-
type: "click",
|
|
19391
|
-
element: element.tagName.toLowerCase(),
|
|
19392
|
-
...metadata,
|
|
19393
|
-
});
|
|
19394
|
-
if (this.config.debug) {
|
|
19395
|
-
console.log(`[AutoTracker] Click tracked: ${eventName}`, metadata);
|
|
19396
|
-
}
|
|
19397
|
-
});
|
|
19398
|
-
}
|
|
19399
|
-
/**
|
|
19400
|
-
* Setup scroll tracking
|
|
19401
|
-
*/
|
|
19402
|
-
setupScrollTracking(element) {
|
|
19403
|
-
let hasTriggered = false;
|
|
19404
|
-
const threshold = parseFloat(element.getAttribute("data-scroll-threshold") || "0.5");
|
|
19405
|
-
const handleScroll = () => {
|
|
19406
|
-
if (hasTriggered)
|
|
19407
|
-
return;
|
|
19408
|
-
const rect = element.getBoundingClientRect();
|
|
19409
|
-
const elementHeight = rect.height;
|
|
19410
|
-
const visibleHeight = Math.min(rect.bottom, window.innerHeight) - Math.max(rect.top, 0);
|
|
19411
|
-
const visibilityRatio = Math.max(0, visibleHeight) / elementHeight;
|
|
19412
|
-
if (visibilityRatio >= threshold) {
|
|
19413
|
-
hasTriggered = true;
|
|
19414
|
-
const eventName = element.getAttribute("data-track-scroll");
|
|
19415
|
-
if (!eventName)
|
|
19416
|
-
return;
|
|
19417
|
-
const metadata = this.extractMetadata(element);
|
|
19418
|
-
this.trackEvent(eventName, {
|
|
19419
|
-
type: "scroll",
|
|
19420
|
-
element: element.tagName.toLowerCase(),
|
|
19421
|
-
threshold,
|
|
19422
|
-
scrollDepth: window.scrollY,
|
|
19423
|
-
...metadata,
|
|
19424
|
-
});
|
|
19425
|
-
if (this.config.debug) {
|
|
19426
|
-
console.log(`[AutoTracker] Scroll tracked: ${eventName}`, metadata);
|
|
19427
|
-
}
|
|
19428
|
-
}
|
|
19429
|
-
};
|
|
19430
|
-
document.addEventListener("scroll", handleScroll, { passive: true });
|
|
19431
|
-
// Check immediately in case element is already in view
|
|
19432
|
-
setTimeout(handleScroll, 100);
|
|
19433
|
-
}
|
|
19434
19472
|
/**
|
|
19435
19473
|
* Setup view tracking usando Intersection Observer
|
|
19436
19474
|
*/
|