@oxyhq/services 5.11.10 → 5.11.11

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 (170) hide show
  1. package/lib/commonjs/ui/components/AnimationExample.js +1 -1
  2. package/lib/commonjs/ui/components/AnimationExample.js.map +1 -1
  3. package/lib/commonjs/ui/components/Header.js +2 -2
  4. package/lib/commonjs/ui/components/Header.js.map +1 -1
  5. package/lib/commonjs/ui/components/OxyProvider.js.map +1 -1
  6. package/lib/commonjs/ui/components/StepBasedScreen.README.md +337 -0
  7. package/lib/commonjs/ui/components/StepBasedScreen.js +361 -0
  8. package/lib/commonjs/ui/components/StepBasedScreen.js.map +1 -0
  9. package/lib/commonjs/ui/components/icon/OxyIcon.js +3 -3
  10. package/lib/commonjs/ui/components/icon/OxyIcon.js.map +1 -1
  11. package/lib/commonjs/ui/components/internal/PinInput.js +1 -1
  12. package/lib/commonjs/ui/components/internal/PinInput.js.map +1 -1
  13. package/lib/commonjs/ui/components/photogrid/JustifiedPhotoGrid.js.map +1 -1
  14. package/lib/commonjs/ui/context/OxyContext.js +7 -7
  15. package/lib/commonjs/ui/context/OxyContext.js.map +1 -1
  16. package/lib/commonjs/ui/screens/ProfileScreen.js +55 -55
  17. package/lib/commonjs/ui/screens/ProfileScreen.js.map +1 -1
  18. package/lib/commonjs/ui/screens/RecoverAccountScreen.js +87 -219
  19. package/lib/commonjs/ui/screens/RecoverAccountScreen.js.map +1 -1
  20. package/lib/commonjs/ui/screens/SignInScreen.js +138 -235
  21. package/lib/commonjs/ui/screens/SignInScreen.js.map +1 -1
  22. package/lib/commonjs/ui/screens/SignUpScreen.js +139 -742
  23. package/lib/commonjs/ui/screens/SignUpScreen.js.map +1 -1
  24. package/lib/commonjs/ui/screens/internal/SignInPasswordStep.js +3 -3
  25. package/lib/commonjs/ui/screens/internal/SignInPasswordStep.js.map +1 -1
  26. package/lib/commonjs/ui/screens/internal/SignInUsernameStep.js +2 -2
  27. package/lib/commonjs/ui/screens/internal/SignInUsernameStep.js.map +1 -1
  28. package/lib/commonjs/ui/screens/steps/RecoverRequestStep.js +110 -0
  29. package/lib/commonjs/ui/screens/steps/RecoverRequestStep.js.map +1 -0
  30. package/lib/commonjs/ui/screens/steps/RecoverSuccessStep.js +138 -0
  31. package/lib/commonjs/ui/screens/steps/RecoverSuccessStep.js.map +1 -0
  32. package/lib/commonjs/ui/screens/steps/RecoverVerifyStep.js +141 -0
  33. package/lib/commonjs/ui/screens/steps/RecoverVerifyStep.js.map +1 -0
  34. package/lib/commonjs/ui/screens/steps/SignInPasswordStep.js +165 -0
  35. package/lib/commonjs/ui/screens/steps/SignInPasswordStep.js.map +1 -0
  36. package/lib/commonjs/ui/screens/steps/SignInUsernameStep.js +150 -0
  37. package/lib/commonjs/ui/screens/steps/SignInUsernameStep.js.map +1 -0
  38. package/lib/commonjs/ui/screens/steps/SignUpIdentityStep.js +171 -0
  39. package/lib/commonjs/ui/screens/steps/SignUpIdentityStep.js.map +1 -0
  40. package/lib/commonjs/ui/screens/steps/SignUpSecurityStep.js +163 -0
  41. package/lib/commonjs/ui/screens/steps/SignUpSecurityStep.js.map +1 -0
  42. package/lib/commonjs/ui/screens/steps/SignUpSummaryStep.js +170 -0
  43. package/lib/commonjs/ui/screens/steps/SignUpSummaryStep.js.map +1 -0
  44. package/lib/commonjs/ui/screens/steps/SignUpWelcomeStep.js +72 -0
  45. package/lib/commonjs/ui/screens/steps/SignUpWelcomeStep.js.map +1 -0
  46. package/lib/module/ui/components/AnimationExample.js +1 -1
  47. package/lib/module/ui/components/AnimationExample.js.map +1 -1
  48. package/lib/module/ui/components/Header.js +2 -2
  49. package/lib/module/ui/components/Header.js.map +1 -1
  50. package/lib/module/ui/components/OxyProvider.js.map +1 -1
  51. package/lib/module/ui/components/Section.js.map +1 -1
  52. package/lib/module/ui/components/SectionTitle.js.map +1 -1
  53. package/lib/module/ui/components/StepBasedScreen.README.md +337 -0
  54. package/lib/module/ui/components/StepBasedScreen.js +356 -0
  55. package/lib/module/ui/components/StepBasedScreen.js.map +1 -0
  56. package/lib/module/ui/components/icon/FAIRWalletIcon.js.map +1 -1
  57. package/lib/module/ui/components/icon/OxyIcon.js +3 -3
  58. package/lib/module/ui/components/icon/OxyIcon.js.map +1 -1
  59. package/lib/module/ui/components/internal/PinInput.js +1 -1
  60. package/lib/module/ui/components/internal/PinInput.js.map +1 -1
  61. package/lib/module/ui/components/photogrid/JustifiedPhotoGrid.js.map +1 -1
  62. package/lib/module/ui/context/OxyContext.js +7 -7
  63. package/lib/module/ui/context/OxyContext.js.map +1 -1
  64. package/lib/module/ui/screens/ProfileScreen.js +55 -55
  65. package/lib/module/ui/screens/ProfileScreen.js.map +1 -1
  66. package/lib/module/ui/screens/RecoverAccountScreen.js +91 -222
  67. package/lib/module/ui/screens/RecoverAccountScreen.js.map +1 -1
  68. package/lib/module/ui/screens/SignInScreen.js +140 -237
  69. package/lib/module/ui/screens/SignInScreen.js.map +1 -1
  70. package/lib/module/ui/screens/SignUpScreen.js +141 -743
  71. package/lib/module/ui/screens/SignUpScreen.js.map +1 -1
  72. package/lib/module/ui/screens/internal/SignInPasswordStep.js +3 -3
  73. package/lib/module/ui/screens/internal/SignInPasswordStep.js.map +1 -1
  74. package/lib/module/ui/screens/internal/SignInUsernameStep.js +2 -2
  75. package/lib/module/ui/screens/internal/SignInUsernameStep.js.map +1 -1
  76. package/lib/module/ui/screens/steps/RecoverRequestStep.js +105 -0
  77. package/lib/module/ui/screens/steps/RecoverRequestStep.js.map +1 -0
  78. package/lib/module/ui/screens/steps/RecoverSuccessStep.js +133 -0
  79. package/lib/module/ui/screens/steps/RecoverSuccessStep.js.map +1 -0
  80. package/lib/module/ui/screens/steps/RecoverVerifyStep.js +136 -0
  81. package/lib/module/ui/screens/steps/RecoverVerifyStep.js.map +1 -0
  82. package/lib/module/ui/screens/steps/SignInPasswordStep.js +160 -0
  83. package/lib/module/ui/screens/steps/SignInPasswordStep.js.map +1 -0
  84. package/lib/module/ui/screens/steps/SignInUsernameStep.js +145 -0
  85. package/lib/module/ui/screens/steps/SignInUsernameStep.js.map +1 -0
  86. package/lib/module/ui/screens/steps/SignUpIdentityStep.js +166 -0
  87. package/lib/module/ui/screens/steps/SignUpIdentityStep.js.map +1 -0
  88. package/lib/module/ui/screens/steps/SignUpSecurityStep.js +158 -0
  89. package/lib/module/ui/screens/steps/SignUpSecurityStep.js.map +1 -0
  90. package/lib/module/ui/screens/steps/SignUpSummaryStep.js +165 -0
  91. package/lib/module/ui/screens/steps/SignUpSummaryStep.js.map +1 -0
  92. package/lib/module/ui/screens/steps/SignUpWelcomeStep.js +67 -0
  93. package/lib/module/ui/screens/steps/SignUpWelcomeStep.js.map +1 -0
  94. package/lib/typescript/models/interfaces.d.ts +4 -3
  95. package/lib/typescript/models/interfaces.d.ts.map +1 -1
  96. package/lib/typescript/ui/components/AnimationExample.d.ts +1 -1
  97. package/lib/typescript/ui/components/AnimationExample.d.ts.map +1 -1
  98. package/lib/typescript/ui/components/OxyPayButton.d.ts +2 -2
  99. package/lib/typescript/ui/components/OxyPayButton.d.ts.map +1 -1
  100. package/lib/typescript/ui/components/Section.d.ts +2 -1
  101. package/lib/typescript/ui/components/Section.d.ts.map +1 -1
  102. package/lib/typescript/ui/components/SectionTitle.d.ts +2 -1
  103. package/lib/typescript/ui/components/SectionTitle.d.ts.map +1 -1
  104. package/lib/typescript/ui/components/StepBasedScreen.d.ts +24 -0
  105. package/lib/typescript/ui/components/StepBasedScreen.d.ts.map +1 -0
  106. package/lib/typescript/ui/components/icon/FAIRWalletIcon.d.ts +2 -1
  107. package/lib/typescript/ui/components/icon/FAIRWalletIcon.d.ts.map +1 -1
  108. package/lib/typescript/ui/components/icon/OxyIcon.d.ts +1 -1
  109. package/lib/typescript/ui/components/icon/OxyIcon.d.ts.map +1 -1
  110. package/lib/typescript/ui/components/internal/PinInput.d.ts +9 -1
  111. package/lib/typescript/ui/components/internal/PinInput.d.ts.map +1 -1
  112. package/lib/typescript/ui/context/OxyContext.d.ts +2 -1
  113. package/lib/typescript/ui/context/OxyContext.d.ts.map +1 -1
  114. package/lib/typescript/ui/screens/PaymentGatewayScreen.d.ts +2 -2
  115. package/lib/typescript/ui/screens/PaymentGatewayScreen.d.ts.map +1 -1
  116. package/lib/typescript/ui/screens/ProfileScreen.d.ts.map +1 -1
  117. package/lib/typescript/ui/screens/RecoverAccountScreen.d.ts +2 -9
  118. package/lib/typescript/ui/screens/RecoverAccountScreen.d.ts.map +1 -1
  119. package/lib/typescript/ui/screens/SignInScreen.d.ts.map +1 -1
  120. package/lib/typescript/ui/screens/SignUpScreen.d.ts +1 -1
  121. package/lib/typescript/ui/screens/SignUpScreen.d.ts.map +1 -1
  122. package/lib/typescript/ui/screens/steps/RecoverRequestStep.d.ts +21 -0
  123. package/lib/typescript/ui/screens/steps/RecoverRequestStep.d.ts.map +1 -0
  124. package/lib/typescript/ui/screens/steps/RecoverSuccessStep.d.ts +18 -0
  125. package/lib/typescript/ui/screens/steps/RecoverSuccessStep.d.ts.map +1 -0
  126. package/lib/typescript/ui/screens/steps/RecoverVerifyStep.d.ts +24 -0
  127. package/lib/typescript/ui/screens/steps/RecoverVerifyStep.d.ts.map +1 -0
  128. package/lib/typescript/ui/screens/steps/SignInPasswordStep.d.ts +27 -0
  129. package/lib/typescript/ui/screens/steps/SignInPasswordStep.d.ts.map +1 -0
  130. package/lib/typescript/ui/screens/steps/SignInUsernameStep.d.ts +27 -0
  131. package/lib/typescript/ui/screens/steps/SignInUsernameStep.d.ts.map +1 -0
  132. package/lib/typescript/ui/screens/steps/SignUpIdentityStep.d.ts +25 -0
  133. package/lib/typescript/ui/screens/steps/SignUpIdentityStep.d.ts.map +1 -0
  134. package/lib/typescript/ui/screens/steps/SignUpSecurityStep.d.ts +26 -0
  135. package/lib/typescript/ui/screens/steps/SignUpSecurityStep.d.ts.map +1 -0
  136. package/lib/typescript/ui/screens/steps/SignUpSummaryStep.d.ts +16 -0
  137. package/lib/typescript/ui/screens/steps/SignUpSummaryStep.d.ts.map +1 -0
  138. package/lib/typescript/ui/screens/steps/SignUpWelcomeStep.d.ts +13 -0
  139. package/lib/typescript/ui/screens/steps/SignUpWelcomeStep.d.ts.map +1 -0
  140. package/package.json +2 -3
  141. package/src/models/interfaces.ts +5 -3
  142. package/src/ui/components/AnimationExample.tsx +9 -8
  143. package/src/ui/components/Header.tsx +2 -2
  144. package/src/ui/components/OxyPayButton.tsx +2 -2
  145. package/src/ui/components/OxyProvider.tsx +1 -1
  146. package/src/ui/components/Section.tsx +7 -7
  147. package/src/ui/components/SectionTitle.tsx +2 -2
  148. package/src/ui/components/StepBasedScreen.README.md +337 -0
  149. package/src/ui/components/StepBasedScreen.tsx +417 -0
  150. package/src/ui/components/icon/FAIRWalletIcon.tsx +2 -2
  151. package/src/ui/components/icon/OxyIcon.tsx +10 -11
  152. package/src/ui/components/internal/PinInput.tsx +13 -4
  153. package/src/ui/components/photogrid/JustifiedPhotoGrid.tsx +1 -1
  154. package/src/ui/context/OxyContext.tsx +12 -11
  155. package/src/ui/screens/PaymentGatewayScreen.tsx +2 -2
  156. package/src/ui/screens/ProfileScreen.tsx +54 -54
  157. package/src/ui/screens/RecoverAccountScreen.tsx +98 -211
  158. package/src/ui/screens/SignInScreen.tsx +148 -271
  159. package/src/ui/screens/SignUpScreen.tsx +146 -748
  160. package/src/ui/screens/internal/SignInPasswordStep.tsx +3 -3
  161. package/src/ui/screens/internal/SignInUsernameStep.tsx +2 -2
  162. package/src/ui/screens/steps/RecoverRequestStep.tsx +130 -0
  163. package/src/ui/screens/steps/RecoverSuccessStep.tsx +131 -0
  164. package/src/ui/screens/steps/RecoverVerifyStep.tsx +153 -0
  165. package/src/ui/screens/steps/SignInPasswordStep.tsx +172 -0
  166. package/src/ui/screens/steps/SignInUsernameStep.tsx +176 -0
  167. package/src/ui/screens/steps/SignUpIdentityStep.tsx +204 -0
  168. package/src/ui/screens/steps/SignUpSecurityStep.tsx +191 -0
  169. package/src/ui/screens/steps/SignUpSummaryStep.tsx +130 -0
  170. package/src/ui/screens/steps/SignUpWelcomeStep.tsx +65 -0
@@ -0,0 +1,160 @@
1
+ "use strict";
2
+
3
+ import { useRef, useEffect } from 'react';
4
+ import { View, Text, TouchableOpacity } from 'react-native';
5
+ import { Ionicons } from '@expo/vector-icons';
6
+ import Avatar from '../../components/Avatar';
7
+ import GroupedPillButtons from '../../components/internal/GroupedPillButtons';
8
+ import TextField from '../../components/internal/TextField';
9
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
10
+ const SignInPasswordStep = ({
11
+ colors,
12
+ styles,
13
+ theme,
14
+ navigate,
15
+ prevStep,
16
+ password,
17
+ setPassword,
18
+ showPassword,
19
+ setShowPassword,
20
+ errorMessage,
21
+ setErrorMessage,
22
+ isLoading,
23
+ userProfile,
24
+ username,
25
+ handleSignIn
26
+ }) => {
27
+ const inputRef = useRef(null);
28
+ const handlePasswordChange = text => {
29
+ setPassword(text);
30
+ if (errorMessage) setErrorMessage('');
31
+ };
32
+ const handleSignInSubmit = async () => {
33
+ if (!password) {
34
+ setErrorMessage('Please enter your password.');
35
+ setTimeout(() => inputRef.current?.focus(), 0);
36
+ return;
37
+ }
38
+
39
+ // Call the actual sign-in function passed from props
40
+ await handleSignIn();
41
+ };
42
+ const togglePasswordVisibility = () => {
43
+ setShowPassword(!showPassword);
44
+ };
45
+
46
+ // Focus password input on error
47
+ useEffect(() => {
48
+ if (errorMessage) {
49
+ setTimeout(() => {
50
+ inputRef.current?.focus();
51
+ }, 0);
52
+ }
53
+ }, [errorMessage]);
54
+ return /*#__PURE__*/_jsxs(_Fragment, {
55
+ children: [/*#__PURE__*/_jsxs(View, {
56
+ style: styles.modernUserProfileContainer,
57
+ children: [/*#__PURE__*/_jsxs(View, {
58
+ style: styles.avatarContainer,
59
+ children: [/*#__PURE__*/_jsx(Avatar, {
60
+ name: userProfile?.displayName || userProfile?.name || username,
61
+ size: 100,
62
+ theme: theme,
63
+ style: styles.modernUserAvatar,
64
+ backgroundColor: colors.primary + '20'
65
+ }), /*#__PURE__*/_jsx(View, {
66
+ style: [styles.statusIndicator, {
67
+ backgroundColor: colors.primary
68
+ }]
69
+ })]
70
+ }), /*#__PURE__*/_jsx(Text, {
71
+ style: [styles.modernUserDisplayName, {
72
+ color: colors.text
73
+ }],
74
+ children: userProfile?.displayName || userProfile?.name || username
75
+ }), /*#__PURE__*/_jsxs(Text, {
76
+ style: [styles.modernUsernameSubtext, {
77
+ color: colors.secondaryText
78
+ }],
79
+ children: ["@", username]
80
+ })]
81
+ }), /*#__PURE__*/_jsxs(View, {
82
+ style: styles.modernInputContainer,
83
+ children: [/*#__PURE__*/_jsx(TextField, {
84
+ ref: inputRef,
85
+ label: "Password",
86
+ leading: /*#__PURE__*/_jsx(Ionicons, {
87
+ name: "lock-closed-outline",
88
+ size: 24,
89
+ color: colors.secondaryText
90
+ }),
91
+ value: password,
92
+ onChangeText: handlePasswordChange,
93
+ secureTextEntry: !showPassword,
94
+ autoCapitalize: "none",
95
+ autoCorrect: false,
96
+ testID: "password-input",
97
+ variant: "filled",
98
+ error: errorMessage || undefined,
99
+ onSubmitEditing: handleSignInSubmit,
100
+ autoFocus: true
101
+ }), /*#__PURE__*/_jsxs(View, {
102
+ style: {
103
+ flexDirection: 'row',
104
+ alignItems: 'center',
105
+ marginBottom: 16
106
+ },
107
+ children: [/*#__PURE__*/_jsx(Text, {
108
+ style: [styles.footerText, {
109
+ color: colors.text
110
+ }],
111
+ children: "Forgot your password? "
112
+ }), /*#__PURE__*/_jsx(TouchableOpacity, {
113
+ onPress: () => navigate('RecoverAccount', {
114
+ returnTo: 'SignIn',
115
+ returnStep: 1,
116
+ returnData: {
117
+ username,
118
+ userProfile
119
+ }
120
+ }),
121
+ children: /*#__PURE__*/_jsx(Text, {
122
+ style: [styles.modernLinkText, {
123
+ color: colors.primary
124
+ }],
125
+ children: "Recover your account"
126
+ })
127
+ })]
128
+ })]
129
+ }), /*#__PURE__*/_jsx(GroupedPillButtons, {
130
+ buttons: [{
131
+ text: 'Back',
132
+ onPress: prevStep,
133
+ icon: 'arrow-back',
134
+ variant: 'transparent'
135
+ }, {
136
+ text: 'Sign In',
137
+ onPress: handleSignInSubmit,
138
+ icon: 'log-in',
139
+ variant: 'primary',
140
+ loading: isLoading,
141
+ testID: 'login-button'
142
+ }],
143
+ colors: colors
144
+ }), /*#__PURE__*/_jsxs(View, {
145
+ style: styles.securityNotice,
146
+ children: [/*#__PURE__*/_jsx(Ionicons, {
147
+ name: "shield-checkmark",
148
+ size: 14,
149
+ color: colors.secondaryText
150
+ }), /*#__PURE__*/_jsx(Text, {
151
+ style: [styles.securityText, {
152
+ color: colors.secondaryText
153
+ }],
154
+ children: "Your data is encrypted and secure"
155
+ })]
156
+ })]
157
+ });
158
+ };
159
+ export default SignInPasswordStep;
160
+ //# sourceMappingURL=SignInPasswordStep.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useRef","useEffect","View","Text","TouchableOpacity","Ionicons","Avatar","GroupedPillButtons","TextField","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","SignInPasswordStep","colors","styles","theme","navigate","prevStep","password","setPassword","showPassword","setShowPassword","errorMessage","setErrorMessage","isLoading","userProfile","username","handleSignIn","inputRef","handlePasswordChange","text","handleSignInSubmit","setTimeout","current","focus","togglePasswordVisibility","children","style","modernUserProfileContainer","avatarContainer","name","displayName","size","modernUserAvatar","backgroundColor","primary","statusIndicator","modernUserDisplayName","color","modernUsernameSubtext","secondaryText","modernInputContainer","ref","label","leading","value","onChangeText","secureTextEntry","autoCapitalize","autoCorrect","testID","variant","error","undefined","onSubmitEditing","autoFocus","flexDirection","alignItems","marginBottom","footerText","onPress","returnTo","returnStep","returnData","modernLinkText","buttons","icon","loading","securityNotice","securityText"],"sourceRoot":"../../../../../src","sources":["ui/screens/steps/SignInPasswordStep.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,145 @@
1
+ "use strict";
2
+
3
+ import { useRef, useEffect } from 'react';
4
+ import { View, Text } from 'react-native';
5
+ import { Ionicons } from '@expo/vector-icons';
6
+ import HighFive from '../../../assets/illustrations/HighFive';
7
+ import GroupedPillButtons from '../../components/internal/GroupedPillButtons';
8
+ import TextField from '../../components/internal/TextField';
9
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
10
+ const SignInUsernameStep = ({
11
+ colors,
12
+ styles,
13
+ navigate,
14
+ nextStep,
15
+ username,
16
+ setUsername,
17
+ errorMessage,
18
+ setErrorMessage,
19
+ validationStatus,
20
+ userProfile,
21
+ isValidating,
22
+ isAddAccountMode,
23
+ user,
24
+ validateUsername
25
+ }) => {
26
+ const inputRef = useRef(null);
27
+
28
+ // Monitor username prop changes
29
+ useEffect(() => {
30
+ console.log('👀 SignInUsernameStep username prop changed:', username);
31
+ }, [username]);
32
+ const handleUsernameChange = text => {
33
+ console.log('📝 Username input changed:', text);
34
+ setUsername(text);
35
+ if (errorMessage) setErrorMessage('');
36
+ };
37
+ const handleContinue = async () => {
38
+ console.log('🚀 Continue button pressed, username:', username);
39
+ const trimmedUsername = username?.trim() || '';
40
+ if (!trimmedUsername) {
41
+ console.log('❌ Username is empty');
42
+ setErrorMessage('Please enter your username.');
43
+ setTimeout(() => inputRef.current?.focus(), 0);
44
+ return;
45
+ }
46
+ if (trimmedUsername.length < 2) {
47
+ console.log('❌ Username too short');
48
+ setErrorMessage('Username must be at least 3 characters.');
49
+ return;
50
+ }
51
+ console.log('🔍 Starting username validation...');
52
+ try {
53
+ // Validate the username before proceeding
54
+ const isValid = await validateUsername(trimmedUsername);
55
+ console.log('📊 Validation result:', isValid);
56
+ if (isValid) {
57
+ console.log('✅ Validation passed, proceeding to next step');
58
+ nextStep();
59
+ } else {
60
+ console.log('❌ Validation failed, staying on current step');
61
+ }
62
+ } catch (error) {
63
+ console.error('🚨 Error during validation:', error);
64
+ setErrorMessage('Unable to validate username. Please try again.');
65
+ }
66
+ };
67
+ return /*#__PURE__*/_jsxs(_Fragment, {
68
+ children: [/*#__PURE__*/_jsx(HighFive, {
69
+ width: 100,
70
+ height: 100
71
+ }), /*#__PURE__*/_jsxs(View, {
72
+ style: styles.modernHeader,
73
+ children: [/*#__PURE__*/_jsx(Text, {
74
+ style: [styles.modernTitle, {
75
+ color: colors.text
76
+ }],
77
+ children: isAddAccountMode ? 'Add Another Account' : 'Sign In'
78
+ }), /*#__PURE__*/_jsx(Text, {
79
+ style: [styles.modernSubtitle, {
80
+ color: colors.secondaryText
81
+ }],
82
+ children: isAddAccountMode ? 'Sign in with another account' : 'Sign in to continue your journey'
83
+ })]
84
+ }), isAddAccountMode && user && /*#__PURE__*/_jsxs(View, {
85
+ style: [styles.modernInfoCard, {
86
+ backgroundColor: colors.inputBackground
87
+ }],
88
+ children: [/*#__PURE__*/_jsx(Ionicons, {
89
+ name: "information-circle",
90
+ size: 20,
91
+ color: colors.primary
92
+ }), /*#__PURE__*/_jsxs(Text, {
93
+ style: [styles.modernInfoText, {
94
+ color: colors.text
95
+ }],
96
+ children: ["Currently signed in as ", /*#__PURE__*/_jsx(Text, {
97
+ style: {
98
+ fontWeight: 'bold'
99
+ },
100
+ children: user.username
101
+ })]
102
+ })]
103
+ }), /*#__PURE__*/_jsx(View, {
104
+ style: styles.modernInputContainer,
105
+ children: /*#__PURE__*/_jsx(TextField, {
106
+ ref: inputRef,
107
+ label: "Username",
108
+ leading: /*#__PURE__*/_jsx(Ionicons, {
109
+ name: "person-outline",
110
+ size: 24,
111
+ color: colors.secondaryText
112
+ }),
113
+ value: username,
114
+ onChangeText: handleUsernameChange,
115
+ autoCapitalize: "none",
116
+ autoCorrect: false,
117
+ testID: "username-input",
118
+ variant: "filled",
119
+ error: validationStatus === 'invalid' ? errorMessage : undefined,
120
+ loading: validationStatus === 'validating',
121
+ success: validationStatus === 'valid',
122
+ onSubmitEditing: () => handleContinue(),
123
+ autoFocus: true
124
+ })
125
+ }), /*#__PURE__*/_jsx(GroupedPillButtons, {
126
+ buttons: [{
127
+ text: 'Sign Up',
128
+ onPress: () => navigate('SignUp'),
129
+ icon: 'person-add',
130
+ variant: 'transparent'
131
+ }, {
132
+ text: 'Continue',
133
+ onPress: handleContinue,
134
+ icon: 'arrow-forward',
135
+ variant: 'primary',
136
+ loading: isValidating,
137
+ disabled: !username || username.trim().length < 2 || isValidating,
138
+ testID: 'username-next-button'
139
+ }],
140
+ colors: colors
141
+ })]
142
+ });
143
+ };
144
+ export default SignInUsernameStep;
145
+ //# sourceMappingURL=SignInUsernameStep.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useRef","useEffect","View","Text","Ionicons","HighFive","GroupedPillButtons","TextField","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","SignInUsernameStep","colors","styles","navigate","nextStep","username","setUsername","errorMessage","setErrorMessage","validationStatus","userProfile","isValidating","isAddAccountMode","user","validateUsername","inputRef","console","log","handleUsernameChange","text","handleContinue","trimmedUsername","trim","setTimeout","current","focus","length","isValid","error","children","width","height","style","modernHeader","modernTitle","color","modernSubtitle","secondaryText","modernInfoCard","backgroundColor","inputBackground","name","size","primary","modernInfoText","fontWeight","modernInputContainer","ref","label","leading","value","onChangeText","autoCapitalize","autoCorrect","testID","variant","undefined","loading","success","onSubmitEditing","autoFocus","buttons","onPress","icon","disabled"],"sourceRoot":"../../../../../src","sources":["ui/screens/steps/SignInUsernameStep.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,166 @@
1
+ "use strict";
2
+
3
+ import { useRef, useEffect, useCallback } from 'react';
4
+ import { View, Text } from 'react-native';
5
+ import { Ionicons } from '@expo/vector-icons';
6
+ import GroupedPillButtons from '../../components/internal/GroupedPillButtons';
7
+ import TextField from '../../components/internal/TextField';
8
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
9
+ const SignUpIdentityStep = ({
10
+ colors,
11
+ styles,
12
+ navigate,
13
+ nextStep,
14
+ prevStep,
15
+ username,
16
+ email,
17
+ setUsername,
18
+ setEmail,
19
+ validationState,
20
+ setValidationState,
21
+ setErrorMessage,
22
+ validateEmail,
23
+ validateUsername
24
+ }) => {
25
+ const usernameRef = useRef(null);
26
+ const validationTimeoutRef = useRef(null);
27
+
28
+ // Debounced username validation
29
+ const debouncedValidateUsername = useCallback(usernameToValidate => {
30
+ if (validationTimeoutRef.current) {
31
+ clearTimeout(validationTimeoutRef.current);
32
+ }
33
+ validationTimeoutRef.current = setTimeout(async () => {
34
+ if (usernameToValidate.trim().length >= 3) {
35
+ await validateUsername(usernameToValidate.trim());
36
+ }
37
+ }, 500);
38
+ }, [validateUsername]);
39
+
40
+ // Cleanup timeout on unmount
41
+ useEffect(() => {
42
+ return () => {
43
+ if (validationTimeoutRef.current) {
44
+ clearTimeout(validationTimeoutRef.current);
45
+ }
46
+ };
47
+ }, []);
48
+ const handleUsernameChange = text => {
49
+ setUsername(text);
50
+ setErrorMessage('');
51
+ // Reset validation state when user types
52
+ if (validationState.status !== 'idle') {
53
+ setValidationState({
54
+ status: 'idle',
55
+ message: ''
56
+ });
57
+ }
58
+
59
+ // Trigger debounced validation
60
+ debouncedValidateUsername(text);
61
+ };
62
+ const handleEmailChange = text => {
63
+ setEmail(text);
64
+ setErrorMessage('');
65
+ };
66
+ const handleNext = async () => {
67
+ if (!username.trim()) {
68
+ setErrorMessage('Please enter a username');
69
+ setTimeout(() => usernameRef.current?.focus(), 0);
70
+ return;
71
+ }
72
+ if (username.trim().length < 3) {
73
+ setErrorMessage('Username must be at least 3 characters');
74
+ setTimeout(() => usernameRef.current?.focus(), 0);
75
+ return;
76
+ }
77
+ if (!email.trim()) {
78
+ setErrorMessage('Please enter an email address');
79
+ return;
80
+ }
81
+ if (!validateEmail(email)) {
82
+ setErrorMessage('Please enter a valid email address');
83
+ return;
84
+ }
85
+
86
+ // Validate username availability
87
+ const isUsernameValid = await validateUsername(username.trim());
88
+ if (!isUsernameValid) {
89
+ setTimeout(() => usernameRef.current?.focus(), 0);
90
+ return;
91
+ }
92
+ nextStep();
93
+ };
94
+ const emailError = email && !validateEmail(email) ? 'Please enter a valid email address' : undefined;
95
+ return /*#__PURE__*/_jsxs(_Fragment, {
96
+ children: [/*#__PURE__*/_jsxs(View, {
97
+ style: styles.modernHeader,
98
+ children: [/*#__PURE__*/_jsx(Text, {
99
+ style: [styles.modernTitle, {
100
+ color: colors.text
101
+ }],
102
+ children: "Who are you?"
103
+ }), /*#__PURE__*/_jsx(Text, {
104
+ style: [styles.modernSubtitle, {
105
+ color: colors.secondaryText
106
+ }],
107
+ children: "Choose your username and enter your email"
108
+ })]
109
+ }), /*#__PURE__*/_jsxs(View, {
110
+ style: styles.modernInputContainer,
111
+ children: [/*#__PURE__*/_jsx(TextField, {
112
+ ref: usernameRef,
113
+ label: "Username",
114
+ leading: /*#__PURE__*/_jsx(Ionicons, {
115
+ name: "person-outline",
116
+ size: 24,
117
+ color: colors.secondaryText
118
+ }),
119
+ value: username,
120
+ onChangeText: handleUsernameChange,
121
+ autoCapitalize: "none",
122
+ autoCorrect: false,
123
+ testID: "signup-username-input",
124
+ variant: "filled",
125
+ error: validationState.status === 'invalid' ? validationState.message : undefined,
126
+ loading: validationState.status === 'validating',
127
+ success: validationState.status === 'valid',
128
+ onSubmitEditing: handleNext,
129
+ autoFocus: true
130
+ }), /*#__PURE__*/_jsx(TextField, {
131
+ label: "Email",
132
+ leading: /*#__PURE__*/_jsx(Ionicons, {
133
+ name: "mail-outline",
134
+ size: 24,
135
+ color: colors.secondaryText
136
+ }),
137
+ value: email,
138
+ onChangeText: handleEmailChange,
139
+ keyboardType: "email-address",
140
+ autoCapitalize: "none",
141
+ autoCorrect: false,
142
+ testID: "signup-email-input",
143
+ variant: "filled",
144
+ error: emailError,
145
+ onSubmitEditing: handleNext
146
+ })]
147
+ }), /*#__PURE__*/_jsx(GroupedPillButtons, {
148
+ buttons: [{
149
+ text: 'Back',
150
+ onPress: prevStep,
151
+ icon: 'arrow-back',
152
+ variant: 'transparent'
153
+ }, {
154
+ text: 'Next',
155
+ onPress: handleNext,
156
+ icon: 'arrow-forward',
157
+ variant: 'primary',
158
+ loading: validationState.status === 'validating',
159
+ disabled: !username.trim() || username.trim().length < 3 || !email.trim() || !validateEmail(email) || validationState.status === 'validating' || validationState.status === 'invalid'
160
+ }],
161
+ colors: colors
162
+ })]
163
+ });
164
+ };
165
+ export default SignUpIdentityStep;
166
+ //# sourceMappingURL=SignUpIdentityStep.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useRef","useEffect","useCallback","View","Text","Ionicons","GroupedPillButtons","TextField","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","SignUpIdentityStep","colors","styles","navigate","nextStep","prevStep","username","email","setUsername","setEmail","validationState","setValidationState","setErrorMessage","validateEmail","validateUsername","usernameRef","validationTimeoutRef","debouncedValidateUsername","usernameToValidate","current","clearTimeout","setTimeout","trim","length","handleUsernameChange","text","status","message","handleEmailChange","handleNext","focus","isUsernameValid","emailError","undefined","children","style","modernHeader","modernTitle","color","modernSubtitle","secondaryText","modernInputContainer","ref","label","leading","name","size","value","onChangeText","autoCapitalize","autoCorrect","testID","variant","error","loading","success","onSubmitEditing","autoFocus","keyboardType","buttons","onPress","icon","disabled"],"sourceRoot":"../../../../../src","sources":["ui/screens/steps/SignUpIdentityStep.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,158 @@
1
+ "use strict";
2
+
3
+ import { useRef } from 'react';
4
+ import { View, Text, TouchableOpacity } from 'react-native';
5
+ import { Ionicons } from '@expo/vector-icons';
6
+ import GroupedPillButtons from '../../components/internal/GroupedPillButtons';
7
+ import TextField from '../../components/internal/TextField';
8
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
9
+ const SignUpSecurityStep = ({
10
+ colors,
11
+ styles,
12
+ nextStep,
13
+ prevStep,
14
+ password,
15
+ confirmPassword,
16
+ setPassword,
17
+ setConfirmPassword,
18
+ showPassword,
19
+ showConfirmPassword,
20
+ setShowPassword,
21
+ setShowConfirmPassword,
22
+ setErrorMessage,
23
+ validatePassword
24
+ }) => {
25
+ const passwordRef = useRef(null);
26
+ const handlePasswordChange = text => {
27
+ setPassword(text);
28
+ setErrorMessage('');
29
+ };
30
+ const handleConfirmPasswordChange = text => {
31
+ setConfirmPassword(text);
32
+ setErrorMessage('');
33
+ };
34
+ const handleNext = () => {
35
+ if (!password) {
36
+ setErrorMessage('Please enter a password');
37
+ setTimeout(() => passwordRef.current?.focus(), 0);
38
+ return;
39
+ }
40
+ if (!validatePassword(password)) {
41
+ setErrorMessage('Password must be at least 8 characters long');
42
+ return;
43
+ }
44
+ if (!confirmPassword) {
45
+ setErrorMessage('Please confirm your password');
46
+ return;
47
+ }
48
+ if (password !== confirmPassword) {
49
+ setErrorMessage('Passwords do not match');
50
+ return;
51
+ }
52
+ nextStep();
53
+ };
54
+ const passwordError = password && !validatePassword(password) ? 'Password must be at least 8 characters long' : undefined;
55
+ const confirmPasswordError = confirmPassword && password !== confirmPassword ? 'Passwords do not match' : undefined;
56
+ return /*#__PURE__*/_jsxs(_Fragment, {
57
+ children: [/*#__PURE__*/_jsxs(View, {
58
+ style: styles.modernHeader,
59
+ children: [/*#__PURE__*/_jsx(Text, {
60
+ style: [styles.modernTitle, {
61
+ color: colors.text
62
+ }],
63
+ children: "Secure Your Account"
64
+ }), /*#__PURE__*/_jsx(Text, {
65
+ style: [styles.modernSubtitle, {
66
+ color: colors.secondaryText
67
+ }],
68
+ children: "Create a strong password to protect your account"
69
+ })]
70
+ }), /*#__PURE__*/_jsxs(View, {
71
+ style: styles.modernInputContainer,
72
+ children: [/*#__PURE__*/_jsx(TextField, {
73
+ ref: passwordRef,
74
+ label: "Password",
75
+ leading: /*#__PURE__*/_jsx(Ionicons, {
76
+ name: "lock-closed-outline",
77
+ size: 24,
78
+ color: colors.secondaryText
79
+ }),
80
+ trailing: /*#__PURE__*/_jsx(TouchableOpacity, {
81
+ onPress: () => setShowPassword(!showPassword),
82
+ style: {
83
+ padding: 4
84
+ },
85
+ children: /*#__PURE__*/_jsx(Ionicons, {
86
+ name: showPassword ? "eye-off-outline" : "eye-outline",
87
+ size: 20,
88
+ color: colors.secondaryText
89
+ })
90
+ }),
91
+ value: password,
92
+ onChangeText: handlePasswordChange,
93
+ secureTextEntry: !showPassword,
94
+ autoCapitalize: "none",
95
+ autoCorrect: false,
96
+ testID: "signup-password-input",
97
+ variant: "filled",
98
+ error: passwordError,
99
+ onSubmitEditing: handleNext,
100
+ autoFocus: true
101
+ }), /*#__PURE__*/_jsx(TextField, {
102
+ label: "Confirm Password",
103
+ leading: /*#__PURE__*/_jsx(Ionicons, {
104
+ name: "lock-closed-outline",
105
+ size: 24,
106
+ color: colors.secondaryText
107
+ }),
108
+ trailing: /*#__PURE__*/_jsx(TouchableOpacity, {
109
+ onPress: () => setShowConfirmPassword(!showConfirmPassword),
110
+ style: {
111
+ padding: 4
112
+ },
113
+ children: /*#__PURE__*/_jsx(Ionicons, {
114
+ name: showConfirmPassword ? "eye-off-outline" : "eye-outline",
115
+ size: 20,
116
+ color: colors.secondaryText
117
+ })
118
+ }),
119
+ value: confirmPassword,
120
+ onChangeText: handleConfirmPasswordChange,
121
+ secureTextEntry: !showConfirmPassword,
122
+ autoCapitalize: "none",
123
+ autoCorrect: false,
124
+ testID: "signup-confirm-password-input",
125
+ variant: "filled",
126
+ error: confirmPasswordError,
127
+ onSubmitEditing: handleNext
128
+ }), /*#__PURE__*/_jsx(View, {
129
+ style: {
130
+ marginTop: 16
131
+ },
132
+ children: /*#__PURE__*/_jsx(Text, {
133
+ style: [styles.footerText, {
134
+ color: colors.secondaryText,
135
+ fontSize: 12
136
+ }],
137
+ children: "Password must be at least 8 characters long"
138
+ })
139
+ })]
140
+ }), /*#__PURE__*/_jsx(GroupedPillButtons, {
141
+ buttons: [{
142
+ text: 'Back',
143
+ onPress: prevStep,
144
+ icon: 'arrow-back',
145
+ variant: 'transparent'
146
+ }, {
147
+ text: 'Next',
148
+ onPress: handleNext,
149
+ icon: 'arrow-forward',
150
+ variant: 'primary',
151
+ disabled: !password || !confirmPassword || password !== confirmPassword
152
+ }],
153
+ colors: colors
154
+ })]
155
+ });
156
+ };
157
+ export default SignUpSecurityStep;
158
+ //# sourceMappingURL=SignUpSecurityStep.js.map