@smoud/playable-sdk 1.1.4 → 1.2.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 CHANGED
@@ -353,6 +353,9 @@ sdk.off('eventName', [callback], [context]);
353
353
  | `ready` | - | Ad container is ready `post` init callback | Start resource loading |
354
354
  | `start` | - | Playable experience started | Begin gameplay/animation |
355
355
  | `interaction` | `count` | User interaction occurred | Track engagement |
356
+ | `pointerdown` | `x, y, event` | Mouse/touch pressed (unified, no duplicates) | Start drag / tap |
357
+ | `pointermove` | `x, y, event` | Mouse/touch moved while pressed | Update drag |
358
+ | `pointerup` | `x, y, event` | Mouse/touch released or cancelled | End drag / tap |
356
359
  | `resize` | `width, height` | Container size changed | Update layout |
357
360
  | `pause` | - | Playable entered pause state | Pause gameplay |
358
361
  | `resume` | - | Playable resumed from pause | Resume gameplay |
package/dist/esm/index.js CHANGED
@@ -192,6 +192,51 @@ function initTrackingProtocols() {
192
192
  }
193
193
  }
194
194
 
195
+ // src/interaction.ts
196
+ var TOUCH_MOUSE_DEDUPE_MS = 500;
197
+ var lastTouchTime = 0;
198
+ var isPointerDown = false;
199
+ var isRegistered = false;
200
+ var isMoveRegistered = false;
201
+ function createPointerHandler(name) {
202
+ return function(event) {
203
+ const touches = event.changedTouches;
204
+ let point = event;
205
+ if (touches) {
206
+ lastTouchTime = event.timeStamp;
207
+ point = touches[0];
208
+ } else if (event.timeStamp - lastTouchTime < TOUCH_MOUSE_DEDUPE_MS) return;
209
+ if (name === "pointerdown") {
210
+ isPointerDown = true;
211
+ sdk.interactions += 1;
212
+ emitEvent("interaction", sdk.interactions);
213
+ } else if (!isPointerDown) return;
214
+ else if (name === "pointerup") isPointerDown = !!touches && event.touches.length > 0;
215
+ emitEvent(name, point.clientX, point.clientY, event);
216
+ };
217
+ }
218
+ var onPointerDown = createPointerHandler("pointerdown");
219
+ var onPointerMove = createPointerHandler("pointermove");
220
+ var onPointerUp = createPointerHandler("pointerup");
221
+ function listen(type, handler) {
222
+ document.addEventListener(type, handler);
223
+ }
224
+ function registerInteractionHandlers() {
225
+ if (isRegistered) return;
226
+ isRegistered = true;
227
+ listen("mousedown", onPointerDown);
228
+ listen("touchstart", onPointerDown);
229
+ listen("mouseup", onPointerUp);
230
+ listen("touchend", onPointerUp);
231
+ listen("touchcancel", onPointerUp);
232
+ }
233
+ function registerMoveHandler() {
234
+ if (isMoveRegistered) return;
235
+ isMoveRegistered = true;
236
+ listen("mousemove", onPointerMove);
237
+ listen("touchmove", onPointerMove);
238
+ }
239
+
195
240
  // src/core.ts
196
241
  var destinationUrl = "";
197
242
  var isSDKInitialized = false;
@@ -396,23 +441,6 @@ function handleResize(width, height) {
396
441
  sdk.isLandscape = sdk.maxWidth > sdk.maxHeight;
397
442
  emitEvent("resize", sdk.maxWidth, sdk.maxHeight);
398
443
  }
399
- var isListeningToTouchEvents = false;
400
- var isTouchEventRegistered = false;
401
- function onUserInteraction(event) {
402
- if (typeof TouchEvent !== "undefined" && event instanceof TouchEvent) {
403
- isListeningToTouchEvents = true;
404
- }
405
- if (isListeningToTouchEvents && event instanceof MouseEvent) return;
406
- sdk.interactions += 1;
407
- emitEvent("interaction", sdk.interactions);
408
- }
409
- function registerTouchHandlers() {
410
- if (!isTouchEventRegistered) {
411
- document.addEventListener("mousedown", onUserInteraction);
412
- document.addEventListener("touchstart", onUserInteraction);
413
- isTouchEventRegistered = true;
414
- }
415
- }
416
444
  function initSDK() {
417
445
  destinationUrl = /android/i.test(navigator.userAgent) ? GOOGLE_PLAY_URL : APP_STORE_URL;
418
446
  ensureProtocol();
@@ -466,7 +494,7 @@ var _sdk = class _sdk {
466
494
  if (_sdk.isStarted) return;
467
495
  _sdk.isStarted = true;
468
496
  emitEvent("start");
469
- registerTouchHandlers();
497
+ registerInteractionHandlers();
470
498
  if ("mintegral" === AD_NETWORK && isMintegral()) {
471
499
  _sdk.resize();
472
500
  handlePause();
@@ -638,6 +666,7 @@ var _sdk = class _sdk {
638
666
  * }, gameInstance);
639
667
  */
640
668
  static on(event, fn, context) {
669
+ if (event === "pointermove") registerMoveHandler();
641
670
  onEvent(event, fn, context);
642
671
  }
643
672
  /**
@@ -654,6 +683,7 @@ var _sdk = class _sdk {
654
683
  * });
655
684
  */
656
685
  static once(event, fn, context) {
686
+ if (event === "pointermove") registerMoveHandler();
657
687
  onEvent(event, fn, context, true);
658
688
  }
659
689
  /**
@@ -676,7 +706,7 @@ var _sdk = class _sdk {
676
706
  }
677
707
  };
678
708
  /** Current version of the SDK */
679
- _sdk.version = "1.1.4";
709
+ _sdk.version = "1.2.0";
680
710
  /** Current maximum width of the playable ad container in pixels */
681
711
  _sdk.maxWidth = Math.floor(window.innerWidth);
682
712
  /** Current maximum height of the playable ad container in pixels */
@@ -194,6 +194,51 @@
194
194
  }
195
195
  }
196
196
 
197
+ // src/interaction.ts
198
+ var TOUCH_MOUSE_DEDUPE_MS = 500;
199
+ var lastTouchTime = 0;
200
+ var isPointerDown = false;
201
+ var isRegistered = false;
202
+ var isMoveRegistered = false;
203
+ function createPointerHandler(name) {
204
+ return function(event) {
205
+ const touches = event.changedTouches;
206
+ let point = event;
207
+ if (touches) {
208
+ lastTouchTime = event.timeStamp;
209
+ point = touches[0];
210
+ } else if (event.timeStamp - lastTouchTime < TOUCH_MOUSE_DEDUPE_MS) return;
211
+ if (name === "pointerdown") {
212
+ isPointerDown = true;
213
+ sdk.interactions += 1;
214
+ emitEvent("interaction", sdk.interactions);
215
+ } else if (!isPointerDown) return;
216
+ else if (name === "pointerup") isPointerDown = !!touches && event.touches.length > 0;
217
+ emitEvent(name, point.clientX, point.clientY, event);
218
+ };
219
+ }
220
+ var onPointerDown = createPointerHandler("pointerdown");
221
+ var onPointerMove = createPointerHandler("pointermove");
222
+ var onPointerUp = createPointerHandler("pointerup");
223
+ function listen(type, handler) {
224
+ document.addEventListener(type, handler);
225
+ }
226
+ function registerInteractionHandlers() {
227
+ if (isRegistered) return;
228
+ isRegistered = true;
229
+ listen("mousedown", onPointerDown);
230
+ listen("touchstart", onPointerDown);
231
+ listen("mouseup", onPointerUp);
232
+ listen("touchend", onPointerUp);
233
+ listen("touchcancel", onPointerUp);
234
+ }
235
+ function registerMoveHandler() {
236
+ if (isMoveRegistered) return;
237
+ isMoveRegistered = true;
238
+ listen("mousemove", onPointerMove);
239
+ listen("touchmove", onPointerMove);
240
+ }
241
+
197
242
  // src/core.ts
198
243
  var destinationUrl = "";
199
244
  var isSDKInitialized = false;
@@ -398,23 +443,6 @@
398
443
  sdk.isLandscape = sdk.maxWidth > sdk.maxHeight;
399
444
  emitEvent("resize", sdk.maxWidth, sdk.maxHeight);
400
445
  }
401
- var isListeningToTouchEvents = false;
402
- var isTouchEventRegistered = false;
403
- function onUserInteraction(event) {
404
- if (typeof TouchEvent !== "undefined" && event instanceof TouchEvent) {
405
- isListeningToTouchEvents = true;
406
- }
407
- if (isListeningToTouchEvents && event instanceof MouseEvent) return;
408
- sdk.interactions += 1;
409
- emitEvent("interaction", sdk.interactions);
410
- }
411
- function registerTouchHandlers() {
412
- if (!isTouchEventRegistered) {
413
- document.addEventListener("mousedown", onUserInteraction);
414
- document.addEventListener("touchstart", onUserInteraction);
415
- isTouchEventRegistered = true;
416
- }
417
- }
418
446
  function initSDK() {
419
447
  destinationUrl = /android/i.test(navigator.userAgent) ? GOOGLE_PLAY_URL : APP_STORE_URL;
420
448
  ensureProtocol();
@@ -468,7 +496,7 @@
468
496
  if (_sdk.isStarted) return;
469
497
  _sdk.isStarted = true;
470
498
  emitEvent("start");
471
- registerTouchHandlers();
499
+ registerInteractionHandlers();
472
500
  if ("mintegral" === AD_NETWORK && isMintegral()) {
473
501
  _sdk.resize();
474
502
  handlePause();
@@ -640,6 +668,7 @@
640
668
  * }, gameInstance);
641
669
  */
642
670
  static on(event, fn, context) {
671
+ if (event === "pointermove") registerMoveHandler();
643
672
  onEvent(event, fn, context);
644
673
  }
645
674
  /**
@@ -656,6 +685,7 @@
656
685
  * });
657
686
  */
658
687
  static once(event, fn, context) {
688
+ if (event === "pointermove") registerMoveHandler();
659
689
  onEvent(event, fn, context, true);
660
690
  }
661
691
  /**
@@ -678,7 +708,7 @@
678
708
  }
679
709
  };
680
710
  /** Current version of the SDK */
681
- _sdk.version = "1.1.4";
711
+ _sdk.version = "1.2.0";
682
712
  /** Current maximum width of the playable ad container in pixels */
683
713
  _sdk.maxWidth = Math.floor(window.innerWidth);
684
714
  /** Current maximum height of the playable ad container in pixels */
package/dist/index.d.mts CHANGED
@@ -1,4 +1,4 @@
1
- type EventName = 'init' | 'boot' | 'ready' | 'start' | 'interaction' | 'resize' | 'pause' | 'resume' | 'volume' | 'retry' | 'finish' | 'install' | 'error';
1
+ type EventName = 'init' | 'boot' | 'ready' | 'start' | 'interaction' | 'pointerdown' | 'pointermove' | 'pointerup' | 'resize' | 'pause' | 'resume' | 'volume' | 'retry' | 'finish' | 'install' | 'error';
2
2
 
3
3
  type InitCallbackType = (maxWidth: number, maxHeight: number) => void;
4
4
  /**
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- type EventName = 'init' | 'boot' | 'ready' | 'start' | 'interaction' | 'resize' | 'pause' | 'resume' | 'volume' | 'retry' | 'finish' | 'install' | 'error';
1
+ type EventName = 'init' | 'boot' | 'ready' | 'start' | 'interaction' | 'pointerdown' | 'pointermove' | 'pointerup' | 'resize' | 'pause' | 'resume' | 'volume' | 'retry' | 'finish' | 'install' | 'error';
2
2
 
3
3
  type InitCallbackType = (maxWidth: number, maxHeight: number) => void;
4
4
  /**
package/dist/index.js CHANGED
@@ -219,6 +219,51 @@ function initTrackingProtocols() {
219
219
  }
220
220
  }
221
221
 
222
+ // src/interaction.ts
223
+ var TOUCH_MOUSE_DEDUPE_MS = 500;
224
+ var lastTouchTime = 0;
225
+ var isPointerDown = false;
226
+ var isRegistered = false;
227
+ var isMoveRegistered = false;
228
+ function createPointerHandler(name) {
229
+ return function(event) {
230
+ const touches = event.changedTouches;
231
+ let point = event;
232
+ if (touches) {
233
+ lastTouchTime = event.timeStamp;
234
+ point = touches[0];
235
+ } else if (event.timeStamp - lastTouchTime < TOUCH_MOUSE_DEDUPE_MS) return;
236
+ if (name === "pointerdown") {
237
+ isPointerDown = true;
238
+ sdk.interactions += 1;
239
+ emitEvent("interaction", sdk.interactions);
240
+ } else if (!isPointerDown) return;
241
+ else if (name === "pointerup") isPointerDown = !!touches && event.touches.length > 0;
242
+ emitEvent(name, point.clientX, point.clientY, event);
243
+ };
244
+ }
245
+ var onPointerDown = createPointerHandler("pointerdown");
246
+ var onPointerMove = createPointerHandler("pointermove");
247
+ var onPointerUp = createPointerHandler("pointerup");
248
+ function listen(type, handler) {
249
+ document.addEventListener(type, handler);
250
+ }
251
+ function registerInteractionHandlers() {
252
+ if (isRegistered) return;
253
+ isRegistered = true;
254
+ listen("mousedown", onPointerDown);
255
+ listen("touchstart", onPointerDown);
256
+ listen("mouseup", onPointerUp);
257
+ listen("touchend", onPointerUp);
258
+ listen("touchcancel", onPointerUp);
259
+ }
260
+ function registerMoveHandler() {
261
+ if (isMoveRegistered) return;
262
+ isMoveRegistered = true;
263
+ listen("mousemove", onPointerMove);
264
+ listen("touchmove", onPointerMove);
265
+ }
266
+
222
267
  // src/core.ts
223
268
  var destinationUrl = "";
224
269
  var isSDKInitialized = false;
@@ -423,23 +468,6 @@ function handleResize(width, height) {
423
468
  sdk.isLandscape = sdk.maxWidth > sdk.maxHeight;
424
469
  emitEvent("resize", sdk.maxWidth, sdk.maxHeight);
425
470
  }
426
- var isListeningToTouchEvents = false;
427
- var isTouchEventRegistered = false;
428
- function onUserInteraction(event) {
429
- if (typeof TouchEvent !== "undefined" && event instanceof TouchEvent) {
430
- isListeningToTouchEvents = true;
431
- }
432
- if (isListeningToTouchEvents && event instanceof MouseEvent) return;
433
- sdk.interactions += 1;
434
- emitEvent("interaction", sdk.interactions);
435
- }
436
- function registerTouchHandlers() {
437
- if (!isTouchEventRegistered) {
438
- document.addEventListener("mousedown", onUserInteraction);
439
- document.addEventListener("touchstart", onUserInteraction);
440
- isTouchEventRegistered = true;
441
- }
442
- }
443
471
  function initSDK() {
444
472
  destinationUrl = /android/i.test(navigator.userAgent) ? GOOGLE_PLAY_URL : APP_STORE_URL;
445
473
  ensureProtocol();
@@ -493,7 +521,7 @@ var _sdk = class _sdk {
493
521
  if (_sdk.isStarted) return;
494
522
  _sdk.isStarted = true;
495
523
  emitEvent("start");
496
- registerTouchHandlers();
524
+ registerInteractionHandlers();
497
525
  if ("mintegral" === AD_NETWORK && isMintegral()) {
498
526
  _sdk.resize();
499
527
  handlePause();
@@ -665,6 +693,7 @@ var _sdk = class _sdk {
665
693
  * }, gameInstance);
666
694
  */
667
695
  static on(event, fn, context) {
696
+ if (event === "pointermove") registerMoveHandler();
668
697
  onEvent(event, fn, context);
669
698
  }
670
699
  /**
@@ -681,6 +710,7 @@ var _sdk = class _sdk {
681
710
  * });
682
711
  */
683
712
  static once(event, fn, context) {
713
+ if (event === "pointermove") registerMoveHandler();
684
714
  onEvent(event, fn, context, true);
685
715
  }
686
716
  /**
@@ -703,7 +733,7 @@ var _sdk = class _sdk {
703
733
  }
704
734
  };
705
735
  /** Current version of the SDK */
706
- _sdk.version = "1.1.4";
736
+ _sdk.version = "1.2.0";
707
737
  /** Current maximum width of the playable ad container in pixels */
708
738
  _sdk.maxWidth = Math.floor(window.innerWidth);
709
739
  /** Current maximum height of the playable ad container in pixels */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@smoud/playable-sdk",
3
- "version": "1.1.4",
3
+ "version": "1.2.0",
4
4
  "description": "It's unified Playable SDK that supports MRAID, Google, Facebook, Vungle, and many more Ad Networks, simplifying playable ad development with a standardized interface for seamless cross-network compatibility.",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/esm/index.js",