@atproto/oauth-provider-ui 0.1.0 → 0.1.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 (194) hide show
  1. package/dist/authorization-page-Cms-rcBA.js +3 -0
  2. package/dist/authorization-page-Cms-rcBA.js.map +1 -0
  3. package/dist/bundle-manifest.json +630 -0
  4. package/dist/error-page-DC6Vc-cv.js +2 -0
  5. package/dist/error-page-DC6Vc-cv.js.map +1 -0
  6. package/dist/error-view-CRGNTAn2.css +1 -0
  7. package/dist/error-view-MVy7C9l0.js +59 -0
  8. package/dist/error-view-MVy7C9l0.js.map +1 -0
  9. package/dist/index-CHPoD7Rp.js +20 -0
  10. package/dist/index-CHPoD7Rp.js.map +1 -0
  11. package/dist/messages-B0mgsxS-.js +2 -0
  12. package/dist/messages-B0mgsxS-.js.map +1 -0
  13. package/dist/messages-B5g8Fkio.js +2 -0
  14. package/dist/messages-B5g8Fkio.js.map +1 -0
  15. package/dist/messages-BCMss-Kt.js +2 -0
  16. package/dist/messages-BCMss-Kt.js.map +1 -0
  17. package/dist/messages-BGUrKgyK.js +2 -0
  18. package/dist/messages-BGUrKgyK.js.map +1 -0
  19. package/dist/messages-BjxAnLDp.js +2 -0
  20. package/dist/messages-BjxAnLDp.js.map +1 -0
  21. package/dist/messages-Bjysz3rI.js +2 -0
  22. package/dist/messages-Bjysz3rI.js.map +1 -0
  23. package/dist/messages-BvvEr3UX.js +2 -0
  24. package/dist/messages-BvvEr3UX.js.map +1 -0
  25. package/dist/messages-Bz6JOhJf.js +2 -0
  26. package/dist/messages-Bz6JOhJf.js.map +1 -0
  27. package/dist/messages-BzL3D1EU.js +2 -0
  28. package/dist/messages-BzL3D1EU.js.map +1 -0
  29. package/dist/messages-CAvN5UoW.js +2 -0
  30. package/dist/messages-CAvN5UoW.js.map +1 -0
  31. package/dist/messages-CEmswT1Q.js +2 -0
  32. package/dist/messages-CEmswT1Q.js.map +1 -0
  33. package/dist/messages-CHYqz0q6.js +2 -0
  34. package/dist/messages-CHYqz0q6.js.map +1 -0
  35. package/dist/messages-CRmpdijj.js +2 -0
  36. package/dist/messages-CRmpdijj.js.map +1 -0
  37. package/dist/messages-Cdb79R6S.js +2 -0
  38. package/dist/messages-Cdb79R6S.js.map +1 -0
  39. package/dist/messages-ChkJ_0WT.js +2 -0
  40. package/dist/messages-ChkJ_0WT.js.map +1 -0
  41. package/dist/messages-CqiEX6JJ.js +2 -0
  42. package/dist/messages-CqiEX6JJ.js.map +1 -0
  43. package/dist/messages-CxkHjJSR.js +2 -0
  44. package/dist/messages-CxkHjJSR.js.map +1 -0
  45. package/dist/messages-D0-cWoJ9.js +2 -0
  46. package/dist/messages-D0-cWoJ9.js.map +1 -0
  47. package/dist/messages-D2MnAxYY.js +2 -0
  48. package/dist/messages-D2MnAxYY.js.map +1 -0
  49. package/dist/messages-D5TZVsui.js +2 -0
  50. package/dist/messages-D5TZVsui.js.map +1 -0
  51. package/dist/messages-DBdV4-iw.js +2 -0
  52. package/dist/messages-DBdV4-iw.js.map +1 -0
  53. package/dist/messages-DEK3zybC.js +2 -0
  54. package/dist/messages-DEK3zybC.js.map +1 -0
  55. package/dist/messages-DGSM5jkd.js +2 -0
  56. package/dist/messages-DGSM5jkd.js.map +1 -0
  57. package/dist/messages-DJgAnSTQ.js +2 -0
  58. package/dist/messages-DJgAnSTQ.js.map +1 -0
  59. package/dist/messages-DK7O7sb_.js +2 -0
  60. package/dist/messages-DK7O7sb_.js.map +1 -0
  61. package/dist/messages-DRp7qc3j.js +2 -0
  62. package/dist/messages-DRp7qc3j.js.map +1 -0
  63. package/dist/messages-DT6xRw0m.js +2 -0
  64. package/dist/messages-DT6xRw0m.js.map +1 -0
  65. package/dist/messages-LnzLtU0L.js +2 -0
  66. package/dist/messages-LnzLtU0L.js.map +1 -0
  67. package/dist/messages-_Nk2qNGw.js +2 -0
  68. package/dist/messages-_Nk2qNGw.js.map +1 -0
  69. package/dist/messages-eHH6nZyF.js +2 -0
  70. package/dist/messages-eHH6nZyF.js.map +1 -0
  71. package/dist/messages-iNw8zY2C.js +2 -0
  72. package/dist/messages-iNw8zY2C.js.map +1 -0
  73. package/dist/messages-ipc0L8yF.js +2 -0
  74. package/dist/messages-ipc0L8yF.js.map +1 -0
  75. package/dist/messages-j7LsWm2F.js +2 -0
  76. package/dist/messages-j7LsWm2F.js.map +1 -0
  77. package/dist/messages-mgE_5UEw.js +2 -0
  78. package/dist/messages-mgE_5UEw.js.map +1 -0
  79. package/dist/messages-oRd-J5--.js +2 -0
  80. package/dist/messages-oRd-J5--.js.map +1 -0
  81. package/package.json +10 -8
  82. package/.linguirc +0 -57
  83. package/CHANGELOG.md +0 -17
  84. package/CONTRIBUTING.md +0 -6
  85. package/authorization-page.html +0 -186
  86. package/error-page.html +0 -118
  87. package/index.html +0 -13
  88. package/src/authorization-page.tsx +0 -49
  89. package/src/components/forms/button-toggle-visibility.tsx +0 -43
  90. package/src/components/forms/button.tsx +0 -60
  91. package/src/components/forms/fieldset.tsx +0 -55
  92. package/src/components/forms/form-card-async.tsx +0 -103
  93. package/src/components/forms/form-card.tsx +0 -49
  94. package/src/components/forms/input-checkbox.tsx +0 -78
  95. package/src/components/forms/input-container.tsx +0 -107
  96. package/src/components/forms/input-email-address.tsx +0 -65
  97. package/src/components/forms/input-new-password.tsx +0 -62
  98. package/src/components/forms/input-password.tsx +0 -87
  99. package/src/components/forms/input-text.tsx +0 -82
  100. package/src/components/forms/input-token.tsx +0 -94
  101. package/src/components/forms/wizard-card.tsx +0 -116
  102. package/src/components/layouts/layout-title-page.tsx +0 -78
  103. package/src/components/layouts/layout-welcome.tsx +0 -78
  104. package/src/components/utils/account-identifier.tsx +0 -23
  105. package/src/components/utils/account-image.tsx +0 -33
  106. package/src/components/utils/admonition.tsx +0 -52
  107. package/src/components/utils/client-name.tsx +0 -71
  108. package/src/components/utils/error-card.tsx +0 -93
  109. package/src/components/utils/error-message.tsx +0 -88
  110. package/src/components/utils/help-card.tsx +0 -46
  111. package/src/components/utils/icons.tsx +0 -88
  112. package/src/components/utils/link-anchor.tsx +0 -28
  113. package/src/components/utils/link-title.tsx +0 -26
  114. package/src/components/utils/multi-lang-string.tsx +0 -62
  115. package/src/components/utils/password-strength-label.tsx +0 -37
  116. package/src/components/utils/password-strength-meter.tsx +0 -58
  117. package/src/components/utils/url-viewer.tsx +0 -73
  118. package/src/error-page.tsx +0 -23
  119. package/src/hooks/use-api.ts +0 -202
  120. package/src/hooks/use-async-action.ts +0 -120
  121. package/src/hooks/use-bound-dispatch.ts +0 -5
  122. package/src/hooks/use-browser-color-scheme.ts +0 -31
  123. package/src/hooks/use-random-string.ts +0 -37
  124. package/src/hooks/use-stepper.ts +0 -87
  125. package/src/lib/api.ts +0 -225
  126. package/src/lib/cookies.ts +0 -17
  127. package/src/lib/json-client.ts +0 -141
  128. package/src/lib/password.ts +0 -98
  129. package/src/lib/ref.ts +0 -17
  130. package/src/lib/util.ts +0 -14
  131. package/src/locales/an/messages.po +0 -494
  132. package/src/locales/ast/messages.po +0 -494
  133. package/src/locales/ca/messages.po +0 -494
  134. package/src/locales/da/messages.po +0 -494
  135. package/src/locales/de/messages.po +0 -494
  136. package/src/locales/el/messages.po +0 -494
  137. package/src/locales/en/messages.po +0 -494
  138. package/src/locales/en-GB/messages.po +0 -494
  139. package/src/locales/es/messages.po +0 -494
  140. package/src/locales/eu/messages.po +0 -494
  141. package/src/locales/fi/messages.po +0 -494
  142. package/src/locales/fr/messages.po +0 -494
  143. package/src/locales/ga/messages.po +0 -494
  144. package/src/locales/gl/messages.po +0 -494
  145. package/src/locales/hi/messages.po +0 -494
  146. package/src/locales/hu/messages.po +0 -494
  147. package/src/locales/ia/messages.po +0 -494
  148. package/src/locales/id/messages.po +0 -494
  149. package/src/locales/it/messages.po +0 -494
  150. package/src/locales/ja/messages.po +0 -494
  151. package/src/locales/km/messages.po +0 -494
  152. package/src/locales/ko/messages.po +0 -494
  153. package/src/locales/load.ts +0 -8
  154. package/src/locales/locale-provider.tsx +0 -108
  155. package/src/locales/locale-selector.tsx +0 -57
  156. package/src/locales/locales.ts +0 -183
  157. package/src/locales/ne/messages.po +0 -494
  158. package/src/locales/nl/messages.po +0 -494
  159. package/src/locales/pl/messages.po +0 -494
  160. package/src/locales/pt-BR/messages.po +0 -494
  161. package/src/locales/ro/messages.po +0 -494
  162. package/src/locales/ru/messages.po +0 -494
  163. package/src/locales/sv/messages.po +0 -494
  164. package/src/locales/th/messages.po +0 -494
  165. package/src/locales/tr/messages.po +0 -494
  166. package/src/locales/uk/messages.po +0 -494
  167. package/src/locales/vi/messages.po +0 -494
  168. package/src/locales/zh-CN/messages.po +0 -494
  169. package/src/locales/zh-HK/messages.po +0 -494
  170. package/src/locales/zh-TW/messages.po +0 -494
  171. package/src/style.css +0 -219
  172. package/src/views/authorize/accept/accept-form.tsx +0 -155
  173. package/src/views/authorize/accept/accept-view.tsx +0 -70
  174. package/src/views/authorize/authorize-view.tsx +0 -186
  175. package/src/views/authorize/reset-password/reset-password-confirm-form.tsx +0 -88
  176. package/src/views/authorize/reset-password/reset-password-request-form.tsx +0 -80
  177. package/src/views/authorize/reset-password/reset-password-view.tsx +0 -127
  178. package/src/views/authorize/sign-in/sign-in-form.tsx +0 -240
  179. package/src/views/authorize/sign-in/sign-in-picker.tsx +0 -116
  180. package/src/views/authorize/sign-in/sign-in-view.tsx +0 -145
  181. package/src/views/authorize/sign-up/sign-up-account-form.tsx +0 -142
  182. package/src/views/authorize/sign-up/sign-up-disclaimer.tsx +0 -51
  183. package/src/views/authorize/sign-up/sign-up-handle-form.tsx +0 -287
  184. package/src/views/authorize/sign-up/sign-up-hcaptcha-form.tsx +0 -108
  185. package/src/views/authorize/sign-up/sign-up-view.tsx +0 -158
  186. package/src/views/authorize/welcome/welcome-view.tsx +0 -56
  187. package/src/views/error/error-view.tsx +0 -31
  188. package/tsconfig.json +0 -7
  189. package/tsconfig.src.json +0 -13
  190. package/tsconfig.src.tsbuildinfo +0 -1
  191. package/tsconfig.tools.json +0 -8
  192. package/tsconfig.tools.tsbuildinfo +0 -1
  193. package/vite.config.mjs +0 -47
  194. /package/{src/hydration-data.d.ts → hydration-data.d.ts} +0 -0
package/src/style.css DELETED
@@ -1,219 +0,0 @@
1
- @import 'tailwindcss';
2
-
3
- :root {
4
- --branding-color-primary: 131 56 236;
5
- --branding-color-primary-contrast: 255 255 255;
6
- --branding-color-primary-hue: 265;
7
-
8
- --branding-color-error: 255 0 110;
9
- --branding-color-error-contrast: 0 0 0;
10
- --branding-color-error-hue: 334.11764705882354;
11
-
12
- --branding-color-warning: 255 171 15;
13
- --branding-color-warning-contrast: 0 0 0;
14
- --branding-color-warning-hue: 38.99999999999999;
15
-
16
- --branding-color-success: 23 204 136;
17
- --branding-color-success-contrast: 0 0 0;
18
- --branding-color-success-hue: 157.4585635359116;
19
- }
20
-
21
- :root {
22
- --hue-primary: var(--branding-color-primary-hue);
23
- --hue-error: var(--branding-color-error-hue);
24
- --hue-warning: var(--branding-color-warning-hue);
25
- --hue-success: var(--branding-color-success-hue);
26
-
27
- --color-primary: rgb(var(--branding-color-primary));
28
- --color-error: rgb(var(--branding-color-error));
29
- --color-warning: rgb(var(--branding-color-warning));
30
- --color-success: rgb(var(--branding-color-success));
31
-
32
- --color-primary-contrast: rgb(var(--branding-color-primary-contrast));
33
- --color-error-contrast: rgb(var(--branding-color-error-contrast));
34
- --color-warning-contrast: rgb(var(--branding-color-warning-contrast));
35
- --color-success-contrast: rgb(var(--branding-color-success-contrast));
36
-
37
- --color-contrast-0: hsl(var(--hue-primary) 20% 100%);
38
- --color-contrast-25: hsl(var(--hue-primary) 20% 95.3%);
39
- --color-contrast-50: hsl(var(--hue-primary) 20% 90.6%);
40
- --color-contrast-100: hsl(var(--hue-primary) 20% 85.9%);
41
- --color-contrast-200: hsl(var(--hue-primary) 20% 81.2%);
42
- --color-contrast-300: hsl(var(--hue-primary) 20% 71.8%);
43
- --color-contrast-400: hsl(var(--hue-primary) 20% 62.4%);
44
- --color-contrast-500: hsl(var(--hue-primary) 20% 53%);
45
- --color-contrast-600: hsl(var(--hue-primary) 20% 43.6%);
46
- --color-contrast-700: hsl(var(--hue-primary) 20% 34.2%);
47
- --color-contrast-800: hsl(var(--hue-primary) 20% 24.8%);
48
- --color-contrast-900: hsl(var(--hue-primary) 20% 20.1%);
49
- --color-contrast-950: hsl(var(--hue-primary) 20% 15.4%);
50
- --color-contrast-975: hsl(var(--hue-primary) 20% 10.7%);
51
- --color-contrast-1000: hsl(var(--hue-primary) 20% 6%);
52
-
53
- --color-primary-25: hsl(var(--hue-primary) 100% 97%);
54
- --color-primary-50: hsl(var(--hue-primary) 100% 95%);
55
- --color-primary-100: hsl(var(--hue-primary) 100% 90%);
56
- --color-primary-200: hsl(var(--hue-primary) 100% 80%);
57
- --color-primary-300: hsl(var(--hue-primary) 100% 70%);
58
- --color-primary-400: hsl(var(--hue-primary) 100% 60%);
59
- --color-primary-500: hsl(var(--hue-primary) 100% 53%);
60
- --color-primary-600: hsl(var(--hue-primary) 100% 42%);
61
- --color-primary-700: hsl(var(--hue-primary) 100% 34%);
62
- --color-primary-800: hsl(var(--hue-primary) 100% 26%);
63
- --color-primary-900: hsl(var(--hue-primary) 100% 18%);
64
- --color-primary-950: hsl(var(--hue-primary) 100% 10%);
65
- --color-primary-975: hsl(var(--hue-primary) 100% 7%);
66
-
67
- --color-error-25: hsl(var(--hue-error) 82% 97%);
68
- --color-error-50: hsl(var(--hue-error) 82% 95%);
69
- --color-error-100: hsl(var(--hue-error) 82% 90%);
70
- --color-error-200: hsl(var(--hue-error) 82% 80%);
71
- --color-error-300: hsl(var(--hue-error) 82% 70%);
72
- --color-error-400: hsl(var(--hue-error) 82% 60%);
73
- --color-error-500: hsl(var(--hue-error) 82% 53%);
74
- --color-error-600: hsl(var(--hue-error) 82% 42%);
75
- --color-error-700: hsl(var(--hue-error) 82% 34%);
76
- --color-error-800: hsl(var(--hue-error) 82% 26%);
77
- --color-error-900: hsl(var(--hue-error) 82% 18%);
78
- --color-error-950: hsl(var(--hue-error) 82% 10%);
79
- --color-error-975: hsl(var(--hue-error) 82% 7%);
80
-
81
- --color-warning-25: hsl(var(--hue-warning) 100% 97%);
82
- --color-warning-50: hsl(var(--hue-warning) 100% 95%);
83
- --color-warning-100: hsl(var(--hue-warning) 100% 90%);
84
- --color-warning-200: hsl(var(--hue-warning) 100% 80%);
85
- --color-warning-300: hsl(var(--hue-warning) 100% 70%);
86
- --color-warning-400: hsl(var(--hue-warning) 100% 60%);
87
- --color-warning-500: hsl(var(--hue-warning) 100% 53%);
88
- --color-warning-600: hsl(var(--hue-warning) 100% 42%);
89
- --color-warning-700: hsl(var(--hue-warning) 100% 34%);
90
- --color-warning-800: hsl(var(--hue-warning) 100% 26%);
91
- --color-warning-900: hsl(var(--hue-warning) 100% 18%);
92
- --color-warning-950: hsl(var(--hue-warning) 100% 10%);
93
- --color-warning-975: hsl(var(--hue-warning) 100% 7%);
94
-
95
- --color-success-25: hsl(var(--hue-success) 91% 97%);
96
- --color-success-50: hsl(var(--hue-success) 91% 95%);
97
- --color-success-100: hsl(var(--hue-success) 91% 90%);
98
- --color-success-200: hsl(var(--hue-success) 91% 80%);
99
- --color-success-300: hsl(var(--hue-success) 91% 70%);
100
- --color-success-400: hsl(var(--hue-success) 91% 60%);
101
- --color-success-500: hsl(var(--hue-success) 91% 53%);
102
- --color-success-600: hsl(var(--hue-success) 91% 42%);
103
- --color-success-700: hsl(var(--hue-success) 91% 34%);
104
- --color-success-800: hsl(var(--hue-success) 91% 26%);
105
- --color-success-900: hsl(var(--hue-success) 91% 18%);
106
- --color-success-950: hsl(var(--hue-success) 91% 10%);
107
- --color-success-975: hsl(var(--hue-success) 91% 7%);
108
- }
109
-
110
- @media (prefers-color-scheme: dark) {
111
- :root {
112
- --color-contrast-1000: hsl(var(--hue-primary) 20% 100%);
113
- --color-contrast-975: hsl(var(--hue-primary) 20% 95.3%);
114
- --color-contrast-950: hsl(var(--hue-primary) 20% 90.6%);
115
- --color-contrast-900: hsl(var(--hue-primary) 20% 85.9%);
116
- --color-contrast-800: hsl(var(--hue-primary) 20% 81.2%);
117
- --color-contrast-700: hsl(var(--hue-primary) 20% 71.8%);
118
- --color-contrast-600: hsl(var(--hue-primary) 20% 62.4%);
119
- --color-contrast-500: hsl(var(--hue-primary) 20% 53%);
120
- --color-contrast-400: hsl(var(--hue-primary) 20% 43.6%);
121
- --color-contrast-300: hsl(var(--hue-primary) 20% 34.2%);
122
- --color-contrast-200: hsl(var(--hue-primary) 20% 24.8%);
123
- --color-contrast-100: hsl(var(--hue-primary) 20% 20.1%);
124
- --color-contrast-50: hsl(var(--hue-primary) 20% 15.4%);
125
- --color-contrast-25: hsl(var(--hue-primary) 20% 10.7%);
126
- --color-contrast-0: hsl(var(--hue-primary) 20% 6%);
127
- }
128
- }
129
-
130
- @theme inline {
131
- --color-contrast-0: var(--color-contrast-0);
132
- --color-contrast-25: var(--color-contrast-25);
133
- --color-contrast-50: var(--color-contrast-50);
134
- --color-contrast-100: var(--color-contrast-100);
135
- --color-contrast-200: var(--color-contrast-200);
136
- --color-contrast-300: var(--color-contrast-300);
137
- --color-contrast-400: var(--color-contrast-400);
138
- --color-contrast-500: var(--color-contrast-500);
139
- --color-contrast-600: var(--color-contrast-600);
140
- --color-contrast-700: var(--color-contrast-700);
141
- --color-contrast-800: var(--color-contrast-800);
142
- --color-contrast-900: var(--color-contrast-900);
143
- --color-contrast-950: var(--color-contrast-950);
144
- --color-contrast-975: var(--color-contrast-975);
145
- --color-contrast-1000: var(--color-contrast-1000);
146
-
147
- --color-primary-25: var(--color-primary-25);
148
- --color-primary-50: var(--color-primary-50);
149
- --color-primary-100: var(--color-primary-100);
150
- --color-primary-200: var(--color-primary-200);
151
- --color-primary-300: var(--color-primary-300);
152
- --color-primary-400: var(--color-primary-400);
153
- --color-primary-500: var(--color-primary-500);
154
- --color-primary-600: var(--color-primary-600);
155
- --color-primary-700: var(--color-primary-700);
156
- --color-primary-800: var(--color-primary-800);
157
- --color-primary-900: var(--color-primary-900);
158
- --color-primary-950: var(--color-primary-950);
159
- --color-primary-975: var(--color-primary-975);
160
-
161
- --color-error-25: var(--color-error-25);
162
- --color-error-50: var(--color-error-50);
163
- --color-error-100: var(--color-error-100);
164
- --color-error-200: var(--color-error-200);
165
- --color-error-300: var(--color-error-300);
166
- --color-error-400: var(--color-error-400);
167
- --color-error-500: var(--color-error-500);
168
- --color-error-600: var(--color-error-600);
169
- --color-error-700: var(--color-error-700);
170
- --color-error-800: var(--color-error-800);
171
- --color-error-900: var(--color-error-900);
172
- --color-error-950: var(--color-error-950);
173
- --color-error-975: var(--color-error-975);
174
-
175
- --color-warning-25: var(--color-warning-25);
176
- --color-warning-50: var(--color-warning-50);
177
- --color-warning-100: var(--color-warning-100);
178
- --color-warning-200: var(--color-warning-200);
179
- --color-warning-300: var(--color-warning-300);
180
- --color-warning-400: var(--color-warning-400);
181
- --color-warning-500: var(--color-warning-500);
182
- --color-warning-600: var(--color-warning-600);
183
- --color-warning-700: var(--color-warning-700);
184
- --color-warning-800: var(--color-warning-800);
185
- --color-warning-900: var(--color-warning-900);
186
- --color-warning-950: var(--color-warning-950);
187
- --color-warning-975: var(--color-warning-975);
188
-
189
- --color-success-25: var(--color-success-25);
190
- --color-success-50: var(--color-success-50);
191
- --color-success-100: var(--color-success-100);
192
- --color-success-200: var(--color-success-200);
193
- --color-success-300: var(--color-success-300);
194
- --color-success-400: var(--color-success-400);
195
- --color-success-500: var(--color-success-500);
196
- --color-success-600: var(--color-success-600);
197
- --color-success-700: var(--color-success-700);
198
- --color-success-800: var(--color-success-800);
199
- --color-success-900: var(--color-success-900);
200
- --color-success-950: var(--color-success-950);
201
- --color-success-975: var(--color-success-975);
202
-
203
- --color-primary: var(--color-primary);
204
- --color-error: var(--color-error);
205
- --color-warning: var(--color-warning);
206
- --color-success: var(--color-success);
207
-
208
- --color-primary-contrast: var(--color-primary-contrast);
209
- --color-error-contrast: var(--color-error-contrast);
210
- --color-warning-contrast: var(--color-warning-contrast);
211
- --color-success-contrast: var(--color-success-contrast);
212
-
213
- --color-text-default: var(--color-contrast-900);
214
- --color-text-light: var(--color-contrast-700);
215
- --color-border-default: var(--color-contrast-200);
216
- --color-border-dark: var(--color-contrast-400);
217
-
218
- --space-screen: 100vh;
219
- }
@@ -1,155 +0,0 @@
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 { MultiLangString } from '../../../components/utils/multi-lang-string.tsx'
12
- import { Override } from '../../../lib/util.ts'
13
-
14
- export type AcceptFormProps = Override<
15
- Omit<FormCardProps, 'onSubmit' | 'cancel' | 'actions' | 'children'>,
16
- {
17
- clientId: string
18
- clientMetadata: OAuthClientMetadata
19
- clientTrusted: boolean
20
-
21
- account: Account
22
- scopeDetails?: ScopeDetail[]
23
-
24
- onAccept: () => void
25
- onReject: () => void
26
- onBack?: () => void
27
- }
28
- >
29
-
30
- export function AcceptForm({
31
- clientId,
32
- clientMetadata,
33
- clientTrusted,
34
-
35
- account,
36
- scopeDetails,
37
-
38
- onAccept,
39
- onReject,
40
- onBack,
41
-
42
- // FormCardProps
43
- ...props
44
- }: AcceptFormProps) {
45
- const { t } = useLingui()
46
- return (
47
- <FormCard
48
- {...props}
49
- onSubmit={(event) => {
50
- event.preventDefault()
51
- onAccept()
52
- }}
53
- cancel={onBack && <Button onClick={onBack}>Back</Button>}
54
- actions={
55
- <>
56
- <Button type="submit" color="primary">
57
- <Trans>Authorize</Trans>
58
- </Button>
59
-
60
- <Button onClick={onReject}>
61
- <Trans>Deny access</Trans>
62
- </Button>
63
- </>
64
- }
65
- >
66
- {clientTrusted && clientMetadata.logo_uri && (
67
- <div key="logo" className="flex items-center justify-center">
68
- <img
69
- crossOrigin="anonymous"
70
- src={clientMetadata.logo_uri}
71
- alt={clientMetadata.client_name}
72
- className="h-16 w-16 rounded-full"
73
- />
74
- </div>
75
- )}
76
- <p>
77
- <Trans>
78
- <ClientName
79
- clientId={clientId}
80
- clientMetadata={clientMetadata}
81
- clientTrusted={clientTrusted}
82
- />{' '}
83
- is asking for permission to access your account (
84
- <AccountIdentifier account={account} />
85
- ).
86
- </Trans>
87
- </p>
88
-
89
- <p>
90
- <Trans>
91
- By clicking{' '}
92
- <b>
93
- <Trans>Authorize</Trans>
94
- </b>
95
- , you allow this application to perform the following actions in
96
- accordance with their{' '}
97
- <a
98
- role="link"
99
- href={clientMetadata.tos_uri}
100
- rel="nofollow noopener"
101
- target="_blank"
102
- className="text-primary underline"
103
- >
104
- <Trans>terms of service</Trans>
105
- </a>
106
- {' and '}
107
- <a
108
- role="link"
109
- href={clientMetadata.policy_uri}
110
- rel="nofollow noopener"
111
- target="_blank"
112
- className="text-primary underline"
113
- >
114
- <Trans>privacy policy</Trans>
115
- </a>
116
- :
117
- </Trans>
118
- </p>
119
-
120
- {scopeDetails?.length ? (
121
- <ul
122
- className="list-inside list-disc"
123
- key="scopes"
124
- aria-label={t`Requested permissions`}
125
- >
126
- {scopeDetails.map(({ scope, description }) => (
127
- <li key={scope}>
128
- {description ? (
129
- <MultiLangString value={description} />
130
- ) : (
131
- <ScopeDescription scope={scope} />
132
- )}
133
- </li>
134
- ))}
135
- </ul>
136
- ) : null}
137
- </FormCard>
138
- )
139
- }
140
-
141
- type ScopeDescriptionProps = {
142
- scope: string
143
- }
144
- function ScopeDescription({ scope }: ScopeDescriptionProps) {
145
- switch (scope) {
146
- case 'atproto':
147
- return <Trans>Uniquely identify you</Trans>
148
- case 'transition:generic':
149
- return <Trans>Access your account data (except chat messages)</Trans>
150
- case 'transition:chat.bsky':
151
- return <Trans>Access your chat messages</Trans>
152
- default:
153
- return scope
154
- }
155
- }
@@ -1,70 +0,0 @@
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 {
5
- LayoutTitlePage,
6
- LayoutTitlePageProps,
7
- } from '../../../components/layouts/layout-title-page.tsx'
8
- import { Override } from '../../../lib/util.ts'
9
- import { AcceptForm } from './accept-form.tsx'
10
-
11
- export type AcceptViewProps = Override<
12
- LayoutTitlePageProps,
13
- {
14
- clientId: string
15
- clientMetadata: OAuthClientMetadata
16
- clientTrusted: boolean
17
-
18
- account: Account
19
- scopeDetails?: ScopeDetail[]
20
-
21
- onAccept: () => void
22
- onReject: () => void
23
- onBack?: () => void
24
- }
25
- >
26
-
27
- export function AcceptView({
28
- clientId,
29
- clientMetadata,
30
- clientTrusted,
31
- account,
32
- scopeDetails,
33
- onAccept,
34
- onReject,
35
- onBack,
36
-
37
- // LayoutTitlePage
38
- title,
39
- subtitle = (
40
- <Trans>
41
- Grant access to your{' '}
42
- <b className="text-slate-800 dark:text-slate-200">
43
- {account.preferred_username || account.email || account.sub}
44
- </b>{' '}
45
- account
46
- </Trans>
47
- ),
48
- ...props
49
- }: AcceptViewProps) {
50
- const { t } = useLingui()
51
-
52
- return (
53
- <LayoutTitlePage
54
- {...props}
55
- title={title ?? t`Authorize`}
56
- subtitle={subtitle}
57
- >
58
- <AcceptForm
59
- clientId={clientId}
60
- clientMetadata={clientMetadata}
61
- clientTrusted={clientTrusted}
62
- account={account}
63
- scopeDetails={scopeDetails}
64
- onBack={onBack}
65
- onAccept={onAccept}
66
- onReject={onReject}
67
- />
68
- </LayoutTitlePage>
69
- )
70
- }
@@ -1,186 +0,0 @@
1
- import { Trans, useLingui } from '@lingui/react/macro'
2
- import { useEffect, useState } from 'react'
3
- import type { CustomizationData, Session } from '@atproto/oauth-provider-api'
4
- import {
5
- LayoutTitlePage,
6
- LayoutTitlePageProps,
7
- } from '../../components/layouts/layout-title-page.tsx'
8
- import { useApi } from '../../hooks/use-api.ts'
9
- import { useBoundDispatch } from '../../hooks/use-bound-dispatch.ts'
10
- import type { AuthorizeData } from '../../hydration-data'
11
- import { Override } from '../../lib/util.ts'
12
- import { AcceptView } from './accept/accept-view.tsx'
13
- import { ResetPasswordView } from './reset-password/reset-password-view.tsx'
14
- import { SignInView } from './sign-in/sign-in-view.tsx'
15
- import { SignUpView } from './sign-up/sign-up-view.tsx'
16
- import { WelcomeView } from './welcome/welcome-view.tsx'
17
-
18
- export type AuthorizeViewProps = Override<
19
- LayoutTitlePageProps,
20
- {
21
- customizationData?: CustomizationData
22
- authorizeData: AuthorizeData
23
- sessions: readonly Session[]
24
- }
25
- >
26
-
27
- enum View {
28
- Welcome,
29
- SignUp,
30
- SignIn,
31
- ResetPassword,
32
- Accept,
33
- Done,
34
- }
35
-
36
- export function AuthorizeView({
37
- authorizeData,
38
- sessions: initialSessions,
39
- customizationData,
40
-
41
- // LayoutTitlePage
42
- ...props
43
- }: AuthorizeViewProps) {
44
- const { t } = useLingui()
45
-
46
- const forceSignIn = authorizeData?.loginHint != null
47
-
48
- const initialView = forceSignIn ? View.SignIn : View.Welcome
49
- const [view, setView] = useState<View>(initialView)
50
-
51
- const showDone = useBoundDispatch(setView, View.Done)
52
- const showSignIn = useBoundDispatch(setView, View.SignIn)
53
- const showResetPassword = useBoundDispatch(setView, View.ResetPassword)
54
- const showSignUp = useBoundDispatch(setView, View.SignUp)
55
- const showAccept = useBoundDispatch(setView, View.Accept)
56
- const showWelcome = useBoundDispatch(setView, View.Welcome)
57
-
58
- const [resetPasswordHint, setResetPasswordHint] = useState<
59
- string | undefined
60
- >(undefined)
61
-
62
- const {
63
- sessions,
64
- selectSub,
65
- doValidateNewHandle,
66
- doSignUp,
67
- doSignIn,
68
- doInitiatePasswordReset,
69
- doConfirmResetPassword,
70
- doAccept,
71
- doReject,
72
- } = useApi({
73
- sessions: initialSessions,
74
- onRedirected: showDone,
75
- })
76
-
77
- // Navigate when the user signs-in (selects a new session)
78
- const session = sessions.find((s) => s.selected && !s.loginRequired)
79
- useEffect(() => {
80
- if (session) {
81
- if (session.consentRequired) showAccept()
82
- else doAccept(session.account.sub)
83
- }
84
- }, [session, doAccept, showAccept])
85
-
86
- const canSignUp =
87
- Boolean(customizationData?.availableUserDomains?.length) &&
88
- !authorizeData.loginHint
89
-
90
- // Fool-proofing
91
- const resetNeeded =
92
- (view === View.SignUp && !canSignUp) || (view === View.Accept && !session)
93
- useEffect(() => {
94
- if (resetNeeded) showWelcome()
95
- }, [resetNeeded, showWelcome])
96
-
97
- if (view === View.Welcome) {
98
- return (
99
- <WelcomeView
100
- {...props}
101
- customizationData={customizationData}
102
- onSignIn={showSignIn}
103
- onSignUp={canSignUp ? showSignUp : undefined}
104
- onCancel={() => doReject()}
105
- />
106
- )
107
- }
108
-
109
- if (view === View.SignUp) {
110
- return (
111
- <SignUpView
112
- {...props}
113
- customizationData={customizationData}
114
- onValidateNewHandle={doValidateNewHandle}
115
- onBack={showWelcome}
116
- onDone={doSignUp}
117
- />
118
- )
119
- }
120
-
121
- if (view === View.ResetPassword) {
122
- return (
123
- <ResetPasswordView
124
- {...props}
125
- emailDefault={resetPasswordHint}
126
- onresetPasswordRequest={doInitiatePasswordReset}
127
- onResetPasswordConfirm={doConfirmResetPassword}
128
- onBack={forceSignIn ? showSignIn : showWelcome}
129
- />
130
- )
131
- }
132
-
133
- if (view === View.SignIn) {
134
- return (
135
- <SignInView
136
- {...props}
137
- loginHint={authorizeData.loginHint}
138
- sessions={sessions}
139
- selectSub={selectSub}
140
- onSignIn={doSignIn}
141
- onBack={forceSignIn ? () => doReject() : showWelcome}
142
- onForgotPassword={(email) => {
143
- showResetPassword()
144
- setResetPasswordHint(email)
145
- }}
146
- />
147
- )
148
- }
149
-
150
- if (view === View.Accept) {
151
- // TypeSafety: should never be null here
152
- if (!session) return null
153
-
154
- return (
155
- <AcceptView
156
- {...props}
157
- clientId={authorizeData.clientId}
158
- clientMetadata={authorizeData.clientMetadata}
159
- clientTrusted={authorizeData.clientTrusted}
160
- account={session.account}
161
- scopeDetails={authorizeData.scopeDetails}
162
- onAccept={() => doAccept(session.account.sub)}
163
- onReject={() => doReject()}
164
- onBack={
165
- forceSignIn
166
- ? undefined
167
- : () => {
168
- selectSub(null)
169
- setView(sessions.length ? View.SignIn : View.Welcome)
170
- }
171
- }
172
- />
173
- )
174
- }
175
-
176
- if (view === View.Done) {
177
- return (
178
- <LayoutTitlePage {...props} title={props.title ?? t`Login complete`}>
179
- <Trans>You are being redirected...</Trans>
180
- </LayoutTitlePage>
181
- )
182
- }
183
-
184
- // Fool-proofing
185
- throw new Error('Unexpected application state')
186
- }