@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.
- package/LICENSE +20 -0
- package/README.OpenSource +11 -0
- package/README.md +9 -0
- package/lib/commonjs/CreditCardInput.js +138 -0
- package/lib/commonjs/CreditCardInput.js.map +1 -0
- package/lib/commonjs/CreditCardView.js +175 -0
- package/lib/commonjs/CreditCardView.js.map +1 -0
- package/lib/commonjs/Icons.js +17 -0
- package/lib/commonjs/Icons.js.map +1 -0
- package/lib/commonjs/LiteCreditCardInput.js +189 -0
- package/lib/commonjs/LiteCreditCardInput.js.map +1 -0
- package/lib/commonjs/index.js +35 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/package.json +1 -0
- package/lib/commonjs/useCreditCardForm.js +95 -0
- package/lib/commonjs/useCreditCardForm.js.map +1 -0
- package/lib/module/CreditCardInput.js +134 -0
- package/lib/module/CreditCardInput.js.map +1 -0
- package/lib/module/CreditCardView.js +170 -0
- package/lib/module/CreditCardView.js.map +1 -0
- package/lib/module/Icons.js +13 -0
- package/lib/module/Icons.js.map +1 -0
- package/lib/module/LiteCreditCardInput.js +184 -0
- package/lib/module/LiteCreditCardInput.js.map +1 -0
- package/lib/module/index.js +7 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/useCreditCardForm.js +89 -0
- package/lib/module/useCreditCardForm.js.map +1 -0
- package/lib/typescript/commonjs/jest.setup.d.ts +2 -0
- package/lib/typescript/commonjs/jest.setup.d.ts.map +1 -0
- package/lib/typescript/commonjs/package.json +1 -0
- package/lib/typescript/commonjs/src/CreditCardInput.d.ts +25 -0
- package/lib/typescript/commonjs/src/CreditCardInput.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/CreditCardView.d.ts +23 -0
- package/lib/typescript/commonjs/src/CreditCardView.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/Icons.d.ts +11 -0
- package/lib/typescript/commonjs/src/Icons.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/LiteCreditCardInput.d.ts +19 -0
- package/lib/typescript/commonjs/src/LiteCreditCardInput.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/index.d.ts +5 -0
- package/lib/typescript/commonjs/src/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/useCreditCardForm.d.ts +25 -0
- package/lib/typescript/commonjs/src/useCreditCardForm.d.ts.map +1 -0
- package/lib/typescript/module/jest.setup.d.ts +2 -0
- package/lib/typescript/module/jest.setup.d.ts.map +1 -0
- package/lib/typescript/module/package.json +1 -0
- package/lib/typescript/module/src/CreditCardInput.d.ts +25 -0
- package/lib/typescript/module/src/CreditCardInput.d.ts.map +1 -0
- package/lib/typescript/module/src/CreditCardView.d.ts +23 -0
- package/lib/typescript/module/src/CreditCardView.d.ts.map +1 -0
- package/lib/typescript/module/src/Icons.d.ts +11 -0
- package/lib/typescript/module/src/Icons.d.ts.map +1 -0
- package/lib/typescript/module/src/LiteCreditCardInput.d.ts +19 -0
- package/lib/typescript/module/src/LiteCreditCardInput.d.ts.map +1 -0
- package/lib/typescript/module/src/index.d.ts +5 -0
- package/lib/typescript/module/src/index.d.ts.map +1 -0
- package/lib/typescript/module/src/useCreditCardForm.d.ts +25 -0
- package/lib/typescript/module/src/useCreditCardForm.d.ts.map +1 -0
- package/package.json +145 -0
- package/src/CreditCardInput.tsx +163 -0
- package/src/CreditCardView.tsx +248 -0
- package/src/Icons.ts +18 -0
- package/src/LiteCreditCardInput.tsx +226 -0
- package/src/index.tsx +12 -0
- package/src/useCreditCardForm.tsx +161 -0
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
4
|
+
import { Image, LayoutAnimation, StyleSheet, TextInput, TouchableOpacity, View } from 'react-native';
|
|
5
|
+
import Icons from "./Icons.js";
|
|
6
|
+
import { useCreditCardForm } from "./useCreditCardForm.js";
|
|
7
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
8
|
+
const s = StyleSheet.create({
|
|
9
|
+
container: {
|
|
10
|
+
paddingVertical: 10,
|
|
11
|
+
paddingHorizontal: 15,
|
|
12
|
+
flexDirection: 'row',
|
|
13
|
+
alignItems: 'center',
|
|
14
|
+
overflow: 'hidden'
|
|
15
|
+
},
|
|
16
|
+
icon: {
|
|
17
|
+
width: 48,
|
|
18
|
+
height: 40,
|
|
19
|
+
resizeMode: 'contain'
|
|
20
|
+
},
|
|
21
|
+
expanded: {
|
|
22
|
+
flex: 1
|
|
23
|
+
},
|
|
24
|
+
hidden: {
|
|
25
|
+
width: 0
|
|
26
|
+
},
|
|
27
|
+
leftPart: {
|
|
28
|
+
overflow: 'hidden'
|
|
29
|
+
},
|
|
30
|
+
rightPart: {
|
|
31
|
+
overflow: 'hidden',
|
|
32
|
+
flexDirection: 'row'
|
|
33
|
+
},
|
|
34
|
+
last4: {
|
|
35
|
+
flex: 1,
|
|
36
|
+
justifyContent: 'center'
|
|
37
|
+
},
|
|
38
|
+
numberInput: {
|
|
39
|
+
width: 1000
|
|
40
|
+
},
|
|
41
|
+
expiryInput: {
|
|
42
|
+
width: 80
|
|
43
|
+
},
|
|
44
|
+
cvcInput: {
|
|
45
|
+
width: 80
|
|
46
|
+
},
|
|
47
|
+
last4Input: {
|
|
48
|
+
width: 60,
|
|
49
|
+
marginLeft: 20
|
|
50
|
+
},
|
|
51
|
+
input: {
|
|
52
|
+
height: 40,
|
|
53
|
+
fontSize: 16,
|
|
54
|
+
// // @ts-expect-error outlineWidth is used to hide the text-input outline on react-native-web
|
|
55
|
+
outlineWidth: 0
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
const LiteCreditCardInput = props => {
|
|
59
|
+
const {
|
|
60
|
+
autoFocus = false,
|
|
61
|
+
style,
|
|
62
|
+
inputStyle,
|
|
63
|
+
placeholderColor = 'darkgray',
|
|
64
|
+
placeholders = {
|
|
65
|
+
number: '1234 5678 1234 5678',
|
|
66
|
+
expiry: 'MM/YY',
|
|
67
|
+
cvc: 'CVC'
|
|
68
|
+
},
|
|
69
|
+
onChange = () => {},
|
|
70
|
+
onFocusField = () => {},
|
|
71
|
+
testID
|
|
72
|
+
} = props;
|
|
73
|
+
const _onChange = formData => {
|
|
74
|
+
// Focus next field when number/expiry field become valid
|
|
75
|
+
if (status.number !== 'valid' && formData.status.number === 'valid') {
|
|
76
|
+
toggleFormState();
|
|
77
|
+
expiryInput.current?.focus();
|
|
78
|
+
}
|
|
79
|
+
if (status.expiry !== 'valid' && formData.status.expiry === 'valid') {
|
|
80
|
+
cvcInput.current?.focus();
|
|
81
|
+
}
|
|
82
|
+
onChange(formData);
|
|
83
|
+
};
|
|
84
|
+
const {
|
|
85
|
+
values,
|
|
86
|
+
status,
|
|
87
|
+
onChangeValue
|
|
88
|
+
} = useCreditCardForm(_onChange);
|
|
89
|
+
const [showRightPart, setShowRightPart] = useState(false);
|
|
90
|
+
const toggleFormState = useCallback(() => {
|
|
91
|
+
LayoutAnimation.easeInEaseOut();
|
|
92
|
+
setShowRightPart(v => !v);
|
|
93
|
+
}, []);
|
|
94
|
+
const numberInput = useRef(null);
|
|
95
|
+
const expiryInput = useRef(null);
|
|
96
|
+
const cvcInput = useRef(null);
|
|
97
|
+
useEffect(() => {
|
|
98
|
+
if (autoFocus) numberInput.current?.focus();
|
|
99
|
+
}, [autoFocus]);
|
|
100
|
+
const cardIcon = useMemo(() => {
|
|
101
|
+
if (values.type && Icons[values.type]) return Icons[values.type];
|
|
102
|
+
return Icons.placeholder;
|
|
103
|
+
}, [values.type]);
|
|
104
|
+
return /*#__PURE__*/_jsxs(View, {
|
|
105
|
+
style: [s.container, style],
|
|
106
|
+
testID: testID,
|
|
107
|
+
children: [/*#__PURE__*/_jsx(View, {
|
|
108
|
+
style: [s.leftPart, showRightPart ? s.hidden : s.expanded],
|
|
109
|
+
children: /*#__PURE__*/_jsx(View, {
|
|
110
|
+
style: [s.numberInput],
|
|
111
|
+
children: /*#__PURE__*/_jsx(TextInput, {
|
|
112
|
+
ref: numberInput,
|
|
113
|
+
keyboardType: "default",
|
|
114
|
+
style: [s.input, inputStyle],
|
|
115
|
+
placeholderTextColor: placeholderColor,
|
|
116
|
+
placeholder: placeholders.number,
|
|
117
|
+
value: values.number,
|
|
118
|
+
onChangeText: v => onChangeValue('number', v),
|
|
119
|
+
onFocus: () => onFocusField('number'),
|
|
120
|
+
autoCorrect: false,
|
|
121
|
+
underlineColorAndroid: 'transparent',
|
|
122
|
+
testID: "CC_NUMBER"
|
|
123
|
+
})
|
|
124
|
+
})
|
|
125
|
+
}), /*#__PURE__*/_jsx(TouchableOpacity, {
|
|
126
|
+
activeOpacity: 0.8,
|
|
127
|
+
onPress: toggleFormState,
|
|
128
|
+
children: /*#__PURE__*/_jsx(Image, {
|
|
129
|
+
style: s.icon,
|
|
130
|
+
source: {
|
|
131
|
+
uri: cardIcon
|
|
132
|
+
}
|
|
133
|
+
})
|
|
134
|
+
}), /*#__PURE__*/_jsxs(View, {
|
|
135
|
+
style: [s.rightPart, showRightPart ? s.expanded : s.hidden],
|
|
136
|
+
children: [/*#__PURE__*/_jsx(TouchableOpacity, {
|
|
137
|
+
activeOpacity: 0.8,
|
|
138
|
+
onPress: toggleFormState,
|
|
139
|
+
style: s.last4,
|
|
140
|
+
children: /*#__PURE__*/_jsx(View, {
|
|
141
|
+
pointerEvents: 'none',
|
|
142
|
+
children: /*#__PURE__*/_jsx(TextInput, {
|
|
143
|
+
keyboardType: "default",
|
|
144
|
+
value: status.number === 'valid' ? values.number.slice(values.number.length - 4) : '',
|
|
145
|
+
style: [s.input, s.last4Input],
|
|
146
|
+
readOnly: true
|
|
147
|
+
})
|
|
148
|
+
})
|
|
149
|
+
}), /*#__PURE__*/_jsx(View, {
|
|
150
|
+
style: s.expiryInput,
|
|
151
|
+
children: /*#__PURE__*/_jsx(TextInput, {
|
|
152
|
+
ref: expiryInput,
|
|
153
|
+
keyboardType: "default",
|
|
154
|
+
style: [s.input, inputStyle],
|
|
155
|
+
placeholderTextColor: placeholderColor,
|
|
156
|
+
placeholder: placeholders.expiry,
|
|
157
|
+
value: values.expiry,
|
|
158
|
+
onChangeText: v => onChangeValue('expiry', v),
|
|
159
|
+
onFocus: () => onFocusField('expiry'),
|
|
160
|
+
autoCorrect: false,
|
|
161
|
+
underlineColorAndroid: 'transparent',
|
|
162
|
+
testID: "CC_EXPIRY"
|
|
163
|
+
})
|
|
164
|
+
}), /*#__PURE__*/_jsx(View, {
|
|
165
|
+
style: s.cvcInput,
|
|
166
|
+
children: /*#__PURE__*/_jsx(TextInput, {
|
|
167
|
+
ref: cvcInput,
|
|
168
|
+
keyboardType: "default",
|
|
169
|
+
style: [s.input, inputStyle],
|
|
170
|
+
placeholderTextColor: placeholderColor,
|
|
171
|
+
placeholder: placeholders.cvc,
|
|
172
|
+
value: values.cvc,
|
|
173
|
+
onChangeText: v => onChangeValue('cvc', v),
|
|
174
|
+
onFocus: () => onFocusField('cvc'),
|
|
175
|
+
autoCorrect: false,
|
|
176
|
+
underlineColorAndroid: 'transparent',
|
|
177
|
+
testID: "CC_CVC"
|
|
178
|
+
})
|
|
179
|
+
})]
|
|
180
|
+
})]
|
|
181
|
+
});
|
|
182
|
+
};
|
|
183
|
+
export default LiteCreditCardInput;
|
|
184
|
+
//# sourceMappingURL=LiteCreditCardInput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useCallback","useEffect","useMemo","useRef","useState","Image","LayoutAnimation","StyleSheet","TextInput","TouchableOpacity","View","Icons","useCreditCardForm","jsx","_jsx","jsxs","_jsxs","s","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","showRightPart","setShowRightPart","easeInEaseOut","v","cardIcon","type","placeholder","children","ref","keyboardType","placeholderTextColor","value","onChangeText","onFocus","autoCorrect","underlineColorAndroid","activeOpacity","onPress","source","uri","pointerEvents","slice","length","readOnly"],"sourceRoot":"..\\..\\src","sources":["LiteCreditCardInput.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
export { default as CreditCardView } from "./CreditCardView.js";
|
|
4
|
+
export { default as CreditCardInput } from "./CreditCardInput.js";
|
|
5
|
+
export { default as LiteCreditCardInput } from "./LiteCreditCardInput.js";
|
|
6
|
+
export { useCreditCardForm } from "./useCreditCardForm.js";
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["default","CreditCardView","CreditCardInput","LiteCreditCardInput","useCreditCardForm"],"sourceRoot":"..\\..\\src","sources":["index.tsx"],"mappings":";;AAAA,SAASA,OAAO,IAAIC,cAAc,QAAQ,qBAAkB;AAC5D,SAASD,OAAO,IAAIE,eAAe,QAAQ,sBAAmB;AAC9D,SAASF,OAAO,IAAIG,mBAAmB,QAAQ,0BAAuB;AAEtE,SAMEC,iBAAiB,QACZ,wBAAqB","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"module"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useCallback, useState } from 'react';
|
|
4
|
+
import cardValidator from 'card-validator';
|
|
5
|
+
// --- Utilities
|
|
6
|
+
|
|
7
|
+
const toStatus = validation => {
|
|
8
|
+
return validation.isValid ? 'valid' : validation.isPotentiallyValid ? 'incomplete' : 'invalid';
|
|
9
|
+
};
|
|
10
|
+
const removeNonNumber = (string = '') => string.replace(/[^\d]/g, '');
|
|
11
|
+
const limitLength = (string = '', maxLength) => string.slice(0, maxLength);
|
|
12
|
+
const addGaps = (string = '', gaps) => {
|
|
13
|
+
const offsets = [0].concat(gaps).concat([string.length]);
|
|
14
|
+
return offsets.map((end, index) => {
|
|
15
|
+
if (index === 0) return '';
|
|
16
|
+
const start = offsets[index - 1] || 0;
|
|
17
|
+
return string.slice(start, end);
|
|
18
|
+
}).filter(part => part !== '').join(' ');
|
|
19
|
+
};
|
|
20
|
+
const formatCardNumber = (number, maxLength, gaps) => {
|
|
21
|
+
const numberSanitized = removeNonNumber(number);
|
|
22
|
+
const lengthSanitized = limitLength(numberSanitized, maxLength);
|
|
23
|
+
const formatted = addGaps(lengthSanitized, gaps);
|
|
24
|
+
return formatted;
|
|
25
|
+
};
|
|
26
|
+
const formatCardExpiry = expiry => {
|
|
27
|
+
const sanitized = limitLength(removeNonNumber(expiry), 4);
|
|
28
|
+
if (sanitized.match(/^[2-9]$/)) {
|
|
29
|
+
return `0${sanitized}`;
|
|
30
|
+
}
|
|
31
|
+
if (sanitized.length > 2) {
|
|
32
|
+
return `${sanitized.substr(0, 2)}/${sanitized.substr(2, sanitized.length)}`;
|
|
33
|
+
}
|
|
34
|
+
return sanitized;
|
|
35
|
+
};
|
|
36
|
+
const formatCardCVC = (cvc, cvcMaxLength) => {
|
|
37
|
+
return limitLength(removeNonNumber(cvc), cvcMaxLength);
|
|
38
|
+
};
|
|
39
|
+
export const useCreditCardForm = onChange => {
|
|
40
|
+
const [formState, setFormState] = useState({
|
|
41
|
+
number: 'incomplete',
|
|
42
|
+
expiry: 'incomplete',
|
|
43
|
+
cvc: 'incomplete'
|
|
44
|
+
});
|
|
45
|
+
const [values, setValues] = useState({
|
|
46
|
+
number: '',
|
|
47
|
+
expiry: '',
|
|
48
|
+
cvc: '',
|
|
49
|
+
type: undefined
|
|
50
|
+
});
|
|
51
|
+
const onChangeValue = useCallback((field, value) => {
|
|
52
|
+
const newValues = {
|
|
53
|
+
...values,
|
|
54
|
+
[field]: value
|
|
55
|
+
};
|
|
56
|
+
const numberValidation = cardValidator.number(newValues.number);
|
|
57
|
+
|
|
58
|
+
// When card issuer cant be detected, use these default (3 digit CVC, 16 digit card number with spaces every 4 digit)
|
|
59
|
+
const cvcMaxLength = numberValidation.card?.code.size || 3;
|
|
60
|
+
const cardNumberGaps = numberValidation.card?.gaps || [4, 8, 12];
|
|
61
|
+
const cardNumberMaxLength =
|
|
62
|
+
// Credit card number can vary. Use the longest possible as maximum (otherwise fallback to 16)
|
|
63
|
+
Math.max(...(numberValidation.card?.lengths || [16]));
|
|
64
|
+
const newFormattedValues = {
|
|
65
|
+
number: formatCardNumber(newValues.number, cardNumberMaxLength, cardNumberGaps),
|
|
66
|
+
expiry: formatCardExpiry(newValues.expiry),
|
|
67
|
+
cvc: formatCardCVC(newValues.cvc, cvcMaxLength),
|
|
68
|
+
type: numberValidation.card?.type
|
|
69
|
+
};
|
|
70
|
+
const newFormState = {
|
|
71
|
+
number: toStatus(cardValidator.number(newFormattedValues.number)),
|
|
72
|
+
expiry: toStatus(cardValidator.expirationDate(newFormattedValues.expiry)),
|
|
73
|
+
cvc: toStatus(cardValidator.cvv(newFormattedValues.cvc, cvcMaxLength))
|
|
74
|
+
};
|
|
75
|
+
setValues(newFormattedValues);
|
|
76
|
+
setFormState(newFormState);
|
|
77
|
+
onChange({
|
|
78
|
+
valid: newFormState.number === 'valid' && newFormState.expiry === 'valid' && newFormState.cvc === 'valid',
|
|
79
|
+
values: newFormattedValues,
|
|
80
|
+
status: newFormState
|
|
81
|
+
});
|
|
82
|
+
}, [values, onChange]);
|
|
83
|
+
return {
|
|
84
|
+
values,
|
|
85
|
+
status: formState,
|
|
86
|
+
onChangeValue
|
|
87
|
+
};
|
|
88
|
+
};
|
|
89
|
+
//# sourceMappingURL=useCreditCardForm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useCallback","useState","cardValidator","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","values","setValues","type","undefined","onChangeValue","field","value","newValues","numberValidation","card","code","size","cardNumberGaps","cardNumberMaxLength","Math","max","lengths","newFormattedValues","newFormState","expirationDate","cvv","valid","status"],"sourceRoot":"..\\..\\src","sources":["useCreditCardForm.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jest.setup.d.ts","sourceRoot":"","sources":["../../../jest.setup.ts"],"names":[],"mappings":"AAAA,OAAO,6CAA6C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"commonjs"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { type TextStyle, type ViewStyle } from 'react-native';
|
|
2
|
+
import { type CreditCardFormData, type CreditCardFormField } from './useCreditCardForm';
|
|
3
|
+
interface Props {
|
|
4
|
+
autoFocus?: boolean;
|
|
5
|
+
style?: ViewStyle;
|
|
6
|
+
labelStyle?: TextStyle;
|
|
7
|
+
inputStyle?: TextStyle;
|
|
8
|
+
placeholderColor?: string;
|
|
9
|
+
labels?: {
|
|
10
|
+
number: string;
|
|
11
|
+
expiry: string;
|
|
12
|
+
cvc: string;
|
|
13
|
+
};
|
|
14
|
+
placeholders?: {
|
|
15
|
+
number: string;
|
|
16
|
+
expiry: string;
|
|
17
|
+
cvc: string;
|
|
18
|
+
};
|
|
19
|
+
onChange: (formData: CreditCardFormData) => void;
|
|
20
|
+
onFocusField?: (field: CreditCardFormField) => void;
|
|
21
|
+
testID?: string;
|
|
22
|
+
}
|
|
23
|
+
declare const CreditCardInput: (props: Props) => import("react/jsx-runtime").JSX.Element;
|
|
24
|
+
export default CreditCardInput;
|
|
25
|
+
//# sourceMappingURL=CreditCardInput.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CreditCardInput.d.ts","sourceRoot":"","sources":["../../../../src/CreditCardInput.tsx"],"names":[],"mappings":"AACA,OAAO,EAKL,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AACtB,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACzB,MAAM,qBAAqB,CAAC;AAE7B,UAAU,KAAK;IACb,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,EAAE;QACP,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,YAAY,CAAC,EAAE;QACb,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,QAAQ,EAAE,CAAC,QAAQ,EAAE,kBAAkB,KAAK,IAAI,CAAC;IACjD,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACpD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAuCD,QAAA,MAAM,eAAe,GAAI,OAAO,KAAK,4CAuFpC,CAAC;AAEF,eAAe,eAAe,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { type ImageSourcePropType, type ViewStyle } from 'react-native';
|
|
2
|
+
import type { CreditCardIssuer } from './useCreditCardForm';
|
|
3
|
+
interface Props {
|
|
4
|
+
focusedField?: 'name' | 'number' | 'expiry' | 'cvc';
|
|
5
|
+
type?: CreditCardIssuer;
|
|
6
|
+
name?: string;
|
|
7
|
+
number?: string;
|
|
8
|
+
expiry?: string;
|
|
9
|
+
cvc?: string;
|
|
10
|
+
placeholders?: {
|
|
11
|
+
number: string;
|
|
12
|
+
expiry: string;
|
|
13
|
+
cvc: string;
|
|
14
|
+
name: string;
|
|
15
|
+
};
|
|
16
|
+
style?: ViewStyle;
|
|
17
|
+
fontFamily?: string;
|
|
18
|
+
imageFront?: ImageSourcePropType;
|
|
19
|
+
imageBack?: ImageSourcePropType;
|
|
20
|
+
}
|
|
21
|
+
declare const CreditCardView: (props: Props) => import("react/jsx-runtime").JSX.Element;
|
|
22
|
+
export default CreditCardView;
|
|
23
|
+
//# sourceMappingURL=CreditCardView.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CreditCardView.d.ts","sourceRoot":"","sources":["../../../../src/CreditCardView.tsx"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,mBAAmB,EACxB,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AAItB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AA4E5D,UAAU,KAAK;IACb,YAAY,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,KAAK,CAAC;IACpD,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,YAAY,CAAC,EAAE;QACb,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,KAAK,CAAC,EAAE,SAAS,CAAC;IAElB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,mBAAmB,CAAC;IACjC,SAAS,CAAC,EAAE,mBAAmB,CAAC;CACjC;AAED,QAAA,MAAM,cAAc,GAAI,OAAO,KAAK,4CAuInC,CAAC;AAEF,eAAe,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Icons.d.ts","sourceRoot":"","sources":["../../../../src/Icons.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,KAAK;;;;;;;;CAeV,CAAC;AAEF,eAAe,KAAK,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type TextStyle, type ViewStyle } from 'react-native';
|
|
2
|
+
import { type CreditCardFormData, type CreditCardFormField } from './useCreditCardForm';
|
|
3
|
+
interface Props {
|
|
4
|
+
autoFocus?: boolean;
|
|
5
|
+
style?: ViewStyle;
|
|
6
|
+
inputStyle?: TextStyle;
|
|
7
|
+
placeholderColor?: string;
|
|
8
|
+
placeholders?: {
|
|
9
|
+
number: string;
|
|
10
|
+
expiry: string;
|
|
11
|
+
cvc: string;
|
|
12
|
+
};
|
|
13
|
+
onChange?: (formData: CreditCardFormData) => void;
|
|
14
|
+
onFocusField?: (field: CreditCardFormField) => void;
|
|
15
|
+
testID?: string;
|
|
16
|
+
}
|
|
17
|
+
declare const LiteCreditCardInput: (props: Props) => import("react/jsx-runtime").JSX.Element;
|
|
18
|
+
export default LiteCreditCardInput;
|
|
19
|
+
//# sourceMappingURL=LiteCreditCardInput.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LiteCreditCardInput.d.ts","sourceRoot":"","sources":["../../../../src/LiteCreditCardInput.tsx"],"names":[],"mappings":"AACA,OAAO,EAOL,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AAEtB,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACzB,MAAM,qBAAqB,CAAC;AAE7B,UAAU,KAAK;IACb,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE;QACb,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAClD,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACpD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAqDD,QAAA,MAAM,mBAAmB,GAAI,OAAO,KAAK,4CA2IxC,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { default as CreditCardView } from './CreditCardView';
|
|
2
|
+
export { default as CreditCardInput } from './CreditCardInput';
|
|
3
|
+
export { default as LiteCreditCardInput } from './LiteCreditCardInput';
|
|
4
|
+
export { type CreditCardFormField, type CreditCardFormValues, type ValidationState, type CreditCardFormState, type CreditCardFormData, useCreditCardForm, } from './useCreditCardForm';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAEvE,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,iBAAiB,GAClB,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export type CreditCardIssuer = 'visa' | 'mastercard' | 'american-express' | 'diners-club' | 'discover' | 'jcb';
|
|
2
|
+
export type CreditCardFormField = 'number' | 'expiry' | 'cvc';
|
|
3
|
+
export type CreditCardFormValues = {
|
|
4
|
+
number: string;
|
|
5
|
+
expiry: string;
|
|
6
|
+
cvc: string;
|
|
7
|
+
type?: CreditCardIssuer;
|
|
8
|
+
};
|
|
9
|
+
export type ValidationState = 'incomplete' | 'invalid' | 'valid';
|
|
10
|
+
export type CreditCardFormState = {
|
|
11
|
+
number: ValidationState;
|
|
12
|
+
expiry: ValidationState;
|
|
13
|
+
cvc: ValidationState;
|
|
14
|
+
};
|
|
15
|
+
export type CreditCardFormData = {
|
|
16
|
+
valid: boolean;
|
|
17
|
+
values: CreditCardFormValues;
|
|
18
|
+
status: CreditCardFormState;
|
|
19
|
+
};
|
|
20
|
+
export declare const useCreditCardForm: (onChange: (formData: CreditCardFormData) => void) => {
|
|
21
|
+
values: CreditCardFormValues;
|
|
22
|
+
status: CreditCardFormState;
|
|
23
|
+
onChangeValue: (field: CreditCardFormField, value: string) => void;
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=useCreditCardForm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCreditCardForm.d.ts","sourceRoot":"","sources":["../../../../src/useCreditCardForm.tsx"],"names":[],"mappings":"AAGA,MAAM,MAAM,gBAAgB,GACxB,MAAM,GACN,YAAY,GACZ,kBAAkB,GAClB,aAAa,GACb,UAAU,GACV,KAAK,CAAC;AAEV,MAAM,MAAM,mBAAmB,GAAG,QAAQ,GAAG,QAAQ,GAAG,KAAK,CAAC;AAE9D,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,gBAAgB,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,YAAY,GAAG,SAAS,GAAG,OAAO,CAAC;AAEjE,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,EAAE,eAAe,CAAC;IACxB,MAAM,EAAE,eAAe,CAAC;IACxB,GAAG,EAAE,eAAe,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,oBAAoB,CAAC;IAC7B,MAAM,EAAE,mBAAmB,CAAC;CAC7B,CAAC;AA2DF,eAAO,MAAM,iBAAiB,GAC5B,UAAU,CAAC,QAAQ,EAAE,kBAAkB,KAAK,IAAI;;;2BAgBtC,mBAAmB,SAAS,MAAM;CAoD7C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jest.setup.d.ts","sourceRoot":"","sources":["../../../jest.setup.ts"],"names":[],"mappings":"AAAA,OAAO,6CAA6C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"module"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { type TextStyle, type ViewStyle } from 'react-native';
|
|
2
|
+
import { type CreditCardFormData, type CreditCardFormField } from './useCreditCardForm';
|
|
3
|
+
interface Props {
|
|
4
|
+
autoFocus?: boolean;
|
|
5
|
+
style?: ViewStyle;
|
|
6
|
+
labelStyle?: TextStyle;
|
|
7
|
+
inputStyle?: TextStyle;
|
|
8
|
+
placeholderColor?: string;
|
|
9
|
+
labels?: {
|
|
10
|
+
number: string;
|
|
11
|
+
expiry: string;
|
|
12
|
+
cvc: string;
|
|
13
|
+
};
|
|
14
|
+
placeholders?: {
|
|
15
|
+
number: string;
|
|
16
|
+
expiry: string;
|
|
17
|
+
cvc: string;
|
|
18
|
+
};
|
|
19
|
+
onChange: (formData: CreditCardFormData) => void;
|
|
20
|
+
onFocusField?: (field: CreditCardFormField) => void;
|
|
21
|
+
testID?: string;
|
|
22
|
+
}
|
|
23
|
+
declare const CreditCardInput: (props: Props) => import("react/jsx-runtime").JSX.Element;
|
|
24
|
+
export default CreditCardInput;
|
|
25
|
+
//# sourceMappingURL=CreditCardInput.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CreditCardInput.d.ts","sourceRoot":"","sources":["../../../../src/CreditCardInput.tsx"],"names":[],"mappings":"AACA,OAAO,EAKL,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AACtB,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACzB,MAAM,qBAAqB,CAAC;AAE7B,UAAU,KAAK;IACb,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,EAAE;QACP,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,YAAY,CAAC,EAAE;QACb,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,QAAQ,EAAE,CAAC,QAAQ,EAAE,kBAAkB,KAAK,IAAI,CAAC;IACjD,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACpD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAuCD,QAAA,MAAM,eAAe,GAAI,OAAO,KAAK,4CAuFpC,CAAC;AAEF,eAAe,eAAe,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { type ImageSourcePropType, type ViewStyle } from 'react-native';
|
|
2
|
+
import type { CreditCardIssuer } from './useCreditCardForm';
|
|
3
|
+
interface Props {
|
|
4
|
+
focusedField?: 'name' | 'number' | 'expiry' | 'cvc';
|
|
5
|
+
type?: CreditCardIssuer;
|
|
6
|
+
name?: string;
|
|
7
|
+
number?: string;
|
|
8
|
+
expiry?: string;
|
|
9
|
+
cvc?: string;
|
|
10
|
+
placeholders?: {
|
|
11
|
+
number: string;
|
|
12
|
+
expiry: string;
|
|
13
|
+
cvc: string;
|
|
14
|
+
name: string;
|
|
15
|
+
};
|
|
16
|
+
style?: ViewStyle;
|
|
17
|
+
fontFamily?: string;
|
|
18
|
+
imageFront?: ImageSourcePropType;
|
|
19
|
+
imageBack?: ImageSourcePropType;
|
|
20
|
+
}
|
|
21
|
+
declare const CreditCardView: (props: Props) => import("react/jsx-runtime").JSX.Element;
|
|
22
|
+
export default CreditCardView;
|
|
23
|
+
//# sourceMappingURL=CreditCardView.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CreditCardView.d.ts","sourceRoot":"","sources":["../../../../src/CreditCardView.tsx"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,mBAAmB,EACxB,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AAItB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AA4E5D,UAAU,KAAK;IACb,YAAY,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,KAAK,CAAC;IACpD,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,YAAY,CAAC,EAAE;QACb,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,KAAK,CAAC,EAAE,SAAS,CAAC;IAElB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,mBAAmB,CAAC;IACjC,SAAS,CAAC,EAAE,mBAAmB,CAAC;CACjC;AAED,QAAA,MAAM,cAAc,GAAI,OAAO,KAAK,4CAuInC,CAAC;AAEF,eAAe,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Icons.d.ts","sourceRoot":"","sources":["../../../../src/Icons.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,KAAK;;;;;;;;CAeV,CAAC;AAEF,eAAe,KAAK,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type TextStyle, type ViewStyle } from 'react-native';
|
|
2
|
+
import { type CreditCardFormData, type CreditCardFormField } from './useCreditCardForm';
|
|
3
|
+
interface Props {
|
|
4
|
+
autoFocus?: boolean;
|
|
5
|
+
style?: ViewStyle;
|
|
6
|
+
inputStyle?: TextStyle;
|
|
7
|
+
placeholderColor?: string;
|
|
8
|
+
placeholders?: {
|
|
9
|
+
number: string;
|
|
10
|
+
expiry: string;
|
|
11
|
+
cvc: string;
|
|
12
|
+
};
|
|
13
|
+
onChange?: (formData: CreditCardFormData) => void;
|
|
14
|
+
onFocusField?: (field: CreditCardFormField) => void;
|
|
15
|
+
testID?: string;
|
|
16
|
+
}
|
|
17
|
+
declare const LiteCreditCardInput: (props: Props) => import("react/jsx-runtime").JSX.Element;
|
|
18
|
+
export default LiteCreditCardInput;
|
|
19
|
+
//# sourceMappingURL=LiteCreditCardInput.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LiteCreditCardInput.d.ts","sourceRoot":"","sources":["../../../../src/LiteCreditCardInput.tsx"],"names":[],"mappings":"AACA,OAAO,EAOL,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AAEtB,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACzB,MAAM,qBAAqB,CAAC;AAE7B,UAAU,KAAK;IACb,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE;QACb,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAClD,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACpD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAqDD,QAAA,MAAM,mBAAmB,GAAI,OAAO,KAAK,4CA2IxC,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { default as CreditCardView } from './CreditCardView';
|
|
2
|
+
export { default as CreditCardInput } from './CreditCardInput';
|
|
3
|
+
export { default as LiteCreditCardInput } from './LiteCreditCardInput';
|
|
4
|
+
export { type CreditCardFormField, type CreditCardFormValues, type ValidationState, type CreditCardFormState, type CreditCardFormData, useCreditCardForm, } from './useCreditCardForm';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAEvE,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,iBAAiB,GAClB,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export type CreditCardIssuer = 'visa' | 'mastercard' | 'american-express' | 'diners-club' | 'discover' | 'jcb';
|
|
2
|
+
export type CreditCardFormField = 'number' | 'expiry' | 'cvc';
|
|
3
|
+
export type CreditCardFormValues = {
|
|
4
|
+
number: string;
|
|
5
|
+
expiry: string;
|
|
6
|
+
cvc: string;
|
|
7
|
+
type?: CreditCardIssuer;
|
|
8
|
+
};
|
|
9
|
+
export type ValidationState = 'incomplete' | 'invalid' | 'valid';
|
|
10
|
+
export type CreditCardFormState = {
|
|
11
|
+
number: ValidationState;
|
|
12
|
+
expiry: ValidationState;
|
|
13
|
+
cvc: ValidationState;
|
|
14
|
+
};
|
|
15
|
+
export type CreditCardFormData = {
|
|
16
|
+
valid: boolean;
|
|
17
|
+
values: CreditCardFormValues;
|
|
18
|
+
status: CreditCardFormState;
|
|
19
|
+
};
|
|
20
|
+
export declare const useCreditCardForm: (onChange: (formData: CreditCardFormData) => void) => {
|
|
21
|
+
values: CreditCardFormValues;
|
|
22
|
+
status: CreditCardFormState;
|
|
23
|
+
onChangeValue: (field: CreditCardFormField, value: string) => void;
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=useCreditCardForm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCreditCardForm.d.ts","sourceRoot":"","sources":["../../../../src/useCreditCardForm.tsx"],"names":[],"mappings":"AAGA,MAAM,MAAM,gBAAgB,GACxB,MAAM,GACN,YAAY,GACZ,kBAAkB,GAClB,aAAa,GACb,UAAU,GACV,KAAK,CAAC;AAEV,MAAM,MAAM,mBAAmB,GAAG,QAAQ,GAAG,QAAQ,GAAG,KAAK,CAAC;AAE9D,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,gBAAgB,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,YAAY,GAAG,SAAS,GAAG,OAAO,CAAC;AAEjE,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,EAAE,eAAe,CAAC;IACxB,MAAM,EAAE,eAAe,CAAC;IACxB,GAAG,EAAE,eAAe,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,oBAAoB,CAAC;IAC7B,MAAM,EAAE,mBAAmB,CAAC;CAC7B,CAAC;AA2DF,eAAO,MAAM,iBAAiB,GAC5B,UAAU,CAAC,QAAQ,EAAE,kBAAkB,KAAK,IAAI;;;2BAgBtC,mBAAmB,SAAS,MAAM;CAoD7C,CAAC"}
|