@paykka/card-checkout-ui 0.5.17 → 0.7.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 (189) hide show
  1. package/dist/card-checkout-ui.js +22 -0
  2. package/dist/card-checkout-ui.umd.cjs +19 -5
  3. package/dist/es/api/index.js +0 -2
  4. package/dist/es/api/modules/checkout/index.js +1 -15
  5. package/dist/es/api/modules/checkout/map.js +22 -4
  6. package/dist/es/api/modules/encrypted-card/index.js +54 -0
  7. package/dist/es/api/modules/get-browser-params.js +2 -2
  8. package/dist/es/api/modules/index.js +0 -2
  9. package/dist/es/components/AccountNameField/index.js +2 -3
  10. package/dist/es/components/AddressField/index.js +4 -7
  11. package/dist/es/components/AliPay/index.js +13 -12
  12. package/dist/es/components/ApplePay/index.js +75 -19
  13. package/dist/es/components/Card/index.js +335 -143
  14. package/dist/es/components/CardBrands/index.js +0 -2
  15. package/dist/es/components/CardExpireDateField/index.js +6 -6
  16. package/dist/es/components/CardHolderNameField/index.js +5 -5
  17. package/dist/es/components/CardIBANField/index.js +2 -3
  18. package/dist/es/components/CardNo/index.js +0 -2
  19. package/dist/es/components/CardNumberField/index.js +32 -20
  20. package/dist/es/components/CardSecurityCodeField/index.js +6 -6
  21. package/dist/es/components/CardSelector/index.js +1 -3
  22. package/dist/es/components/CombinedCardInfo/index.js +99 -0
  23. package/dist/es/components/EmailField/EmailField.js +2 -3
  24. package/dist/es/components/EncryptedCard/index.js +408 -0
  25. package/dist/es/components/GooglePay/index.js +108 -36
  26. package/dist/es/components/RecurringTip/index.js +0 -2
  27. package/dist/es/components/SecuredFieldsProvider/index.js +230 -1
  28. package/dist/es/components/SecuredIframe/index.js +192 -22
  29. package/dist/es/components/Sepa/index.js +36 -32
  30. package/dist/es/components/SubmitButton/index.js +0 -2
  31. package/dist/es/components/ThreeDS/index.js +94 -0
  32. package/dist/es/components/WechatPay/index.js +31 -30
  33. package/dist/es/components/index.js +4 -2
  34. package/dist/es/components/internal/Button/Button.js +0 -2
  35. package/dist/es/components/internal/Button/index.js +0 -2
  36. package/dist/es/components/internal/CheckBox/CheckBox.js +0 -2
  37. package/dist/es/components/internal/CheckBox/index.js +0 -2
  38. package/dist/es/components/internal/Form/FormItem.js +28 -24
  39. package/dist/es/components/internal/Form/index.js +1 -0
  40. package/dist/es/components/internal/Form/type.js +13 -1
  41. package/dist/es/components/internal/Info/Info.js +0 -2
  42. package/dist/es/components/internal/Info/index.js +0 -2
  43. package/dist/es/components/internal/Input/Input.js +11 -13
  44. package/dist/es/components/internal/Input/index.js +1 -0
  45. package/dist/es/components/internal/Input/type.js +11 -1
  46. package/dist/es/components/internal/LoadingCheck/LoadingCheck.js +0 -2
  47. package/dist/es/components/internal/LoadingCheck/index.js +0 -2
  48. package/dist/es/components/internal/Modal/Modal.js +40 -0
  49. package/dist/es/components/internal/Modal/modal2.js +1 -0
  50. package/dist/es/components/internal/Select/Select.js +2 -2
  51. package/dist/es/components/internal/Select/SelectMenu.js +0 -2
  52. package/dist/es/components/internal/Select/SelectMenuItem.js +0 -2
  53. package/dist/es/components/internal/icons/Icon3DSFail.js +3 -0
  54. package/dist/es/components/internal/icons/Icon3DSInfo.js +62 -0
  55. package/dist/es/components/internal/icons/Icon3DSSuccess.js +3 -0
  56. package/dist/es/config.js +12 -8
  57. package/dist/es/constant.js +13 -2
  58. package/dist/es/core/PayKKaCheckout.js +116 -0
  59. package/dist/es/core/Session.js +7 -6
  60. package/dist/es/core/environment.js +26 -0
  61. package/dist/es/core/error.js +21 -0
  62. package/dist/es/core/index.js +0 -2
  63. package/dist/es/core/query.js +1 -8
  64. package/dist/es/hooks/index.js +0 -2
  65. package/dist/es/hooks/useBreakpoints.js +57 -0
  66. package/dist/es/hooks/useI18n.js +0 -1
  67. package/dist/es/hooks/usePayState.js +20 -33
  68. package/dist/es/i18n/index.js +0 -2
  69. package/dist/es/i18n/locales/de-DE.js +11 -1
  70. package/dist/es/i18n/locales/en-GB.js +11 -1
  71. package/dist/es/i18n/locales/es-ES.js +11 -1
  72. package/dist/es/i18n/locales/fr-FR.js +11 -1
  73. package/dist/es/i18n/locales/index.js +8 -6
  74. package/dist/es/i18n/locales/ja-JP.js +11 -1
  75. package/dist/es/i18n/locales/ko-KR.js +11 -1
  76. package/dist/es/i18n/locales/pt-PT.js +11 -1
  77. package/dist/es/i18n/locales/ru-RU.js +11 -1
  78. package/dist/es/i18n/locales/zh-CN.js +11 -1
  79. package/dist/es/i18n/locales/zh-HK.js +11 -1
  80. package/dist/es/i18n/locales/zh-TW.js +11 -1
  81. package/dist/es/i18n/util.js +11 -8
  82. package/dist/es/index.js +15 -2
  83. package/dist/es/out/fraud-detection.js +99 -0
  84. package/dist/es/style.css +194 -4
  85. package/dist/es/types/{radar.js → fraud-detection.js} +1 -1
  86. package/dist/es/types/index.js +49 -1
  87. package/dist/es/types/message.js +28 -0
  88. package/dist/es/utils/card-brand/brands.js +21 -45
  89. package/dist/es/utils/card-brand/index.js +3 -2
  90. package/dist/es/utils/iframe.js +23 -0
  91. package/dist/es/utils/index.js +11 -1
  92. package/dist/es/utils/load.js +14 -0
  93. package/dist/es/utils/style.js +84 -0
  94. package/dist/style.css +1 -1
  95. package/dist/types/api/modules/checkout/map.d.ts +1 -0
  96. package/dist/types/api/modules/checkout/type.d.ts +14 -1
  97. package/dist/types/api/modules/encrypted-card/index.d.ts +6 -0
  98. package/dist/types/api/modules/encrypted-card/type.d.ts +31 -0
  99. package/dist/types/api/modules/get-browser-params.d.ts +3 -3
  100. package/dist/types/components/AddressField/type.d.ts +1 -0
  101. package/dist/types/components/AliPay/type.d.ts +4 -4
  102. package/dist/types/components/ApplePay/type.d.ts +19 -7
  103. package/dist/types/components/ApplePay/utils.d.ts +3 -0
  104. package/dist/types/components/Card/type.d.ts +64 -6
  105. package/dist/types/components/CardExpireDateField/type.d.ts +1 -0
  106. package/dist/types/components/CardHolderNameField/type.d.ts +1 -1
  107. package/dist/types/components/CardNumberField/type.d.ts +3 -0
  108. package/dist/types/components/CardSecurityCodeField/type.d.ts +1 -0
  109. package/dist/types/components/CombinedCardInfo/CombinedCardInfo.d.ts +5 -0
  110. package/dist/types/components/CombinedCardInfo/index.d.ts +2 -0
  111. package/dist/types/components/CombinedCardInfo/type.d.ts +16 -0
  112. package/dist/types/components/EncryptedCard/EncryptedCard.d.ts +4 -0
  113. package/dist/types/components/EncryptedCard/index.d.ts +4 -0
  114. package/dist/types/components/EncryptedCard/output.d.ts +9 -0
  115. package/dist/types/components/EncryptedCard/type.d.ts +85 -0
  116. package/dist/types/components/GooglePay/type.d.ts +20 -8
  117. package/dist/types/components/GooglePay/utils.d.ts +2 -0
  118. package/dist/types/components/SecuredFieldsProvider/index.d.ts +1 -0
  119. package/dist/types/components/SecuredFieldsProvider/type.d.ts +29 -100
  120. package/dist/types/components/SecuredFieldsProvider/utils/index.d.ts +1 -1
  121. package/dist/types/components/SecuredIframe/useSecuredInput.d.ts +7 -2
  122. package/dist/types/components/Sepa/type.d.ts +4 -4
  123. package/dist/types/components/ThreeDS/components/ThreeDSAuth/ThreeDSAuth.d.ts +3 -0
  124. package/dist/types/components/ThreeDS/components/ThreeDSAuth/index.d.ts +2 -0
  125. package/dist/types/components/ThreeDS/components/ThreeDSAuth/type.d.ts +17 -0
  126. package/dist/types/components/ThreeDS/components/ThreeDSIframe/ThreeDSIframe.d.ts +2 -0
  127. package/dist/types/components/ThreeDS/components/ThreeDSIframe/index.d.ts +1 -0
  128. package/dist/types/components/ThreeDS/components/ThreeDSIframe/output.d.ts +1 -0
  129. package/dist/types/components/ThreeDS/components/ThreeDSIframe/type.d.ts +5 -0
  130. package/dist/types/components/ThreeDS/components/ThreeDSStatus/ThreeDSStatus.d.ts +3 -0
  131. package/dist/types/components/ThreeDS/components/ThreeDSStatus/output.d.ts +1 -0
  132. package/dist/types/components/ThreeDS/components/ThreeDSStatus/type.d.ts +6 -0
  133. package/dist/types/components/ThreeDS/index.d.ts +1 -0
  134. package/dist/types/components/WechatPay/type.d.ts +4 -4
  135. package/dist/types/components/index.d.ts +2 -0
  136. package/dist/types/components/internal/Form/FormItem.d.ts +1 -1
  137. package/dist/types/components/internal/Form/type.d.ts +7 -0
  138. package/dist/types/components/internal/Input/Input.d.ts +1 -1
  139. package/dist/types/components/internal/Input/type.d.ts +7 -0
  140. package/dist/types/components/internal/Loading/Loading.d.ts +1 -0
  141. package/dist/types/components/internal/Loading/index.d.ts +1 -0
  142. package/dist/types/components/internal/Modal/Modal.d.ts +5 -0
  143. package/dist/types/components/internal/Modal/index.d.ts +0 -0
  144. package/dist/types/components/internal/Modal/type.d.ts +20 -0
  145. package/dist/types/components/internal/icons/Icon3DSFail.d.ts +2 -0
  146. package/dist/types/components/internal/icons/Icon3DSInfo.d.ts +2 -0
  147. package/dist/types/components/internal/icons/Icon3DSSuccess.d.ts +2 -0
  148. package/dist/types/components/internal/icons/index.d.ts +3 -0
  149. package/dist/types/config.d.ts +7 -3
  150. package/dist/types/constant.d.ts +7 -2
  151. package/dist/types/core/PayKKaCheckout.d.ts +28 -0
  152. package/dist/types/core/Session.d.ts +1 -1
  153. package/dist/types/core/context.d.ts +1 -0
  154. package/dist/types/core/environment.d.ts +4 -0
  155. package/dist/types/core/error.d.ts +16 -0
  156. package/dist/types/core/index.d.ts +2 -0
  157. package/dist/types/core/query.d.ts +2 -2
  158. package/dist/types/hooks/index.d.ts +1 -0
  159. package/dist/types/hooks/useBreakpoints.d.ts +15 -0
  160. package/dist/types/hooks/usePayState.d.ts +6 -25
  161. package/dist/types/i18n/locales/de-DE.d.ts +8 -0
  162. package/dist/types/i18n/locales/en-GB.d.ts +8 -0
  163. package/dist/types/i18n/locales/es-ES.d.ts +8 -0
  164. package/dist/types/i18n/locales/fr-FR.d.ts +8 -0
  165. package/dist/types/i18n/locales/index.d.ts +2 -2
  166. package/dist/types/i18n/locales/ja-JP.d.ts +8 -0
  167. package/dist/types/i18n/locales/ko-KR.d.ts +8 -0
  168. package/dist/types/i18n/locales/pt-PT.d.ts +8 -0
  169. package/dist/types/i18n/locales/ru-RU.d.ts +8 -0
  170. package/dist/types/i18n/locales/zh-CN.d.ts +8 -0
  171. package/dist/types/i18n/locales/zh-HK.d.ts +8 -0
  172. package/dist/types/i18n/locales/zh-TW.d.ts +8 -0
  173. package/dist/types/index.d.ts +2 -2
  174. package/dist/types/out/fraud-detection.d.ts +9 -0
  175. package/dist/types/types/{radar.d.ts → fraud-detection.d.ts} +3 -2
  176. package/dist/types/types/index.d.ts +100 -1
  177. package/dist/types/types/message.d.ts +170 -0
  178. package/dist/types/utils/card-brand/brands.d.ts +4 -18
  179. package/dist/types/utils/card-brand/index.d.ts +10 -9
  180. package/dist/types/utils/format.d.ts +0 -1
  181. package/dist/types/utils/index.d.ts +4 -0
  182. package/dist/types/utils/load.d.ts +7 -0
  183. package/dist/types/utils/style.d.ts +29 -0
  184. package/package.json +63 -63
  185. package/dist/card-checkout-ui.iife.js +0 -8
  186. package/dist/es/components/SecuredFieldsProvider/SecuredFieldsProvider.js +0 -222
  187. package/dist/es/out/radar.js +0 -123
  188. package/dist/types/out/radar.d.ts +0 -14
  189. /package/dist/types/{components/SecuredFieldsProvider/utils → utils}/iframe.d.ts +0 -0
@@ -0,0 +1,408 @@
1
+ import { setApiUrl, setCDNUrl } from "../../config.js";
2
+ import { CoreContext } from "../../core/context.js";
3
+ import { create } from "../../core/create.js";
4
+ import "../../utils/card-brand/brands.js";
5
+ import { getBrowserInfo } from "../../utils/system-info/get-browser-info.js";
6
+ import { w, F, h, A, y, u } from "../../core.js";
7
+ import { useBEM } from "../../hooks/useBEM.js";
8
+ import { useI18n } from "../../hooks/useI18n.js";
9
+ import { defaultInputStyleConfig } from "../../types/index.js";
10
+ import { intersection } from "../../utils/index.js";
11
+ import { EFieldType, SecuredFieldsProvider } from "../SecuredFieldsProvider/index.js";
12
+ import { CardNumberField } from "../CardNumberField/index.js";
13
+ import { CardExpireDateField } from "../CardExpireDateField/index.js";
14
+ import { CardSecurityCodeField } from "../CardSecurityCodeField/index.js";
15
+ import { verifyClientKey } from "../../api/modules/encrypted-card/index.js";
16
+ import { formItemLabelClassName, formItemErrorMessageClassName } from "../internal/Form/type.js";
17
+ import "../internal/Form/context.js";
18
+ import "../internal/Form/FormItem.js";
19
+ import "../internal/Form/Form.js";
20
+ import { CombinedCardInfo } from "../CombinedCardInfo/index.js";
21
+ import "../internal/Input/Input.js";
22
+ import { inputWrapperClassName } from "../internal/Input/type.js";
23
+ import { separateInputStyle, genComponentStyle, loadStyle } from "../../utils/style.js";
24
+ import { createPromise } from "../../utils/create-promise.js";
25
+ const ENCRYPTED_CARD_WRAPPER_ID = "encryptedCardWrapper";
26
+ const ENCRYPTED_CARD_ITEM_ATTR = "data-eci";
27
+ var EEncryptedCardType = /* @__PURE__ */ ((EEncryptedCardType2) => {
28
+ EEncryptedCardType2["CARD"] = "card";
29
+ EEncryptedCardType2["CARD_NUMBER"] = "cardNumber";
30
+ EEncryptedCardType2["CVV"] = "securityCode";
31
+ EEncryptedCardType2["EXPIRE_DATE"] = "expiryDate";
32
+ return EEncryptedCardType2;
33
+ })(EEncryptedCardType || {});
34
+ const { bem } = useBEM("encrypted");
35
+ const cvvClassName = bem("cvv");
36
+ const cardNumberClassName = bem("card-number");
37
+ const expireDateClassName = bem("expire-date");
38
+ const combinedEncryptedFieldClassName = bem("combined-encrypted-field");
39
+ const encryptedCardStyleId = "encryptedCardStyle";
40
+ const EncryptedCard = w((props, ref) => {
41
+ const { brands, locale, clientKey, merchantId, sandbox, styles, showLabel = true } = props;
42
+ F(ref, () => ({
43
+ encrypt: () => {
44
+ var _a;
45
+ validatePromise.current = createPromise();
46
+ Object.keys(fieldValidStatusMap.current).forEach((key) => {
47
+ fieldValidStatusMap.current[key] = null;
48
+ });
49
+ (_a = SFPRef.current) == null ? void 0 : _a.validate();
50
+ validatePromise.current.then(() => {
51
+ var _a2;
52
+ console.log("校验通过");
53
+ (_a2 = SFPRef.current) == null ? void 0 : _a2.encryptCard({
54
+ merchantId,
55
+ clientKey
56
+ });
57
+ }).catch(() => {
58
+ console.log("校验失败");
59
+ });
60
+ }
61
+ }));
62
+ const { i18n } = useI18n(locale || getBrowserInfo().language);
63
+ const [single, setSingle] = h(false);
64
+ const [showEncryptedCard, setShowEncryptedCard] = h(false);
65
+ const [isReady, setIsReady] = h(false);
66
+ const [supportedBrands, setSupportedBrands] = h([]);
67
+ const [targetElement, setTargetElement] = h(null);
68
+ const [inputStyle, setInputStyle] = h({});
69
+ const wrapperDomMap = A({
70
+ [EEncryptedCardType.CARD]: null,
71
+ [EEncryptedCardType.CARD_NUMBER]: null,
72
+ [EEncryptedCardType.CVV]: null,
73
+ [EEncryptedCardType.EXPIRE_DATE]: null
74
+ });
75
+ const SFPRef = A(null);
76
+ const combinedEncryptedFieldComp = A(null);
77
+ const cardNumberFieldComp = A(null);
78
+ const cardExpireDateFieldComp = A(null);
79
+ const cardSecurityCodeFieldComp = A(null);
80
+ const combinedEncryptedFieldRef = A(null);
81
+ const cardNumberFieldRef = A(null);
82
+ const cardExpireDateFieldRef = A(null);
83
+ const cardSecurityCodeFieldRef = A(null);
84
+ const fieldRefMap = {
85
+ [EFieldType.CARD_NUMBER]: cardNumberFieldRef,
86
+ [EFieldType.CVV]: cardSecurityCodeFieldRef,
87
+ [EFieldType.EXPIRE_DATE]: cardExpireDateFieldRef
88
+ };
89
+ const processStyles = () => {
90
+ if (!styles) {
91
+ return;
92
+ }
93
+ const { input, label, errorMessage, inputWrapper } = separateInputStyle(styles);
94
+ input && setInputStyle(input);
95
+ if (!document.querySelector(`style#${encryptedCardStyleId}`)) {
96
+ const parentId = ENCRYPTED_CARD_WRAPPER_ID;
97
+ const inputWrapperPrefix = `#${parentId} .${inputWrapperClassName}`;
98
+ const labelPrefix = `#${parentId} .${formItemLabelClassName}`;
99
+ const errorMessagePrefix = `#${parentId} .${formItemErrorMessageClassName}`;
100
+ const inputWrapperStyle = genComponentStyle(
101
+ Object.entries(inputWrapper || {}).map(([type, style2]) => {
102
+ return {
103
+ selector: type === "base" ? inputWrapperPrefix : `${inputWrapperPrefix}--${type}`,
104
+ style: style2
105
+ };
106
+ })
107
+ );
108
+ const labelStyle = genComponentStyle(
109
+ Object.entries(label || {}).map(([type, style2]) => {
110
+ return {
111
+ selector: type === "base" ? labelPrefix : `${labelPrefix}--${type}`,
112
+ style: style2
113
+ };
114
+ })
115
+ );
116
+ const errorMessageStyle = genComponentStyle([
117
+ {
118
+ selector: errorMessagePrefix,
119
+ style: errorMessage
120
+ }
121
+ ]);
122
+ const style = `${inputWrapperStyle}${labelStyle}${errorMessageStyle}`;
123
+ console.log(style);
124
+ loadStyle(style, { id: encryptedCardStyleId });
125
+ }
126
+ };
127
+ const classNameMap = {
128
+ [EFieldType.CARD_NUMBER]: cardNumberClassName,
129
+ [EFieldType.CVV]: cvvClassName,
130
+ [EFieldType.EXPIRE_DATE]: expireDateClassName
131
+ };
132
+ const updateFieldStyles = (fieldType, type) => {
133
+ var _a, _b;
134
+ const className = single ? combinedEncryptedFieldClassName : classNameMap[fieldType];
135
+ const parent = document.querySelector(`#${ENCRYPTED_CARD_WRAPPER_ID}`);
136
+ if (!parent) {
137
+ return;
138
+ }
139
+ const inputWrapper = (_a = parent.querySelector(`.${className}`)) == null ? void 0 : _a.querySelector(`.${inputWrapperClassName}`);
140
+ const label = (_b = parent.querySelector(`.${className}`)) == null ? void 0 : _b.querySelector(`.${formItemLabelClassName}`);
141
+ if (type === "focus") {
142
+ inputWrapper == null ? void 0 : inputWrapper.classList.add(`${inputWrapperClassName}--focus`);
143
+ label == null ? void 0 : label.classList.add(`.${formItemLabelClassName}--focus`);
144
+ } else if (type === "blur") {
145
+ inputWrapper == null ? void 0 : inputWrapper.classList.remove(`${inputWrapperClassName}--focus`);
146
+ label == null ? void 0 : label.classList.remove(`.${formItemLabelClassName}--focus`);
147
+ } else if (type === "valid") {
148
+ inputWrapper == null ? void 0 : inputWrapper.classList.add(`${inputWrapperClassName}--success`);
149
+ label == null ? void 0 : label.classList.add(`.${formItemLabelClassName}--success`);
150
+ } else if (type === "invalid") {
151
+ inputWrapper == null ? void 0 : inputWrapper.classList.add(`${inputWrapperClassName}--error`);
152
+ label == null ? void 0 : label.classList.add(`.${formItemLabelClassName}--error`);
153
+ } else {
154
+ inputWrapper == null ? void 0 : inputWrapper.classList.remove(`${inputWrapperClassName}--success`);
155
+ inputWrapper == null ? void 0 : inputWrapper.classList.remove(`${inputWrapperClassName}--error`);
156
+ label == null ? void 0 : label.classList.remove(`.${formItemLabelClassName}--success`);
157
+ label == null ? void 0 : label.classList.remove(`.${formItemLabelClassName}--error`);
158
+ }
159
+ };
160
+ y(() => {
161
+ initEncryptedCard();
162
+ }, []);
163
+ const authorize = async () => {
164
+ if (!clientKey) {
165
+ throw new Error("clientKey is required");
166
+ }
167
+ return verifyClientKey(clientKey, merchantId);
168
+ };
169
+ const getBrands = (realBrands) => {
170
+ if (!(brands == null ? void 0 : brands.length)) {
171
+ return realBrands;
172
+ }
173
+ const bothBrands = intersection(brands, realBrands || []);
174
+ if (!bothBrands.length) {
175
+ throw new Error("No available card brands");
176
+ }
177
+ return bothBrands;
178
+ };
179
+ const initEncryptedCard = async () => {
180
+ var _a, _b;
181
+ if (sandbox) {
182
+ setApiUrl("https://checkout-sandbox.aq.paykka.com");
183
+ setCDNUrl("https://checkout-sandbox.aq.paykka.com/cp");
184
+ }
185
+ let authRes = await authorize();
186
+ if (authRes) {
187
+ const supportedBrands2 = getBrands(authRes.brands);
188
+ setSupportedBrands(supportedBrands2);
189
+ (_a = props.onReady) == null ? void 0 : _a.call(props, true, { brands: supportedBrands2 });
190
+ } else {
191
+ (_b = props.onReady) == null ? void 0 : _b.call(props, false);
192
+ return;
193
+ }
194
+ const encryptedCardWrapper = document.getElementById(ENCRYPTED_CARD_WRAPPER_ID);
195
+ setTargetElement(encryptedCardWrapper);
196
+ if (!encryptedCardWrapper) {
197
+ return;
198
+ }
199
+ const getEncryptedCardItems = (attr) => {
200
+ return encryptedCardWrapper.querySelector(
201
+ `[${ENCRYPTED_CARD_ITEM_ATTR}="${attr}"]`
202
+ );
203
+ };
204
+ const cardElement = getEncryptedCardItems(EEncryptedCardType.CARD);
205
+ if (cardElement) {
206
+ setSingle(true);
207
+ setShowEncryptedCard(true);
208
+ wrapperDomMap.current[EEncryptedCardType.CARD] = cardElement;
209
+ } else {
210
+ const cardNumberElement = getEncryptedCardItems(EEncryptedCardType.CARD_NUMBER);
211
+ const cvvElement = getEncryptedCardItems(EEncryptedCardType.CVV);
212
+ const expireDateElement = getEncryptedCardItems(EEncryptedCardType.EXPIRE_DATE);
213
+ if (cardNumberElement && cvvElement && expireDateElement) {
214
+ setSingle(false);
215
+ setShowEncryptedCard(true);
216
+ wrapperDomMap.current[EEncryptedCardType.CARD_NUMBER] = cardNumberElement;
217
+ wrapperDomMap.current[EEncryptedCardType.CVV] = cvvElement;
218
+ wrapperDomMap.current[EEncryptedCardType.EXPIRE_DATE] = expireDateElement;
219
+ }
220
+ }
221
+ processStyles();
222
+ };
223
+ y(() => {
224
+ showEncryptedCard && embedEncryptedCard();
225
+ }, [showEncryptedCard]);
226
+ const embedEncryptedCard = () => {
227
+ if (single) {
228
+ const cardWrapper = wrapperDomMap.current[EEncryptedCardType.CARD];
229
+ const combinedEncryptedField = create(CombinedCardInfo, {
230
+ supportedCardBrands: supportedBrands,
231
+ security: true,
232
+ className: combinedEncryptedFieldClassName
233
+ });
234
+ combinedEncryptedFieldComp.current = combinedEncryptedField;
235
+ combinedEncryptedFieldRef.current = combinedEncryptedField.ref;
236
+ combinedEncryptedField.mount(cardWrapper);
237
+ } else {
238
+ const cardNumberWrapper = wrapperDomMap.current[EEncryptedCardType.CARD_NUMBER];
239
+ const cardNumberField = create(CardNumberField, {
240
+ supportedCardBrands: supportedBrands,
241
+ security: true,
242
+ showLabel,
243
+ className: cardNumberClassName
244
+ });
245
+ cardNumberFieldComp.current = cardNumberField;
246
+ cardNumberFieldRef.current = cardNumberField.ref;
247
+ cardNumberField.mount(cardNumberWrapper);
248
+ const cvvWrapper = wrapperDomMap.current[EEncryptedCardType.CVV];
249
+ const cvvField = create(CardSecurityCodeField, {
250
+ security: true,
251
+ showLabel,
252
+ className: cvvClassName
253
+ });
254
+ cardSecurityCodeFieldComp.current = cvvField;
255
+ cardSecurityCodeFieldRef.current = cvvField.ref;
256
+ cvvField.mount(cvvWrapper);
257
+ const expireDateWrapper = wrapperDomMap.current[EEncryptedCardType.EXPIRE_DATE];
258
+ const expireDateField = create(CardExpireDateField, {
259
+ security: true,
260
+ showLabel,
261
+ className: expireDateClassName
262
+ });
263
+ cardExpireDateFieldComp.current = expireDateField;
264
+ cardExpireDateFieldRef.current = expireDateField.ref;
265
+ expireDateField.mount(expireDateWrapper);
266
+ }
267
+ setIsReady(true);
268
+ };
269
+ const onFieldsFocus = (data) => {
270
+ var _a, _b, _c, _d;
271
+ const fieldRef = single ? combinedEncryptedFieldRef : fieldRefMap[data.fieldType];
272
+ if (data.focus) {
273
+ (_a = fieldRef.current) == null ? void 0 : _a.focus();
274
+ (_b = props.onFocus) == null ? void 0 : _b.call(props, data.fieldType);
275
+ updateFieldStyles(data.fieldType, "focus");
276
+ } else {
277
+ (_c = fieldRef.current) == null ? void 0 : _c.blur();
278
+ (_d = props.onBlur) == null ? void 0 : _d.call(props, data.fieldType);
279
+ updateFieldStyles(data.fieldType, "blur");
280
+ }
281
+ };
282
+ const onBinValueChanged = (data) => {
283
+ var _a, _b;
284
+ const field = single ? combinedEncryptedFieldRef : cardNumberFieldRef;
285
+ (_a = field.current) == null ? void 0 : _a.binValueChanged(data.binValue);
286
+ (_b = props.onBinChanged) == null ? void 0 : _b.call(props, {
287
+ binValue: data.binValue,
288
+ brand: data.brand
289
+ });
290
+ };
291
+ const onAuthorized = (data) => {
292
+ var _a;
293
+ (_a = props.onReady) == null ? void 0 : _a.call(props, data.success);
294
+ };
295
+ const validatePromise = A(createPromise());
296
+ const validateOrder = [EFieldType.CARD_NUMBER, EFieldType.EXPIRE_DATE, EFieldType.CVV];
297
+ const fieldValidStatusMap = A({
298
+ [EFieldType.CARD_NUMBER]: null,
299
+ [EFieldType.EXPIRE_DATE]: null,
300
+ [EFieldType.CVV]: null
301
+ });
302
+ const onValidated = (data) => {
303
+ fieldValidStatusMap.current[data.fieldType].status = data.status;
304
+ const results = Object.values(fieldValidStatusMap.current);
305
+ if (results.includes(null)) {
306
+ return;
307
+ } else {
308
+ const validateResult = results.every((result) => result.status === "success");
309
+ if (validateResult) {
310
+ validatePromise.current.resolve(true);
311
+ } else {
312
+ validatePromise.current.reject(false);
313
+ }
314
+ }
315
+ };
316
+ const onFieldValidStatusChanged = (data) => {
317
+ var _a, _b, _c, _d, _e;
318
+ const fieldRef = single ? combinedEncryptedFieldRef : fieldRefMap[data.fieldType];
319
+ const error = data.errorTip && i18n.get(data.errorTip);
320
+ (_a = props.onValidationChanged) == null ? void 0 : _a.call(props, {
321
+ fieldType: data.fieldType,
322
+ status: data.status
323
+ });
324
+ fieldValidStatusMap.current[data.fieldType] = {
325
+ status: data.status,
326
+ errorTip: error
327
+ };
328
+ if (single) {
329
+ for (const key of validateOrder) {
330
+ const currResult = fieldValidStatusMap.current[key];
331
+ if ((currResult == null ? void 0 : currResult.status) === "error") {
332
+ (_b = fieldRef.current) == null ? void 0 : _b.resetValidation(currResult.status, currResult.errorTip);
333
+ return;
334
+ }
335
+ }
336
+ const isSuccess = Object.values(fieldValidStatusMap.current).every(
337
+ (result) => (result == null ? void 0 : result.status) === "success"
338
+ );
339
+ if (isSuccess) {
340
+ (_c = fieldRef.current) == null ? void 0 : _c.resetValidation("success");
341
+ } else {
342
+ (_d = fieldRef.current) == null ? void 0 : _d.resetValidation("unValidate");
343
+ }
344
+ } else {
345
+ (_e = fieldRef.current) == null ? void 0 : _e.resetValidation(data.status, error);
346
+ const type = data.status === "success" ? "valid" : data.status === "error" ? "invalid" : "base";
347
+ updateFieldStyles(data.fieldType, type);
348
+ }
349
+ };
350
+ const onFrameActivated = (data) => {
351
+ var _a;
352
+ (_a = props.onActivated) == null ? void 0 : _a.call(props, data.fieldType);
353
+ };
354
+ const onCardEncrypted = (data) => {
355
+ var _a;
356
+ (_a = props.onCardEncrypted) == null ? void 0 : _a.call(props, data.encryptedInfo);
357
+ };
358
+ const onCardEncryptionFailed = () => {
359
+ var _a;
360
+ (_a = props.onCardEncryptionFailed) == null ? void 0 : _a.call(props);
361
+ };
362
+ const onBrand = (data) => {
363
+ var _a, _b;
364
+ const field = single ? combinedEncryptedFieldRef : cardNumberFieldRef;
365
+ (_a = field.current) == null ? void 0 : _a.brandChanged(data.brand);
366
+ (_b = props.onBrand) == null ? void 0 : _b.call(props, data.brand);
367
+ };
368
+ return /* @__PURE__ */ u(CoreContext.Provider, { value: { i18n }, children: isReady && i18n.ready.value && /* @__PURE__ */ u(
369
+ SecuredFieldsProvider,
370
+ {
371
+ ref: SFPRef,
372
+ targetElement,
373
+ i18n,
374
+ style: inputStyle || defaultInputStyleConfig,
375
+ supportedCardBrands: supportedBrands,
376
+ onFocus: onFieldsFocus,
377
+ onBinValue: onBinValueChanged,
378
+ onBrand,
379
+ onAuthorized,
380
+ onValidStatusChanged: onFieldValidStatusChanged,
381
+ onActivated: onFrameActivated,
382
+ onCardEncrypted,
383
+ onCardEncryptionFailed,
384
+ onValidated
385
+ }
386
+ ) });
387
+ });
388
+ class PayKKaEncryptedCard {
389
+ constructor() {
390
+ }
391
+ static init(props) {
392
+ const container = document.querySelector("body");
393
+ const encryptedCard = create(EncryptedCard, props);
394
+ encryptedCard.mount(container);
395
+ return encryptedCard.ref;
396
+ }
397
+ static setEnv(env) {
398
+ setApiUrl(env.apiUrl);
399
+ setCDNUrl(env.cdnUrl);
400
+ }
401
+ }
402
+ export {
403
+ EEncryptedCardType,
404
+ ENCRYPTED_CARD_ITEM_ATTR,
405
+ ENCRYPTED_CARD_WRAPPER_ID,
406
+ EncryptedCard,
407
+ PayKKaEncryptedCard
408
+ };