novvy-ads-react-native 1.0.0-beta.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 (149) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +210 -0
  3. package/android/build.gradle +84 -0
  4. package/android/gradle.properties +4 -0
  5. package/android/src/main/AndroidManifest.xml +4 -0
  6. package/android/src/main/java/ai/novvy/reactnative/NovvyAdContainerView.kt +63 -0
  7. package/android/src/main/java/ai/novvy/reactnative/NovvyAdsModule.kt +390 -0
  8. package/android/src/main/java/ai/novvy/reactnative/NovvyAdsPackage.kt +46 -0
  9. package/android/src/main/java/ai/novvy/reactnative/NovvyPauseAdViewManager.kt +68 -0
  10. package/android/src/main/java/ai/novvy/reactnative/NovvyScrollAdViewManager.kt +72 -0
  11. package/android/src/main/java/ai/novvy/reactnative/RnPlayerAdapter.kt +18 -0
  12. package/android/src/main/java/ai/novvy/reactnative/ViewReadyEvent.kt +26 -0
  13. package/app.plugin.js +4 -0
  14. package/ios/NovvyAds.mm +168 -0
  15. package/ios/NovvyAdsImpl.swift +409 -0
  16. package/ios/NovvyPauseAdView.mm +79 -0
  17. package/ios/NovvyScrollAdView.mm +80 -0
  18. package/ios/RnPlayerAdapter.swift +14 -0
  19. package/lib/commonjs/NovvyAds.js +87 -0
  20. package/lib/commonjs/NovvyAds.js.map +1 -0
  21. package/lib/commonjs/ads/NovvyAd.js +121 -0
  22. package/lib/commonjs/ads/NovvyAd.js.map +1 -0
  23. package/lib/commonjs/ads/NovvyEndAd.js +19 -0
  24. package/lib/commonjs/ads/NovvyEndAd.js.map +1 -0
  25. package/lib/commonjs/ads/NovvyFullScreenAd.js +49 -0
  26. package/lib/commonjs/ads/NovvyFullScreenAd.js.map +1 -0
  27. package/lib/commonjs/ads/NovvyInterstitialAd.js +19 -0
  28. package/lib/commonjs/ads/NovvyInterstitialAd.js.map +1 -0
  29. package/lib/commonjs/ads/NovvyMidAd.js +19 -0
  30. package/lib/commonjs/ads/NovvyMidAd.js.map +1 -0
  31. package/lib/commonjs/ads/NovvyPauseAd.js +116 -0
  32. package/lib/commonjs/ads/NovvyPauseAd.js.map +1 -0
  33. package/lib/commonjs/ads/NovvyRewardedAd.js +53 -0
  34. package/lib/commonjs/ads/NovvyRewardedAd.js.map +1 -0
  35. package/lib/commonjs/ads/NovvyScrollAd.js +136 -0
  36. package/lib/commonjs/ads/NovvyScrollAd.js.map +1 -0
  37. package/lib/commonjs/eventBus.js +60 -0
  38. package/lib/commonjs/eventBus.js.map +1 -0
  39. package/lib/commonjs/index.js +90 -0
  40. package/lib/commonjs/index.js.map +1 -0
  41. package/lib/commonjs/package.json +1 -0
  42. package/lib/commonjs/spec/NativeNovvyAds.js +27 -0
  43. package/lib/commonjs/spec/NativeNovvyAds.js.map +1 -0
  44. package/lib/commonjs/spec/NovvyPauseAdViewNativeComponent.js +16 -0
  45. package/lib/commonjs/spec/NovvyPauseAdViewNativeComponent.js.map +1 -0
  46. package/lib/commonjs/spec/NovvyScrollAdViewNativeComponent.js +17 -0
  47. package/lib/commonjs/spec/NovvyScrollAdViewNativeComponent.js.map +1 -0
  48. package/lib/commonjs/spec/codegen-event-emitter.d.js +2 -0
  49. package/lib/commonjs/spec/codegen-event-emitter.d.js.map +1 -0
  50. package/lib/commonjs/types.js +54 -0
  51. package/lib/commonjs/types.js.map +1 -0
  52. package/lib/commonjs/views/NovvyPauseAdView.js +76 -0
  53. package/lib/commonjs/views/NovvyPauseAdView.js.map +1 -0
  54. package/lib/commonjs/views/NovvyScrollAdView.js +63 -0
  55. package/lib/commonjs/views/NovvyScrollAdView.js.map +1 -0
  56. package/lib/module/NovvyAds.js +83 -0
  57. package/lib/module/NovvyAds.js.map +1 -0
  58. package/lib/module/ads/NovvyAd.js +117 -0
  59. package/lib/module/ads/NovvyAd.js.map +1 -0
  60. package/lib/module/ads/NovvyEndAd.js +15 -0
  61. package/lib/module/ads/NovvyEndAd.js.map +1 -0
  62. package/lib/module/ads/NovvyFullScreenAd.js +45 -0
  63. package/lib/module/ads/NovvyFullScreenAd.js.map +1 -0
  64. package/lib/module/ads/NovvyInterstitialAd.js +15 -0
  65. package/lib/module/ads/NovvyInterstitialAd.js.map +1 -0
  66. package/lib/module/ads/NovvyMidAd.js +15 -0
  67. package/lib/module/ads/NovvyMidAd.js.map +1 -0
  68. package/lib/module/ads/NovvyPauseAd.js +112 -0
  69. package/lib/module/ads/NovvyPauseAd.js.map +1 -0
  70. package/lib/module/ads/NovvyRewardedAd.js +49 -0
  71. package/lib/module/ads/NovvyRewardedAd.js.map +1 -0
  72. package/lib/module/ads/NovvyScrollAd.js +132 -0
  73. package/lib/module/ads/NovvyScrollAd.js.map +1 -0
  74. package/lib/module/eventBus.js +55 -0
  75. package/lib/module/eventBus.js.map +1 -0
  76. package/lib/module/index.js +22 -0
  77. package/lib/module/index.js.map +1 -0
  78. package/lib/module/package.json +1 -0
  79. package/lib/module/spec/NativeNovvyAds.js +28 -0
  80. package/lib/module/spec/NativeNovvyAds.js.map +1 -0
  81. package/lib/module/spec/NovvyPauseAdViewNativeComponent.js +13 -0
  82. package/lib/module/spec/NovvyPauseAdViewNativeComponent.js.map +1 -0
  83. package/lib/module/spec/NovvyScrollAdViewNativeComponent.js +14 -0
  84. package/lib/module/spec/NovvyScrollAdViewNativeComponent.js.map +1 -0
  85. package/lib/module/spec/codegen-event-emitter.d.js +2 -0
  86. package/lib/module/spec/codegen-event-emitter.d.js.map +1 -0
  87. package/lib/module/types.js +56 -0
  88. package/lib/module/types.js.map +1 -0
  89. package/lib/module/views/NovvyPauseAdView.js +70 -0
  90. package/lib/module/views/NovvyPauseAdView.js.map +1 -0
  91. package/lib/module/views/NovvyScrollAdView.js +57 -0
  92. package/lib/module/views/NovvyScrollAdView.js.map +1 -0
  93. package/lib/typescript/NovvyAds.d.ts +69 -0
  94. package/lib/typescript/NovvyAds.d.ts.map +1 -0
  95. package/lib/typescript/ads/NovvyAd.d.ts +57 -0
  96. package/lib/typescript/ads/NovvyAd.d.ts.map +1 -0
  97. package/lib/typescript/ads/NovvyEndAd.d.ts +7 -0
  98. package/lib/typescript/ads/NovvyEndAd.d.ts.map +1 -0
  99. package/lib/typescript/ads/NovvyFullScreenAd.d.ts +19 -0
  100. package/lib/typescript/ads/NovvyFullScreenAd.d.ts.map +1 -0
  101. package/lib/typescript/ads/NovvyInterstitialAd.d.ts +7 -0
  102. package/lib/typescript/ads/NovvyInterstitialAd.d.ts.map +1 -0
  103. package/lib/typescript/ads/NovvyMidAd.d.ts +7 -0
  104. package/lib/typescript/ads/NovvyMidAd.d.ts.map +1 -0
  105. package/lib/typescript/ads/NovvyPauseAd.d.ts +45 -0
  106. package/lib/typescript/ads/NovvyPauseAd.d.ts.map +1 -0
  107. package/lib/typescript/ads/NovvyRewardedAd.d.ts +19 -0
  108. package/lib/typescript/ads/NovvyRewardedAd.d.ts.map +1 -0
  109. package/lib/typescript/ads/NovvyScrollAd.d.ts +57 -0
  110. package/lib/typescript/ads/NovvyScrollAd.d.ts.map +1 -0
  111. package/lib/typescript/eventBus.d.ts +15 -0
  112. package/lib/typescript/eventBus.d.ts.map +1 -0
  113. package/lib/typescript/index.d.ts +15 -0
  114. package/lib/typescript/index.d.ts.map +1 -0
  115. package/lib/typescript/spec/NativeNovvyAds.d.ts +73 -0
  116. package/lib/typescript/spec/NativeNovvyAds.d.ts.map +1 -0
  117. package/lib/typescript/spec/NovvyPauseAdViewNativeComponent.d.ts +18 -0
  118. package/lib/typescript/spec/NovvyPauseAdViewNativeComponent.d.ts.map +1 -0
  119. package/lib/typescript/spec/NovvyScrollAdViewNativeComponent.d.ts +19 -0
  120. package/lib/typescript/spec/NovvyScrollAdViewNativeComponent.d.ts.map +1 -0
  121. package/lib/typescript/types.d.ts +77 -0
  122. package/lib/typescript/types.d.ts.map +1 -0
  123. package/lib/typescript/views/NovvyPauseAdView.d.ts +21 -0
  124. package/lib/typescript/views/NovvyPauseAdView.d.ts.map +1 -0
  125. package/lib/typescript/views/NovvyScrollAdView.d.ts +22 -0
  126. package/lib/typescript/views/NovvyScrollAdView.d.ts.map +1 -0
  127. package/novvy-ads-react-native.podspec +71 -0
  128. package/package.json +84 -0
  129. package/plugin/build/index.d.ts +11 -0
  130. package/plugin/build/index.js +53 -0
  131. package/react-native.config.js +7 -0
  132. package/src/NovvyAds.ts +98 -0
  133. package/src/ads/NovvyAd.ts +125 -0
  134. package/src/ads/NovvyEndAd.ts +13 -0
  135. package/src/ads/NovvyFullScreenAd.ts +46 -0
  136. package/src/ads/NovvyInterstitialAd.ts +13 -0
  137. package/src/ads/NovvyMidAd.ts +13 -0
  138. package/src/ads/NovvyPauseAd.ts +125 -0
  139. package/src/ads/NovvyRewardedAd.ts +49 -0
  140. package/src/ads/NovvyScrollAd.ts +138 -0
  141. package/src/eventBus.ts +59 -0
  142. package/src/index.tsx +29 -0
  143. package/src/spec/NativeNovvyAds.ts +134 -0
  144. package/src/spec/NovvyPauseAdViewNativeComponent.ts +20 -0
  145. package/src/spec/NovvyScrollAdViewNativeComponent.ts +21 -0
  146. package/src/spec/codegen-event-emitter.d.ts +10 -0
  147. package/src/types.ts +82 -0
  148. package/src/views/NovvyPauseAdView.tsx +80 -0
  149. package/src/views/NovvyScrollAdView.tsx +71 -0
@@ -0,0 +1,136 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.NovvyScrollAd = void 0;
7
+ var _eventBus = require("../eventBus");
8
+ var _types = require("../types");
9
+ var _NovvyAd = require("./NovvyAd");
10
+ /**
11
+ * A scroll ad that renders as a native view inserted into a scrollable list.
12
+ *
13
+ * Lifecycle: {@link load} → embed `<NovvyScrollAdView>` → {@link setPlaying} as
14
+ * it enters / leaves the viewport → {@link destroy}. Attach/detach are driven
15
+ * by the `<NovvyScrollAdView>` component's mount lifecycle.
16
+ */
17
+ class NovvyScrollAd extends _NovvyAd.NovvyAd {
18
+ /** The Fabric component name used by `<NovvyScrollAdView>`. */
19
+ static viewType = 'NovvyScrollAdView';
20
+
21
+ /**
22
+ * Optional override for the episode number used in the bid request. When
23
+ * non-null, takes precedence over the value set via
24
+ * {@link NovvyAds.setContentContext}.
25
+ */
26
+
27
+ /** Called when the ad becomes visible in the viewport. */
28
+
29
+ /** Called when the ad is hidden / removed from the viewport. */
30
+
31
+ /**
32
+ * Called every second during playback with the remaining seconds
33
+ * (0 = user can swipe past the ad).
34
+ */
35
+
36
+ constructor(adUnitId, episodeNumber) {
37
+ super(adUnitId);
38
+ this.episodeNumber = episodeNumber;
39
+ }
40
+
41
+ // ── Attach coordination ────────────────────────────────────────────────
42
+ //
43
+ // The native SCROLL contract is strictly two-stage: `load()` must resolve the
44
+ // creative BEFORE `attach()` — the native engine drops an early attach with a
45
+ // "not ready" log and never retries (see NovvyPlacementAd.attach). But the two
46
+ // triggers here are independent: `load()` is host-driven and network-bound,
47
+ // while the native container becomes available on the view's `onViewReady`
48
+ // (local, fast). View-ready therefore almost always beats `loaded`, so a naive
49
+ // "attach on view-ready" fires too early, silently no-ops, and the slot stays
50
+ // on its black placeholder for every creative type.
51
+ //
52
+ // We instead attach only once BOTH signals have arrived (whichever is last),
53
+ // and buffer the host's play intent so it survives being set before attach and
54
+ // is re-applied across detach/re-attach (scroll off- and back on-screen).
55
+ _viewReady = false;
56
+ _attached = false;
57
+ /** Last play intent from the host; (re)applied on each attach. */
58
+ _playing = false;
59
+ _durationSeconds = null;
60
+ _useDefaultSwipeOverlay = true;
61
+ _loadNative() {
62
+ _eventBus.Native.loadScrollAd(this.adUnitId, this.adObjectId, this.episodeNumber ?? null);
63
+ }
64
+
65
+ /**
66
+ * Signals that the native container is ready (fired automatically by
67
+ * `<NovvyScrollAdView>` on `onViewReady`). Records the attach params and
68
+ * mounts the ad once it has also finished loading.
69
+ */
70
+ attach(durationSeconds, useDefaultSwipeOverlay = true) {
71
+ this._durationSeconds = durationSeconds ?? null;
72
+ this._useDefaultSwipeOverlay = useDefaultSwipeOverlay;
73
+ this._viewReady = true;
74
+ this._maybeAttach();
75
+ }
76
+
77
+ /** Detach the scroll ad from its container. */
78
+ detach() {
79
+ this._viewReady = false;
80
+ this._attached = false;
81
+ _eventBus.Native.detachScrollAd(this.adObjectId);
82
+ }
83
+
84
+ /**
85
+ * Set the playing state. Call `setPlaying(true)` when the item scrolls into
86
+ * the viewport and `setPlaying(false)` when it scrolls out. Safe to call
87
+ * before the ad has attached — the intent is buffered and applied on attach.
88
+ */
89
+ setPlaying(playing) {
90
+ this._playing = playing;
91
+ if (this._attached) {
92
+ _eventBus.Native.setScrollAdPlaying(this.adObjectId, playing);
93
+ }
94
+ }
95
+
96
+ /**
97
+ * Attach once the ad is loaded AND the native view is ready — the native
98
+ * engine requires load-before-attach and does not retry, so we gate on both.
99
+ */
100
+ _maybeAttach() {
101
+ if (this._attached || this._disposed || !this._isReady || !this._viewReady) {
102
+ return;
103
+ }
104
+ _eventBus.Native.attachScrollAd(this.adObjectId, this._durationSeconds, this._useDefaultSwipeOverlay);
105
+ this._attached = true;
106
+ // Re-apply the buffered play intent now that a native host exists.
107
+ if (this._playing) {
108
+ _eventBus.Native.setScrollAdPlaying(this.adObjectId, true);
109
+ }
110
+ }
111
+ _handleInternalEvent(event) {
112
+ if (this._handleCommonLoad(event)) {
113
+ // `loaded` may arrive after the view is already ready; attach now that
114
+ // the native engine has the creative (after any onAdLoaded → setPlaying).
115
+ if (event.event === _types.NovvyAdEvent.Loaded) {
116
+ this._maybeAttach();
117
+ }
118
+ return;
119
+ }
120
+ switch (event.event) {
121
+ case _types.NovvyAdEvent.Showed:
122
+ this.onAdShowed?.();
123
+ break;
124
+ case _types.NovvyAdEvent.Hidden:
125
+ this.onAdHidden?.();
126
+ break;
127
+ case _types.NovvyAdEvent.PlaybackTick:
128
+ this.onAdPlaybackTick?.(event.remainingSeconds ?? 0);
129
+ break;
130
+ default:
131
+ break;
132
+ }
133
+ }
134
+ }
135
+ exports.NovvyScrollAd = NovvyScrollAd;
136
+ //# sourceMappingURL=NovvyScrollAd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_eventBus","require","_types","_NovvyAd","NovvyScrollAd","NovvyAd","viewType","constructor","adUnitId","episodeNumber","_viewReady","_attached","_playing","_durationSeconds","_useDefaultSwipeOverlay","_loadNative","Native","loadScrollAd","adObjectId","attach","durationSeconds","useDefaultSwipeOverlay","_maybeAttach","detach","detachScrollAd","setPlaying","playing","setScrollAdPlaying","_disposed","_isReady","attachScrollAd","_handleInternalEvent","event","_handleCommonLoad","NovvyAdEvent","Loaded","Showed","onAdShowed","Hidden","onAdHidden","PlaybackTick","onAdPlaybackTick","remainingSeconds","exports"],"sourceRoot":"../../../src","sources":["ads/NovvyScrollAd.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.Native = void 0;
7
+ exports.subscribe = subscribe;
8
+ var _NativeNovvyAds = _interopRequireDefault(require("./spec/NativeNovvyAds"));
9
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
+ /**
11
+ * Central hub over the single native→JS `onAdEvent` stream.
12
+ *
13
+ * Mirrors the Flutter plugin's `_NovvyAdsImpl` broadcast stream: one native
14
+ * event source is fanned out to per-ad handlers filtered by `adObjectId`.
15
+ */
16
+
17
+ const handlers = new Map();
18
+ let subscription = null;
19
+ function ensureSubscribed() {
20
+ if (subscription) {
21
+ return;
22
+ }
23
+ subscription = _NativeNovvyAds.default.onAdEvent(event => {
24
+ const set = handlers.get(event.adObjectId);
25
+ if (!set) {
26
+ return;
27
+ }
28
+ // Copy so a handler may unsubscribe/destroy during dispatch.
29
+ for (const handler of Array.from(set)) {
30
+ handler(event);
31
+ }
32
+ });
33
+ }
34
+
35
+ /**
36
+ * Subscribe to events for a single ad instance. Returns an unsubscribe fn.
37
+ */
38
+ function subscribe(adObjectId, handler) {
39
+ ensureSubscribed();
40
+ let set = handlers.get(adObjectId);
41
+ if (!set) {
42
+ set = new Set();
43
+ handlers.set(adObjectId, set);
44
+ }
45
+ set.add(handler);
46
+ return () => {
47
+ const current = handlers.get(adObjectId);
48
+ if (!current) {
49
+ return;
50
+ }
51
+ current.delete(handler);
52
+ if (current.size === 0) {
53
+ handlers.delete(adObjectId);
54
+ }
55
+ };
56
+ }
57
+
58
+ /** The underlying TurboModule instance. */
59
+ const Native = exports.Native = _NativeNovvyAds.default;
60
+ //# sourceMappingURL=eventBus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_NativeNovvyAds","_interopRequireDefault","require","e","__esModule","default","handlers","Map","subscription","ensureSubscribed","NovvyAdsNative","onAdEvent","event","set","get","adObjectId","handler","Array","from","subscribe","Set","add","current","delete","size","Native","exports"],"sourceRoot":"../../src","sources":["eventBus.ts"],"mappings":";;;;;;;AAAA,IAAAA,eAAA,GAAAC,sBAAA,CAAAC,OAAA;AAAmD,SAAAD,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAGnD;AACA;AACA;AACA;AACA;AACA;;AAIA,MAAMG,QAAQ,GAAG,IAAIC,GAAG,CAA8B,CAAC;AACvD,IAAIC,YAAuC,GAAG,IAAI;AAElD,SAASC,gBAAgBA,CAAA,EAAS;EAChC,IAAID,YAAY,EAAE;IAChB;EACF;EACAA,YAAY,GAAGE,uBAAc,CAACC,SAAS,CAAEC,KAAoB,IAAK;IAChE,MAAMC,GAAG,GAAGP,QAAQ,CAACQ,GAAG,CAACF,KAAK,CAACG,UAAU,CAAC;IAC1C,IAAI,CAACF,GAAG,EAAE;MACR;IACF;IACA;IACA,KAAK,MAAMG,OAAO,IAAIC,KAAK,CAACC,IAAI,CAACL,GAAG,CAAC,EAAE;MACrCG,OAAO,CAACJ,KAAK,CAAC;IAChB;EACF,CAAC,CAAC;AACJ;;AAEA;AACA;AACA;AACO,SAASO,SAASA,CACvBJ,UAAkB,EAClBC,OAAuB,EACX;EACZP,gBAAgB,CAAC,CAAC;EAClB,IAAII,GAAG,GAAGP,QAAQ,CAACQ,GAAG,CAACC,UAAU,CAAC;EAClC,IAAI,CAACF,GAAG,EAAE;IACRA,GAAG,GAAG,IAAIO,GAAG,CAAC,CAAC;IACfd,QAAQ,CAACO,GAAG,CAACE,UAAU,EAAEF,GAAG,CAAC;EAC/B;EACAA,GAAG,CAACQ,GAAG,CAACL,OAAO,CAAC;EAChB,OAAO,MAAM;IACX,MAAMM,OAAO,GAAGhB,QAAQ,CAACQ,GAAG,CAACC,UAAU,CAAC;IACxC,IAAI,CAACO,OAAO,EAAE;MACZ;IACF;IACAA,OAAO,CAACC,MAAM,CAACP,OAAO,CAAC;IACvB,IAAIM,OAAO,CAACE,IAAI,KAAK,CAAC,EAAE;MACtBlB,QAAQ,CAACiB,MAAM,CAACR,UAAU,CAAC;IAC7B;EACF,CAAC;AACH;;AAEA;AACO,MAAMU,MAAM,GAAAC,OAAA,CAAAD,MAAA,GAAGf,uBAAc","ignoreList":[]}
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "NovvyAd", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _NovvyAd.NovvyAd;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "NovvyAdEvent", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _types.NovvyAdEvent;
16
+ }
17
+ });
18
+ Object.defineProperty(exports, "NovvyAds", {
19
+ enumerable: true,
20
+ get: function () {
21
+ return _NovvyAds.NovvyAds;
22
+ }
23
+ });
24
+ Object.defineProperty(exports, "NovvyEndAd", {
25
+ enumerable: true,
26
+ get: function () {
27
+ return _NovvyEndAd.NovvyEndAd;
28
+ }
29
+ });
30
+ Object.defineProperty(exports, "NovvyFullScreenAd", {
31
+ enumerable: true,
32
+ get: function () {
33
+ return _NovvyFullScreenAd.NovvyFullScreenAd;
34
+ }
35
+ });
36
+ Object.defineProperty(exports, "NovvyInterstitialAd", {
37
+ enumerable: true,
38
+ get: function () {
39
+ return _NovvyInterstitialAd.NovvyInterstitialAd;
40
+ }
41
+ });
42
+ Object.defineProperty(exports, "NovvyMidAd", {
43
+ enumerable: true,
44
+ get: function () {
45
+ return _NovvyMidAd.NovvyMidAd;
46
+ }
47
+ });
48
+ Object.defineProperty(exports, "NovvyPauseAd", {
49
+ enumerable: true,
50
+ get: function () {
51
+ return _NovvyPauseAd.NovvyPauseAd;
52
+ }
53
+ });
54
+ Object.defineProperty(exports, "NovvyPauseAdView", {
55
+ enumerable: true,
56
+ get: function () {
57
+ return _NovvyPauseAdView.NovvyPauseAdView;
58
+ }
59
+ });
60
+ Object.defineProperty(exports, "NovvyRewardedAd", {
61
+ enumerable: true,
62
+ get: function () {
63
+ return _NovvyRewardedAd.NovvyRewardedAd;
64
+ }
65
+ });
66
+ Object.defineProperty(exports, "NovvyScrollAd", {
67
+ enumerable: true,
68
+ get: function () {
69
+ return _NovvyScrollAd.NovvyScrollAd;
70
+ }
71
+ });
72
+ Object.defineProperty(exports, "NovvyScrollAdView", {
73
+ enumerable: true,
74
+ get: function () {
75
+ return _NovvyScrollAdView.NovvyScrollAdView;
76
+ }
77
+ });
78
+ var _NovvyAds = require("./NovvyAds");
79
+ var _NovvyAd = require("./ads/NovvyAd");
80
+ var _NovvyFullScreenAd = require("./ads/NovvyFullScreenAd");
81
+ var _NovvyInterstitialAd = require("./ads/NovvyInterstitialAd");
82
+ var _NovvyRewardedAd = require("./ads/NovvyRewardedAd");
83
+ var _NovvyMidAd = require("./ads/NovvyMidAd");
84
+ var _NovvyEndAd = require("./ads/NovvyEndAd");
85
+ var _NovvyScrollAd = require("./ads/NovvyScrollAd");
86
+ var _NovvyPauseAd = require("./ads/NovvyPauseAd");
87
+ var _NovvyScrollAdView = require("./views/NovvyScrollAdView");
88
+ var _NovvyPauseAdView = require("./views/NovvyPauseAdView");
89
+ var _types = require("./types");
90
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_NovvyAds","require","_NovvyAd","_NovvyFullScreenAd","_NovvyInterstitialAd","_NovvyRewardedAd","_NovvyMidAd","_NovvyEndAd","_NovvyScrollAd","_NovvyPauseAd","_NovvyScrollAdView","_NovvyPauseAdView","_types"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,IAAAA,SAAA,GAAAC,OAAA;AAGA,IAAAC,QAAA,GAAAD,OAAA;AACA,IAAAE,kBAAA,GAAAF,OAAA;AACA,IAAAG,oBAAA,GAAAH,OAAA;AACA,IAAAI,gBAAA,GAAAJ,OAAA;AACA,IAAAK,WAAA,GAAAL,OAAA;AACA,IAAAM,WAAA,GAAAN,OAAA;AACA,IAAAO,cAAA,GAAAP,OAAA;AACA,IAAAQ,aAAA,GAAAR,OAAA;AAGA,IAAAS,kBAAA,GAAAT,OAAA;AAEA,IAAAU,iBAAA,GAAAV,OAAA;AAIA,IAAAW,MAAA,GAAAX,OAAA","ignoreList":[]}
@@ -0,0 +1 @@
1
+ {"type":"commonjs"}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _reactNative = require("react-native");
8
+ /**
9
+ * Codegen-facing spec for the Novvy Ads TurboModule (new architecture only).
10
+ *
11
+ * Method surface mirrors the Flutter plugin's Pigeon `NovvyAdHostApi`
12
+ * (pigeons/novvy_ads_api.dart) one-to-one. The single `onAdEvent` emitter
13
+ * mirrors Pigeon's `NovvyAdsFlutterApi.onAdEvent`; each JS ad object filters
14
+ * this stream by its own `adObjectId`.
15
+ *
16
+ * NOTE: Codegen struct/event types must live in this file. The public,
17
+ * richly-documented aliases are re-exported from `../types`.
18
+ */
19
+ // ── Data structs (codegen-facing) ───────────────────────────────────────────
20
+ /**
21
+ * Single native→JS ad lifecycle event. `event` is one of the NovvyAdEvent
22
+ * string values. `remainingSeconds` is only populated for `playbackTick`
23
+ * (flattened from Pigeon's `data` map for codegen compatibility).
24
+ */
25
+ // ── TurboModule ─────────────────────────────────────────────────────────────
26
+ var _default = exports.default = _reactNative.TurboModuleRegistry.getEnforcing('NovvyAds');
27
+ //# sourceMappingURL=NativeNovvyAds.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_reactNative","require","_default","exports","default","TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../../src","sources":["spec/NativeNovvyAds.ts"],"mappings":";;;;;;AACA,IAAAA,YAAA,GAAAC,OAAA;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AA0BA;AACA;AACA;AACA;AACA;AASA;AAAA,IAAAC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAyEeC,gCAAmB,CAACC,YAAY,CAAO,UAAU,CAAC","ignoreList":[]}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _codegenNativeComponent = _interopRequireDefault(require("react-native/Libraries/Utilities/codegenNativeComponent"));
8
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
+ /**
10
+ * Fabric component for an inline realtime pause-card ad container
11
+ * (fixed 260×90). The native view registers its container in the TurboModule
12
+ * keyed by `adObjectId`, then fires `onViewReady`, at which point JS issues
13
+ * `attachPauseAd` (there is no load step for pause ads).
14
+ */
15
+ var _default = exports.default = (0, _codegenNativeComponent.default)('NovvyPauseAdView');
16
+ //# sourceMappingURL=NovvyPauseAdViewNativeComponent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_codegenNativeComponent","_interopRequireDefault","require","e","__esModule","default","_default","exports","codegenNativeComponent"],"sourceRoot":"../../../src","sources":["spec/NovvyPauseAdViewNativeComponent.ts"],"mappings":";;;;;;AACA,IAAAA,uBAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA6F,SAAAD,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAG7F;AACA;AACA;AACA;AACA;AACA;AALA,IAAAG,QAAA,GAAAC,OAAA,CAAAF,OAAA,GAae,IAAAG,+BAAsB,EACnC,kBACF,CAAC","ignoreList":[]}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _codegenNativeComponent = _interopRequireDefault(require("react-native/Libraries/Utilities/codegenNativeComponent"));
8
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
+ /**
10
+ * Fabric component for an inline scroll (feed) ad container.
11
+ *
12
+ * The native view registers its container in the TurboModule keyed by
13
+ * `adObjectId`, then fires `onViewReady` (mirrors the Flutter plugin's
14
+ * `onPlatformViewCreated`), at which point JS issues `attachScrollAd`.
15
+ */
16
+ var _default = exports.default = (0, _codegenNativeComponent.default)('NovvyScrollAdView');
17
+ //# sourceMappingURL=NovvyScrollAdViewNativeComponent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_codegenNativeComponent","_interopRequireDefault","require","e","__esModule","default","_default","exports","codegenNativeComponent"],"sourceRoot":"../../../src","sources":["spec/NovvyScrollAdViewNativeComponent.ts"],"mappings":";;;;;;AACA,IAAAA,uBAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA6F,SAAAD,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAG7F;AACA;AACA;AACA;AACA;AACA;AACA;AANA,IAAAG,QAAA,GAAAC,OAAA,CAAAF,OAAA,GAce,IAAAG,+BAAsB,EACnC,mBACF,CAAC","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=codegen-event-emitter.d.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../../src","sources":["spec/codegen-event-emitter.d.ts"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.NovvyAdEvent = void 0;
7
+ /**
8
+ * Public types for the Novvy Ads React Native SDK.
9
+ *
10
+ * These mirror the Flutter plugin's Pigeon data classes
11
+ * (pigeons/novvy_ads_api.dart). At runtime they are structurally identical to
12
+ * the codegen structs in `spec/NativeNovvyAds.ts`, so instances pass straight
13
+ * through the TurboModule with no conversion.
14
+ */
15
+ /** A single drama-watch history entry used for ad targeting. */
16
+ /** User gender values accepted by the SDK. */
17
+ /**
18
+ * User identity and subscription context.
19
+ *
20
+ * Pass to {@link NovvyAds.setUserContext} (full replace) or
21
+ * {@link NovvyAds.updateUserContext} (incremental merge).
22
+ */
23
+ /**
24
+ * Content and episode context used for ad targeting.
25
+ *
26
+ * Pass to {@link NovvyAds.setContentContext} (full replace) or
27
+ * {@link NovvyAds.updateContentContext} (incremental merge).
28
+ */
29
+ /** Ad lifecycle event names (mirror Pigeon's `NovvyAdEvent` enum). */
30
+ let NovvyAdEvent = exports.NovvyAdEvent = /*#__PURE__*/function (NovvyAdEvent) {
31
+ /** Ad and creative are ready to show (not emitted for Pause — realtime). */
32
+ NovvyAdEvent["Loaded"] = "loaded";
33
+ /** Ad failed to load / request. */
34
+ NovvyAdEvent["FailedToLoad"] = "failedToLoad";
35
+ /** Ad was shown (full-screen) or became visible (Scroll / Pause). */
36
+ NovvyAdEvent["Showed"] = "showed";
37
+ /** Full-screen ad was closed by the user (Rewarded / Interstitial / Mid / End). */
38
+ NovvyAdEvent["Dismissed"] = "dismissed";
39
+ /** Inline ad was hidden / removed (Scroll onAdHidden, Pause hidden). */
40
+ NovvyAdEvent["Hidden"] = "hidden";
41
+ /** Rewarded ad earned a reward. Carries no data payload. */
42
+ NovvyAdEvent["EarnedReward"] = "earnedReward";
43
+ /** Scroll ad playback tick. Carries `remainingSeconds`. */
44
+ NovvyAdEvent["PlaybackTick"] = "playbackTick";
45
+ return NovvyAdEvent;
46
+ }({});
47
+ /**
48
+ * Interface for a media player that a {@link NovvyPauseAd} monitors.
49
+ *
50
+ * Implement this to bridge your video/audio player so the SDK can detect
51
+ * playback position and resumption. Mirrors the Flutter plugin's
52
+ * `NovvyPlayerAdapter`.
53
+ */
54
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["NovvyAdEvent","exports"],"sourceRoot":"../../src","sources":["types.ts"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAQA;AAGA;AACA;AACA;AACA;AACA;AACA;AAcA;AACA;AACA;AACA;AACA;AACA;AAOA;AAAA,IACYA,YAAY,GAAAC,OAAA,CAAAD,YAAA,0BAAZA,YAAY;EACtB;EADUA,YAAY;EAGtB;EAHUA,YAAY;EAKtB;EALUA,YAAY;EAOtB;EAPUA,YAAY;EAStB;EATUA,YAAY;EAWtB;EAXUA,YAAY;EAatB;EAbUA,YAAY;EAAA,OAAZA,YAAY;AAAA;AAiBxB;AACA;AACA;AACA;AACA;AACA;AACA","ignoreList":[]}
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.NovvyPauseAdView = NovvyPauseAdView;
7
+ var _react = _interopRequireWildcard(require("react"));
8
+ var _reactNative = require("react-native");
9
+ var _NovvyPauseAd = require("../ads/NovvyPauseAd");
10
+ var _NovvyPauseAdViewNativeComponent = _interopRequireDefault(require("../spec/NovvyPauseAdViewNativeComponent"));
11
+ var _jsxRuntime = require("react/jsx-runtime");
12
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
13
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
14
+ /**
15
+ * Embeds a {@link NovvyPauseAd} as a native view. Fixed to
16
+ * {@link NovvyPauseAd.cardWidth} × {@link NovvyPauseAd.cardHeight}; position it
17
+ * within your own layout. Mirrors the Flutter plugin's `NovvyPauseAdView`.
18
+ *
19
+ * Touch passthrough / opacity follow the card's shown state so the view is
20
+ * transparent and non-interactive until the ad actually appears.
21
+ */
22
+ function NovvyPauseAdView({
23
+ ad,
24
+ player,
25
+ style
26
+ }) {
27
+ const attached = (0, _react.useRef)(false);
28
+ const [shown, setShown] = (0, _react.useState)(false);
29
+ (0, _react.useEffect)(() => {
30
+ const prev = ad.onShownChanged;
31
+ ad.onShownChanged = isShown => {
32
+ setShown(isShown);
33
+ prev?.(isShown);
34
+ };
35
+ return () => {
36
+ ad.onShownChanged = prev;
37
+ if (attached.current) {
38
+ ad.detach();
39
+ }
40
+ };
41
+ // eslint-disable-next-line react-hooks/exhaustive-deps
42
+ }, []);
43
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
44
+ style: [styles.container, style],
45
+ pointerEvents: shown ? 'auto' : 'none'
46
+ // Claim the RN JS responder while the card is shown so an outer
47
+ // Pressable/Touchable in the host layout can't also fire onPress on
48
+ // the same tap and race with the SDK's CTA (which would resume the
49
+ // video and destroy the ad before the browser opens). The SDK's
50
+ // native tap handling is unaffected: on Android JSTouchDispatcher
51
+ // runs in parallel to native dispatch, and on iOS RCTTouchHandler
52
+ // uses cancelsTouchesInView=NO so native touches still reach the
53
+ // ad view's own gesture recognizer.
54
+ ,
55
+ onStartShouldSetResponder: shown ? () => true : undefined,
56
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_NovvyPauseAdViewNativeComponent.default, {
57
+ style: [_reactNative.StyleSheet.absoluteFill, {
58
+ opacity: shown ? 1 : 0
59
+ }],
60
+ adObjectId: ad.adObjectId,
61
+ onViewReady: () => {
62
+ if (!attached.current) {
63
+ attached.current = true;
64
+ ad.attach(player);
65
+ }
66
+ }
67
+ })
68
+ });
69
+ }
70
+ const styles = _reactNative.StyleSheet.create({
71
+ container: {
72
+ width: _NovvyPauseAd.NovvyPauseAd.cardWidth,
73
+ height: _NovvyPauseAd.NovvyPauseAd.cardHeight
74
+ }
75
+ });
76
+ //# sourceMappingURL=NovvyPauseAdView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_NovvyPauseAd","_NovvyPauseAdViewNativeComponent","_interopRequireDefault","_jsxRuntime","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","NovvyPauseAdView","ad","player","style","attached","useRef","shown","setShown","useState","useEffect","prev","onShownChanged","isShown","current","detach","jsx","View","styles","container","pointerEvents","onStartShouldSetResponder","undefined","children","StyleSheet","absoluteFill","opacity","adObjectId","onViewReady","attach","create","width","NovvyPauseAd","cardWidth","height","cardHeight"],"sourceRoot":"../../../src","sources":["views/NovvyPauseAdView.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.NovvyScrollAdView = NovvyScrollAdView;
7
+ var _react = _interopRequireWildcard(require("react"));
8
+ var _reactNative = require("react-native");
9
+ var _NovvyScrollAdViewNativeComponent = _interopRequireDefault(require("../spec/NovvyScrollAdViewNativeComponent"));
10
+ var _jsxRuntime = require("react/jsx-runtime");
11
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
12
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
13
+ /**
14
+ * Embeds a {@link NovvyScrollAd} as a native view. Wrap it in a container with
15
+ * the desired height for your feed item. Mirrors the Flutter plugin's
16
+ * `NovvyScrollAdView`.
17
+ *
18
+ * A black backdrop paints immediately so the previous page can't show through
19
+ * the slot while the native view is created.
20
+ */
21
+ function NovvyScrollAdView({
22
+ ad,
23
+ durationSeconds,
24
+ useDefaultSwipeOverlay = true,
25
+ style
26
+ }) {
27
+ const attached = (0, _react.useRef)(false);
28
+ (0, _react.useEffect)(() => {
29
+ return () => {
30
+ if (attached.current) {
31
+ ad.detach();
32
+ }
33
+ };
34
+ // Detach only on unmount; `ad` identity is stable for the view's lifetime.
35
+ // eslint-disable-next-line react-hooks/exhaustive-deps
36
+ }, []);
37
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
38
+ style: [styles.container, style]
39
+ // Claim the RN JS responder for taps so an outer Pressable/Touchable
40
+ // in the host layout can't also fire onPress and race with the SDK's
41
+ // CTA. Only onStart is claimed — a subsequent move gesture can still
42
+ // migrate to an ancestor ScrollView/FlatList via the normal responder
43
+ // negotiation, so vertical feed swiping is preserved.
44
+ ,
45
+ onStartShouldSetResponder: () => true,
46
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_NovvyScrollAdViewNativeComponent.default, {
47
+ style: _reactNative.StyleSheet.absoluteFill,
48
+ adObjectId: ad.adObjectId,
49
+ onViewReady: () => {
50
+ if (!attached.current) {
51
+ attached.current = true;
52
+ ad.attach(durationSeconds, useDefaultSwipeOverlay);
53
+ }
54
+ }
55
+ })
56
+ });
57
+ }
58
+ const styles = _reactNative.StyleSheet.create({
59
+ container: {
60
+ backgroundColor: '#000000'
61
+ }
62
+ });
63
+ //# sourceMappingURL=NovvyScrollAdView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_NovvyScrollAdViewNativeComponent","_interopRequireDefault","_jsxRuntime","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","NovvyScrollAdView","ad","durationSeconds","useDefaultSwipeOverlay","style","attached","useRef","useEffect","current","detach","jsx","View","styles","container","onStartShouldSetResponder","children","StyleSheet","absoluteFill","adObjectId","onViewReady","attach","create","backgroundColor"],"sourceRoot":"../../../src","sources":["views/NovvyScrollAdView.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAGA,IAAAE,iCAAA,GAAAC,sBAAA,CAAAH,OAAA;AAAwE,IAAAI,WAAA,GAAAJ,OAAA;AAAA,SAAAG,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAAA,SAAAN,wBAAAM,CAAA,EAAAG,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAV,uBAAA,YAAAA,CAAAM,CAAA,EAAAG,CAAA,SAAAA,CAAA,IAAAH,CAAA,IAAAA,CAAA,CAAAC,UAAA,SAAAD,CAAA,MAAAO,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAR,OAAA,EAAAF,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAS,CAAA,MAAAF,CAAA,GAAAJ,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAE,CAAA,CAAAI,GAAA,CAAAX,CAAA,UAAAO,CAAA,CAAAK,GAAA,CAAAZ,CAAA,GAAAO,CAAA,CAAAM,GAAA,CAAAb,CAAA,EAAAS,CAAA,gBAAAN,CAAA,IAAAH,CAAA,gBAAAG,CAAA,OAAAW,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAG,CAAA,OAAAK,CAAA,IAAAD,CAAA,GAAAS,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAG,CAAA,OAAAK,CAAA,CAAAI,GAAA,IAAAJ,CAAA,CAAAK,GAAA,IAAAN,CAAA,CAAAE,CAAA,EAAAN,CAAA,EAAAK,CAAA,IAAAC,CAAA,CAAAN,CAAA,IAAAH,CAAA,CAAAG,CAAA,WAAAM,CAAA,KAAAT,CAAA,EAAAG,CAAA;AAYxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASgB,iBAAiBA,CAAC;EAChCC,EAAE;EACFC,eAAe;EACfC,sBAAsB,GAAG,IAAI;EAC7BC;AACsB,CAAC,EAAsB;EAC7C,MAAMC,QAAQ,GAAG,IAAAC,aAAM,EAAC,KAAK,CAAC;EAE9B,IAAAC,gBAAS,EAAC,MAAM;IACd,OAAO,MAAM;MACX,IAAIF,QAAQ,CAACG,OAAO,EAAE;QACpBP,EAAE,CAACQ,MAAM,CAAC,CAAC;MACb;IACF,CAAC;IACD;IACA;EACF,CAAC,EAAE,EAAE,CAAC;EAEN,oBACE,IAAA7B,WAAA,CAAA8B,GAAA,EAACjC,YAAA,CAAAkC,IAAI;IACHP,KAAK,EAAE,CAACQ,MAAM,CAACC,SAAS,EAAET,KAAK;IAC/B;IACA;IACA;IACA;IACA;IAAA;IACAU,yBAAyB,EAAEA,CAAA,KAAM,IAAK;IAAAC,QAAA,eAEtC,IAAAnC,WAAA,CAAA8B,GAAA,EAAChC,iCAAA,CAAAK,OAAgB;MACfqB,KAAK,EAAEY,uBAAU,CAACC,YAAa;MAC/BC,UAAU,EAAEjB,EAAE,CAACiB,UAAW;MAC1BC,WAAW,EAAEA,CAAA,KAAM;QACjB,IAAI,CAACd,QAAQ,CAACG,OAAO,EAAE;UACrBH,QAAQ,CAACG,OAAO,GAAG,IAAI;UACvBP,EAAE,CAACmB,MAAM,CAAClB,eAAe,EAAEC,sBAAsB,CAAC;QACpD;MACF;IAAE,CACH;EAAC,CACE,CAAC;AAEX;AAEA,MAAMS,MAAM,GAAGI,uBAAU,CAACK,MAAM,CAAC;EAC/BR,SAAS,EAAE;IACTS,eAAe,EAAE;EACnB;AACF,CAAC,CAAC","ignoreList":[]}