@absmartly/sdk-plugins 1.0.1

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 (177) hide show
  1. package/README.md +1101 -0
  2. package/dist/absmartly-cookie.min.js +1 -0
  3. package/dist/absmartly-dom-changes-core.min.js +1 -0
  4. package/dist/absmartly-dom-changes-lite.min.js +1 -0
  5. package/dist/absmartly-overrides-full.min.js +1 -0
  6. package/dist/absmartly-overrides-lite.min.js +1 -0
  7. package/dist/absmartly-sdk-plugins.min.js +1 -0
  8. package/dist/absmartly-vitals.min.js +1 -0
  9. package/es/cookies/CookiePlugin.js +410 -0
  10. package/es/cookies/CookiePlugin.js.map +1 -0
  11. package/es/cookies/index.js +2 -0
  12. package/es/cookies/index.js.map +1 -0
  13. package/es/core/DOMChangesPluginLite.js +1124 -0
  14. package/es/core/DOMChangesPluginLite.js.map +1 -0
  15. package/es/core/DOMManipulatorLite.js +410 -0
  16. package/es/core/DOMManipulatorLite.js.map +1 -0
  17. package/es/core/ExposureTracker.js +501 -0
  18. package/es/core/ExposureTracker.js.map +1 -0
  19. package/es/core/HTMLInjector.js +333 -0
  20. package/es/core/HTMLInjector.js.map +1 -0
  21. package/es/core/PendingChangeManager.js +440 -0
  22. package/es/core/PendingChangeManager.js.map +1 -0
  23. package/es/core/StyleSheetManager.js +78 -0
  24. package/es/core/StyleSheetManager.js.map +1 -0
  25. package/es/entries/cookie-only.js +10 -0
  26. package/es/entries/cookie-only.js.map +1 -0
  27. package/es/entries/dom-only.js +13 -0
  28. package/es/entries/dom-only.js.map +1 -0
  29. package/es/entries/dom-with-overrides-full.js +19 -0
  30. package/es/entries/dom-with-overrides-full.js.map +1 -0
  31. package/es/entries/dom-with-overrides-lite.js +15 -0
  32. package/es/entries/dom-with-overrides-lite.js.map +1 -0
  33. package/es/entries/overrides-full-only.js +15 -0
  34. package/es/entries/overrides-full-only.js.map +1 -0
  35. package/es/entries/overrides-lite-only.js +12 -0
  36. package/es/entries/overrides-lite-only.js.map +1 -0
  37. package/es/entries/vitals-only.js +10 -0
  38. package/es/entries/vitals-only.js.map +1 -0
  39. package/es/index.js +17 -0
  40. package/es/index.js.map +1 -0
  41. package/es/overrides/BrowserCookieAdapter.js +76 -0
  42. package/es/overrides/BrowserCookieAdapter.js.map +1 -0
  43. package/es/overrides/OverridesPlugin.js +903 -0
  44. package/es/overrides/OverridesPlugin.js.map +1 -0
  45. package/es/overrides/OverridesPluginFull.js +32 -0
  46. package/es/overrides/OverridesPluginFull.js.map +1 -0
  47. package/es/overrides/OverridesPluginLite.js +352 -0
  48. package/es/overrides/OverridesPluginLite.js.map +1 -0
  49. package/es/overrides/index.js +4 -0
  50. package/es/overrides/index.js.map +1 -0
  51. package/es/overrides/types.js +2 -0
  52. package/es/overrides/types.js.map +1 -0
  53. package/es/parsers/VariantExtractor.js +570 -0
  54. package/es/parsers/VariantExtractor.js.map +1 -0
  55. package/es/types/index.js +2 -0
  56. package/es/types/index.js.map +1 -0
  57. package/es/utils/URLMatcher.js +114 -0
  58. package/es/utils/URLMatcher.js.map +1 -0
  59. package/es/utils/debug.js +184 -0
  60. package/es/utils/debug.js.map +1 -0
  61. package/es/vitals/WebVitalsPlugin.js +379 -0
  62. package/es/vitals/WebVitalsPlugin.js.map +1 -0
  63. package/es/vitals/index.js +2 -0
  64. package/es/vitals/index.js.map +1 -0
  65. package/lib/cookies/CookiePlugin.d.ts +55 -0
  66. package/lib/cookies/CookiePlugin.js +413 -0
  67. package/lib/cookies/CookiePlugin.js.map +1 -0
  68. package/lib/cookies/index.d.ts +2 -0
  69. package/lib/cookies/index.js +6 -0
  70. package/lib/cookies/index.js.map +1 -0
  71. package/lib/core/DOMChangesPluginLite.d.ts +89 -0
  72. package/lib/core/DOMChangesPluginLite.js +1127 -0
  73. package/lib/core/DOMChangesPluginLite.js.map +1 -0
  74. package/lib/core/DOMManipulatorLite.d.ts +21 -0
  75. package/lib/core/DOMManipulatorLite.js +413 -0
  76. package/lib/core/DOMManipulatorLite.js.map +1 -0
  77. package/lib/core/ExposureTracker.d.ts +81 -0
  78. package/lib/core/ExposureTracker.js +504 -0
  79. package/lib/core/ExposureTracker.js.map +1 -0
  80. package/lib/core/HTMLInjector.d.ts +19 -0
  81. package/lib/core/HTMLInjector.js +336 -0
  82. package/lib/core/HTMLInjector.js.map +1 -0
  83. package/lib/core/PendingChangeManager.d.ts +31 -0
  84. package/lib/core/PendingChangeManager.js +443 -0
  85. package/lib/core/PendingChangeManager.js.map +1 -0
  86. package/lib/core/StyleSheetManager.d.ts +16 -0
  87. package/lib/core/StyleSheetManager.js +81 -0
  88. package/lib/core/StyleSheetManager.js.map +1 -0
  89. package/lib/entries/cookie-only.d.ts +8 -0
  90. package/lib/entries/cookie-only.js +12 -0
  91. package/lib/entries/cookie-only.js.map +1 -0
  92. package/lib/entries/dom-only.d.ts +9 -0
  93. package/lib/entries/dom-only.js +29 -0
  94. package/lib/entries/dom-only.js.map +1 -0
  95. package/lib/entries/dom-with-overrides-full.d.ts +15 -0
  96. package/lib/entries/dom-with-overrides-full.js +39 -0
  97. package/lib/entries/dom-with-overrides-full.js.map +1 -0
  98. package/lib/entries/dom-with-overrides-lite.d.ts +11 -0
  99. package/lib/entries/dom-with-overrides-lite.js +32 -0
  100. package/lib/entries/dom-with-overrides-lite.js.map +1 -0
  101. package/lib/entries/overrides-full-only.d.ts +11 -0
  102. package/lib/entries/overrides-full-only.js +33 -0
  103. package/lib/entries/overrides-full-only.js.map +1 -0
  104. package/lib/entries/overrides-lite-only.d.ts +8 -0
  105. package/lib/entries/overrides-lite-only.js +28 -0
  106. package/lib/entries/overrides-lite-only.js.map +1 -0
  107. package/lib/entries/vitals-only.d.ts +8 -0
  108. package/lib/entries/vitals-only.js +12 -0
  109. package/lib/entries/vitals-only.js.map +1 -0
  110. package/lib/index.d.ts +13 -0
  111. package/lib/index.js +34 -0
  112. package/lib/index.js.map +1 -0
  113. package/lib/overrides/BrowserCookieAdapter.d.ts +6 -0
  114. package/lib/overrides/BrowserCookieAdapter.js +79 -0
  115. package/lib/overrides/BrowserCookieAdapter.js.map +1 -0
  116. package/lib/overrides/OverridesPlugin.d.ts +33 -0
  117. package/lib/overrides/OverridesPlugin.js +906 -0
  118. package/lib/overrides/OverridesPlugin.js.map +1 -0
  119. package/lib/overrides/OverridesPluginFull.d.ts +9 -0
  120. package/lib/overrides/OverridesPluginFull.js +35 -0
  121. package/lib/overrides/OverridesPluginFull.js.map +1 -0
  122. package/lib/overrides/OverridesPluginLite.d.ts +27 -0
  123. package/lib/overrides/OverridesPluginLite.js +355 -0
  124. package/lib/overrides/OverridesPluginLite.js.map +1 -0
  125. package/lib/overrides/index.d.ts +3 -0
  126. package/lib/overrides/index.js +23 -0
  127. package/lib/overrides/index.js.map +1 -0
  128. package/lib/overrides/types.d.ts +43 -0
  129. package/lib/overrides/types.js +3 -0
  130. package/lib/overrides/types.js.map +1 -0
  131. package/lib/parsers/VariantExtractor.d.ts +49 -0
  132. package/lib/parsers/VariantExtractor.js +573 -0
  133. package/lib/parsers/VariantExtractor.js.map +1 -0
  134. package/lib/types/index.d.ts +177 -0
  135. package/lib/types/index.js +3 -0
  136. package/lib/types/index.js.map +1 -0
  137. package/lib/utils/URLMatcher.d.ts +20 -0
  138. package/lib/utils/URLMatcher.js +117 -0
  139. package/lib/utils/URLMatcher.js.map +1 -0
  140. package/lib/utils/debug.d.ts +41 -0
  141. package/lib/utils/debug.js +195 -0
  142. package/lib/utils/debug.js.map +1 -0
  143. package/lib/vitals/WebVitalsPlugin.d.ts +37 -0
  144. package/lib/vitals/WebVitalsPlugin.js +382 -0
  145. package/lib/vitals/WebVitalsPlugin.js.map +1 -0
  146. package/lib/vitals/index.d.ts +2 -0
  147. package/lib/vitals/index.js +6 -0
  148. package/lib/vitals/index.js.map +1 -0
  149. package/package.json +94 -0
  150. package/types/cookies/CookiePlugin.d.ts +55 -0
  151. package/types/cookies/index.d.ts +2 -0
  152. package/types/core/DOMChangesPluginLite.d.ts +89 -0
  153. package/types/core/DOMManipulatorLite.d.ts +21 -0
  154. package/types/core/ExposureTracker.d.ts +81 -0
  155. package/types/core/HTMLInjector.d.ts +19 -0
  156. package/types/core/PendingChangeManager.d.ts +31 -0
  157. package/types/core/StyleSheetManager.d.ts +16 -0
  158. package/types/entries/cookie-only.d.ts +8 -0
  159. package/types/entries/dom-only.d.ts +9 -0
  160. package/types/entries/dom-with-overrides-full.d.ts +15 -0
  161. package/types/entries/dom-with-overrides-lite.d.ts +11 -0
  162. package/types/entries/overrides-full-only.d.ts +11 -0
  163. package/types/entries/overrides-lite-only.d.ts +8 -0
  164. package/types/entries/vitals-only.d.ts +8 -0
  165. package/types/index.d.ts +13 -0
  166. package/types/overrides/BrowserCookieAdapter.d.ts +6 -0
  167. package/types/overrides/OverridesPlugin.d.ts +33 -0
  168. package/types/overrides/OverridesPluginFull.d.ts +9 -0
  169. package/types/overrides/OverridesPluginLite.d.ts +27 -0
  170. package/types/overrides/index.d.ts +3 -0
  171. package/types/overrides/types.d.ts +43 -0
  172. package/types/parsers/VariantExtractor.d.ts +49 -0
  173. package/types/types/index.d.ts +177 -0
  174. package/types/utils/URLMatcher.d.ts +20 -0
  175. package/types/utils/debug.d.ts +41 -0
  176. package/types/vitals/WebVitalsPlugin.d.ts +37 -0
  177. package/types/vitals/index.d.ts +2 -0
@@ -0,0 +1,501 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ var __generator = (this && this.__generator) || function (thisArg, body) {
11
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
12
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
13
+ function verb(n) { return function (v) { return step([n, v]); }; }
14
+ function step(op) {
15
+ if (f) throw new TypeError("Generator is already executing.");
16
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
17
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
18
+ if (y = 0, t) op = [op[0] & 2, t.value];
19
+ switch (op[0]) {
20
+ case 0: case 1: t = op; break;
21
+ case 4: _.label++; return { value: op[1], done: false };
22
+ case 5: _.label++; y = op[1]; op = [0]; continue;
23
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
24
+ default:
25
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
26
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
27
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
28
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
29
+ if (t[2]) _.ops.pop();
30
+ _.trys.pop(); continue;
31
+ }
32
+ op = body.call(thisArg, _);
33
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
34
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
35
+ }
36
+ };
37
+ var __read = (this && this.__read) || function (o, n) {
38
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
39
+ if (!m) return o;
40
+ var i = m.call(o), r, ar = [], e;
41
+ try {
42
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
43
+ }
44
+ catch (error) { e = { error: error }; }
45
+ finally {
46
+ try {
47
+ if (r && !r.done && (m = i["return"])) m.call(i);
48
+ }
49
+ finally { if (e) throw e.error; }
50
+ }
51
+ return ar;
52
+ };
53
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
54
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
55
+ if (ar || !(i in from)) {
56
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
57
+ ar[i] = from[i];
58
+ }
59
+ }
60
+ return to.concat(ar || Array.prototype.slice.call(from));
61
+ };
62
+ import { logDebug } from '../utils/debug';
63
+ var ExposureTracker = /** @class */ (function () {
64
+ function ExposureTracker(context, debug) {
65
+ if (debug === void 0) { debug = false; }
66
+ this.context = context;
67
+ this.experiments = new Map();
68
+ this.trackedElements = new Map();
69
+ this.mutationObserver = null;
70
+ this.placeholders = new Map(); // experimentName-selector -> placeholder
71
+ this.debug = debug;
72
+ this.setupIntersectionObserver();
73
+ }
74
+ /**
75
+ * Register an experiment with all its variants' changes for comprehensive tracking
76
+ */
77
+ ExposureTracker.prototype.registerExperiment = function (experimentName, currentVariant, currentChanges, allVariantsChanges) {
78
+ var _this = this;
79
+ if (this.debug) {
80
+ logDebug("[ABsmartly] Registering experiment ".concat(experimentName, " for exposure tracking"));
81
+ }
82
+ // Collect all unique selectors that need viewport tracking across ALL variants
83
+ var viewportSelectors = new Set();
84
+ var moveParentSelectors = new Set(); // Parent containers for move changes
85
+ // First pass: collect all move changes across all variants
86
+ // We need to track ALL possible positions where elements could be
87
+ var moveElements = new Map(); // selector -> Set of target parent positions
88
+ allVariantsChanges.forEach(function (variantChanges) {
89
+ variantChanges.forEach(function (change) {
90
+ if (change.trigger_on_view) {
91
+ if (change.type === 'move') {
92
+ if (!moveElements.has(change.selector)) {
93
+ moveElements.set(change.selector, new Set());
94
+ }
95
+ // Add the target parent for this move
96
+ if (change.targetSelector) {
97
+ moveElements.get(change.selector).add(change.targetSelector);
98
+ }
99
+ }
100
+ else {
101
+ // For non-move changes, track the selector directly
102
+ viewportSelectors.add(change.selector);
103
+ }
104
+ }
105
+ });
106
+ });
107
+ // For cross-variant move tracking, we need to track the EXACT POSITION where
108
+ // elements would appear in other variants. We use container-based invisible elements
109
+ // positioned exactly where the element would be, using CSS positioning.
110
+ moveElements.forEach(function (_targetParents, selector) {
111
+ // Collect all move changes for this element across ALL variants
112
+ var allMovesForElement = [];
113
+ allVariantsChanges.forEach(function (variantChanges, variantIndex) {
114
+ var moveChange = variantChanges.find(function (c) { return c.type === 'move' && c.selector === selector && c.trigger_on_view; });
115
+ if (moveChange === null || moveChange === void 0 ? void 0 : moveChange.targetSelector) {
116
+ allMovesForElement.push({
117
+ targetSelector: moveChange.targetSelector,
118
+ position: moveChange.position || 'lastChild',
119
+ variantIndex: variantIndex,
120
+ });
121
+ }
122
+ });
123
+ // Check if current variant has a move for this element
124
+ var currentMoveIndex = allMovesForElement.findIndex(function (m) { return m.variantIndex === currentVariant; });
125
+ if (currentMoveIndex >= 0) {
126
+ // Current variant HAS a move - track the element in its moved position
127
+ viewportSelectors.add(selector);
128
+ // For all OTHER variant positions, create container-based placeholders
129
+ allMovesForElement.forEach(function (move, index) {
130
+ if (index !== currentMoveIndex) {
131
+ // Create placeholder at the position where element WOULD be in another variant
132
+ _this.createContainerPlaceholder(experimentName, selector, move.targetSelector, move.position);
133
+ }
134
+ });
135
+ }
136
+ else {
137
+ // Current variant does NOT have a move - element stays in original position
138
+ viewportSelectors.add(selector);
139
+ // For ALL variant moves, create placeholders at those positions
140
+ allMovesForElement.forEach(function (move) {
141
+ _this.createContainerPlaceholder(experimentName, selector, move.targetSelector, move.position);
142
+ });
143
+ }
144
+ });
145
+ // Determine what triggers are needed by checking ALL variants
146
+ // This ensures experiments are tracked even if the user is in a variant without changes
147
+ var hasImmediateTrigger = false;
148
+ var hasViewportTrigger = false;
149
+ allVariantsChanges.forEach(function (variantChanges) {
150
+ variantChanges.forEach(function (change) {
151
+ if (change.trigger_on_view) {
152
+ hasViewportTrigger = true;
153
+ }
154
+ else {
155
+ hasImmediateTrigger = true;
156
+ }
157
+ });
158
+ });
159
+ // Store experiment tracking info
160
+ var tracking = {
161
+ experimentName: experimentName,
162
+ variant: currentVariant,
163
+ changes: currentChanges,
164
+ allPossibleSelectors: new Set(__spreadArray(__spreadArray([], __read(viewportSelectors), false), __read(moveParentSelectors), false)),
165
+ triggered: false,
166
+ hasImmediateTrigger: hasImmediateTrigger,
167
+ hasViewportTrigger: hasViewportTrigger,
168
+ };
169
+ this.experiments.set(experimentName, tracking);
170
+ if (this.debug) {
171
+ logDebug("[ABsmartly] Experiment ".concat(experimentName, " will track selectors:"), Array.from(tracking.allPossibleSelectors));
172
+ }
173
+ // Trigger immediately if needed
174
+ if (hasImmediateTrigger) {
175
+ // Don't await here to avoid blocking the tracking setup
176
+ this.triggerExposure(experimentName).catch(function (error) {
177
+ logDebug("[ABsmartly] Failed to trigger exposure for ".concat(experimentName, ":"), error);
178
+ });
179
+ }
180
+ else if (hasViewportTrigger) {
181
+ // Only set up viewport observers if there's NO immediate trigger
182
+ // If there's an immediate trigger, the experiment will be triggered and cleaned up right away
183
+ this.observeSelectors(experimentName, tracking.allPossibleSelectors);
184
+ }
185
+ };
186
+ /**
187
+ * Create a container-based placeholder at the hypothetical position
188
+ * Uses inline-block with minimal dimensions to be observable but not affect layout
189
+ */
190
+ ExposureTracker.prototype.createContainerPlaceholder = function (experimentName, originalSelector, targetSelector, position) {
191
+ var _a, _b;
192
+ if (position === void 0) { position = 'lastChild'; }
193
+ var targetElement = document.querySelector(targetSelector);
194
+ if (!targetElement)
195
+ return;
196
+ var placeholderKey = "".concat(experimentName, "-").concat(originalSelector, "-").concat(targetSelector, "-").concat(position);
197
+ // Check if placeholder already exists
198
+ if (this.placeholders.has(placeholderKey)) {
199
+ return;
200
+ }
201
+ // Create minimal placeholder using inline styles
202
+ // This will be observable by IntersectionObserver but won't affect layout
203
+ var placeholder = document.createElement('span');
204
+ placeholder.style.cssText = "\n display: inline-block;\n width: 1px;\n height: 1px;\n position: relative;\n left: -1px;\n visibility: hidden;\n pointer-events: none;\n font-size: 0;\n line-height: 0;\n overflow: hidden;\n ";
205
+ placeholder.setAttribute('data-absmartly-placeholder', 'true');
206
+ placeholder.setAttribute('data-absmartly-original-selector', originalSelector);
207
+ placeholder.setAttribute('data-absmartly-experiment', experimentName);
208
+ placeholder.setAttribute('aria-hidden', 'true');
209
+ // Insert placeholder at the hypothetical position
210
+ switch (position) {
211
+ case 'firstChild':
212
+ targetElement.insertBefore(placeholder, targetElement.firstChild);
213
+ break;
214
+ case 'lastChild':
215
+ targetElement.appendChild(placeholder);
216
+ break;
217
+ case 'before':
218
+ (_a = targetElement.parentElement) === null || _a === void 0 ? void 0 : _a.insertBefore(placeholder, targetElement);
219
+ break;
220
+ case 'after':
221
+ (_b = targetElement.parentElement) === null || _b === void 0 ? void 0 : _b.insertBefore(placeholder, targetElement.nextSibling);
222
+ break;
223
+ default:
224
+ targetElement.appendChild(placeholder);
225
+ }
226
+ this.placeholders.set(placeholderKey, placeholder);
227
+ // Track the placeholder for viewport visibility
228
+ this.trackElement(placeholder, experimentName);
229
+ if (this.debug) {
230
+ logDebug("[ABsmartly] Created placeholder for ".concat(originalSelector, " at ").concat(targetSelector, " (").concat(position, ")"));
231
+ }
232
+ };
233
+ /**
234
+ * Get the original parent selector for move changes
235
+ * This should be called BEFORE the move is applied
236
+ */
237
+ ExposureTracker.prototype.getOriginalParentForMove = function (selector) {
238
+ var element = document.querySelector(selector);
239
+ if (!(element === null || element === void 0 ? void 0 : element.parentElement))
240
+ return null;
241
+ return this.getStableParentSelector(element.parentElement);
242
+ };
243
+ /**
244
+ * Get a stable selector for a parent element
245
+ */
246
+ ExposureTracker.prototype.getStableParentSelector = function (element) {
247
+ // Try to get a good selector for the parent
248
+ if (element.id) {
249
+ return "#".concat(element.id);
250
+ }
251
+ if (element.className) {
252
+ var classes = element.className.split(' ').filter(function (c) { return c && !c.startsWith('absmartly'); });
253
+ if (classes.length > 0) {
254
+ return ".".concat(classes[0]);
255
+ }
256
+ }
257
+ // Fallback to tag name with positional info
258
+ var parent = element.parentElement;
259
+ if (parent) {
260
+ var siblings = Array.from(parent.children);
261
+ var index = siblings.indexOf(element);
262
+ return "".concat(element.tagName.toLowerCase(), ":nth-child(").concat(index + 1, ")");
263
+ }
264
+ return null;
265
+ };
266
+ /**
267
+ * Set up observers for the given selectors
268
+ */
269
+ ExposureTracker.prototype.observeSelectors = function (experimentName, selectors) {
270
+ var _this = this;
271
+ selectors.forEach(function (selector) {
272
+ // Try to find existing elements
273
+ var elements = document.querySelectorAll(selector);
274
+ if (elements.length > 0) {
275
+ elements.forEach(function (element) {
276
+ _this.trackElement(element, experimentName);
277
+ });
278
+ }
279
+ else {
280
+ // Element doesn't exist yet, set up mutation observer to watch for it
281
+ _this.watchForSelector(selector, experimentName);
282
+ }
283
+ });
284
+ };
285
+ /**
286
+ * Track an element for viewport visibility
287
+ */
288
+ ExposureTracker.prototype.trackElement = function (element, experimentName) {
289
+ if (!this.trackedElements.has(element)) {
290
+ this.trackedElements.set(element, {
291
+ element: element,
292
+ experiments: new Set([experimentName]),
293
+ isPlaceholder: element.hasAttribute('data-absmartly-placeholder'),
294
+ });
295
+ this.observer.observe(element);
296
+ }
297
+ else {
298
+ this.trackedElements.get(element).experiments.add(experimentName);
299
+ }
300
+ };
301
+ /**
302
+ * Watch for elements matching a selector to appear
303
+ */
304
+ ExposureTracker.prototype.watchForSelector = function (_selector, _experimentName) {
305
+ if (!this.mutationObserver) {
306
+ this.setupMutationObserver();
307
+ }
308
+ // Store pending selector (implementation would need a Map for this)
309
+ // For now, we'll rely on checking in mutation callback
310
+ };
311
+ /**
312
+ * Set up the IntersectionObserver for viewport tracking
313
+ */
314
+ ExposureTracker.prototype.setupIntersectionObserver = function () {
315
+ var _this = this;
316
+ this.observer = new IntersectionObserver(function (entries) {
317
+ entries.forEach(function (entry) {
318
+ if (entry.isIntersecting) {
319
+ _this.handleElementVisible(entry.target);
320
+ }
321
+ });
322
+ }, {
323
+ threshold: 0.01, // Trigger when even 1% is visible
324
+ rootMargin: '0px',
325
+ });
326
+ };
327
+ /**
328
+ * Set up MutationObserver for dynamic elements
329
+ */
330
+ ExposureTracker.prototype.setupMutationObserver = function () {
331
+ var _this = this;
332
+ this.mutationObserver = new MutationObserver(function (mutations) {
333
+ mutations.forEach(function (mutation) {
334
+ mutation.addedNodes.forEach(function (node) {
335
+ if (node instanceof Element) {
336
+ // Check if this element or its children match any tracked selectors
337
+ _this.checkNewElement(node);
338
+ }
339
+ });
340
+ });
341
+ });
342
+ this.mutationObserver.observe(document.body, {
343
+ childList: true,
344
+ subtree: true,
345
+ });
346
+ };
347
+ /**
348
+ * Check if a newly added element needs tracking
349
+ */
350
+ ExposureTracker.prototype.checkNewElement = function (element) {
351
+ var _this = this;
352
+ this.experiments.forEach(function (tracking, experimentName) {
353
+ tracking.allPossibleSelectors.forEach(function (selector) {
354
+ if (element.matches(selector)) {
355
+ _this.trackElement(element, experimentName);
356
+ }
357
+ // Also check children
358
+ element.querySelectorAll(selector).forEach(function (child) {
359
+ _this.trackElement(child, experimentName);
360
+ });
361
+ });
362
+ });
363
+ };
364
+ /**
365
+ * Handle when an element becomes visible
366
+ */
367
+ ExposureTracker.prototype.handleElementVisible = function (element) {
368
+ var _this = this;
369
+ var tracked = this.trackedElements.get(element);
370
+ if (!tracked)
371
+ return;
372
+ tracked.experiments.forEach(function (experimentName) {
373
+ var experiment = _this.experiments.get(experimentName);
374
+ if (experiment && !experiment.triggered) {
375
+ // Don't await here to avoid blocking the visibility handler
376
+ _this.triggerExposure(experimentName).catch(function (error) {
377
+ logDebug("[ABsmartly] Failed to trigger exposure for ".concat(experimentName, ":"), error);
378
+ });
379
+ if (_this.debug) {
380
+ var selector = tracked.isPlaceholder
381
+ ? element.getAttribute('data-absmartly-original-selector')
382
+ : _this.getElementSelector(element);
383
+ logDebug("[ABsmartly] Triggering exposure for ".concat(experimentName, " via ").concat(selector));
384
+ }
385
+ }
386
+ });
387
+ };
388
+ /**
389
+ * Trigger exposure for an experiment
390
+ */
391
+ ExposureTracker.prototype.triggerExposure = function (experimentName) {
392
+ return __awaiter(this, void 0, void 0, function () {
393
+ var experiment;
394
+ return __generator(this, function (_a) {
395
+ switch (_a.label) {
396
+ case 0:
397
+ experiment = this.experiments.get(experimentName);
398
+ if (!experiment || experiment.triggered)
399
+ return [2 /*return*/];
400
+ // Ensure context is ready before calling treatment
401
+ return [4 /*yield*/, this.context.ready()];
402
+ case 1:
403
+ // Ensure context is ready before calling treatment
404
+ _a.sent();
405
+ // Call treatment to trigger exposure
406
+ this.context.treatment(experimentName);
407
+ experiment.triggered = true;
408
+ if (this.debug) {
409
+ logDebug("[ABsmartly] Exposure triggered for experiment: ".concat(experimentName));
410
+ }
411
+ // Clean up tracking for this experiment
412
+ this.cleanupExperiment(experimentName);
413
+ return [2 /*return*/];
414
+ }
415
+ });
416
+ });
417
+ };
418
+ /**
419
+ * Clean up tracking for an experiment that has been triggered
420
+ */
421
+ ExposureTracker.prototype.cleanupExperiment = function (experimentName) {
422
+ var _this = this;
423
+ // Remove from tracked elements
424
+ this.trackedElements.forEach(function (tracked, element) {
425
+ tracked.experiments.delete(experimentName);
426
+ if (tracked.experiments.size === 0) {
427
+ _this.observer.unobserve(element);
428
+ _this.trackedElements.delete(element);
429
+ }
430
+ });
431
+ // Remove placeholders
432
+ this.placeholders.forEach(function (placeholder, key) {
433
+ if (key.startsWith("".concat(experimentName, "-"))) {
434
+ placeholder.remove();
435
+ _this.placeholders.delete(key);
436
+ }
437
+ });
438
+ // Don't delete the experiment - keep it in the map so isTriggered() can still return true
439
+ // Just clear the selectors since we don't need to track them anymore
440
+ var experiment = this.experiments.get(experimentName);
441
+ if (experiment) {
442
+ experiment.allPossibleSelectors.clear();
443
+ }
444
+ // Clean up mutation observer if no experiments left
445
+ if (this.experiments.size === 0 && this.mutationObserver) {
446
+ this.mutationObserver.disconnect();
447
+ this.mutationObserver = null;
448
+ }
449
+ };
450
+ /**
451
+ * Get a selector string for an element (for debugging)
452
+ */
453
+ ExposureTracker.prototype.getElementSelector = function (element) {
454
+ if (element.id)
455
+ return "#".concat(element.id);
456
+ if (element.className) {
457
+ var classes = element.className.split(' ').filter(function (c) { return c && !c.startsWith('absmartly'); });
458
+ if (classes.length > 0)
459
+ return ".".concat(classes.join('.'));
460
+ }
461
+ return element.tagName.toLowerCase();
462
+ };
463
+ /**
464
+ * Check if an experiment needs viewport tracking
465
+ */
466
+ ExposureTracker.prototype.needsViewportTracking = function (experimentName) {
467
+ var _a;
468
+ var experiment = this.experiments.get(experimentName);
469
+ return (_a = experiment === null || experiment === void 0 ? void 0 : experiment.hasViewportTrigger) !== null && _a !== void 0 ? _a : false;
470
+ };
471
+ /**
472
+ * Check if an experiment has been triggered
473
+ */
474
+ ExposureTracker.prototype.isTriggered = function (experimentName) {
475
+ var _a;
476
+ var experiment = this.experiments.get(experimentName);
477
+ return (_a = experiment === null || experiment === void 0 ? void 0 : experiment.triggered) !== null && _a !== void 0 ? _a : false;
478
+ };
479
+ /**
480
+ * Clean up all resources
481
+ */
482
+ ExposureTracker.prototype.destroy = function () {
483
+ // Disconnect observers
484
+ this.observer.disconnect();
485
+ if (this.mutationObserver) {
486
+ this.mutationObserver.disconnect();
487
+ }
488
+ // Remove all placeholders
489
+ this.placeholders.forEach(function (placeholder) { return placeholder.remove(); });
490
+ // Clear all tracking
491
+ this.experiments.clear();
492
+ this.trackedElements.clear();
493
+ this.placeholders.clear();
494
+ if (this.debug) {
495
+ logDebug('[ABsmartly] ExposureTracker destroyed');
496
+ }
497
+ };
498
+ return ExposureTracker;
499
+ }());
500
+ export { ExposureTracker };
501
+ //# sourceMappingURL=ExposureTracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExposureTracker.js","sourceRoot":"","sources":["../../src/core/ExposureTracker.ts"],"names":[],"mappings":"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"}