@atproto/oauth-provider-ui 0.0.2

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/.linguirc +57 -0
  2. package/CHANGELOG.md +7 -0
  3. package/CONTRIBUTING.md +6 -0
  4. package/LICENSE.txt +7 -0
  5. package/dist/assets/COdVzed-.css +3 -0
  6. package/dist/assets/COdVzed-.js +100 -0
  7. package/dist/assets/COdVzed-.js.map +1 -0
  8. package/dist/assets/Cqnfnbvc.js +6 -0
  9. package/dist/assets/Cqnfnbvc.js.map +1 -0
  10. package/dist/assets/bundle-manifest.json +630 -0
  11. package/dist/assets/error-view-Bu4y7Nd8.js +208 -0
  12. package/dist/assets/error-view-Bu4y7Nd8.js.map +1 -0
  13. package/dist/assets/index-DXlCRM6V.js +36 -0
  14. package/dist/assets/index-DXlCRM6V.js.map +1 -0
  15. package/dist/assets/messages-2GoTm2qL.js +4 -0
  16. package/dist/assets/messages-2GoTm2qL.js.map +1 -0
  17. package/dist/assets/messages-6Cn2Jbhw.js +4 -0
  18. package/dist/assets/messages-6Cn2Jbhw.js.map +1 -0
  19. package/dist/assets/messages-75hFgOK2.js +4 -0
  20. package/dist/assets/messages-75hFgOK2.js.map +1 -0
  21. package/dist/assets/messages-B3OK4k0O.js +4 -0
  22. package/dist/assets/messages-B3OK4k0O.js.map +1 -0
  23. package/dist/assets/messages-BNXlPzKV.js +4 -0
  24. package/dist/assets/messages-BNXlPzKV.js.map +1 -0
  25. package/dist/assets/messages-BUygB8mD.js +4 -0
  26. package/dist/assets/messages-BUygB8mD.js.map +1 -0
  27. package/dist/assets/messages-BVPPcwNr.js +4 -0
  28. package/dist/assets/messages-BVPPcwNr.js.map +1 -0
  29. package/dist/assets/messages-BbbWUQS8.js +4 -0
  30. package/dist/assets/messages-BbbWUQS8.js.map +1 -0
  31. package/dist/assets/messages-BibKCYyW.js +4 -0
  32. package/dist/assets/messages-BibKCYyW.js.map +1 -0
  33. package/dist/assets/messages-BlPrr9_7.js +4 -0
  34. package/dist/assets/messages-BlPrr9_7.js.map +1 -0
  35. package/dist/assets/messages-ByVCw40U.js +4 -0
  36. package/dist/assets/messages-ByVCw40U.js.map +1 -0
  37. package/dist/assets/messages-C5DU1neP.js +4 -0
  38. package/dist/assets/messages-C5DU1neP.js.map +1 -0
  39. package/dist/assets/messages-C6IgUtbX.js +4 -0
  40. package/dist/assets/messages-C6IgUtbX.js.map +1 -0
  41. package/dist/assets/messages-C92Zzt2o.js +4 -0
  42. package/dist/assets/messages-C92Zzt2o.js.map +1 -0
  43. package/dist/assets/messages-CGZqYT14.js +4 -0
  44. package/dist/assets/messages-CGZqYT14.js.map +1 -0
  45. package/dist/assets/messages-CGlsy4wt.js +4 -0
  46. package/dist/assets/messages-CGlsy4wt.js.map +1 -0
  47. package/dist/assets/messages-CPT1nd0u.js +4 -0
  48. package/dist/assets/messages-CPT1nd0u.js.map +1 -0
  49. package/dist/assets/messages-CTTdXyw_.js +4 -0
  50. package/dist/assets/messages-CTTdXyw_.js.map +1 -0
  51. package/dist/assets/messages-ChK_C_Pj.js +4 -0
  52. package/dist/assets/messages-ChK_C_Pj.js.map +1 -0
  53. package/dist/assets/messages-CjJbk7Uf.js +4 -0
  54. package/dist/assets/messages-CjJbk7Uf.js.map +1 -0
  55. package/dist/assets/messages-CoiLjLYO.js +4 -0
  56. package/dist/assets/messages-CoiLjLYO.js.map +1 -0
  57. package/dist/assets/messages-Cwx6B4Ti.js +4 -0
  58. package/dist/assets/messages-Cwx6B4Ti.js.map +1 -0
  59. package/dist/assets/messages-D0uXAp_H.js +4 -0
  60. package/dist/assets/messages-D0uXAp_H.js.map +1 -0
  61. package/dist/assets/messages-DG0_arU0.js +4 -0
  62. package/dist/assets/messages-DG0_arU0.js.map +1 -0
  63. package/dist/assets/messages-DOXFJh9K.js +4 -0
  64. package/dist/assets/messages-DOXFJh9K.js.map +1 -0
  65. package/dist/assets/messages-DPK7nOoC.js +4 -0
  66. package/dist/assets/messages-DPK7nOoC.js.map +1 -0
  67. package/dist/assets/messages-Duccgtu0.js +4 -0
  68. package/dist/assets/messages-Duccgtu0.js.map +1 -0
  69. package/dist/assets/messages-DxTqgsHq.js +4 -0
  70. package/dist/assets/messages-DxTqgsHq.js.map +1 -0
  71. package/dist/assets/messages-E5_lTg7A.js +4 -0
  72. package/dist/assets/messages-E5_lTg7A.js.map +1 -0
  73. package/dist/assets/messages-UhunAjh1.js +4 -0
  74. package/dist/assets/messages-UhunAjh1.js.map +1 -0
  75. package/dist/assets/messages-Xg_3YLGw.js +4 -0
  76. package/dist/assets/messages-Xg_3YLGw.js.map +1 -0
  77. package/dist/assets/messages-iliBQHY2.js +4 -0
  78. package/dist/assets/messages-iliBQHY2.js.map +1 -0
  79. package/dist/assets/messages-lRprpIl-.js +4 -0
  80. package/dist/assets/messages-lRprpIl-.js.map +1 -0
  81. package/dist/assets/messages-pbPHQbz1.js +4 -0
  82. package/dist/assets/messages-pbPHQbz1.js.map +1 -0
  83. package/dist/assets/messages-q-O7ZQGs.js +4 -0
  84. package/dist/assets/messages-q-O7ZQGs.js.map +1 -0
  85. package/dist/lib/index.d.ts +19 -0
  86. package/dist/lib/index.d.ts.map +1 -0
  87. package/dist/lib/index.js +47 -0
  88. package/dist/lib/index.js.map +1 -0
  89. package/dist/tsconfig.backend.tsbuildinfo +1 -0
  90. package/lib/index.ts +72 -0
  91. package/package.json +73 -0
  92. package/rollup.config.js +102 -0
  93. package/src/authorization-page.html +183 -0
  94. package/src/authorization-page.tsx +55 -0
  95. package/src/backend-data.ts +35 -0
  96. package/src/components/forms/button-toggle-visibility.tsx +43 -0
  97. package/src/components/forms/button.tsx +60 -0
  98. package/src/components/forms/fieldset.tsx +55 -0
  99. package/src/components/forms/form-card-async.tsx +103 -0
  100. package/src/components/forms/form-card.tsx +49 -0
  101. package/src/components/forms/input-checkbox.tsx +78 -0
  102. package/src/components/forms/input-container.tsx +107 -0
  103. package/src/components/forms/input-email-address.tsx +65 -0
  104. package/src/components/forms/input-new-password.tsx +62 -0
  105. package/src/components/forms/input-password.tsx +87 -0
  106. package/src/components/forms/input-text.tsx +82 -0
  107. package/src/components/forms/input-token.tsx +94 -0
  108. package/src/components/forms/wizard-card.tsx +116 -0
  109. package/src/components/layouts/layout-title-page.tsx +77 -0
  110. package/src/components/layouts/layout-welcome.tsx +73 -0
  111. package/src/components/utils/account-identifier.tsx +23 -0
  112. package/src/components/utils/account-image.tsx +33 -0
  113. package/src/components/utils/admonition.tsx +52 -0
  114. package/src/components/utils/client-name.tsx +45 -0
  115. package/src/components/utils/error-card.tsx +93 -0
  116. package/src/components/utils/error-message.tsx +88 -0
  117. package/src/components/utils/help-card.tsx +46 -0
  118. package/src/components/utils/icons.tsx +88 -0
  119. package/src/components/utils/link-anchor.tsx +28 -0
  120. package/src/components/utils/link-title.tsx +26 -0
  121. package/src/components/utils/multi-lang-string.tsx +56 -0
  122. package/src/components/utils/password-strength-label.tsx +37 -0
  123. package/src/components/utils/password-strength-meter.tsx +58 -0
  124. package/src/components/utils/url-viewer.tsx +73 -0
  125. package/src/cookies.ts +11 -0
  126. package/src/error-page.html +125 -0
  127. package/src/error-page.tsx +29 -0
  128. package/src/hooks/use-api.ts +182 -0
  129. package/src/hooks/use-async-action.ts +120 -0
  130. package/src/hooks/use-bound-dispatch.ts +5 -0
  131. package/src/hooks/use-browser-color-scheme.ts +31 -0
  132. package/src/hooks/use-csrf-token.ts +5 -0
  133. package/src/hooks/use-random-string.ts +37 -0
  134. package/src/hooks/use-stepper.ts +87 -0
  135. package/src/index.html +13 -0
  136. package/src/lib/api.ts +234 -0
  137. package/src/lib/backend-data.ts +6 -0
  138. package/src/lib/clsx.ts +6 -0
  139. package/src/lib/json-client.ts +97 -0
  140. package/src/lib/password.ts +98 -0
  141. package/src/lib/ref.ts +17 -0
  142. package/src/lib/util.ts +13 -0
  143. package/src/locales/an/messages.po +487 -0
  144. package/src/locales/ast/messages.po +487 -0
  145. package/src/locales/ca/messages.po +487 -0
  146. package/src/locales/da/messages.po +487 -0
  147. package/src/locales/de/messages.po +487 -0
  148. package/src/locales/el/messages.po +487 -0
  149. package/src/locales/en/messages.po +487 -0
  150. package/src/locales/en-GB/messages.po +487 -0
  151. package/src/locales/es/messages.po +487 -0
  152. package/src/locales/eu/messages.po +487 -0
  153. package/src/locales/fi/messages.po +487 -0
  154. package/src/locales/fr/messages.po +487 -0
  155. package/src/locales/ga/messages.po +487 -0
  156. package/src/locales/gl/messages.po +487 -0
  157. package/src/locales/hi/messages.po +487 -0
  158. package/src/locales/hu/messages.po +487 -0
  159. package/src/locales/ia/messages.po +487 -0
  160. package/src/locales/id/messages.po +487 -0
  161. package/src/locales/it/messages.po +487 -0
  162. package/src/locales/ja/messages.po +487 -0
  163. package/src/locales/km/messages.po +487 -0
  164. package/src/locales/ko/messages.po +487 -0
  165. package/src/locales/load.ts +8 -0
  166. package/src/locales/locale-context.ts +19 -0
  167. package/src/locales/locale-provider.tsx +112 -0
  168. package/src/locales/locale-selector.tsx +58 -0
  169. package/src/locales/locales.ts +168 -0
  170. package/src/locales/ne/messages.po +487 -0
  171. package/src/locales/nl/messages.po +487 -0
  172. package/src/locales/pl/messages.po +487 -0
  173. package/src/locales/pt-BR/messages.po +487 -0
  174. package/src/locales/ro/messages.po +487 -0
  175. package/src/locales/ru/messages.po +487 -0
  176. package/src/locales/sv/messages.po +487 -0
  177. package/src/locales/th/messages.po +487 -0
  178. package/src/locales/tr/messages.po +487 -0
  179. package/src/locales/uk/messages.po +487 -0
  180. package/src/locales/vi/messages.po +487 -0
  181. package/src/locales/zh-CN/messages.po +487 -0
  182. package/src/locales/zh-HK/messages.po +487 -0
  183. package/src/locales/zh-TW/messages.po +487 -0
  184. package/src/styles.css +33 -0
  185. package/src/views/authorize/accept/accept-form.tsx +150 -0
  186. package/src/views/authorize/accept/accept-view.tsx +70 -0
  187. package/src/views/authorize/authorize-view.tsx +183 -0
  188. package/src/views/authorize/reset-password/reset-password-confirm-form.tsx +88 -0
  189. package/src/views/authorize/reset-password/reset-password-request-form.tsx +80 -0
  190. package/src/views/authorize/reset-password/reset-password-view.tsx +127 -0
  191. package/src/views/authorize/sign-in/sign-in-form.tsx +242 -0
  192. package/src/views/authorize/sign-in/sign-in-picker.tsx +116 -0
  193. package/src/views/authorize/sign-in/sign-in-view.tsx +145 -0
  194. package/src/views/authorize/sign-up/sign-up-account-form.tsx +142 -0
  195. package/src/views/authorize/sign-up/sign-up-disclaimer.tsx +51 -0
  196. package/src/views/authorize/sign-up/sign-up-handle-form.tsx +287 -0
  197. package/src/views/authorize/sign-up/sign-up-hcaptcha-form.tsx +108 -0
  198. package/src/views/authorize/sign-up/sign-up-view.tsx +158 -0
  199. package/src/views/authorize/welcome/welcome-view.tsx +56 -0
  200. package/src/views/error/error-view.tsx +31 -0
  201. package/tailwind.config.js +31 -0
  202. package/tsconfig.backend.json +8 -0
  203. package/tsconfig.frontend.json +10 -0
  204. package/tsconfig.frontend.tsbuildinfo +1 -0
  205. package/tsconfig.json +8 -0
  206. package/tsconfig.tools.json +8 -0
  207. package/tsconfig.tools.tsbuildinfo +1 -0
  208. package/vite.config.mjs +16 -0
@@ -0,0 +1,487 @@
1
+ msgid ""
2
+ msgstr ""
3
+ "POT-Creation-Date: 2025-02-27 14:42+0100\n"
4
+ "MIME-Version: 1.0\n"
5
+ "Content-Type: text/plain; charset=utf-8\n"
6
+ "Content-Transfer-Encoding: 8bit\n"
7
+ "X-Generator: @lingui/cli\n"
8
+ "Language: zh-TW\n"
9
+ "Project-Id-Version: \n"
10
+ "Report-Msgid-Bugs-To: \n"
11
+ "PO-Revision-Date: \n"
12
+ "Last-Translator: \n"
13
+ "Language-Team: \n"
14
+ "Plural-Forms: \n"
15
+
16
+ #: src/views/authorize/accept/accept-form.tsx:76
17
+ msgid "<0/> is asking for permission to access your account (<1/>)."
18
+ msgstr ""
19
+
20
+ #: src/views/authorize/sign-in/sign-in-form.tsx:219
21
+ msgid "2FA Confirmation"
22
+ msgstr ""
23
+
24
+ #: src/components/utils/error-message.tsx:27
25
+ msgid "A second authentication factor is required"
26
+ msgstr ""
27
+
28
+ #: src/views/authorize/accept/accept-form.tsx:144
29
+ msgid "Access your account data (except chat messages)"
30
+ msgstr ""
31
+
32
+ #: src/views/authorize/accept/accept-form.tsx:146
33
+ msgid "Access your chat messages"
34
+ msgstr ""
35
+
36
+ #: src/views/authorize/sign-in/sign-in-form.tsx:138
37
+ msgid "Account"
38
+ msgstr ""
39
+
40
+ #: src/views/authorize/reset-password/reset-password-view.tsx:71
41
+ msgid "Already have a code?"
42
+ msgstr ""
43
+
44
+ #: src/components/utils/client-name.tsx:35
45
+ msgid "An application on your device"
46
+ msgstr ""
47
+
48
+ #: src/components/utils/error-message.tsx:87
49
+ msgid "An unknown error occurred"
50
+ msgstr ""
51
+
52
+ #: src/views/authorize/sign-in/sign-in-picker.tsx:110
53
+ msgid "Another account"
54
+ msgstr ""
55
+
56
+ #: src/views/authorize/welcome/welcome-view.tsx:28
57
+ msgid "Authenticate"
58
+ msgstr ""
59
+
60
+ #: src/views/authorize/accept/accept-view.tsx:55
61
+ #: src/views/authorize/accept/accept-form.tsx:56
62
+ msgid "Authorize"
63
+ msgstr ""
64
+
65
+ #: src/views/authorize/sign-in/sign-in-picker.tsx:47
66
+ #: src/views/authorize/sign-in/sign-in-form.tsx:130
67
+ #: src/views/authorize/reset-password/reset-password-view.tsx:65
68
+ #: src/views/authorize/reset-password/reset-password-view.tsx:95
69
+ #: src/components/forms/wizard-card.tsx:93
70
+ msgid "Back"
71
+ msgstr ""
72
+
73
+ #: src/views/authorize/sign-up/sign-up-handle-form.tsx:152
74
+ msgid "Between {minLength} and {maxLength} characters"
75
+ msgstr ""
76
+
77
+ #: src/views/authorize/accept/accept-form.tsx:89
78
+ msgid "By clicking <0>Authorize</0>, you allow this application to perform the following actions in accordance with their <1>terms of service</1> and <2>privacy policy</2>:"
79
+ msgstr ""
80
+
81
+ #: src/views/authorize/sign-up/sign-up-disclaimer.tsx:30
82
+ msgid "By creating an account you agree to the {0} and the {1} of this service."
83
+ msgstr ""
84
+
85
+ #: src/views/authorize/welcome/welcome-view.tsx:51
86
+ msgid "Cancel"
87
+ msgstr ""
88
+
89
+ #: src/views/authorize/sign-in/sign-in-form.tsx:232
90
+ msgid "Check your {0} email for a login code and enter it here."
91
+ msgstr ""
92
+
93
+ #: src/views/authorize/sign-up/sign-up-view.tsx:94
94
+ msgid "Choose a username"
95
+ msgstr ""
96
+
97
+ #: src/components/utils/error-card.tsx:76
98
+ msgid "Code"
99
+ msgstr ""
100
+
101
+ #: src/views/authorize/sign-in/sign-in-form.tsx:135
102
+ msgid "Confirm"
103
+ msgstr ""
104
+
105
+ #: src/views/authorize/sign-in/sign-in-view.tsx:65
106
+ msgid "Confirm your password to continue"
107
+ msgstr ""
108
+
109
+ #: src/views/authorize/sign-in/sign-in-form.tsx:223
110
+ msgid "Confirmation code"
111
+ msgstr ""
112
+
113
+ #: src/views/authorize/welcome/welcome-view.tsx:35
114
+ msgid "Create a new account"
115
+ msgstr ""
116
+
117
+ #: src/views/authorize/sign-up/sign-up-view.tsx:78
118
+ msgid "Create Account"
119
+ msgstr ""
120
+
121
+ #: src/views/authorize/accept/accept-form.tsx:60
122
+ msgid "Deny access"
123
+ msgstr ""
124
+
125
+ #: src/components/utils/error-card.tsx:83
126
+ msgid "Description"
127
+ msgstr ""
128
+
129
+ #: src/views/authorize/sign-up/sign-up-account-form.tsx:114
130
+ msgid "Email"
131
+ msgstr ""
132
+
133
+ #: src/views/authorize/reset-password/reset-password-request-form.tsx:55
134
+ #: src/views/authorize/reset-password/reset-password-request-form.tsx:60
135
+ #: src/components/forms/input-email-address.tsx:51
136
+ msgid "Email address"
137
+ msgstr ""
138
+
139
+ #: src/components/forms/input-new-password.tsx:44
140
+ msgid "Enter a password"
141
+ msgstr ""
142
+
143
+ #: src/views/authorize/reset-password/reset-password-view.tsx:85
144
+ msgid "Enter the code you received to reset your password."
145
+ msgstr ""
146
+
147
+ #: src/views/authorize/reset-password/reset-password-request-form.tsx:71
148
+ msgid "Enter the email you used to create your account. We'll send you a \"reset code\" so you can set a new password."
149
+ msgstr ""
150
+
151
+ #: src/views/authorize/reset-password/reset-password-request-form.tsx:58
152
+ msgid "Enter your email address"
153
+ msgstr ""
154
+
155
+ #: src/components/forms/input-new-password.tsx:45
156
+ msgid "Enter your new password"
157
+ msgstr ""
158
+
159
+ #: src/views/authorize/sign-in/sign-in-view.tsx:86
160
+ msgid "Enter your password"
161
+ msgstr ""
162
+
163
+ #: src/views/authorize/sign-in/sign-in-view.tsx:104
164
+ #: src/views/authorize/sign-in/sign-in-view.tsx:120
165
+ msgid "Enter your username and password"
166
+ msgstr ""
167
+
168
+ #: src/views/error/error-view.tsx:27
169
+ msgid "Error"
170
+ msgstr ""
171
+
172
+ #: src/views/authorize/sign-up/sign-up-account-form.tsx:102
173
+ msgid "example-com-xxxxx-xxxxx"
174
+ msgstr ""
175
+
176
+ #: src/components/utils/password-strength-label.tsx:25
177
+ msgid "Extra"
178
+ msgstr ""
179
+
180
+ #: src/views/authorize/reset-password/reset-password-view.tsx:53
181
+ msgid "Forgot Password"
182
+ msgstr ""
183
+
184
+ #: src/views/authorize/sign-in/sign-in-form.tsx:178
185
+ msgid "Forgot?"
186
+ msgstr ""
187
+
188
+ #: src/views/authorize/accept/accept-view.tsx:40
189
+ msgid "Grant access to your <0>{0}</0> account"
190
+ msgstr ""
191
+
192
+ #: src/components/utils/help-card.tsx:32
193
+ msgid "Having trouble? <0>Contact support</0>"
194
+ msgstr ""
195
+
196
+ #: src/components/forms/button-toggle-visibility.tsx:34
197
+ msgid "Hide"
198
+ msgstr ""
199
+
200
+ #: src/components/utils/link-title.tsx:15
201
+ msgid "Home"
202
+ msgstr ""
203
+
204
+ #: src/views/authorize/sign-in/sign-in-picker.tsx:86
205
+ msgid "Identifier"
206
+ msgstr ""
207
+
208
+ #: src/locales/locale-selector.tsx:48
209
+ msgid "Interface language selector"
210
+ msgstr ""
211
+
212
+ #: src/views/authorize/sign-up/sign-up-handle-form.tsx:275
213
+ msgid "Invalid"
214
+ msgstr ""
215
+
216
+ #: src/views/authorize/sign-up/sign-up-account-form.tsx:96
217
+ #: src/views/authorize/sign-up/sign-up-account-form.tsx:101
218
+ msgid "Invite code"
219
+ msgstr ""
220
+
221
+ #: src/views/authorize/reset-password/reset-password-view.tsx:55
222
+ msgid "Let's get your password reset!"
223
+ msgstr ""
224
+
225
+ #: src/views/authorize/authorize-view.tsx:172
226
+ msgid "Login complete"
227
+ msgstr ""
228
+
229
+ #: src/views/authorize/sign-in/sign-in-picker.tsx:104
230
+ msgid "Login to account that is not listed"
231
+ msgstr ""
232
+
233
+ #: src/components/forms/input-token.tsx:59
234
+ msgid "Looks like {example}"
235
+ msgstr ""
236
+
237
+ #: src/components/forms/button-toggle-visibility.tsx:34
238
+ msgid "Make visible"
239
+ msgstr ""
240
+
241
+ #: src/components/utils/password-strength-label.tsx:33
242
+ msgid "Missing"
243
+ msgstr ""
244
+
245
+ #: src/components/utils/password-strength-label.tsx:29
246
+ msgid "Moderate"
247
+ msgstr ""
248
+
249
+ #: src/views/authorize/sign-in/sign-in-picker.tsx:80
250
+ msgid "Name"
251
+ msgstr ""
252
+
253
+ #: src/views/authorize/reset-password/reset-password-confirm-form.tsx:76
254
+ msgid "New password"
255
+ msgstr ""
256
+
257
+ #: src/views/authorize/reset-password/reset-password-view.tsx:60
258
+ #: src/views/authorize/reset-password/reset-password-view.tsx:90
259
+ #: src/components/forms/wizard-card.tsx:96
260
+ msgid "Next"
261
+ msgstr ""
262
+
263
+ #: src/views/authorize/reset-password/reset-password-view.tsx:119
264
+ msgid "Okay"
265
+ msgstr ""
266
+
267
+ #: src/views/authorize/sign-up/sign-up-handle-form.tsx:157
268
+ msgid "Only letters, numbers, and hyphens"
269
+ msgstr ""
270
+
271
+ #: src/views/authorize/sign-up/sign-up-account-form.tsx:128
272
+ #: src/components/forms/input-password.tsx:53
273
+ msgid "Password"
274
+ msgstr ""
275
+
276
+ #: src/components/utils/password-strength-label.tsx:23
277
+ msgid "Password strength"
278
+ msgstr ""
279
+
280
+ #: src/components/utils/password-strength-meter.tsx:45
281
+ msgid "Password strength indicator"
282
+ msgstr ""
283
+
284
+ #: src/views/authorize/reset-password/reset-password-view.tsx:106
285
+ msgid "Password Updated"
286
+ msgstr ""
287
+
288
+ #: src/views/authorize/reset-password/reset-password-view.tsx:113
289
+ msgid "Password updated!"
290
+ msgstr ""
291
+
292
+ #: src/components/forms/input-new-password.tsx:46
293
+ msgid "Password with at least {MIN_PASSWORD_LENGTH} characters"
294
+ msgstr ""
295
+
296
+ #: src/views/authorize/sign-in/sign-in-form.tsx:192
297
+ msgid "Please verify the domain name of the website before entering your password. Never enter your password on a domain you do not trust."
298
+ msgstr ""
299
+
300
+ #: src/views/authorize/sign-up/sign-up-disclaimer.tsx:42
301
+ #: src/views/authorize/sign-up/sign-up-disclaimer.tsx:45
302
+ #: src/components/utils/link-title.tsx:17
303
+ msgid "Privacy Policy"
304
+ msgstr ""
305
+
306
+ #: src/views/authorize/sign-in/sign-in-form.tsx:206
307
+ #: src/views/authorize/sign-in/sign-in-form.tsx:211
308
+ msgid "Remember this account on this device"
309
+ msgstr ""
310
+
311
+ #: src/views/authorize/accept/accept-form.tsx:123
312
+ msgid "Requested permissions"
313
+ msgstr ""
314
+
315
+ #: src/views/authorize/reset-password/reset-password-confirm-form.tsx:61
316
+ msgid "Reset code"
317
+ msgstr ""
318
+
319
+ #: src/views/authorize/reset-password/reset-password-view.tsx:82
320
+ msgid "Reset Password"
321
+ msgstr ""
322
+
323
+ #: src/views/authorize/sign-in/sign-in-form.tsx:176
324
+ msgid "Reset your password"
325
+ msgstr ""
326
+
327
+ #: src/views/authorize/sign-up/sign-up-handle-form.tsx:196
328
+ msgid "Select domain"
329
+ msgstr ""
330
+
331
+ #: src/views/authorize/sign-in/sign-in-view.tsx:135
332
+ msgid "Select from an existing account"
333
+ msgstr ""
334
+
335
+ #: src/views/authorize/sign-in/sign-in-form.tsx:202
336
+ msgid "Session"
337
+ msgstr ""
338
+
339
+ #: src/views/authorize/welcome/welcome-view.tsx:45
340
+ msgid "Sign in"
341
+ msgstr ""
342
+
343
+ #: src/views/authorize/sign-in/sign-in-picker.tsx:75
344
+ msgid "Sign in as {0}"
345
+ msgstr ""
346
+
347
+ #: src/views/authorize/sign-in/sign-in-picker.tsx:53
348
+ msgid "Sign in as..."
349
+ msgstr ""
350
+
351
+ #: src/views/authorize/sign-up/sign-up-view.tsx:84
352
+ msgid "Sign up"
353
+ msgstr ""
354
+
355
+ #: src/components/forms/wizard-card.tsx:106
356
+ msgid "Step {currentPosition} of {count}"
357
+ msgstr ""
358
+
359
+ #: src/components/utils/password-strength-label.tsx:27
360
+ msgid "Strong"
361
+ msgstr ""
362
+
363
+ #: src/components/forms/form-card-async.tsx:96
364
+ msgid "Submit"
365
+ msgstr ""
366
+
367
+ #: src/components/utils/link-title.tsx:21
368
+ msgid "Support"
369
+ msgstr ""
370
+
371
+ #: src/views/authorize/sign-up/sign-up-disclaimer.tsx:34
372
+ #: src/views/authorize/sign-up/sign-up-disclaimer.tsx:37
373
+ #: src/components/utils/link-title.tsx:19
374
+ msgid "Terms of Service"
375
+ msgstr ""
376
+
377
+ #: src/components/utils/error-message.tsx:52
378
+ msgid "That handle cannot be used"
379
+ msgstr ""
380
+
381
+ #: src/components/utils/error-message.tsx:69
382
+ msgid "The data you submitted is invalid. Please check the form and try again."
383
+ msgstr ""
384
+
385
+ #: src/components/utils/error-message.tsx:43
386
+ msgid "The domain name is not allowed"
387
+ msgstr ""
388
+
389
+ #: src/components/utils/error-message.tsx:45
390
+ msgid "The handle contains inappropriate language"
391
+ msgstr ""
392
+
393
+ #: src/components/utils/error-message.tsx:50
394
+ msgid "The handle is already in use"
395
+ msgstr ""
396
+
397
+ #: src/components/utils/error-message.tsx:41
398
+ msgid "The handle is invalid"
399
+ msgstr ""
400
+
401
+ #: src/components/utils/error-message.tsx:35
402
+ msgid "The invite code is not valid"
403
+ msgstr ""
404
+
405
+ #: src/components/utils/error-message.tsx:77
406
+ msgid "This authorization request has been denied. Please try again."
407
+ msgstr ""
408
+
409
+ #: src/components/utils/error-message.tsx:57
410
+ msgid "This email is already used"
411
+ msgstr ""
412
+
413
+ #: src/components/utils/error-message.tsx:48
414
+ msgid "This handle is reserved"
415
+ msgstr ""
416
+
417
+ #: src/components/utils/error-message.tsx:64
418
+ msgid "This sign-in session has expired"
419
+ msgstr ""
420
+
421
+ #: src/views/authorize/sign-up/sign-up-handle-form.tsx:166
422
+ msgid "Type your desired username"
423
+ msgstr ""
424
+
425
+ #: src/components/utils/error-message.tsx:84
426
+ msgid "Unexpected server response"
427
+ msgstr ""
428
+
429
+ #: src/views/authorize/accept/accept-form.tsx:142
430
+ msgid "Uniquely identify you"
431
+ msgstr ""
432
+
433
+ #: src/views/authorize/sign-in/sign-in-form.tsx:143
434
+ msgid "Username or email address"
435
+ msgstr ""
436
+
437
+ #: src/views/authorize/sign-up/sign-up-handle-form.tsx:270
438
+ msgid "Valid"
439
+ msgstr ""
440
+
441
+ #: src/views/authorize/sign-up/sign-up-view.tsx:135
442
+ msgid "Verify you are human"
443
+ msgstr ""
444
+
445
+ #: src/views/authorize/sign-in/sign-in-form.tsx:189
446
+ msgid "Warning"
447
+ msgstr ""
448
+
449
+ #: src/views/authorize/sign-up/sign-up-view.tsx:80
450
+ msgid "We're so excited to have you join us!"
451
+ msgstr ""
452
+
453
+ #: src/components/utils/password-strength-label.tsx:31
454
+ msgid "Weak"
455
+ msgstr ""
456
+
457
+ #: src/components/utils/error-message.tsx:31
458
+ msgid "Wrong identifier or password"
459
+ msgstr ""
460
+
461
+ #: src/views/authorize/authorize-view.tsx:173
462
+ msgid "You are being redirected..."
463
+ msgstr ""
464
+
465
+ #: src/views/authorize/sign-up/sign-up-handle-form.tsx:235
466
+ msgid "You can change this username to any domain name you control after your account is set up."
467
+ msgstr ""
468
+
469
+ #: src/views/authorize/reset-password/reset-password-view.tsx:116
470
+ msgid "You can now sign in with your new password."
471
+ msgstr ""
472
+
473
+ #: src/views/authorize/reset-password/reset-password-confirm-form.tsx:54
474
+ msgid "You will receive an email with a \"reset code\". Enter that code here then enter your new password."
475
+ msgstr ""
476
+
477
+ #: src/views/authorize/sign-up/sign-up-view.tsx:116
478
+ msgid "Your account"
479
+ msgstr ""
480
+
481
+ #: src/views/authorize/sign-up/sign-up-handle-form.tsx:217
482
+ msgid "Your full username will be: {0}"
483
+ msgstr ""
484
+
485
+ #: src/views/authorize/reset-password/reset-password-view.tsx:108
486
+ msgid "Your password has been updated!"
487
+ msgstr ""
package/src/styles.css ADDED
@@ -0,0 +1,33 @@
1
+ @tailwind base;
2
+ @tailwind components;
3
+ @tailwind utilities;
4
+
5
+ /*
6
+ * These are the default branding variables for the oauth authorization page.
7
+ * The colors below are in the R G B format, with values ranging from 0 to 255.
8
+ *
9
+ * The variables defined here are typically overridden by the backend, based on
10
+ * the provided branding colors configuration, if any, by injecting a <style>
11
+ * tag into the head of the document. Any missing color from the branding config
12
+ * will result in the values defined here to be used.
13
+ *
14
+ * The variables suffixed with "-c" are the contrasting colors for the
15
+ * corresponding color name. The backend will automatically compute & inject
16
+ * those values for defined branding configuration colors.
17
+ *
18
+ * The colors names used here match those defined in tailwind.config.js,
19
+ * allowing to use these color names with tailwind classes (e.g. `bg-brand
20
+ * text-brand-c`).
21
+ */
22
+ @layer base {
23
+ :root {
24
+ --color-brand: 255 115 179;
25
+ --color-brand-c: 0 0 0;
26
+ --color-error: 218 44 67;
27
+ --color-error-c: 255 255 255;
28
+ --color-warning: 255 201 73;
29
+ --color-warning-c: 0 0 0;
30
+ --color-success: 0 191 165;
31
+ --color-success-c: 255 255 255;
32
+ }
33
+ }
@@ -0,0 +1,150 @@
1
+ import { Trans, useLingui } from '@lingui/react/macro'
2
+ import type { Account, ScopeDetail } from '@atproto/oauth-provider-api'
3
+ import type { OAuthClientMetadata } from '@atproto/oauth-types'
4
+ import { Button } from '../../../components/forms/button.tsx'
5
+ import {
6
+ FormCard,
7
+ FormCardProps,
8
+ } from '../../../components/forms/form-card.tsx'
9
+ import { AccountIdentifier } from '../../../components/utils/account-identifier.tsx'
10
+ import { ClientName } from '../../../components/utils/client-name.tsx'
11
+ import { Override } from '../../../lib/util.ts'
12
+
13
+ export type AcceptFormProps = Override<
14
+ Omit<FormCardProps, 'onSubmit' | 'cancel' | 'actions' | 'children'>,
15
+ {
16
+ clientId: string
17
+ clientMetadata: OAuthClientMetadata
18
+ clientTrusted: boolean
19
+
20
+ account: Account
21
+ scopeDetails?: ScopeDetail[]
22
+
23
+ onAccept: () => void
24
+ onReject: () => void
25
+ onBack?: () => void
26
+ }
27
+ >
28
+
29
+ export function AcceptForm({
30
+ clientId,
31
+ clientMetadata,
32
+ clientTrusted,
33
+
34
+ account,
35
+ scopeDetails,
36
+
37
+ onAccept,
38
+ onReject,
39
+ onBack,
40
+
41
+ // FormCardProps
42
+ ...props
43
+ }: AcceptFormProps) {
44
+ const { t } = useLingui()
45
+ return (
46
+ <FormCard
47
+ {...props}
48
+ onSubmit={(event) => {
49
+ event.preventDefault()
50
+ onAccept()
51
+ }}
52
+ cancel={onBack && <Button onClick={onBack}>Back</Button>}
53
+ actions={
54
+ <>
55
+ <Button type="submit" color="brand">
56
+ <Trans>Authorize</Trans>
57
+ </Button>
58
+
59
+ <Button onClick={onReject}>
60
+ <Trans>Deny access</Trans>
61
+ </Button>
62
+ </>
63
+ }
64
+ >
65
+ {clientTrusted && clientMetadata.logo_uri && (
66
+ <div key="logo" className="flex items-center justify-center">
67
+ <img
68
+ crossOrigin="anonymous"
69
+ src={clientMetadata.logo_uri}
70
+ alt={clientMetadata.client_name}
71
+ className="w-16 h-16 rounded-full"
72
+ />
73
+ </div>
74
+ )}
75
+ <p>
76
+ <Trans>
77
+ <ClientName
78
+ clientId={clientId}
79
+ clientMetadata={clientMetadata}
80
+ clientTrusted={clientTrusted}
81
+ />{' '}
82
+ is asking for permission to access your account (
83
+ <AccountIdentifier account={account} />
84
+ ).
85
+ </Trans>
86
+ </p>
87
+
88
+ <p>
89
+ <Trans>
90
+ By clicking{' '}
91
+ <b>
92
+ <Trans>Authorize</Trans>
93
+ </b>
94
+ , you allow this application to perform the following actions in
95
+ accordance with their{' '}
96
+ <a
97
+ role="link"
98
+ href={clientMetadata.tos_uri}
99
+ rel="nofollow noopener"
100
+ target="_blank"
101
+ className="text-brand underline"
102
+ >
103
+ <Trans>terms of service</Trans>
104
+ </a>
105
+ {' and '}
106
+ <a
107
+ role="link"
108
+ href={clientMetadata.policy_uri}
109
+ rel="nofollow noopener"
110
+ target="_blank"
111
+ className="text-brand underline"
112
+ >
113
+ <Trans>privacy policy</Trans>
114
+ </a>
115
+ :
116
+ </Trans>
117
+ </p>
118
+
119
+ {scopeDetails?.length ? (
120
+ <ul
121
+ className="list-disc list-inside"
122
+ key="scopes"
123
+ aria-label={t`Requested permissions`}
124
+ >
125
+ {scopeDetails.map(({ scope, description }) => (
126
+ <li key={scope}>
127
+ {description || <ScopeDescription scope={scope} />}
128
+ </li>
129
+ ))}
130
+ </ul>
131
+ ) : null}
132
+ </FormCard>
133
+ )
134
+ }
135
+
136
+ type ScopeDescriptionProps = {
137
+ scope: string
138
+ }
139
+ function ScopeDescription({ scope }: ScopeDescriptionProps) {
140
+ switch (scope) {
141
+ case 'atproto':
142
+ return <Trans>Uniquely identify you</Trans>
143
+ case 'transition:generic':
144
+ return <Trans>Access your account data (except chat messages)</Trans>
145
+ case 'transition:chat.bsky':
146
+ return <Trans>Access your chat messages</Trans>
147
+ default:
148
+ return scope
149
+ }
150
+ }