@seamlessdocs/payment-modals 1.0.38

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 (61) hide show
  1. package/.babelrc +13 -0
  2. package/.eslintrc.json +11 -0
  3. package/.idea/PaymentModals.iml +8 -0
  4. package/.idea/codeStyles/Project.xml +44 -0
  5. package/.idea/codeStyles/codeStyleConfig.xml +5 -0
  6. package/.idea/inspectionProfiles/Project_Default.xml +6 -0
  7. package/.idea/misc.xml +6 -0
  8. package/.idea/modules.xml +8 -0
  9. package/.idea/vcs.xml +6 -0
  10. package/.prettierrc +4 -0
  11. package/README.md +1 -0
  12. package/build/payment-modals.js +52 -0
  13. package/config/env.js +93 -0
  14. package/config/jest/cssTransform.js +14 -0
  15. package/config/jest/fileTransform.js +40 -0
  16. package/config/modules.js +88 -0
  17. package/config/paths.js +90 -0
  18. package/config/pnpTs.js +35 -0
  19. package/config/webpack.config.js +656 -0
  20. package/config/webpackDevServer.config.js +104 -0
  21. package/index.css +11 -0
  22. package/index.html +137 -0
  23. package/package.json +58 -0
  24. package/scripts/build.js +191 -0
  25. package/scripts/start.js +145 -0
  26. package/scripts/test.js +53 -0
  27. package/src/Components/ACHPaymentModal/ACHPaymentModal.module.css +118 -0
  28. package/src/Components/ACHPaymentModal/Form/FieldContainer/FieldContainer.module.css +40 -0
  29. package/src/Components/ACHPaymentModal/Form/FieldContainer/index.jsx +60 -0
  30. package/src/Components/ACHPaymentModal/Form/Form.module.css +81 -0
  31. package/src/Components/ACHPaymentModal/Form/index.jsx +189 -0
  32. package/src/Components/ACHPaymentModal/index.jsx +83 -0
  33. package/src/Components/ChooseModal/ChooseModal.module.css +114 -0
  34. package/src/Components/ChooseModal/index.jsx +34 -0
  35. package/src/Components/EmptyModal/index.jsx +7 -0
  36. package/src/Components/ErrorModal/ErrorModal.module.css +64 -0
  37. package/src/Components/ErrorModal/index.jsx +35 -0
  38. package/src/Components/ErrorOptionalModal/index.jsx +9 -0
  39. package/src/Components/Modal/Modal.module.css +29 -0
  40. package/src/Components/Modal/index.jsx +13 -0
  41. package/src/Components/PayNowModal/index.jsx +27 -0
  42. package/src/Components/ProcessingModal/ProcessingModal.module.css +50 -0
  43. package/src/Components/ProcessingModal/index.jsx +25 -0
  44. package/src/Components/SelectPaymentModal/SelectPaymentModal.module.css +212 -0
  45. package/src/Components/SelectPaymentModal/index.jsx +117 -0
  46. package/src/Components/SuccessModal/SuccessModal.module.css +34 -0
  47. package/src/Components/SuccessModal/index.jsx +23 -0
  48. package/src/OpenViewStyles.css +16 -0
  49. package/src/assets/img/back.svg +3 -0
  50. package/src/assets/img/bank-account.svg +7 -0
  51. package/src/assets/img/credit-card.svg +36 -0
  52. package/src/assets/img/error-icon.svg +1 -0
  53. package/src/assets/img/error.svg +3 -0
  54. package/src/assets/img/loader.svg +3 -0
  55. package/src/assets/img/lock-icon.svg +3 -0
  56. package/src/assets/img/logo.svg +6 -0
  57. package/src/assets/img/processing.gif +0 -0
  58. package/src/assets/img/success.svg +4 -0
  59. package/src/assets/img/valid-icon.svg +1 -0
  60. package/src/index.jsx +93 -0
  61. package/webpack.config.js +78 -0
@@ -0,0 +1,114 @@
1
+ .modal {
2
+ display: flex;
3
+ flex-direction: column;
4
+ align-items: center;
5
+ padding: 50px 20px 0;
6
+ }
7
+
8
+ .logo {
9
+ width: 40px;
10
+ height: 26px;
11
+ }
12
+
13
+ .header {
14
+ padding-top: 30px;
15
+ font-size: 33px;
16
+ font-weight: 600;
17
+ text-align: center;
18
+ }
19
+
20
+ .description {
21
+ font-size: 14px;
22
+ padding-top: 18px;
23
+ text-align: center;
24
+ text-transform: lowercase;
25
+ }
26
+
27
+ .description::first-letter {
28
+ text-transform: uppercase;
29
+ }
30
+
31
+ .buttons {
32
+ display: flex;
33
+ justify-content: center;
34
+ padding-top: 35px;
35
+ width: 100%;
36
+ }
37
+
38
+ .submitButton,
39
+ .payButton {
40
+ box-sizing: border-box;
41
+ width: 50%;
42
+ height: 40px;
43
+ line-height: 40px;
44
+ margin: 0px 22px;
45
+ border-radius: 3px;
46
+ font-size: 15px;
47
+ text-align: center;
48
+ cursor: pointer;
49
+ }
50
+
51
+ .submitButton {
52
+ border: 1px solid;
53
+ color: #0052b2;
54
+ margin-right: 6px;
55
+ }
56
+
57
+ .payButton {
58
+ background-color: #0052b2;
59
+ color: #fff;
60
+ margin-left: 6px;
61
+ }
62
+
63
+ .backText {
64
+ padding-top: 35px;
65
+ font-size: 12px;
66
+ color: #2c2f32;
67
+ text-align: center;
68
+ }
69
+
70
+ .backLink {
71
+ color: #2c2f32;
72
+ text-decoration: underline;
73
+ cursor: pointer;
74
+ }
75
+
76
+ @media (max-width: 520px) {
77
+ .modal {
78
+ padding-top: 35px;
79
+ }
80
+
81
+ .header {
82
+ font-size: 30px;
83
+ padding-top: 25px;
84
+ }
85
+
86
+ .description {
87
+ padding-top: 15px;
88
+ }
89
+
90
+ .buttons {
91
+ flex-direction: column;
92
+ padding-top: 25px;
93
+ }
94
+
95
+ .submitButton,
96
+ .payButton {
97
+ margin: 0;
98
+ width: 100%;
99
+ }
100
+
101
+ .payButton {
102
+ margin-top: 15px;
103
+ }
104
+
105
+ .backText {
106
+ padding-top: 20px;
107
+ }
108
+ }
109
+
110
+ @media (max-width: 360px) {
111
+ .header {
112
+ font-size: 24px;
113
+ }
114
+ }
@@ -0,0 +1,34 @@
1
+ /* eslint-disable react/no-danger */
2
+ import React from 'react';
3
+
4
+ import Modal from '../Modal';
5
+ import logo from '../../assets/img/logo.svg';
6
+ import styles from './ChooseModal.module.css';
7
+
8
+ const ChooseModal = ({ title, description, withPayText, onWithPay, onWithoutPay, onClose }) => {
9
+ return (
10
+ <Modal>
11
+ <div className={styles.modal}>
12
+ <img src={logo} alt="logo" className={styles.logo} />
13
+ <div className={styles.header}>{title}</div>
14
+ <div className={styles.description} dangerouslySetInnerHTML={{ __html: description }} />
15
+ <div className={styles.buttons}>
16
+ <div className={styles.submitButton} onClick={onWithoutPay}>
17
+ Submit without Paying
18
+ </div>
19
+ <div className={styles.payButton} onClick={onWithPay}>
20
+ {withPayText}
21
+ </div>
22
+ </div>
23
+ <div className={styles.backText}>
24
+ Go{' '}
25
+ <span className={styles.backLink} onClick={onClose}>
26
+ back to form
27
+ </span>
28
+ </div>
29
+ </div>
30
+ </Modal>
31
+ );
32
+ };
33
+
34
+ export default ChooseModal;
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+
3
+ const EmptyModal = () => {
4
+ return <div />;
5
+ };
6
+
7
+ export default EmptyModal;
@@ -0,0 +1,64 @@
1
+ .modal {
2
+ display: flex;
3
+ flex-direction: column;
4
+ align-items: center;
5
+ padding: 46px 30px 0;
6
+ }
7
+
8
+ .errorIcon {
9
+ width: 41px;
10
+ height: 36px;
11
+ }
12
+
13
+ .header {
14
+ padding-top: 25px;
15
+ font-size: 33px;
16
+ font-weight: 600;
17
+ text-align: center;
18
+ }
19
+
20
+ .description {
21
+ font-size: 14px;
22
+ padding-top: 24px;
23
+ }
24
+
25
+ .buttons {
26
+ display: flex;
27
+ justify-content: center;
28
+ padding-top: 30px;
29
+ width: 100%;
30
+ }
31
+
32
+ .buttons > div {
33
+ box-sizing: border-box;
34
+ height: 40px;
35
+ line-height: 40px;
36
+ border-radius: 3px;
37
+ font-size: 15px;
38
+ text-align: center;
39
+ cursor: pointer;
40
+ }
41
+
42
+ .skipButton {
43
+ padding: 0 28px;
44
+ color: #2c2f32;
45
+ }
46
+
47
+ .retryButton {
48
+ padding: 0 60px;
49
+ background-color: #0052b2;
50
+ color: #fff;
51
+ }
52
+
53
+ .backText {
54
+ padding-top: 33px;
55
+ font-size: 12px;
56
+ color: #2c2f32;
57
+ text-align: center;
58
+ }
59
+
60
+ .backLink {
61
+ color: #2c2f32;
62
+ text-decoration: underline;
63
+ cursor: pointer;
64
+ }
@@ -0,0 +1,35 @@
1
+ import React from 'react';
2
+
3
+ import Modal from '../Modal';
4
+ import errorIcon from '../../assets/img/error.svg';
5
+ import styles from './ErrorModal.module.css';
6
+
7
+ const ErrorModal = ({ isOptional, errorText, onSkip, onRetry, onClose }) => {
8
+ return (
9
+ <Modal>
10
+ <div className={styles.modal}>
11
+ <img src={errorIcon} alt="error" className={styles.errorIcon} />
12
+ <div className={styles.header}>Error processing payment</div>
13
+ <div className={styles.description}>{errorText || 'Payment failed'}</div>
14
+ <div className={styles.buttons}>
15
+ {isOptional && (
16
+ <div className={styles.skipButton} onClick={onSkip}>
17
+ Skip
18
+ </div>
19
+ )}
20
+ <div className={styles.retryButton} onClick={onRetry}>
21
+ Retry
22
+ </div>
23
+ </div>
24
+ <div className={styles.backText}>
25
+ Go{' '}
26
+ <span className={styles.backLink} onClick={onClose}>
27
+ back to form
28
+ </span>
29
+ </div>
30
+ </div>
31
+ </Modal>
32
+ );
33
+ };
34
+
35
+ export default ErrorModal;
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+
3
+ import ErrorModal from '../ErrorModal';
4
+
5
+ const ErrorOptionalModal = ({ callbacks }) => {
6
+ return <ErrorModal callbacks={callbacks} isOptional />;
7
+ };
8
+
9
+ export default ErrorOptionalModal;
@@ -0,0 +1,29 @@
1
+ .modalContainer {
2
+ position: fixed;
3
+ top: 0;
4
+ left: 0;
5
+ width: 100%;
6
+ height: 100%;
7
+ background: rgba(0, 0, 0, 0.8);
8
+ z-index: 1000;
9
+ }
10
+
11
+ .modal {
12
+ position: absolute;
13
+ max-width: 550px;
14
+ width: 90%;
15
+ top: 84px;
16
+ left: 50%;
17
+ transform: translateX(-50%);
18
+ background: #fff;
19
+ border-radius: 6px;
20
+ color: #322c2c;
21
+ padding-bottom: 30px;
22
+ }
23
+
24
+ @media (max-height: 530px) {
25
+ .modal {
26
+ top: 50%;
27
+ transform: translate(-50%, -50%);
28
+ }
29
+ }
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+
3
+ import styles from './Modal.module.css';
4
+
5
+ const Modal = props => {
6
+ return (
7
+ <div className={styles.modalContainer}>
8
+ <div className={`${styles.modal} ${props.className}`}>{props.children}</div>
9
+ </div>
10
+ );
11
+ };
12
+
13
+ export default Modal;
@@ -0,0 +1,27 @@
1
+ import React, { useEffect } from 'react';
2
+
3
+ const PayNowModal = () => {
4
+ useEffect(() => {
5
+ window.SpreedlyExpress.init(
6
+ 'C7cRfNJGODKh4Iu5Ox3PToKjniY',
7
+ {
8
+ amount: '$24.24',
9
+ company_name: `Food 'n Stuff`,
10
+ sidebar_top_description: 'This is where you can buy all your food and most of your stuff',
11
+ sidebar_bottom_description: `2 ground beef <br> 2 crows`,
12
+ full_name: '',
13
+ close_label: 'Back to Form'
14
+ },
15
+ {
16
+ email: 'customer@gmail.com'
17
+ }
18
+ );
19
+ window.SpreedlyExpress.openView();
20
+ return () => {
21
+ window.SpreedlyExpress.unload();
22
+ };
23
+ }, []);
24
+ return <div />;
25
+ };
26
+
27
+ export default PayNowModal;
@@ -0,0 +1,50 @@
1
+ .modal {
2
+ display: flex;
3
+ flex-direction: column;
4
+ align-items: center;
5
+ padding: 55px 30px 45px;
6
+ }
7
+
8
+ .processingIcons {
9
+ position: relative;
10
+ }
11
+
12
+ .loader {
13
+ width: 63px;
14
+ height: 63px;
15
+ animation-name: torsion;
16
+ animation-duration: 1.5s;
17
+ animation-timing-function: linear;
18
+ animation-iteration-count: infinite;
19
+ }
20
+
21
+ @keyframes torsion {
22
+ from {
23
+ transform: rotate(0deg);
24
+ }
25
+ to {
26
+ transform: rotate(360deg);
27
+ }
28
+ }
29
+
30
+ .logo {
31
+ position: absolute;
32
+ width: 29px;
33
+ height: 19px;
34
+ top: calc(50% - 2px);
35
+ left: calc(50% + 1px);
36
+ transform: translate(-50%, -50%);
37
+ }
38
+
39
+ .header {
40
+ padding-top: 32px;
41
+ font-size: 33px;
42
+ font-weight: 600;
43
+ text-align: center;
44
+ }
45
+
46
+ .description {
47
+ font-size: 14px;
48
+ padding-top: 30px;
49
+ text-align: center;
50
+ }
@@ -0,0 +1,25 @@
1
+ import React from 'react';
2
+
3
+ import styles from './ProcessingModal.module.css';
4
+ import Modal from '../Modal';
5
+ import loader from '../../assets/img/loader.svg';
6
+ import logo from '../../assets/img/logo.svg';
7
+
8
+ const ProcessingModal = () => {
9
+ return (
10
+ <Modal>
11
+ <div className={styles.modal}>
12
+ <div className={styles.processingIcons}>
13
+ <img src={loader} alt="loader" className={styles.loader} />
14
+ <img src={logo} alt="logo" className={styles.logo} />
15
+ </div>
16
+ <div className={styles.header}>Processing payment...</div>
17
+ <div className={styles.description}>
18
+ IMPORTANT: Please don’t close your browser window yet.
19
+ </div>
20
+ </div>
21
+ </Modal>
22
+ );
23
+ };
24
+
25
+ export default ProcessingModal;
@@ -0,0 +1,212 @@
1
+ .modalContainer {
2
+ overflow-y: auto;
3
+
4
+ box-sizing: border-box;
5
+ max-width: 600px;
6
+ max-height: calc(100vh - 150px);
7
+
8
+ border-radius: none;
9
+ background: none;
10
+ }
11
+
12
+ .modal {
13
+ display: flex;
14
+ flex-direction: column;
15
+
16
+ padding: 45px 80px 30px 80px;
17
+
18
+ border-radius: 6px;
19
+ background: #fff;
20
+ }
21
+
22
+ .header {
23
+ text-align: center;
24
+
25
+ font-size: 33px;
26
+ font-weight: 600;
27
+ }
28
+
29
+ .withoutPaymentBtn {
30
+ align-self: center;
31
+
32
+ margin-top: 44px;
33
+
34
+ cursor: pointer;
35
+ text-decoration: underline;
36
+
37
+ color: #2c2f32;
38
+ border: none;
39
+ background: none;
40
+
41
+ font-size: 12px;
42
+ }
43
+
44
+ .contentContainer {
45
+ display: flex;
46
+
47
+ margin-top: 40px;
48
+ }
49
+
50
+ .paymentTypeContainer {
51
+ display: flex;
52
+ align-items: center;
53
+ flex-direction: column;
54
+
55
+ box-sizing: border-box;
56
+ width: 50%;
57
+ padding: 20px 24px 24px 24px;
58
+
59
+ border: 1px solid #e0e1ec;
60
+ border-radius: 3px;
61
+ background: #f1f3f4;
62
+ }
63
+
64
+ .paymentTypeContainer:nth-child(1) {
65
+ margin-right: 20px;
66
+ }
67
+
68
+ .achType {
69
+ position: relative;
70
+ z-index: 1;
71
+
72
+ display: flex;
73
+ justify-content: center;
74
+
75
+ width: 78px;
76
+ height: 78px;
77
+
78
+ text-align: center;
79
+
80
+ border-radius: 50%;
81
+ background-color: #d1e2f6;
82
+
83
+ line-height: 78px;
84
+ }
85
+
86
+ .achType::after {
87
+ position: absolute;
88
+ z-index: -1;
89
+ top: 0;
90
+ top: calc(78px / 2 - 56px / 2);
91
+ left: calc(78px / 2 - 56px / 2);
92
+
93
+ display: block;
94
+
95
+ width: 56px;
96
+ height: 56px;
97
+
98
+ content: ' ';
99
+
100
+ border-radius: 50%;
101
+ background-color: #83b9fa;
102
+ }
103
+
104
+ .paymentTypeLabel {
105
+ margin-top: 15px;
106
+
107
+ color: #2c2f32;
108
+
109
+ font-size: 19px;
110
+ font-weight: 600;
111
+ line-height: 23px;
112
+ }
113
+
114
+ .payButton {
115
+ width: 100%;
116
+ margin-top: 21px;
117
+ padding: 10px 0;
118
+
119
+ cursor: pointer;
120
+
121
+ color: #2c2f32;
122
+ border: 1px solid #e8e8e8;
123
+ border-radius: 3px;
124
+ background-color: #ffffff;
125
+ box-shadow: 1px 3px 9px rgba(0, 0, 0, 0.08);
126
+
127
+ font-size: 15px;
128
+ font-weight: bold;
129
+ line-height: 18px;
130
+ }
131
+
132
+ .payButton:hover {
133
+ box-sizing: border-box;
134
+
135
+ transition: background-color 200ms linear;
136
+
137
+ color: #ffffff;
138
+ background-color: #0052b2;
139
+ }
140
+
141
+ .creditCardIcon {
142
+ margin-top: 10px;
143
+ }
144
+
145
+ .paymentValue {
146
+ margin: 11px 0px 0px 0px;
147
+
148
+ text-align: center;
149
+
150
+ color: #6b6868;
151
+
152
+ font-size: 12px;
153
+ font-weight: 500;
154
+ line-height: 15px;
155
+ }
156
+
157
+ .backIcon {
158
+ margin-right: 8px;
159
+ }
160
+
161
+ .backTextContainer {
162
+ display: flex;
163
+ align-items: center;
164
+
165
+ margin-bottom: 10px;
166
+
167
+ cursor: pointer;
168
+
169
+ color: white;
170
+
171
+ font-size: 13px;
172
+ line-height: 16px;
173
+ }
174
+
175
+ @media (max-width: 670px) {
176
+ .contentContainer {
177
+ flex-direction: column;
178
+ }
179
+
180
+ .paymentTypeContainer {
181
+ width: 100%;
182
+ }
183
+
184
+ .paymentTypeContainer:nth-child(1) {
185
+ margin-right: 0;
186
+ margin-bottom: 20px;
187
+ }
188
+ }
189
+
190
+ @media (max-width: 520px) {
191
+ .modal {
192
+ padding: 35px 35px 0px 35px;
193
+ }
194
+
195
+ .header {
196
+ font-size: 26px;
197
+ }
198
+
199
+ .withoutPaymentBtn {
200
+ margin-top: 25px;
201
+ }
202
+
203
+ .contentContainer {
204
+ margin-top: 10px;
205
+ }
206
+ }
207
+
208
+ @media (max-width: 360px) {
209
+ .header {
210
+ font-size: 24px;
211
+ }
212
+ }