@hayanmind/monetai-react-native 0.3.0 → 0.4.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.
Files changed (134) hide show
  1. package/lib/commonjs/MonetaiProvider.js +45 -23
  2. package/lib/commonjs/MonetaiProvider.js.map +1 -1
  3. package/lib/commonjs/PaywallManager.js +63 -0
  4. package/lib/commonjs/PaywallManager.js.map +1 -0
  5. package/lib/commonjs/components/Banner.js +141 -0
  6. package/lib/commonjs/components/Banner.js.map +1 -0
  7. package/lib/commonjs/components/Paywall.js +236 -0
  8. package/lib/commonjs/components/Paywall.js.map +1 -0
  9. package/lib/commonjs/components/paywall-wrappers/CompactPaywallWrapper.js +61 -0
  10. package/lib/commonjs/components/paywall-wrappers/CompactPaywallWrapper.js.map +1 -0
  11. package/lib/commonjs/components/paywall-wrappers/HighlightBenefitsPaywallWrapper.js +33 -0
  12. package/lib/commonjs/components/paywall-wrappers/HighlightBenefitsPaywallWrapper.js.map +1 -0
  13. package/lib/commonjs/components/paywall-wrappers/KeyFeatureSummaryPaywallWrapper.js +33 -0
  14. package/lib/commonjs/components/paywall-wrappers/KeyFeatureSummaryPaywallWrapper.js.map +1 -0
  15. package/lib/commonjs/components/paywall-wrappers/TextFocusedPaywallWrapper.js +33 -0
  16. package/lib/commonjs/components/paywall-wrappers/TextFocusedPaywallWrapper.js.map +1 -0
  17. package/lib/commonjs/components/paywall-wrappers/index.js +41 -0
  18. package/lib/commonjs/components/paywall-wrappers/index.js.map +1 -0
  19. package/lib/commonjs/constants/paywall.js +11 -0
  20. package/lib/commonjs/constants/paywall.js.map +1 -0
  21. package/lib/commonjs/hooks/useBanner.js +84 -0
  22. package/lib/commonjs/hooks/useBanner.js.map +1 -0
  23. package/lib/commonjs/hooks/useInterval.js +34 -0
  24. package/lib/commonjs/hooks/useInterval.js.map +1 -0
  25. package/lib/commonjs/hooks/usePaywall.js +60 -0
  26. package/lib/commonjs/hooks/usePaywall.js.map +1 -0
  27. package/lib/commonjs/index.js +54 -1
  28. package/lib/commonjs/index.js.map +1 -1
  29. package/lib/commonjs/lib.js +2 -2
  30. package/lib/module/MonetaiProvider.js +48 -25
  31. package/lib/module/MonetaiProvider.js.map +1 -1
  32. package/lib/module/PaywallManager.js +58 -0
  33. package/lib/module/PaywallManager.js.map +1 -0
  34. package/lib/module/components/Banner.js +136 -0
  35. package/lib/module/components/Banner.js.map +1 -0
  36. package/lib/module/components/Paywall.js +230 -0
  37. package/lib/module/components/Paywall.js.map +1 -0
  38. package/lib/module/components/paywall-wrappers/CompactPaywallWrapper.js +55 -0
  39. package/lib/module/components/paywall-wrappers/CompactPaywallWrapper.js.map +1 -0
  40. package/lib/module/components/paywall-wrappers/HighlightBenefitsPaywallWrapper.js +27 -0
  41. package/lib/module/components/paywall-wrappers/HighlightBenefitsPaywallWrapper.js.map +1 -0
  42. package/lib/module/components/paywall-wrappers/KeyFeatureSummaryPaywallWrapper.js +27 -0
  43. package/lib/module/components/paywall-wrappers/KeyFeatureSummaryPaywallWrapper.js.map +1 -0
  44. package/lib/module/components/paywall-wrappers/TextFocusedPaywallWrapper.js +27 -0
  45. package/lib/module/components/paywall-wrappers/TextFocusedPaywallWrapper.js.map +1 -0
  46. package/lib/module/components/paywall-wrappers/index.js +11 -0
  47. package/lib/module/components/paywall-wrappers/index.js.map +1 -0
  48. package/lib/module/constants/paywall.js +7 -0
  49. package/lib/module/constants/paywall.js.map +1 -0
  50. package/lib/module/hooks/useBanner.js +79 -0
  51. package/lib/module/hooks/useBanner.js.map +1 -0
  52. package/lib/module/hooks/useInterval.js +30 -0
  53. package/lib/module/hooks/useInterval.js.map +1 -0
  54. package/lib/module/hooks/usePaywall.js +55 -0
  55. package/lib/module/hooks/usePaywall.js.map +1 -0
  56. package/lib/module/index.js +8 -1
  57. package/lib/module/index.js.map +1 -1
  58. package/lib/module/lib.js +2 -2
  59. package/lib/typescript/commonjs/src/MonetaiProvider.d.ts +3 -7
  60. package/lib/typescript/commonjs/src/MonetaiProvider.d.ts.map +1 -1
  61. package/lib/typescript/commonjs/src/PaywallManager.d.ts +7 -0
  62. package/lib/typescript/commonjs/src/PaywallManager.d.ts.map +1 -0
  63. package/lib/typescript/commonjs/src/components/Banner.d.ts +10 -0
  64. package/lib/typescript/commonjs/src/components/Banner.d.ts.map +1 -0
  65. package/lib/typescript/commonjs/src/components/Paywall.d.ts +14 -0
  66. package/lib/typescript/commonjs/src/components/Paywall.d.ts.map +1 -0
  67. package/lib/typescript/commonjs/src/components/paywall-wrappers/CompactPaywallWrapper.d.ts +8 -0
  68. package/lib/typescript/commonjs/src/components/paywall-wrappers/CompactPaywallWrapper.d.ts.map +1 -0
  69. package/lib/typescript/commonjs/src/components/paywall-wrappers/HighlightBenefitsPaywallWrapper.d.ts +8 -0
  70. package/lib/typescript/commonjs/src/components/paywall-wrappers/HighlightBenefitsPaywallWrapper.d.ts.map +1 -0
  71. package/lib/typescript/commonjs/src/components/paywall-wrappers/KeyFeatureSummaryPaywallWrapper.d.ts +8 -0
  72. package/lib/typescript/commonjs/src/components/paywall-wrappers/KeyFeatureSummaryPaywallWrapper.d.ts.map +1 -0
  73. package/lib/typescript/commonjs/src/components/paywall-wrappers/TextFocusedPaywallWrapper.d.ts +8 -0
  74. package/lib/typescript/commonjs/src/components/paywall-wrappers/TextFocusedPaywallWrapper.d.ts.map +1 -0
  75. package/lib/typescript/commonjs/src/components/paywall-wrappers/index.d.ts +6 -0
  76. package/lib/typescript/commonjs/src/components/paywall-wrappers/index.d.ts.map +1 -0
  77. package/lib/typescript/commonjs/src/constants/paywall.d.ts +3 -0
  78. package/lib/typescript/commonjs/src/constants/paywall.d.ts.map +1 -0
  79. package/lib/typescript/commonjs/src/hooks/useBanner.d.ts +14 -0
  80. package/lib/typescript/commonjs/src/hooks/useBanner.d.ts.map +1 -0
  81. package/lib/typescript/commonjs/src/hooks/useInterval.d.ts +7 -0
  82. package/lib/typescript/commonjs/src/hooks/useInterval.d.ts.map +1 -0
  83. package/lib/typescript/commonjs/src/hooks/usePaywall.d.ts +15 -0
  84. package/lib/typescript/commonjs/src/hooks/usePaywall.d.ts.map +1 -0
  85. package/lib/typescript/commonjs/src/index.d.ts +7 -1
  86. package/lib/typescript/commonjs/src/index.d.ts.map +1 -1
  87. package/lib/typescript/commonjs/src/types.d.ts +48 -2
  88. package/lib/typescript/commonjs/src/types.d.ts.map +1 -1
  89. package/lib/typescript/module/src/MonetaiProvider.d.ts +3 -7
  90. package/lib/typescript/module/src/MonetaiProvider.d.ts.map +1 -1
  91. package/lib/typescript/module/src/PaywallManager.d.ts +7 -0
  92. package/lib/typescript/module/src/PaywallManager.d.ts.map +1 -0
  93. package/lib/typescript/module/src/components/Banner.d.ts +10 -0
  94. package/lib/typescript/module/src/components/Banner.d.ts.map +1 -0
  95. package/lib/typescript/module/src/components/Paywall.d.ts +14 -0
  96. package/lib/typescript/module/src/components/Paywall.d.ts.map +1 -0
  97. package/lib/typescript/module/src/components/paywall-wrappers/CompactPaywallWrapper.d.ts +8 -0
  98. package/lib/typescript/module/src/components/paywall-wrappers/CompactPaywallWrapper.d.ts.map +1 -0
  99. package/lib/typescript/module/src/components/paywall-wrappers/HighlightBenefitsPaywallWrapper.d.ts +8 -0
  100. package/lib/typescript/module/src/components/paywall-wrappers/HighlightBenefitsPaywallWrapper.d.ts.map +1 -0
  101. package/lib/typescript/module/src/components/paywall-wrappers/KeyFeatureSummaryPaywallWrapper.d.ts +8 -0
  102. package/lib/typescript/module/src/components/paywall-wrappers/KeyFeatureSummaryPaywallWrapper.d.ts.map +1 -0
  103. package/lib/typescript/module/src/components/paywall-wrappers/TextFocusedPaywallWrapper.d.ts +8 -0
  104. package/lib/typescript/module/src/components/paywall-wrappers/TextFocusedPaywallWrapper.d.ts.map +1 -0
  105. package/lib/typescript/module/src/components/paywall-wrappers/index.d.ts +6 -0
  106. package/lib/typescript/module/src/components/paywall-wrappers/index.d.ts.map +1 -0
  107. package/lib/typescript/module/src/constants/paywall.d.ts +3 -0
  108. package/lib/typescript/module/src/constants/paywall.d.ts.map +1 -0
  109. package/lib/typescript/module/src/hooks/useBanner.d.ts +14 -0
  110. package/lib/typescript/module/src/hooks/useBanner.d.ts.map +1 -0
  111. package/lib/typescript/module/src/hooks/useInterval.d.ts +7 -0
  112. package/lib/typescript/module/src/hooks/useInterval.d.ts.map +1 -0
  113. package/lib/typescript/module/src/hooks/usePaywall.d.ts +15 -0
  114. package/lib/typescript/module/src/hooks/usePaywall.d.ts.map +1 -0
  115. package/lib/typescript/module/src/index.d.ts +7 -1
  116. package/lib/typescript/module/src/index.d.ts.map +1 -1
  117. package/lib/typescript/module/src/types.d.ts +48 -2
  118. package/lib/typescript/module/src/types.d.ts.map +1 -1
  119. package/package.json +4 -2
  120. package/src/MonetaiProvider.tsx +72 -29
  121. package/src/PaywallManager.tsx +61 -0
  122. package/src/components/Banner.tsx +152 -0
  123. package/src/components/Paywall.tsx +254 -0
  124. package/src/components/paywall-wrappers/CompactPaywallWrapper.tsx +58 -0
  125. package/src/components/paywall-wrappers/HighlightBenefitsPaywallWrapper.tsx +30 -0
  126. package/src/components/paywall-wrappers/KeyFeatureSummaryPaywallWrapper.tsx +30 -0
  127. package/src/components/paywall-wrappers/TextFocusedPaywallWrapper.tsx +30 -0
  128. package/src/components/paywall-wrappers/index.ts +8 -0
  129. package/src/constants/paywall.ts +4 -0
  130. package/src/hooks/useBanner.ts +112 -0
  131. package/src/hooks/useInterval.ts +29 -0
  132. package/src/hooks/usePaywall.ts +73 -0
  133. package/src/index.tsx +36 -1
  134. package/src/types.ts +65 -2
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+
3
+ // Base URLs for webview components
4
+ export const PAYWELL_BASE_URL = 'https://dashboard.monetai.io/webview';
5
+ // WebView user agent
6
+ export const WEBVIEW_USER_AGENT = 'MonetaiSDK';
7
+ //# sourceMappingURL=paywall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["PAYWELL_BASE_URL","WEBVIEW_USER_AGENT"],"sourceRoot":"../../../src","sources":["constants/paywall.ts"],"mappings":";;AAAA;AACA,OAAO,MAAMA,gBAAgB,GAAG,sCAAsC;AACtE;AACA,OAAO,MAAMC,kBAAkB,GAAG,YAAY","ignoreList":[]}
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+
3
+ import { useState, useEffect, useCallback } from 'react';
4
+ import dayjs from 'dayjs';
5
+ import isBetween from 'dayjs/plugin/isBetween';
6
+ import { useInterval } from "./useInterval.js";
7
+
8
+ // dayjs 플러그인 확장
9
+ dayjs.extend(isBetween);
10
+ export const useBanner = ({
11
+ paywallConfig,
12
+ // PaywallConfig로 변경
13
+ discountInfo
14
+ }) => {
15
+ const [bannerVisible, setBannerVisible] = useState(false);
16
+ const [bannerParams, setBannerParams] = useState(null); // 데이터 준비 시 보관
17
+
18
+ // 할인 활성 상태 체크 함수
19
+ const checkDiscountActive = useCallback(() => {
20
+ if (bannerParams == null || bannerParams.enabled === false || bannerParams.isSubscriber === true || discountInfo == null) {
21
+ return false;
22
+ }
23
+ const now = dayjs();
24
+ return now.isBetween(dayjs(discountInfo.startedAt), dayjs(discountInfo.endedAt), null, '[]');
25
+ }, [discountInfo, bannerParams]);
26
+ const closeBanner = useCallback(() => {
27
+ setBannerVisible(false);
28
+ }, []);
29
+ const openBanner = useCallback(() => {
30
+ if (!bannerParams) {
31
+ console.error('[MonetaiSDK] useBanner: Cannot open banner - bannerParams is null (data not ready)');
32
+ return;
33
+ }
34
+ if (checkDiscountActive()) {
35
+ setBannerVisible(true);
36
+ }
37
+ }, [bannerParams, checkDiscountActive]);
38
+ useEffect(() => {
39
+ if (!paywallConfig || !discountInfo) {
40
+ setBannerParams(null);
41
+ return;
42
+ }
43
+ const baseZIndex = paywallConfig.bannerZIndex ?? 1000;
44
+ const baseElevation = paywallConfig.bannerElevation ?? 8;
45
+ const computed = {
46
+ enabled: paywallConfig.enabled,
47
+ isSubscriber: paywallConfig.isSubscriber,
48
+ locale: paywallConfig.locale,
49
+ discountPercent: paywallConfig.discountPercent,
50
+ bottom: paywallConfig.bannerBottom,
51
+ style: paywallConfig.style,
52
+ endedAt: discountInfo.endedAt,
53
+ zIndex: baseZIndex,
54
+ elevation: baseElevation
55
+ };
56
+ setBannerParams(computed);
57
+ }, [paywallConfig, discountInfo]);
58
+ useEffect(() => {
59
+ const isActive = checkDiscountActive();
60
+ if (isActive) {
61
+ setBannerVisible(true);
62
+ } else {
63
+ setBannerVisible(false);
64
+ }
65
+ }, [checkDiscountActive]);
66
+ useInterval(() => {
67
+ const isActive = checkDiscountActive();
68
+ if (!isActive) {
69
+ setBannerVisible(false);
70
+ }
71
+ }, bannerVisible ? 1000 : null);
72
+ return {
73
+ bannerVisible,
74
+ openBanner,
75
+ closeBanner,
76
+ bannerParams // state로 관리되는 bannerParams 반환
77
+ };
78
+ };
79
+ //# sourceMappingURL=useBanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useState","useEffect","useCallback","dayjs","isBetween","useInterval","extend","useBanner","paywallConfig","discountInfo","bannerVisible","setBannerVisible","bannerParams","setBannerParams","checkDiscountActive","enabled","isSubscriber","now","startedAt","endedAt","closeBanner","openBanner","console","error","baseZIndex","bannerZIndex","baseElevation","bannerElevation","computed","locale","discountPercent","bottom","bannerBottom","style","zIndex","elevation","isActive"],"sourceRoot":"../../../src","sources":["hooks/useBanner.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+
3
+ import { useEffect, useRef } from 'react';
4
+
5
+ /**
6
+ * Custom hook for setting up an interval that can be paused/resumed
7
+ * @param callback Function to call on each interval
8
+ * @param delay Delay in milliseconds, null to pause
9
+ */
10
+ export const useInterval = (callback, delay) => {
11
+ const savedCallback = useRef(() => {});
12
+
13
+ // Remember the latest callback
14
+ useEffect(() => {
15
+ savedCallback.current = callback;
16
+ }, [callback]);
17
+
18
+ // Set up the interval
19
+ useEffect(() => {
20
+ // Don't schedule if no delay is specified
21
+ if (delay === null) {
22
+ return;
23
+ }
24
+ const id = setInterval(() => {
25
+ savedCallback.current?.();
26
+ }, delay);
27
+ return () => clearInterval(id);
28
+ }, [delay]);
29
+ };
30
+ //# sourceMappingURL=useInterval.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useEffect","useRef","useInterval","callback","delay","savedCallback","current","id","setInterval","clearInterval"],"sourceRoot":"../../../src","sources":["hooks/useInterval.ts"],"mappings":";;AAAA,SAASA,SAAS,EAAEC,MAAM,QAAQ,OAAO;;AAEzC;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,WAAW,GAAGA,CAACC,QAAoB,EAAEC,KAAoB,KAAK;EACzE,MAAMC,aAAa,GAAGJ,MAAM,CAAa,MAAM,CAAC,CAAC,CAAC;;EAElD;EACAD,SAAS,CAAC,MAAM;IACdK,aAAa,CAACC,OAAO,GAAGH,QAAQ;EAClC,CAAC,EAAE,CAACA,QAAQ,CAAC,CAAC;;EAEd;EACAH,SAAS,CAAC,MAAM;IACd;IACA,IAAII,KAAK,KAAK,IAAI,EAAE;MAClB;IACF;IAEA,MAAMG,EAAE,GAAGC,WAAW,CAAC,MAAM;MAC3BH,aAAa,CAACC,OAAO,GAAG,CAAC;IAC3B,CAAC,EAAEF,KAAK,CAAC;IAET,OAAO,MAAMK,aAAa,CAACF,EAAE,CAAC;EAChC,CAAC,EAAE,CAACH,KAAK,CAAC,CAAC;AACb,CAAC","ignoreList":[]}
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+
3
+ import { useState, useCallback, useEffect } from 'react';
4
+ export const usePaywall = ({
5
+ paywallConfig,
6
+ // 타입 변경
7
+ discountInfo,
8
+ // discountInfo 추가
9
+ onClose
10
+ }) => {
11
+ const [paywallVisible, setPaywallVisible] = useState(false);
12
+ const [paywallParams, setPaywallParams] = useState(null);
13
+ useEffect(() => {
14
+ if (!discountInfo || !paywallConfig) {
15
+ setPaywallParams(null);
16
+ return;
17
+ }
18
+ const paywallZ = paywallConfig.paywallZIndex ?? 2000;
19
+ const paywallElevation = paywallConfig.paywallElevation ?? 16;
20
+ const computedParams = {
21
+ discountPercent: paywallConfig.discountPercent.toString(),
22
+ endedAt: discountInfo.endedAt.toISOString(),
23
+ regularPrice: paywallConfig.regularPrice,
24
+ discountedPrice: paywallConfig.discountedPrice,
25
+ locale: paywallConfig.locale,
26
+ features: paywallConfig.features,
27
+ style: paywallConfig.style,
28
+ zIndex: paywallZ,
29
+ elevation: paywallElevation
30
+ };
31
+ setPaywallParams(computedParams);
32
+ }, [discountInfo, paywallConfig]);
33
+
34
+ // 페이월 열기
35
+ const openPaywall = useCallback(() => {
36
+ if (!paywallParams) {
37
+ console.error('[MonetaiSDK] usePaywall: Cannot open paywall - paywallParams is null (data not ready)');
38
+ return;
39
+ }
40
+ setPaywallVisible(true);
41
+ }, [paywallParams]);
42
+
43
+ // 페이월 닫기
44
+ const closePaywall = useCallback(() => {
45
+ setPaywallVisible(false);
46
+ onClose?.();
47
+ }, [onClose]);
48
+ return {
49
+ paywallVisible,
50
+ paywallParams,
51
+ openPaywall,
52
+ closePaywall
53
+ };
54
+ };
55
+ //# sourceMappingURL=usePaywall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useState","useCallback","useEffect","usePaywall","paywallConfig","discountInfo","onClose","paywallVisible","setPaywallVisible","paywallParams","setPaywallParams","paywallZ","paywallZIndex","paywallElevation","computedParams","discountPercent","toString","endedAt","toISOString","regularPrice","discountedPrice","locale","features","style","zIndex","elevation","openPaywall","console","error","closePaywall"],"sourceRoot":"../../../src","sources":["hooks/usePaywall.ts"],"mappings":";;AAAA,SAASA,QAAQ,EAAEC,WAAW,EAAEC,SAAS,QAAQ,OAAO;AAgBxD,OAAO,MAAMC,UAAU,GAAGA,CAAC;EACzBC,aAAa;EAAE;EACfC,YAAY;EAAE;EACdC;AACe,CAAC,KAAuB;EACvC,MAAM,CAACC,cAAc,EAAEC,iBAAiB,CAAC,GAAGR,QAAQ,CAAC,KAAK,CAAC;EAC3D,MAAM,CAACS,aAAa,EAAEC,gBAAgB,CAAC,GAAGV,QAAQ,CAChD,IACF,CAAC;EAEDE,SAAS,CAAC,MAAM;IACd,IAAI,CAACG,YAAY,IAAI,CAACD,aAAa,EAAE;MACnCM,gBAAgB,CAAC,IAAI,CAAC;MACtB;IACF;IAEA,MAAMC,QAAQ,GAAGP,aAAa,CAACQ,aAAa,IAAI,IAAI;IACpD,MAAMC,gBAAgB,GAAGT,aAAa,CAACS,gBAAgB,IAAI,EAAE;IAC7D,MAAMC,cAA6B,GAAG;MACpCC,eAAe,EAAEX,aAAa,CAACW,eAAe,CAACC,QAAQ,CAAC,CAAC;MACzDC,OAAO,EAAEZ,YAAY,CAACY,OAAO,CAACC,WAAW,CAAC,CAAC;MAC3CC,YAAY,EAAEf,aAAa,CAACe,YAAY;MACxCC,eAAe,EAAEhB,aAAa,CAACgB,eAAe;MAC9CC,MAAM,EAAEjB,aAAa,CAACiB,MAAM;MAC5BC,QAAQ,EAAElB,aAAa,CAACkB,QAAQ;MAChCC,KAAK,EAAEnB,aAAa,CAACmB,KAAK;MAC1BC,MAAM,EAAEb,QAAQ;MAChBc,SAAS,EAAEZ;IACb,CAAC;IAEDH,gBAAgB,CAACI,cAAc,CAAC;EAClC,CAAC,EAAE,CAACT,YAAY,EAAED,aAAa,CAAC,CAAC;;EAEjC;EACA,MAAMsB,WAAW,GAAGzB,WAAW,CAAC,MAAM;IACpC,IAAI,CAACQ,aAAa,EAAE;MAClBkB,OAAO,CAACC,KAAK,CACX,uFACF,CAAC;MACD;IACF;IACApB,iBAAiB,CAAC,IAAI,CAAC;EACzB,CAAC,EAAE,CAACC,aAAa,CAAC,CAAC;;EAEnB;EACA,MAAMoB,YAAY,GAAG5B,WAAW,CAAC,MAAM;IACrCO,iBAAiB,CAAC,KAAK,CAAC;IACxBF,OAAO,GAAG,CAAC;EACb,CAAC,EAAE,CAACA,OAAO,CAAC,CAAC;EAEb,OAAO;IACLC,cAAc;IACdE,aAAa;IACbiB,WAAW;IACXG;EACF,CAAC;AACH,CAAC","ignoreList":[]}
@@ -2,6 +2,13 @@
2
2
 
3
3
  import MonetaiSDK from "./MonetaiSDK.js";
4
4
  import MonetaiProvider from "./MonetaiProvider.js";
5
+ import Banner from "./components/Banner.js";
6
+ import Paywall from "./components/Paywall.js";
7
+ import { CompactPaywallWrapper, HighlightBenefitsPaywallWrapper, KeyFeatureSummaryPaywallWrapper, TextFocusedPaywallWrapper } from "./components/paywall-wrappers/index.js";
8
+ import { useBanner } from "./hooks/useBanner.js";
9
+ import { usePaywall } from "./hooks/usePaywall.js";
5
10
  export default MonetaiSDK;
6
- export { MonetaiProvider };
11
+ export { MonetaiProvider, Banner, Paywall, useBanner, usePaywall, CompactPaywallWrapper, HighlightBenefitsPaywallWrapper, KeyFeatureSummaryPaywallWrapper, TextFocusedPaywallWrapper };
12
+
13
+ // Export types
7
14
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["MonetaiSDK","MonetaiProvider"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA,OAAOA,UAAU,MAAM,iBAAc;AACrC,OAAOC,eAAe,MAAM,sBAAmB;AAE/C,eAAeD,UAAU;AACzB,SAASC,eAAe","ignoreList":[]}
1
+ {"version":3,"names":["MonetaiSDK","MonetaiProvider","Banner","Paywall","CompactPaywallWrapper","HighlightBenefitsPaywallWrapper","KeyFeatureSummaryPaywallWrapper","TextFocusedPaywallWrapper","useBanner","usePaywall"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA,OAAOA,UAAU,MAAM,iBAAc;AACrC,OAAOC,eAAe,MAAM,sBAAmB;AAC/C,OAAOC,MAAM,MAAM,wBAAqB;AACxC,OAAOC,OAAO,MAAM,yBAAsB;AAC1C,SACEC,qBAAqB,EACrBC,+BAA+B,EAC/BC,+BAA+B,EAC/BC,yBAAyB,QACpB,wCAA+B;AACtC,SAASC,SAAS,QAAQ,sBAAmB;AAC7C,SAASC,UAAU,QAAQ,uBAAoB;AAE/C,eAAeT,UAAU;AACzB,SACEC,eAAe,EACfC,MAAM,EACNC,OAAO,EACPK,SAAS,EACTC,UAAU,EACVL,qBAAqB,EACrBC,+BAA+B,EAC/BC,+BAA+B,EAC/BC,yBAAyB;;AAG3B","ignoreList":[]}
package/lib/module/lib.js CHANGED
@@ -2,8 +2,8 @@
2
2
 
3
3
  export function getSDKVersion() {
4
4
  // __SDK_VERSION__이 정의되어 있으면 해당 값을 사용
5
- if (typeof "0.3.0" === 'string') {
6
- return "0.3.0";
5
+ if (typeof "0.4.0" === 'string') {
6
+ return "0.4.0";
7
7
  }
8
8
 
9
9
  // 그렇지 않으면, package.json을 lazy하게 불러와 version을 반환
@@ -1,18 +1,14 @@
1
1
  import { type ReactNode } from 'react';
2
- import type { DiscountInfo } from './types';
2
+ import type { DiscountInfo, PaywallConfig } from './types';
3
3
  type MonetaiProviderProps = {
4
- banner?: {
5
- title: string;
6
- discountTitle: string;
7
- onPress: () => void;
8
- };
9
4
  children: ReactNode;
10
5
  onDiscountInfoChange?: (discountInfo: DiscountInfo | null) => void;
6
+ paywallConfig?: PaywallConfig;
11
7
  };
12
8
  /**
13
9
  * 클라이언트 측에서 이 컴포넌트로 전체 앱을 감싸주면,
14
10
  * SDK 초기화 + Event Emitter 구독 + 배너 렌더링을 한곳에서 처리할 수 있음
15
11
  */
16
- export default function MonetaiProvider({ children, onDiscountInfoChange, }: MonetaiProviderProps): import("react/jsx-runtime").JSX.Element;
12
+ export default function MonetaiProvider({ children, onDiscountInfoChange, paywallConfig, }: MonetaiProviderProps): import("react/jsx-runtime").JSX.Element;
17
13
  export {};
18
14
  //# sourceMappingURL=MonetaiProvider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MonetaiProvider.d.ts","sourceRoot":"","sources":["../../../../src/MonetaiProvider.tsx"],"names":[],"mappings":"AACA,OAAO,EAAuB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAG5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAO5C,KAAK,oBAAoB,GAAG;IAC1B,MAAM,CAAC,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,aAAa,EAAE,MAAM,CAAC;QACtB,OAAO,EAAE,MAAM,IAAI,CAAC;KACrB,CAAC;IACF,QAAQ,EAAE,SAAS,CAAC;IACpB,oBAAoB,CAAC,EAAE,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI,KAAK,IAAI,CAAC;CACpE,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,EACtC,QAAQ,EACR,oBAAoB,GACrB,EAAE,oBAAoB,2CAkDtB"}
1
+ {"version":3,"file":"MonetaiProvider.d.ts","sourceRoot":"","sources":["../../../../src/MonetaiProvider.tsx"],"names":[],"mappings":"AACA,OAAO,EAKL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAGf,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAa3D,KAAK,oBAAoB,GAAG;IAC1B,QAAQ,EAAE,SAAS,CAAC;IACpB,oBAAoB,CAAC,EAAE,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI,KAAK,IAAI,CAAC;IACnE,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,EACtC,QAAQ,EACR,oBAAoB,EACpB,aAAa,GACd,EAAE,oBAAoB,2CAoFtB"}
@@ -0,0 +1,7 @@
1
+ import type { DiscountInfo, PaywallConfig } from './types';
2
+ declare const PaywallManager: ({ paywallConfig, discountInfo, }: {
3
+ paywallConfig: PaywallConfig;
4
+ discountInfo: DiscountInfo | null;
5
+ }) => import("react/jsx-runtime").JSX.Element;
6
+ export default PaywallManager;
7
+ //# sourceMappingURL=PaywallManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PaywallManager.d.ts","sourceRoot":"","sources":["../../../../src/PaywallManager.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE3D,QAAA,MAAM,cAAc,GAAI,kCAGrB;IACD,aAAa,EAAE,aAAa,CAAC;IAC7B,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;CACnC,4CA8CA,CAAC;AAEF,eAAe,cAAc,CAAC"}
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+ import type { BannerParams } from '../types';
3
+ export interface BannerProps {
4
+ visible: boolean;
5
+ onPaywall: () => void;
6
+ bannerParams: BannerParams;
7
+ }
8
+ declare const Banner: React.FC<BannerProps>;
9
+ export default Banner;
10
+ //# sourceMappingURL=Banner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Banner.d.ts","sourceRoot":"","sources":["../../../../../src/components/Banner.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAGxC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAK7C,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,YAAY,EAAE,YAAY,CAAC;CAC5B;AAED,QAAA,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,WAAW,CA6EjC,CAAC;AA4DF,eAAe,MAAM,CAAC"}
@@ -0,0 +1,14 @@
1
+ import React from 'react';
2
+ import type { PaywallParams } from '../types';
3
+ interface PaywallProps {
4
+ visible: boolean;
5
+ preload?: boolean;
6
+ onClose: () => void;
7
+ onPurchase: () => void;
8
+ onTermsOfService?: () => void;
9
+ onPrivacyPolicy?: () => void;
10
+ params: PaywallParams;
11
+ }
12
+ declare const Paywall: React.FC<PaywallProps>;
13
+ export default Paywall;
14
+ //# sourceMappingURL=Paywall.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Paywall.d.ts","sourceRoot":"","sources":["../../../../../src/components/Paywall.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AASxC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAY9C,UAAU,YAAY;IACpB,OAAO,EAAE,OAAO,CAAC;IAEjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IAC7B,MAAM,EAAE,aAAa,CAAC;CACvB;AAED,QAAA,MAAM,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CA6JnC,CAAC;AAgEF,eAAe,OAAO,CAAC"}
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ interface CompactPaywallWrapperProps {
3
+ onClose: () => void;
4
+ children: React.ReactNode;
5
+ }
6
+ export declare const CompactPaywallWrapper: React.FC<CompactPaywallWrapperProps>;
7
+ export default CompactPaywallWrapper;
8
+ //# sourceMappingURL=CompactPaywallWrapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CompactPaywallWrapper.d.ts","sourceRoot":"","sources":["../../../../../../src/components/paywall-wrappers/CompactPaywallWrapper.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,UAAU,0BAA0B;IAClC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAGD,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,EAAE,CAAC,0BAA0B,CAiBtE,CAAC;AA+BF,eAAe,qBAAqB,CAAC"}
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ interface HighlightBenefitsPaywallWrapperProps {
3
+ onClose: () => void;
4
+ children: React.ReactNode;
5
+ }
6
+ export declare const HighlightBenefitsPaywallWrapper: React.FC<HighlightBenefitsPaywallWrapperProps>;
7
+ export default HighlightBenefitsPaywallWrapper;
8
+ //# sourceMappingURL=HighlightBenefitsPaywallWrapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HighlightBenefitsPaywallWrapper.d.ts","sourceRoot":"","sources":["../../../../../../src/components/paywall-wrappers/HighlightBenefitsPaywallWrapper.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,UAAU,oCAAoC;IAC5C,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAGD,eAAO,MAAM,+BAA+B,EAAE,KAAK,CAAC,EAAE,CACpD,oCAAoC,CAKrC,CAAC;AAcF,eAAe,+BAA+B,CAAC"}
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ interface KeyFeatureSummaryPaywallWrapperProps {
3
+ onClose: () => void;
4
+ children: React.ReactNode;
5
+ }
6
+ export declare const KeyFeatureSummaryPaywallWrapper: React.FC<KeyFeatureSummaryPaywallWrapperProps>;
7
+ export default KeyFeatureSummaryPaywallWrapper;
8
+ //# sourceMappingURL=KeyFeatureSummaryPaywallWrapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KeyFeatureSummaryPaywallWrapper.d.ts","sourceRoot":"","sources":["../../../../../../src/components/paywall-wrappers/KeyFeatureSummaryPaywallWrapper.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,UAAU,oCAAoC;IAC5C,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAGD,eAAO,MAAM,+BAA+B,EAAE,KAAK,CAAC,EAAE,CACpD,oCAAoC,CAKrC,CAAC;AAcF,eAAe,+BAA+B,CAAC"}
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ interface TextFocusedPaywallWrapperProps {
3
+ onClose: () => void;
4
+ children: React.ReactNode;
5
+ }
6
+ export declare const TextFocusedPaywallWrapper: React.FC<TextFocusedPaywallWrapperProps>;
7
+ export default TextFocusedPaywallWrapper;
8
+ //# sourceMappingURL=TextFocusedPaywallWrapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TextFocusedPaywallWrapper.d.ts","sourceRoot":"","sources":["../../../../../../src/components/paywall-wrappers/TextFocusedPaywallWrapper.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,UAAU,8BAA8B;IACtC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAGD,eAAO,MAAM,yBAAyB,EAAE,KAAK,CAAC,EAAE,CAC9C,8BAA8B,CAK/B,CAAC;AAcF,eAAe,yBAAyB,CAAC"}
@@ -0,0 +1,6 @@
1
+ export { default as CompactPaywallWrapper } from './CompactPaywallWrapper';
2
+ export { default as HighlightBenefitsPaywallWrapper } from './HighlightBenefitsPaywallWrapper';
3
+ export { default as KeyFeatureSummaryPaywallWrapper } from './KeyFeatureSummaryPaywallWrapper';
4
+ export { default as TextFocusedPaywallWrapper } from './TextFocusedPaywallWrapper';
5
+ export { default } from './CompactPaywallWrapper';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/components/paywall-wrappers/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAE,OAAO,IAAI,+BAA+B,EAAE,MAAM,mCAAmC,CAAC;AAC/F,OAAO,EAAE,OAAO,IAAI,+BAA+B,EAAE,MAAM,mCAAmC,CAAC;AAC/F,OAAO,EAAE,OAAO,IAAI,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAGnF,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare const PAYWELL_BASE_URL = "https://dashboard.monetai.io/webview";
2
+ export declare const WEBVIEW_USER_AGENT = "MonetaiSDK";
3
+ //# sourceMappingURL=paywall.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paywall.d.ts","sourceRoot":"","sources":["../../../../../src/constants/paywall.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,gBAAgB,yCAAyC,CAAC;AAEvE,eAAO,MAAM,kBAAkB,eAAe,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { BannerParams, DiscountInfo, PaywallConfig } from '../types';
2
+ interface UseBannerProps {
3
+ paywallConfig?: PaywallConfig;
4
+ discountInfo: DiscountInfo | null;
5
+ }
6
+ interface UseBannerReturn {
7
+ bannerVisible: boolean;
8
+ openBanner: () => void;
9
+ closeBanner: () => void;
10
+ bannerParams: BannerParams | null;
11
+ }
12
+ export declare const useBanner: ({ paywallConfig, discountInfo, }: UseBannerProps) => UseBannerReturn;
13
+ export {};
14
+ //# sourceMappingURL=useBanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useBanner.d.ts","sourceRoot":"","sources":["../../../../../src/hooks/useBanner.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAM1E,UAAU,cAAc;IACtB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;CACnC;AAED,UAAU,eAAe;IACvB,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;CACnC;AAED,eAAO,MAAM,SAAS,GAAI,kCAGvB,cAAc,KAAG,eAuFnB,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Custom hook for setting up an interval that can be paused/resumed
3
+ * @param callback Function to call on each interval
4
+ * @param delay Delay in milliseconds, null to pause
5
+ */
6
+ export declare const useInterval: (callback: () => void, delay: number | null) => void;
7
+ //# sourceMappingURL=useInterval.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useInterval.d.ts","sourceRoot":"","sources":["../../../../../src/hooks/useInterval.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,eAAO,MAAM,WAAW,GAAI,UAAU,MAAM,IAAI,EAAE,OAAO,MAAM,GAAG,IAAI,SAqBrE,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { PaywallParams, PaywallConfig, DiscountInfo } from '../types';
2
+ interface UsePaywallProps {
3
+ paywallConfig?: PaywallConfig;
4
+ discountInfo: DiscountInfo | null;
5
+ onClose?: () => void;
6
+ }
7
+ interface UsePaywallReturn {
8
+ paywallVisible: boolean;
9
+ paywallParams: PaywallParams | null;
10
+ openPaywall: () => void;
11
+ closePaywall: () => void;
12
+ }
13
+ export declare const usePaywall: ({ paywallConfig, discountInfo, onClose, }: UsePaywallProps) => UsePaywallReturn;
14
+ export {};
15
+ //# sourceMappingURL=usePaywall.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePaywall.d.ts","sourceRoot":"","sources":["../../../../../src/hooks/usePaywall.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE3E,UAAU,eAAe;IACvB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;IAClC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,UAAU,gBAAgB;IACxB,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,aAAa,GAAG,IAAI,CAAC;IACpC,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,YAAY,EAAE,MAAM,IAAI,CAAC;CAC1B;AAED,eAAO,MAAM,UAAU,GAAI,2CAIxB,eAAe,KAAG,gBAoDpB,CAAC"}
@@ -1,5 +1,11 @@
1
1
  import MonetaiSDK from './MonetaiSDK';
2
2
  import MonetaiProvider from './MonetaiProvider';
3
+ import Banner from './components/Banner';
4
+ import Paywall from './components/Paywall';
5
+ import { CompactPaywallWrapper, HighlightBenefitsPaywallWrapper, KeyFeatureSummaryPaywallWrapper, TextFocusedPaywallWrapper } from './components/paywall-wrappers';
6
+ import { useBanner } from './hooks/useBanner';
7
+ import { usePaywall } from './hooks/usePaywall';
3
8
  export default MonetaiSDK;
4
- export { MonetaiProvider };
9
+ export { MonetaiProvider, Banner, Paywall, useBanner, usePaywall, CompactPaywallWrapper, HighlightBenefitsPaywallWrapper, KeyFeatureSummaryPaywallWrapper, TextFocusedPaywallWrapper, };
10
+ export type { ABTestGroup, PredictResult, EventParams, LogEventOptions, DiscountInfo, AppUserDiscountResponse, PaywallConfig, Feature, BannerParams, PaywallParams, PaywallStyle, } from './types';
5
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAEhD,eAAe,UAAU,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,MAAM,MAAM,qBAAqB,CAAC;AACzC,OAAO,OAAO,MAAM,sBAAsB,CAAC;AAC3C,OAAO,EACL,qBAAqB,EACrB,+BAA+B,EAC/B,+BAA+B,EAC/B,yBAAyB,EAC1B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,eAAe,UAAU,CAAC;AAC1B,OAAO,EACL,eAAe,EACf,MAAM,EACN,OAAO,EACP,SAAS,EACT,UAAU,EACV,qBAAqB,EACrB,+BAA+B,EAC/B,+BAA+B,EAC/B,yBAAyB,GAC1B,CAAC;AAGF,YAAY,EACV,WAAW,EACX,aAAa,EACb,WAAW,EACX,eAAe,EACf,YAAY,EACZ,uBAAuB,EACvB,aAAa,EACb,OAAO,EACP,YAAY,EACZ,aAAa,EACb,YAAY,GACb,MAAM,SAAS,CAAC"}
@@ -1,5 +1,11 @@
1
1
  export type ABTestGroup = 'baseline' | 'monetai' | 'unknown';
2
2
  export type PredictResult = 'non-purchaser' | 'purchaser' | null;
3
+ export type PaywallStyle = 'compact' | 'highlight-benefits' | 'key-feature-summary' | 'text-focused';
4
+ export interface Feature {
5
+ title: string;
6
+ description: string;
7
+ isPremiumOnly?: boolean;
8
+ }
3
9
  export interface EventParams {
4
10
  [key: string]: any;
5
11
  }
@@ -15,10 +21,50 @@ export interface DiscountInfo {
15
21
  }
16
22
  export interface AppUserDiscountResponse {
17
23
  id: number;
18
- started_at: Date;
19
- ended_at: Date;
24
+ started_at: string;
25
+ ended_at: string;
20
26
  app_user_id: string;
21
27
  sdk_key: string;
22
28
  created_at: Date;
23
29
  }
30
+ export interface PaywallConfig {
31
+ enabled: boolean;
32
+ isSubscriber: boolean;
33
+ locale: string;
34
+ discountPercent: number;
35
+ style: PaywallStyle;
36
+ bannerBottom?: number;
37
+ bannerZIndex?: number;
38
+ bannerElevation?: number;
39
+ paywallZIndex?: number;
40
+ paywallElevation?: number;
41
+ regularPrice: string;
42
+ discountedPrice: string;
43
+ features?: Feature[];
44
+ onPurchase?: (closePaywall: () => void) => void;
45
+ onTermsOfService?: () => void;
46
+ onPrivacyPolicy?: () => void;
47
+ }
48
+ export interface PaywallParams {
49
+ discountPercent: string;
50
+ endedAt: string;
51
+ regularPrice: string;
52
+ discountedPrice: string;
53
+ locale: string;
54
+ style: PaywallStyle;
55
+ features?: Feature[];
56
+ zIndex?: number;
57
+ elevation?: number;
58
+ }
59
+ export interface BannerParams {
60
+ enabled: boolean;
61
+ isSubscriber: boolean;
62
+ locale: string;
63
+ discountPercent: number;
64
+ endedAt: Date;
65
+ style: PaywallStyle;
66
+ bottom?: number;
67
+ zIndex?: number;
68
+ elevation?: number;
69
+ }
24
70
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;AAC7D,MAAM,MAAM,aAAa,GAAG,eAAe,GAAG,WAAW,GAAG,IAAI,CAAC;AAEjE,MAAM,WAAW,WAAW;IAC1B,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,EAAE,IAAI,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,IAAI,CAAC;IACjB,QAAQ,EAAE,IAAI,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,IAAI,CAAC;CAClB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;AAC7D,MAAM,MAAM,aAAa,GAAG,eAAe,GAAG,WAAW,GAAG,IAAI,CAAC;AAGjE,MAAM,MAAM,YAAY,GACpB,SAAS,GACT,oBAAoB,GACpB,qBAAqB,GACrB,cAAc,CAAC;AAGnB,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,EAAE,IAAI,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,IAAI,CAAC;CAClB;AAGD,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,OAAO,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,YAAY,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;IAGrB,UAAU,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;IAChD,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,aAAa;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,YAAY,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;IAErB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,OAAO,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,IAAI,CAAC;IACd,KAAK,EAAE,YAAY,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB"}
@@ -1,18 +1,14 @@
1
1
  import { type ReactNode } from 'react';
2
- import type { DiscountInfo } from './types';
2
+ import type { DiscountInfo, PaywallConfig } from './types';
3
3
  type MonetaiProviderProps = {
4
- banner?: {
5
- title: string;
6
- discountTitle: string;
7
- onPress: () => void;
8
- };
9
4
  children: ReactNode;
10
5
  onDiscountInfoChange?: (discountInfo: DiscountInfo | null) => void;
6
+ paywallConfig?: PaywallConfig;
11
7
  };
12
8
  /**
13
9
  * 클라이언트 측에서 이 컴포넌트로 전체 앱을 감싸주면,
14
10
  * SDK 초기화 + Event Emitter 구독 + 배너 렌더링을 한곳에서 처리할 수 있음
15
11
  */
16
- export default function MonetaiProvider({ children, onDiscountInfoChange, }: MonetaiProviderProps): import("react/jsx-runtime").JSX.Element;
12
+ export default function MonetaiProvider({ children, onDiscountInfoChange, paywallConfig, }: MonetaiProviderProps): import("react/jsx-runtime").JSX.Element;
17
13
  export {};
18
14
  //# sourceMappingURL=MonetaiProvider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MonetaiProvider.d.ts","sourceRoot":"","sources":["../../../../src/MonetaiProvider.tsx"],"names":[],"mappings":"AACA,OAAO,EAAuB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAG5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAO5C,KAAK,oBAAoB,GAAG;IAC1B,MAAM,CAAC,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,aAAa,EAAE,MAAM,CAAC;QACtB,OAAO,EAAE,MAAM,IAAI,CAAC;KACrB,CAAC;IACF,QAAQ,EAAE,SAAS,CAAC;IACpB,oBAAoB,CAAC,EAAE,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI,KAAK,IAAI,CAAC;CACpE,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,EACtC,QAAQ,EACR,oBAAoB,GACrB,EAAE,oBAAoB,2CAkDtB"}
1
+ {"version":3,"file":"MonetaiProvider.d.ts","sourceRoot":"","sources":["../../../../src/MonetaiProvider.tsx"],"names":[],"mappings":"AACA,OAAO,EAKL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAGf,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAa3D,KAAK,oBAAoB,GAAG;IAC1B,QAAQ,EAAE,SAAS,CAAC;IACpB,oBAAoB,CAAC,EAAE,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI,KAAK,IAAI,CAAC;IACnE,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,EACtC,QAAQ,EACR,oBAAoB,EACpB,aAAa,GACd,EAAE,oBAAoB,2CAoFtB"}
@@ -0,0 +1,7 @@
1
+ import type { DiscountInfo, PaywallConfig } from './types';
2
+ declare const PaywallManager: ({ paywallConfig, discountInfo, }: {
3
+ paywallConfig: PaywallConfig;
4
+ discountInfo: DiscountInfo | null;
5
+ }) => import("react/jsx-runtime").JSX.Element;
6
+ export default PaywallManager;
7
+ //# sourceMappingURL=PaywallManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PaywallManager.d.ts","sourceRoot":"","sources":["../../../../src/PaywallManager.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE3D,QAAA,MAAM,cAAc,GAAI,kCAGrB;IACD,aAAa,EAAE,aAAa,CAAC;IAC7B,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;CACnC,4CA8CA,CAAC;AAEF,eAAe,cAAc,CAAC"}
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+ import type { BannerParams } from '../types';
3
+ export interface BannerProps {
4
+ visible: boolean;
5
+ onPaywall: () => void;
6
+ bannerParams: BannerParams;
7
+ }
8
+ declare const Banner: React.FC<BannerProps>;
9
+ export default Banner;
10
+ //# sourceMappingURL=Banner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Banner.d.ts","sourceRoot":"","sources":["../../../../../src/components/Banner.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAGxC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAK7C,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,YAAY,EAAE,YAAY,CAAC;CAC5B;AAED,QAAA,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,WAAW,CA6EjC,CAAC;AA4DF,eAAe,MAAM,CAAC"}
@@ -0,0 +1,14 @@
1
+ import React from 'react';
2
+ import type { PaywallParams } from '../types';
3
+ interface PaywallProps {
4
+ visible: boolean;
5
+ preload?: boolean;
6
+ onClose: () => void;
7
+ onPurchase: () => void;
8
+ onTermsOfService?: () => void;
9
+ onPrivacyPolicy?: () => void;
10
+ params: PaywallParams;
11
+ }
12
+ declare const Paywall: React.FC<PaywallProps>;
13
+ export default Paywall;
14
+ //# sourceMappingURL=Paywall.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Paywall.d.ts","sourceRoot":"","sources":["../../../../../src/components/Paywall.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AASxC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAY9C,UAAU,YAAY;IACpB,OAAO,EAAE,OAAO,CAAC;IAEjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IAC7B,MAAM,EAAE,aAAa,CAAC;CACvB;AAED,QAAA,MAAM,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CA6JnC,CAAC;AAgEF,eAAe,OAAO,CAAC"}
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ interface CompactPaywallWrapperProps {
3
+ onClose: () => void;
4
+ children: React.ReactNode;
5
+ }
6
+ export declare const CompactPaywallWrapper: React.FC<CompactPaywallWrapperProps>;
7
+ export default CompactPaywallWrapper;
8
+ //# sourceMappingURL=CompactPaywallWrapper.d.ts.map