@billdog.io/react-native 1.0.0-beta.2

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 (309) hide show
  1. package/BillDogReactNative.podspec +30 -0
  2. package/LICENSE +21 -0
  3. package/README.md +330 -0
  4. package/android/build.gradle +99 -0
  5. package/android/src/main/AndroidManifest.xml +1 -0
  6. package/android/src/main/kotlin/io/billdog/reactnative/BillDogABTestModule.kt +317 -0
  7. package/android/src/main/kotlin/io/billdog/reactnative/BillDogAnalyticsModule.kt +389 -0
  8. package/android/src/main/kotlin/io/billdog/reactnative/BillDogModule.kt +817 -0
  9. package/android/src/main/kotlin/io/billdog/reactnative/BillDogPaywallViewManager.kt +383 -0
  10. package/android/src/main/kotlin/io/billdog/reactnative/BillDogSurveyModule.kt +427 -0
  11. package/android/src/main/kotlin/io/billdog/reactnative/BillDogVirtualCurrencyModule.kt +407 -0
  12. package/android/src/main/kotlin/io/billdog/virtualcurrency/BillDogVirtualCurrencyPackage.kt +44 -0
  13. package/dist/AdvancedPaywallCache.d.ts +70 -0
  14. package/dist/AdvancedPaywallCache.js +344 -0
  15. package/dist/BillDog.d.ts +255 -0
  16. package/dist/BillDog.js +918 -0
  17. package/dist/BillDogConfiguration.d.ts +145 -0
  18. package/dist/BillDogConfiguration.js +229 -0
  19. package/dist/ComponentRenderer.d.ts +17 -0
  20. package/dist/ComponentRenderer.js +886 -0
  21. package/dist/LayoutEngine.d.ts +101 -0
  22. package/dist/LayoutEngine.js +394 -0
  23. package/dist/LocalizationResolver.d.ts +99 -0
  24. package/dist/LocalizationResolver.js +266 -0
  25. package/dist/NativePaywallView.d.ts +36 -0
  26. package/dist/NativePaywallView.js +59 -0
  27. package/dist/PaywallCache.d.ts +74 -0
  28. package/dist/PaywallCache.js +293 -0
  29. package/dist/PaywallStateManager.d.ts +62 -0
  30. package/dist/PaywallStateManager.js +147 -0
  31. package/dist/PaywallView.d.ts +42 -0
  32. package/dist/PaywallView.js +275 -0
  33. package/dist/ProductVariableProvider.d.ts +60 -0
  34. package/dist/ProductVariableProvider.js +239 -0
  35. package/dist/VariableResolver.d.ts +120 -0
  36. package/dist/VariableResolver.js +379 -0
  37. package/dist/WebViewPaywall.d.ts +75 -0
  38. package/dist/WebViewPaywall.js +360 -0
  39. package/dist/animations/presets.d.ts +49 -0
  40. package/dist/animations/presets.js +367 -0
  41. package/dist/components/AccoladeCpsComponent.d.ts +13 -0
  42. package/dist/components/AccoladeCpsComponent.js +248 -0
  43. package/dist/components/AccordionComponent.d.ts +10 -0
  44. package/dist/components/AccordionComponent.js +187 -0
  45. package/dist/components/AnimatedWrapper.d.ts +35 -0
  46. package/dist/components/AnimatedWrapper.js +277 -0
  47. package/dist/components/CarouselComponent.d.ts +23 -0
  48. package/dist/components/CarouselComponent.js +484 -0
  49. package/dist/components/ChartCurveComponent.d.ts +13 -0
  50. package/dist/components/ChartCurveComponent.js +333 -0
  51. package/dist/components/CheckboxComponent.d.ts +9 -0
  52. package/dist/components/CheckboxComponent.js +172 -0
  53. package/dist/components/ConfettiComponent.d.ts +9 -0
  54. package/dist/components/ConfettiComponent.js +172 -0
  55. package/dist/components/CountdownComponent.d.ts +16 -0
  56. package/dist/components/CountdownComponent.js +414 -0
  57. package/dist/components/DelayedXComponent.d.ts +12 -0
  58. package/dist/components/DelayedXComponent.js +240 -0
  59. package/dist/components/DrawerModalComponent.d.ts +20 -0
  60. package/dist/components/DrawerModalComponent.js +286 -0
  61. package/dist/components/GradientView.d.ts +38 -0
  62. package/dist/components/GradientView.js +126 -0
  63. package/dist/components/HapticFeedbackComponent.d.ts +16 -0
  64. package/dist/components/HapticFeedbackComponent.js +64 -0
  65. package/dist/components/HorizontalProductsComponent.d.ts +17 -0
  66. package/dist/components/HorizontalProductsComponent.js +284 -0
  67. package/dist/components/MultiChoiceGridComponent.d.ts +13 -0
  68. package/dist/components/MultiChoiceGridComponent.js +234 -0
  69. package/dist/components/NPSScaleComponent.d.ts +16 -0
  70. package/dist/components/NPSScaleComponent.js +260 -0
  71. package/dist/components/NavigationComponent.d.ts +26 -0
  72. package/dist/components/NavigationComponent.js +302 -0
  73. package/dist/components/OAuthButtonComponent.d.ts +20 -0
  74. package/dist/components/OAuthButtonComponent.js +237 -0
  75. package/dist/components/ProgressLoaderComponent.d.ts +13 -0
  76. package/dist/components/ProgressLoaderComponent.js +308 -0
  77. package/dist/components/ProgressStepperComponent.d.ts +18 -0
  78. package/dist/components/ProgressStepperComponent.js +228 -0
  79. package/dist/components/SegmentedPickerComponent.d.ts +10 -0
  80. package/dist/components/SegmentedPickerComponent.js +221 -0
  81. package/dist/components/ShareButtonsComponent.d.ts +21 -0
  82. package/dist/components/ShareButtonsComponent.js +265 -0
  83. package/dist/components/ShareCodeComponent.d.ts +16 -0
  84. package/dist/components/ShareCodeComponent.js +274 -0
  85. package/dist/components/SingleChoiceGridComponent.d.ts +13 -0
  86. package/dist/components/SingleChoiceGridComponent.js +210 -0
  87. package/dist/components/SliderComponent.d.ts +9 -0
  88. package/dist/components/SliderComponent.js +263 -0
  89. package/dist/components/StarRatingInputComponent.d.ts +20 -0
  90. package/dist/components/StarRatingInputComponent.js +198 -0
  91. package/dist/components/StickerCompositeComponent.d.ts +13 -0
  92. package/dist/components/StickerCompositeComponent.js +136 -0
  93. package/dist/components/TabsComponent.d.ts +19 -0
  94. package/dist/components/TabsComponent.js +431 -0
  95. package/dist/components/TextInputComponent.d.ts +18 -0
  96. package/dist/components/TextInputComponent.js +227 -0
  97. package/dist/components/TimelineComponent.d.ts +19 -0
  98. package/dist/components/TimelineComponent.js +104 -0
  99. package/dist/components/ToggleComponent.d.ts +14 -0
  100. package/dist/components/ToggleComponent.js +132 -0
  101. package/dist/components/VerticalProductsComponent.d.ts +17 -0
  102. package/dist/components/VerticalProductsComponent.js +311 -0
  103. package/dist/dynamicValues.d.ts +36 -0
  104. package/dist/dynamicValues.js +142 -0
  105. package/dist/filters/dateFilters.d.ts +50 -0
  106. package/dist/filters/dateFilters.js +390 -0
  107. package/dist/filters/index.d.ts +18 -0
  108. package/dist/filters/index.js +253 -0
  109. package/dist/hooks/useOfferings.d.ts +76 -0
  110. package/dist/hooks/useOfferings.js +99 -0
  111. package/dist/hooks/usePaywall.d.ts +27 -0
  112. package/dist/hooks/usePaywall.js +114 -0
  113. package/dist/hooks/usePlacement.d.ts +34 -0
  114. package/dist/hooks/usePlacement.js +89 -0
  115. package/dist/hooks/useSubscription.d.ts +40 -0
  116. package/dist/hooks/useSubscription.js +97 -0
  117. package/dist/index.d.ts +98 -0
  118. package/dist/index.js +198 -0
  119. package/dist/models/BillDogError.d.ts +40 -0
  120. package/dist/models/BillDogError.js +11 -0
  121. package/dist/models/CacheFetchPolicy.d.ts +8 -0
  122. package/dist/models/CacheFetchPolicy.js +4 -0
  123. package/dist/models/CustomProduct.d.ts +32 -0
  124. package/dist/models/CustomProduct.js +15 -0
  125. package/dist/models/CustomerInfo.d.ts +17 -0
  126. package/dist/models/CustomerInfo.js +11 -0
  127. package/dist/models/Delegate.d.ts +20 -0
  128. package/dist/models/Delegate.js +11 -0
  129. package/dist/models/EntitlementInfo.d.ts +19 -0
  130. package/dist/models/EntitlementInfo.js +2 -0
  131. package/dist/models/Placement.d.ts +54 -0
  132. package/dist/models/Placement.js +15 -0
  133. package/dist/models/PurchaseParams.d.ts +39 -0
  134. package/dist/models/PurchaseParams.js +60 -0
  135. package/dist/models/PurchaseResult.d.ts +30 -0
  136. package/dist/models/PurchaseResult.js +15 -0
  137. package/dist/models/RestoreResult.d.ts +30 -0
  138. package/dist/models/RestoreResult.js +22 -0
  139. package/dist/models/RestoredItem.d.ts +26 -0
  140. package/dist/models/RestoredItem.js +13 -0
  141. package/dist/modules/ABTest.d.ts +65 -0
  142. package/dist/modules/ABTest.js +113 -0
  143. package/dist/modules/Analytics.d.ts +91 -0
  144. package/dist/modules/Analytics.js +182 -0
  145. package/dist/modules/Survey.d.ts +65 -0
  146. package/dist/modules/Survey.js +82 -0
  147. package/dist/modules/VirtualCurrency.d.ts +63 -0
  148. package/dist/modules/VirtualCurrency.js +147 -0
  149. package/dist/murmur.d.ts +23 -0
  150. package/dist/murmur.js +104 -0
  151. package/dist/notifications/LiveActivitiesManager.d.ts +47 -0
  152. package/dist/notifications/LiveActivitiesManager.js +106 -0
  153. package/dist/notifications/NotificationScheduler.d.ts +55 -0
  154. package/dist/notifications/NotificationScheduler.js +199 -0
  155. package/dist/notifications/PurchaseNotificationHandler.d.ts +24 -0
  156. package/dist/notifications/PurchaseNotificationHandler.js +55 -0
  157. package/dist/notifications/useDeviceToken.d.ts +36 -0
  158. package/dist/notifications/useDeviceToken.js +97 -0
  159. package/dist/notifications/useLiveActivity.d.ts +39 -0
  160. package/dist/notifications/useLiveActivity.js +104 -0
  161. package/dist/review/ReviewAnalytics.d.ts +34 -0
  162. package/dist/review/ReviewAnalytics.js +73 -0
  163. package/dist/review/ReviewManager.d.ts +83 -0
  164. package/dist/review/ReviewManager.js +339 -0
  165. package/dist/review/ReviewTimingManager.d.ts +82 -0
  166. package/dist/review/ReviewTimingManager.js +224 -0
  167. package/dist/survey-core/types.d.ts +215 -0
  168. package/dist/survey-core/types.js +8 -0
  169. package/dist/types.d.ts +438 -0
  170. package/dist/types.js +158 -0
  171. package/dist/utils/ApiClient.d.ts +65 -0
  172. package/dist/utils/ApiClient.js +132 -0
  173. package/dist/utils/CSSConverter.d.ts +49 -0
  174. package/dist/utils/CSSConverter.js +470 -0
  175. package/dist/utils/animations.d.ts +41 -0
  176. package/dist/utils/animations.js +194 -0
  177. package/dist/utils/calendarIntegration.d.ts +36 -0
  178. package/dist/utils/calendarIntegration.js +89 -0
  179. package/dist/utils/configurationResolver.d.ts +23 -0
  180. package/dist/utils/configurationResolver.js +78 -0
  181. package/dist/utils/deviceDetection.d.ts +38 -0
  182. package/dist/utils/deviceDetection.js +59 -0
  183. package/dist/utils/hapticFeedback.d.ts +17 -0
  184. package/dist/utils/hapticFeedback.js +53 -0
  185. package/dist/utils/iconMapper.d.ts +26 -0
  186. package/dist/utils/iconMapper.js +113 -0
  187. package/dist/utils/notificationPermissions.d.ts +13 -0
  188. package/dist/utils/notificationPermissions.js +51 -0
  189. package/dist/utils/priceFormatting.d.ts +19 -0
  190. package/dist/utils/priceFormatting.js +99 -0
  191. package/dist/utils/shareSheet.d.ts +17 -0
  192. package/dist/utils/shareSheet.js +42 -0
  193. package/dist/utils/subscriptionUpgrade.d.ts +84 -0
  194. package/dist/utils/subscriptionUpgrade.js +100 -0
  195. package/dist/valueUtils.d.ts +48 -0
  196. package/dist/valueUtils.js +129 -0
  197. package/dist/xFlowTags.d.ts +18 -0
  198. package/dist/xFlowTags.js +385 -0
  199. package/ios/BillDogABTest.m +50 -0
  200. package/ios/BillDogABTest.swift +188 -0
  201. package/ios/BillDogAnalytics.m +105 -0
  202. package/ios/BillDogAnalytics.swift +324 -0
  203. package/ios/BillDogBridge.m +222 -0
  204. package/ios/BillDogBridge.swift +715 -0
  205. package/ios/BillDogLiveActivities.m +41 -0
  206. package/ios/BillDogLiveActivities.swift +104 -0
  207. package/ios/BillDogPaywallViewManager.m +39 -0
  208. package/ios/BillDogPaywallViewManager.swift +361 -0
  209. package/ios/BillDogSurvey.m +34 -0
  210. package/ios/BillDogSurvey.swift +257 -0
  211. package/ios/BillDogVirtualCurrencyBridge.m +63 -0
  212. package/ios/BillDogVirtualCurrencyBridge.swift +511 -0
  213. package/junit.xml +25 -0
  214. package/package.json +61 -0
  215. package/react-native.config.js +13 -0
  216. package/src/AdvancedPaywallCache.ts +433 -0
  217. package/src/BillDog.ts +983 -0
  218. package/src/BillDogConfiguration.ts +318 -0
  219. package/src/ComponentRenderer.tsx +1325 -0
  220. package/src/LayoutEngine.ts +459 -0
  221. package/src/LocalizationResolver.ts +311 -0
  222. package/src/NativePaywallView.tsx +132 -0
  223. package/src/PaywallCache.ts +358 -0
  224. package/src/PaywallStateManager.ts +154 -0
  225. package/src/PaywallView.tsx +328 -0
  226. package/src/ProductVariableProvider.ts +282 -0
  227. package/src/VariableResolver.ts +516 -0
  228. package/src/WebViewPaywall.tsx +454 -0
  229. package/src/animations/presets.ts +421 -0
  230. package/src/components/AccoladeCpsComponent.tsx +259 -0
  231. package/src/components/AccordionComponent.tsx +213 -0
  232. package/src/components/AnimatedWrapper.tsx +316 -0
  233. package/src/components/CarouselComponent.tsx +615 -0
  234. package/src/components/ChartCurveComponent.tsx +452 -0
  235. package/src/components/CheckboxComponent.tsx +185 -0
  236. package/src/components/ConfettiComponent.tsx +178 -0
  237. package/src/components/CountdownComponent.tsx +454 -0
  238. package/src/components/DelayedXComponent.tsx +266 -0
  239. package/src/components/DrawerModalComponent.tsx +324 -0
  240. package/src/components/GradientView.tsx +129 -0
  241. package/src/components/HapticFeedbackComponent.tsx +39 -0
  242. package/src/components/HorizontalProductsComponent.tsx +329 -0
  243. package/src/components/MultiChoiceGridComponent.tsx +265 -0
  244. package/src/components/NPSScaleComponent.tsx +294 -0
  245. package/src/components/NavigationComponent.tsx +329 -0
  246. package/src/components/OAuthButtonComponent.tsx +266 -0
  247. package/src/components/ProgressLoaderComponent.tsx +366 -0
  248. package/src/components/ProgressStepperComponent.tsx +250 -0
  249. package/src/components/SegmentedPickerComponent.tsx +245 -0
  250. package/src/components/ShareButtonsComponent.tsx +299 -0
  251. package/src/components/ShareCodeComponent.tsx +303 -0
  252. package/src/components/SingleChoiceGridComponent.tsx +229 -0
  253. package/src/components/SliderComponent.tsx +280 -0
  254. package/src/components/StarRatingInputComponent.tsx +223 -0
  255. package/src/components/StickerCompositeComponent.tsx +168 -0
  256. package/src/components/TabsComponent.tsx +496 -0
  257. package/src/components/TextInputComponent.tsx +258 -0
  258. package/src/components/TimelineComponent.tsx +129 -0
  259. package/src/components/ToggleComponent.tsx +142 -0
  260. package/src/components/VerticalProductsComponent.tsx +357 -0
  261. package/src/dynamicValues.ts +180 -0
  262. package/src/filters/dateFilters.ts +411 -0
  263. package/src/filters/index.ts +281 -0
  264. package/src/hooks/useOfferings.ts +192 -0
  265. package/src/hooks/usePaywall.ts +154 -0
  266. package/src/hooks/usePlacement.ts +143 -0
  267. package/src/hooks/useSubscription.ts +154 -0
  268. package/src/index.ts +245 -0
  269. package/src/models/BillDogError.ts +24 -0
  270. package/src/models/CacheFetchPolicy.ts +13 -0
  271. package/src/models/CustomProduct.ts +33 -0
  272. package/src/models/CustomerInfo.ts +26 -0
  273. package/src/models/Delegate.ts +22 -0
  274. package/src/models/EntitlementInfo.ts +27 -0
  275. package/src/models/Placement.ts +50 -0
  276. package/src/models/PurchaseParams.ts +81 -0
  277. package/src/models/PurchaseResult.ts +32 -0
  278. package/src/models/RestoreResult.ts +27 -0
  279. package/src/models/RestoredItem.ts +25 -0
  280. package/src/modules/ABTest.ts +131 -0
  281. package/src/modules/Analytics.ts +227 -0
  282. package/src/modules/Survey.ts +126 -0
  283. package/src/modules/VirtualCurrency.ts +223 -0
  284. package/src/murmur.ts +102 -0
  285. package/src/notifications/LiveActivitiesManager.ts +140 -0
  286. package/src/notifications/NotificationScheduler.ts +292 -0
  287. package/src/notifications/PurchaseNotificationHandler.ts +67 -0
  288. package/src/notifications/useDeviceToken.ts +116 -0
  289. package/src/notifications/useLiveActivity.ts +125 -0
  290. package/src/review/ReviewAnalytics.ts +89 -0
  291. package/src/review/ReviewManager.ts +355 -0
  292. package/src/review/ReviewTimingManager.ts +265 -0
  293. package/src/survey-core/types.ts +244 -0
  294. package/src/types/ambient.d.ts +9 -0
  295. package/src/types.ts +680 -0
  296. package/src/utils/ApiClient.ts +163 -0
  297. package/src/utils/CSSConverter.ts +552 -0
  298. package/src/utils/animations.ts +232 -0
  299. package/src/utils/calendarIntegration.ts +113 -0
  300. package/src/utils/configurationResolver.ts +106 -0
  301. package/src/utils/deviceDetection.ts +83 -0
  302. package/src/utils/hapticFeedback.ts +55 -0
  303. package/src/utils/iconMapper.ts +102 -0
  304. package/src/utils/notificationPermissions.ts +48 -0
  305. package/src/utils/priceFormatting.ts +119 -0
  306. package/src/utils/shareSheet.ts +55 -0
  307. package/src/utils/subscriptionUpgrade.ts +183 -0
  308. package/src/valueUtils.ts +108 -0
  309. package/src/xFlowTags.ts +463 -0
@@ -0,0 +1,333 @@
1
+ "use strict";
2
+ /**
3
+ * ChartCurveComponent - Native React Native implementation
4
+ * Supports 6 curve types: ascending, descending, dip, rise, flat-end, s-curve
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || (function () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.ChartCurveComponent = void 0;
41
+ const react_1 = __importStar(require("react"));
42
+ const react_native_1 = require("react-native");
43
+ const react_native_svg_1 = __importStar(require("react-native-svg"));
44
+ // Curve path definitions (relative to viewBox 0 0 100 100)
45
+ const CURVE_PATHS = {
46
+ ascending: 'M 0 80 Q 25 75, 50 50 T 100 10',
47
+ descending: 'M 0 10 Q 25 25, 50 50 T 100 80',
48
+ dip: 'M 0 30 Q 25 70, 50 80 T 100 30',
49
+ rise: 'M 0 70 Q 25 30, 50 20 T 100 70',
50
+ 'flat-end': 'M 0 80 Q 30 40, 60 25 T 100 25',
51
+ 's-curve': 'M 0 80 C 25 80, 35 20, 50 20 S 75 80, 100 20',
52
+ };
53
+ // Helper to extract color from fill value
54
+ const getColorFromFill = (fill, fallback) => {
55
+ var _a;
56
+ if (!fill)
57
+ return fallback;
58
+ if (typeof fill === 'string')
59
+ return fill;
60
+ if (typeof fill === 'object') {
61
+ if (fill.type === 'solid' && fill.color)
62
+ return fill.color;
63
+ if (fill.type === 'gradient' && ((_a = fill.stops) === null || _a === void 0 ? void 0 : _a.length) > 0) {
64
+ return fill.stops[0].color || fallback;
65
+ }
66
+ if (fill.color)
67
+ return fill.color;
68
+ }
69
+ return fallback;
70
+ };
71
+ // Helper to extract gradient stops
72
+ const getGradientStops = (fill) => {
73
+ var _a;
74
+ if (!fill || typeof fill !== 'object')
75
+ return null;
76
+ if (fill.type === 'gradient' && ((_a = fill.stops) === null || _a === void 0 ? void 0 : _a.length) > 0) {
77
+ return fill.stops.map((stop) => {
78
+ var _a;
79
+ return ({
80
+ color: stop.color || '#3B82F6',
81
+ offset: ((_a = stop.position) !== null && _a !== void 0 ? _a : 0) / 100,
82
+ });
83
+ });
84
+ }
85
+ return null;
86
+ };
87
+ // Generate date labels based on date range
88
+ const generateDateLabels = (startDate, endDate, unit, count = 5) => {
89
+ const labels = [];
90
+ if (!startDate || !endDate) {
91
+ // Generate placeholder labels
92
+ for (let i = 0; i < count; i++) {
93
+ labels.push(`Day ${i + 1}`);
94
+ }
95
+ return labels;
96
+ }
97
+ const start = new Date(startDate);
98
+ const end = new Date(endDate);
99
+ const diff = end.getTime() - start.getTime();
100
+ for (let i = 0; i < count; i++) {
101
+ const date = new Date(start.getTime() + (diff * i) / (count - 1));
102
+ switch (unit) {
103
+ case 'day':
104
+ labels.push(date.toLocaleDateString('en-US', { month: 'short', day: 'numeric' }));
105
+ break;
106
+ case 'week':
107
+ labels.push(`W${Math.ceil(date.getDate() / 7)}`);
108
+ break;
109
+ case 'month':
110
+ labels.push(date.toLocaleDateString('en-US', { month: 'short' }));
111
+ break;
112
+ case 'year':
113
+ labels.push(date.getFullYear().toString());
114
+ break;
115
+ default:
116
+ labels.push(date.toLocaleDateString('en-US', { month: 'short', day: 'numeric' }));
117
+ }
118
+ }
119
+ return labels;
120
+ };
121
+ const ChartCurveComponent = ({ component, stateManager, isPreviewMode = false, }) => {
122
+ var _a, _b, _c, _d, _e, _f, _g, _h;
123
+ const props = component.properties;
124
+ // Curve configuration
125
+ const curveType = props.curveType || 'ascending';
126
+ const curvePath = CURVE_PATHS[curveType] || CURVE_PATHS.ascending;
127
+ // Badge configuration
128
+ const showLeftBadge = props.showLeftBadge !== false;
129
+ const showRightBadge = props.showRightBadge !== false;
130
+ const leftBadgeText = props.leftBadgeText || 'Start';
131
+ const rightBadgeText = props.rightBadgeText || 'End';
132
+ const badgeFill = getColorFromFill(props.badgeFill, '#EFF6FF');
133
+ const badgeTextFill = getColorFromFill(props.badgeTextFill, '#1E40AF');
134
+ const badgeBorderRadius = (_a = props.badgeBorderRadius) !== null && _a !== void 0 ? _a : 4;
135
+ const badgeFontSize = (_b = props.badgeFontSize) !== null && _b !== void 0 ? _b : 10;
136
+ // Line styling
137
+ const lineStroke = getColorFromFill(props.lineStroke, '#3B82F6');
138
+ const lineStrokeGradient = getGradientStops(props.lineStroke);
139
+ const lineWidth = (_c = props.lineWidth) !== null && _c !== void 0 ? _c : 2;
140
+ // Area configuration
141
+ const showArea = (_d = props.showArea) !== null && _d !== void 0 ? _d : true;
142
+ const areaFill = getColorFromFill(props.areaFill, '#3B82F6');
143
+ const areaFillGradient = getGradientStops(props.areaFill);
144
+ // Dots configuration
145
+ const showDots = (_e = props.showDots) !== null && _e !== void 0 ? _e : false;
146
+ const dotSize = (_f = props.dotSize) !== null && _f !== void 0 ? _f : 4;
147
+ const dotFill = getColorFromFill(props.dotFill, '#3B82F6');
148
+ // Animation configuration
149
+ const animated = props.animated !== false;
150
+ const animationDuration = (_g = props.animationDuration) !== null && _g !== void 0 ? _g : 1000;
151
+ // Grid/axis configuration
152
+ const showGrid = (_h = props.showGrid) !== null && _h !== void 0 ? _h : false;
153
+ const showXAxis = props.showXAxis !== false;
154
+ const gridColor = getColorFromFill(props.gridColor, '#E5E7EB');
155
+ const axisColor = getColorFromFill(props.axisColor, '#9CA3AF');
156
+ // X-axis label configuration
157
+ const xLabelMode = props.xLabelMode || 'none';
158
+ const dateRange = props.dateRange || {};
159
+ const dateUnit = props.dateUnit || 'day';
160
+ const customLabels = props.customLabels || [];
161
+ // Get X-axis labels
162
+ const getXLabels = () => {
163
+ switch (xLabelMode) {
164
+ case 'date-range':
165
+ return generateDateLabels(dateRange.start, dateRange.end, dateUnit);
166
+ case 'custom':
167
+ return customLabels.length > 0 ? customLabels : ['', '', '', '', ''];
168
+ default:
169
+ return [];
170
+ }
171
+ };
172
+ const xLabels = getXLabels();
173
+ // Animation
174
+ const animatedProgress = (0, react_1.useRef)(new react_native_1.Animated.Value(0)).current;
175
+ (0, react_1.useEffect)(() => {
176
+ if (animated) {
177
+ animatedProgress.setValue(0);
178
+ react_native_1.Animated.timing(animatedProgress, {
179
+ toValue: 1,
180
+ duration: animationDuration,
181
+ easing: react_native_1.Easing.out(react_native_1.Easing.quad),
182
+ useNativeDriver: false,
183
+ }).start();
184
+ }
185
+ else {
186
+ animatedProgress.setValue(1);
187
+ }
188
+ }, [animated, animationDuration, animatedProgress]);
189
+ // Get curve endpoint positions for badges
190
+ const getCurveEndpoints = (curveType) => {
191
+ switch (curveType) {
192
+ case 'ascending':
193
+ return { left: { x: 0, y: 80 }, right: { x: 100, y: 10 } };
194
+ case 'descending':
195
+ return { left: { x: 0, y: 10 }, right: { x: 100, y: 80 } };
196
+ case 'dip':
197
+ return { left: { x: 0, y: 30 }, right: { x: 100, y: 30 } };
198
+ case 'rise':
199
+ return { left: { x: 0, y: 70 }, right: { x: 100, y: 70 } };
200
+ case 'flat-end':
201
+ return { left: { x: 0, y: 80 }, right: { x: 100, y: 25 } };
202
+ case 's-curve':
203
+ return { left: { x: 0, y: 80 }, right: { x: 100, y: 20 } };
204
+ default:
205
+ return { left: { x: 0, y: 80 }, right: { x: 100, y: 10 } };
206
+ }
207
+ };
208
+ const endpoints = getCurveEndpoints(curveType);
209
+ // Create area path (curve + bottom closing)
210
+ const getAreaPath = () => {
211
+ return `${curvePath} L 100 100 L 0 100 Z`;
212
+ };
213
+ // Calculate dot positions along the curve
214
+ const getDotPositions = () => {
215
+ // Simplified: place dots at key points
216
+ const positions = [];
217
+ const points = 5;
218
+ for (let i = 0; i < points; i++) {
219
+ const t = i / (points - 1);
220
+ const x = t * 100;
221
+ // Approximate y based on curve type
222
+ let y;
223
+ switch (curveType) {
224
+ case 'ascending':
225
+ y = 80 - (70 * t);
226
+ break;
227
+ case 'descending':
228
+ y = 10 + (70 * t);
229
+ break;
230
+ case 'dip':
231
+ y = 30 + 50 * Math.sin(Math.PI * t);
232
+ break;
233
+ case 'rise':
234
+ y = 70 - 50 * Math.sin(Math.PI * t);
235
+ break;
236
+ case 'flat-end':
237
+ y = 80 - 55 * Math.min(1, t * 1.5);
238
+ break;
239
+ case 's-curve':
240
+ y = t < 0.5 ? 80 - 60 * (2 * t) : 20 + 60 * (2 * t - 1) - 60;
241
+ break;
242
+ default:
243
+ y = 50;
244
+ }
245
+ positions.push({ x, y: Math.max(10, Math.min(90, y)) });
246
+ }
247
+ return positions;
248
+ };
249
+ const dotPositions = showDots ? getDotPositions() : [];
250
+ return (<react_native_1.View style={styles.container}>
251
+ <react_native_1.View style={styles.chartContainer}>
252
+ <react_native_svg_1.default width="100%" height="100%" viewBox="0 0 100 100" preserveAspectRatio="none">
253
+ <react_native_svg_1.Defs>
254
+ {/* Line gradient */}
255
+ {lineStrokeGradient && (<react_native_svg_1.LinearGradient id="lineGradient" x1="0%" y1="0%" x2="100%" y2="0%">
256
+ {lineStrokeGradient.map((stop, index) => (<react_native_svg_1.Stop key={index} offset={`${stop.offset * 100}%`} stopColor={stop.color}/>))}
257
+ </react_native_svg_1.LinearGradient>)}
258
+
259
+ {/* Area gradient */}
260
+ <react_native_svg_1.LinearGradient id="areaGradient" x1="0%" y1="0%" x2="0%" y2="100%">
261
+ {areaFillGradient ? (areaFillGradient.map((stop, index) => (<react_native_svg_1.Stop key={index} offset={`${stop.offset * 100}%`} stopColor={stop.color} stopOpacity={0.3}/>))) : ([
262
+ <react_native_svg_1.Stop key="area-start" offset="0%" stopColor={areaFill} stopOpacity={0.3}/>,
263
+ <react_native_svg_1.Stop key="area-end" offset="100%" stopColor={areaFill} stopOpacity={0.05}/>,
264
+ ])}
265
+ </react_native_svg_1.LinearGradient>
266
+ </react_native_svg_1.Defs>
267
+
268
+ {/* Grid lines */}
269
+ {showGrid && (<react_native_svg_1.G>
270
+ {[20, 40, 60, 80].map((y) => (<react_native_svg_1.Line key={`h-${y}`} x1="0" y1={y} x2="100" y2={y} stroke={gridColor} strokeWidth={0.5} strokeDasharray="2,2"/>))}
271
+ {[20, 40, 60, 80].map((x) => (<react_native_svg_1.Line key={`v-${x}`} x1={x} y1="0" x2={x} y2="100" stroke={gridColor} strokeWidth={0.5} strokeDasharray="2,2"/>))}
272
+ </react_native_svg_1.G>)}
273
+
274
+ {/* Area fill */}
275
+ {showArea && (<react_native_svg_1.Path d={getAreaPath()} fill="url(#areaGradient)"/>)}
276
+
277
+ {/* Curve line */}
278
+ <react_native_svg_1.Path d={curvePath} stroke={lineStrokeGradient ? 'url(#lineGradient)' : lineStroke} strokeWidth={lineWidth} fill="none" strokeLinecap="round" strokeLinejoin="round"/>
279
+
280
+ {/* Data points */}
281
+ {showDots && dotPositions.map((pos, index) => (<react_native_svg_1.Circle key={index} cx={pos.x} cy={pos.y} r={dotSize / 2} fill={dotFill}/>))}
282
+
283
+ {/* X-axis line */}
284
+ {showXAxis && (<react_native_svg_1.Line x1="0" y1="100" x2="100" y2="100" stroke={axisColor} strokeWidth={1}/>)}
285
+
286
+ {/* Left badge */}
287
+ {showLeftBadge && (<react_native_svg_1.G>
288
+ <react_native_svg_1.Rect x={endpoints.left.x} y={endpoints.left.y - 8} width={30} height={16} rx={badgeBorderRadius} fill={badgeFill}/>
289
+ <react_native_svg_1.Text x={endpoints.left.x + 15} y={endpoints.left.y + 1} fontSize={badgeFontSize} fill={badgeTextFill} textAnchor="middle" alignmentBaseline="middle">
290
+ {leftBadgeText}
291
+ </react_native_svg_1.Text>
292
+ </react_native_svg_1.G>)}
293
+
294
+ {/* Right badge */}
295
+ {showRightBadge && (<react_native_svg_1.G>
296
+ <react_native_svg_1.Rect x={endpoints.right.x - 30} y={endpoints.right.y - 8} width={30} height={16} rx={badgeBorderRadius} fill={badgeFill}/>
297
+ <react_native_svg_1.Text x={endpoints.right.x - 15} y={endpoints.right.y + 1} fontSize={badgeFontSize} fill={badgeTextFill} textAnchor="middle" alignmentBaseline="middle">
298
+ {rightBadgeText}
299
+ </react_native_svg_1.Text>
300
+ </react_native_svg_1.G>)}
301
+ </react_native_svg_1.default>
302
+ </react_native_1.View>
303
+
304
+ {/* X-axis labels */}
305
+ {xLabelMode !== 'none' && xLabels.length > 0 && (<react_native_1.View style={styles.xAxisLabels}>
306
+ {xLabels.map((label, index) => (<react_native_1.Text key={index} style={[styles.xAxisLabel, { color: axisColor }]}>
307
+ {label}
308
+ </react_native_1.Text>))}
309
+ </react_native_1.View>)}
310
+ </react_native_1.View>);
311
+ };
312
+ exports.ChartCurveComponent = ChartCurveComponent;
313
+ const styles = react_native_1.StyleSheet.create({
314
+ container: {
315
+ width: '100%',
316
+ aspectRatio: 2,
317
+ },
318
+ chartContainer: {
319
+ flex: 1,
320
+ paddingTop: 16,
321
+ paddingBottom: 8,
322
+ },
323
+ xAxisLabels: {
324
+ flexDirection: 'row',
325
+ justifyContent: 'space-between',
326
+ paddingHorizontal: 4,
327
+ marginTop: 4,
328
+ },
329
+ xAxisLabel: {
330
+ fontSize: 10,
331
+ textAlign: 'center',
332
+ },
333
+ });
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ import { PaywallComponent } from '../types';
3
+ interface CheckboxComponentProps {
4
+ component: PaywallComponent;
5
+ stateManager?: any;
6
+ isPreviewMode?: boolean;
7
+ }
8
+ export declare const CheckboxComponent: React.FC<CheckboxComponentProps>;
9
+ export {};
@@ -0,0 +1,172 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.CheckboxComponent = void 0;
37
+ const react_1 = __importStar(require("react"));
38
+ const react_native_1 = require("react-native");
39
+ // Size mappings matching web schema
40
+ const SIZE_MAP = {
41
+ sm: 20,
42
+ md: 24,
43
+ lg: 32,
44
+ };
45
+ // Check icon mappings
46
+ const CHECK_ICONS = {
47
+ check: '✓',
48
+ cross: '✕',
49
+ circle: '●',
50
+ };
51
+ const CheckboxComponent = ({ component, stateManager, isPreviewMode = false, }) => {
52
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
53
+ const props = component.properties;
54
+ const defaultChecked = (_a = props.defaultValue) !== null && _a !== void 0 ? _a : false;
55
+ const disabled = (_b = props.disabled) !== null && _b !== void 0 ? _b : false;
56
+ const label = props.label;
57
+ const variant = (_c = props.variant) !== null && _c !== void 0 ? _c : 'default';
58
+ const checkIcon = (_d = props.checkIcon) !== null && _d !== void 0 ? _d : 'check';
59
+ const labelPosition = (_e = props.labelPosition) !== null && _e !== void 0 ? _e : 'right';
60
+ // Size handling - support both select values (sm/md/lg) and numeric values
61
+ const sizeValue = (_f = props.size) !== null && _f !== void 0 ? _f : 'md';
62
+ const size = typeof sizeValue === 'number'
63
+ ? sizeValue
64
+ : ((_g = SIZE_MAP[sizeValue]) !== null && _g !== void 0 ? _g : SIZE_MAP.md);
65
+ const checkColor = (_h = props.checkColor) !== null && _h !== void 0 ? _h : '#FFFFFF';
66
+ const uncheckedColor = (_j = props.uncheckedColor) !== null && _j !== void 0 ? _j : '#d1d5db';
67
+ const checkedBackgroundColor = (_k = props.checkedBackgroundColor) !== null && _k !== void 0 ? _k : '#007AFF';
68
+ const [isChecked, setIsChecked] = (0, react_1.useState)(defaultChecked);
69
+ // Register initial state
70
+ (0, react_1.useEffect)(() => {
71
+ if (stateManager) {
72
+ stateManager.updateState(`element:${component.id}.isChecked`, isChecked);
73
+ }
74
+ }, []);
75
+ // Subscribe to external state changes
76
+ (0, react_1.useEffect)(() => {
77
+ if (stateManager) {
78
+ return stateManager.subscribeToState(`element:${component.id}.isChecked`, (value) => {
79
+ if (value !== isChecked) {
80
+ setIsChecked(value);
81
+ }
82
+ });
83
+ }
84
+ }, [component.id, stateManager]);
85
+ const handleToggle = () => {
86
+ if (!disabled) {
87
+ const newValue = !isChecked;
88
+ setIsChecked(newValue);
89
+ if (stateManager) {
90
+ stateManager.updateState(`element:${component.id}.isChecked`, newValue);
91
+ }
92
+ }
93
+ };
94
+ // Get variant-specific styling
95
+ const getCheckboxStyle = () => {
96
+ const baseStyle = {
97
+ width: size,
98
+ height: size,
99
+ borderRadius: variant === 'outlined' ? size / 2 : 4,
100
+ };
101
+ switch (variant) {
102
+ case 'filled':
103
+ return {
104
+ ...baseStyle,
105
+ borderColor: isChecked ? checkedBackgroundColor : uncheckedColor,
106
+ backgroundColor: isChecked ? checkedBackgroundColor : uncheckedColor,
107
+ borderWidth: 0,
108
+ };
109
+ case 'outlined':
110
+ return {
111
+ ...baseStyle,
112
+ borderColor: isChecked ? checkedBackgroundColor : uncheckedColor,
113
+ backgroundColor: isChecked ? checkedBackgroundColor : 'transparent',
114
+ borderWidth: 2,
115
+ };
116
+ default: // 'default'
117
+ return {
118
+ ...baseStyle,
119
+ borderColor: isChecked ? checkedBackgroundColor : uncheckedColor,
120
+ backgroundColor: isChecked ? checkedBackgroundColor : 'transparent',
121
+ borderWidth: 2,
122
+ };
123
+ }
124
+ };
125
+ const checkIconChar = (_l = CHECK_ICONS[checkIcon]) !== null && _l !== void 0 ? _l : CHECK_ICONS.check;
126
+ const renderCheckbox = () => (<react_native_1.View style={[styles.checkbox, getCheckboxStyle()]}>
127
+ {isChecked && (<react_native_1.Text style={[styles.checkmark, { fontSize: size * 0.6, color: checkColor }]}>
128
+ {checkIconChar}
129
+ </react_native_1.Text>)}
130
+ </react_native_1.View>);
131
+ const renderLabel = () => (label ? (<react_native_1.Text style={[
132
+ styles.label,
133
+ disabled && styles.disabledText,
134
+ labelPosition === 'left' ? styles.labelLeft : styles.labelRight
135
+ ]}>
136
+ {label}
137
+ </react_native_1.Text>) : null);
138
+ return (<react_native_1.TouchableOpacity onPress={handleToggle} disabled={disabled} activeOpacity={0.7} style={[styles.container, disabled && styles.disabled]}>
139
+ {labelPosition === 'left' && renderLabel()}
140
+ {renderCheckbox()}
141
+ {labelPosition === 'right' && renderLabel()}
142
+ </react_native_1.TouchableOpacity>);
143
+ };
144
+ exports.CheckboxComponent = CheckboxComponent;
145
+ const styles = react_native_1.StyleSheet.create({
146
+ container: {
147
+ flexDirection: 'row',
148
+ alignItems: 'center',
149
+ },
150
+ disabled: {
151
+ opacity: 0.5,
152
+ },
153
+ checkbox: {
154
+ alignItems: 'center',
155
+ justifyContent: 'center',
156
+ },
157
+ checkmark: {
158
+ fontWeight: 'bold',
159
+ },
160
+ label: {
161
+ fontSize: 16,
162
+ },
163
+ labelLeft: {
164
+ marginRight: 12,
165
+ },
166
+ labelRight: {
167
+ marginLeft: 12,
168
+ },
169
+ disabledText: {
170
+ color: '#999',
171
+ },
172
+ });
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ import { PaywallComponent } from '../types';
3
+ interface ConfettiComponentProps {
4
+ component: PaywallComponent;
5
+ stateManager?: any;
6
+ isPreviewMode?: boolean;
7
+ }
8
+ export declare const ConfettiComponent: React.FC<ConfettiComponentProps>;
9
+ export {};