@searchspring/snap-toolbox 0.76.1 → 0.78.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.
@@ -9,17 +9,22 @@ export type Target = {
9
9
  autoRetarget?: boolean;
10
10
  unsetTargetMinHeight?: boolean;
11
11
  clickRetarget?: boolean | string;
12
+ navigationRetarget?: boolean;
12
13
  [any: string]: unknown;
13
14
  };
14
- export type OnTarget = (target: Target, elem: Element, originalElem?: Element) => void | Promise<void>;
15
+ export type OnTarget = (target: Target, elem: Element, originalElem?: Element, targeter?: DomTargeter) => void | Promise<void>;
15
16
  export declare class DomTargeter {
16
17
  private targets;
17
18
  private onTarget;
18
19
  private document;
19
20
  private styleBlockRefs;
20
21
  private targetedElems;
22
+ private abortController?;
21
23
  constructor(targets: Array<Target>, onTarget: OnTarget, document?: Document);
22
24
  getTargets(): Array<Target>;
25
+ getTargetedElems(): ReadonlyArray<Element>;
26
+ releaseTargets(elems?: ReadonlyArray<Element>): void;
27
+ destroy(): void;
23
28
  retarget(): void;
24
29
  unhideTarget: (selector: string) => void;
25
30
  hideTarget: (selector: string) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"DomTargeter.d.ts","sourceRoot":"","sources":["../../../src/DomTargeter/DomTargeter.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,MAAM,GAAG;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE;QACR,MAAM,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;QAC9D,OAAO,EAAE,OAAO,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC;KACnE,CAAC;IACF,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,aAAa,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACjC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,CAAC,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAGvG,qBAAa,WAAW;IACvB,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,cAAc,CAA4B;IAClD,OAAO,CAAC,aAAa,CAAsB;gBAE/B,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,QAAQ;IA0D3E,UAAU,IAAI,KAAK,CAAC,MAAM,CAAC;IAI3B,QAAQ,IAAI,IAAI;IAiEhB,YAAY,aAAc,MAAM,KAAG,IAAI,CASrC;IAEF,UAAU,aAAc,MAAM,KAAG,IAAI,CASnC;IAEF,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,MAAM;CA2Cd"}
1
+ {"version":3,"file":"DomTargeter.d.ts","sourceRoot":"","sources":["../../../src/DomTargeter/DomTargeter.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,MAAM,GAAG;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE;QACR,MAAM,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;QAC9D,OAAO,EAAE,OAAO,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC;KACnE,CAAC;IACF,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,aAAa,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACjC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,WAAW,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAI/H,qBAAa,WAAW;IACvB,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,cAAc,CAA4B;IAClD,OAAO,CAAC,aAAa,CAAsB;IAC3C,OAAO,CAAC,eAAe,CAAC,CAAkB;gBAE9B,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,QAAQ;IA6F3E,UAAU,IAAI,KAAK,CAAC,MAAM,CAAC;IAI3B,gBAAgB,IAAI,aAAa,CAAC,OAAO,CAAC;IAK1C,cAAc,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,GAAG,IAAI;IAepD,OAAO,IAAI,IAAI;IAMf,QAAQ,IAAI,IAAI;IAuEhB,YAAY,aAAc,MAAM,KAAG,IAAI,CASrC;IAEF,UAAU,aAAc,MAAM,KAAG,IAAI,CASnC;IAEF,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,MAAM;CA2Cd"}
@@ -1,4 +1,13 @@
1
1
  "use strict";
2
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
3
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
4
+ if (ar || !(i in from)) {
5
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
6
+ ar[i] = from[i];
7
+ }
8
+ }
9
+ return to.concat(ar || Array.prototype.slice.call(from));
10
+ };
2
11
  Object.defineProperty(exports, "__esModule", { value: true });
3
12
  exports.DomTargeter = void 0;
4
13
  var globallyTargetedElems = [];
@@ -30,12 +39,25 @@ var DomTargeter = /** @class */ (function () {
30
39
  _this.styleBlockRefs[selector] = styleBlock;
31
40
  };
32
41
  this.document = document || window.document;
42
+ // use the document's own window AbortController to ensure realm compatibility (e.g., JSDOM)
43
+ // and gracefully handle environments where AbortController is not available (e.g., IE11)
44
+ try {
45
+ this.abortController = new (this.document.defaultView || window).AbortController();
46
+ }
47
+ catch (e) {
48
+ // AbortController not available - listeners won't auto-cleanup on destroy()
49
+ }
33
50
  this.targets = targets;
34
51
  this.onTarget = onTarget;
35
52
  this.retarget();
36
53
  this.targets.forEach(function (target) {
54
+ var _a, _b, _c, _d;
37
55
  var timeoutTime = 100;
38
56
  var checker = function () {
57
+ var _a;
58
+ if ((_a = _this.abortController) === null || _a === void 0 ? void 0 : _a.signal.aborted) {
59
+ return;
60
+ }
39
61
  // lets not just keep trying forever - this waits roughly 12 seconds before giving up.
40
62
  if (timeoutTime < 2000) {
41
63
  // increase the time till next check
@@ -58,12 +80,25 @@ var DomTargeter = /** @class */ (function () {
58
80
  clickElems = Array.from(_this.document.querySelectorAll(target.clickRetarget));
59
81
  }
60
82
  clickElems.map(function (elem) {
83
+ var _a;
61
84
  elem.addEventListener('click', function () {
62
85
  timeoutTime = 100;
63
- checker();
64
- });
86
+ setTimeout(checker); // allow the click to complete
87
+ }, { capture: true, signal: (_a = _this.abortController) === null || _a === void 0 ? void 0 : _a.signal });
65
88
  });
66
89
  }
90
+ // listen for SPA navigations via the Navigation API to restart retargeting
91
+ if (target.navigationRetarget) {
92
+ try {
93
+ (_b = (_a = _this.document.defaultView) === null || _a === void 0 ? void 0 : _a.navigation) === null || _b === void 0 ? void 0 : _b.addEventListener('navigate', function () {
94
+ timeoutTime = 100;
95
+ checker();
96
+ }, { signal: (_c = _this.abortController) === null || _c === void 0 ? void 0 : _c.signal });
97
+ }
98
+ catch (e) {
99
+ // Navigation API not available
100
+ }
101
+ }
67
102
  if (target.autoRetarget) {
68
103
  // do initial retargeting check
69
104
  checker();
@@ -77,16 +112,45 @@ var DomTargeter = /** @class */ (function () {
77
112
  _this.document.addEventListener('DOMContentLoaded', function () {
78
113
  _this.retarget();
79
114
  target.hideTarget && _this.unhideTarget(target.selector);
80
- });
115
+ }, { signal: (_d = _this.abortController) === null || _d === void 0 ? void 0 : _d.signal });
81
116
  }
82
117
  });
83
118
  }
84
119
  DomTargeter.prototype.getTargets = function () {
85
120
  return this.targets;
86
121
  };
122
+ DomTargeter.prototype.getTargetedElems = function () {
123
+ this.targetedElems = this.targetedElems.filter(function (elem) { return elem.isConnected; });
124
+ return __spreadArray([], this.targetedElems, true);
125
+ };
126
+ DomTargeter.prototype.releaseTargets = function (elems) {
127
+ var toRelease = elems || this.targetedElems;
128
+ toRelease.forEach(function (elem) {
129
+ var idx = globallyTargetedElems.indexOf(elem);
130
+ if (idx !== -1) {
131
+ globallyTargetedElems.splice(idx, 1);
132
+ }
133
+ });
134
+ if (elems) {
135
+ this.targetedElems = this.targetedElems.filter(function (elem) { return !elems.includes(elem); });
136
+ }
137
+ else {
138
+ this.targetedElems = [];
139
+ }
140
+ };
141
+ DomTargeter.prototype.destroy = function () {
142
+ var _this = this;
143
+ var _a;
144
+ (_a = this.abortController) === null || _a === void 0 ? void 0 : _a.abort();
145
+ this.releaseTargets();
146
+ Object.keys(this.styleBlockRefs).forEach(function (selector) { return _this.unhideTarget(selector); });
147
+ };
87
148
  DomTargeter.prototype.retarget = function () {
88
149
  var _this = this;
89
150
  var _a, _b;
151
+ // prune references to elements no longer in the DOM
152
+ globallyTargetedElems = globallyTargetedElems.filter(function (elem) { return elem.isConnected; });
153
+ this.targetedElems = this.targetedElems.filter(function (elem) { return elem.isConnected; });
90
154
  var targetElemPairs = this.targets.flatMap(function (target) {
91
155
  var _a;
92
156
  // hide targets before found
@@ -108,11 +172,12 @@ var DomTargeter = /** @class */ (function () {
108
172
  for (var _i = 0, targetElemPairs_1 = targetElemPairs; _i < targetElemPairs_1.length; _i++) {
109
173
  var _c = targetElemPairs_1[_i], target = _c.target, elem = _c.elem;
110
174
  try {
175
+ // track targeted elements
176
+ this.targetedElems = this.targetedElems.concat(elem);
111
177
  if (target.inject) {
112
178
  var injectedElem = this.inject(elem, target);
113
- this.targetedElems = this.targetedElems.concat(elem);
114
179
  // handle both sync and async onTarget functions
115
- var result = this.onTarget(target, injectedElem, elem);
180
+ var result = this.onTarget(target, injectedElem, elem, this);
116
181
  if (result && typeof result.then === 'function') {
117
182
  // async function - handle promise
118
183
  result.catch(function (error) {
@@ -127,7 +192,7 @@ var DomTargeter = /** @class */ (function () {
127
192
  while (elem.firstChild && elem.removeChild(elem.firstChild))
128
193
  ;
129
194
  // handle both sync and async onTarget functions
130
- var result = this.onTarget(target, elem);
195
+ var result = this.onTarget(target, elem, undefined, this);
131
196
  if (result && typeof result.then === 'function') {
132
197
  // async function - handle promise
133
198
  result.catch(function (error) {
@@ -9,17 +9,22 @@ export type Target = {
9
9
  autoRetarget?: boolean;
10
10
  unsetTargetMinHeight?: boolean;
11
11
  clickRetarget?: boolean | string;
12
+ navigationRetarget?: boolean;
12
13
  [any: string]: unknown;
13
14
  };
14
- export type OnTarget = (target: Target, elem: Element, originalElem?: Element) => void | Promise<void>;
15
+ export type OnTarget = (target: Target, elem: Element, originalElem?: Element, targeter?: DomTargeter) => void | Promise<void>;
15
16
  export declare class DomTargeter {
16
17
  private targets;
17
18
  private onTarget;
18
19
  private document;
19
20
  private styleBlockRefs;
20
21
  private targetedElems;
22
+ private abortController?;
21
23
  constructor(targets: Array<Target>, onTarget: OnTarget, document?: Document);
22
24
  getTargets(): Array<Target>;
25
+ getTargetedElems(): ReadonlyArray<Element>;
26
+ releaseTargets(elems?: ReadonlyArray<Element>): void;
27
+ destroy(): void;
23
28
  retarget(): void;
24
29
  unhideTarget: (selector: string) => void;
25
30
  hideTarget: (selector: string) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"DomTargeter.d.ts","sourceRoot":"","sources":["../../../src/DomTargeter/DomTargeter.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,MAAM,GAAG;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE;QACR,MAAM,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;QAC9D,OAAO,EAAE,OAAO,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC;KACnE,CAAC;IACF,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,aAAa,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACjC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,CAAC,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAGvG,qBAAa,WAAW;IACvB,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,cAAc,CAA4B;IAClD,OAAO,CAAC,aAAa,CAAsB;gBAE/B,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,QAAQ;IA0D3E,UAAU,IAAI,KAAK,CAAC,MAAM,CAAC;IAI3B,QAAQ,IAAI,IAAI;IAiEhB,YAAY,aAAc,MAAM,KAAG,IAAI,CASrC;IAEF,UAAU,aAAc,MAAM,KAAG,IAAI,CASnC;IAEF,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,MAAM;CA2Cd"}
1
+ {"version":3,"file":"DomTargeter.d.ts","sourceRoot":"","sources":["../../../src/DomTargeter/DomTargeter.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,MAAM,GAAG;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE;QACR,MAAM,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;QAC9D,OAAO,EAAE,OAAO,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC;KACnE,CAAC;IACF,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,aAAa,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACjC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,WAAW,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAI/H,qBAAa,WAAW;IACvB,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,cAAc,CAA4B;IAClD,OAAO,CAAC,aAAa,CAAsB;IAC3C,OAAO,CAAC,eAAe,CAAC,CAAkB;gBAE9B,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,QAAQ;IA6F3E,UAAU,IAAI,KAAK,CAAC,MAAM,CAAC;IAI3B,gBAAgB,IAAI,aAAa,CAAC,OAAO,CAAC;IAK1C,cAAc,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,GAAG,IAAI;IAepD,OAAO,IAAI,IAAI;IAMf,QAAQ,IAAI,IAAI;IAuEhB,YAAY,aAAc,MAAM,KAAG,IAAI,CASrC;IAEF,UAAU,aAAc,MAAM,KAAG,IAAI,CASnC;IAEF,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,MAAM;CA2Cd"}
@@ -26,12 +26,23 @@ export class DomTargeter {
26
26
  this.styleBlockRefs[selector] = styleBlock;
27
27
  };
28
28
  this.document = document || window.document;
29
+ // use the document's own window AbortController to ensure realm compatibility (e.g., JSDOM)
30
+ // and gracefully handle environments where AbortController is not available (e.g., IE11)
31
+ try {
32
+ this.abortController = new (this.document.defaultView || window).AbortController();
33
+ }
34
+ catch (e) {
35
+ // AbortController not available - listeners won't auto-cleanup on destroy()
36
+ }
29
37
  this.targets = targets;
30
38
  this.onTarget = onTarget;
31
39
  this.retarget();
32
40
  this.targets.forEach((target) => {
33
41
  let timeoutTime = 100;
34
42
  const checker = () => {
43
+ if (this.abortController?.signal.aborted) {
44
+ return;
45
+ }
35
46
  // lets not just keep trying forever - this waits roughly 12 seconds before giving up.
36
47
  if (timeoutTime < 2000) {
37
48
  // increase the time till next check
@@ -56,10 +67,22 @@ export class DomTargeter {
56
67
  clickElems.map((elem) => {
57
68
  elem.addEventListener('click', () => {
58
69
  timeoutTime = 100;
59
- checker();
60
- });
70
+ setTimeout(checker); // allow the click to complete
71
+ }, { capture: true, signal: this.abortController?.signal });
61
72
  });
62
73
  }
74
+ // listen for SPA navigations via the Navigation API to restart retargeting
75
+ if (target.navigationRetarget) {
76
+ try {
77
+ this.document.defaultView?.navigation?.addEventListener('navigate', () => {
78
+ timeoutTime = 100;
79
+ checker();
80
+ }, { signal: this.abortController?.signal });
81
+ }
82
+ catch (e) {
83
+ // Navigation API not available
84
+ }
85
+ }
63
86
  if (target.autoRetarget) {
64
87
  // do initial retargeting check
65
88
  checker();
@@ -73,14 +96,41 @@ export class DomTargeter {
73
96
  this.document.addEventListener('DOMContentLoaded', () => {
74
97
  this.retarget();
75
98
  target.hideTarget && this.unhideTarget(target.selector);
76
- });
99
+ }, { signal: this.abortController?.signal });
77
100
  }
78
101
  });
79
102
  }
80
103
  getTargets() {
81
104
  return this.targets;
82
105
  }
106
+ getTargetedElems() {
107
+ this.targetedElems = this.targetedElems.filter((elem) => elem.isConnected);
108
+ return [...this.targetedElems];
109
+ }
110
+ releaseTargets(elems) {
111
+ const toRelease = elems || this.targetedElems;
112
+ toRelease.forEach((elem) => {
113
+ const idx = globallyTargetedElems.indexOf(elem);
114
+ if (idx !== -1) {
115
+ globallyTargetedElems.splice(idx, 1);
116
+ }
117
+ });
118
+ if (elems) {
119
+ this.targetedElems = this.targetedElems.filter((elem) => !elems.includes(elem));
120
+ }
121
+ else {
122
+ this.targetedElems = [];
123
+ }
124
+ }
125
+ destroy() {
126
+ this.abortController?.abort();
127
+ this.releaseTargets();
128
+ Object.keys(this.styleBlockRefs).forEach((selector) => this.unhideTarget(selector));
129
+ }
83
130
  retarget() {
131
+ // prune references to elements no longer in the DOM
132
+ globallyTargetedElems = globallyTargetedElems.filter((elem) => elem.isConnected);
133
+ this.targetedElems = this.targetedElems.filter((elem) => elem.isConnected);
84
134
  const targetElemPairs = this.targets.flatMap((target) => {
85
135
  // hide targets before found
86
136
  target.hideTarget && this.hideTarget(target.selector);
@@ -100,11 +150,12 @@ export class DomTargeter {
100
150
  });
101
151
  for (const { target, elem } of targetElemPairs) {
102
152
  try {
153
+ // track targeted elements
154
+ this.targetedElems = this.targetedElems.concat(elem);
103
155
  if (target.inject) {
104
156
  const injectedElem = this.inject(elem, target);
105
- this.targetedElems = this.targetedElems.concat(elem);
106
157
  // handle both sync and async onTarget functions
107
- const result = this.onTarget(target, injectedElem, elem);
158
+ const result = this.onTarget(target, injectedElem, elem, this);
108
159
  if (result && typeof result.then === 'function') {
109
160
  // async function - handle promise
110
161
  result.catch((error) => {
@@ -119,7 +170,7 @@ export class DomTargeter {
119
170
  while (elem.firstChild && elem.removeChild(elem.firstChild))
120
171
  ;
121
172
  // handle both sync and async onTarget functions
122
- const result = this.onTarget(target, elem);
173
+ const result = this.onTarget(target, elem, undefined, this);
123
174
  if (result && typeof result.then === 'function') {
124
175
  // async function - handle promise
125
176
  result.catch((error) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@searchspring/snap-toolbox",
3
- "version": "0.76.1",
3
+ "version": "0.78.0",
4
4
  "description": "Snap Toolbox",
5
5
  "main": "dist/cjs/index.js",
6
6
  "module": "dist/esm/index.js",
@@ -23,5 +23,5 @@
23
23
  "files": [
24
24
  "dist/**/*"
25
25
  ],
26
- "gitHead": "c834b949788f37cd5265f227e7416280587f6989"
26
+ "gitHead": "9d17504d1ba3b5131c4edeb0cb1edb6ff65ec1b0"
27
27
  }