@atproto/oauth-provider-ui 0.0.2 → 0.1.0

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 (182) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/{src/authorization-page.html → authorization-page.html} +36 -33
  3. package/{src/error-page.html → error-page.html} +17 -24
  4. package/package.json +28 -37
  5. package/src/authorization-page.tsx +21 -27
  6. package/src/components/forms/button.tsx +8 -8
  7. package/src/components/forms/fieldset.tsx +1 -1
  8. package/src/components/forms/form-card-async.tsx +1 -1
  9. package/src/components/forms/form-card.tsx +1 -1
  10. package/src/components/forms/input-checkbox.tsx +3 -3
  11. package/src/components/forms/input-container.tsx +12 -12
  12. package/src/components/forms/input-text.tsx +2 -2
  13. package/src/components/forms/wizard-card.tsx +2 -2
  14. package/src/components/layouts/layout-title-page.tsx +9 -8
  15. package/src/components/layouts/layout-welcome.tsx +21 -16
  16. package/src/components/utils/account-image.tsx +2 -2
  17. package/src/components/utils/admonition.tsx +5 -5
  18. package/src/components/utils/client-name.tsx +30 -4
  19. package/src/components/utils/error-card.tsx +1 -1
  20. package/src/components/utils/help-card.tsx +3 -3
  21. package/src/components/utils/multi-lang-string.tsx +14 -8
  22. package/src/components/utils/password-strength-meter.tsx +3 -3
  23. package/src/components/utils/url-viewer.tsx +1 -1
  24. package/src/error-page.tsx +8 -14
  25. package/src/hooks/use-api.ts +65 -45
  26. package/src/hydration-data.d.ts +42 -0
  27. package/src/lib/api.ts +12 -21
  28. package/src/{cookies.ts → lib/cookies.ts} +8 -2
  29. package/src/lib/json-client.ts +62 -18
  30. package/src/lib/util.ts +2 -1
  31. package/src/locales/an/messages.po +35 -28
  32. package/src/locales/ast/messages.po +35 -28
  33. package/src/locales/ca/messages.po +35 -28
  34. package/src/locales/da/messages.po +35 -28
  35. package/src/locales/de/messages.po +35 -28
  36. package/src/locales/el/messages.po +35 -28
  37. package/src/locales/en/messages.po +35 -28
  38. package/src/locales/en-GB/messages.po +35 -28
  39. package/src/locales/es/messages.po +35 -28
  40. package/src/locales/eu/messages.po +35 -28
  41. package/src/locales/fi/messages.po +35 -28
  42. package/src/locales/fr/messages.po +35 -28
  43. package/src/locales/ga/messages.po +35 -28
  44. package/src/locales/gl/messages.po +35 -28
  45. package/src/locales/hi/messages.po +35 -28
  46. package/src/locales/hu/messages.po +35 -28
  47. package/src/locales/ia/messages.po +35 -28
  48. package/src/locales/id/messages.po +35 -28
  49. package/src/locales/it/messages.po +35 -28
  50. package/src/locales/ja/messages.po +35 -28
  51. package/src/locales/km/messages.po +35 -28
  52. package/src/locales/ko/messages.po +35 -28
  53. package/src/locales/locale-provider.tsx +55 -59
  54. package/src/locales/locale-selector.tsx +13 -14
  55. package/src/locales/locales.ts +161 -146
  56. package/src/locales/ne/messages.po +35 -28
  57. package/src/locales/nl/messages.po +35 -28
  58. package/src/locales/pl/messages.po +35 -28
  59. package/src/locales/pt-BR/messages.po +35 -28
  60. package/src/locales/ro/messages.po +35 -28
  61. package/src/locales/ru/messages.po +35 -28
  62. package/src/locales/sv/messages.po +35 -28
  63. package/src/locales/th/messages.po +35 -28
  64. package/src/locales/tr/messages.po +35 -28
  65. package/src/locales/uk/messages.po +35 -28
  66. package/src/locales/vi/messages.po +35 -28
  67. package/src/locales/zh-CN/messages.po +35 -28
  68. package/src/locales/zh-HK/messages.po +35 -28
  69. package/src/locales/zh-TW/messages.po +35 -28
  70. package/src/style.css +219 -0
  71. package/src/views/authorize/accept/accept-form.tsx +11 -6
  72. package/src/views/authorize/authorize-view.tsx +13 -10
  73. package/src/views/authorize/reset-password/reset-password-view.tsx +2 -2
  74. package/src/views/authorize/sign-in/sign-in-form.tsx +39 -41
  75. package/src/views/authorize/sign-in/sign-in-picker.tsx +3 -3
  76. package/src/views/authorize/sign-up/sign-up-disclaimer.tsx +3 -3
  77. package/src/views/authorize/sign-up/sign-up-handle-form.tsx +6 -6
  78. package/src/views/authorize/sign-up/sign-up-view.tsx +3 -3
  79. package/src/views/authorize/welcome/welcome-view.tsx +5 -5
  80. package/tsconfig.json +1 -2
  81. package/{tsconfig.frontend.json → tsconfig.src.json} +4 -1
  82. package/tsconfig.src.tsbuildinfo +1 -0
  83. package/tsconfig.tools.json +1 -1
  84. package/tsconfig.tools.tsbuildinfo +1 -1
  85. package/vite.config.mjs +38 -7
  86. package/dist/assets/COdVzed-.css +0 -3
  87. package/dist/assets/COdVzed-.js +0 -100
  88. package/dist/assets/COdVzed-.js.map +0 -1
  89. package/dist/assets/Cqnfnbvc.js +0 -6
  90. package/dist/assets/Cqnfnbvc.js.map +0 -1
  91. package/dist/assets/bundle-manifest.json +0 -630
  92. package/dist/assets/error-view-Bu4y7Nd8.js +0 -208
  93. package/dist/assets/error-view-Bu4y7Nd8.js.map +0 -1
  94. package/dist/assets/index-DXlCRM6V.js +0 -36
  95. package/dist/assets/index-DXlCRM6V.js.map +0 -1
  96. package/dist/assets/messages-2GoTm2qL.js +0 -4
  97. package/dist/assets/messages-2GoTm2qL.js.map +0 -1
  98. package/dist/assets/messages-6Cn2Jbhw.js +0 -4
  99. package/dist/assets/messages-6Cn2Jbhw.js.map +0 -1
  100. package/dist/assets/messages-75hFgOK2.js +0 -4
  101. package/dist/assets/messages-75hFgOK2.js.map +0 -1
  102. package/dist/assets/messages-B3OK4k0O.js +0 -4
  103. package/dist/assets/messages-B3OK4k0O.js.map +0 -1
  104. package/dist/assets/messages-BNXlPzKV.js +0 -4
  105. package/dist/assets/messages-BNXlPzKV.js.map +0 -1
  106. package/dist/assets/messages-BUygB8mD.js +0 -4
  107. package/dist/assets/messages-BUygB8mD.js.map +0 -1
  108. package/dist/assets/messages-BVPPcwNr.js +0 -4
  109. package/dist/assets/messages-BVPPcwNr.js.map +0 -1
  110. package/dist/assets/messages-BbbWUQS8.js +0 -4
  111. package/dist/assets/messages-BbbWUQS8.js.map +0 -1
  112. package/dist/assets/messages-BibKCYyW.js +0 -4
  113. package/dist/assets/messages-BibKCYyW.js.map +0 -1
  114. package/dist/assets/messages-BlPrr9_7.js +0 -4
  115. package/dist/assets/messages-BlPrr9_7.js.map +0 -1
  116. package/dist/assets/messages-ByVCw40U.js +0 -4
  117. package/dist/assets/messages-ByVCw40U.js.map +0 -1
  118. package/dist/assets/messages-C5DU1neP.js +0 -4
  119. package/dist/assets/messages-C5DU1neP.js.map +0 -1
  120. package/dist/assets/messages-C6IgUtbX.js +0 -4
  121. package/dist/assets/messages-C6IgUtbX.js.map +0 -1
  122. package/dist/assets/messages-C92Zzt2o.js +0 -4
  123. package/dist/assets/messages-C92Zzt2o.js.map +0 -1
  124. package/dist/assets/messages-CGZqYT14.js +0 -4
  125. package/dist/assets/messages-CGZqYT14.js.map +0 -1
  126. package/dist/assets/messages-CGlsy4wt.js +0 -4
  127. package/dist/assets/messages-CGlsy4wt.js.map +0 -1
  128. package/dist/assets/messages-CPT1nd0u.js +0 -4
  129. package/dist/assets/messages-CPT1nd0u.js.map +0 -1
  130. package/dist/assets/messages-CTTdXyw_.js +0 -4
  131. package/dist/assets/messages-CTTdXyw_.js.map +0 -1
  132. package/dist/assets/messages-ChK_C_Pj.js +0 -4
  133. package/dist/assets/messages-ChK_C_Pj.js.map +0 -1
  134. package/dist/assets/messages-CjJbk7Uf.js +0 -4
  135. package/dist/assets/messages-CjJbk7Uf.js.map +0 -1
  136. package/dist/assets/messages-CoiLjLYO.js +0 -4
  137. package/dist/assets/messages-CoiLjLYO.js.map +0 -1
  138. package/dist/assets/messages-Cwx6B4Ti.js +0 -4
  139. package/dist/assets/messages-Cwx6B4Ti.js.map +0 -1
  140. package/dist/assets/messages-D0uXAp_H.js +0 -4
  141. package/dist/assets/messages-D0uXAp_H.js.map +0 -1
  142. package/dist/assets/messages-DG0_arU0.js +0 -4
  143. package/dist/assets/messages-DG0_arU0.js.map +0 -1
  144. package/dist/assets/messages-DOXFJh9K.js +0 -4
  145. package/dist/assets/messages-DOXFJh9K.js.map +0 -1
  146. package/dist/assets/messages-DPK7nOoC.js +0 -4
  147. package/dist/assets/messages-DPK7nOoC.js.map +0 -1
  148. package/dist/assets/messages-Duccgtu0.js +0 -4
  149. package/dist/assets/messages-Duccgtu0.js.map +0 -1
  150. package/dist/assets/messages-DxTqgsHq.js +0 -4
  151. package/dist/assets/messages-DxTqgsHq.js.map +0 -1
  152. package/dist/assets/messages-E5_lTg7A.js +0 -4
  153. package/dist/assets/messages-E5_lTg7A.js.map +0 -1
  154. package/dist/assets/messages-UhunAjh1.js +0 -4
  155. package/dist/assets/messages-UhunAjh1.js.map +0 -1
  156. package/dist/assets/messages-Xg_3YLGw.js +0 -4
  157. package/dist/assets/messages-Xg_3YLGw.js.map +0 -1
  158. package/dist/assets/messages-iliBQHY2.js +0 -4
  159. package/dist/assets/messages-iliBQHY2.js.map +0 -1
  160. package/dist/assets/messages-lRprpIl-.js +0 -4
  161. package/dist/assets/messages-lRprpIl-.js.map +0 -1
  162. package/dist/assets/messages-pbPHQbz1.js +0 -4
  163. package/dist/assets/messages-pbPHQbz1.js.map +0 -1
  164. package/dist/assets/messages-q-O7ZQGs.js +0 -4
  165. package/dist/assets/messages-q-O7ZQGs.js.map +0 -1
  166. package/dist/lib/index.d.ts +0 -19
  167. package/dist/lib/index.d.ts.map +0 -1
  168. package/dist/lib/index.js +0 -47
  169. package/dist/lib/index.js.map +0 -1
  170. package/dist/tsconfig.backend.tsbuildinfo +0 -1
  171. package/lib/index.ts +0 -72
  172. package/rollup.config.js +0 -102
  173. package/src/backend-data.ts +0 -35
  174. package/src/hooks/use-csrf-token.ts +0 -5
  175. package/src/lib/backend-data.ts +0 -6
  176. package/src/lib/clsx.ts +0 -6
  177. package/src/locales/locale-context.ts +0 -19
  178. package/src/styles.css +0 -33
  179. package/tailwind.config.js +0 -31
  180. package/tsconfig.backend.json +0 -8
  181. package/tsconfig.frontend.tsbuildinfo +0 -1
  182. /package/{src/index.html → index.html} +0 -0
@@ -135,7 +135,7 @@ export function SignInForm({
135
135
  submitLabel={secondFactor ? t`Confirm` : t`Sign in`}
136
136
  onSubmit={doSubmit}
137
137
  >
138
- <Fieldset disabled={loading} label={<Trans>Account</Trans>}>
138
+ <Fieldset disabled={loading} label={<Trans>Identifier</Trans>}>
139
139
  <InputText
140
140
  icon={<AtSymbolIcon className="w-5" />}
141
141
  name="username"
@@ -159,33 +159,37 @@ export function SignInForm({
159
159
  />
160
160
  </Fieldset>
161
161
 
162
- <InputPassword
163
- name="password"
164
- onChange={(event) => {
165
- resetState()
166
- setPassword(event.target.value)
167
- }}
168
- append={
169
- onForgotPassword && (
170
- <Button
171
- className="text-sm"
172
- type="button"
173
- onClick={() => {
174
- onForgotPassword(username?.includes('@') ? username : undefined)
175
- }}
176
- aria-label={t`Reset your password`}
177
- >
178
- <Trans>Forgot?</Trans>
179
- </Button>
180
- )
181
- }
182
- enterKeyHint={secondFactor ? 'next' : 'done'}
183
- disabled={loading}
184
- required
185
- />
162
+ <Fieldset disabled={loading} label={<Trans>Password</Trans>}>
163
+ <InputPassword
164
+ name="password"
165
+ onChange={(event) => {
166
+ resetState()
167
+ setPassword(event.target.value)
168
+ }}
169
+ append={
170
+ onForgotPassword && (
171
+ <Button
172
+ className="text-sm"
173
+ type="button"
174
+ onClick={() => {
175
+ onForgotPassword(
176
+ username?.includes('@') ? username : undefined,
177
+ )
178
+ }}
179
+ aria-label={t`Reset your password`}
180
+ >
181
+ <Trans>Forgot?</Trans>
182
+ </Button>
183
+ )
184
+ }
185
+ enterKeyHint={secondFactor ? 'next' : 'done'}
186
+ disabled={loading}
187
+ required
188
+ />
189
+ </Fieldset>
186
190
 
187
191
  <Admonition role="status">
188
- <p className="font-bold text-md text-brand pb-1">
192
+ <p className="text-md text-primary pb-1 font-bold">
189
193
  <Trans>Warning</Trans>
190
194
  </p>
191
195
  <p className="text-sm">
@@ -196,21 +200,15 @@ export function SignInForm({
196
200
  </p>
197
201
  </Admonition>
198
202
 
199
- <Fieldset
200
- key="remember"
201
- disabled={loading}
202
- label={<Trans>Session</Trans>}
203
+ <InputCheckbox
204
+ name="remember"
205
+ title={t`Remember this account on this device`}
206
+ enterKeyHint={secondFactor ? 'next' : 'done'}
207
+ checked={remember}
208
+ onChange={(event) => setRemember(event.target.checked)}
203
209
  >
204
- <InputCheckbox
205
- name="remember"
206
- title={t`Remember this account on this device`}
207
- enterKeyHint={secondFactor ? 'next' : 'done'}
208
- checked={remember}
209
- onChange={(event) => setRemember(event.target.checked)}
210
- >
211
- <Trans>Remember this account on this device</Trans>
212
- </InputCheckbox>
213
- </Fieldset>
210
+ <Trans>Remember this account on this device</Trans>
211
+ </InputCheckbox>
214
212
 
215
213
  {secondFactor && (
216
214
  <Fieldset
@@ -228,7 +226,7 @@ export function SignInForm({
228
226
  onToken={setOtp}
229
227
  />
230
228
 
231
- <p className="text-slate-600 dark:text-slate-400 text-sm">
229
+ <p className="text-sm text-slate-600 dark:text-slate-400">
232
230
  <Trans>
233
231
  Check your {secondFactor.hint} email for a login code and enter
234
232
  it here.
@@ -49,7 +49,7 @@ export function SignInPicker({
49
49
  )
50
50
  }
51
51
  >
52
- <p className="text-slate-600 dark:text-slate-400 text-sm font-medium">
52
+ <p className="text-sm font-medium text-slate-600 dark:text-slate-400">
53
53
  <Trans>Sign in as...</Trans>
54
54
  </p>
55
55
 
@@ -77,12 +77,12 @@ export function SignInPicker({
77
77
  append={<CaretRightIcon aria-hidden className="h-4" />}
78
78
  >
79
79
  <span className="flex flex-wrap items-center">
80
- <span className="font-medium truncate mr-2" arial-label={t`Name`}>
80
+ <span className="mr-2 truncate font-medium" arial-label={t`Name`}>
81
81
  {name}
82
82
  </span>
83
83
  {identifier && (
84
84
  <span
85
- className="text-sm text-neutral-500 dark:text-neutral-400 truncate"
85
+ className="truncate text-sm text-neutral-500 dark:text-neutral-400"
86
86
  arial-label={t`Identifier`}
87
87
  >
88
88
  {identifier}
@@ -1,8 +1,8 @@
1
1
  import { Trans } from '@lingui/react/macro'
2
+ import { clsx } from 'clsx'
2
3
  import { JSX } from 'react'
3
4
  import type { LinkDefinition } from '@atproto/oauth-provider-api'
4
5
  import { LinkAnchor } from '../../../components/utils/link-anchor.tsx'
5
- import { clsx } from '../../../lib/clsx.ts'
6
6
  import { Override } from '../../../lib/util.ts'
7
7
 
8
8
  export type SignUpDisclaimerProps = Override<
@@ -30,7 +30,7 @@ export function SignUpDisclaimer({
30
30
  <Trans>
31
31
  By creating an account you agree to the{' '}
32
32
  {tosLink ? (
33
- <LinkAnchor className="text-brand underline" link={tosLink}>
33
+ <LinkAnchor className="text-primary underline" link={tosLink}>
34
34
  <Trans>Terms of Service</Trans>
35
35
  </LinkAnchor>
36
36
  ) : (
@@ -38,7 +38,7 @@ export function SignUpDisclaimer({
38
38
  )}
39
39
  {' and the '}
40
40
  {ppLink ? (
41
- <LinkAnchor className="text-brand underline" link={ppLink}>
41
+ <LinkAnchor className="text-primary underline" link={ppLink}>
42
42
  <Trans>Privacy Policy</Trans>
43
43
  </LinkAnchor>
44
44
  ) : (
@@ -1,4 +1,5 @@
1
1
  import { Trans, useLingui } from '@lingui/react/macro'
2
+ import { clsx } from 'clsx'
2
3
  import { JSX, ReactNode, useCallback, useEffect, useRef, useState } from 'react'
3
4
  import {
4
5
  AsyncActionController,
@@ -12,7 +13,6 @@ import {
12
13
  CheckMarkIcon,
13
14
  XMarkIcon,
14
15
  } from '../../../components/utils/icons.tsx'
15
- import { clsx } from '../../../lib/clsx.ts'
16
16
  import { mergeRefs } from '../../../lib/ref.ts'
17
17
  import { Override } from '../../../lib/util.ts'
18
18
 
@@ -223,7 +223,7 @@ export function SignUpHandleForm({
223
223
  ) : (
224
224
  <span
225
225
  aria-hidden
226
- className="bg-gray-300 dark:bg-slate-600 rounded-md p-2 w-24"
226
+ className="w-24 rounded-md bg-gray-300 p-2 dark:bg-slate-600"
227
227
  />
228
228
  )}
229
229
  </Trans>
@@ -266,19 +266,19 @@ function ValidationMessage({
266
266
  <>
267
267
  {valid ? (
268
268
  <CheckMarkIcon
269
- className="inline-block w-4 h-4 text-success"
269
+ className="text-success inline-block h-4 w-4"
270
270
  title={t`Valid`}
271
271
  />
272
272
  ) : (
273
273
  <XMarkIcon
274
- className="inline-block w-4 h-4 text-error"
274
+ className="text-error inline-block h-4 w-4"
275
275
  title={t`Invalid`}
276
276
  />
277
277
  )}
278
278
  </>
279
279
  ) : (
280
- <div aria-hidden className="w-4 h-4 flex items-center justify-center">
281
- <div className="bg-gray-300 dark:bg-slate-600 rounded-full w-2 h-2" />
280
+ <div aria-hidden className="flex h-4 w-4 items-center justify-center">
281
+ <div className="h-2 w-2 rounded-full bg-gray-300 dark:bg-slate-600" />
282
282
  </div>
283
283
  )}
284
284
  <div className="text-sm">{children}</div>
@@ -94,7 +94,7 @@ export function SignUpView({
94
94
  titleRender: () => <Trans>Choose a username</Trans>,
95
95
  contentRender: ({ prev, prevLabel, next, nextLabel, invalid }) => (
96
96
  <SignUpHandleForm
97
- className="flex-grow"
97
+ className="grow"
98
98
  invalid={invalid}
99
99
  domains={availableUserDomains}
100
100
  handle={handle}
@@ -116,7 +116,7 @@ export function SignUpView({
116
116
  titleRender: () => <Trans>Your account</Trans>,
117
117
  contentRender: ({ prev, prevLabel, next, nextLabel, invalid }) => (
118
118
  <SignUpAccountForm
119
- className="flex-grow"
119
+ className="grow"
120
120
  invalid={invalid}
121
121
  prevLabel={prevLabel}
122
122
  onPrev={prev}
@@ -135,7 +135,7 @@ export function SignUpView({
135
135
  titleRender: () => <Trans>Verify you are human</Trans>,
136
136
  contentRender: ({ prev, prevLabel, next, nextLabel, invalid }) => (
137
137
  <SignUpHcaptchaForm
138
- className="flex-grow"
138
+ className="grow"
139
139
  invalid={invalid}
140
140
  siteKey={hcaptchaSiteKey}
141
141
  token={hcaptcha}
@@ -28,8 +28,8 @@ export function WelcomeView({
28
28
  <LayoutWelcome {...props} title={props.title ?? t`Authenticate`}>
29
29
  {onSignUp && (
30
30
  <Button
31
- className={'m-1 w-60 max-w-full min-w-min'}
32
- color={onSignIn ? 'brand' : undefined}
31
+ className={'m-1 w-60 min-w-min max-w-full'}
32
+ color={onSignIn ? 'primary' : undefined}
33
33
  onClick={onSignUp}
34
34
  >
35
35
  <Trans>Create a new account</Trans>
@@ -38,8 +38,8 @@ export function WelcomeView({
38
38
 
39
39
  {onSignIn && (
40
40
  <Button
41
- className={'m-1 w-60 max-w-full min-w-min'}
42
- color={onSignUp ? undefined : 'brand'}
41
+ className={'m-1 w-60 min-w-min max-w-full'}
42
+ color={onSignUp ? undefined : 'primary'}
43
43
  onClick={onSignIn}
44
44
  >
45
45
  <Trans>Sign in</Trans>
@@ -47,7 +47,7 @@ export function WelcomeView({
47
47
  )}
48
48
 
49
49
  {onCancel && (
50
- <Button className="m-1 w-60 max-w-full min-w-min" onClick={onCancel}>
50
+ <Button className="m-1 w-60 min-w-min max-w-full" onClick={onCancel}>
51
51
  <Trans>Cancel</Trans>
52
52
  </Button>
53
53
  )}
package/tsconfig.json CHANGED
@@ -1,8 +1,7 @@
1
1
  {
2
2
  "include": [],
3
3
  "references": [
4
- { "path": "./tsconfig.backend.json" },
5
- { "path": "./tsconfig.frontend.json" },
4
+ { "path": "./tsconfig.src.json" },
6
5
  { "path": "./tsconfig.tools.json" }
7
6
  ]
8
7
  }
@@ -4,7 +4,10 @@
4
4
  "../../../tsconfig/bundler.json"
5
5
  ],
6
6
  "compilerOptions": {
7
- "rootDir": "src"
7
+ "rootDir": "src",
8
+ "paths": {
9
+ "#/*": ["./src/*"]
10
+ }
8
11
  },
9
12
  "include": ["src/**/*.ts", "src/**/*.tsx"]
10
13
  }
@@ -0,0 +1 @@
1
+ {"root":["./src/hydration-data.d.ts","./src/hooks/use-api.ts","./src/hooks/use-async-action.ts","./src/hooks/use-bound-dispatch.ts","./src/hooks/use-browser-color-scheme.ts","./src/hooks/use-random-string.ts","./src/hooks/use-stepper.ts","./src/lib/api.ts","./src/lib/cookies.ts","./src/lib/json-client.ts","./src/lib/password.ts","./src/lib/ref.ts","./src/lib/util.ts","./src/locales/load.ts","./src/locales/locales.ts","./src/locales/an/messages.ts","./src/locales/ast/messages.ts","./src/locales/ca/messages.ts","./src/locales/da/messages.ts","./src/locales/de/messages.ts","./src/locales/el/messages.ts","./src/locales/en/messages.ts","./src/locales/en-GB/messages.ts","./src/locales/es/messages.ts","./src/locales/eu/messages.ts","./src/locales/fi/messages.ts","./src/locales/fr/messages.ts","./src/locales/ga/messages.ts","./src/locales/gl/messages.ts","./src/locales/hi/messages.ts","./src/locales/hu/messages.ts","./src/locales/ia/messages.ts","./src/locales/id/messages.ts","./src/locales/it/messages.ts","./src/locales/ja/messages.ts","./src/locales/km/messages.ts","./src/locales/ko/messages.ts","./src/locales/ne/messages.ts","./src/locales/nl/messages.ts","./src/locales/pl/messages.ts","./src/locales/pt-BR/messages.ts","./src/locales/ro/messages.ts","./src/locales/ru/messages.ts","./src/locales/sv/messages.ts","./src/locales/th/messages.ts","./src/locales/tr/messages.ts","./src/locales/uk/messages.ts","./src/locales/vi/messages.ts","./src/locales/zh-CN/messages.ts","./src/locales/zh-HK/messages.ts","./src/locales/zh-TW/messages.ts","./src/authorization-page.tsx","./src/error-page.tsx","./src/components/forms/button-toggle-visibility.tsx","./src/components/forms/button.tsx","./src/components/forms/fieldset.tsx","./src/components/forms/form-card-async.tsx","./src/components/forms/form-card.tsx","./src/components/forms/input-checkbox.tsx","./src/components/forms/input-container.tsx","./src/components/forms/input-email-address.tsx","./src/components/forms/input-new-password.tsx","./src/components/forms/input-password.tsx","./src/components/forms/input-text.tsx","./src/components/forms/input-token.tsx","./src/components/forms/wizard-card.tsx","./src/components/layouts/layout-title-page.tsx","./src/components/layouts/layout-welcome.tsx","./src/components/utils/account-identifier.tsx","./src/components/utils/account-image.tsx","./src/components/utils/admonition.tsx","./src/components/utils/client-name.tsx","./src/components/utils/error-card.tsx","./src/components/utils/error-message.tsx","./src/components/utils/help-card.tsx","./src/components/utils/icons.tsx","./src/components/utils/link-anchor.tsx","./src/components/utils/link-title.tsx","./src/components/utils/multi-lang-string.tsx","./src/components/utils/password-strength-label.tsx","./src/components/utils/password-strength-meter.tsx","./src/components/utils/url-viewer.tsx","./src/locales/locale-provider.tsx","./src/locales/locale-selector.tsx","./src/views/authorize/authorize-view.tsx","./src/views/authorize/accept/accept-form.tsx","./src/views/authorize/accept/accept-view.tsx","./src/views/authorize/reset-password/reset-password-confirm-form.tsx","./src/views/authorize/reset-password/reset-password-request-form.tsx","./src/views/authorize/reset-password/reset-password-view.tsx","./src/views/authorize/sign-in/sign-in-form.tsx","./src/views/authorize/sign-in/sign-in-picker.tsx","./src/views/authorize/sign-in/sign-in-view.tsx","./src/views/authorize/sign-up/sign-up-account-form.tsx","./src/views/authorize/sign-up/sign-up-disclaimer.tsx","./src/views/authorize/sign-up/sign-up-handle-form.tsx","./src/views/authorize/sign-up/sign-up-hcaptcha-form.tsx","./src/views/authorize/sign-up/sign-up-view.tsx","./src/views/authorize/welcome/welcome-view.tsx","./src/views/error/error-view.tsx"],"version":"5.8.2"}
@@ -4,5 +4,5 @@
4
4
  "rootDir": ".",
5
5
  "noEmit": true
6
6
  },
7
- "include": ["./*.js", "./*.cjs", "./*.mjs", "./*.ts"]
7
+ "include": ["./*.js", "./*.cjs", "./*.mjs", "./*.ts", "./*.cts", "./*.mts"]
8
8
  }
@@ -1 +1 @@
1
- {"root":["./rollup.config.js","./tailwind.config.js","./vite.config.mjs"],"version":"5.6.3"}
1
+ {"root":["./vite.config.mjs"],"version":"5.8.2"}
package/vite.config.mjs CHANGED
@@ -1,16 +1,47 @@
1
+ import { dirname, resolve } from 'node:path'
2
+ import { fileURLToPath } from 'node:url'
1
3
  import { lingui } from '@lingui/vite-plugin'
4
+ import tailwindcss from '@tailwindcss/vite'
2
5
  import react from '@vitejs/plugin-react-swc'
6
+ import { defineConfig } from 'vite'
7
+ import { bundleManifest } from '@atproto-labs/rollup-plugin-bundle-manifest'
3
8
 
4
- /**
5
- * @see {@link https://vitejs.dev/config/}
6
- * @type {import('vite').UserConfig}
7
- */
8
- export default {
9
- root: './src',
9
+ const __dirname = dirname(fileURLToPath(import.meta.url))
10
+
11
+ export default defineConfig({
12
+ resolve: {
13
+ alias: {
14
+ '#': resolve(__dirname, './src'),
15
+ },
16
+ },
10
17
  plugins: [
11
18
  react({
12
19
  plugins: [['@lingui/swc-plugin', {}]],
13
20
  }),
14
21
  lingui(),
22
+ tailwindcss(),
15
23
  ],
16
- }
24
+ build: {
25
+ emptyOutDir: false,
26
+ outDir: './dist',
27
+ sourcemap: true,
28
+ rollupOptions: {
29
+ input: ['./src/authorization-page.tsx', './src/error-page.tsx'],
30
+ output: {
31
+ manualChunks: undefined,
32
+ format: 'module',
33
+ entryFileNames: '[name]-[hash].js',
34
+ chunkFileNames: '[name]-[hash].js',
35
+ assetFileNames: '[name]-[hash][extname]',
36
+ },
37
+ plugins: [bundleManifest()],
38
+ },
39
+ commonjsOptions: {
40
+ include: [/node_modules/, /oauth-provider-api/],
41
+ },
42
+ },
43
+ optimizeDeps: {
44
+ // Needed because this is a monorepo and it exposes CommonJS
45
+ include: ['@atproto/oauth-provider-api'],
46
+ },
47
+ })
@@ -1,3 +0,0 @@
1
- /*
2
- ! tailwindcss v3.4.3 | MIT License | https://tailwindcss.com
3
- */*,:after,:before{border:0 solid #e5e7eb;box-sizing:border-box}:after,:before{--tw-content:""}:host,html{-webkit-text-size-adjust:100%;font-feature-settings:normal;-webkit-tap-highlight-color:transparent;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;font-variation-settings:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-feature-settings:normal;font-family:Monaco,mono;font-size:1em;font-variation-settings:normal}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{font-feature-settings:inherit;color:inherit;font-family:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:#9ca3af;opacity:1}input::placeholder,textarea::placeholder{color:#9ca3af;opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]{display:none}:root{--color-brand:255 115 179;--color-brand-c:0 0 0;--color-error:218 44 67;--color-error-c:255 255 255;--color-warning:255 201 73;--color-warning-c:0 0 0;--color-success:0 191 165;--color-success-c:255 255 255}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.visible{visibility:visible}.static{position:static}.relative{position:relative}.m-1{margin:.25rem}.m-2{margin:.5rem}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-4{margin-left:1rem;margin-right:1rem}.my-5{margin-bottom:1.25rem;margin-top:1.25rem}.-mb-1{margin-bottom:-.25rem}.-ml-1{margin-left:-.25rem}.mb-1{margin-bottom:.25rem}.mb-4{margin-bottom:1rem}.ml-1{margin-left:.25rem}.mr-2{margin-right:.5rem}.mt-2{margin-top:.5rem}.mt-4{margin-top:1rem}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.h-1{height:.25rem}.h-16{height:4rem}.h-2{height:.5rem}.h-4{height:1rem}.h-6{height:1.5rem}.min-h-12{min-height:3rem}.min-h-screen{min-height:100vh}.w-1\/4{width:25%}.w-16{width:4rem}.w-2{width:.5rem}.w-24{width:6rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-60{width:15rem}.w-full{width:100%}.min-w-max{min-width:-moz-max-content;min-width:max-content}.min-w-min{min-width:-moz-min-content;min-width:min-content}.max-w-full{max-width:100%}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.flex-auto{flex:1 1 auto}.shrink-0{flex-shrink:0}.flex-grow{flex-grow:1}.grow-0{flex-grow:0}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-pointer{cursor:pointer}.cursor-text{cursor:text}.touch-manipulation{touch-action:manipulation}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.list-inside{list-style-position:inside}.list-disc{list-style-type:disc}.grid-cols-\[auto\2c 1fr\]{grid-template-columns:auto 1fr}.flex-row{flex-direction:row}.flex-row-reverse{flex-direction:row-reverse}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.content-center{align-content:center}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-stretch{justify-content:stretch}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-x-2{-moz-column-gap:.5rem;column-gap:.5rem}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.5rem*var(--tw-space-x-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1rem*var(--tw-space-y-reverse));margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)))}.space-x-reverse>:not([hidden])~:not([hidden]){--tw-space-x-reverse:1}.overflow-hidden,.truncate{overflow:hidden}.truncate{white-space:nowrap}.text-ellipsis,.truncate{text-overflow:ellipsis}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-bl-none{border-bottom-left-radius:0}.rounded-br-none{border-bottom-right-radius:0}.border{border-width:1px}.border-2{border-width:2px}.border-t{border-top-width:1px}.border-solid{border-style:solid}.border-brand{--tw-border-opacity:1;border-color:rgb(var(--color-brand)/var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity))}.border-transparent{border-color:transparent}.border-t-slate-200{--tw-border-opacity:1;border-top-color:rgb(226 232 240/var(--tw-border-opacity))}.bg-brand{--tw-bg-opacity:1;background-color:rgb(var(--color-brand)/var(--tw-bg-opacity))}.bg-error{--tw-bg-opacity:1;background-color:rgb(var(--color-error)/var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}.bg-gray-300{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity))}.bg-slate-100{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity))}.bg-success{--tw-bg-opacity:1;background-color:rgb(var(--color-success)/var(--tw-bg-opacity))}.bg-transparent{background-color:transparent}.bg-warning{--tw-bg-opacity:1;background-color:rgb(var(--color-warning)/var(--tw-bg-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-clip-padding{background-clip:padding-box}.fill-current{fill:currentColor}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-6{padding:1.5rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-1{padding-bottom:.25rem;padding-top:.25rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.pb-1{padding-bottom:.25rem}.pb-2{padding-bottom:.5rem}.pb-4{padding-bottom:1rem}.pt-4{padding-top:1rem}.text-center{text-align:center}.text-2xl{font-size:1.5rem;line-height:2rem}.text-base{font-size:1rem;line-height:1.5rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.lowercase{text-transform:lowercase}.italic{font-style:italic}.leading-\[1\.6\]{line-height:1.6}.tracking-wide{letter-spacing:.025em}.text-brand{--tw-text-opacity:1;color:rgb(var(--color-brand)/var(--tw-text-opacity))}.text-brand-c{--tw-text-opacity:1;color:rgb(var(--color-brand-c)/var(--tw-text-opacity))}.text-error{--tw-text-opacity:1;color:rgb(var(--color-error)/var(--tw-text-opacity))}.text-error-c{--tw-text-opacity:1;color:rgb(var(--color-error-c)/var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity))}.text-inherit{color:inherit}.text-neutral-500{--tw-text-opacity:1;color:rgb(115 115 115/var(--tw-text-opacity))}.text-slate-500{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity))}.text-slate-600{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity))}.text-slate-700{--tw-text-opacity:1;color:rgb(51 65 85/var(--tw-text-opacity))}.text-slate-800{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity))}.text-slate-900{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity))}.text-success{--tw-text-opacity:1;color:rgb(var(--color-success)/var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.underline{text-decoration-line:underline}.accent-brand{accent-color:rgb(var(--color-brand)/1)}.accent-slate-100{accent-color:#f1f5f9}.opacity-50{opacity:.5}.outline-none{outline:2px solid transparent;outline-offset:2px}.blur{--tw-blur:blur(8px)}.blur,.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.hover\:border-gray-400:hover{--tw-border-opacity:1;border-color:rgb(156 163 175/var(--tw-border-opacity))}.hover\:bg-gray-200:hover{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}.hover\:underline:hover{text-decoration-line:underline}.focus\:border-brand:focus{--tw-border-opacity:1;border-color:rgb(var(--color-brand)/var(--tw-border-opacity))}.focus\:bg-slate-200:focus{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity))}.hover\:focus\:border-gray-400:focus:hover{--tw-border-opacity:1;border-color:rgb(156 163 175/var(--tw-border-opacity))}.disabled\:opacity-50:disabled{opacity:.5}.has-\[\:focus\]\:border-brand:has(:focus){--tw-border-opacity:1;border-color:rgb(var(--color-brand)/var(--tw-border-opacity))}.has-\[\:focus\]\:bg-slate-200:has(:focus){--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity))}@media (min-width:768px){.md\:m-2{margin:.5rem}.md\:m-4{margin:1rem}.md\:my-4{margin-bottom:1rem;margin-top:1rem}.md\:mb-8{margin-bottom:2rem}.md\:block{display:block}.md\:flex{display:flex}.md\:h-24{height:6rem}.md\:w-1\/2{width:50%}.md\:w-24{width:6rem}.md\:max-w-3xl{max-width:48rem}.md\:max-w-lg{max-width:32rem}.md\:flex-row{flex-direction:row}.md\:flex-col{flex-direction:column}.md\:items-center{align-items:center}.md\:justify-stretch{justify-content:stretch}.md\:justify-items-end{justify-items:end}.md\:self-stretch{align-self:stretch}.md\:bg-slate-100{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity))}.md\:p-4{padding:1rem}.md\:px-12{padding-left:3rem;padding-right:3rem}.md\:text-right{text-align:right}.md\:text-2xl{font-size:1.5rem;line-height:2rem}.md\:text-4xl{font-size:2.25rem;line-height:2.5rem}.md\:text-sm{font-size:.875rem;line-height:1.25rem}}@media (min-width:1024px){.lg\:text-5xl{font-size:3rem;line-height:1}}@media (prefers-color-scheme:dark){.dark\:border-gray-700{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity))}.dark\:border-t-slate-700{--tw-border-opacity:1;border-top-color:rgb(51 65 85/var(--tw-border-opacity))}.dark\:bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity))}.dark\:bg-slate-500{--tw-bg-opacity:1;background-color:rgb(100 116 139/var(--tw-bg-opacity))}.dark\:bg-slate-600{--tw-bg-opacity:1;background-color:rgb(71 85 105/var(--tw-bg-opacity))}.dark\:bg-slate-700{--tw-bg-opacity:1;background-color:rgb(51 65 85/var(--tw-bg-opacity))}.dark\:bg-slate-800{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity))}.dark\:bg-slate-900{--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity))}.dark\:text-gray-200{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity))}.dark\:text-gray-300{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity))}.dark\:text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.dark\:text-neutral-400{--tw-text-opacity:1;color:rgb(163 163 163/var(--tw-text-opacity))}.dark\:text-slate-100{--tw-text-opacity:1;color:rgb(241 245 249/var(--tw-text-opacity))}.dark\:text-slate-200{--tw-text-opacity:1;color:rgb(226 232 240/var(--tw-text-opacity))}.dark\:text-slate-300{--tw-text-opacity:1;color:rgb(203 213 225/var(--tw-text-opacity))}.dark\:text-slate-400{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}.dark\:placeholder-gray-500::-moz-placeholder{--tw-placeholder-opacity:1;color:rgb(107 114 128/var(--tw-placeholder-opacity))}.dark\:placeholder-gray-500::placeholder{--tw-placeholder-opacity:1;color:rgb(107 114 128/var(--tw-placeholder-opacity))}.dark\:hover\:border-gray-500:hover{--tw-border-opacity:1;border-color:rgb(107 114 128/var(--tw-border-opacity))}.dark\:hover\:bg-gray-700:hover{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}.dark\:focus\:bg-slate-700:focus{--tw-bg-opacity:1;background-color:rgb(51 65 85/var(--tw-bg-opacity))}.dark\:hover\:focus\:border-gray-500:focus:hover{--tw-border-opacity:1;border-color:rgb(107 114 128/var(--tw-border-opacity))}.dark\:has-\[\:focus\]\:bg-slate-700:has(:focus){--tw-bg-opacity:1;background-color:rgb(51 65 85/var(--tw-bg-opacity))}}@media (min-width:768px){@media (prefers-color-scheme:dark){.md\:dark\:border-r{border-right-width:1px}.md\:dark\:border-slate-700{--tw-border-opacity:1;border-color:rgb(51 65 85/var(--tw-border-opacity))}.md\:dark\:bg-slate-800{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity))}}}