@oxyhq/services 5.12.11 → 5.13.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (208) hide show
  1. package/lib/commonjs/core/OxyServices.js +86 -8
  2. package/lib/commonjs/core/OxyServices.js.map +1 -1
  3. package/lib/commonjs/i18n/index.js +37 -1
  4. package/lib/commonjs/i18n/index.js.map +1 -1
  5. package/lib/commonjs/i18n/locales/ar-SA.json +128 -0
  6. package/lib/commonjs/i18n/locales/ca-ES.json +128 -0
  7. package/lib/commonjs/i18n/locales/de-DE.json +128 -0
  8. package/lib/commonjs/i18n/locales/en-US.json +85 -12
  9. package/lib/commonjs/i18n/locales/es-ES.json +58 -6
  10. package/lib/commonjs/i18n/locales/fr-FR.json +128 -0
  11. package/lib/commonjs/i18n/locales/it-IT.json +128 -0
  12. package/lib/commonjs/i18n/locales/ja-JP.json +127 -0
  13. package/lib/commonjs/i18n/locales/ko-KR.json +128 -0
  14. package/lib/commonjs/i18n/locales/pt-PT.json +128 -0
  15. package/lib/commonjs/i18n/locales/zh-CN.json +128 -0
  16. package/lib/commonjs/ui/components/FontLoader.js +22 -42
  17. package/lib/commonjs/ui/components/FontLoader.js.map +1 -1
  18. package/lib/commonjs/ui/components/OxyProvider.js +5 -8
  19. package/lib/commonjs/ui/components/OxyProvider.js.map +1 -1
  20. package/lib/commonjs/ui/components/StepBasedScreen.js +64 -44
  21. package/lib/commonjs/ui/components/StepBasedScreen.js.map +1 -1
  22. package/lib/commonjs/ui/components/internal/GroupedPillButtons.js +14 -35
  23. package/lib/commonjs/ui/components/internal/GroupedPillButtons.js.map +1 -1
  24. package/lib/commonjs/ui/components/internal/PinInput.js +2 -2
  25. package/lib/commonjs/ui/components/internal/PinInput.js.map +1 -1
  26. package/lib/commonjs/ui/context/OxyContext.js +434 -321
  27. package/lib/commonjs/ui/context/OxyContext.js.map +1 -1
  28. package/lib/commonjs/ui/screens/FileManagementScreen.js +56 -5
  29. package/lib/commonjs/ui/screens/FileManagementScreen.js.map +1 -1
  30. package/lib/commonjs/ui/screens/SignInScreen.js +43 -39
  31. package/lib/commonjs/ui/screens/SignInScreen.js.map +1 -1
  32. package/lib/commonjs/ui/screens/WelcomeNewUserScreen.js +139 -125
  33. package/lib/commonjs/ui/screens/WelcomeNewUserScreen.js.map +1 -1
  34. package/lib/commonjs/ui/screens/internal/SignInUsernameStep.js +2 -4
  35. package/lib/commonjs/ui/screens/internal/SignInUsernameStep.js.map +1 -1
  36. package/lib/commonjs/ui/screens/steps/RecoverRequestStep.js +45 -25
  37. package/lib/commonjs/ui/screens/steps/RecoverRequestStep.js.map +1 -1
  38. package/lib/commonjs/ui/screens/steps/RecoverResetPasswordStep.js +88 -53
  39. package/lib/commonjs/ui/screens/steps/RecoverResetPasswordStep.js.map +1 -1
  40. package/lib/commonjs/ui/screens/steps/RecoverSuccessStep.js +79 -58
  41. package/lib/commonjs/ui/screens/steps/RecoverSuccessStep.js.map +1 -1
  42. package/lib/commonjs/ui/screens/steps/RecoverVerifyStep.js +61 -52
  43. package/lib/commonjs/ui/screens/steps/RecoverVerifyStep.js.map +1 -1
  44. package/lib/commonjs/ui/screens/steps/SignInPasswordStep.js +220 -31
  45. package/lib/commonjs/ui/screens/steps/SignInPasswordStep.js.map +1 -1
  46. package/lib/commonjs/ui/screens/steps/SignInTotpStep.js +77 -50
  47. package/lib/commonjs/ui/screens/steps/SignInTotpStep.js.map +1 -1
  48. package/lib/commonjs/ui/screens/steps/SignInUsernameStep.js +527 -66
  49. package/lib/commonjs/ui/screens/steps/SignInUsernameStep.js.map +1 -1
  50. package/lib/commonjs/ui/screens/steps/SignUpIdentityStep.js +55 -30
  51. package/lib/commonjs/ui/screens/steps/SignUpIdentityStep.js.map +1 -1
  52. package/lib/commonjs/ui/screens/steps/SignUpSecurityStep.js +64 -46
  53. package/lib/commonjs/ui/screens/steps/SignUpSecurityStep.js.map +1 -1
  54. package/lib/commonjs/ui/screens/steps/SignUpSummaryStep.js +84 -146
  55. package/lib/commonjs/ui/screens/steps/SignUpSummaryStep.js.map +1 -1
  56. package/lib/commonjs/ui/screens/steps/SignUpWelcomeStep.js +113 -34
  57. package/lib/commonjs/ui/screens/steps/SignUpWelcomeStep.js.map +1 -1
  58. package/lib/commonjs/ui/stores/authStore.js +16 -20
  59. package/lib/commonjs/ui/stores/authStore.js.map +1 -1
  60. package/lib/commonjs/ui/styles/authStyles.js +2 -1
  61. package/lib/commonjs/ui/styles/authStyles.js.map +1 -1
  62. package/lib/commonjs/ui/styles/index.js +11 -0
  63. package/lib/commonjs/ui/styles/index.js.map +1 -1
  64. package/lib/commonjs/ui/styles/spacing.js +51 -0
  65. package/lib/commonjs/ui/styles/spacing.js.map +1 -0
  66. package/lib/commonjs/utils/validationUtils.js +1 -1
  67. package/lib/module/core/OxyServices.js +86 -8
  68. package/lib/module/core/OxyServices.js.map +1 -1
  69. package/lib/module/i18n/index.js +37 -1
  70. package/lib/module/i18n/index.js.map +1 -1
  71. package/lib/module/i18n/locales/ar-SA.json +128 -0
  72. package/lib/module/i18n/locales/ca-ES.json +128 -0
  73. package/lib/module/i18n/locales/de-DE.json +128 -0
  74. package/lib/module/i18n/locales/en-US.json +85 -12
  75. package/lib/module/i18n/locales/es-ES.json +58 -6
  76. package/lib/module/i18n/locales/fr-FR.json +128 -0
  77. package/lib/module/i18n/locales/it-IT.json +128 -0
  78. package/lib/module/i18n/locales/ja-JP.json +127 -0
  79. package/lib/module/i18n/locales/ko-KR.json +128 -0
  80. package/lib/module/i18n/locales/pt-PT.json +128 -0
  81. package/lib/module/i18n/locales/zh-CN.json +128 -0
  82. package/lib/module/ui/components/FontLoader.js +23 -43
  83. package/lib/module/ui/components/FontLoader.js.map +1 -1
  84. package/lib/module/ui/components/OxyProvider.js +6 -8
  85. package/lib/module/ui/components/OxyProvider.js.map +1 -1
  86. package/lib/module/ui/components/StepBasedScreen.js +65 -45
  87. package/lib/module/ui/components/StepBasedScreen.js.map +1 -1
  88. package/lib/module/ui/components/internal/GroupedPillButtons.js +14 -35
  89. package/lib/module/ui/components/internal/GroupedPillButtons.js.map +1 -1
  90. package/lib/module/ui/components/internal/PinInput.js +2 -2
  91. package/lib/module/ui/components/internal/PinInput.js.map +1 -1
  92. package/lib/module/ui/context/OxyContext.js +434 -321
  93. package/lib/module/ui/context/OxyContext.js.map +1 -1
  94. package/lib/module/ui/screens/FileManagementScreen.js +56 -5
  95. package/lib/module/ui/screens/FileManagementScreen.js.map +1 -1
  96. package/lib/module/ui/screens/SignInScreen.js +44 -40
  97. package/lib/module/ui/screens/SignInScreen.js.map +1 -1
  98. package/lib/module/ui/screens/WelcomeNewUserScreen.js +138 -126
  99. package/lib/module/ui/screens/WelcomeNewUserScreen.js.map +1 -1
  100. package/lib/module/ui/screens/internal/SignInUsernameStep.js +2 -4
  101. package/lib/module/ui/screens/internal/SignInUsernameStep.js.map +1 -1
  102. package/lib/module/ui/screens/steps/RecoverRequestStep.js +45 -25
  103. package/lib/module/ui/screens/steps/RecoverRequestStep.js.map +1 -1
  104. package/lib/module/ui/screens/steps/RecoverResetPasswordStep.js +89 -54
  105. package/lib/module/ui/screens/steps/RecoverResetPasswordStep.js.map +1 -1
  106. package/lib/module/ui/screens/steps/RecoverSuccessStep.js +80 -59
  107. package/lib/module/ui/screens/steps/RecoverSuccessStep.js.map +1 -1
  108. package/lib/module/ui/screens/steps/RecoverVerifyStep.js +62 -53
  109. package/lib/module/ui/screens/steps/RecoverVerifyStep.js.map +1 -1
  110. package/lib/module/ui/screens/steps/SignInPasswordStep.js +221 -32
  111. package/lib/module/ui/screens/steps/SignInPasswordStep.js.map +1 -1
  112. package/lib/module/ui/screens/steps/SignInTotpStep.js +78 -51
  113. package/lib/module/ui/screens/steps/SignInTotpStep.js.map +1 -1
  114. package/lib/module/ui/screens/steps/SignInUsernameStep.js +530 -68
  115. package/lib/module/ui/screens/steps/SignInUsernameStep.js.map +1 -1
  116. package/lib/module/ui/screens/steps/SignUpIdentityStep.js +55 -30
  117. package/lib/module/ui/screens/steps/SignUpIdentityStep.js.map +1 -1
  118. package/lib/module/ui/screens/steps/SignUpSecurityStep.js +65 -47
  119. package/lib/module/ui/screens/steps/SignUpSecurityStep.js.map +1 -1
  120. package/lib/module/ui/screens/steps/SignUpSummaryStep.js +84 -146
  121. package/lib/module/ui/screens/steps/SignUpSummaryStep.js.map +1 -1
  122. package/lib/module/ui/screens/steps/SignUpWelcomeStep.js +114 -35
  123. package/lib/module/ui/screens/steps/SignUpWelcomeStep.js.map +1 -1
  124. package/lib/module/ui/stores/authStore.js +16 -20
  125. package/lib/module/ui/stores/authStore.js.map +1 -1
  126. package/lib/module/ui/styles/authStyles.js +2 -1
  127. package/lib/module/ui/styles/authStyles.js.map +1 -1
  128. package/lib/module/ui/styles/index.js +1 -0
  129. package/lib/module/ui/styles/index.js.map +1 -1
  130. package/lib/module/ui/styles/spacing.js +48 -0
  131. package/lib/module/ui/styles/spacing.js.map +1 -0
  132. package/lib/module/utils/validationUtils.js +1 -1
  133. package/lib/typescript/core/OxyServices.d.ts +38 -2
  134. package/lib/typescript/core/OxyServices.d.ts.map +1 -1
  135. package/lib/typescript/i18n/index.d.ts.map +1 -1
  136. package/lib/typescript/ui/components/FontLoader.d.ts +3 -3
  137. package/lib/typescript/ui/components/FontLoader.d.ts.map +1 -1
  138. package/lib/typescript/ui/components/OxyProvider.d.ts +2 -2
  139. package/lib/typescript/ui/components/OxyProvider.d.ts.map +1 -1
  140. package/lib/typescript/ui/components/StepBasedScreen.d.ts.map +1 -1
  141. package/lib/typescript/ui/components/internal/GroupedPillButtons.d.ts.map +1 -1
  142. package/lib/typescript/ui/context/OxyContext.d.ts +1 -0
  143. package/lib/typescript/ui/context/OxyContext.d.ts.map +1 -1
  144. package/lib/typescript/ui/screens/FileManagementScreen.d.ts +10 -0
  145. package/lib/typescript/ui/screens/FileManagementScreen.d.ts.map +1 -1
  146. package/lib/typescript/ui/screens/SignInScreen.d.ts.map +1 -1
  147. package/lib/typescript/ui/screens/WelcomeNewUserScreen.d.ts.map +1 -1
  148. package/lib/typescript/ui/screens/steps/RecoverRequestStep.d.ts.map +1 -1
  149. package/lib/typescript/ui/screens/steps/RecoverResetPasswordStep.d.ts.map +1 -1
  150. package/lib/typescript/ui/screens/steps/RecoverSuccessStep.d.ts.map +1 -1
  151. package/lib/typescript/ui/screens/steps/RecoverVerifyStep.d.ts.map +1 -1
  152. package/lib/typescript/ui/screens/steps/SignInPasswordStep.d.ts +2 -0
  153. package/lib/typescript/ui/screens/steps/SignInPasswordStep.d.ts.map +1 -1
  154. package/lib/typescript/ui/screens/steps/SignInTotpStep.d.ts.map +1 -1
  155. package/lib/typescript/ui/screens/steps/SignInUsernameStep.d.ts.map +1 -1
  156. package/lib/typescript/ui/screens/steps/SignUpIdentityStep.d.ts.map +1 -1
  157. package/lib/typescript/ui/screens/steps/SignUpSecurityStep.d.ts.map +1 -1
  158. package/lib/typescript/ui/screens/steps/SignUpSummaryStep.d.ts.map +1 -1
  159. package/lib/typescript/ui/screens/steps/SignUpWelcomeStep.d.ts.map +1 -1
  160. package/lib/typescript/ui/stores/authStore.d.ts +7 -3
  161. package/lib/typescript/ui/stores/authStore.d.ts.map +1 -1
  162. package/lib/typescript/ui/styles/authStyles.d.ts +1 -0
  163. package/lib/typescript/ui/styles/authStyles.d.ts.map +1 -1
  164. package/lib/typescript/ui/styles/index.d.ts +1 -0
  165. package/lib/typescript/ui/styles/index.d.ts.map +1 -1
  166. package/lib/typescript/ui/styles/spacing.d.ts +43 -0
  167. package/lib/typescript/ui/styles/spacing.d.ts.map +1 -0
  168. package/lib/typescript/utils/validationUtils.d.ts +1 -1
  169. package/package.json +1 -1
  170. package/src/core/OxyServices.ts +96 -10
  171. package/src/i18n/index.ts +36 -0
  172. package/src/i18n/locales/ar-SA.json +128 -0
  173. package/src/i18n/locales/ca-ES.json +128 -0
  174. package/src/i18n/locales/de-DE.json +128 -0
  175. package/src/i18n/locales/en-US.json +85 -12
  176. package/src/i18n/locales/es-ES.json +58 -6
  177. package/src/i18n/locales/fr-FR.json +128 -0
  178. package/src/i18n/locales/it-IT.json +128 -0
  179. package/src/i18n/locales/ja-JP.json +127 -0
  180. package/src/i18n/locales/ko-KR.json +128 -0
  181. package/src/i18n/locales/pt-PT.json +128 -0
  182. package/src/i18n/locales/zh-CN.json +128 -0
  183. package/src/ui/components/FontLoader.tsx +17 -37
  184. package/src/ui/components/OxyProvider.tsx +14 -13
  185. package/src/ui/components/StepBasedScreen.tsx +66 -43
  186. package/src/ui/components/internal/GroupedPillButtons.tsx +15 -31
  187. package/src/ui/components/internal/PinInput.tsx +2 -2
  188. package/src/ui/context/OxyContext.tsx +404 -285
  189. package/src/ui/screens/FileManagementScreen.tsx +81 -4
  190. package/src/ui/screens/SignInScreen.tsx +59 -36
  191. package/src/ui/screens/WelcomeNewUserScreen.tsx +102 -91
  192. package/src/ui/screens/internal/SignInUsernameStep.tsx +1 -1
  193. package/src/ui/screens/steps/RecoverRequestStep.tsx +34 -24
  194. package/src/ui/screens/steps/RecoverResetPasswordStep.tsx +65 -36
  195. package/src/ui/screens/steps/RecoverSuccessStep.tsx +71 -47
  196. package/src/ui/screens/steps/RecoverVerifyStep.tsx +60 -50
  197. package/src/ui/screens/steps/SignInPasswordStep.tsx +191 -29
  198. package/src/ui/screens/steps/SignInTotpStep.tsx +68 -34
  199. package/src/ui/screens/steps/SignInUsernameStep.tsx +586 -57
  200. package/src/ui/screens/steps/SignUpIdentityStep.tsx +49 -35
  201. package/src/ui/screens/steps/SignUpSecurityStep.tsx +56 -39
  202. package/src/ui/screens/steps/SignUpSummaryStep.tsx +99 -89
  203. package/src/ui/screens/steps/SignUpWelcomeStep.tsx +88 -20
  204. package/src/ui/stores/authStore.ts +15 -19
  205. package/src/ui/styles/authStyles.ts +2 -1
  206. package/src/ui/styles/index.ts +1 -0
  207. package/src/ui/styles/spacing.ts +46 -0
  208. package/src/utils/validationUtils.ts +1 -1
@@ -0,0 +1,128 @@
1
+ {
2
+ "signin": {
3
+ "title": "로그인",
4
+ "subtitle": "계속하려면 로그인하세요",
5
+ "addAccountTitle": "다른 계정 추가",
6
+ "addAccountSubtitle": "다른 계정으로 로그인",
7
+ "username": {
8
+ "label": "사용자 이름",
9
+ "placeholder": "사용자 이름을 입력하세요",
10
+ "helper": "3-30자, 영문과 숫자만",
11
+ "required": "사용자 이름을 입력해주세요.",
12
+ "minLength": "사용자 이름은 최소 3자 이상이어야 합니다."
13
+ },
14
+ "password": {
15
+ "label": "비밀번호",
16
+ "placeholder": "비밀번호를 입력하세요",
17
+ "required": "비밀번호를 입력해주세요.",
18
+ "hint": "로그인하려면 비밀번호를 입력하세요"
19
+ },
20
+ "actions": {
21
+ "continue": "계속",
22
+ "back": "뒤로",
23
+ "signIn": "로그인",
24
+ "verify": "확인",
25
+ "openAccountSwitcher": "다른 계정으로 전환",
26
+ "openAccountSwitcherSubtitle": "{{count}}개의 다른 계정 사용 가능",
27
+ "openAccountSwitcherSubtitle_singular": "1개의 다른 계정 사용 가능",
28
+ "openAccountSwitcherSubtitle_zero": "저장된 계정 검토",
29
+ "manageAccounts": "저장된 계정 관리",
30
+ "manageAccountsSubtitle": "세션 검토, 제거 또는 로그아웃",
31
+ "loadingOtherAccounts": "다른 계정 로드 중…",
32
+ "switchAccountFailed": "계정을 전환할 수 없습니다. 다시 시도해주세요."
33
+ },
34
+ "forgotPrompt": "비밀번호를 잊으셨나요?",
35
+ "security": {
36
+ "dataSecure": "데이터가 암호화되어 안전합니다"
37
+ },
38
+ "currentlySignedInAs": "현재 로그인 중:",
39
+ "alreadySignedInWith": "이미 로그인 중:",
40
+ "alreadySignedIn": "이미 로그인됨",
41
+ "alreadySignedInMessage": "이 계정은 이미 로그인되어 있습니다. 이 계정으로 계속하시겠습니까?",
42
+ "continueWithAccount": "계속",
43
+ "currentAccount": "현재",
44
+ "or": "또는",
45
+ "viewAllAccounts": "{{count}}개 더 보기",
46
+ "status": {
47
+ "accountSwitched": "{{name}} 사용 중"
48
+ },
49
+ "totp": {
50
+ "title": "2단계 인증 코드",
51
+ "subtitle": "@{{username}}의 인증 앱에서 6자리 코드를 입력하세요",
52
+ "invalidCode": "잘못된 코드입니다. 다시 시도해주세요.",
53
+ "noAccess": "인증 앱에 액세스할 수 없나요?",
54
+ "useBackupCode": "백업 코드 사용",
55
+ "useRecoveryKey": "복구 키 사용"
56
+ }
57
+ },
58
+ "signup": {
59
+ "welcome": {
60
+ "title": "Oxy에 오신 것을 환영합니다!",
61
+ "subtitle": "몇 단계만으로 계정을 만드세요",
62
+ "haveAccount": "이미 계정이 있으신가요?",
63
+ "signInCta": "로그인"
64
+ },
65
+ "identity": {
66
+ "title": "당신은 누구인가요?",
67
+ "subtitle": "사용자 이름을 선택하고 이메일을 입력하세요"
68
+ },
69
+ "username": {
70
+ "helper": "3-30자, 영문과 숫자만",
71
+ "required": "사용자 이름을 입력해주세요",
72
+ "minLength": "사용자 이름은 최소 3자 이상이어야 합니다"
73
+ },
74
+ "email": {
75
+ "required": "이메일 주소를 입력해주세요",
76
+ "invalid": "유효한 이메일 주소를 입력해주세요",
77
+ "helper": "이메일을 공유하지 않습니다"
78
+ },
79
+ "security": {
80
+ "title": "계정 보호",
81
+ "subtitle": "계정을 보호하기 위한 강력한 비밀번호를 만드세요"
82
+ },
83
+ "password": {
84
+ "helper": "최소 8자",
85
+ "required": "비밀번호를 입력해주세요",
86
+ "minLength": "비밀번호는 최소 8자 이상이어야 합니다",
87
+ "confirmRequired": "비밀번호를 확인해주세요",
88
+ "mismatch": "비밀번호가 일치하지 않습니다",
89
+ "confirmHint": "확인을 위해 비밀번호를 다시 입력하세요"
90
+ },
91
+ "summary": {
92
+ "title": "거의 완료되었습니다!",
93
+ "subtitle": "정보를 검토하고 계정을 만드세요",
94
+ "sectionTitle": "계정 정보",
95
+ "fields": {
96
+ "username": "사용자 이름",
97
+ "email": "이메일",
98
+ "password": "비밀번호"
99
+ },
100
+ "notSet": "설정되지 않음",
101
+ "securityTip": "더 강력한 보안을 위해 계정을 만든 후 계정 설정에서 2단계 인증(TOTP)을 활성화하세요.",
102
+ "legalReminder": "계정을 만들면 서비스 약관 및 개인정보 보호정책에 동의하는 것입니다."
103
+ }
104
+ },
105
+ "common": {
106
+ "actions": {
107
+ "back": "뒤로",
108
+ "continue": "계속",
109
+ "next": "다음",
110
+ "getStarted": "시작하기",
111
+ "createAccount": "계정 만들기",
112
+ "signIn": "로그인",
113
+ "verify": "확인",
114
+ "resetPassword": "비밀번호 재설정"
115
+ },
116
+ "links": {
117
+ "recoverAccount": "계정 복구",
118
+ "signUp": "가입하기"
119
+ },
120
+ "labels": {
121
+ "username": "사용자 이름",
122
+ "email": "이메일",
123
+ "password": "비밀번호",
124
+ "confirmPassword": "비밀번호 확인"
125
+ }
126
+ }
127
+ }
128
+
@@ -0,0 +1,128 @@
1
+ {
2
+ "signin": {
3
+ "title": "Iniciar sessão",
4
+ "subtitle": "Inicie sessão para continuar",
5
+ "addAccountTitle": "Adicionar outra conta",
6
+ "addAccountSubtitle": "Iniciar sessão com outra conta",
7
+ "username": {
8
+ "label": "Nome de utilizador",
9
+ "placeholder": "Introduza o seu nome de utilizador",
10
+ "helper": "3-30 caracteres, apenas letras e números",
11
+ "required": "Por favor, introduza o seu nome de utilizador.",
12
+ "minLength": "O nome de utilizador deve ter pelo menos 3 caracteres."
13
+ },
14
+ "password": {
15
+ "label": "Palavra-passe",
16
+ "placeholder": "Introduza a sua palavra-passe",
17
+ "required": "Por favor, introduza a sua palavra-passe.",
18
+ "hint": "Introduza a sua palavra-passe para iniciar sessão"
19
+ },
20
+ "actions": {
21
+ "continue": "Continuar",
22
+ "back": "Voltar",
23
+ "signIn": "Iniciar sessão",
24
+ "verify": "Verificar",
25
+ "openAccountSwitcher": "Mudar para outra conta",
26
+ "openAccountSwitcherSubtitle": "{{count}} outras contas disponíveis",
27
+ "openAccountSwitcherSubtitle_singular": "1 outra conta disponível",
28
+ "openAccountSwitcherSubtitle_zero": "Revise as suas contas guardadas",
29
+ "manageAccounts": "Gerir contas guardadas",
30
+ "manageAccountsSubtitle": "Rever sessões, remover ou terminar sessão",
31
+ "loadingOtherAccounts": "A carregar outras contas…",
32
+ "switchAccountFailed": "Não foi possível mudar de conta. Por favor, tente novamente."
33
+ },
34
+ "forgotPrompt": "Esqueceu-se da palavra-passe?",
35
+ "security": {
36
+ "dataSecure": "Os seus dados estão encriptados e seguros"
37
+ },
38
+ "currentlySignedInAs": "Atualmente com sessão iniciada como",
39
+ "alreadySignedInWith": "Já tem sessão iniciada com",
40
+ "alreadySignedIn": "Já tem sessão iniciada",
41
+ "alreadySignedInMessage": "Esta conta já tem sessão iniciada. Continuar com esta conta?",
42
+ "continueWithAccount": "Continuar",
43
+ "currentAccount": "Atual",
44
+ "or": "ou",
45
+ "viewAllAccounts": "Ver mais {{count}}",
46
+ "status": {
47
+ "accountSwitched": "Agora a usar {{name}}"
48
+ },
49
+ "totp": {
50
+ "title": "Código de dois fatores",
51
+ "subtitle": "Introduza o código de 6 dígitos da sua app autenticadora para @{{username}}",
52
+ "invalidCode": "Código inválido. Por favor, tente novamente.",
53
+ "noAccess": "Sem acesso ao seu autenticador?",
54
+ "useBackupCode": "Usar código de backup",
55
+ "useRecoveryKey": "Usar chave de recuperação"
56
+ }
57
+ },
58
+ "signup": {
59
+ "welcome": {
60
+ "title": "Bem-vindo ao Oxy!",
61
+ "subtitle": "Crie a sua conta em poucos passos",
62
+ "haveAccount": "Já tem uma conta?",
63
+ "signInCta": "Iniciar sessão"
64
+ },
65
+ "identity": {
66
+ "title": "Quem é?",
67
+ "subtitle": "Escolha o seu nome de utilizador e introduza o seu email"
68
+ },
69
+ "username": {
70
+ "helper": "3-30 caracteres, apenas letras e números",
71
+ "required": "Por favor, introduza um nome de utilizador",
72
+ "minLength": "O nome de utilizador deve ter pelo menos 3 caracteres"
73
+ },
74
+ "email": {
75
+ "required": "Por favor, introduza um endereço de email",
76
+ "invalid": "Por favor, introduza um endereço de email válido",
77
+ "helper": "Nunca partilharemos o seu email"
78
+ },
79
+ "security": {
80
+ "title": "Proteja a sua conta",
81
+ "subtitle": "Crie uma palavra-passe forte para proteger a sua conta"
82
+ },
83
+ "password": {
84
+ "helper": "Pelo menos 8 caracteres",
85
+ "required": "Por favor, introduza uma palavra-passe",
86
+ "minLength": "A palavra-passe deve ter pelo menos 8 caracteres",
87
+ "confirmRequired": "Por favor, confirme a sua palavra-passe",
88
+ "mismatch": "As palavras-passe não coincidem",
89
+ "confirmHint": "Reintroduza a sua palavra-passe para confirmar"
90
+ },
91
+ "summary": {
92
+ "title": "Quase lá!",
93
+ "subtitle": "Revise as suas informações e crie a sua conta",
94
+ "sectionTitle": "Informações da conta",
95
+ "fields": {
96
+ "username": "Nome de utilizador",
97
+ "email": "Email",
98
+ "password": "Palavra-passe"
99
+ },
100
+ "notSet": "Não definido",
101
+ "securityTip": "Para maior segurança, ative a Autenticação de Dois Fatores (TOTP) nas Definições da conta após criar a sua conta.",
102
+ "legalReminder": "Ao criar uma conta, concorda com os nossos Termos de Serviço e Política de Privacidade."
103
+ }
104
+ },
105
+ "common": {
106
+ "actions": {
107
+ "back": "Voltar",
108
+ "continue": "Continuar",
109
+ "next": "Seguinte",
110
+ "getStarted": "Começar",
111
+ "createAccount": "Criar conta",
112
+ "signIn": "Iniciar sessão",
113
+ "verify": "Verificar",
114
+ "resetPassword": "Repor palavra-passe"
115
+ },
116
+ "links": {
117
+ "recoverAccount": "Recuperar a sua conta",
118
+ "signUp": "Registar-se"
119
+ },
120
+ "labels": {
121
+ "username": "Nome de utilizador",
122
+ "email": "Email",
123
+ "password": "Palavra-passe",
124
+ "confirmPassword": "Confirmar palavra-passe"
125
+ }
126
+ }
127
+ }
128
+
@@ -0,0 +1,128 @@
1
+ {
2
+ "signin": {
3
+ "title": "登录",
4
+ "subtitle": "登录以继续",
5
+ "addAccountTitle": "添加另一个账户",
6
+ "addAccountSubtitle": "使用另一个账户登录",
7
+ "username": {
8
+ "label": "用户名",
9
+ "placeholder": "输入您的用户名",
10
+ "helper": "3-30个字符,仅字母和数字",
11
+ "required": "请输入您的用户名。",
12
+ "minLength": "用户名必须至少包含3个字符。"
13
+ },
14
+ "password": {
15
+ "label": "密码",
16
+ "placeholder": "输入您的密码",
17
+ "required": "请输入您的密码。",
18
+ "hint": "输入您的密码以登录"
19
+ },
20
+ "actions": {
21
+ "continue": "继续",
22
+ "back": "返回",
23
+ "signIn": "登录",
24
+ "verify": "验证",
25
+ "openAccountSwitcher": "切换到另一个账户",
26
+ "openAccountSwitcherSubtitle": "{{count}}个其他账户可用",
27
+ "openAccountSwitcherSubtitle_singular": "1个其他账户可用",
28
+ "openAccountSwitcherSubtitle_zero": "查看您保存的账户",
29
+ "manageAccounts": "管理保存的账户",
30
+ "manageAccountsSubtitle": "查看会话、删除或登出",
31
+ "loadingOtherAccounts": "加载其他账户中…",
32
+ "switchAccountFailed": "无法切换账户。请重试。"
33
+ },
34
+ "forgotPrompt": "忘记密码?",
35
+ "security": {
36
+ "dataSecure": "您的数据已加密且安全"
37
+ },
38
+ "currentlySignedInAs": "当前登录为",
39
+ "alreadySignedInWith": "已登录",
40
+ "alreadySignedIn": "已登录",
41
+ "alreadySignedInMessage": "此账户已登录。继续使用此账户?",
42
+ "continueWithAccount": "继续",
43
+ "currentAccount": "当前",
44
+ "or": "或",
45
+ "viewAllAccounts": "查看更多{{count}}个",
46
+ "status": {
47
+ "accountSwitched": "正在使用{{name}}"
48
+ },
49
+ "totp": {
50
+ "title": "双因素验证码",
51
+ "subtitle": "输入@{{username}}的验证器应用中的6位数字代码",
52
+ "invalidCode": "无效的代码。请重试。",
53
+ "noAccess": "无法访问您的验证器?",
54
+ "useBackupCode": "使用备份代码",
55
+ "useRecoveryKey": "使用恢复密钥"
56
+ }
57
+ },
58
+ "signup": {
59
+ "welcome": {
60
+ "title": "欢迎使用Oxy!",
61
+ "subtitle": "只需几步即可创建您的账户",
62
+ "haveAccount": "已有账户?",
63
+ "signInCta": "登录"
64
+ },
65
+ "identity": {
66
+ "title": "您是谁?",
67
+ "subtitle": "选择您的用户名并输入您的电子邮件"
68
+ },
69
+ "username": {
70
+ "helper": "3-30个字符,仅字母和数字",
71
+ "required": "请输入用户名",
72
+ "minLength": "用户名必须至少包含3个字符"
73
+ },
74
+ "email": {
75
+ "required": "请输入电子邮件地址",
76
+ "invalid": "请输入有效的电子邮件地址",
77
+ "helper": "我们绝不会分享您的电子邮件"
78
+ },
79
+ "security": {
80
+ "title": "保护您的账户",
81
+ "subtitle": "创建强密码以保护您的账户"
82
+ },
83
+ "password": {
84
+ "helper": "至少8个字符",
85
+ "required": "请输入密码",
86
+ "minLength": "密码必须至少包含8个字符",
87
+ "confirmRequired": "请确认您的密码",
88
+ "mismatch": "密码不匹配",
89
+ "confirmHint": "重新输入您的密码以确认"
90
+ },
91
+ "summary": {
92
+ "title": "快完成了!",
93
+ "subtitle": "查看您的信息并创建账户",
94
+ "sectionTitle": "账户信息",
95
+ "fields": {
96
+ "username": "用户名",
97
+ "email": "电子邮件",
98
+ "password": "密码"
99
+ },
100
+ "notSet": "未设置",
101
+ "securityTip": "为了更强的安全性,创建账户后,请在账户设置中启用双因素身份验证(TOTP)。",
102
+ "legalReminder": "创建账户即表示您同意我们的服务条款和隐私政策。"
103
+ }
104
+ },
105
+ "common": {
106
+ "actions": {
107
+ "back": "返回",
108
+ "continue": "继续",
109
+ "next": "下一步",
110
+ "getStarted": "开始",
111
+ "createAccount": "创建账户",
112
+ "signIn": "登录",
113
+ "verify": "验证",
114
+ "resetPassword": "重置密码"
115
+ },
116
+ "links": {
117
+ "recoverAccount": "恢复您的账户",
118
+ "signUp": "注册"
119
+ },
120
+ "labels": {
121
+ "username": "用户名",
122
+ "email": "电子邮件",
123
+ "password": "密码",
124
+ "confirmPassword": "确认密码"
125
+ }
126
+ }
127
+ }
128
+
@@ -1,6 +1,6 @@
1
1
  import type React from 'react';
2
2
  import { useState, useEffect } from 'react';
3
- import { Text, View, ActivityIndicator, StyleSheet, Platform } from 'react-native';
3
+ import { Platform } from 'react-native';
4
4
  import * as Font from 'expo-font';
5
5
 
6
6
  /**
@@ -21,21 +21,22 @@ const getPhuduFonts = () => {
21
21
  'Phudu-Black': require('../../assets/fonts/Phudu/Phudu-Black.ttf'),
22
22
  };
23
23
  } catch (error) {
24
+ if (__DEV__) {
24
25
  console.warn('Failed to load Phudu fonts:', error);
26
+ }
25
27
  return null;
26
28
  }
27
29
  };
28
30
 
29
31
  /**
30
- * FontLoader component that loads custom fonts before rendering children
32
+ * FontLoader component that loads custom fonts in the background while rendering children immediately
31
33
  * This works in both the package development and when consumed as an npm package
34
+ * Children render immediately with system fonts as fallback until custom fonts are loaded
32
35
  */
33
36
  export const FontLoader = ({
34
37
  children,
35
- fallbackContent,
36
38
  }: {
37
39
  children: React.ReactNode;
38
- fallbackContent?: React.ReactNode;
39
40
  }) => {
40
41
  const [fontState, setFontState] = useState<'loading' | 'loaded' | 'error'>('loading');
41
42
 
@@ -54,8 +55,9 @@ export const FontLoader = ({
54
55
 
55
56
  setFontState('loaded');
56
57
  } catch (error) {
58
+ if (__DEV__) {
57
59
  console.error('Error loading fonts:', error);
58
- // Fallback to render without custom fonts
60
+ }
59
61
  setFontState('error');
60
62
  }
61
63
  };
@@ -63,23 +65,14 @@ export const FontLoader = ({
63
65
  loadFonts();
64
66
  }, []);
65
67
 
66
- if (fontState === 'loading') {
67
- // Render a loading placeholder while fonts are loading
68
- if (fallbackContent) {
69
- return <>{fallbackContent}</>;
70
- }
71
- return (
72
- <View style={styles.loaderContainer}>
73
- <ActivityIndicator size="small" color="#d169e5" />
74
- </View>
75
- );
76
- }
77
-
78
- if (fontState === 'error') {
68
+ // Always render children immediately - fonts will load in background
69
+ // If fonts aren't loaded yet, the app will use system fonts as fallback
70
+ if (fontState === 'error' && __DEV__) {
79
71
  console.warn('Fonts failed to load. Using system fonts instead.');
80
72
  }
81
73
 
82
- // Return children even on error - the app will use system fonts as fallback
74
+ // Render children immediately, even while fonts are loading
75
+ // Fonts will apply when they're ready, otherwise system fonts are used
83
76
  return <>{children}</>;
84
77
  };
85
78
 
@@ -148,35 +141,22 @@ export const setupFonts = async () => {
148
141
  `;
149
142
 
150
143
  style.textContent = fontFaceRules;
151
- // Append to the document head
152
144
  document.head.appendChild(style);
145
+ if (__DEV__) {
153
146
  console.info('All Phudu web fonts have been dynamically loaded');
147
+ }
154
148
  }
155
149
  } else {
156
- // For native platforms, guidance for the package users
157
- console.info('Fonts should be linked in native projects to use Phudu fonts');
158
-
159
150
  // Attempt to load the fonts anyway (this works if the consumer has linked the assets)
160
151
  await Font.loadAsync(phuduFonts);
161
152
  }
162
153
 
163
154
  return true;
164
155
  } catch (error: unknown) {
156
+ if (__DEV__) {
165
157
  const errorMessage = error instanceof Error ? error.message : String(error);
166
158
  console.warn('Error setting up fonts:', errorMessage);
159
+ }
167
160
  return false;
168
161
  }
169
- };
170
-
171
- const styles = StyleSheet.create({
172
- loaderContainer: {
173
- position: 'absolute',
174
- top: 0,
175
- left: 0,
176
- right: 0,
177
- bottom: 0,
178
- justifyContent: 'center',
179
- alignItems: 'center',
180
- backgroundColor: 'transparent',
181
- },
182
- });
162
+ };
@@ -1,4 +1,4 @@
1
- import React, { useCallback, useRef, useState, useEffect, useMemo, forwardRef, useImperativeHandle } from 'react';
1
+ import { useCallback, useRef, useState, useEffect, useMemo, forwardRef, useImperativeHandle, type FC } from 'react';
2
2
  import { View, Text, StyleSheet, Platform, Animated, StatusBar, Keyboard, KeyboardEvent, AppState } from 'react-native';
3
3
  import { SafeAreaProvider, useSafeAreaInsets } from 'react-native-safe-area-context';
4
4
  import { GestureHandlerRootView } from 'react-native-gesture-handler';
@@ -10,7 +10,7 @@ import { Toaster } from '../../lib/sonner';
10
10
  import { QueryClient, QueryClientProvider, focusManager } from '@tanstack/react-query';
11
11
 
12
12
  // Import bottom sheet components directly - no longer a peer dependency
13
- import { BottomSheetModal, BottomSheetBackdrop, type BottomSheetBackdropProps, BottomSheetModalProvider, BottomSheetView, BottomSheetScrollView } from '@gorhom/bottom-sheet';
13
+ import { BottomSheetModal, BottomSheetBackdrop, type BottomSheetBackdropProps, BottomSheetModalProvider, BottomSheetView } from '@gorhom/bottom-sheet';
14
14
  import type { BottomSheetModalMethods as BottomSheetModalRef } from '@gorhom/bottom-sheet/lib/typescript/types';
15
15
 
16
16
  // Initialize fonts automatically
@@ -23,7 +23,7 @@ setupFonts();
23
23
  * 1. As a context provider for authentication and session management across the app
24
24
  * 2. As a UI component for authentication and account management using a bottom sheet
25
25
  */
26
- const OxyProvider: React.FC<OxyProviderProps> = (props) => {
26
+ const OxyProvider: FC<OxyProviderProps> = (props) => {
27
27
  const {
28
28
  oxyServices,
29
29
  children,
@@ -335,18 +335,19 @@ const OxyBottomSheet = forwardRef<BottomSheetController, OxyBottomSheetProps>(({
335
335
  onChange={(index) => { isOpenRef.current = index !== -1; }}
336
336
  onDismiss={() => { isOpenRef.current = false; }}
337
337
  >
338
- <BottomSheetScrollView
339
- style={[styles.contentContainer]}
340
- keyboardShouldPersistTaps="handled"
341
- contentContainerStyle={{ paddingBottom: (insets?.bottom ?? 0) + (appInsets?.bottom ?? 0) }}
342
- >
343
- <View style={styles.centeredContentWrapper}>
338
+ <BottomSheetView style={[styles.contentContainer]}>
339
+ <View
340
+ style={[
341
+ styles.centeredContentWrapper,
342
+ { paddingBottom: (insets?.bottom ?? 0) + (appInsets?.bottom ?? 0) }
343
+ ]}
344
+ >
344
345
  <Animated.View
345
346
  style={[
346
347
  styles.animatedContent,
347
- Platform.OS === 'android' ?
348
- { opacity: 1 } :
349
- { opacity: fadeAnim, transform: [{ translateY: slideAnim }] }
348
+ Platform.OS === 'android'
349
+ ? { opacity: 1 }
350
+ : { opacity: fadeAnim, transform: [{ translateY: slideAnim }] }
350
351
  ]}
351
352
  >
352
353
  {oxyServices ? (
@@ -366,7 +367,7 @@ const OxyBottomSheet = forwardRef<BottomSheetController, OxyBottomSheetProps>(({
366
367
  )}
367
368
  </Animated.View>
368
369
  </View>
369
- </BottomSheetScrollView>
370
+ </BottomSheetView>
370
371
  {showInternalToaster && (
371
372
  <View style={styles.toasterContainer}>
372
373
  <Toaster position="top-center" swipeToDismissDirection="left" />