@atproto/oauth-provider-ui 0.1.0 → 0.1.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.
- package/dist/authorization-page-Dhx8lvtZ.js +3 -0
- package/dist/authorization-page-Dhx8lvtZ.js.map +1 -0
- package/dist/bundle-manifest.json +630 -0
- package/dist/error-page-DC6Vc-cv.js +2 -0
- package/dist/error-page-DC6Vc-cv.js.map +1 -0
- package/dist/error-view-CRGNTAn2.css +1 -0
- package/dist/error-view-MVy7C9l0.js +59 -0
- package/dist/error-view-MVy7C9l0.js.map +1 -0
- package/dist/index-CHPoD7Rp.js +20 -0
- package/dist/index-CHPoD7Rp.js.map +1 -0
- package/dist/messages-B0mgsxS-.js +2 -0
- package/dist/messages-B0mgsxS-.js.map +1 -0
- package/dist/messages-B5g8Fkio.js +2 -0
- package/dist/messages-B5g8Fkio.js.map +1 -0
- package/dist/messages-BCMss-Kt.js +2 -0
- package/dist/messages-BCMss-Kt.js.map +1 -0
- package/dist/messages-BGUrKgyK.js +2 -0
- package/dist/messages-BGUrKgyK.js.map +1 -0
- package/dist/messages-BjxAnLDp.js +2 -0
- package/dist/messages-BjxAnLDp.js.map +1 -0
- package/dist/messages-Bjysz3rI.js +2 -0
- package/dist/messages-Bjysz3rI.js.map +1 -0
- package/dist/messages-BvvEr3UX.js +2 -0
- package/dist/messages-BvvEr3UX.js.map +1 -0
- package/dist/messages-Bz6JOhJf.js +2 -0
- package/dist/messages-Bz6JOhJf.js.map +1 -0
- package/dist/messages-BzL3D1EU.js +2 -0
- package/dist/messages-BzL3D1EU.js.map +1 -0
- package/dist/messages-CAvN5UoW.js +2 -0
- package/dist/messages-CAvN5UoW.js.map +1 -0
- package/dist/messages-CEmswT1Q.js +2 -0
- package/dist/messages-CEmswT1Q.js.map +1 -0
- package/dist/messages-CHYqz0q6.js +2 -0
- package/dist/messages-CHYqz0q6.js.map +1 -0
- package/dist/messages-CRmpdijj.js +2 -0
- package/dist/messages-CRmpdijj.js.map +1 -0
- package/dist/messages-Cdb79R6S.js +2 -0
- package/dist/messages-Cdb79R6S.js.map +1 -0
- package/dist/messages-ChkJ_0WT.js +2 -0
- package/dist/messages-ChkJ_0WT.js.map +1 -0
- package/dist/messages-CqiEX6JJ.js +2 -0
- package/dist/messages-CqiEX6JJ.js.map +1 -0
- package/dist/messages-CxkHjJSR.js +2 -0
- package/dist/messages-CxkHjJSR.js.map +1 -0
- package/dist/messages-D0-cWoJ9.js +2 -0
- package/dist/messages-D0-cWoJ9.js.map +1 -0
- package/dist/messages-D2MnAxYY.js +2 -0
- package/dist/messages-D2MnAxYY.js.map +1 -0
- package/dist/messages-D5TZVsui.js +2 -0
- package/dist/messages-D5TZVsui.js.map +1 -0
- package/dist/messages-DBdV4-iw.js +2 -0
- package/dist/messages-DBdV4-iw.js.map +1 -0
- package/dist/messages-DEK3zybC.js +2 -0
- package/dist/messages-DEK3zybC.js.map +1 -0
- package/dist/messages-DGSM5jkd.js +2 -0
- package/dist/messages-DGSM5jkd.js.map +1 -0
- package/dist/messages-DJgAnSTQ.js +2 -0
- package/dist/messages-DJgAnSTQ.js.map +1 -0
- package/dist/messages-DK7O7sb_.js +2 -0
- package/dist/messages-DK7O7sb_.js.map +1 -0
- package/dist/messages-DRp7qc3j.js +2 -0
- package/dist/messages-DRp7qc3j.js.map +1 -0
- package/dist/messages-DT6xRw0m.js +2 -0
- package/dist/messages-DT6xRw0m.js.map +1 -0
- package/dist/messages-LnzLtU0L.js +2 -0
- package/dist/messages-LnzLtU0L.js.map +1 -0
- package/dist/messages-_Nk2qNGw.js +2 -0
- package/dist/messages-_Nk2qNGw.js.map +1 -0
- package/dist/messages-eHH6nZyF.js +2 -0
- package/dist/messages-eHH6nZyF.js.map +1 -0
- package/dist/messages-iNw8zY2C.js +2 -0
- package/dist/messages-iNw8zY2C.js.map +1 -0
- package/dist/messages-ipc0L8yF.js +2 -0
- package/dist/messages-ipc0L8yF.js.map +1 -0
- package/dist/messages-j7LsWm2F.js +2 -0
- package/dist/messages-j7LsWm2F.js.map +1 -0
- package/dist/messages-mgE_5UEw.js +2 -0
- package/dist/messages-mgE_5UEw.js.map +1 -0
- package/dist/messages-oRd-J5--.js +2 -0
- package/dist/messages-oRd-J5--.js.map +1 -0
- package/package.json +10 -8
- package/.linguirc +0 -57
- package/CHANGELOG.md +0 -17
- package/CONTRIBUTING.md +0 -6
- package/authorization-page.html +0 -186
- package/error-page.html +0 -118
- package/index.html +0 -13
- package/src/authorization-page.tsx +0 -49
- package/src/components/forms/button-toggle-visibility.tsx +0 -43
- package/src/components/forms/button.tsx +0 -60
- package/src/components/forms/fieldset.tsx +0 -55
- package/src/components/forms/form-card-async.tsx +0 -103
- package/src/components/forms/form-card.tsx +0 -49
- package/src/components/forms/input-checkbox.tsx +0 -78
- package/src/components/forms/input-container.tsx +0 -107
- package/src/components/forms/input-email-address.tsx +0 -65
- package/src/components/forms/input-new-password.tsx +0 -62
- package/src/components/forms/input-password.tsx +0 -87
- package/src/components/forms/input-text.tsx +0 -82
- package/src/components/forms/input-token.tsx +0 -94
- package/src/components/forms/wizard-card.tsx +0 -116
- package/src/components/layouts/layout-title-page.tsx +0 -78
- package/src/components/layouts/layout-welcome.tsx +0 -78
- package/src/components/utils/account-identifier.tsx +0 -23
- package/src/components/utils/account-image.tsx +0 -33
- package/src/components/utils/admonition.tsx +0 -52
- package/src/components/utils/client-name.tsx +0 -71
- package/src/components/utils/error-card.tsx +0 -93
- package/src/components/utils/error-message.tsx +0 -88
- package/src/components/utils/help-card.tsx +0 -46
- package/src/components/utils/icons.tsx +0 -88
- package/src/components/utils/link-anchor.tsx +0 -28
- package/src/components/utils/link-title.tsx +0 -26
- package/src/components/utils/multi-lang-string.tsx +0 -62
- package/src/components/utils/password-strength-label.tsx +0 -37
- package/src/components/utils/password-strength-meter.tsx +0 -58
- package/src/components/utils/url-viewer.tsx +0 -73
- package/src/error-page.tsx +0 -23
- package/src/hooks/use-api.ts +0 -202
- package/src/hooks/use-async-action.ts +0 -120
- package/src/hooks/use-bound-dispatch.ts +0 -5
- package/src/hooks/use-browser-color-scheme.ts +0 -31
- package/src/hooks/use-random-string.ts +0 -37
- package/src/hooks/use-stepper.ts +0 -87
- package/src/lib/api.ts +0 -225
- package/src/lib/cookies.ts +0 -17
- package/src/lib/json-client.ts +0 -141
- package/src/lib/password.ts +0 -98
- package/src/lib/ref.ts +0 -17
- package/src/lib/util.ts +0 -14
- package/src/locales/an/messages.po +0 -494
- package/src/locales/ast/messages.po +0 -494
- package/src/locales/ca/messages.po +0 -494
- package/src/locales/da/messages.po +0 -494
- package/src/locales/de/messages.po +0 -494
- package/src/locales/el/messages.po +0 -494
- package/src/locales/en/messages.po +0 -494
- package/src/locales/en-GB/messages.po +0 -494
- package/src/locales/es/messages.po +0 -494
- package/src/locales/eu/messages.po +0 -494
- package/src/locales/fi/messages.po +0 -494
- package/src/locales/fr/messages.po +0 -494
- package/src/locales/ga/messages.po +0 -494
- package/src/locales/gl/messages.po +0 -494
- package/src/locales/hi/messages.po +0 -494
- package/src/locales/hu/messages.po +0 -494
- package/src/locales/ia/messages.po +0 -494
- package/src/locales/id/messages.po +0 -494
- package/src/locales/it/messages.po +0 -494
- package/src/locales/ja/messages.po +0 -494
- package/src/locales/km/messages.po +0 -494
- package/src/locales/ko/messages.po +0 -494
- package/src/locales/load.ts +0 -8
- package/src/locales/locale-provider.tsx +0 -108
- package/src/locales/locale-selector.tsx +0 -57
- package/src/locales/locales.ts +0 -183
- package/src/locales/ne/messages.po +0 -494
- package/src/locales/nl/messages.po +0 -494
- package/src/locales/pl/messages.po +0 -494
- package/src/locales/pt-BR/messages.po +0 -494
- package/src/locales/ro/messages.po +0 -494
- package/src/locales/ru/messages.po +0 -494
- package/src/locales/sv/messages.po +0 -494
- package/src/locales/th/messages.po +0 -494
- package/src/locales/tr/messages.po +0 -494
- package/src/locales/uk/messages.po +0 -494
- package/src/locales/vi/messages.po +0 -494
- package/src/locales/zh-CN/messages.po +0 -494
- package/src/locales/zh-HK/messages.po +0 -494
- package/src/locales/zh-TW/messages.po +0 -494
- package/src/style.css +0 -219
- package/src/views/authorize/accept/accept-form.tsx +0 -155
- package/src/views/authorize/accept/accept-view.tsx +0 -70
- package/src/views/authorize/authorize-view.tsx +0 -186
- package/src/views/authorize/reset-password/reset-password-confirm-form.tsx +0 -88
- package/src/views/authorize/reset-password/reset-password-request-form.tsx +0 -80
- package/src/views/authorize/reset-password/reset-password-view.tsx +0 -127
- package/src/views/authorize/sign-in/sign-in-form.tsx +0 -240
- package/src/views/authorize/sign-in/sign-in-picker.tsx +0 -116
- package/src/views/authorize/sign-in/sign-in-view.tsx +0 -145
- package/src/views/authorize/sign-up/sign-up-account-form.tsx +0 -142
- package/src/views/authorize/sign-up/sign-up-disclaimer.tsx +0 -51
- package/src/views/authorize/sign-up/sign-up-handle-form.tsx +0 -287
- package/src/views/authorize/sign-up/sign-up-hcaptcha-form.tsx +0 -108
- package/src/views/authorize/sign-up/sign-up-view.tsx +0 -158
- package/src/views/authorize/welcome/welcome-view.tsx +0 -56
- package/src/views/error/error-view.tsx +0 -31
- package/tsconfig.json +0 -7
- package/tsconfig.src.json +0 -13
- package/tsconfig.src.tsbuildinfo +0 -1
- package/tsconfig.tools.json +0 -8
- package/tsconfig.tools.tsbuildinfo +0 -1
- package/vite.config.mjs +0 -47
- /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
|
-
}
|