@react-native-ohos/react-native-credit-card-input 1.0.1-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/LICENSE +20 -0
  2. package/README.OpenSource +11 -0
  3. package/README.md +9 -0
  4. package/lib/commonjs/CreditCardInput.js +138 -0
  5. package/lib/commonjs/CreditCardInput.js.map +1 -0
  6. package/lib/commonjs/CreditCardView.js +175 -0
  7. package/lib/commonjs/CreditCardView.js.map +1 -0
  8. package/lib/commonjs/Icons.js +17 -0
  9. package/lib/commonjs/Icons.js.map +1 -0
  10. package/lib/commonjs/LiteCreditCardInput.js +189 -0
  11. package/lib/commonjs/LiteCreditCardInput.js.map +1 -0
  12. package/lib/commonjs/index.js +35 -0
  13. package/lib/commonjs/index.js.map +1 -0
  14. package/lib/commonjs/package.json +1 -0
  15. package/lib/commonjs/useCreditCardForm.js +95 -0
  16. package/lib/commonjs/useCreditCardForm.js.map +1 -0
  17. package/lib/module/CreditCardInput.js +134 -0
  18. package/lib/module/CreditCardInput.js.map +1 -0
  19. package/lib/module/CreditCardView.js +170 -0
  20. package/lib/module/CreditCardView.js.map +1 -0
  21. package/lib/module/Icons.js +13 -0
  22. package/lib/module/Icons.js.map +1 -0
  23. package/lib/module/LiteCreditCardInput.js +184 -0
  24. package/lib/module/LiteCreditCardInput.js.map +1 -0
  25. package/lib/module/index.js +7 -0
  26. package/lib/module/index.js.map +1 -0
  27. package/lib/module/package.json +1 -0
  28. package/lib/module/useCreditCardForm.js +89 -0
  29. package/lib/module/useCreditCardForm.js.map +1 -0
  30. package/lib/typescript/commonjs/jest.setup.d.ts +2 -0
  31. package/lib/typescript/commonjs/jest.setup.d.ts.map +1 -0
  32. package/lib/typescript/commonjs/package.json +1 -0
  33. package/lib/typescript/commonjs/src/CreditCardInput.d.ts +25 -0
  34. package/lib/typescript/commonjs/src/CreditCardInput.d.ts.map +1 -0
  35. package/lib/typescript/commonjs/src/CreditCardView.d.ts +23 -0
  36. package/lib/typescript/commonjs/src/CreditCardView.d.ts.map +1 -0
  37. package/lib/typescript/commonjs/src/Icons.d.ts +11 -0
  38. package/lib/typescript/commonjs/src/Icons.d.ts.map +1 -0
  39. package/lib/typescript/commonjs/src/LiteCreditCardInput.d.ts +19 -0
  40. package/lib/typescript/commonjs/src/LiteCreditCardInput.d.ts.map +1 -0
  41. package/lib/typescript/commonjs/src/index.d.ts +5 -0
  42. package/lib/typescript/commonjs/src/index.d.ts.map +1 -0
  43. package/lib/typescript/commonjs/src/useCreditCardForm.d.ts +25 -0
  44. package/lib/typescript/commonjs/src/useCreditCardForm.d.ts.map +1 -0
  45. package/lib/typescript/module/jest.setup.d.ts +2 -0
  46. package/lib/typescript/module/jest.setup.d.ts.map +1 -0
  47. package/lib/typescript/module/package.json +1 -0
  48. package/lib/typescript/module/src/CreditCardInput.d.ts +25 -0
  49. package/lib/typescript/module/src/CreditCardInput.d.ts.map +1 -0
  50. package/lib/typescript/module/src/CreditCardView.d.ts +23 -0
  51. package/lib/typescript/module/src/CreditCardView.d.ts.map +1 -0
  52. package/lib/typescript/module/src/Icons.d.ts +11 -0
  53. package/lib/typescript/module/src/Icons.d.ts.map +1 -0
  54. package/lib/typescript/module/src/LiteCreditCardInput.d.ts +19 -0
  55. package/lib/typescript/module/src/LiteCreditCardInput.d.ts.map +1 -0
  56. package/lib/typescript/module/src/index.d.ts +5 -0
  57. package/lib/typescript/module/src/index.d.ts.map +1 -0
  58. package/lib/typescript/module/src/useCreditCardForm.d.ts +25 -0
  59. package/lib/typescript/module/src/useCreditCardForm.d.ts.map +1 -0
  60. package/package.json +145 -0
  61. package/src/CreditCardInput.tsx +163 -0
  62. package/src/CreditCardView.tsx +248 -0
  63. package/src/Icons.ts +18 -0
  64. package/src/LiteCreditCardInput.tsx +226 -0
  65. package/src/index.tsx +12 -0
  66. package/src/useCreditCardForm.tsx +161 -0
@@ -0,0 +1,189 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _react = require("react");
8
+ var _reactNative = require("react-native");
9
+ var _Icons = _interopRequireDefault(require("./Icons.js"));
10
+ var _useCreditCardForm = require("./useCreditCardForm.js");
11
+ var _jsxRuntime = require("react/jsx-runtime");
12
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
13
+ const s = _reactNative.StyleSheet.create({
14
+ container: {
15
+ paddingVertical: 10,
16
+ paddingHorizontal: 15,
17
+ flexDirection: 'row',
18
+ alignItems: 'center',
19
+ overflow: 'hidden'
20
+ },
21
+ icon: {
22
+ width: 48,
23
+ height: 40,
24
+ resizeMode: 'contain'
25
+ },
26
+ expanded: {
27
+ flex: 1
28
+ },
29
+ hidden: {
30
+ width: 0
31
+ },
32
+ leftPart: {
33
+ overflow: 'hidden'
34
+ },
35
+ rightPart: {
36
+ overflow: 'hidden',
37
+ flexDirection: 'row'
38
+ },
39
+ last4: {
40
+ flex: 1,
41
+ justifyContent: 'center'
42
+ },
43
+ numberInput: {
44
+ width: 1000
45
+ },
46
+ expiryInput: {
47
+ width: 80
48
+ },
49
+ cvcInput: {
50
+ width: 80
51
+ },
52
+ last4Input: {
53
+ width: 60,
54
+ marginLeft: 20
55
+ },
56
+ input: {
57
+ height: 40,
58
+ fontSize: 16,
59
+ // // @ts-expect-error outlineWidth is used to hide the text-input outline on react-native-web
60
+ outlineWidth: 0
61
+ }
62
+ });
63
+ const LiteCreditCardInput = props => {
64
+ const {
65
+ autoFocus = false,
66
+ style,
67
+ inputStyle,
68
+ placeholderColor = 'darkgray',
69
+ placeholders = {
70
+ number: '1234 5678 1234 5678',
71
+ expiry: 'MM/YY',
72
+ cvc: 'CVC'
73
+ },
74
+ onChange = () => {},
75
+ onFocusField = () => {},
76
+ testID
77
+ } = props;
78
+ const _onChange = formData => {
79
+ // Focus next field when number/expiry field become valid
80
+ if (status.number !== 'valid' && formData.status.number === 'valid') {
81
+ toggleFormState();
82
+ expiryInput.current?.focus();
83
+ }
84
+ if (status.expiry !== 'valid' && formData.status.expiry === 'valid') {
85
+ cvcInput.current?.focus();
86
+ }
87
+ onChange(formData);
88
+ };
89
+ const {
90
+ values,
91
+ status,
92
+ onChangeValue
93
+ } = (0, _useCreditCardForm.useCreditCardForm)(_onChange);
94
+ const [showRightPart, setShowRightPart] = (0, _react.useState)(false);
95
+ const toggleFormState = (0, _react.useCallback)(() => {
96
+ _reactNative.LayoutAnimation.easeInEaseOut();
97
+ setShowRightPart(v => !v);
98
+ }, []);
99
+ const numberInput = (0, _react.useRef)(null);
100
+ const expiryInput = (0, _react.useRef)(null);
101
+ const cvcInput = (0, _react.useRef)(null);
102
+ (0, _react.useEffect)(() => {
103
+ if (autoFocus) numberInput.current?.focus();
104
+ }, [autoFocus]);
105
+ const cardIcon = (0, _react.useMemo)(() => {
106
+ if (values.type && _Icons.default[values.type]) return _Icons.default[values.type];
107
+ return _Icons.default.placeholder;
108
+ }, [values.type]);
109
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
110
+ style: [s.container, style],
111
+ testID: testID,
112
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
113
+ style: [s.leftPart, showRightPart ? s.hidden : s.expanded],
114
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
115
+ style: [s.numberInput],
116
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TextInput, {
117
+ ref: numberInput,
118
+ keyboardType: "default",
119
+ style: [s.input, inputStyle],
120
+ placeholderTextColor: placeholderColor,
121
+ placeholder: placeholders.number,
122
+ value: values.number,
123
+ onChangeText: v => onChangeValue('number', v),
124
+ onFocus: () => onFocusField('number'),
125
+ autoCorrect: false,
126
+ underlineColorAndroid: 'transparent',
127
+ testID: "CC_NUMBER"
128
+ })
129
+ })
130
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
131
+ activeOpacity: 0.8,
132
+ onPress: toggleFormState,
133
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Image, {
134
+ style: s.icon,
135
+ source: {
136
+ uri: cardIcon
137
+ }
138
+ })
139
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
140
+ style: [s.rightPart, showRightPart ? s.expanded : s.hidden],
141
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
142
+ activeOpacity: 0.8,
143
+ onPress: toggleFormState,
144
+ style: s.last4,
145
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
146
+ pointerEvents: 'none',
147
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TextInput, {
148
+ keyboardType: "default",
149
+ value: status.number === 'valid' ? values.number.slice(values.number.length - 4) : '',
150
+ style: [s.input, s.last4Input],
151
+ readOnly: true
152
+ })
153
+ })
154
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
155
+ style: s.expiryInput,
156
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TextInput, {
157
+ ref: expiryInput,
158
+ keyboardType: "default",
159
+ style: [s.input, inputStyle],
160
+ placeholderTextColor: placeholderColor,
161
+ placeholder: placeholders.expiry,
162
+ value: values.expiry,
163
+ onChangeText: v => onChangeValue('expiry', v),
164
+ onFocus: () => onFocusField('expiry'),
165
+ autoCorrect: false,
166
+ underlineColorAndroid: 'transparent',
167
+ testID: "CC_EXPIRY"
168
+ })
169
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
170
+ style: s.cvcInput,
171
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TextInput, {
172
+ ref: cvcInput,
173
+ keyboardType: "default",
174
+ style: [s.input, inputStyle],
175
+ placeholderTextColor: placeholderColor,
176
+ placeholder: placeholders.cvc,
177
+ value: values.cvc,
178
+ onChangeText: v => onChangeValue('cvc', v),
179
+ onFocus: () => onFocusField('cvc'),
180
+ autoCorrect: false,
181
+ underlineColorAndroid: 'transparent',
182
+ testID: "CC_CVC"
183
+ })
184
+ })]
185
+ })]
186
+ });
187
+ };
188
+ var _default = exports.default = LiteCreditCardInput;
189
+ //# sourceMappingURL=LiteCreditCardInput.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","require","_reactNative","_Icons","_interopRequireDefault","_useCreditCardForm","_jsxRuntime","e","__esModule","default","s","StyleSheet","create","container","paddingVertical","paddingHorizontal","flexDirection","alignItems","overflow","icon","width","height","resizeMode","expanded","flex","hidden","leftPart","rightPart","last4","justifyContent","numberInput","expiryInput","cvcInput","last4Input","marginLeft","input","fontSize","outlineWidth","LiteCreditCardInput","props","autoFocus","style","inputStyle","placeholderColor","placeholders","number","expiry","cvc","onChange","onFocusField","testID","_onChange","formData","status","toggleFormState","current","focus","values","onChangeValue","useCreditCardForm","showRightPart","setShowRightPart","useState","useCallback","LayoutAnimation","easeInEaseOut","v","useRef","useEffect","cardIcon","useMemo","type","Icons","placeholder","jsxs","View","children","jsx","TextInput","ref","keyboardType","placeholderTextColor","value","onChangeText","onFocus","autoCorrect","underlineColorAndroid","TouchableOpacity","activeOpacity","onPress","Image","source","uri","pointerEvents","slice","length","readOnly","_default","exports"],"sourceRoot":"..\\..\\src","sources":["LiteCreditCardInput.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "CreditCardInput", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _CreditCardInput.default;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "CreditCardView", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _CreditCardView.default;
16
+ }
17
+ });
18
+ Object.defineProperty(exports, "LiteCreditCardInput", {
19
+ enumerable: true,
20
+ get: function () {
21
+ return _LiteCreditCardInput.default;
22
+ }
23
+ });
24
+ Object.defineProperty(exports, "useCreditCardForm", {
25
+ enumerable: true,
26
+ get: function () {
27
+ return _useCreditCardForm.useCreditCardForm;
28
+ }
29
+ });
30
+ var _CreditCardView = _interopRequireDefault(require("./CreditCardView.js"));
31
+ var _CreditCardInput = _interopRequireDefault(require("./CreditCardInput.js"));
32
+ var _LiteCreditCardInput = _interopRequireDefault(require("./LiteCreditCardInput.js"));
33
+ var _useCreditCardForm = require("./useCreditCardForm.js");
34
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
35
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_CreditCardView","_interopRequireDefault","require","_CreditCardInput","_LiteCreditCardInput","_useCreditCardForm","e","__esModule","default"],"sourceRoot":"..\\..\\src","sources":["index.tsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,eAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,gBAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,oBAAA,GAAAH,sBAAA,CAAAC,OAAA;AAEA,IAAAG,kBAAA,GAAAH,OAAA;AAO6B,SAAAD,uBAAAK,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA","ignoreList":[]}
@@ -0,0 +1 @@
1
+ {"type":"commonjs"}
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useCreditCardForm = void 0;
7
+ var _react = require("react");
8
+ var _cardValidator = _interopRequireDefault(require("card-validator"));
9
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
+ // --- Utilities
11
+
12
+ const toStatus = validation => {
13
+ return validation.isValid ? 'valid' : validation.isPotentiallyValid ? 'incomplete' : 'invalid';
14
+ };
15
+ const removeNonNumber = (string = '') => string.replace(/[^\d]/g, '');
16
+ const limitLength = (string = '', maxLength) => string.slice(0, maxLength);
17
+ const addGaps = (string = '', gaps) => {
18
+ const offsets = [0].concat(gaps).concat([string.length]);
19
+ return offsets.map((end, index) => {
20
+ if (index === 0) return '';
21
+ const start = offsets[index - 1] || 0;
22
+ return string.slice(start, end);
23
+ }).filter(part => part !== '').join(' ');
24
+ };
25
+ const formatCardNumber = (number, maxLength, gaps) => {
26
+ const numberSanitized = removeNonNumber(number);
27
+ const lengthSanitized = limitLength(numberSanitized, maxLength);
28
+ const formatted = addGaps(lengthSanitized, gaps);
29
+ return formatted;
30
+ };
31
+ const formatCardExpiry = expiry => {
32
+ const sanitized = limitLength(removeNonNumber(expiry), 4);
33
+ if (sanitized.match(/^[2-9]$/)) {
34
+ return `0${sanitized}`;
35
+ }
36
+ if (sanitized.length > 2) {
37
+ return `${sanitized.substr(0, 2)}/${sanitized.substr(2, sanitized.length)}`;
38
+ }
39
+ return sanitized;
40
+ };
41
+ const formatCardCVC = (cvc, cvcMaxLength) => {
42
+ return limitLength(removeNonNumber(cvc), cvcMaxLength);
43
+ };
44
+ const useCreditCardForm = onChange => {
45
+ const [formState, setFormState] = (0, _react.useState)({
46
+ number: 'incomplete',
47
+ expiry: 'incomplete',
48
+ cvc: 'incomplete'
49
+ });
50
+ const [values, setValues] = (0, _react.useState)({
51
+ number: '',
52
+ expiry: '',
53
+ cvc: '',
54
+ type: undefined
55
+ });
56
+ const onChangeValue = (0, _react.useCallback)((field, value) => {
57
+ const newValues = {
58
+ ...values,
59
+ [field]: value
60
+ };
61
+ const numberValidation = _cardValidator.default.number(newValues.number);
62
+
63
+ // When card issuer cant be detected, use these default (3 digit CVC, 16 digit card number with spaces every 4 digit)
64
+ const cvcMaxLength = numberValidation.card?.code.size || 3;
65
+ const cardNumberGaps = numberValidation.card?.gaps || [4, 8, 12];
66
+ const cardNumberMaxLength =
67
+ // Credit card number can vary. Use the longest possible as maximum (otherwise fallback to 16)
68
+ Math.max(...(numberValidation.card?.lengths || [16]));
69
+ const newFormattedValues = {
70
+ number: formatCardNumber(newValues.number, cardNumberMaxLength, cardNumberGaps),
71
+ expiry: formatCardExpiry(newValues.expiry),
72
+ cvc: formatCardCVC(newValues.cvc, cvcMaxLength),
73
+ type: numberValidation.card?.type
74
+ };
75
+ const newFormState = {
76
+ number: toStatus(_cardValidator.default.number(newFormattedValues.number)),
77
+ expiry: toStatus(_cardValidator.default.expirationDate(newFormattedValues.expiry)),
78
+ cvc: toStatus(_cardValidator.default.cvv(newFormattedValues.cvc, cvcMaxLength))
79
+ };
80
+ setValues(newFormattedValues);
81
+ setFormState(newFormState);
82
+ onChange({
83
+ valid: newFormState.number === 'valid' && newFormState.expiry === 'valid' && newFormState.cvc === 'valid',
84
+ values: newFormattedValues,
85
+ status: newFormState
86
+ });
87
+ }, [values, onChange]);
88
+ return {
89
+ values,
90
+ status: formState,
91
+ onChangeValue
92
+ };
93
+ };
94
+ exports.useCreditCardForm = useCreditCardForm;
95
+ //# sourceMappingURL=useCreditCardForm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","require","_cardValidator","_interopRequireDefault","e","__esModule","default","toStatus","validation","isValid","isPotentiallyValid","removeNonNumber","string","replace","limitLength","maxLength","slice","addGaps","gaps","offsets","concat","length","map","end","index","start","filter","part","join","formatCardNumber","number","numberSanitized","lengthSanitized","formatted","formatCardExpiry","expiry","sanitized","match","substr","formatCardCVC","cvc","cvcMaxLength","useCreditCardForm","onChange","formState","setFormState","useState","values","setValues","type","undefined","onChangeValue","useCallback","field","value","newValues","numberValidation","cardValidator","card","code","size","cardNumberGaps","cardNumberMaxLength","Math","max","lengths","newFormattedValues","newFormState","expirationDate","cvv","valid","status","exports"],"sourceRoot":"..\\..\\src","sources":["useCreditCardForm.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,134 @@
1
+ "use strict";
2
+
3
+ import { useEffect, useRef } from 'react';
4
+ import { StyleSheet, Text, TextInput, View } from 'react-native';
5
+ import { useCreditCardForm } from "./useCreditCardForm.js";
6
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
7
+ const s = StyleSheet.create({
8
+ container: {
9
+ paddingVertical: 15,
10
+ paddingHorizontal: 15
11
+ },
12
+ icon: {
13
+ width: 48,
14
+ height: 40,
15
+ resizeMode: 'contain'
16
+ },
17
+ numberInput: {},
18
+ extraContainer: {
19
+ flexDirection: 'row',
20
+ marginTop: 15
21
+ },
22
+ expiryInputContainer: {
23
+ flex: 1,
24
+ marginRight: 5
25
+ },
26
+ cvcInputContainer: {
27
+ flex: 1,
28
+ marginLeft: 5
29
+ },
30
+ input: {
31
+ height: 40,
32
+ fontSize: 16,
33
+ borderBottomColor: 'darkgray',
34
+ borderBottomWidth: 1,
35
+ // // @ts-expect-error outlineWidth is used to hide the text-input outline on react-native-web
36
+ outlineWidth: 0
37
+ },
38
+ inputLabel: {
39
+ fontSize: 14,
40
+ fontWeight: 600
41
+ }
42
+ });
43
+ const CreditCardInput = props => {
44
+ const {
45
+ autoFocus,
46
+ style,
47
+ labelStyle,
48
+ inputStyle,
49
+ placeholderColor = 'darkgray',
50
+ labels = {
51
+ number: 'CARD NUMBER',
52
+ expiry: 'EXPIRY',
53
+ cvc: 'CVC/CVV'
54
+ },
55
+ placeholders = {
56
+ number: '1234 5678 1234 5678',
57
+ expiry: 'MM/YY',
58
+ cvc: 'CVC'
59
+ },
60
+ onChange = () => {},
61
+ onFocusField = () => {},
62
+ testID
63
+ } = props;
64
+ const {
65
+ values,
66
+ onChangeValue
67
+ } = useCreditCardForm(onChange);
68
+ const numberInput = useRef(null);
69
+ useEffect(() => {
70
+ if (autoFocus) numberInput.current?.focus();
71
+ }, [autoFocus]);
72
+ return /*#__PURE__*/_jsxs(View, {
73
+ style: [s.container, style],
74
+ testID: testID,
75
+ children: [/*#__PURE__*/_jsxs(View, {
76
+ style: [s.numberInput],
77
+ children: [/*#__PURE__*/_jsx(Text, {
78
+ style: [s.inputLabel, labelStyle],
79
+ children: labels.number
80
+ }), /*#__PURE__*/_jsx(TextInput, {
81
+ ref: numberInput,
82
+ keyboardType: "default",
83
+ style: [s.input, inputStyle],
84
+ placeholderTextColor: placeholderColor,
85
+ placeholder: placeholders.number,
86
+ value: values.number,
87
+ onChangeText: v => onChangeValue('number', v),
88
+ onFocus: () => onFocusField('number'),
89
+ autoCorrect: false,
90
+ underlineColorAndroid: 'transparent',
91
+ testID: "CC_NUMBER"
92
+ })]
93
+ }), /*#__PURE__*/_jsxs(View, {
94
+ style: [s.extraContainer],
95
+ children: [/*#__PURE__*/_jsxs(View, {
96
+ style: s.expiryInputContainer,
97
+ children: [/*#__PURE__*/_jsx(Text, {
98
+ style: [s.inputLabel, labelStyle],
99
+ children: labels.expiry
100
+ }), /*#__PURE__*/_jsx(TextInput, {
101
+ keyboardType: "default",
102
+ style: [s.input, inputStyle],
103
+ placeholderTextColor: placeholderColor,
104
+ placeholder: placeholders.expiry,
105
+ value: values.expiry,
106
+ onChangeText: v => onChangeValue('expiry', v),
107
+ onFocus: () => onFocusField('expiry'),
108
+ autoCorrect: false,
109
+ underlineColorAndroid: 'transparent',
110
+ testID: "CC_EXPIRY"
111
+ })]
112
+ }), /*#__PURE__*/_jsxs(View, {
113
+ style: s.cvcInputContainer,
114
+ children: [/*#__PURE__*/_jsx(Text, {
115
+ style: [s.inputLabel, labelStyle],
116
+ children: labels.cvc
117
+ }), /*#__PURE__*/_jsx(TextInput, {
118
+ keyboardType: "default",
119
+ style: [s.input, inputStyle],
120
+ placeholderTextColor: placeholderColor,
121
+ placeholder: placeholders.cvc,
122
+ value: values.cvc,
123
+ onChangeText: v => onChangeValue('cvc', v),
124
+ onFocus: () => onFocusField('cvc'),
125
+ autoCorrect: false,
126
+ underlineColorAndroid: 'transparent',
127
+ testID: "CC_CVC"
128
+ })]
129
+ })]
130
+ })]
131
+ });
132
+ };
133
+ export default CreditCardInput;
134
+ //# sourceMappingURL=CreditCardInput.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useEffect","useRef","StyleSheet","Text","TextInput","View","useCreditCardForm","jsx","_jsx","jsxs","_jsxs","s","create","container","paddingVertical","paddingHorizontal","icon","width","height","resizeMode","numberInput","extraContainer","flexDirection","marginTop","expiryInputContainer","flex","marginRight","cvcInputContainer","marginLeft","input","fontSize","borderBottomColor","borderBottomWidth","outlineWidth","inputLabel","fontWeight","CreditCardInput","props","autoFocus","style","labelStyle","inputStyle","placeholderColor","labels","number","expiry","cvc","placeholders","onChange","onFocusField","testID","values","onChangeValue","current","focus","children","ref","keyboardType","placeholderTextColor","placeholder","value","onChangeText","v","onFocus","autoCorrect","underlineColorAndroid"],"sourceRoot":"..\\..\\src","sources":["CreditCardInput.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,170 @@
1
+ "use strict";
2
+
3
+ import { Image, ImageBackground, Platform, StyleSheet, Text, View } from 'react-native';
4
+ import FlipCard from 'react-native-flip-card';
5
+ import Icons from "./Icons.js";
6
+ import { useMemo } from 'react';
7
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
8
+ const CARD_SIZE = {
9
+ width: 300,
10
+ height: 190
11
+ };
12
+ const s = StyleSheet.create({
13
+ cardContainer: {},
14
+ cardFace: {
15
+ backgroundColor: '#444',
16
+ borderRadius: 10
17
+ },
18
+ cardMagneticStripe: {
19
+ position: 'absolute',
20
+ left: 0,
21
+ right: 0,
22
+ top: 30,
23
+ height: 40,
24
+ backgroundColor: '#000'
25
+ },
26
+ icon: {
27
+ position: 'absolute',
28
+ top: 15,
29
+ right: 15,
30
+ width: 60,
31
+ height: 40,
32
+ resizeMode: 'contain'
33
+ },
34
+ baseText: {
35
+ color: 'rgba(255, 255, 255, 0.5)',
36
+ backgroundColor: 'transparent'
37
+ },
38
+ placeholder: {
39
+ color: 'rgba(255, 255, 255, 0.5)'
40
+ },
41
+ focusedField: {
42
+ fontWeight: 'bold',
43
+ color: 'rgba(255, 255, 255, 1)'
44
+ },
45
+ number: {
46
+ fontSize: 21,
47
+ position: 'absolute',
48
+ top: 95,
49
+ left: 28
50
+ },
51
+ name: {
52
+ fontSize: 16,
53
+ position: 'absolute',
54
+ bottom: 20,
55
+ left: 25,
56
+ right: 100
57
+ },
58
+ expiryLabel: {
59
+ fontSize: 9,
60
+ position: 'absolute',
61
+ bottom: 40,
62
+ left: 218
63
+ },
64
+ expiry: {
65
+ fontSize: 16,
66
+ position: 'absolute',
67
+ bottom: 20,
68
+ left: 220
69
+ },
70
+ amexCVC: {
71
+ fontSize: 16,
72
+ position: 'absolute',
73
+ top: 73,
74
+ right: 30
75
+ },
76
+ cvc: {
77
+ fontSize: 16,
78
+ position: 'absolute',
79
+ top: 80,
80
+ right: 30
81
+ }
82
+ });
83
+ const CreditCardView = props => {
84
+ const {
85
+ focusedField,
86
+ type,
87
+ name,
88
+ number,
89
+ expiry,
90
+ cvc,
91
+ placeholders = {
92
+ number: '•••• •••• •••• ••••',
93
+ name: '',
94
+ expiry: '••/••',
95
+ cvc: '•••'
96
+ },
97
+ imageFront,
98
+ imageBack,
99
+ fontFamily = Platform.select({
100
+ ios: 'Courier',
101
+ android: 'monospace',
102
+ web: 'monospace'
103
+ }),
104
+ style
105
+ } = props;
106
+ const isAmex = type === 'american-express';
107
+ const shouldShowCardBack = !isAmex && focusedField === 'cvc';
108
+ const cardIcon = useMemo(() => {
109
+ if (type && Icons[type]) return Icons[type];
110
+ return null;
111
+ }, [type]);
112
+ return /*#__PURE__*/_jsx(View, {
113
+ style: [s.cardContainer, CARD_SIZE, style],
114
+ children: /*#__PURE__*/_jsxs(FlipCard, {
115
+ flipHorizontal: true,
116
+ flipVertical: false,
117
+ friction: 10,
118
+ perspective: 2000,
119
+ clickable: false,
120
+ flip: shouldShowCardBack,
121
+ children: [/*#__PURE__*/_jsxs(ImageBackground, {
122
+ style: [CARD_SIZE, s.cardFace],
123
+ source: imageFront,
124
+ children: [!!cardIcon && /*#__PURE__*/_jsx(Image, {
125
+ style: [s.icon],
126
+ source: {
127
+ uri: cardIcon
128
+ }
129
+ }), /*#__PURE__*/_jsx(Text, {
130
+ style: [s.baseText, {
131
+ fontFamily
132
+ }, s.number, !number && s.placeholder, focusedField === 'number' && s.focusedField],
133
+ children: !number ? placeholders.number : number
134
+ }), /*#__PURE__*/_jsx(Text, {
135
+ style: [s.baseText, {
136
+ fontFamily
137
+ }, s.name, !name && s.placeholder, focusedField === 'name' && s.focusedField],
138
+ numberOfLines: 1,
139
+ children: !name ? placeholders.name : name.toUpperCase()
140
+ }), /*#__PURE__*/_jsx(Text, {
141
+ style: [s.baseText, {
142
+ fontFamily
143
+ }, s.expiryLabel, s.placeholder, focusedField === 'expiry' && s.focusedField],
144
+ children: "MONTH/YEAR"
145
+ }), /*#__PURE__*/_jsx(Text, {
146
+ style: [s.baseText, {
147
+ fontFamily
148
+ }, s.expiry, !expiry && s.placeholder, focusedField === 'expiry' && s.focusedField],
149
+ children: !expiry ? placeholders.expiry : expiry
150
+ }), isAmex && /*#__PURE__*/_jsx(Text, {
151
+ style: [s.baseText, {
152
+ fontFamily
153
+ }, s.amexCVC, !cvc && s.placeholder, focusedField === 'cvc' && s.focusedField],
154
+ children: !cvc ? placeholders.cvc : cvc
155
+ })]
156
+ }), /*#__PURE__*/_jsxs(ImageBackground, {
157
+ style: [CARD_SIZE, s.cardFace],
158
+ source: imageBack,
159
+ children: [/*#__PURE__*/_jsx(View, {
160
+ style: s.cardMagneticStripe
161
+ }), /*#__PURE__*/_jsx(Text, {
162
+ style: [s.baseText, s.cvc, !cvc && s.placeholder, focusedField === 'cvc' && s.focusedField],
163
+ children: !cvc ? placeholders.cvc : cvc
164
+ })]
165
+ })]
166
+ })
167
+ });
168
+ };
169
+ export default CreditCardView;
170
+ //# sourceMappingURL=CreditCardView.js.map