@stokr/components-library 3.0.31 → 3.0.32
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/dist/analytics/index.js +2 -1
- package/dist/components/2FA/Connect2FA.js +11 -1
- package/dist/components/2FA/EnterCode.js +13 -2
- package/dist/components/2FA/InstallAuthApp.js +4 -0
- package/dist/components/2FA/ResetCode.js +2 -1
- package/dist/components/2FA/Sucess2FA.js +14 -2
- package/dist/components/2FA/disable-2fa-flow.js +15 -2
- package/dist/components/2FA/enable-2fa-flow.js +5 -0
- package/dist/components/2FA/main-flow.js +3 -0
- package/dist/components/ConfirmModal/ConfirmModal.js +21 -2
- package/dist/components/FAQ/FAQ.js +37 -23
- package/dist/components/ForgotPasswordModal/ForgotPasswordModal.js +24 -3
- package/dist/components/Input/InputPassword.js +27 -12
- package/dist/components/Input/OtpInput.js +21 -7
- package/dist/components/Input/Select.js +11 -2
- package/dist/components/Input/TableFilterDropdown.js +23 -7
- package/dist/components/LoginModal/LoginModal.js +7 -4
- package/dist/components/Modal/Modal.styles.js +10 -2
- package/dist/components/Modal/NewVentureModal/NewVentureModal.js +21 -6
- package/dist/components/Modal/PaymentModal.js +16 -16
- package/dist/components/RegisterConfirmModal/RegisterConfirmModal.js +1 -1
- package/dist/components/RegisterModal/RegisterModal.js +30 -5
- package/dist/components/ResetConfirmModal/ResetConfirmModal.js +1 -1
- package/dist/components/ResetPasswordModal/ResetPasswordModal.js +16 -4
- package/dist/components/StepController/StepControllerProgress.js +1 -0
- package/dist/components/Switch/Switch.js +5 -3
- package/dist/components/ToDoList/ToDoListTask.js +1 -0
- package/dist/components/VerifyEmailModal/VerifyEmailModal.js +14 -2
- package/dist/components/headerHo/HeaderHo.js +2 -0
- package/dist/components/icons/LinkIcon.js +2 -2
- package/dist/components/taxId/complete.js +23 -2
- package/dist/components/taxId/flow.js +11 -1
- package/dist/components/taxId/register-taxid.js +25 -4
- package/dist/runtime-config.js +1 -1
- package/dist/static/country-list.json +251 -251
- package/dist/static/fonts/Ionicons/ionicons.min.css +2810 -2810
- package/dist/static/fonts/Ionicons/ionicons.min.css.js +1 -1
- package/dist/static/fonts/icomoon/selection.json +910 -910
- package/dist/static/fonts/icomoon/style.css +139 -139
- package/dist/static/images/copy_icon.svg +4 -4
- package/dist/static/images/download_icon.svg +3 -3
- package/dist/static/images/numbers/number_eight.svg +3 -3
- package/dist/static/images/numbers/number_five.svg +4 -4
- package/dist/static/images/numbers/number_four.svg +3 -3
- package/dist/static/images/numbers/number_nine.svg +4 -4
- package/dist/static/images/numbers/number_one.svg +4 -4
- package/dist/static/images/numbers/number_seven.svg +4 -4
- package/dist/static/images/numbers/number_six.svg +4 -4
- package/dist/static/images/numbers/number_three.svg +3 -3
- package/dist/static/images/numbers/number_two.svg +4 -4
- package/dist/static/images/numbers/number_zero.svg +3 -3
- package/dist/static/images/plus-icon.svg +4 -4
- package/dist/static/images/search-icon.svg +3 -3
- package/dist/static/images/transfer-icon.svg +10 -10
- package/dist/static/images/warning-filled.svg +3 -3
- package/dist/utils/formatCurrencyValue.js +4 -2
- package/package.json +1 -1
|
@@ -49,7 +49,7 @@ const LoginModal = (props) => {
|
|
|
49
49
|
] }) }),
|
|
50
50
|
/* @__PURE__ */ jsx(ModalInner, { modalBot: true, children: /* @__PURE__ */ jsxs(ModalLinkWrap, { children: [
|
|
51
51
|
"Don't have an account yet? ",
|
|
52
|
-
/* @__PURE__ */ jsx(ModalLink, { type: "button", to: "#", as: "button", onClick: onModalSwitch, children: "Sign up" })
|
|
52
|
+
/* @__PURE__ */ jsx(ModalLink, { type: "button", to: "#", as: "button", "data-cy": "login-modal-switch-to-signup", onClick: onModalSwitch, children: "Sign up" })
|
|
53
53
|
] }) })
|
|
54
54
|
] }),
|
|
55
55
|
/* @__PURE__ */ jsx(Column, { part: 8, children: /* @__PURE__ */ jsx(ModalInner, { children: /* @__PURE__ */ jsx(
|
|
@@ -79,7 +79,8 @@ const LoginModal = (props) => {
|
|
|
79
79
|
error: !!errors.email,
|
|
80
80
|
touched: !!touched.email,
|
|
81
81
|
autoComplete: "email",
|
|
82
|
-
autoFocus: true
|
|
82
|
+
autoFocus: true,
|
|
83
|
+
"data-cy": "login-modal-email-input"
|
|
83
84
|
}
|
|
84
85
|
),
|
|
85
86
|
/* @__PURE__ */ jsx(FormError, { show: errors.email && touched.email, children: errors.email })
|
|
@@ -97,18 +98,20 @@ const LoginModal = (props) => {
|
|
|
97
98
|
onBlur: handleBlur,
|
|
98
99
|
error: !!errors.password,
|
|
99
100
|
touched: !!touched.password,
|
|
100
|
-
autoComplete: "current-password"
|
|
101
|
+
autoComplete: "current-password",
|
|
102
|
+
"data-cy": "login-modal-password-input"
|
|
101
103
|
}
|
|
102
104
|
),
|
|
103
105
|
/* @__PURE__ */ jsx(FormError, { show: errors.password && touched.password, children: errors.password })
|
|
104
106
|
] }) }),
|
|
105
|
-
/* @__PURE__ */ jsx(ComponentWrapper, { noPaddingBottom: true, noPaddingHorizontal: true, children: /* @__PURE__ */ jsx(Button, { type: "submit", id: "login-submit-btn", fluid: true, disabled: submitDisabled, children: isActionLoading === "login" ? "Logging in" : "Login" }) }),
|
|
107
|
+
/* @__PURE__ */ jsx(ComponentWrapper, { noPaddingBottom: true, noPaddingHorizontal: true, children: /* @__PURE__ */ jsx(Button, { type: "submit", id: "login-submit-btn", "data-cy": "login-modal-submit", fluid: true, disabled: submitDisabled, children: isActionLoading === "login" ? "Logging in" : "Login" }) }),
|
|
106
108
|
/* @__PURE__ */ jsx(ComponentWrapper, { paddingVeticalHalf: true, noPaddingHorizontal: true, children: /* @__PURE__ */ jsx(FormError, { show: popupError.popup === "login", children: popupError.message }) }),
|
|
107
109
|
/* @__PURE__ */ jsx(ComponentWrapper, { noPaddingBottom: true, noPaddingHorizontal: true, children: /* @__PURE__ */ jsx(
|
|
108
110
|
TextLink,
|
|
109
111
|
{
|
|
110
112
|
type: "button",
|
|
111
113
|
as: "button",
|
|
114
|
+
"data-cy": "login-modal-forgot-password",
|
|
112
115
|
onClick: (...args) => {
|
|
113
116
|
values.password = "";
|
|
114
117
|
onForgotPassword(...args);
|
|
@@ -225,7 +225,11 @@ const ModalInner = styled.div.withConfig({
|
|
|
225
225
|
`}
|
|
226
226
|
`;
|
|
227
227
|
const ModalClose = styled.i.attrs({
|
|
228
|
-
className: "ion ion-md-close"
|
|
228
|
+
className: "ion ion-md-close",
|
|
229
|
+
role: "button",
|
|
230
|
+
tabIndex: 0,
|
|
231
|
+
"aria-label": "Close dialog",
|
|
232
|
+
"data-cy": "modal-close"
|
|
229
233
|
})`
|
|
230
234
|
z-index: 4;
|
|
231
235
|
position: absolute;
|
|
@@ -275,7 +279,11 @@ const ModalClose = styled.i.attrs({
|
|
|
275
279
|
const ModalBack = styled.i.withConfig({
|
|
276
280
|
shouldForwardProp: (props) => !["hide"].includes(props)
|
|
277
281
|
}).attrs({
|
|
278
|
-
className: "ion ion-ios-arrow-back"
|
|
282
|
+
className: "ion ion-ios-arrow-back",
|
|
283
|
+
role: "button",
|
|
284
|
+
tabIndex: 0,
|
|
285
|
+
"aria-label": "Back",
|
|
286
|
+
"data-cy": "modal-back"
|
|
279
287
|
})`
|
|
280
288
|
z-index: 4;
|
|
281
289
|
position: absolute;
|
|
@@ -94,6 +94,7 @@ const NewVentureModal = (props) => {
|
|
|
94
94
|
{
|
|
95
95
|
fluid: true,
|
|
96
96
|
id: "private-investor-success-button",
|
|
97
|
+
"data-cy": "new-venture-modal-success-continue",
|
|
97
98
|
onClick: () => {
|
|
98
99
|
if (onSuccessMessageBtnClick) {
|
|
99
100
|
onSuccessMessageBtnClick();
|
|
@@ -169,7 +170,8 @@ const NewVentureModal = (props) => {
|
|
|
169
170
|
onChange: onChangeWithTouch,
|
|
170
171
|
onBlur: handleBlur,
|
|
171
172
|
error: !!errors.email,
|
|
172
|
-
touched: !!touched.email
|
|
173
|
+
touched: !!touched.email,
|
|
174
|
+
"data-cy": "new-venture-modal-email-input"
|
|
173
175
|
}
|
|
174
176
|
),
|
|
175
177
|
/* @__PURE__ */ jsx(FormError, { show: touched.email && errors.email, children: errors.email }),
|
|
@@ -185,7 +187,8 @@ const NewVentureModal = (props) => {
|
|
|
185
187
|
onChange: onChangeWithTouch,
|
|
186
188
|
onBlur: handleBlur,
|
|
187
189
|
error: !!errors.name,
|
|
188
|
-
touched: !!touched.name
|
|
190
|
+
touched: !!touched.name,
|
|
191
|
+
"data-cy": "new-venture-modal-name-input"
|
|
189
192
|
}
|
|
190
193
|
),
|
|
191
194
|
/* @__PURE__ */ jsx(FormError, { show: touched.name && errors.name, children: errors.name })
|
|
@@ -200,7 +203,8 @@ const NewVentureModal = (props) => {
|
|
|
200
203
|
checked: values.privateInvestorList,
|
|
201
204
|
disabled: privateInvestorListDisabled,
|
|
202
205
|
onChange: handleCheckboxChange,
|
|
203
|
-
onBlur: handleBlur
|
|
206
|
+
onBlur: handleBlur,
|
|
207
|
+
"data-cy": "new-venture-modal-private-investor-checkbox"
|
|
204
208
|
}
|
|
205
209
|
) }),
|
|
206
210
|
/* @__PURE__ */ jsx(FormField, { style: { marginTop: "2rem", marginBottom: -5 }, children: /* @__PURE__ */ jsx(
|
|
@@ -212,7 +216,8 @@ const NewVentureModal = (props) => {
|
|
|
212
216
|
checked: values.mailingList,
|
|
213
217
|
disabled: mailingListDisabled,
|
|
214
218
|
onChange: handleCheckboxChange,
|
|
215
|
-
onBlur: handleBlur
|
|
219
|
+
onBlur: handleBlur,
|
|
220
|
+
"data-cy": "new-venture-modal-mailing-list-checkbox"
|
|
216
221
|
}
|
|
217
222
|
) }),
|
|
218
223
|
optionalCheckBox && /* @__PURE__ */ jsx(FormField, { style: { marginTop: "2rem", marginBottom: -5 }, children: /* @__PURE__ */ jsx(
|
|
@@ -224,7 +229,8 @@ const NewVentureModal = (props) => {
|
|
|
224
229
|
value: values.optionalCheckBoxChecked,
|
|
225
230
|
checked: values.optionalCheckBoxChecked,
|
|
226
231
|
onChange: handleChange,
|
|
227
|
-
onBlur: handleBlur
|
|
232
|
+
onBlur: handleBlur,
|
|
233
|
+
"data-cy": "new-venture-modal-optional-checkbox"
|
|
228
234
|
}
|
|
229
235
|
) }),
|
|
230
236
|
project.type === ProjectTypes.FUND && /* @__PURE__ */ jsx(FormField, { style: { marginTop: "2rem", marginBottom: -5 }, children: /* @__PURE__ */ jsx(
|
|
@@ -238,7 +244,16 @@ const NewVentureModal = (props) => {
|
|
|
238
244
|
}
|
|
239
245
|
) })
|
|
240
246
|
] }) }),
|
|
241
|
-
/* @__PURE__ */ jsx(ComponentWrapper, { noPaddingBottom: true, noPaddingHorizontal: true, center: true, children: /* @__PURE__ */ jsx(
|
|
247
|
+
/* @__PURE__ */ jsx(ComponentWrapper, { noPaddingBottom: true, noPaddingHorizontal: true, center: true, children: /* @__PURE__ */ jsx(
|
|
248
|
+
Button,
|
|
249
|
+
{
|
|
250
|
+
type: "submit",
|
|
251
|
+
id: "private-investor-subscribe-button",
|
|
252
|
+
"data-cy": "new-venture-modal-register-submit",
|
|
253
|
+
disabled: submitDisabled,
|
|
254
|
+
children: "register"
|
|
255
|
+
}
|
|
256
|
+
) }),
|
|
242
257
|
/* @__PURE__ */ jsx(ComponentWrapper, { paddingVeticalHalf: true, noPaddingHorizontal: true, children: /* @__PURE__ */ jsx(FormError, { show: popupError, children: popupError }) })
|
|
243
258
|
] });
|
|
244
259
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx, Fragment, jsxs } from "react/jsx-runtime";
|
|
2
|
-
import "react";
|
|
2
|
+
import React__default from "react";
|
|
3
3
|
import { QRCodeSVG } from "qrcode.react";
|
|
4
4
|
import { formatInTimeZone } from "date-fns-tz";
|
|
5
5
|
import { Modal } from "./Modal.js";
|
|
@@ -53,14 +53,22 @@ const PaymentModal = ({
|
|
|
53
53
|
" to the treasury wallet below."
|
|
54
54
|
] }),
|
|
55
55
|
numberOfSecuritiesText = "Redeem securities",
|
|
56
|
-
formatAmountInLink = true
|
|
56
|
+
formatAmountInLink = true,
|
|
57
|
+
transactionCostMessage,
|
|
58
|
+
paymentLink: paymentLinkProp,
|
|
59
|
+
showKYCWarningBox = true,
|
|
60
|
+
...props
|
|
57
61
|
}) => {
|
|
58
62
|
const { projectData, tokenAmount, tokenSymbol, createdAt, tokenDecimals = 2, GAID, currencyType } = data;
|
|
59
63
|
let newTokenAmount = tokenAmount;
|
|
60
64
|
if (formatAmountInLink) {
|
|
61
65
|
newTokenAmount = (tokenAmount * Math.pow(10, tokenDecimals - 8)).toFixed(8);
|
|
62
66
|
}
|
|
63
|
-
|
|
67
|
+
const defaultPaymentLink = `liquidnetwork:${projectData?.companyWallet}?amount=${newTokenAmount}&assetid=${projectData?.secondaryAssetId}`;
|
|
68
|
+
const resolvedPaymentLink = paymentLinkProp ?? defaultPaymentLink;
|
|
69
|
+
const txCostParagraphStyle = {
|
|
70
|
+
color: txTextInRed ? theme.cWarning : "inherit"
|
|
71
|
+
};
|
|
64
72
|
const isKYCVerified = user?.kyc_status === "Accepted";
|
|
65
73
|
return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx(Modal, { isOpen: isModalOpen, onClose: onModalClose, children: /* @__PURE__ */ jsxs(ModalInner, { children: [
|
|
66
74
|
/* @__PURE__ */ jsx(Text, { children: /* @__PURE__ */ jsx("h3", { children: modalTitle }) }),
|
|
@@ -101,20 +109,12 @@ const PaymentModal = ({
|
|
|
101
109
|
formatInTimeZone(new Date(secondsRemaining * 1e3), "UTC", "mm:ss"),
|
|
102
110
|
" Waiting for payment..."
|
|
103
111
|
] }) }) }),
|
|
104
|
-
!noCTA && /* @__PURE__ */ jsx(ComponentWrapper, { noPaddingHorizontal: true, children: /* @__PURE__ */ jsx(Button, { onClick: onCTAClick, children: CTAText }) })
|
|
112
|
+
!noCTA && /* @__PURE__ */ jsx(ComponentWrapper, { noPaddingHorizontal: true, children: /* @__PURE__ */ jsx(Button, { "data-cy": "payment-modal-cta", onClick: onCTAClick, children: CTAText }) })
|
|
105
113
|
] }),
|
|
106
114
|
/* @__PURE__ */ jsx(Column, { part: 8, children: error ? error : /* @__PURE__ */ jsxs(Text, { children: [
|
|
107
115
|
sendTokenTextRight,
|
|
108
|
-
/* @__PURE__ */ jsx(
|
|
109
|
-
|
|
110
|
-
{
|
|
111
|
-
style: {
|
|
112
|
-
color: txTextInRed ? theme.cWarning : "inherit"
|
|
113
|
-
},
|
|
114
|
-
children: "We have transfered 0.00002 LBTC to cover your transaction costs."
|
|
115
|
-
}
|
|
116
|
-
),
|
|
117
|
-
isKYCVerified ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
116
|
+
transactionCostMessage != null && transactionCostMessage !== false && (React__default.isValidElement(transactionCostMessage) ? transactionCostMessage : /* @__PURE__ */ jsx("p", { style: txCostParagraphStyle, children: transactionCostMessage })),
|
|
117
|
+
isKYCVerified || !showKYCWarningBox ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
118
118
|
/* @__PURE__ */ jsx(
|
|
119
119
|
stdin_default,
|
|
120
120
|
{
|
|
@@ -127,7 +127,7 @@ const PaymentModal = ({
|
|
|
127
127
|
fontSize: 16
|
|
128
128
|
}
|
|
129
129
|
),
|
|
130
|
-
/* @__PURE__ */ jsx(ComponentWrapper, { noPaddingHorizontal: true, noPaddingBottom: true, children: /* @__PURE__ */ jsx(QRCodeSVG, { value:
|
|
130
|
+
/* @__PURE__ */ jsx(ComponentWrapper, { noPaddingHorizontal: true, noPaddingBottom: true, children: /* @__PURE__ */ jsx(QRCodeSVG, { value: resolvedPaymentLink, size: 150 }) })
|
|
131
131
|
] }) : /* @__PURE__ */ jsxs("div", { style: { position: "relative" }, children: [
|
|
132
132
|
/* @__PURE__ */ jsxs(WarningBox, { children: [
|
|
133
133
|
/* @__PURE__ */ jsx(Icon, { icon: iconsMap.warning, size: 32, color: "white" }),
|
|
@@ -137,7 +137,7 @@ const PaymentModal = ({
|
|
|
137
137
|
/* @__PURE__ */ jsx("a", { href: "mailto:compliance@stokr.io", style: { color: "inherit" }, children: "compliance@stokr.io" })
|
|
138
138
|
] })
|
|
139
139
|
] }),
|
|
140
|
-
/* @__PURE__ */ jsx(BlurBox, { children: /* @__PURE__ */ jsx(ComponentWrapper, { noPaddingHorizontal: true, noPaddingBottom: true, children: /* @__PURE__ */ jsx(QRCodeSVG, { value:
|
|
140
|
+
/* @__PURE__ */ jsx(BlurBox, { children: /* @__PURE__ */ jsx(ComponentWrapper, { noPaddingHorizontal: true, noPaddingBottom: true, children: /* @__PURE__ */ jsx(QRCodeSVG, { value: resolvedPaymentLink, size: 150 }) }) })
|
|
141
141
|
] }),
|
|
142
142
|
additionalInfoRight && additionalInfoRight
|
|
143
143
|
] }) })
|
|
@@ -45,7 +45,7 @@ const RegisterConfirmModal = ({
|
|
|
45
45
|
"Email didn't arrive?",
|
|
46
46
|
/* @__PURE__ */ jsx("br", {})
|
|
47
47
|
] }),
|
|
48
|
-
/* @__PURE__ */ jsx(TextLink, { to: "", onClick: onResend, disabled: cooldown?.isDisabled, children: isActionLoading === "resend" ? "Resending email" : "Resend email" }),
|
|
48
|
+
/* @__PURE__ */ jsx(TextLink, { to: "", "data-cy": "register-confirm-modal-resend-email", onClick: onResend, disabled: cooldown?.isDisabled, children: isActionLoading === "resend" ? "Resending email" : "Resend email" }),
|
|
49
49
|
/* @__PURE__ */ jsx(ComponentWrapper, { noPaddingVertical: true, noPaddingHorizontal: true, children: /* @__PURE__ */ jsx(FormError, { show: popupError.popup === "resend", children: popupError.message }) }),
|
|
50
50
|
/* @__PURE__ */ jsx(ComponentWrapper, { noPaddingVertical: true, noPaddingHorizontal: true, children: /* @__PURE__ */ jsx(FormError, { show: popupSuccess.popup === "resend", children: popupSuccess.message }) }),
|
|
51
51
|
/* @__PURE__ */ jsx(ComponentWrapper, { noPaddingBottom: true, noPaddingHorizontal: true, children: cooldown?.isDisabled && /* @__PURE__ */ jsx(FormError, { show: cooldown?.isDisabled, children: `You can resend email in ${cooldown?.secondsRemaining} seconds` }) })
|
|
@@ -93,7 +93,17 @@ const RegisterModal = (props) => {
|
|
|
93
93
|
/* @__PURE__ */ jsx(ModalInner, { modalBot: true, children: /* @__PURE__ */ jsxs(ModalLinkWrap, { children: [
|
|
94
94
|
"Already have an account?",
|
|
95
95
|
" ",
|
|
96
|
-
/* @__PURE__ */ jsx(
|
|
96
|
+
/* @__PURE__ */ jsx(
|
|
97
|
+
ModalLink,
|
|
98
|
+
{
|
|
99
|
+
to: "#",
|
|
100
|
+
as: "button",
|
|
101
|
+
type: "button",
|
|
102
|
+
"data-cy": "register-modal-switch-to-login",
|
|
103
|
+
onClick: onModalSwitch,
|
|
104
|
+
children: "Log in"
|
|
105
|
+
}
|
|
106
|
+
)
|
|
97
107
|
] }) })
|
|
98
108
|
] }),
|
|
99
109
|
/* @__PURE__ */ jsx(Column, { part: 8, children: /* @__PURE__ */ jsx(ModalInner, { children: /* @__PURE__ */ jsx(
|
|
@@ -148,7 +158,8 @@ const RegisterModal = (props) => {
|
|
|
148
158
|
error: !!errors.email,
|
|
149
159
|
touched: !!touched.email,
|
|
150
160
|
readOnly: email ? true : false,
|
|
151
|
-
autoComplete: "email"
|
|
161
|
+
autoComplete: "email",
|
|
162
|
+
"data-cy": "register-modal-email-input"
|
|
152
163
|
}
|
|
153
164
|
),
|
|
154
165
|
/* @__PURE__ */ jsx(FormError, { show: errors.email && touched.email, children: errors.email })
|
|
@@ -167,7 +178,8 @@ const RegisterModal = (props) => {
|
|
|
167
178
|
error: !!errors.password,
|
|
168
179
|
touched: !!touched.password,
|
|
169
180
|
info: "For a stronger password, try a mix of lowercase, capitals, numbers and special characters.",
|
|
170
|
-
autoComplete: "new-password"
|
|
181
|
+
autoComplete: "new-password",
|
|
182
|
+
"data-cy": "register-modal-password-input"
|
|
171
183
|
}
|
|
172
184
|
),
|
|
173
185
|
/* @__PURE__ */ jsx(FormError, { show: errors.password && touched.password, children: errors.password }),
|
|
@@ -187,7 +199,8 @@ const RegisterModal = (props) => {
|
|
|
187
199
|
onChange: handleChange,
|
|
188
200
|
onBlur: handleBlur,
|
|
189
201
|
error: !!errors.newsletter,
|
|
190
|
-
touched: !!touched.newsletter
|
|
202
|
+
touched: !!touched.newsletter,
|
|
203
|
+
"data-cy": "register-modal-newsletter-checkbox"
|
|
191
204
|
}
|
|
192
205
|
),
|
|
193
206
|
/* @__PURE__ */ jsx(FormError, { show: errors.newsletter && touched.newsletter, children: errors.newsletter })
|
|
@@ -198,12 +211,14 @@ const RegisterModal = (props) => {
|
|
|
198
211
|
{
|
|
199
212
|
id: privacyTermsCheckbox.title,
|
|
200
213
|
name: "terms",
|
|
214
|
+
"data-cy": "register-modal-terms-checkbox",
|
|
201
215
|
text: parse(privacyTermsCheckbox.agreementText, {
|
|
202
216
|
replace: (domNode) => {
|
|
203
217
|
if (domNode.type === "tag" && domNode.name === "u") {
|
|
204
218
|
return /* @__PURE__ */ jsx(
|
|
205
219
|
TermsStyled,
|
|
206
220
|
{
|
|
221
|
+
"data-cy": "register-modal-privacy-terms-link",
|
|
207
222
|
onClick: (e) => {
|
|
208
223
|
e.stopPropagation();
|
|
209
224
|
e.preventDefault();
|
|
@@ -227,7 +242,17 @@ const RegisterModal = (props) => {
|
|
|
227
242
|
/* @__PURE__ */ jsx(FormError, { show: errors.terms && touched.terms, withMarginLeft: true, children: errors.terms })
|
|
228
243
|
] })
|
|
229
244
|
] }),
|
|
230
|
-
/* @__PURE__ */ jsx(ComponentWrapper, { noPaddingBottom: true, noPaddingHorizontal: true, children: /* @__PURE__ */ jsx(
|
|
245
|
+
/* @__PURE__ */ jsx(ComponentWrapper, { noPaddingBottom: true, noPaddingHorizontal: true, children: /* @__PURE__ */ jsx(
|
|
246
|
+
Button,
|
|
247
|
+
{
|
|
248
|
+
type: "submit",
|
|
249
|
+
fluid: true,
|
|
250
|
+
disabled: submitDisabled,
|
|
251
|
+
id: "signup-button",
|
|
252
|
+
"data-cy": "register-modal-submit",
|
|
253
|
+
children: isActionLoading === "signUp" ? "Creating account" : "Create account"
|
|
254
|
+
}
|
|
255
|
+
) }),
|
|
231
256
|
/* @__PURE__ */ jsx(ComponentWrapper, { paddingVeticalHalf: true, noPaddingHorizontal: true, children: /* @__PURE__ */ jsx(FormError, { show: popupError.popup === "register", children: popupError.message }) })
|
|
232
257
|
] });
|
|
233
258
|
}
|
|
@@ -29,7 +29,7 @@ const ResetConfirmModal = ({ isModalOpen, onModalClose, onModalSwitch }) => /* @
|
|
|
29
29
|
] }),
|
|
30
30
|
/* @__PURE__ */ jsx("br", {}),
|
|
31
31
|
/* @__PURE__ */ jsx("br", {}),
|
|
32
|
-
/* @__PURE__ */ jsx(Button, { onClick: onModalSwitch, children: "Login" })
|
|
32
|
+
/* @__PURE__ */ jsx(Button, { "data-cy": "reset-confirm-modal-login", onClick: onModalSwitch, children: "Login" })
|
|
33
33
|
] }) }) }) }),
|
|
34
34
|
/* @__PURE__ */ jsx(RedBar, {})
|
|
35
35
|
] });
|
|
@@ -40,7 +40,7 @@ const ResetPasswordModal = ({
|
|
|
40
40
|
] }) }),
|
|
41
41
|
/* @__PURE__ */ jsx(ModalInner, { modalBot: true, children: /* @__PURE__ */ jsxs(ModalLinkWrap, { children: [
|
|
42
42
|
"Remember your password? ",
|
|
43
|
-
/* @__PURE__ */ jsx(ModalLink, { to: "#", onClick: onModalSwitch, children: "Log in" })
|
|
43
|
+
/* @__PURE__ */ jsx(ModalLink, { "data-cy": "reset-password-modal-switch-to-login", to: "#", onClick: onModalSwitch, children: "Log in" })
|
|
44
44
|
] }) })
|
|
45
45
|
] }),
|
|
46
46
|
/* @__PURE__ */ jsx(Column, { part: 8, children: /* @__PURE__ */ jsx(ModalInner, { children: /* @__PURE__ */ jsx(
|
|
@@ -75,7 +75,8 @@ const ResetPasswordModal = ({
|
|
|
75
75
|
error: !!errors.password,
|
|
76
76
|
touched: !!touched.password,
|
|
77
77
|
info: "For a stronger password, try a mix of lowercase, capitals, numbers and special characters.",
|
|
78
|
-
autoComplete: "new-password"
|
|
78
|
+
autoComplete: "new-password",
|
|
79
|
+
"data-cy": "reset-password-modal-password-input"
|
|
79
80
|
}
|
|
80
81
|
),
|
|
81
82
|
/* @__PURE__ */ jsx(FormError, { show: errors.password && touched.password, children: errors.password }),
|
|
@@ -101,12 +102,23 @@ const ResetPasswordModal = ({
|
|
|
101
102
|
onBlur: handleBlur,
|
|
102
103
|
error: !!errors.confirmPassword,
|
|
103
104
|
touched: !!touched.confirmPassword,
|
|
104
|
-
autoComplete: "new-password"
|
|
105
|
+
autoComplete: "new-password",
|
|
106
|
+
"data-cy": "reset-password-modal-confirm-password-input"
|
|
105
107
|
}
|
|
106
108
|
),
|
|
107
109
|
/* @__PURE__ */ jsx(FormError, { show: errors.confirmPassword && touched.confirmPassword, children: errors.confirmPassword })
|
|
108
110
|
] }) }),
|
|
109
|
-
/* @__PURE__ */ jsx(ComponentWrapper, { noPaddingBottom: true, noPaddingHorizontal: true, children: /* @__PURE__ */ jsx(
|
|
111
|
+
/* @__PURE__ */ jsx(ComponentWrapper, { noPaddingBottom: true, noPaddingHorizontal: true, children: /* @__PURE__ */ jsx(
|
|
112
|
+
Button,
|
|
113
|
+
{
|
|
114
|
+
type: "submit",
|
|
115
|
+
id: "reset-password-submit-btn",
|
|
116
|
+
"data-cy": "reset-password-modal-submit",
|
|
117
|
+
fluid: true,
|
|
118
|
+
disabled: submitDisabled,
|
|
119
|
+
children: isActionLoading === "resetPassword" ? "Resetting" : "Reset"
|
|
120
|
+
}
|
|
121
|
+
) }),
|
|
110
122
|
/* @__PURE__ */ jsx(ComponentWrapper, { paddingVeticalHalf: true, noPaddingHorizontal: true, children: /* @__PURE__ */ jsx(
|
|
111
123
|
FormError,
|
|
112
124
|
{
|
|
@@ -17,6 +17,7 @@ const StepControllerProgress = ({
|
|
|
17
17
|
return /* @__PURE__ */ jsx(Container, { children: /* @__PURE__ */ jsx(Wrap, { children: /* @__PURE__ */ jsx(Items, { children: stepsProgressList.map((item, key) => /* @__PURE__ */ jsx(
|
|
18
18
|
Item,
|
|
19
19
|
{
|
|
20
|
+
"data-cy": item.dataCy ?? `step-progress-${item.id}`,
|
|
20
21
|
isDone: doneStepsIndexes.includes(key),
|
|
21
22
|
isActive: key === activeStepIndex,
|
|
22
23
|
onClick: () => handleItemClick(item, key)
|
|
@@ -13,7 +13,8 @@ const Switch = (props) => {
|
|
|
13
13
|
value1Color,
|
|
14
14
|
value2Color,
|
|
15
15
|
hideValues = false,
|
|
16
|
-
indicatorStyle
|
|
16
|
+
indicatorStyle,
|
|
17
|
+
dataCy
|
|
17
18
|
} = props;
|
|
18
19
|
const [value, setValue] = useState();
|
|
19
20
|
useEffect(() => {
|
|
@@ -29,7 +30,7 @@ const Switch = (props) => {
|
|
|
29
30
|
}, 1e3);
|
|
30
31
|
}
|
|
31
32
|
};
|
|
32
|
-
return /* @__PURE__ */ jsxs(Container, { mobile, children: [
|
|
33
|
+
return /* @__PURE__ */ jsxs(Container, { mobile, "data-cy": dataCy, children: [
|
|
33
34
|
!hideValues && /* @__PURE__ */ jsx(Value, { active: value === value1, onClick: () => setValue(value1), dark, children: value1 }),
|
|
34
35
|
/* @__PURE__ */ jsx(
|
|
35
36
|
Indicator,
|
|
@@ -54,7 +55,8 @@ Switch.propTypes = {
|
|
|
54
55
|
mobile: PropTypes.bool,
|
|
55
56
|
dark: PropTypes.bool,
|
|
56
57
|
hideValues: PropTypes.bool,
|
|
57
|
-
indicatorStyle: PropTypes.object
|
|
58
|
+
indicatorStyle: PropTypes.object,
|
|
59
|
+
dataCy: PropTypes.string
|
|
58
60
|
};
|
|
59
61
|
var stdin_default = Switch;
|
|
60
62
|
export {
|
|
@@ -8,6 +8,7 @@ import setRedirectCookie from "../../utils/set-redirect-cookie.js";
|
|
|
8
8
|
import { AuthProvider } from "../../context/AuthContext.js";
|
|
9
9
|
import { ToDoModal } from "./ToDoList.js";
|
|
10
10
|
import "react-router-dom";
|
|
11
|
+
import "mixpanel-browser";
|
|
11
12
|
import "../Text/Text.styles.js";
|
|
12
13
|
import "yup";
|
|
13
14
|
import "formik";
|
|
@@ -32,6 +32,8 @@ import { emailRegex } from "../../constants/globalVariables.js";
|
|
|
32
32
|
const renderSuccessModal = (continueUrl) => /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx(
|
|
33
33
|
stdin_default$1,
|
|
34
34
|
{
|
|
35
|
+
continueButtonId: "verify-email-success-continue-btn",
|
|
36
|
+
continueButtonDataCy: "verify-email-success-continue",
|
|
35
37
|
onClick: () => {
|
|
36
38
|
window.open(continueUrl, "_self");
|
|
37
39
|
},
|
|
@@ -87,12 +89,22 @@ const RenderErrorModal = (props) => {
|
|
|
87
89
|
onChange: handleChange,
|
|
88
90
|
onBlur: handleBlur,
|
|
89
91
|
error: !!errors.email,
|
|
90
|
-
touched: !!touched.email
|
|
92
|
+
touched: !!touched.email,
|
|
93
|
+
"data-cy": "verify-email-modal-email-input"
|
|
91
94
|
}
|
|
92
95
|
),
|
|
93
96
|
/* @__PURE__ */ jsx(FormError, { show: errors.email && touched.email, children: errors.email })
|
|
94
97
|
] }) }),
|
|
95
|
-
/* @__PURE__ */ jsx(ComponentWrapper, { noPaddingBottom: true, noPaddingHorizontal: true, children: /* @__PURE__ */ jsx(
|
|
98
|
+
/* @__PURE__ */ jsx(ComponentWrapper, { noPaddingBottom: true, noPaddingHorizontal: true, children: /* @__PURE__ */ jsx(
|
|
99
|
+
Button,
|
|
100
|
+
{
|
|
101
|
+
type: "submit",
|
|
102
|
+
id: "verify-email-submit-btn",
|
|
103
|
+
"data-cy": "verify-email-modal-resend-submit",
|
|
104
|
+
disabled: submitDisabled,
|
|
105
|
+
children: isActionLoading === "resend" ? "Resending email" : "Resend email"
|
|
106
|
+
}
|
|
107
|
+
) }),
|
|
96
108
|
/* @__PURE__ */ jsx(ComponentWrapper, { paddingVeticalHalf: true, noPaddingHorizontal: true, children: /* @__PURE__ */ jsx(FormError, { show: popupError.popup === "resend", children: popupError.message }) }),
|
|
97
109
|
isDisabled && /* @__PURE__ */ jsx(ComponentWrapper, { noPaddingVertical: true, noPaddingHorizontal: true, children: /* @__PURE__ */ jsx(FormError, { show: isDisabled, children: `You can try again in ${secondsRemaining} seconds` }) })
|
|
98
110
|
] });
|
|
@@ -40,6 +40,7 @@ import fetchDataPublic from "../../api/fetchDataPublic.js";
|
|
|
40
40
|
import { withRouter } from "../../utils/withRouter.js";
|
|
41
41
|
import { checkActionCode } from "firebase/auth";
|
|
42
42
|
import { auth } from "../../firebase-config.js";
|
|
43
|
+
import { track } from "../../analytics/index.js";
|
|
43
44
|
const Outer = styled.div.withConfig({
|
|
44
45
|
shouldForwardProp: (props) => !["fixed"].includes(props)
|
|
45
46
|
})`
|
|
@@ -454,6 +455,7 @@ const _HeaderHoClass = class _HeaderHoClass extends Component {
|
|
|
454
455
|
listName: "newsletter"
|
|
455
456
|
});
|
|
456
457
|
}
|
|
458
|
+
track("signup_account_created", { newsletter_opt_in: !!_userInfo.newsletter });
|
|
457
459
|
this.setUserInfo(_userInfo);
|
|
458
460
|
this.switchOpenModal("signUp", "confirm");
|
|
459
461
|
this.setIsActionLoading(void 0);
|
|
@@ -17,13 +17,13 @@ const LinkIcon = () => /* @__PURE__ */ jsxs(
|
|
|
17
17
|
/* @__PURE__ */ jsx("g", { children: /* @__PURE__ */ jsx("g", { children: /* @__PURE__ */ jsx(
|
|
18
18
|
"path",
|
|
19
19
|
{
|
|
20
|
-
d: "M312.453,199.601c-6.066-6.102-12.792-11.511-20.053-16.128c-19.232-12.315-41.59-18.859-64.427-18.859\n c-31.697-0.059-62.106,12.535-84.48,34.987L34.949,308.23c-22.336,22.379-34.89,52.7-34.91,84.318\n c-0.042,65.98,53.41,119.501,119.39,119.543c31.648,0.11,62.029-12.424,84.395-34.816l89.6-89.6\n c1.628-1.614,2.537-3.816,2.524-6.108c-0.027-4.713-3.87-8.511-8.583-8.484h-3.413c-18.72,0.066-37.273-3.529-54.613-10.581\n c-3.195-1.315-6.867-0.573-9.301,1.877l-64.427,64.512c-20.006,20.006-52.442,20.006-72.448,0\n c-20.006-20.006-20.006-52.442,0-72.448l108.971-108.885c19.99-19.965,52.373-19.965,72.363,0\n c13.472,12.679,34.486,12.679,47.957,0c5.796-5.801,9.31-13.495,9.899-21.675C322.976,216.108,319.371,206.535,312.453,199.601z"
|
|
20
|
+
d: "M312.453,199.601c-6.066-6.102-12.792-11.511-20.053-16.128c-19.232-12.315-41.59-18.859-64.427-18.859\r\n c-31.697-0.059-62.106,12.535-84.48,34.987L34.949,308.23c-22.336,22.379-34.89,52.7-34.91,84.318\r\n c-0.042,65.98,53.41,119.501,119.39,119.543c31.648,0.11,62.029-12.424,84.395-34.816l89.6-89.6\r\n c1.628-1.614,2.537-3.816,2.524-6.108c-0.027-4.713-3.87-8.511-8.583-8.484h-3.413c-18.72,0.066-37.273-3.529-54.613-10.581\r\n c-3.195-1.315-6.867-0.573-9.301,1.877l-64.427,64.512c-20.006,20.006-52.442,20.006-72.448,0\r\n c-20.006-20.006-20.006-52.442,0-72.448l108.971-108.885c19.99-19.965,52.373-19.965,72.363,0\r\n c13.472,12.679,34.486,12.679,47.957,0c5.796-5.801,9.31-13.495,9.899-21.675C322.976,216.108,319.371,206.535,312.453,199.601z"
|
|
21
21
|
}
|
|
22
22
|
) }) }),
|
|
23
23
|
/* @__PURE__ */ jsx("g", { children: /* @__PURE__ */ jsx("g", { children: /* @__PURE__ */ jsx(
|
|
24
24
|
"path",
|
|
25
25
|
{
|
|
26
|
-
d: "M477.061,34.993c-46.657-46.657-122.303-46.657-168.96,0l-89.515,89.429c-2.458,2.47-3.167,6.185-1.792,9.387\n c1.359,3.211,4.535,5.272,8.021,5.205h3.157c18.698-0.034,37.221,3.589,54.528,10.667c3.195,1.315,6.867,0.573,9.301-1.877\n l64.256-64.171c20.006-20.006,52.442-20.006,72.448,0c20.006,20.006,20.006,52.442,0,72.448l-80.043,79.957l-0.683,0.768\n l-27.989,27.819c-19.99,19.965-52.373,19.965-72.363,0c-13.472-12.679-34.486-12.679-47.957,0\n c-5.833,5.845-9.35,13.606-9.899,21.845c-0.624,9.775,2.981,19.348,9.899,26.283c9.877,9.919,21.433,18.008,34.133,23.893\n c1.792,0.853,3.584,1.536,5.376,2.304c1.792,0.768,3.669,1.365,5.461,2.048c1.792,0.683,3.669,1.28,5.461,1.792l5.035,1.365\n c3.413,0.853,6.827,1.536,10.325,2.133c4.214,0.626,8.458,1.025,12.715,1.195h5.973h0.512l5.12-0.597\n c1.877-0.085,3.84-0.512,6.059-0.512h2.901l5.888-0.853l2.731-0.512l4.949-1.024h0.939c20.961-5.265,40.101-16.118,55.381-31.403\n l108.629-108.629C523.718,157.296,523.718,81.65,477.061,34.993z"
|
|
26
|
+
d: "M477.061,34.993c-46.657-46.657-122.303-46.657-168.96,0l-89.515,89.429c-2.458,2.47-3.167,6.185-1.792,9.387\r\n c1.359,3.211,4.535,5.272,8.021,5.205h3.157c18.698-0.034,37.221,3.589,54.528,10.667c3.195,1.315,6.867,0.573,9.301-1.877\r\n l64.256-64.171c20.006-20.006,52.442-20.006,72.448,0c20.006,20.006,20.006,52.442,0,72.448l-80.043,79.957l-0.683,0.768\r\n l-27.989,27.819c-19.99,19.965-52.373,19.965-72.363,0c-13.472-12.679-34.486-12.679-47.957,0\r\n c-5.833,5.845-9.35,13.606-9.899,21.845c-0.624,9.775,2.981,19.348,9.899,26.283c9.877,9.919,21.433,18.008,34.133,23.893\r\n c1.792,0.853,3.584,1.536,5.376,2.304c1.792,0.768,3.669,1.365,5.461,2.048c1.792,0.683,3.669,1.28,5.461,1.792l5.035,1.365\r\n c3.413,0.853,6.827,1.536,10.325,2.133c4.214,0.626,8.458,1.025,12.715,1.195h5.973h0.512l5.12-0.597\r\n c1.877-0.085,3.84-0.512,6.059-0.512h2.901l5.888-0.853l2.731-0.512l4.949-1.024h0.939c20.961-5.265,40.101-16.118,55.381-31.403\r\n l108.629-108.629C523.718,157.296,523.718,81.65,477.061,34.993z"
|
|
27
27
|
}
|
|
28
28
|
) }) }),
|
|
29
29
|
/* @__PURE__ */ jsx("g", {}),
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { jsxs, Fragment, jsx } from "react/jsx-runtime";
|
|
2
2
|
import "react";
|
|
3
|
+
import { track } from "../../analytics/index.js";
|
|
3
4
|
import { Text } from "../Text/Text.styles.js";
|
|
4
5
|
import { useNavigate } from "react-router-dom";
|
|
5
6
|
import { ComponentWrapper } from "../ComponentWrapper/ComponentWrapper.styles.js";
|
|
@@ -10,12 +11,32 @@ const noop = () => {
|
|
|
10
11
|
const RegisterTaxIdComplete = ({ showBackButton, onClick = noop }) => {
|
|
11
12
|
let navigate = useNavigate();
|
|
12
13
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
13
|
-
showBackButton && /* @__PURE__ */ jsx(ComponentWrapper, { noPaddingVertical: true, children: /* @__PURE__ */ jsx(
|
|
14
|
+
showBackButton && /* @__PURE__ */ jsx(ComponentWrapper, { noPaddingVertical: true, children: /* @__PURE__ */ jsx(
|
|
15
|
+
TextButton,
|
|
16
|
+
{
|
|
17
|
+
"data-cy": "tax-id-complete-back-button",
|
|
18
|
+
onClick: () => {
|
|
19
|
+
track("tax_id_back_clicked", { surface: "tax_id_complete" });
|
|
20
|
+
navigate("/verify-identity");
|
|
21
|
+
},
|
|
22
|
+
children: "Back to verify identity"
|
|
23
|
+
}
|
|
24
|
+
) }),
|
|
14
25
|
/* @__PURE__ */ jsx(ComponentWrapper, { children: /* @__PURE__ */ jsxs(Text, { children: [
|
|
15
26
|
/* @__PURE__ */ jsx("h1", { children: "Your Tax Id has been submitted" }),
|
|
16
27
|
/* @__PURE__ */ jsx("p", { children: "You have successfully submitted your Tax ID information. You will be ready to invest once you have completed all required steps on your checklist. Please continue!" })
|
|
17
28
|
] }) }),
|
|
18
|
-
/* @__PURE__ */ jsx(ComponentWrapper, { noPaddingTop: true, children: /* @__PURE__ */ jsx(
|
|
29
|
+
/* @__PURE__ */ jsx(ComponentWrapper, { noPaddingTop: true, children: /* @__PURE__ */ jsx(
|
|
30
|
+
Button,
|
|
31
|
+
{
|
|
32
|
+
"data-cy": "tax-id-complete-continue-button",
|
|
33
|
+
onClick: () => {
|
|
34
|
+
track("tax_id_complete_continue_clicked");
|
|
35
|
+
onClick();
|
|
36
|
+
},
|
|
37
|
+
children: "Continue"
|
|
38
|
+
}
|
|
39
|
+
) })
|
|
19
40
|
] });
|
|
20
41
|
};
|
|
21
42
|
var stdin_default = RegisterTaxIdComplete;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { jsx, Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { useState, useEffect, useRef } from "react";
|
|
3
|
+
import { track } from "../../analytics/index.js";
|
|
3
4
|
import { Modal } from "../Modal/Modal.js";
|
|
4
5
|
import stdin_default$3 from "./register-taxid.js";
|
|
5
6
|
import stdin_default$1 from "../ComponentScroll/ComponentScroll.js";
|
|
@@ -20,13 +21,22 @@ const RegisterTaxIdFlow = ({
|
|
|
20
21
|
onComplete();
|
|
21
22
|
}
|
|
22
23
|
}, [showComplete]);
|
|
24
|
+
useEffect(() => {
|
|
25
|
+
if (showFlow) {
|
|
26
|
+
track("tax_id_modal_opened");
|
|
27
|
+
}
|
|
28
|
+
}, [showFlow]);
|
|
29
|
+
const handleClose = () => {
|
|
30
|
+
track("tax_id_modal_closed", { flow_step: showComplete ? "complete" : "form" });
|
|
31
|
+
setShowFlow(false);
|
|
32
|
+
};
|
|
23
33
|
const scrollRef = useRef();
|
|
24
34
|
const handleScroll = (values, ref) => {
|
|
25
35
|
if (ref) {
|
|
26
36
|
scrollRef.current = ref;
|
|
27
37
|
}
|
|
28
38
|
};
|
|
29
|
-
return /* @__PURE__ */ jsx(Modal, { fullscreen: true, isOpen: showFlow, onClose:
|
|
39
|
+
return /* @__PURE__ */ jsx(Modal, { fullscreen: true, isOpen: showFlow, onClose: handleClose, children: /* @__PURE__ */ jsx(ModalInner, { noPaddingHorizontal: true, children: /* @__PURE__ */ jsx(stdin_default$1, { handleScroll, fullHeight: true, children: showComplete ? /* @__PURE__ */ jsx(
|
|
30
40
|
stdin_default$2,
|
|
31
41
|
{
|
|
32
42
|
showBackButton,
|