@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.
- package/CHANGELOG.md +10 -0
- package/{src/authorization-page.html → authorization-page.html} +36 -33
- package/{src/error-page.html → error-page.html} +17 -24
- package/package.json +28 -37
- package/src/authorization-page.tsx +21 -27
- package/src/components/forms/button.tsx +8 -8
- package/src/components/forms/fieldset.tsx +1 -1
- package/src/components/forms/form-card-async.tsx +1 -1
- package/src/components/forms/form-card.tsx +1 -1
- package/src/components/forms/input-checkbox.tsx +3 -3
- package/src/components/forms/input-container.tsx +12 -12
- package/src/components/forms/input-text.tsx +2 -2
- package/src/components/forms/wizard-card.tsx +2 -2
- package/src/components/layouts/layout-title-page.tsx +9 -8
- package/src/components/layouts/layout-welcome.tsx +21 -16
- package/src/components/utils/account-image.tsx +2 -2
- package/src/components/utils/admonition.tsx +5 -5
- package/src/components/utils/client-name.tsx +30 -4
- package/src/components/utils/error-card.tsx +1 -1
- package/src/components/utils/help-card.tsx +3 -3
- package/src/components/utils/multi-lang-string.tsx +14 -8
- package/src/components/utils/password-strength-meter.tsx +3 -3
- package/src/components/utils/url-viewer.tsx +1 -1
- package/src/error-page.tsx +8 -14
- package/src/hooks/use-api.ts +65 -45
- package/src/hydration-data.d.ts +42 -0
- package/src/lib/api.ts +12 -21
- package/src/{cookies.ts → lib/cookies.ts} +8 -2
- package/src/lib/json-client.ts +62 -18
- package/src/lib/util.ts +2 -1
- package/src/locales/an/messages.po +35 -28
- package/src/locales/ast/messages.po +35 -28
- package/src/locales/ca/messages.po +35 -28
- package/src/locales/da/messages.po +35 -28
- package/src/locales/de/messages.po +35 -28
- package/src/locales/el/messages.po +35 -28
- package/src/locales/en/messages.po +35 -28
- package/src/locales/en-GB/messages.po +35 -28
- package/src/locales/es/messages.po +35 -28
- package/src/locales/eu/messages.po +35 -28
- package/src/locales/fi/messages.po +35 -28
- package/src/locales/fr/messages.po +35 -28
- package/src/locales/ga/messages.po +35 -28
- package/src/locales/gl/messages.po +35 -28
- package/src/locales/hi/messages.po +35 -28
- package/src/locales/hu/messages.po +35 -28
- package/src/locales/ia/messages.po +35 -28
- package/src/locales/id/messages.po +35 -28
- package/src/locales/it/messages.po +35 -28
- package/src/locales/ja/messages.po +35 -28
- package/src/locales/km/messages.po +35 -28
- package/src/locales/ko/messages.po +35 -28
- package/src/locales/locale-provider.tsx +55 -59
- package/src/locales/locale-selector.tsx +13 -14
- package/src/locales/locales.ts +161 -146
- package/src/locales/ne/messages.po +35 -28
- package/src/locales/nl/messages.po +35 -28
- package/src/locales/pl/messages.po +35 -28
- package/src/locales/pt-BR/messages.po +35 -28
- package/src/locales/ro/messages.po +35 -28
- package/src/locales/ru/messages.po +35 -28
- package/src/locales/sv/messages.po +35 -28
- package/src/locales/th/messages.po +35 -28
- package/src/locales/tr/messages.po +35 -28
- package/src/locales/uk/messages.po +35 -28
- package/src/locales/vi/messages.po +35 -28
- package/src/locales/zh-CN/messages.po +35 -28
- package/src/locales/zh-HK/messages.po +35 -28
- package/src/locales/zh-TW/messages.po +35 -28
- package/src/style.css +219 -0
- package/src/views/authorize/accept/accept-form.tsx +11 -6
- package/src/views/authorize/authorize-view.tsx +13 -10
- package/src/views/authorize/reset-password/reset-password-view.tsx +2 -2
- package/src/views/authorize/sign-in/sign-in-form.tsx +39 -41
- package/src/views/authorize/sign-in/sign-in-picker.tsx +3 -3
- package/src/views/authorize/sign-up/sign-up-disclaimer.tsx +3 -3
- package/src/views/authorize/sign-up/sign-up-handle-form.tsx +6 -6
- package/src/views/authorize/sign-up/sign-up-view.tsx +3 -3
- package/src/views/authorize/welcome/welcome-view.tsx +5 -5
- package/tsconfig.json +1 -2
- package/{tsconfig.frontend.json → tsconfig.src.json} +4 -1
- package/tsconfig.src.tsbuildinfo +1 -0
- package/tsconfig.tools.json +1 -1
- package/tsconfig.tools.tsbuildinfo +1 -1
- package/vite.config.mjs +38 -7
- package/dist/assets/COdVzed-.css +0 -3
- package/dist/assets/COdVzed-.js +0 -100
- package/dist/assets/COdVzed-.js.map +0 -1
- package/dist/assets/Cqnfnbvc.js +0 -6
- package/dist/assets/Cqnfnbvc.js.map +0 -1
- package/dist/assets/bundle-manifest.json +0 -630
- package/dist/assets/error-view-Bu4y7Nd8.js +0 -208
- package/dist/assets/error-view-Bu4y7Nd8.js.map +0 -1
- package/dist/assets/index-DXlCRM6V.js +0 -36
- package/dist/assets/index-DXlCRM6V.js.map +0 -1
- package/dist/assets/messages-2GoTm2qL.js +0 -4
- package/dist/assets/messages-2GoTm2qL.js.map +0 -1
- package/dist/assets/messages-6Cn2Jbhw.js +0 -4
- package/dist/assets/messages-6Cn2Jbhw.js.map +0 -1
- package/dist/assets/messages-75hFgOK2.js +0 -4
- package/dist/assets/messages-75hFgOK2.js.map +0 -1
- package/dist/assets/messages-B3OK4k0O.js +0 -4
- package/dist/assets/messages-B3OK4k0O.js.map +0 -1
- package/dist/assets/messages-BNXlPzKV.js +0 -4
- package/dist/assets/messages-BNXlPzKV.js.map +0 -1
- package/dist/assets/messages-BUygB8mD.js +0 -4
- package/dist/assets/messages-BUygB8mD.js.map +0 -1
- package/dist/assets/messages-BVPPcwNr.js +0 -4
- package/dist/assets/messages-BVPPcwNr.js.map +0 -1
- package/dist/assets/messages-BbbWUQS8.js +0 -4
- package/dist/assets/messages-BbbWUQS8.js.map +0 -1
- package/dist/assets/messages-BibKCYyW.js +0 -4
- package/dist/assets/messages-BibKCYyW.js.map +0 -1
- package/dist/assets/messages-BlPrr9_7.js +0 -4
- package/dist/assets/messages-BlPrr9_7.js.map +0 -1
- package/dist/assets/messages-ByVCw40U.js +0 -4
- package/dist/assets/messages-ByVCw40U.js.map +0 -1
- package/dist/assets/messages-C5DU1neP.js +0 -4
- package/dist/assets/messages-C5DU1neP.js.map +0 -1
- package/dist/assets/messages-C6IgUtbX.js +0 -4
- package/dist/assets/messages-C6IgUtbX.js.map +0 -1
- package/dist/assets/messages-C92Zzt2o.js +0 -4
- package/dist/assets/messages-C92Zzt2o.js.map +0 -1
- package/dist/assets/messages-CGZqYT14.js +0 -4
- package/dist/assets/messages-CGZqYT14.js.map +0 -1
- package/dist/assets/messages-CGlsy4wt.js +0 -4
- package/dist/assets/messages-CGlsy4wt.js.map +0 -1
- package/dist/assets/messages-CPT1nd0u.js +0 -4
- package/dist/assets/messages-CPT1nd0u.js.map +0 -1
- package/dist/assets/messages-CTTdXyw_.js +0 -4
- package/dist/assets/messages-CTTdXyw_.js.map +0 -1
- package/dist/assets/messages-ChK_C_Pj.js +0 -4
- package/dist/assets/messages-ChK_C_Pj.js.map +0 -1
- package/dist/assets/messages-CjJbk7Uf.js +0 -4
- package/dist/assets/messages-CjJbk7Uf.js.map +0 -1
- package/dist/assets/messages-CoiLjLYO.js +0 -4
- package/dist/assets/messages-CoiLjLYO.js.map +0 -1
- package/dist/assets/messages-Cwx6B4Ti.js +0 -4
- package/dist/assets/messages-Cwx6B4Ti.js.map +0 -1
- package/dist/assets/messages-D0uXAp_H.js +0 -4
- package/dist/assets/messages-D0uXAp_H.js.map +0 -1
- package/dist/assets/messages-DG0_arU0.js +0 -4
- package/dist/assets/messages-DG0_arU0.js.map +0 -1
- package/dist/assets/messages-DOXFJh9K.js +0 -4
- package/dist/assets/messages-DOXFJh9K.js.map +0 -1
- package/dist/assets/messages-DPK7nOoC.js +0 -4
- package/dist/assets/messages-DPK7nOoC.js.map +0 -1
- package/dist/assets/messages-Duccgtu0.js +0 -4
- package/dist/assets/messages-Duccgtu0.js.map +0 -1
- package/dist/assets/messages-DxTqgsHq.js +0 -4
- package/dist/assets/messages-DxTqgsHq.js.map +0 -1
- package/dist/assets/messages-E5_lTg7A.js +0 -4
- package/dist/assets/messages-E5_lTg7A.js.map +0 -1
- package/dist/assets/messages-UhunAjh1.js +0 -4
- package/dist/assets/messages-UhunAjh1.js.map +0 -1
- package/dist/assets/messages-Xg_3YLGw.js +0 -4
- package/dist/assets/messages-Xg_3YLGw.js.map +0 -1
- package/dist/assets/messages-iliBQHY2.js +0 -4
- package/dist/assets/messages-iliBQHY2.js.map +0 -1
- package/dist/assets/messages-lRprpIl-.js +0 -4
- package/dist/assets/messages-lRprpIl-.js.map +0 -1
- package/dist/assets/messages-pbPHQbz1.js +0 -4
- package/dist/assets/messages-pbPHQbz1.js.map +0 -1
- package/dist/assets/messages-q-O7ZQGs.js +0 -4
- package/dist/assets/messages-q-O7ZQGs.js.map +0 -1
- package/dist/lib/index.d.ts +0 -19
- package/dist/lib/index.d.ts.map +0 -1
- package/dist/lib/index.js +0 -47
- package/dist/lib/index.js.map +0 -1
- package/dist/tsconfig.backend.tsbuildinfo +0 -1
- package/lib/index.ts +0 -72
- package/rollup.config.js +0 -102
- package/src/backend-data.ts +0 -35
- package/src/hooks/use-csrf-token.ts +0 -5
- package/src/lib/backend-data.ts +0 -6
- package/src/lib/clsx.ts +0 -6
- package/src/locales/locale-context.ts +0 -19
- package/src/styles.css +0 -33
- package/tailwind.config.js +0 -31
- package/tsconfig.backend.json +0 -8
- package/tsconfig.frontend.tsbuildinfo +0 -1
- /package/{src/index.html → index.html} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"COdVzed-.js","sources":["../../../../../node_modules/.pnpm/react-error-boundary@5.0.0_react@19.0.0/node_modules/react-error-boundary/dist/react-error-boundary.esm.js","../../src/components/layouts/layout-title-page.tsx","../../src/lib/util.ts","../../src/cookies.ts","../../src/hooks/use-csrf-token.ts","../../src/hooks/use-api.ts","../../src/hooks/use-bound-dispatch.ts","../../src/components/forms/button.tsx","../../src/components/forms/form-card.tsx","../../src/components/utils/account-identifier.tsx","../../src/components/utils/url-viewer.tsx","../../src/components/utils/client-name.tsx","../../src/views/authorize/accept/accept-form.tsx","../../src/views/authorize/accept/accept-view.tsx","../../src/components/forms/fieldset.tsx","../../src/hooks/use-async-action.ts","../../src/components/forms/form-card-async.tsx","../../src/lib/password.ts","../../src/components/utils/password-strength-label.tsx","../../src/components/utils/password-strength-meter.tsx","../../src/lib/ref.ts","../../src/components/forms/button-toggle-visibility.tsx","../../src/components/forms/input-container.tsx","../../src/components/forms/input-text.tsx","../../src/components/forms/input-password.tsx","../../src/components/forms/input-new-password.tsx","../../src/components/forms/input-token.tsx","../../src/views/authorize/reset-password/reset-password-confirm-form.tsx","../../src/components/forms/input-email-address.tsx","../../src/views/authorize/reset-password/reset-password-request-form.tsx","../../src/views/authorize/reset-password/reset-password-view.tsx","../../src/components/forms/input-checkbox.tsx","../../src/views/authorize/sign-in/sign-in-form.tsx","../../src/components/utils/account-image.tsx","../../src/views/authorize/sign-in/sign-in-picker.tsx","../../src/views/authorize/sign-in/sign-in-view.tsx","../../src/hooks/use-stepper.ts","../../src/components/forms/wizard-card.tsx","../../src/components/utils/help-card.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/hooks/use-browser-color-scheme.ts","../../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/authorize/authorize-view.tsx","../../src/authorization-page.tsx"],"sourcesContent":["'use client';\nimport { createContext, Component, createElement, useContext, useState, useMemo, forwardRef } from 'react';\n\nconst ErrorBoundaryContext = createContext(null);\n\nconst initialState = {\n didCatch: false,\n error: null\n};\nclass ErrorBoundary extends Component {\n constructor(props) {\n super(props);\n this.resetErrorBoundary = this.resetErrorBoundary.bind(this);\n this.state = initialState;\n }\n static getDerivedStateFromError(error) {\n return {\n didCatch: true,\n error\n };\n }\n resetErrorBoundary() {\n const {\n error\n } = this.state;\n if (error !== null) {\n var _this$props$onReset, _this$props;\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n (_this$props$onReset = (_this$props = this.props).onReset) === null || _this$props$onReset === void 0 ? void 0 : _this$props$onReset.call(_this$props, {\n args,\n reason: \"imperative-api\"\n });\n this.setState(initialState);\n }\n }\n componentDidCatch(error, info) {\n var _this$props$onError, _this$props2;\n (_this$props$onError = (_this$props2 = this.props).onError) === null || _this$props$onError === void 0 ? void 0 : _this$props$onError.call(_this$props2, error, info);\n }\n componentDidUpdate(prevProps, prevState) {\n const {\n didCatch\n } = this.state;\n const {\n resetKeys\n } = this.props;\n\n // There's an edge case where if the thing that triggered the error happens to *also* be in the resetKeys array,\n // we'd end up resetting the error boundary immediately.\n // This would likely trigger a second error to be thrown.\n // So we make sure that we don't check the resetKeys on the first call of cDU after the error is set.\n\n if (didCatch && prevState.error !== null && hasArrayChanged(prevProps.resetKeys, resetKeys)) {\n var _this$props$onReset2, _this$props3;\n (_this$props$onReset2 = (_this$props3 = this.props).onReset) === null || _this$props$onReset2 === void 0 ? void 0 : _this$props$onReset2.call(_this$props3, {\n next: resetKeys,\n prev: prevProps.resetKeys,\n reason: \"keys\"\n });\n this.setState(initialState);\n }\n }\n render() {\n const {\n children,\n fallbackRender,\n FallbackComponent,\n fallback\n } = this.props;\n const {\n didCatch,\n error\n } = this.state;\n let childToRender = children;\n if (didCatch) {\n const props = {\n error,\n resetErrorBoundary: this.resetErrorBoundary\n };\n if (typeof fallbackRender === \"function\") {\n childToRender = fallbackRender(props);\n } else if (FallbackComponent) {\n childToRender = createElement(FallbackComponent, props);\n } else if (fallback !== undefined) {\n childToRender = fallback;\n } else {\n throw error;\n }\n }\n return createElement(ErrorBoundaryContext.Provider, {\n value: {\n didCatch,\n error,\n resetErrorBoundary: this.resetErrorBoundary\n }\n }, childToRender);\n }\n}\nfunction hasArrayChanged() {\n let a = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n let b = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n return a.length !== b.length || a.some((item, index) => !Object.is(item, b[index]));\n}\n\nfunction assertErrorBoundaryContext(value) {\n if (value == null || typeof value.didCatch !== \"boolean\" || typeof value.resetErrorBoundary !== \"function\") {\n throw new Error(\"ErrorBoundaryContext not found\");\n }\n}\n\nfunction useErrorBoundary() {\n const context = useContext(ErrorBoundaryContext);\n assertErrorBoundaryContext(context);\n const [state, setState] = useState({\n error: null,\n hasError: false\n });\n const memoized = useMemo(() => ({\n resetBoundary: () => {\n context.resetErrorBoundary();\n setState({\n error: null,\n hasError: false\n });\n },\n showBoundary: error => setState({\n error,\n hasError: true\n })\n }), [context.resetErrorBoundary]);\n if (state.hasError) {\n throw state.error;\n }\n return memoized;\n}\n\nfunction withErrorBoundary(component, errorBoundaryProps) {\n const Wrapped = forwardRef((props, ref) => createElement(ErrorBoundary, errorBoundaryProps, createElement(component, {\n ...props,\n ref\n })));\n\n // Format for display in DevTools\n const name = component.displayName || component.name || \"Unknown\";\n Wrapped.displayName = \"withErrorBoundary(\".concat(name, \")\");\n return Wrapped;\n}\n\nexport { ErrorBoundary, ErrorBoundaryContext, useErrorBoundary, withErrorBoundary };\n","import { JSX, ReactNode } from 'react'\nimport { clsx } from '../../lib/clsx.ts'\nimport { Override } from '../../lib/util.ts'\nimport { LocaleSelector } from '../../locales/locale-selector.tsx'\n\nexport type LayoutTitlePageProps = Override<\n JSX.IntrinsicElements['div'],\n {\n title?: string\n subtitle?: ReactNode\n children?: ReactNode\n }\n>\n\nexport function LayoutTitlePage({\n children,\n title,\n subtitle,\n\n // HTMLDivElement\n className,\n ...props\n}: LayoutTitlePageProps) {\n return (\n <div\n {...props}\n className={clsx(\n className,\n 'flex flex-col items-center',\n 'md:flex md:flex-row md:justify-stretch md:items-center',\n 'min-h-screen min-w-screen',\n 'bg-white text-slate-900',\n 'dark:bg-slate-900 dark:text-slate-100',\n )}\n >\n {title && <title>{title}</title>}\n\n <div\n className={clsx(\n 'px-6 pt-4',\n 'w-full',\n 'md:max-w-lg',\n 'flex flex-row md:flex-col',\n 'md:self-stretch',\n 'md:w-1/2 md:max-w-fix md:p-4',\n 'md:text-right',\n 'md:dark:border-r md:dark:border-slate-700',\n 'md:bg-slate-100 md:dark:bg-slate-800',\n )}\n >\n <div className=\"flex-grow grid content-center md:justify-items-end\">\n {title && (\n <h1\n key=\"title\"\n className=\"text-xl md:text-2xl lg:text-5xl md:my-4 font-semibold text-brand\"\n >\n {title}\n </h1>\n )}\n\n {subtitle && (\n <p\n key=\"subtitle\"\n className=\"hidden md:block max-w-xs text-slate-600 dark:text-slate-400\"\n >\n {subtitle}\n </p>\n )}\n </div>\n\n <LocaleSelector key=\"localeSelector\" className=\"m-1 md:m-2\" />\n </div>\n\n <main className=\"w-full p-6 md:max-w-3xl md:px-12\">{children}</main>\n </div>\n )\n}\n","export function upsert<T>(\n arr: readonly T[],\n item: T,\n predicate: (value: T, index: number, obj: readonly T[]) => boolean,\n): T[] {\n const idx = arr.findIndex(predicate)\n return idx === -1\n ? [...arr, item]\n : [...arr.slice(0, idx), item, ...arr.slice(idx + 1)]\n}\n\nexport type Simplify<T> = { [K in keyof T]: T[K] } & NonNullable<unknown>\nexport type Override<T, U> = Simplify<Omit<T, keyof U> & U>\n","export const parseCookieString = (\n cookie: string,\n): Record<string, string | undefined> =>\n Object.fromEntries(\n cookie\n .split(';')\n .filter(Boolean)\n .map((str) => str.split('=', 2).map((s) => decodeURIComponent(s.trim()))),\n )\n\nexport const cookies = parseCookieString(document.cookie)\n","import { cookies } from '../cookies.ts'\n\nexport function useCsrfToken(cookieName: string) {\n return cookies[cookieName]\n}\n","import { useLingui } from '@lingui/react/macro'\nimport { useCallback, useMemo, useState } from 'react'\nimport { useErrorBoundary } from 'react-error-boundary'\nimport type {\n Account,\n ConfirmResetPasswordData,\n InitiatePasswordResetData,\n Session,\n SignInData,\n SignUpData,\n VerifyHandleAvailabilityData,\n} from '@atproto/oauth-provider-api'\nimport { AcceptData, Api, UnknownRequestUriError } from '../lib/api.ts'\nimport { upsert } from '../lib/util.ts'\nimport { useCsrfToken } from './use-csrf-token.ts'\n\n/**\n * Any function wrapped with this helper will automatically show the error\n * boundary when an `UnknownRequestUriError` is thrown. This typically happens\n * in development, or if the user left its browser session open for a (very)\n * long time.\n *\n * @note Requires an error boundary to be present in the component tree.\n */\nfunction useSafeCallback<F extends (...a: any) => any>(fn: F, deps: unknown[]) {\n const { showBoundary } = useErrorBoundary<UnknownRequestUriError>()\n\n return useCallback(\n async (...args: Parameters<F>): Promise<Awaited<ReturnType<F>>> => {\n try {\n return await fn(...args)\n } catch (error) {\n if (error instanceof UnknownRequestUriError) showBoundary(error)\n throw error\n }\n },\n deps.concat(showBoundary),\n )\n}\n\nexport type UseApiOptions = {\n requestUri: string\n sessions?: readonly Session[]\n newSessionsRequireConsent?: boolean\n onRedirected?: () => void\n}\n\nexport function useApi({\n requestUri,\n sessions: sessionsInit = [],\n newSessionsRequireConsent = true,\n onRedirected,\n}: UseApiOptions) {\n const csrfToken = useCsrfToken(`csrf-${requestUri}`)\n if (!csrfToken) throw new Error('CSRF token is missing')\n\n const api = useMemo(() => new Api(csrfToken), [csrfToken])\n const [sessions, setSessions] = useState(sessionsInit)\n\n const { i18n } = useLingui()\n const { locale } = i18n\n\n const selectSub = useCallback(\n (sub: string | null) => {\n setSessions((sessions) =>\n sub === (sessions.find((s) => s.selected)?.account.sub || null)\n ? sessions\n : sessions.map((s) => ({ ...s, selected: s.account.sub === sub })),\n )\n },\n [setSessions],\n )\n\n const upsertSession = useCallback(\n ({\n account,\n consentRequired,\n }: {\n account: Account\n consentRequired: boolean\n }) => {\n const session: Session = {\n account,\n selected: true,\n loginRequired: false,\n consentRequired: newSessionsRequireConsent || consentRequired,\n }\n\n setSessions((sessions) =>\n upsert(sessions, session, (s) => s.account.sub === account.sub).map(\n // Make sure to de-select any other selected session\n (s) => (s === session || !s.selected ? s : { ...s, selected: false }),\n ),\n )\n },\n [setSessions, newSessionsRequireConsent],\n )\n\n const performRedirect = useCallback(\n (url: URL) => {\n window.location.href = String(url)\n if (onRedirected) setTimeout(onRedirected)\n },\n [onRedirected],\n )\n\n const doSignIn = useSafeCallback(\n async (data: Omit<SignInData, 'locale'>, signal?: AbortSignal) => {\n const response = await api.fetch(\n '/sign-in',\n { ...data, locale },\n { signal },\n )\n upsertSession(response)\n },\n [api, locale, upsertSession],\n )\n\n const doInitiatePasswordReset = useSafeCallback(\n async (\n data: Omit<InitiatePasswordResetData, 'locale'>,\n signal?: AbortSignal,\n ) => {\n await api.fetch(\n '/reset-password-request',\n { ...data, locale },\n { signal },\n )\n },\n [api, locale],\n )\n\n const doConfirmResetPassword = useSafeCallback(\n async (data: ConfirmResetPasswordData, signal?: AbortSignal) => {\n await api.fetch('/reset-password-confirm', data, { signal })\n },\n [api],\n )\n\n const doValidateNewHandle = useSafeCallback(\n async (data: VerifyHandleAvailabilityData, signal?: AbortSignal) => {\n await api.fetch('/verify-handle-availability', data, { signal })\n },\n [api],\n )\n\n const doSignUp = useSafeCallback(\n async (data: Omit<SignUpData, 'locale'>, signal?: AbortSignal) => {\n const response = await api.fetch(\n '/sign-up',\n { ...data, locale },\n { signal },\n )\n upsertSession(response)\n },\n [api, locale, upsertSession],\n )\n\n const doAccept = useSafeCallback(\n async (data: AcceptData) => {\n performRedirect(api.buildAcceptUrl(data))\n },\n [api, performRedirect],\n )\n\n const doReject = useSafeCallback(async () => {\n performRedirect(api.buildRejectUrl())\n }, [api, performRedirect])\n\n return {\n sessions,\n selectSub,\n\n doSignIn,\n doInitiatePasswordReset,\n doConfirmResetPassword,\n doValidateNewHandle,\n doSignUp,\n doAccept,\n doReject,\n }\n}\n","import { Dispatch, useCallback } from 'react'\n\nexport function useBoundDispatch<A>(dispatch: Dispatch<A>, value: A) {\n return useCallback(() => dispatch(value), [dispatch, value])\n}\n","import { JSX } from 'react'\nimport { clsx } from '../../lib/clsx.ts'\nimport { Override } from '../../lib/util.ts'\n\nexport type ButtonProps = Override<\n JSX.IntrinsicElements['button'],\n {\n color?: 'brand' | 'grey'\n loading?: boolean\n transparent?: boolean\n square?: boolean\n }\n>\n\nexport function Button({\n color = 'grey',\n transparent = false,\n loading = undefined,\n square = false,\n\n // button\n children,\n className,\n type = 'button',\n role = 'Button',\n disabled = false,\n ...props\n}: ButtonProps) {\n return (\n <button\n role={role}\n type={type}\n disabled={disabled || loading === true}\n {...props}\n className={clsx(\n 'rounded-lg truncate cursor-pointer touch-manipulation tracking-wide overflow-hidden',\n square ? 'p-2' : 'py-2 px-6',\n color === 'brand'\n ? clsx(\n 'accent-slate-100',\n transparent\n ? 'bg-transparent text-brand'\n : 'bg-brand text-brand-c',\n )\n : color === 'grey'\n ? clsx(\n 'accent-brand',\n 'text-slate-600 dark:text-slate-300',\n 'hover:bg-gray-200 dark:hover:bg-gray-700',\n transparent ? 'bg-transparent' : 'bg-gray-100 dark:bg-gray-800',\n )\n : undefined,\n 'disabled:opacity-50',\n className,\n )}\n >\n {children}\n </button>\n )\n}\n","import { JSX, ReactNode } from 'react'\nimport { Override } from '../../lib/util.ts'\n\nexport type FormCardProps = Override<\n JSX.IntrinsicElements['form'],\n {\n disabled?: boolean\n append?: ReactNode\n prepend?: ReactNode\n cancel?: ReactNode\n actions?: ReactNode\n }\n>\n\nexport function FormCard({\n actions,\n cancel,\n append,\n children,\n prepend,\n disabled,\n\n // form\n inert = disabled,\n ...props\n}: FormCardProps) {\n return (\n <form {...props} inert={inert} className=\"flex flex-col space-y-4\">\n {prepend && <div key=\"prepend\">{prepend}</div>}\n\n <div key=\"children\" className=\"space-y-4\">\n {children}\n </div>\n\n {append && <div key=\"append\">{append}</div>}\n\n {(actions || cancel) && (\n <div\n key=\"buttons\"\n className=\"flex flex-wrap flex-row-reverse items-center justify-end space-x-reverse space-x-2\"\n >\n {actions}\n <div className=\"flex-auto\" />\n {cancel}\n </div>\n )}\n </form>\n )\n}\n","import { JSX } from 'react'\nimport type { Account } from '@atproto/oauth-provider-api'\nimport { Override } from '../../lib/util.ts'\n\nexport type AccountIdentifierProps = Override<\n Omit<JSX.IntrinsicElements['b'], 'children'>,\n {\n account: Account\n }\n>\n\nexport function AccountIdentifier({\n account,\n\n // b\n ...props\n}: AccountIdentifierProps) {\n return (\n <b {...props}>\n {account.preferred_username || account.email || account.sub}\n </b>\n )\n}\n","import { JSX, useMemo } from 'react'\nimport { Override } from '../../lib/util.ts'\n\nexport type UrlPartRenderingOptions = {\n faded?: boolean\n bold?: boolean\n}\n\nexport type UrlRendererProps = {\n url: string | URL\n proto?: boolean | UrlPartRenderingOptions\n host?: boolean | UrlPartRenderingOptions\n path?: boolean | UrlPartRenderingOptions\n query?: boolean | UrlPartRenderingOptions\n hash?: boolean | UrlPartRenderingOptions\n as?: string\n}\n\nexport function UrlViewer<As extends keyof JSX.IntrinsicElements = 'span'>({\n url,\n proto = false,\n host = true,\n path = false,\n query = false,\n hash = false,\n as: As = 'span',\n\n // Element\n ...props\n}: Override<JSX.IntrinsicElements[As], UrlRendererProps>) {\n const urlObj = useMemo(() => new URL(url), [url])\n\n return (\n <As {...props}>\n {proto && (\n <UrlPartViewer\n value={`${urlObj.protocol}//`}\n {...(proto === true ? null : proto)}\n />\n )}\n {host && (\n <UrlPartViewer\n value={urlObj.host}\n {...(host === true ? { faded: false, bold: true } : host)}\n />\n )}\n {path && (\n <UrlPartViewer\n value={urlObj.pathname}\n {...(path === true ? null : path)}\n />\n )}\n {query && (\n <UrlPartViewer\n value={urlObj.search}\n {...(query === true ? null : query)}\n />\n )}\n {hash && (\n <UrlPartViewer value={urlObj.hash} {...(hash === true ? null : hash)} />\n )}\n </As>\n )\n}\n\nfunction UrlPartViewer({\n value,\n faded = true,\n bold = false,\n}: { value: string } & UrlPartRenderingOptions) {\n const Comp = bold ? 'b' : 'span'\n return <Comp className={faded ? 'opacity-50' : ''}>{value}</Comp>\n}\n","import { Trans } from '@lingui/react/macro'\nimport { JSX } from 'react'\nimport type { OAuthClientMetadata } from '@atproto/oauth-types'\nimport { Override } from '../../lib/util.ts'\nimport { UrlViewer } from './url-viewer.tsx'\n\nexport type ClientNameProps = Override<\n Omit<JSX.IntrinsicElements['span'], 'children'>,\n {\n clientId: string\n clientMetadata: OAuthClientMetadata\n clientTrusted: boolean\n }\n>\n\nexport function ClientName({\n clientId,\n clientMetadata,\n clientTrusted,\n\n // span\n ...attrs\n}: ClientNameProps) {\n if (clientTrusted && clientMetadata.client_name) {\n return <span {...attrs}>{clientMetadata.client_name}</span>\n }\n\n // @NOTE: not using isOAuthClientIdLoopback & isOAuthClientIdDiscoverable from\n // @atproto/oauth-types here because 1) we don't need to validate here and 2)\n // we prefer not to import un-necessary code to improve bundle size.\n\n if (clientId.startsWith('http://')) {\n return (\n <span {...attrs}>\n <Trans>An application on your device</Trans>\n </span>\n )\n }\n\n if (clientId.startsWith('https://')) {\n return <UrlViewer {...attrs} url={clientId} path />\n }\n\n return <span {...attrs}>{clientId}</span>\n}\n","import { Trans, useLingui } from '@lingui/react/macro'\nimport type { Account, ScopeDetail } from '@atproto/oauth-provider-api'\nimport type { OAuthClientMetadata } from '@atproto/oauth-types'\nimport { Button } from '../../../components/forms/button.tsx'\nimport {\n FormCard,\n FormCardProps,\n} from '../../../components/forms/form-card.tsx'\nimport { AccountIdentifier } from '../../../components/utils/account-identifier.tsx'\nimport { ClientName } from '../../../components/utils/client-name.tsx'\nimport { Override } from '../../../lib/util.ts'\n\nexport type AcceptFormProps = Override<\n Omit<FormCardProps, 'onSubmit' | 'cancel' | 'actions' | 'children'>,\n {\n clientId: string\n clientMetadata: OAuthClientMetadata\n clientTrusted: boolean\n\n account: Account\n scopeDetails?: ScopeDetail[]\n\n onAccept: () => void\n onReject: () => void\n onBack?: () => void\n }\n>\n\nexport function AcceptForm({\n clientId,\n clientMetadata,\n clientTrusted,\n\n account,\n scopeDetails,\n\n onAccept,\n onReject,\n onBack,\n\n // FormCardProps\n ...props\n}: AcceptFormProps) {\n const { t } = useLingui()\n return (\n <FormCard\n {...props}\n onSubmit={(event) => {\n event.preventDefault()\n onAccept()\n }}\n cancel={onBack && <Button onClick={onBack}>Back</Button>}\n actions={\n <>\n <Button type=\"submit\" color=\"brand\">\n <Trans>Authorize</Trans>\n </Button>\n\n <Button onClick={onReject}>\n <Trans>Deny access</Trans>\n </Button>\n </>\n }\n >\n {clientTrusted && clientMetadata.logo_uri && (\n <div key=\"logo\" className=\"flex items-center justify-center\">\n <img\n crossOrigin=\"anonymous\"\n src={clientMetadata.logo_uri}\n alt={clientMetadata.client_name}\n className=\"w-16 h-16 rounded-full\"\n />\n </div>\n )}\n <p>\n <Trans>\n <ClientName\n clientId={clientId}\n clientMetadata={clientMetadata}\n clientTrusted={clientTrusted}\n />{' '}\n is asking for permission to access your account (\n <AccountIdentifier account={account} />\n ).\n </Trans>\n </p>\n\n <p>\n <Trans>\n By clicking{' '}\n <b>\n <Trans>Authorize</Trans>\n </b>\n , you allow this application to perform the following actions in\n accordance with their{' '}\n <a\n role=\"link\"\n href={clientMetadata.tos_uri}\n rel=\"nofollow noopener\"\n target=\"_blank\"\n className=\"text-brand underline\"\n >\n <Trans>terms of service</Trans>\n </a>\n {' and '}\n <a\n role=\"link\"\n href={clientMetadata.policy_uri}\n rel=\"nofollow noopener\"\n target=\"_blank\"\n className=\"text-brand underline\"\n >\n <Trans>privacy policy</Trans>\n </a>\n :\n </Trans>\n </p>\n\n {scopeDetails?.length ? (\n <ul\n className=\"list-disc list-inside\"\n key=\"scopes\"\n aria-label={t`Requested permissions`}\n >\n {scopeDetails.map(({ scope, description }) => (\n <li key={scope}>\n {description || <ScopeDescription scope={scope} />}\n </li>\n ))}\n </ul>\n ) : null}\n </FormCard>\n )\n}\n\ntype ScopeDescriptionProps = {\n scope: string\n}\nfunction ScopeDescription({ scope }: ScopeDescriptionProps) {\n switch (scope) {\n case 'atproto':\n return <Trans>Uniquely identify you</Trans>\n case 'transition:generic':\n return <Trans>Access your account data (except chat messages)</Trans>\n case 'transition:chat.bsky':\n return <Trans>Access your chat messages</Trans>\n default:\n return scope\n }\n}\n","import { Trans, useLingui } from '@lingui/react/macro'\nimport type { Account, ScopeDetail } from '@atproto/oauth-provider-api'\nimport type { OAuthClientMetadata } from '@atproto/oauth-types'\nimport {\n LayoutTitlePage,\n LayoutTitlePageProps,\n} from '../../../components/layouts/layout-title-page.tsx'\nimport { Override } from '../../../lib/util.ts'\nimport { AcceptForm } from './accept-form.tsx'\n\nexport type AcceptViewProps = Override<\n LayoutTitlePageProps,\n {\n clientId: string\n clientMetadata: OAuthClientMetadata\n clientTrusted: boolean\n\n account: Account\n scopeDetails?: ScopeDetail[]\n\n onAccept: () => void\n onReject: () => void\n onBack?: () => void\n }\n>\n\nexport function AcceptView({\n clientId,\n clientMetadata,\n clientTrusted,\n account,\n scopeDetails,\n onAccept,\n onReject,\n onBack,\n\n // LayoutTitlePage\n title,\n subtitle = (\n <Trans>\n Grant access to your{' '}\n <b className=\"text-slate-800 dark:text-slate-200\">\n {account.preferred_username || account.email || account.sub}\n </b>{' '}\n account\n </Trans>\n ),\n ...props\n}: AcceptViewProps) {\n const { t } = useLingui()\n\n return (\n <LayoutTitlePage\n {...props}\n title={title ?? t`Authorize`}\n subtitle={subtitle}\n >\n <AcceptForm\n clientId={clientId}\n clientMetadata={clientMetadata}\n clientTrusted={clientTrusted}\n account={account}\n scopeDetails={scopeDetails}\n onBack={onBack}\n onAccept={onAccept}\n onReject={onReject}\n />\n </LayoutTitlePage>\n )\n}\n","import { JSX, ReactNode, createContext, useMemo } from 'react'\nimport { useRandomString } from '../../hooks/use-random-string.ts'\nimport { Override } from '../../lib/util.ts'\n\nexport type FieldsetContextValue = {\n disabled: boolean\n labelId?: string\n}\n\nexport const FieldsetContext = createContext<FieldsetContextValue>({\n disabled: false,\n})\nFieldsetContext.displayName = 'FieldsetContext'\n\nexport type FieldsetCardProps = Override<\n Omit<JSX.IntrinsicElements['fieldset'], 'aria-labelledby'>,\n {\n label?: ReactNode\n }\n>\n\nexport function Fieldset({\n label,\n children,\n disabled,\n ...props\n}: FieldsetCardProps) {\n const labelId = useRandomString({ prefix: 'fieldset-' })\n\n const contextValue = useMemo(\n () => ({\n disabled: disabled ?? false,\n labelId: label ? labelId : undefined,\n }),\n [disabled, label, labelId],\n )\n\n return (\n <fieldset {...props} aria-labelledby={labelId} disabled={disabled}>\n {label && (\n <legend\n id={labelId}\n key=\"title\"\n className=\"mb-1 text-slate-600 dark:text-slate-400 text-sm font-medium\"\n >\n {label}\n </legend>\n )}\n\n <div className=\"flex flex-col space-y-4\">\n <FieldsetContext value={contextValue}>{children}</FieldsetContext>\n </div>\n </fieldset>\n )\n}\n","import {\n ForwardedRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from 'react'\n\nexport type AsyncActionController = {\n reset: () => void\n}\n\nexport type UseAsyncActionOptions = {\n ref?: ForwardedRef<AsyncActionController>\n onLoading?: (loading: boolean) => void\n onError?: (error: Error | undefined) => void\n}\n\nexport function useAsyncAction(\n fn: (signal: AbortSignal) => void | PromiseLike<void>,\n { ref, onLoading, onError }: UseAsyncActionOptions = {},\n) {\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<Error | undefined>()\n\n const doSetError = useCallback(\n (error: Error | undefined) => {\n setError(error)\n onError?.(error)\n },\n [onError],\n )\n\n const doSetLoading = useCallback(\n (loading: boolean) => {\n setLoading(loading)\n onLoading?.(loading)\n },\n [onLoading],\n )\n\n const controllerRef = useRef<AbortController>(null)\n\n const resetRef = useRef<() => void>(null)\n useEffect(() => {\n resetRef.current = () => {\n controllerRef.current?.abort()\n controllerRef.current = null\n doSetError(undefined)\n doSetLoading(false)\n }\n return () => {\n resetRef.current = null\n }\n }, [doSetError, doSetLoading])\n\n useImperativeHandle(\n ref,\n (): AsyncActionController => ({\n reset: () => resetRef.current?.(),\n }),\n [],\n )\n\n // Cancel pending action when unmounted\n useEffect(() => {\n return () => {\n controllerRef.current?.abort()\n controllerRef.current = null\n }\n }, [])\n\n const run = useCallback(async (): Promise<void> => {\n // Cancel previous run\n controllerRef.current?.abort()\n\n doSetLoading(true)\n doSetError(undefined)\n\n const controller = new AbortController()\n const { signal } = controller\n\n controllerRef.current = controller\n\n try {\n await fn(signal)\n } catch (err) {\n if (controller === controllerRef.current) {\n doSetError(err instanceof Error ? err : new Error(String(err)))\n } else {\n if (!isAbortReason(signal, err)) {\n console.warn('Async action error after abort', err)\n }\n }\n } finally {\n if (controller === controllerRef.current) {\n controllerRef.current = null\n doSetLoading(false)\n }\n\n controller.abort()\n }\n }, [fn, doSetLoading, doSetError])\n\n return {\n loading,\n error,\n run,\n }\n}\n\nfunction isAbortReason(signal: AbortSignal, err: unknown): boolean {\n return (\n signal.aborted &&\n (signal.reason === err ||\n signal.reason === err?.['cause'] ||\n (err instanceof DOMException && err.name === 'AbortError'))\n )\n}\n","import { Trans } from '@lingui/react/macro'\nimport { FormEvent, ReactNode, useCallback } from 'react'\nimport {\n UseAsyncActionOptions,\n useAsyncAction,\n} from '../../hooks/use-async-action.ts'\nimport { Override } from '../../lib/util.ts'\nimport { ErrorCard } from '../utils/error-card.tsx'\nimport { Button } from './button.tsx'\nimport { FormCard, FormCardProps } from './form-card.tsx'\n\nexport type { AsyncActionController } from '../../hooks/use-async-action.ts'\n\nexport type ErrorRender = (data: { error: Error }) => ReactNode\nexport const errorRenderDefault: ErrorRender = ({ error }) => (\n <ErrorCard error={error} />\n)\n\nexport type FormCardAsyncProps = Override<\n Override<\n Omit<FormCardProps, 'cancel' | 'actions' | 'prepend'>,\n Pick<UseAsyncActionOptions, 'ref' | 'onLoading' | 'onError'>\n >,\n {\n invalid?: boolean\n disabled?: boolean\n\n onSubmit: (signal: AbortSignal) => void | PromiseLike<void>\n submitLabel?: ReactNode\n\n onCancel?: () => void\n cancelLabel?: ReactNode\n\n errorRender?: ErrorRender\n }\n>\n\nexport function FormCardAsync({\n invalid,\n disabled,\n\n onSubmit,\n submitLabel,\n\n onCancel = undefined,\n cancelLabel,\n\n errorRender = errorRenderDefault,\n\n // UseAsyncActionOptions\n ref,\n onLoading,\n onError,\n\n // FormCardProps\n children,\n ...props\n}: FormCardAsyncProps) {\n const { run, loading, error } = useAsyncAction(onSubmit, {\n ref,\n onError,\n onLoading,\n })\n\n const doSubmit = useCallback(\n (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault()\n\n if (!event.currentTarget.reportValidity()) return\n\n if (!disabled && !invalid) void run()\n },\n [disabled, invalid, run],\n )\n\n return (\n <FormCard\n {...props}\n onSubmit={doSubmit}\n disabled={disabled || loading}\n prepend={error != null ? errorRender({ error }) : undefined}\n cancel={\n onCancel && (\n <Button onClick={onCancel}>\n {cancelLabel || <Trans>Cancel</Trans>}\n </Button>\n )\n }\n actions={\n <Button\n color=\"brand\"\n type=\"submit\"\n loading={loading}\n disabled={disabled}\n >\n {submitLabel || <Trans>Submit</Trans>}\n </Button>\n }\n >\n {children}\n </FormCard>\n )\n}\n","export const MIN_PASSWORD_LENGTH = 8\n\nconst EMOJI =\n /(\\ud83c[\\ud000-\\udfff]|\\ud83d[\\ud000-\\udfff]|\\ud83e[\\ud000-\\udfff])/\nconst UPPER = /[A-Z]/\nconst LOWER = /[a-z]/\nconst DEC = /[0-9]/\nconst SPECIAL = /[^a-zA-Z0-9]/\n\nexport enum PasswordStrength {\n weak = 1,\n moderate = 2,\n strong = 3,\n extra = 4,\n}\n\nexport function getPasswordStrength(pwd: string): PasswordStrength {\n if (pwd.length < MIN_PASSWORD_LENGTH) {\n return PasswordStrength.weak\n }\n\n // Very long passwords\n if (pwd.length >= MIN_PASSWORD_LENGTH + 12) {\n return PasswordStrength.extra\n }\n\n // Long passwords\n if (pwd.length >= MIN_PASSWORD_LENGTH + 8) {\n if (matches(pwd, [SPECIAL])) {\n return PasswordStrength.extra\n }\n if (matches(pwd, [UPPER, LOWER, DEC], 2)) {\n return PasswordStrength.extra\n }\n return PasswordStrength.strong\n }\n\n // Emojis make passwords strong\n if (pwd.length >= MIN_PASSWORD_LENGTH) {\n if (matches(pwd, [EMOJI])) {\n return PasswordStrength.strong\n }\n }\n\n // Pretty long passwords\n if (pwd.length >= MIN_PASSWORD_LENGTH + 6) {\n if (matches(pwd, [SPECIAL])) {\n return PasswordStrength.strong\n }\n if (matches(pwd, [UPPER, LOWER, DEC], 2)) {\n return PasswordStrength.strong\n }\n // Only 1 type of alpha-num characters\n return PasswordStrength.moderate\n }\n\n // Longish password\n if (pwd.length >= MIN_PASSWORD_LENGTH + 4) {\n if (matches(pwd, [SPECIAL])) {\n return PasswordStrength.moderate\n }\n if (matches(pwd, [UPPER, LOWER, DEC], 2)) {\n return PasswordStrength.moderate\n }\n\n // Only 1 type of alpha-num characters\n return PasswordStrength.weak\n }\n\n // Short password (8-11 characters)\n if (pwd.length >= MIN_PASSWORD_LENGTH) {\n if (matches(pwd, [SPECIAL])) {\n return PasswordStrength.moderate\n }\n if (matches(pwd, [UPPER, LOWER, DEC])) {\n return PasswordStrength.moderate\n }\n }\n\n return PasswordStrength.weak\n}\n\nfunction matches(\n pwd: string,\n regexps: RegExp[],\n regexpsCountToMatch: number = regexps.length,\n): boolean {\n if (regexpsCountToMatch < 1 || regexpsCountToMatch > regexps.length) {\n throw new TypeError('Invalid regexpsCountToMatch')\n }\n for (const regexp of regexps) {\n if (regexp.test(pwd)) {\n regexpsCountToMatch--\n if (regexpsCountToMatch === 0) return true\n }\n }\n return false\n}\n","import { Trans, useLingui } from '@lingui/react/macro'\nimport { JSX } from 'react'\nimport { PasswordStrength, getPasswordStrength } from '../../lib/password.ts'\nimport { Override } from '../../lib/util.ts'\n\nexport type PasswordStrengthLabelProps = Override<\n Omit<JSX.IntrinsicElements['span'], 'children' | 'aria-label'>,\n {\n password: string\n }\n>\n\nexport function PasswordStrengthLabel({\n password,\n\n // span\n ...props\n}: PasswordStrengthLabelProps) {\n const { t } = useLingui()\n const strength = getPasswordStrength(password)\n\n return (\n <span {...props} aria-label={t`Password strength`}>\n {strength === PasswordStrength.extra ? (\n <Trans>Extra</Trans>\n ) : strength === PasswordStrength.strong ? (\n <Trans>Strong</Trans>\n ) : strength === PasswordStrength.moderate ? (\n <Trans>Moderate</Trans>\n ) : password ? (\n <Trans>Weak</Trans>\n ) : (\n <Trans>Missing</Trans>\n )}\n </span>\n )\n}\n","import { useLingui } from '@lingui/react/macro'\nimport { JSX } from 'react'\nimport { clsx } from '../../lib/clsx.ts'\nimport { PasswordStrength, getPasswordStrength } from '../../lib/password.ts'\nimport { Override } from '../../lib/util.ts'\n\nexport type PasswordStrengthMeterProps = Override<\n Omit<\n JSX.IntrinsicElements['div'],\n | 'children'\n | 'role'\n | 'aria-label'\n | 'aria-valuemin'\n | 'aria-valuemax'\n | 'aria-valuenow'\n >,\n {\n password: string\n }\n>\n\nexport function PasswordStrengthMeter({\n password,\n\n // div\n className,\n ...props\n}: PasswordStrengthMeterProps) {\n const { t } = useLingui()\n const strength = password ? getPasswordStrength(password) : 0\n\n const colorBg = 'bg-gray-300 dark:bg-slate-500'\n const color =\n strength === PasswordStrength.extra || strength === PasswordStrength.strong\n ? 'bg-success'\n : strength === PasswordStrength.moderate\n ? 'bg-warning'\n : 'bg-error'\n\n return (\n <div\n {...props}\n className={clsx('w-full h-1 flex space-x-2', className)}\n role=\"meter\"\n aria-label={t`Password strength indicator`}\n aria-valuemin={0}\n aria-valuemax={PasswordStrength.extra}\n aria-valuenow={strength}\n >\n {Array.from({ length: 4 }, (_, i) => (\n <div\n key={i}\n className={`rounded h-1 w-1/4 ${strength > i ? color : colorBg}`}\n />\n ))}\n </div>\n )\n}\n","import { ForwardedRef } from 'react'\n\nexport function updateRef<T>(ref: ForwardedRef<T>, value: T | null) {\n if (typeof ref === 'function') {\n ref(value)\n } else if (ref) {\n ref.current = value\n }\n}\n\nexport function mergeRefs<T>(refs: readonly (ForwardedRef<T> | undefined)[]) {\n return (value: T | null) => {\n for (const ref of refs) {\n if (ref) updateRef(ref, value)\n }\n }\n}\n","import { useLingui } from '@lingui/react/macro'\nimport { Override } from '../../lib/util.ts'\nimport { EyeIcon, EyeSlashIcon } from '../utils/icons.tsx'\nimport { Button, ButtonProps } from './button.tsx'\n\nexport type ButtonToggleVisibilityProps = Override<\n Omit<ButtonProps, 'aria-label' | 'square'>,\n {\n visible: boolean\n toggleVisible: () => void\n }\n>\n\n/**\n * Generic button to toggle visibility of an item (e.g. password).\n */\nexport function ButtonToggleVisibility({\n visible,\n toggleVisible,\n\n // button\n onClick,\n ...props\n}: ButtonToggleVisibilityProps) {\n const { t } = useLingui()\n return (\n <Button\n {...props}\n square\n onClick={(event) => {\n onClick?.(event)\n if (!event.defaultPrevented) toggleVisible()\n }}\n aria-label={visible ? t`Hide` : t`Make visible`}\n >\n {visible ? (\n <EyeIcon className=\"w-5\" aria-hidden />\n ) : (\n <EyeSlashIcon className=\"w-5\" aria-hidden />\n )}\n </Button>\n )\n}\n","import { JSX, ReactNode, useState } from 'react'\nimport { clsx } from '../../lib/clsx.ts'\nimport { Override } from '../../lib/util.ts'\n\nexport type InputContainerProps = Override<\n JSX.IntrinsicElements['div'],\n {\n icon: ReactNode\n append?: ReactNode\n bellow?: ReactNode\n }\n>\n\nexport function InputContainer({\n icon,\n append,\n bellow,\n\n // div\n className,\n children,\n onFocus,\n onBlur,\n ...props\n}: InputContainerProps) {\n const [hasFocus, setHasFocus] = useState(false)\n\n return (\n <div\n {...props}\n onFocus={(event) => {\n onFocus?.(event)\n if (!event.defaultPrevented) setHasFocus(true)\n }}\n onBlur={(event) => {\n onBlur?.(event)\n if (!event.defaultPrevented) setHasFocus(false)\n }}\n className={clsx(\n // Layout\n 'min-h-12',\n 'max-w-full',\n 'overflow-hidden',\n // Border\n 'rounded-lg',\n className,\n )}\n >\n <div\n className={clsx(\n // Layout\n 'px-1',\n 'w-full min-h-12',\n 'flex items-center justify-stretch',\n // Border\n 'rounded-lg',\n bellow ? 'rounded-br-none rounded-bl-none' : undefined,\n 'outline-none',\n 'border-solid border-2 border-transparent',\n 'focus:border-brand has-[:focus]:border-brand',\n 'hover:border-gray-400 hover:focus:border-gray-400',\n 'dark:hover:border-gray-500 dark:hover:focus:border-gray-500',\n // Background\n 'bg-gray-100 focus:bg-slate-200 has-[:focus]:bg-slate-200',\n 'dark:bg-slate-800 dark:focus:bg-slate-700 dark:has-[:focus]:bg-slate-700',\n // Font\n 'text-slate-600 dark:text-slate-300',\n 'accent-brand',\n )}\n >\n {icon && (\n <div\n className={clsx(\n 'shrink-0 grow-0',\n 'mx-1',\n hasFocus ? 'text-brand' : 'text-slate-500',\n )}\n >\n {icon}\n </div>\n )}\n\n {children}\n\n <div className=\"ml-1 grow-0 shrink-0 flex items-center\">{append}</div>\n </div>\n {bellow && (\n <div\n className={clsx(\n // Layout\n 'px-3 py-2 space-x-2',\n 'flex flex-row items-center gap-1',\n // Border\n 'rounded-br-2 rounded-bl-2',\n // Background\n 'bg-gray-200 dark:bg-slate-700',\n // Font\n 'text-gray-700 dark:text-gray-300',\n 'text-sm italic',\n )}\n >\n {bellow}\n </div>\n )}\n </div>\n )\n}\n","import { JSX, ReactNode, useContext, useRef } from 'react'\nimport { clsx } from '../../lib/clsx.ts'\nimport { mergeRefs } from '../../lib/ref.ts'\nimport { Override } from '../../lib/util.ts'\nimport { FieldsetContext } from './fieldset.tsx'\nimport { InputContainer } from './input-container.tsx'\n\nexport type InputTextProps = Override<\n Omit<JSX.IntrinsicElements['input'], 'children'>,\n {\n icon?: ReactNode\n append?: ReactNode\n bellow?: ReactNode\n className?: string\n }\n>\n\nexport function InputText({\n icon,\n append,\n bellow,\n className,\n\n // input\n onFocus,\n onBlur,\n ref,\n disabled,\n title,\n 'aria-label': ariaLabel = title,\n 'aria-labelledby': ariaLabelledBy,\n placeholder = ariaLabel,\n ...props\n}: InputTextProps) {\n const ctx = useContext(FieldsetContext)\n\n const inputRef = useRef<HTMLInputElement>(null)\n const focusedRef = useRef(false) // ref instead of state to avoid re-renders\n\n return (\n <InputContainer\n icon={icon}\n append={append}\n bellow={bellow}\n className={clsx('cursor-text', className)}\n tabIndex={-1}\n onClick={(event) => {\n if (inputRef.current !== event.target) {\n event.preventDefault()\n event.stopPropagation()\n inputRef.current?.focus()\n }\n }}\n onMouseDown={(event) => {\n if (focusedRef.current && event.target !== inputRef.current) {\n // Prevent \"blur\" event from firing when clicking outside the input\n event.preventDefault()\n event.stopPropagation()\n }\n }}\n >\n <input\n {...props}\n disabled={disabled ?? ctx.disabled}\n title={title}\n placeholder={placeholder}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy ?? ctx.labelId}\n ref={mergeRefs([ref, inputRef])}\n className=\"w-full bg-transparent bg-clip-padding text-base text-inherit outline-none dark:placeholder-gray-500 text-ellipsis\"\n onFocus={(event) => {\n onFocus?.(event)\n if (!event.defaultPrevented) focusedRef.current = true\n }}\n onBlur={(event) => {\n onBlur?.(event)\n if (!event.defaultPrevented) focusedRef.current = false\n }}\n />\n </InputContainer>\n )\n}\n","import { useLingui } from '@lingui/react/macro'\nimport { ChangeEvent, useCallback, useRef, useState } from 'react'\nimport { mergeRefs } from '../../lib/ref.ts'\nimport { Override } from '../../lib/util.ts'\nimport { LockIcon } from '../utils/icons.tsx'\nimport { ButtonToggleVisibility } from './button-toggle-visibility.tsx'\nimport { InputText, InputTextProps } from './input-text.tsx'\n\nexport type InputPasswordProps = Override<\n Omit<InputTextProps, 'type' | 'children'>,\n {\n autoHide?: boolean\n }\n>\n\nexport function InputPassword({\n autoHide = true,\n\n // InputTextProps\n onBlur,\n onChange,\n append,\n autoComplete = 'current-password',\n icon = <LockIcon className=\"w-5\" />,\n value,\n defaultValue = value,\n ref,\n title,\n dir = 'auto',\n autoCapitalize = 'none',\n autoCorrect = 'off',\n spellCheck = 'false',\n ...props\n}: InputPasswordProps) {\n const { t } = useLingui()\n const inputRef = useRef<HTMLInputElement>(null)\n const [visible, setVisible] = useState<boolean>(false)\n const [password, setPassword] = useState<string>(\n typeof defaultValue === 'string' ? defaultValue : '',\n )\n\n const doChange = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n onChange?.(event)\n setPassword(event.target.value)\n },\n [onChange],\n )\n\n return (\n <InputText\n {...props}\n title={title ?? t`Password`}\n ref={mergeRefs([ref, inputRef])}\n dir={dir}\n autoCapitalize={autoCapitalize}\n autoCorrect={autoCorrect}\n spellCheck={spellCheck}\n icon={icon}\n onBlur={\n autoHide\n ? (event) => {\n onBlur?.(event)\n if (!event.defaultPrevented) setVisible(false)\n }\n : onBlur\n }\n value={password}\n onChange={doChange}\n type={visible ? 'text' : 'password'}\n autoComplete={autoComplete}\n append={\n <>\n <ButtonToggleVisibility\n className=\"m-1\"\n visible={visible}\n toggleVisible={() => {\n setVisible((prev) => !prev)\n inputRef.current?.focus()\n }}\n />\n {append}\n </>\n }\n />\n )\n}\n","import { useLingui } from '@lingui/react/macro'\nimport { ChangeEvent, useCallback, useState } from 'react'\nimport { MIN_PASSWORD_LENGTH } from '../../lib/password.ts'\nimport { Override } from '../../lib/util.ts'\nimport { PasswordStrengthLabel } from '../utils/password-strength-label.tsx'\nimport { PasswordStrengthMeter } from '../utils/password-strength-meter.tsx'\nimport { InputPassword, InputPasswordProps } from './input-password.tsx'\n\nexport type InputNewPasswordProps = Override<\n Omit<InputPasswordProps, 'value' | 'defaultValue'>,\n {\n password?: string\n onPassword?: (password: undefined | string) => void\n }\n>\n\nexport function InputNewPassword({\n password: passwordInit = '',\n onPassword,\n\n // InputPasswordProps\n onChange,\n autoComplete = 'new-password',\n minLength = MIN_PASSWORD_LENGTH,\n ...props\n}: InputNewPasswordProps) {\n const { t } = useLingui()\n const [password, setPassword] = useState<string>(passwordInit)\n\n const doChange = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n const { value } = event.target\n onChange?.(event)\n if (event.defaultPrevented) return\n setPassword(value)\n onPassword?.(event.target.validity.valid ? value : undefined)\n },\n [onChange, onPassword],\n )\n\n return (\n <InputPassword\n {...props}\n placeholder={t`Enter a password`}\n aria-label={t`Enter your new password`}\n title={t`Password with at least ${MIN_PASSWORD_LENGTH} characters`}\n minLength={minLength}\n onChange={doChange}\n value={password}\n autoComplete={autoComplete}\n bellow={\n <>\n <PasswordStrengthMeter password={password} />\n <PasswordStrengthLabel\n className=\"grow-1 min-w-max text-xs text-gray-500 dark:text-gray-400\"\n password={password}\n />\n </>\n }\n />\n )\n}\n","import { useLingui } from '@lingui/react/macro'\nimport { ChangeEvent, useState } from 'react'\nimport { Override } from '../../lib/util.ts'\nimport { TokenIcon } from '../utils/icons.tsx'\nimport { InputText, InputTextProps } from './input-text.tsx'\n\nexport type InputTokenProps = Override<\n Omit<\n InputTextProps,\n | 'type'\n | 'pattern'\n | 'autoCapitalize'\n | 'autoCorrect'\n | 'autoComplete'\n | 'spellCheck'\n | 'minLength'\n | 'maxLength'\n | 'placeholder'\n | 'dir'\n >,\n {\n example?: string\n onToken?: (code: string | null) => void\n }\n>\n\nexport const OTP_CODE_EXAMPLE = 'XXXXX-XXXXX'\n\nexport function InputToken({\n example = OTP_CODE_EXAMPLE,\n onToken,\n\n // InputTextProps\n icon = <TokenIcon className=\"w-5\" />,\n title = example,\n onChange,\n value,\n defaultValue = value,\n ...props\n}: InputTokenProps) {\n const { t } = useLingui()\n const [token, setToken] = useState<string>(\n typeof defaultValue === 'string' ? defaultValue : '',\n )\n\n return (\n <InputText\n {...props}\n type=\"text\"\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n autoComplete=\"off\"\n spellCheck=\"false\"\n minLength={11}\n maxLength={11}\n dir=\"auto\"\n icon={icon}\n pattern=\"^[A-Z2-7]{5}-[A-Z2-7]{5}$\"\n placeholder={t`Looks like ${example}`}\n title={title}\n value={token}\n onChange={(event: ChangeEvent<HTMLInputElement>) => {\n const { value, selectionEnd, selectionStart } = event.currentTarget\n\n const fixedValue = fix(value)\n\n event.currentTarget.value = fixedValue\n\n // Move the cursor back where it was relative to the original value\n const pos = selectionEnd ?? selectionStart\n if (pos != null) {\n const fixedSlicedValue = fix(value.slice(0, pos))\n event.currentTarget.selectionStart =\n event.currentTarget.selectionEnd = fixedSlicedValue.length\n }\n\n setToken(fixedValue)\n onChange?.(event)\n\n if (!event.isDefaultPrevented()) {\n onToken?.(fixedValue.length === 11 ? fixedValue : null)\n }\n }}\n />\n )\n}\n\nfunction fix(value: string) {\n const normalized = value.toUpperCase().replaceAll(/[^A-Z2-7]/g, '')\n\n if (normalized.length <= 5) return normalized\n\n return `${normalized.slice(0, 5)}-${normalized.slice(5, 10)}`\n}\n","import { Trans } from '@lingui/react/macro'\nimport { useRef, useState } from 'react'\nimport { Fieldset } from '../../../components/forms/fieldset.tsx'\nimport {\n FormCardAsync,\n FormCardAsyncProps,\n} from '../../../components/forms/form-card-async.tsx'\nimport { InputNewPassword } from '../../../components/forms/input-new-password.tsx'\nimport { InputToken } from '../../../components/forms/input-token.tsx'\nimport { Admonition } from '../../../components/utils/admonition.tsx'\nimport { useRandomString } from '../../../hooks/use-random-string.ts'\nimport { Override } from '../../../lib/util.ts'\n\nexport type ResetPasswordConfirmFormProps = Override<\n FormCardAsyncProps,\n {\n onSubmit: (\n data: {\n token: string\n password: string\n },\n signal: AbortSignal,\n ) => void | PromiseLike<void>\n\n tokenPattern?: string\n tokenFormat?: string\n tokenParseValue?: (value: string) => string | false\n }\n>\n\nexport function ResetPasswordConfirmForm({\n onSubmit,\n\n // FormCardAsyncProps\n invalid,\n ...props\n}: ResetPasswordConfirmFormProps) {\n const tokenAriaId = useRandomString({ prefix: 'reset-pwd-email-' })\n const passwordRef = useRef<HTMLInputElement>(null)\n\n const [token, setToken] = useState<string | null>(null)\n const [password, setPassword] = useState<string | undefined>(undefined)\n\n return (\n <FormCardAsync\n {...props}\n onSubmit={(signal) => {\n if (token && password) return onSubmit({ token, password }, signal)\n }}\n invalid={invalid || !token || !password}\n >\n <Admonition role=\"info\">\n <p id={tokenAriaId} className=\"text-md\">\n <Trans>\n You will receive an email with a \"reset code\". Enter that code here\n then enter your new password.\n </Trans>\n </p>\n </Admonition>\n\n <Fieldset label={<Trans>Reset code</Trans>}>\n <InputToken\n name=\"code\"\n aria-labelledby={tokenAriaId}\n enterKeyHint=\"next\"\n required\n autoFocus={true}\n onToken={(token) => {\n setToken(token)\n // Auto-focus next field when token is complete\n if (token) passwordRef.current?.focus()\n }}\n />\n </Fieldset>\n\n <Fieldset label={<Trans>New password</Trans>}>\n <InputNewPassword\n ref={passwordRef}\n name=\"password\"\n enterKeyHint=\"done\"\n required\n password={password}\n onPassword={setPassword}\n />\n </Fieldset>\n </FormCardAsync>\n )\n}\n","import { useLingui } from '@lingui/react/macro'\nimport { ChangeEvent, useCallback, useState } from 'react'\nimport { Override } from '../../lib/util.ts'\nimport { AtSymbolIcon } from '../utils/icons.tsx'\nimport { InputText, InputTextProps } from './input-text.tsx'\n\nexport type InputEmailAddressProps = Override<\n Omit<InputTextProps, 'type'>,\n {\n onEmail?: (email: string | undefined) => void\n }\n>\n\nexport function InputEmailAddress({\n onEmail,\n\n // InputTextProps\n autoCapitalize = 'none',\n autoComplete = 'email',\n autoCorrect = 'off',\n dir = 'auto',\n icon = <AtSymbolIcon className=\"w-5\" />,\n onBlur,\n onChange,\n pattern = '^[^@]+@[^@]+\\\\.[^@]+$',\n spellCheck = 'false',\n value,\n defaultValue = value,\n title,\n ...props\n}: InputEmailAddressProps) {\n const { t } = useLingui()\n const [email, setEmail] = useState<string>(\n typeof defaultValue === 'string' ? defaultValue : '',\n )\n\n const doChange = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n const email = event.target.value.toLowerCase()\n\n setEmail(email)\n onChange?.(event)\n onEmail?.(event.target.validity.valid ? email : undefined)\n },\n [onChange, onEmail],\n )\n\n return (\n <InputText\n {...props}\n title={title ?? t`Email address`}\n type=\"email\"\n autoCapitalize={autoCapitalize}\n autoCorrect={autoCorrect}\n dir={dir}\n spellCheck={spellCheck}\n icon={icon}\n pattern={pattern}\n autoComplete={autoComplete}\n value={email}\n onChange={doChange}\n onBlur={onBlur}\n />\n )\n}\n","import { Trans, useLingui } from '@lingui/react/macro'\nimport { useCallback, useRef, useState } from 'react'\nimport { Fieldset } from '../../../components/forms/fieldset.tsx'\nimport {\n AsyncActionController,\n FormCardAsync,\n FormCardAsyncProps,\n} from '../../../components/forms/form-card-async.tsx'\nimport { InputEmailAddress } from '../../../components/forms/input-email-address.tsx'\nimport { Admonition } from '../../../components/utils/admonition.tsx'\nimport { useRandomString } from '../../../hooks/use-random-string.ts'\nimport { mergeRefs } from '../../../lib/ref.ts'\nimport { Override } from '../../../lib/util.ts'\n\nexport type ResetPasswordRequestFormProps = Override<\n Omit<FormCardAsyncProps, 'children'>,\n {\n emailDefault?: string\n onSubmit: (\n data: { email: string },\n signal: AbortSignal,\n ) => void | PromiseLike<void>\n }\n>\n\nexport function ResetPasswordRequestForm({\n emailDefault,\n onSubmit,\n\n // FormCardAsyncProps\n invalid,\n ref,\n ...props\n}: ResetPasswordRequestFormProps) {\n const { t } = useLingui()\n const emailAriaId = useRandomString({ prefix: 'reset-pwd-email-' })\n const [email, setEmail] = useState(emailDefault)\n\n const ctrlRef = useRef<AsyncActionController>(null)\n\n const doSubmit = useCallback(\n (signal: AbortSignal) => {\n if (email) return onSubmit({ email }, signal)\n },\n [email, onSubmit],\n )\n\n return (\n <FormCardAsync\n {...props}\n ref={mergeRefs([ref, ctrlRef])}\n invalid={invalid || !email}\n onSubmit={doSubmit}\n >\n <Fieldset label={<Trans>Email address</Trans>}>\n <InputEmailAddress\n name=\"email\"\n placeholder={t`Enter your email address`}\n aria-labelledby={emailAriaId}\n title={t`Email address`}\n required\n autoFocus={true}\n value={email}\n onEmail={(email) => {\n ctrlRef.current?.reset()\n setEmail(email)\n }}\n />\n <Admonition role=\"info\">\n <p id={emailAriaId} className=\"\">\n <Trans>\n Enter the email you used to create your account. We'll send you a\n \"reset code\" so you can set a new password.\n </Trans>\n </p>\n </Admonition>\n </Fieldset>\n </FormCardAsync>\n )\n}\n","import { Trans, useLingui } from '@lingui/react/macro'\nimport { useState } from 'react'\nimport { Button } from '../../../components/forms/button.tsx'\nimport {\n LayoutTitlePage,\n LayoutTitlePageProps,\n} from '../../../components/layouts/layout-title-page.tsx'\nimport { Override } from '../../../lib/util.ts'\nimport { ResetPasswordConfirmForm } from './reset-password-confirm-form.tsx'\nimport { ResetPasswordRequestForm } from './reset-password-request-form.tsx'\n\nexport type ResetPasswordViewProps = Override<\n LayoutTitlePageProps,\n {\n emailDefault?: string\n onresetPasswordRequest: (\n data: { email: string },\n signal: AbortSignal,\n ) => void | PromiseLike<void>\n onResetPasswordConfirm: (\n data: {\n token: string\n password: string\n },\n signal: AbortSignal,\n ) => void | PromiseLike<void>\n onBack: () => void\n }\n>\n\nenum View {\n RequestReset,\n ConfirmReset,\n PasswordUpdated,\n}\n\nexport function ResetPasswordView({\n emailDefault,\n onresetPasswordRequest,\n onResetPasswordConfirm,\n onBack,\n\n // LayoutTitlePage\n ...props\n}: ResetPasswordViewProps) {\n const { t } = useLingui()\n const [view, setView] = useState<View>(View.RequestReset)\n\n if (view === View.RequestReset) {\n return (\n <LayoutTitlePage\n {...props}\n title={props.title || t`Forgot Password`}\n subtitle={\n props.subtitle || <Trans>Let's get your password reset!</Trans>\n }\n >\n <ResetPasswordRequestForm\n emailDefault={emailDefault}\n submitLabel={<Trans>Next</Trans>}\n onSubmit={async (data, signal) => {\n await onresetPasswordRequest(data, signal)\n if (!signal.aborted) setView(View.ConfirmReset)\n }}\n cancelLabel={<Trans>Back</Trans>}\n onCancel={onBack}\n />\n <hr className=\"my-5 border-gray-300 dark:border-gray-700\" />\n <center>\n <Button transparent onClick={() => setView(View.ConfirmReset)}>\n <Trans>Already have a code?</Trans>\n </Button>\n </center>\n </LayoutTitlePage>\n )\n }\n\n if (view === View.ConfirmReset) {\n return (\n <LayoutTitlePage\n {...props}\n title={props.title || t`Reset Password`}\n subtitle={\n props.subtitle || (\n <Trans>Enter the code you received to reset your password.</Trans>\n )\n }\n >\n <ResetPasswordConfirmForm\n submitLabel={<Trans>Next</Trans>}\n onSubmit={async (data, signal) => {\n await onResetPasswordConfirm(data, signal)\n if (!signal.aborted) setView(View.PasswordUpdated)\n }}\n cancelLabel={<Trans>Back</Trans>}\n onCancel={onBack}\n />\n </LayoutTitlePage>\n )\n }\n\n if (view === View.PasswordUpdated) {\n return (\n <LayoutTitlePage\n {...props}\n title={props.title || t`Password Updated`}\n subtitle={\n props.subtitle || <Trans>Your password has been updated!</Trans>\n }\n >\n <center>\n <h2 className=\"text-xl font-bold pb-2\">\n <Trans>Password updated!</Trans>\n </h2>\n <p className=\"pb-4\">\n <Trans>You can now sign in with your new password.</Trans>\n </p>\n <Button color=\"brand\" onClick={onBack}>\n <Trans>Okay</Trans>\n </Button>\n </center>\n </LayoutTitlePage>\n )\n }\n\n throw new Error(`Invalid view: ${view}`)\n}\n","import { JSX, ReactNode, useContext, useRef } from 'react'\nimport { useRandomString } from '../../hooks/use-random-string.ts'\nimport { clsx } from '../../lib/clsx.ts'\nimport { mergeRefs } from '../../lib/ref.ts'\nimport { Override } from '../../lib/util.ts'\nimport { FieldsetContext } from './fieldset.tsx'\nimport { InputContainer } from './input-container.tsx'\n\nexport type InputCheckboxProps = Override<\n Omit<JSX.IntrinsicElements['input'], 'className' | 'type' | 'children'>,\n {\n className?: string\n children?: ReactNode\n }\n>\n\nexport function InputCheckbox({\n className,\n children,\n\n // input\n id,\n ref,\n disabled,\n title,\n 'aria-label': ariaLabel = title,\n 'aria-labelledby': ariaLabelledBy,\n ...props\n}: InputCheckboxProps) {\n const htmlFor = useRandomString('input-checkbox-')\n const labelRef = useRef<HTMLLabelElement>(null)\n const inputRef = useRef<HTMLInputElement>(null)\n const ctx = useContext(FieldsetContext)\n\n const inputId = id ?? htmlFor\n\n return (\n <InputContainer\n className={clsx('cursor-pointer', className)}\n icon={\n <input\n {...props}\n disabled={disabled ?? ctx.disabled}\n title={title}\n aria-label={ariaLabel}\n aria-labelledby={\n children\n ? // Prefer the local \"<label>\" element (through \"htmlFor\") over the wrapping \"<fieldset>\" to describe the checkbox.\n undefined\n : ariaLabelledBy ?? ctx.labelId\n }\n ref={mergeRefs([ref, inputRef])}\n id={inputId}\n className=\"accent-brand outline-none\"\n type=\"checkbox\"\n />\n }\n tabIndex={-1}\n onClick={({ target }) => {\n // Native behavior of clicking the label should toggle the checkbox.\n if (target === labelRef.current) return\n if (target === inputRef.current) return\n\n inputRef.current?.click()\n }}\n >\n {children && (\n <label\n ref={labelRef}\n htmlFor={inputId}\n className=\"block w-full leading-[1.6] select-none cursor-pointer\"\n >\n {children}\n </label>\n )}\n </InputContainer>\n )\n}\n","import { Trans, useLingui } from '@lingui/react/macro'\nimport { useCallback, useRef, useState } from 'react'\nimport { Button } from '../../../components/forms/button.tsx'\nimport { Fieldset } from '../../../components/forms/fieldset.tsx'\nimport {\n FormCardAsync,\n FormCardAsyncProps,\n} from '../../../components/forms/form-card-async.tsx'\nimport { InputCheckbox } from '../../../components/forms/input-checkbox.tsx'\nimport { InputPassword } from '../../../components/forms/input-password.tsx'\nimport { InputText } from '../../../components/forms/input-text.tsx'\nimport { InputToken } from '../../../components/forms/input-token.tsx'\nimport { Admonition } from '../../../components/utils/admonition.tsx'\nimport { AtSymbolIcon } from '../../../components/utils/icons.tsx'\nimport { AsyncActionController } from '../../../hooks/use-async-action.ts'\nimport {\n InvalidCredentialsError,\n SecondAuthenticationFactorRequiredError,\n} from '../../../lib/api.ts'\nimport { mergeRefs } from '../../../lib/ref.ts'\nimport { Override } from '../../../lib/util.ts'\n\nexport type SignInFormOutput = {\n username: string\n password: string\n remember?: boolean\n}\n\nexport type SignInFormProps = Override<\n Omit<FormCardAsyncProps, 'append' | 'onCancel'>,\n {\n usernameDefault?: string\n usernameReadonly?: boolean\n rememberDefault?: boolean\n\n onBack?: () => void\n onForgotPassword?: (emailHint?: string) => void\n onSubmit: (\n credentials: SignInFormOutput,\n signal: AbortSignal,\n ) => void | PromiseLike<void>\n }\n>\n\nexport function SignInForm({\n usernameDefault = '',\n usernameReadonly = false,\n rememberDefault = false,\n\n onSubmit,\n onBack,\n onForgotPassword,\n\n // FormCardAsync\n ref,\n invalid,\n children,\n ...props\n}: SignInFormProps) {\n const { t } = useLingui()\n\n const [username, setUsername] = useState<string>(usernameDefault)\n const [password, setPassword] = useState<string>('')\n const [remember, setRemember] = useState<boolean>(rememberDefault)\n const [otp, setOtp] = useState<string | null>(null)\n\n const [secondFactor, setSecondFactor] =\n useState<null | SecondAuthenticationFactorRequiredError>(null)\n\n const [loading, setLoading] = useState(false)\n\n const formRef = useRef<AsyncActionController>(null)\n\n const clearSecondFactor = useCallback(() => {\n setOtp(null)\n setSecondFactor(null)\n }, [setOtp, setSecondFactor])\n\n const resetState = useCallback(() => {\n clearSecondFactor()\n formRef.current?.reset()\n }, [clearSecondFactor, formRef])\n\n const doSubmit = useCallback(\n async (signal: AbortSignal) => {\n try {\n await onSubmit(\n {\n username,\n password,\n remember,\n ...(secondFactor ? { [secondFactor.type]: otp } : {}),\n },\n signal,\n )\n } catch (err) {\n if (signal.aborted) {\n // If the action was aborted, ignore the error\n return\n }\n\n if (err instanceof SecondAuthenticationFactorRequiredError) {\n setSecondFactor(err)\n\n // Do not re-throw 2FA required error to prevent the form from from\n // displaying it. Instead, we handle the error by showing the second\n // factor form.\n return\n }\n\n if (err instanceof InvalidCredentialsError) {\n // If the username/password are not valid, clear the second factor\n // as valid credentials are a pre-requisite for 2FA.\n clearSecondFactor()\n }\n\n // Any thrown err will be displayed through the form's errorRender\n throw err\n }\n },\n [username, password, remember, secondFactor, otp, onSubmit],\n )\n\n return (\n <FormCardAsync\n {...props}\n ref={mergeRefs([ref, formRef])}\n onLoading={setLoading}\n onCancel={onBack}\n cancelLabel={t`Back`}\n append={children}\n invalid={\n invalid || !username || !password || (secondFactor != null && !otp)\n }\n submitLabel={secondFactor ? t`Confirm` : t`Sign in`}\n onSubmit={doSubmit}\n >\n <Fieldset disabled={loading} label={<Trans>Account</Trans>}>\n <InputText\n icon={<AtSymbolIcon className=\"w-5\" />}\n name=\"username\"\n type=\"text\"\n title={t`Username or email address`}\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n autoComplete=\"username\"\n spellCheck=\"false\"\n dir=\"auto\"\n enterKeyHint=\"next\"\n required\n readOnly={usernameReadonly}\n disabled={usernameReadonly}\n autoFocus\n value={username}\n onChange={(event) => {\n resetState()\n setUsername(event.target.value)\n }}\n />\n </Fieldset>\n\n <InputPassword\n name=\"password\"\n onChange={(event) => {\n resetState()\n setPassword(event.target.value)\n }}\n append={\n onForgotPassword && (\n <Button\n className=\"text-sm\"\n type=\"button\"\n onClick={() => {\n onForgotPassword(username?.includes('@') ? username : undefined)\n }}\n aria-label={t`Reset your password`}\n >\n <Trans>Forgot?</Trans>\n </Button>\n )\n }\n enterKeyHint={secondFactor ? 'next' : 'done'}\n disabled={loading}\n required\n />\n\n <Admonition role=\"status\">\n <p className=\"font-bold text-md text-brand pb-1\">\n <Trans>Warning</Trans>\n </p>\n <p className=\"text-sm\">\n <Trans>\n Please verify the domain name of the website before entering your\n password. Never enter your password on a domain you do not trust.\n </Trans>\n </p>\n </Admonition>\n\n <Fieldset\n key=\"remember\"\n disabled={loading}\n label={<Trans>Session</Trans>}\n >\n <InputCheckbox\n name=\"remember\"\n title={t`Remember this account on this device`}\n enterKeyHint={secondFactor ? 'next' : 'done'}\n checked={remember}\n onChange={(event) => setRemember(event.target.checked)}\n >\n <Trans>Remember this account on this device</Trans>\n </InputCheckbox>\n </Fieldset>\n\n {secondFactor && (\n <Fieldset\n key=\"2fa\"\n disabled={loading}\n label={<Trans>2FA Confirmation</Trans>}\n >\n <div>\n <InputToken\n title={t`Confirmation code`}\n enterKeyHint=\"done\"\n required\n autoFocus={true}\n value={otp ?? ''}\n onToken={setOtp}\n />\n\n <p className=\"text-slate-600 dark:text-slate-400 text-sm\">\n <Trans>\n Check your {secondFactor.hint} email for a login code and enter\n it here.\n </Trans>\n </p>\n </div>\n </Fieldset>\n )}\n </FormCardAsync>\n )\n}\n","import { useEffect, useState } from 'react'\nimport { AccountIcon } from './icons.tsx'\n\nexport type AccountIconProps = {\n src?: string\n alt: string\n}\n\nexport function AccountImage({ src, alt }: AccountIconProps) {\n const [errored, setErrored] = useState(false)\n\n useEffect(() => {\n setErrored(false)\n }, [src])\n\n return src && !errored ? (\n <img\n aria-hidden\n crossOrigin=\"anonymous\"\n src={src}\n alt={alt}\n className=\"-ml-1 w-6 h-6 rounded-full\"\n onError={() => setErrored(true)}\n />\n ) : (\n <div\n aria-hidden\n className=\"h-6 w-6 text-white bg-brand rounded-full border-solid border-2 border-brand overflow-hidden\"\n >\n <AccountIcon className=\"-mx-1 -mb-1\" />\n </div>\n )\n}\n","import { Trans, useLingui } from '@lingui/react/macro'\nimport type { Account } from '@atproto/oauth-provider-api'\nimport { Button } from '../../../components/forms/button.tsx'\nimport {\n FormCard,\n FormCardProps,\n} from '../../../components/forms/form-card.tsx'\nimport { InputContainer } from '../../../components/forms/input-container.tsx'\nimport { AccountImage } from '../../../components/utils/account-image.tsx'\nimport {\n AtSymbolIcon,\n CaretRightIcon,\n} from '../../../components/utils/icons.tsx'\nimport { Override } from '../../../lib/util.ts'\n\nexport type SignInPickerProps = Override<\n Omit<FormCardProps, 'cancel' | 'actions' | 'append'>,\n {\n accounts: readonly Account[]\n\n onAccount: (account: Account) => void\n onOther?: () => void\n onBack?: () => void\n }\n>\n\nexport function SignInPicker({\n accounts,\n\n onAccount,\n onOther = undefined,\n onBack,\n\n // FormCard\n children,\n ...props\n}: SignInPickerProps) {\n const { t } = useLingui()\n return (\n <FormCard\n {...props}\n append={children}\n actions={null}\n cancel={\n onBack && (\n <Button onClick={onBack}>\n <Trans>Back</Trans>\n </Button>\n )\n }\n >\n <p className=\"text-slate-600 dark:text-slate-400 text-sm font-medium\">\n <Trans>Sign in as...</Trans>\n </p>\n\n {accounts.map((account) => {\n const [name, identifier] = [\n account.name,\n account.preferred_username,\n account.email,\n account.sub,\n ].filter(Boolean) as [string, string?]\n\n return (\n <InputContainer\n tabIndex={0}\n key={account.sub}\n onKeyDown={(event) => {\n if (event.key === 'Enter' || event.key === ' ') {\n onAccount(account)\n }\n }}\n onClick={() => onAccount(account)}\n role=\"button\"\n aria-label={t`Sign in as ${account.name}`}\n icon={<AccountImage src={account.picture} alt={name} />}\n append={<CaretRightIcon aria-hidden className=\"h-4\" />}\n >\n <span className=\"flex flex-wrap items-center\">\n <span className=\"font-medium truncate mr-2\" arial-label={t`Name`}>\n {name}\n </span>\n {identifier && (\n <span\n className=\"text-sm text-neutral-500 dark:text-neutral-400 truncate\"\n arial-label={t`Identifier`}\n >\n {identifier}\n </span>\n )}\n </span>\n </InputContainer>\n )\n })}\n\n {onOther && (\n <InputContainer\n key=\"other\"\n tabIndex={0}\n onKeyDown={(event) => {\n if (event.key === 'Enter' || event.key === ' ') onOther()\n }}\n onClick={onOther}\n aria-label={t`Login to account that is not listed`}\n role=\"button\"\n append={<CaretRightIcon aria-hidden className=\"h-4\" />}\n icon={<AtSymbolIcon aria-hidden className=\"h-4\" />}\n >\n <span className=\"truncate text-slate-700 dark:text-slate-400\">\n <Trans>Another account</Trans>\n </span>\n </InputContainer>\n )}\n </FormCard>\n )\n}\n","import { Trans, useLingui } from '@lingui/react/macro'\nimport { useCallback, useEffect, useMemo, useState } from 'react'\nimport type { Session } from '@atproto/oauth-provider-api'\nimport {\n LayoutTitlePage,\n LayoutTitlePageProps,\n} from '../../../components/layouts/layout-title-page.tsx'\nimport { Override } from '../../../lib/util.ts'\nimport { SignInForm, SignInFormOutput } from './sign-in-form.tsx'\nimport { SignInPicker } from './sign-in-picker.tsx'\n\nexport type SignInViewProps = Override<\n LayoutTitlePageProps,\n {\n sessions: readonly Session[]\n selectSub: (sub: string | null) => void\n loginHint?: string\n\n onSignIn: (\n credentials: SignInFormOutput,\n signal: AbortSignal,\n ) => void | PromiseLike<void>\n onForgotPassword?: (emailHint?: string) => void\n onBack?: () => void\n }\n>\n\nexport function SignInView({\n loginHint,\n sessions,\n selectSub,\n\n onSignIn,\n onForgotPassword,\n onBack,\n\n // LayoutTitlePage\n title,\n subtitle,\n ...props\n}: SignInViewProps) {\n const { t } = useLingui()\n const session = useMemo(() => sessions.find((s) => s.selected), [sessions])\n const clearSession = useCallback(() => selectSub(null), [selectSub])\n const accounts = useMemo(() => sessions.map((s) => s.account), [sessions])\n const [showSignInForm, setShowSignInForm] = useState(sessions.length === 0)\n\n title ??= t`Sign in`\n\n useEffect(() => {\n // Make sure the \"back\" action shows the account picker instead of the\n // sign-in form (since the account was added to the list of current\n // sessions).\n if (session) setShowSignInForm(false)\n }, [session])\n\n if (session) {\n // All set (parent view will handle the redirect)\n if (!session.loginRequired) return null\n\n return (\n <LayoutTitlePage\n {...props}\n title={title}\n subtitle={subtitle ?? <Trans>Confirm your password to continue</Trans>}\n >\n <SignInForm\n onSubmit={onSignIn}\n onForgotPassword={onForgotPassword}\n onBack={clearSession}\n usernameDefault={\n session.account.preferred_username || session.account.sub\n }\n usernameReadonly={true}\n rememberDefault={true}\n />\n </LayoutTitlePage>\n )\n }\n\n if (loginHint) {\n return (\n <LayoutTitlePage\n {...props}\n title={title}\n subtitle={subtitle ?? <Trans>Enter your password</Trans>}\n >\n <SignInForm\n onSubmit={onSignIn}\n onForgotPassword={onForgotPassword}\n onBack={onBack}\n usernameDefault={loginHint}\n usernameReadonly={true}\n />\n </LayoutTitlePage>\n )\n }\n\n if (sessions.length === 0) {\n return (\n <LayoutTitlePage\n {...props}\n title={title}\n subtitle={subtitle ?? <Trans>Enter your username and password</Trans>}\n >\n <SignInForm\n onSubmit={onSignIn}\n onForgotPassword={onForgotPassword}\n onBack={onBack}\n />\n </LayoutTitlePage>\n )\n }\n\n if (showSignInForm) {\n return (\n <LayoutTitlePage\n {...props}\n title={title}\n subtitle={subtitle ?? <Trans>Enter your username and password</Trans>}\n >\n <SignInForm\n onSubmit={onSignIn}\n onForgotPassword={onForgotPassword}\n onBack={() => setShowSignInForm(false)}\n />\n </LayoutTitlePage>\n )\n }\n\n return (\n <LayoutTitlePage\n {...props}\n title={title}\n subtitle={subtitle ?? <Trans>Select from an existing account</Trans>}\n >\n <SignInPicker\n accounts={accounts}\n onAccount={(a) => selectSub(a.sub)}\n onOther={() => setShowSignInForm(true)}\n onBack={onBack}\n />\n </LayoutTitlePage>\n )\n}\n","import { useCallback, useEffect, useState } from 'react'\n\nexport type DisabledStep = false | null | undefined\nexport type Step = {\n invalid: boolean\n}\n\nconst isEnabled = <S extends Step | DisabledStep>(\n s: S,\n): s is S extends DisabledStep ? never : S => s != null && s !== false\nconst isRequired = <S extends Step | DisabledStep>(\n s: S,\n): s is S extends DisabledStep ? never : S & { invalid: true } =>\n isEnabled(s) && s.invalid === true\nconst isCompleted = <S extends Step | DisabledStep>(\n s: S,\n): s is S extends DisabledStep ? S : S & { invalid: false } =>\n !isEnabled(s) || s.invalid === false\n\nexport function useStepper<const S extends Step>(\n steps: readonly (S | DisabledStep)[],\n) {\n const firstIdx = steps.findIndex(isEnabled)\n const lastIdx = steps.findLastIndex(isEnabled)\n const requiredIdx = steps.findIndex(isRequired)\n\n const [currentIdx, setCurrentIdx] = useState<number>(firstIdx)\n\n const to = useCallback(\n (idx: number) => {\n if (idx !== -1 && steps[idx]) {\n setCurrentIdx(idx)\n return true\n } else {\n return false\n }\n },\n [steps.map(isEnabled).join()],\n )\n\n const prevIdx = steps.findLastIndex((s, i) => isEnabled(s) && i < currentIdx)\n const nextIdx = steps.findIndex((s, i) => isEnabled(s) && i > currentIdx)\n\n const toFirst = useCallback(() => to(firstIdx), [to, firstIdx])\n const toLast = useCallback(() => to(lastIdx), [to, lastIdx])\n const toPrev = useCallback(() => to(prevIdx), [to, prevIdx])\n const toNext = useCallback(() => to(nextIdx), [to, nextIdx])\n const toRequired = useCallback(() => to(requiredIdx), [to, requiredIdx])\n\n // Step number in user friendly terms (accounting for disabled steps)\n const currentPosition =\n currentIdx +\n // use \"1 indexed position\" (for user friendliness):\n 1 +\n // Adjust the position by counting the number of disabled steps before the\n // current step (if any):\n steps.reduce(\n (acc, s, i) => (i >= currentIdx || isEnabled(s) ? acc : acc - 1),\n 0,\n )\n\n const count = steps.filter(isEnabled).length\n const completed = steps.every(isCompleted)\n\n const current =\n currentIdx === -1 || !steps[currentIdx] ? undefined : steps[currentIdx]\n\n // Fool-proof (reset current step in case the current step becomes disabled)\n const broken = currentIdx === -1\n useEffect(() => {\n if (broken) toFirst()\n }, [broken])\n\n return {\n current,\n currentPosition,\n count,\n completed,\n atFirst: currentPosition === 1,\n atLast: currentPosition === count,\n toFirst,\n toLast,\n toPrev,\n toNext,\n toRequired,\n }\n}\n","import { Trans } from '@lingui/react/macro'\nimport { JSX, ReactNode, useCallback } from 'react'\nimport { DisabledStep, Step, useStepper } from '../../hooks/use-stepper.ts'\nimport { clsx } from '../../lib/clsx.ts'\nimport { Override } from '../../lib/util.ts'\n\nexport type DoneFn = (...a: any) => unknown\n\nexport type WizardRenderProps<TDone extends DoneFn> = {\n /**\n * Indicates wether the render function being invoked corresponds to the step\n * currently active. The steps titles could, for example, be rendered in a\n * list of links, where the current step is highlighted (based on `current`).\n *\n * Another use for this is to render the next/previous steps in order to\n * provide animated transitions between steps. In this case, `current` would\n * be used to disable any form interaction with the form transitioning in/out.\n */\n current: boolean\n invalid: boolean\n\n prev?: () => void\n prevLabel: ReactNode\n\n // On the last step, the \"next()\" function will actually be the done function\n next: (() => void) | TDone\n nextLabel: ReactNode\n}\n\nexport type WizardRenderFn<TDone extends DoneFn> = (\n data: WizardRenderProps<TDone>,\n) => ReactNode\n\nexport type WizardStep<TDone extends DoneFn> = Step & {\n titleRender?: WizardRenderFn<TDone>\n contentRender: WizardRenderFn<TDone>\n}\n\nexport type WizardCardProps<TDone extends DoneFn> = Override<\n Omit<JSX.IntrinsicElements['div'], 'children'>,\n {\n prevLabel?: ReactNode\n nextLabel?: ReactNode\n\n onBack?: () => void\n backLabel?: ReactNode\n\n onDone: TDone\n doneLabel?: ReactNode\n\n steps: readonly (WizardStep<TDone> | DisabledStep)[]\n }\n>\n\nexport function WizardCard<TDone extends DoneFn>({\n prevLabel,\n nextLabel,\n\n onBack,\n backLabel,\n\n onDone,\n doneLabel,\n\n steps,\n className,\n\n ...props\n}: WizardCardProps<TDone>) {\n const {\n atFirst,\n atLast,\n count,\n current,\n currentPosition,\n completed,\n toNext,\n toPrev,\n toRequired,\n } = useStepper(steps)\n\n // Memoized to avoid re-renders in child (rendered) components\n const onNext = useCallback(() => {\n // If already at last step, go to the first incomplete (required) step\n if (!toNext()) toRequired()\n }, [toNext, toRequired])\n\n const data: WizardRenderProps<TDone> = {\n // The current UI only displays the current title & content.\n current: true,\n invalid: current ? current.invalid : false,\n\n prevLabel: (atFirst && backLabel) || prevLabel || <Trans>Back</Trans>,\n prev: atFirst ? onBack : toPrev,\n\n nextLabel: (atLast && doneLabel) || nextLabel || <Trans>Next</Trans>,\n next: atLast && completed ? onDone : onNext,\n }\n\n const stepTitle = current?.titleRender?.(data)\n const stepContent = current?.contentRender?.(data)\n\n return (\n <div className={clsx(className, 'flex flex-col')} {...props}>\n <p className=\"text-slate-500 dark:text-slate-400\">\n <Trans>\n Step {currentPosition} of {count}\n </Trans>\n </p>\n\n {stepTitle && <h2 className=\"font-medium text-xl mb-4\">{stepTitle}</h2>}\n\n {stepContent}\n </div>\n )\n}\n","import { Trans } from '@lingui/react/macro'\nimport { JSX } from 'react'\nimport type { LinkDefinition } from '@atproto/oauth-provider-api'\nimport { clsx } from '../../lib/clsx.ts'\nimport { Override } from '../../lib/util.ts'\n\nexport type HelpCardProps = Override<\n Omit<JSX.IntrinsicElements['p'], 'children'>,\n {\n links?: readonly LinkDefinition[]\n }\n>\n\nexport function HelpCard({\n links,\n\n className,\n ...props\n}: HelpCardProps) {\n const helpLink = links?.find((l) => l.rel === 'help')\n\n if (!helpLink) return null\n\n return (\n <p\n {...props}\n className={clsx(\n 'text-sm rounded-md bg-slate-100 text-slate-800 dark:bg-slate-800 dark:text-slate-400 p-3',\n className,\n )}\n >\n <Trans>\n Having trouble?{' '}\n <a\n role=\"link\"\n href={helpLink.href}\n rel={helpLink.rel}\n target=\"_blank\"\n className=\"text-brand\"\n >\n <Trans>Contact support</Trans>\n </a>\n </Trans>\n </p>\n )\n}\n","import { Trans, useLingui } from '@lingui/react/macro'\nimport { ReactNode, useEffect, useMemo, useRef, useState } from 'react'\nimport { Fieldset } from '../../../components/forms/fieldset.tsx'\nimport {\n AsyncActionController,\n FormCardAsync,\n FormCardAsyncProps,\n} from '../../../components/forms/form-card-async.tsx'\nimport { InputEmailAddress } from '../../../components/forms/input-email-address.tsx'\nimport { InputNewPassword } from '../../../components/forms/input-new-password.tsx'\nimport { InputText } from '../../../components/forms/input-text.tsx'\nimport { TokenIcon } from '../../../components/utils/icons.tsx'\nimport { mergeRefs } from '../../../lib/ref.ts'\nimport { Override } from '../../../lib/util.ts'\n\nexport type SignUpAccountFormOutput = {\n email: string\n password: string\n inviteCode?: string\n}\n\nexport type SignUpAccountFormProps = Override<\n Omit<\n FormCardAsyncProps,\n 'append' | 'onCancel' | 'onSubmit' | 'submitLabel' | 'cancelLabel'\n >,\n {\n inviteCodeRequired?: boolean\n\n credentials?: SignUpAccountFormOutput\n onCredentials?: (credentials?: SignUpAccountFormOutput) => void\n\n onNext: (signal: AbortSignal) => void | PromiseLike<void>\n nextLabel?: ReactNode\n\n onPrev?: () => void\n prevLabel?: ReactNode\n }\n>\n\nexport function SignUpAccountForm({\n inviteCodeRequired = true,\n\n credentials: creds,\n onCredentials,\n\n onNext,\n nextLabel,\n\n onPrev,\n prevLabel,\n\n // FormCardAsyncProps\n children,\n ref,\n invalid,\n ...props\n}: SignUpAccountFormProps) {\n const { t } = useLingui()\n\n const [email, setEmail] = useState(creds?.email)\n const [password, setPassword] = useState(creds?.password)\n const [inviteCode, setInviteCode] = useState(creds?.inviteCode)\n\n const formRef = useRef<AsyncActionController>(null)\n const resetForm = () => formRef.current?.reset()\n\n const credentials = useMemo(\n () =>\n email && password && (!inviteCodeRequired || inviteCode)\n ? {\n email,\n password,\n inviteCode: inviteCodeRequired ? inviteCode : undefined,\n }\n : undefined,\n [email, password, inviteCode, inviteCodeRequired],\n )\n\n useEffect(() => {\n onCredentials?.(credentials)\n }, [credentials, onCredentials])\n\n return (\n <FormCardAsync\n {...props}\n ref={mergeRefs([ref, formRef])}\n invalid={invalid || !credentials}\n onCancel={onPrev}\n cancelLabel={prevLabel}\n onSubmit={onNext}\n submitLabel={nextLabel}\n append={children}\n >\n {inviteCodeRequired && (\n <Fieldset label={<Trans>Invite code</Trans>}>\n <InputText\n icon={<TokenIcon className=\"w-5\" />}\n autoFocus\n name=\"inviteCode\"\n title={t`Invite code`}\n placeholder={t`example-com-xxxxx-xxxxx`}\n required\n value={inviteCode || ''}\n onChange={(event) => {\n setInviteCode(event.target.value || undefined)\n resetForm()\n }}\n enterKeyHint=\"next\"\n />\n </Fieldset>\n )}\n\n <Fieldset label={<Trans>Email</Trans>}>\n <InputEmailAddress\n autoFocus={!inviteCodeRequired}\n name=\"email\"\n enterKeyHint=\"next\"\n required\n defaultValue={email}\n onEmail={(email) => {\n setEmail(email)\n resetForm()\n }}\n />\n </Fieldset>\n\n <Fieldset label={<Trans>Password</Trans>}>\n <InputNewPassword\n name=\"password\"\n enterKeyHint=\"next\"\n required\n password={password}\n onPassword={(value) => {\n setPassword(value)\n resetForm()\n }}\n />\n </Fieldset>\n </FormCardAsync>\n )\n}\n","import { Trans } from '@lingui/react/macro'\nimport { JSX } from 'react'\nimport type { LinkDefinition } from '@atproto/oauth-provider-api'\nimport { LinkAnchor } from '../../../components/utils/link-anchor.tsx'\nimport { clsx } from '../../../lib/clsx.ts'\nimport { Override } from '../../../lib/util.ts'\n\nexport type SignUpDisclaimerProps = Override<\n Omit<JSX.IntrinsicElements['p'], 'children'>,\n {\n links?: readonly LinkDefinition[]\n }\n>\n\nexport function SignUpDisclaimer({\n links,\n\n // p\n className,\n ...attrs\n}: SignUpDisclaimerProps) {\n const tosLink = links?.find((l) => l.rel === 'terms-of-service')\n const ppLink = links?.find((l) => l.rel === 'privacy-policy')\n\n return (\n <p\n className={clsx('text-sm text-slate-500 dark:text-slate-400', className)}\n {...attrs}\n >\n <Trans>\n By creating an account you agree to the{' '}\n {tosLink ? (\n <LinkAnchor className=\"text-brand underline\" link={tosLink}>\n <Trans>Terms of Service</Trans>\n </LinkAnchor>\n ) : (\n <Trans>Terms of Service</Trans>\n )}\n {' and the '}\n {ppLink ? (\n <LinkAnchor className=\"text-brand underline\" link={ppLink}>\n <Trans>Privacy Policy</Trans>\n </LinkAnchor>\n ) : (\n <Trans>Privacy Policy</Trans>\n )}{' '}\n of this service.\n </Trans>\n </p>\n )\n}\n","import { Trans, useLingui } from '@lingui/react/macro'\nimport { JSX, ReactNode, useCallback, useEffect, useRef, useState } from 'react'\nimport {\n AsyncActionController,\n FormCardAsync,\n FormCardAsyncProps,\n} from '../../../components/forms/form-card-async.tsx'\nimport { InputText } from '../../../components/forms/input-text.tsx'\nimport { Admonition } from '../../../components/utils/admonition.tsx'\nimport {\n AtSymbolIcon,\n CheckMarkIcon,\n XMarkIcon,\n} from '../../../components/utils/icons.tsx'\nimport { clsx } from '../../../lib/clsx.ts'\nimport { mergeRefs } from '../../../lib/ref.ts'\nimport { Override } from '../../../lib/util.ts'\n\n/**\n * Spec limit is 63, but in practice, we've limited it to 18 in our implementations.\n *\n * @see {@link https://atproto.com/specs/handle | ATProto Handle Spec}\n */\nconst MAX_LENGTH = 18\n\n/**\n * Spec limit is 1, but in practice, we've targeted at least 3 characters in handles.\n *\n * @see {@link https://atproto.com/specs/handle | ATProto Handle Spec}\n */\nconst MIN_LENGTH = 3\n\n/**\n * Spec limit is 253, but in practice, we've targeted 30 characters in handles.\n *\n * @see {@link https://atproto.com/specs/handle | ATProto Handle Spec}\n */\nconst MAX_FULL_LENGTH = 30\n\ntype ValidDomain = `.${string}`\nconst isValidDomain = (domain: string): domain is ValidDomain =>\n // Ignore domains that are so long that they would make the handle smaller\n // than MIN_LENGTH characters\n MIN_LENGTH + domain.length <= MAX_FULL_LENGTH &&\n // Basic validation here\n domain.startsWith('.') &&\n !domain.endsWith('.')\n\nfunction useSegmentValidator(domain: ValidDomain) {\n const minLen = MIN_LENGTH\n const maxLen = Math.min(MAX_LENGTH, MAX_FULL_LENGTH - domain.length)\n\n const validateSegment = useCallback(\n (segment: string) => {\n const validLength = segment.length >= minLen && segment.length <= maxLen\n const validCharset = /^[a-z0-9][a-z0-9-]+[a-z0-9]$/g.test(segment)\n\n return { validLength, validCharset, valid: validLength && validCharset }\n },\n [maxLen, minLen],\n )\n\n return {\n minLength: minLen,\n maxLength: maxLen,\n validateSegment,\n }\n}\n\nexport type SignUpHandleFormProps = Override<\n Omit<\n FormCardAsyncProps,\n 'append' | 'onCancel' | 'cancelLabel' | 'onSubmit' | 'submitLabel'\n >,\n {\n domains: string[]\n\n onNext: (signal: AbortSignal) => void | PromiseLike<void>\n nextLabel?: ReactNode\n\n onPrev?: () => void\n prevLabel?: ReactNode\n\n handle?: string\n onHandle?: (handle: string | undefined) => void\n }\n>\n\nexport function SignUpHandleForm({\n domains: availableDomains,\n\n onNext,\n nextLabel,\n\n onPrev,\n prevLabel,\n\n handle: handleInit,\n onHandle,\n\n // FormCardProps\n invalid,\n children,\n ref,\n ...props\n}: SignUpHandleFormProps) {\n const { t } = useLingui()\n const domains = availableDomains.filter(isValidDomain)\n\n const formRef = useRef<AsyncActionController>(null)\n\n const [domainIdx, setDomainIdx] = useState(() => {\n const idx = domains.findIndex((d) => handleInit?.endsWith(d))\n return idx === -1 ? 0 : idx\n })\n const [segment, setSegment] = useState(() => handleInit?.split('.')[0] || '')\n\n // Automatically update the domain index when the list length changes\n useEffect(() => {\n setDomainIdx((v) => Math.min(v, domains.length - 1))\n }, [domains.length])\n\n const domain: ValidDomain | null = domains[domainIdx] || domains[0] || null\n\n const { minLength, maxLength, validateSegment } = useSegmentValidator(domain)\n\n const validity = validateSegment(segment)\n const handle = domain && validity.valid ? `${segment}${domain}` : undefined\n useEffect(() => {\n // Whenever the user changes the handle, abort any pending form action\n formRef.current?.reset()\n onHandle?.(handle)\n }, [onHandle, handle])\n\n const inputRef = useRef<HTMLInputElement>(null)\n\n const preview = `@${segment}${domain}`\n\n return (\n <FormCardAsync\n {...props}\n ref={mergeRefs([ref, formRef])}\n onCancel={onPrev}\n cancelLabel={prevLabel}\n onSubmit={onNext}\n submitLabel={nextLabel}\n invalid={invalid || !handle}\n append={children}\n >\n <div>\n <ValidationMessage hasValue={!!segment} valid={validity.validLength}>\n <Trans>\n Between {minLength} and {maxLength} characters\n </Trans>\n </ValidationMessage>\n <ValidationMessage hasValue={!!segment} valid={validity.validCharset}>\n <Trans>Only letters, numbers, and hyphens</Trans>\n </ValidationMessage>\n </div>\n\n <InputText\n ref={inputRef}\n icon={<AtSymbolIcon className=\"w-5\" />}\n name=\"handle\"\n type=\"text\"\n title={t`Type your desired username`}\n pattern=\"[a-z0-9][a-z0-9\\-]+[a-z0-9]\"\n minLength={minLength}\n maxLength={maxLength}\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n autoComplete=\"off\"\n dir=\"auto\"\n enterKeyHint=\"done\"\n autoFocus\n required\n value={segment}\n onChange={(event) => {\n const segment = event.target.value.toLowerCase()\n\n // Ensure the input is always lowercase\n const selectionStart = event.target.selectionStart\n const selectionEnd = event.target.selectionEnd\n event.target.value = segment\n event.target.setSelectionRange(selectionStart, selectionEnd)\n\n setSegment(segment)\n }}\n append={\n // @TODO refactor this to a separate component\n domains.length > 1 && (\n <select\n onClick={(event) => event.stopPropagation()}\n onMouseDown={(event) => event.stopPropagation()}\n value={domainIdx}\n aria-label={t`Select domain`}\n onChange={(event) => {\n setDomainIdx(Number(event.target.value))\n inputRef.current?.focus()\n }}\n className={clsx(\n 'block w-full',\n 'text-sm',\n 'rounded-lg p-2',\n 'bg-white dark:bg-slate-600',\n )}\n >\n {domains.map((domain, idx) => (\n <option key={domain} value={idx}>\n {domain}\n </option>\n ))}\n </select>\n )\n }\n bellow={\n <Trans>\n Your full username will be:{' '}\n {segment.length ? (\n <strong className=\"text-gray-800 dark:text-gray-200\">\n {preview}\n </strong>\n ) : (\n <span\n aria-hidden\n className=\"bg-gray-300 dark:bg-slate-600 rounded-md p-2 w-24\"\n />\n )}\n </Trans>\n }\n />\n\n <Admonition role=\"status\">\n <p className=\"text-md\">\n <Trans>\n You can change this username to any domain name you control after\n your account is set up.\n </Trans>\n </p>\n </Admonition>\n </FormCardAsync>\n )\n}\n\ntype ValidationMessageProps = JSX.IntrinsicElements['div'] & {\n valid: boolean\n hasValue: boolean\n}\n\nfunction ValidationMessage({\n valid,\n hasValue,\n\n // div\n children,\n className,\n ...props\n}: ValidationMessageProps) {\n const { t } = useLingui()\n return (\n <div\n {...props}\n className={clsx('flex flex-row items-center gap-2', className)}\n >\n {hasValue ? (\n <>\n {valid ? (\n <CheckMarkIcon\n className=\"inline-block w-4 h-4 text-success\"\n title={t`Valid`}\n />\n ) : (\n <XMarkIcon\n className=\"inline-block w-4 h-4 text-error\"\n title={t`Invalid`}\n />\n )}\n </>\n ) : (\n <div aria-hidden className=\"w-4 h-4 flex items-center justify-center\">\n <div className=\"bg-gray-300 dark:bg-slate-600 rounded-full w-2 h-2\" />\n </div>\n )}\n <div className=\"text-sm\">{children}</div>\n </div>\n )\n}\n","import { useEffect, useState } from 'react'\n\nconst query =\n typeof window === 'undefined'\n ? null\n : window.matchMedia('(prefers-color-scheme: dark)')\n\nexport function useBrowserColorScheme() {\n const [theme, setTheme] = useState<'light' | 'dark'>(\n query?.matches ? 'dark' : 'light',\n )\n\n useEffect(() => {\n if (!query) return\n\n const listener = () => {\n setTheme(query.matches ? 'dark' : 'light')\n }\n\n query.addEventListener('change', listener)\n\n return () => {\n query.removeEventListener('change', listener)\n }\n\n // @NOTE \"query\" is a global constant and does not need to be part of the\n // array bellow:\n }, [])\n\n return theme\n}\n","import type HCaptcha from '@hcaptcha/react-hcaptcha'\nimport {\n ForwardedRef,\n ReactNode,\n lazy,\n useCallback,\n useRef,\n useState,\n} from 'react'\nimport {\n FormCardAsync,\n FormCardAsyncProps,\n} from '../../../components/forms/form-card-async.tsx'\nimport { useBrowserColorScheme } from '../../../hooks/use-browser-color-scheme.ts'\nimport { mergeRefs } from '../../../lib/ref.ts'\nimport { Override } from '../../../lib/util.ts'\n\nexport type SignUpHcaptchaFormProps = Override<\n Omit<\n FormCardAsyncProps,\n 'append' | 'onSubmit' | 'submitLabel' | 'onCancel' | 'cancelLabel'\n >,\n {\n siteKey: string\n\n token?: string\n onToken: (token: string, ekey: string) => void\n\n prevLabel?: ReactNode\n onPrev?: () => void\n\n nextLabel?: ReactNode\n onNext: (signal: AbortSignal) => void | PromiseLike<void>\n\n ref?: ForwardedRef<HCaptcha>\n }\n>\n\nconst HCaptchaLazy = lazy(() => import('@hcaptcha/react-hcaptcha'))\n\nexport function SignUpHcaptchaForm({\n siteKey,\n\n token: tokenInit,\n onToken,\n\n prevLabel,\n onPrev,\n\n nextLabel,\n onNext,\n\n ref,\n\n // FormCardProps\n invalid,\n children,\n ...props\n}: SignUpHcaptchaFormProps) {\n const captchaRef = useRef<HCaptcha>(null)\n const theme = useBrowserColorScheme()\n const [token, setToken] = useState<string | undefined>(tokenInit)\n\n const onLoad = useCallback(() => {\n // this reaches out to the hCaptcha JS API and runs the\n // execute function on it. you can use other functions as\n // documented here:\n // https://docs.hcaptcha.com/configuration#jsapi\n captchaRef.current?.execute()\n }, [])\n\n const onVerify = useCallback(\n (token: string, ekey: string) => {\n setToken(token)\n onToken(token, ekey)\n },\n [onToken],\n )\n\n const doSubmit = useCallback(\n (signal: AbortSignal) => {\n if (token) return onNext(signal)\n else if (captchaRef.current) captchaRef.current.execute()\n else throw new Error('Unable to load hCaptcha')\n },\n [token, onNext],\n )\n\n return (\n <FormCardAsync\n {...props}\n cancelLabel={prevLabel}\n onCancel={onPrev}\n submitLabel={nextLabel}\n onSubmit={doSubmit}\n append={children}\n invalid={invalid || !token}\n >\n <HCaptchaLazy\n theme={theme}\n sitekey={siteKey}\n onLoad={onLoad}\n onVerify={onVerify}\n ref={mergeRefs([ref, captchaRef])}\n />\n </FormCardAsync>\n )\n}\n","import { Trans, useLingui } from '@lingui/react/macro'\nimport { useCallback, useState } from 'react'\nimport type { CustomizationData } from '@atproto/oauth-provider-api'\nimport { WizardCard } from '../../../components/forms/wizard-card.tsx'\nimport {\n LayoutTitlePage,\n LayoutTitlePageProps,\n} from '../../../components/layouts/layout-title-page.tsx'\nimport { HelpCard } from '../../../components/utils/help-card.tsx'\nimport { Override } from '../../../lib/util.ts'\nimport {\n SignUpAccountForm,\n SignUpAccountFormOutput,\n} from './sign-up-account-form.tsx'\nimport { SignUpDisclaimer } from './sign-up-disclaimer.tsx'\nimport { SignUpHandleForm } from './sign-up-handle-form.tsx'\nimport { SignUpHcaptchaForm } from './sign-up-hcaptcha-form.tsx'\n\nexport type SignUpViewProps = Override<\n LayoutTitlePageProps,\n {\n customizationData?: CustomizationData\n\n onBack?: () => void\n onValidateNewHandle: (\n data: { handle: string },\n signal?: AbortSignal,\n ) => void | PromiseLike<void>\n onDone: (\n data: SignUpAccountFormOutput & {\n handle: string\n hcaptchaToken?: string\n },\n signal?: AbortSignal,\n ) => void | PromiseLike<void>\n }\n>\n\nexport function SignUpView({\n customizationData: {\n availableUserDomains = [],\n hcaptchaSiteKey = undefined,\n inviteCodeRequired = true,\n links,\n } = {},\n\n onValidateNewHandle,\n onDone,\n onBack,\n\n // LayoutTitlePage\n ...props\n}: SignUpViewProps) {\n const { t } = useLingui()\n const [credentials, setCredentials] = useState<\n undefined | SignUpAccountFormOutput\n >(undefined)\n const [handle, setHandle] = useState<undefined | string>(undefined)\n const [hcaptcha, setHcaptcha] = useState<undefined | string>(undefined)\n\n /**\n * \"false\" indicates that the hcaptcha token is invalid (required but not provided)\n */\n const hcaptchaToken = hcaptchaSiteKey == null ? undefined : hcaptcha || false\n\n const doDone = useCallback(\n (signal: AbortSignal) => {\n if (credentials && handle && hcaptchaToken !== false) {\n return onDone({ ...credentials, handle, hcaptchaToken }, signal)\n }\n },\n [credentials, handle, hcaptchaToken, onDone],\n )\n\n return (\n <LayoutTitlePage\n {...props}\n title={props.title ?? t`Create Account`}\n subtitle={\n props.subtitle ?? <Trans>We're so excited to have you join us!</Trans>\n }\n >\n <WizardCard\n doneLabel={<Trans>Sign up</Trans>}\n onBack={onBack}\n onDone={doDone}\n steps={[\n // We use the handle input first since the \"onValidateNewHandle\" check\n // will make it less likely that the actual signup call will fail, and\n // will result in a better user experience, especially if there is an\n // issue with the email address (e.g. already in use).\n {\n invalid: !handle,\n titleRender: () => <Trans>Choose a username</Trans>,\n contentRender: ({ prev, prevLabel, next, nextLabel, invalid }) => (\n <SignUpHandleForm\n className=\"flex-grow\"\n invalid={invalid}\n domains={availableUserDomains}\n handle={handle}\n onHandle={setHandle}\n prevLabel={prevLabel}\n onPrev={prev}\n nextLabel={nextLabel}\n onNext={async (signal) => {\n if (handle) await onValidateNewHandle({ handle }, signal)\n if (!signal.aborted) return next(signal)\n }}\n >\n <SignUpDisclaimer links={links} />\n </SignUpHandleForm>\n ),\n },\n {\n invalid: !credentials,\n titleRender: () => <Trans>Your account</Trans>,\n contentRender: ({ prev, prevLabel, next, nextLabel, invalid }) => (\n <SignUpAccountForm\n className=\"flex-grow\"\n invalid={invalid}\n prevLabel={prevLabel}\n onPrev={prev}\n nextLabel={nextLabel}\n onNext={next}\n inviteCodeRequired={inviteCodeRequired}\n credentials={credentials}\n onCredentials={setCredentials}\n >\n <SignUpDisclaimer links={links} />\n </SignUpAccountForm>\n ),\n },\n hcaptchaSiteKey != null && {\n invalid: hcaptchaToken === false,\n titleRender: () => <Trans>Verify you are human</Trans>,\n contentRender: ({ prev, prevLabel, next, nextLabel, invalid }) => (\n <SignUpHcaptchaForm\n className=\"flex-grow\"\n invalid={invalid}\n siteKey={hcaptchaSiteKey}\n token={hcaptcha}\n onToken={setHcaptcha}\n prevLabel={prevLabel}\n onPrev={prev}\n nextLabel={nextLabel}\n onNext={next}\n >\n <SignUpDisclaimer links={links} />\n </SignUpHcaptchaForm>\n ),\n },\n ]}\n />\n\n <HelpCard className=\"mt-4\" links={links} />\n </LayoutTitlePage>\n )\n}\n","import { Trans, useLingui } from '@lingui/react/macro'\nimport { Button } from '../../../components/forms/button.tsx'\nimport {\n LayoutWelcome,\n LayoutWelcomeProps,\n} from '../../../components/layouts/layout-welcome.tsx'\nimport { Override } from '../../../lib/util.ts'\n\nexport type WelcomeViewParams = Override<\n LayoutWelcomeProps,\n {\n onSignIn?: () => void\n onSignUp?: () => void\n onCancel?: () => void\n }\n>\n\nexport function WelcomeView({\n onSignUp,\n onSignIn,\n onCancel,\n\n // LayoutWelcome\n ...props\n}: WelcomeViewParams) {\n const { t } = useLingui()\n return (\n <LayoutWelcome {...props} title={props.title ?? t`Authenticate`}>\n {onSignUp && (\n <Button\n className={'m-1 w-60 max-w-full min-w-min'}\n color={onSignIn ? 'brand' : undefined}\n onClick={onSignUp}\n >\n <Trans>Create a new account</Trans>\n </Button>\n )}\n\n {onSignIn && (\n <Button\n className={'m-1 w-60 max-w-full min-w-min'}\n color={onSignUp ? undefined : 'brand'}\n onClick={onSignIn}\n >\n <Trans>Sign in</Trans>\n </Button>\n )}\n\n {onCancel && (\n <Button className=\"m-1 w-60 max-w-full min-w-min\" onClick={onCancel}>\n <Trans>Cancel</Trans>\n </Button>\n )}\n </LayoutWelcome>\n )\n}\n","import { Trans, useLingui } from '@lingui/react/macro'\nimport { useEffect, useState } from 'react'\nimport type {\n AuthorizeData,\n CustomizationData,\n} from '@atproto/oauth-provider-api'\nimport {\n LayoutTitlePage,\n LayoutTitlePageProps,\n} from '../../components/layouts/layout-title-page.tsx'\nimport { useApi } from '../../hooks/use-api.ts'\nimport { useBoundDispatch } from '../../hooks/use-bound-dispatch.ts'\nimport { Override } from '../../lib/util.ts'\nimport { AcceptView } from './accept/accept-view.tsx'\nimport { ResetPasswordView } from './reset-password/reset-password-view.tsx'\nimport { SignInView } from './sign-in/sign-in-view.tsx'\nimport { SignUpView } from './sign-up/sign-up-view.tsx'\nimport { WelcomeView } from './welcome/welcome-view.tsx'\n\nexport type AuthorizeViewProps = Override<\n LayoutTitlePageProps,\n {\n customizationData?: CustomizationData\n authorizeData: AuthorizeData\n }\n>\n\nenum View {\n Welcome,\n SignUp,\n SignIn,\n ResetPassword,\n Accept,\n Done,\n}\n\nexport function AuthorizeView({\n authorizeData,\n customizationData,\n\n // LayoutTitlePage\n ...props\n}: AuthorizeViewProps) {\n const { t } = useLingui()\n\n const forceSignIn = authorizeData?.loginHint != null\n\n const initialView = forceSignIn ? View.SignIn : View.Welcome\n const [view, setView] = useState<View>(initialView)\n\n const showDone = useBoundDispatch(setView, View.Done)\n const showSignIn = useBoundDispatch(setView, View.SignIn)\n const showResetPassword = useBoundDispatch(setView, View.ResetPassword)\n const showSignUp = useBoundDispatch(setView, View.SignUp)\n const showAccept = useBoundDispatch(setView, View.Accept)\n const showWelcome = useBoundDispatch(setView, View.Welcome)\n\n const [resetPasswordHint, setResetPasswordHint] = useState<\n string | undefined\n >(undefined)\n\n const {\n sessions,\n selectSub,\n doValidateNewHandle,\n doSignUp,\n doSignIn,\n doInitiatePasswordReset,\n doConfirmResetPassword,\n doAccept,\n doReject,\n } = useApi({ ...authorizeData, onRedirected: showDone })\n\n // Navigate when the user signs-in (selects a new session)\n const session = sessions.find((s) => s.selected && !s.loginRequired)\n useEffect(() => {\n if (session) {\n if (session.consentRequired) showAccept()\n else doAccept(session.account)\n }\n }, [session, doAccept, showAccept])\n\n const canSignUp =\n Boolean(customizationData?.availableUserDomains?.length) &&\n !authorizeData.loginHint\n\n // Fool-proofing\n const resetNeeded =\n (view === View.SignUp && !canSignUp) || (view === View.Accept && !session)\n useEffect(() => {\n if (resetNeeded) showWelcome()\n }, [resetNeeded, showWelcome])\n\n if (view === View.Welcome) {\n return (\n <WelcomeView\n {...props}\n customizationData={customizationData}\n onSignIn={showSignIn}\n onSignUp={canSignUp ? showSignUp : undefined}\n onCancel={doReject}\n />\n )\n }\n\n if (view === View.SignUp) {\n return (\n <SignUpView\n {...props}\n customizationData={customizationData}\n onValidateNewHandle={doValidateNewHandle}\n onBack={showWelcome}\n onDone={doSignUp}\n />\n )\n }\n\n if (view === View.ResetPassword) {\n return (\n <ResetPasswordView\n {...props}\n emailDefault={resetPasswordHint}\n onresetPasswordRequest={doInitiatePasswordReset}\n onResetPasswordConfirm={doConfirmResetPassword}\n onBack={forceSignIn ? showSignIn : showWelcome}\n />\n )\n }\n\n if (view === View.SignIn) {\n return (\n <SignInView\n {...props}\n loginHint={authorizeData.loginHint}\n sessions={sessions}\n selectSub={selectSub}\n onSignIn={doSignIn}\n onBack={forceSignIn ? doReject : showWelcome}\n onForgotPassword={(email) => {\n showResetPassword()\n setResetPasswordHint(email)\n }}\n />\n )\n }\n\n if (view === View.Accept) {\n // TypeSafety: should never be null here\n if (!session) return null\n\n return (\n <AcceptView\n {...props}\n clientId={authorizeData.clientId}\n clientMetadata={authorizeData.clientMetadata}\n clientTrusted={authorizeData.clientTrusted}\n account={session.account}\n scopeDetails={authorizeData.scopeDetails}\n onAccept={() => doAccept(session.account)}\n onReject={doReject}\n onBack={\n forceSignIn\n ? undefined\n : () => {\n selectSub(null)\n setView(sessions.length ? View.SignIn : View.Welcome)\n }\n }\n />\n )\n }\n\n if (view === View.Done) {\n return (\n <LayoutTitlePage {...props} title={props.title ?? t`Login complete`}>\n <Trans>You are being redirected...</Trans>\n </LayoutTitlePage>\n )\n }\n\n // Fool-proofing\n throw new Error('Unexpected application state')\n}\n","import './styles.css'\n\nimport { StrictMode } from 'react'\nimport { createRoot } from 'react-dom/client'\nimport { ErrorBoundary } from 'react-error-boundary'\nimport type {\n AuthorizeData,\n AvailableLocales,\n CustomizationData,\n} from '@atproto/oauth-provider-api'\nimport { readBackendData } from './lib/backend-data.ts'\nimport { LocaleProvider } from './locales/locale-provider.tsx'\nimport { AuthorizeView } from './views/authorize/authorize-view.tsx'\nimport { ErrorView } from './views/error/error-view.tsx'\n\nexport const availableLocales =\n readBackendData<AvailableLocales>('__availableLocales')\nexport const customizationData = readBackendData<CustomizationData>(\n '__customizationData',\n)\nexport const authorizeData = readBackendData<AuthorizeData>('__authorizeData')\n\nif (authorizeData) {\n // When the user is logging in, make sure the page URL contains the\n // \"request_uri\" in case the user refreshes the page.\n const url = new URL(window.location.href)\n if (\n url.pathname === '/oauth/authorize' &&\n !url.searchParams.has('request_uri')\n ) {\n url.search = ''\n url.searchParams.set('client_id', authorizeData.clientId)\n url.searchParams.set('request_uri', authorizeData.requestUri)\n window.history.replaceState(history.state, '', url.pathname + url.search)\n }\n}\n\nconst container = document.getElementById('root')!\n\ncreateRoot(container).render(\n <StrictMode>\n <LocaleProvider availableLocales={availableLocales}>\n <ErrorBoundary\n fallbackRender={({ error }) => (\n <ErrorView error={error} customizationData={customizationData} />\n )}\n >\n <AuthorizeView\n customizationData={customizationData}\n authorizeData={authorizeData}\n />\n </ErrorBoundary>\n </LocaleProvider>\n </StrictMode>,\n)\n"],"names":["ErrorBoundaryContext","createContext","initialState","didCatch","error","ErrorBoundary","Component","getDerivedStateFromError","resetErrorBoundary","state","_this$props$onReset","_this$props","_len","arguments","length","args","Array","_key","props","onReset","call","reason","setState","componentDidCatch","info","_this$props$onError","_this$props2","onError","componentDidUpdate","prevProps","prevState","resetKeys","a","b","some","item","index","Object","is","_this$props$onReset2","_this$props3","next","prev","render","children","fallbackRender","FallbackComponent","fallback","childToRender","createElement","Provider","value","constructor","bind","useErrorBoundary","context","useContext","assertErrorBoundaryContext","useState","hasError","memoized","useMemo","resetBoundary","showBoundary","LayoutTitlePage","title","subtitle","className","t","div","clsx","e","h1","p","LocaleSelector","main","upsert","arr","predicate","idx","findIndex","slice","parseCookieString","cookie","fromEntries","split","filter","Boolean","map","str","s","decodeURIComponent","trim","cookies","document","useCsrfToken","cookieName","useSafeCallback","fn","deps","useCallback","UnknownRequestUriError","concat","useApi","requestUri","sessions","sessionsInit","newSessionsRequireConsent","onRedirected","csrfToken","Error","api","Api","setSessions","i18n","useLingui","locale","selectSub","sub","find","selected","account","upsertSession","consentRequired","session","loginRequired","performRedirect","url","window","location","href","String","setTimeout","doSignIn","data","signal","fetch","doInitiatePasswordReset","doConfirmResetPassword","doValidateNewHandle","doSignUp","doAccept","buildAcceptUrl","doReject","buildRejectUrl","useBoundDispatch","dispatch","Button","color","transparent","loading","square","type","role","disabled","button","undefined","FormCard","actions","cancel","append","prepend","inert","r","form","AccountIdentifier","preferred_username","email","UrlViewer","proto","host","path","query","hash","as","As","urlObj","URL","UrlPartViewer","protocol","faded","bold","pathname","search","ClientName","clientId","clientMetadata","clientTrusted","attrs","client_name","span","startsWith","AcceptForm","scopeDetails","onAccept","onReject","onBack","i","onSubmit","event","preventDefault","onClick","logo_uri","img","crossOrigin","src","alt","tos_uri","rel","target","policy_uri","ul","aria-label","scope","description","li","ScopeDescription","AcceptView","FieldsetContext","displayName","Fieldset","label","labelId","useRandomString","prefix","contextValue","fieldset","aria-labelledby","legend","id","useAsyncAction","ref","onLoading","setLoading","setError","doSetError","doSetLoading","controllerRef","useRef","resetRef","useEffect","current","abort","useImperativeHandle","reset","run","controller","AbortController","err","aborted","DOMException","name","console","warn","errorRenderDefault","ErrorCard","FormCardAsync","invalid","submitLabel","onCancel","cancelLabel","errorRender","doSubmit","currentTarget","reportValidity","PasswordStrength","MIN_PASSWORD_LENGTH","EMOJI","UPPER","LOWER","DEC","SPECIAL","getPasswordStrength","pwd","matches","regexps","regexpsCountToMatch","TypeError","regexp","test","PasswordStrengthLabel","password","strength","extra","strong","moderate","PasswordStrengthMeter","aria-valuemin","aria-valuemax","aria-valuenow","from","_","updateRef","mergeRefs","refs","ButtonToggleVisibility","visible","toggleVisible","defaultPrevented","EyeIcon","aria-hidden","EyeSlashIcon","InputContainer","icon","bellow","onFocus","onBlur","hasFocus","setHasFocus","InputText","ariaLabel","ariaLabelledBy","placeholder","ctx","inputRef","focusedRef","tabIndex","stopPropagation","focus","onMouseDown","input","InputPassword","autoHide","onChange","autoComplete","LockIcon","defaultValue","dir","autoCapitalize","autoCorrect","spellCheck","setVisible","setPassword","doChange","InputNewPassword","passwordInit","onPassword","minLength","validity","valid","InputToken","example","onToken","TokenIcon","token","setToken","maxLength","pattern","selectionEnd","selectionStart","fixedValue","fix","pos","fixedSlicedValue","isDefaultPrevented","normalized","toUpperCase","replaceAll","ResetPasswordConfirmForm","tokenAriaId","passwordRef","Admonition","o","enterKeyHint","required","autoFocus","InputEmailAddress","onEmail","AtSymbolIcon","setEmail","toLowerCase","ResetPasswordRequestForm","emailDefault","emailAriaId","ctrlRef","View","ResetPasswordView","onresetPasswordRequest","onResetPasswordConfirm","view","setView","hr","center","h2","InputCheckbox","htmlFor","labelRef","inputId","click","SignInForm","usernameDefault","usernameReadonly","rememberDefault","onForgotPassword","username","setUsername","remember","setRemember","otp","setOtp","secondFactor","setSecondFactor","formRef","clearSecondFactor","resetState","SecondAuthenticationFactorRequiredError","InvalidCredentialsError","readOnly","includes","checked","hint","AccountImage","errored","setErrored","AccountIcon","SignInPicker","accounts","onAccount","onOther","n","identifier","onKeyDown","key","picture","CaretRightIcon","arial-label","SignInView","loginHint","onSignIn","clearSession","showSignInForm","setShowSignInForm","isEnabled","isRequired","isCompleted","useStepper","steps","firstIdx","lastIdx","findLastIndex","requiredIdx","currentIdx","setCurrentIdx","to","join","prevIdx","nextIdx","toFirst","toLast","toPrev","toNext","toRequired","currentPosition","reduce","acc","count","completed","every","broken","atFirst","atLast","WizardCard","prevLabel","nextLabel","backLabel","onDone","doneLabel","onNext","stepTitle","titleRender","stepContent","contentRender","HelpCard","links","helpLink","l","SignUpAccountForm","inviteCodeRequired","credentials","creds","onCredentials","onPrev","inviteCode","setInviteCode","resetForm","SignUpDisclaimer","tosLink","ppLink","LinkAnchor","link","isValidDomain","MIN_LENGTH","domain","endsWith","SignUpHandleForm","domains","availableDomains","handle","handleInit","onHandle","domainIdx","setDomainIdx","d","segment","setSegment","v","Math","min","validateSegment","useSegmentValidator","maxLen","MAX_FULL_LENGTH","validLength","validCharset","preview","ValidationMessage","hasValue","setSelectionRange","select","Number","option","CheckMarkIcon","XMarkIcon","matchMedia","useBrowserColorScheme","theme","setTheme","listener","addEventListener","removeEventListener","HCaptchaLazy","lazy","SignUpHcaptchaForm","siteKey","tokenInit","captchaRef","onLoad","execute","onVerify","ekey","sitekey","SignUpView","customizationData","availableUserDomains","hcaptchaSiteKey","onValidateNewHandle","setCredentials","setHandle","hcaptcha","setHcaptcha","hcaptchaToken","doDone","WelcomeView","onSignUp","LayoutWelcome","AuthorizeView","authorizeData","forceSignIn","showDone","showSignIn","showResetPassword","showSignUp","showAccept","showWelcome","resetPasswordHint","setResetPasswordHint","canSignUp","resetNeeded","availableLocales","readBackendData","searchParams","has","set","history","replaceState","createRoot","getElementById","StrictMode","LocaleProvider","ErrorView"],"mappings":"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","x_google_ignoreList":[0]}
|
package/dist/assets/Cqnfnbvc.js
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { n as readBackendData, o as clientExports, j as jsxRuntimeExports, r as reactExports, p as LocaleProvider, q as ErrorView } from './error-view-Bu4y7Nd8.js';
|
|
2
|
-
|
|
3
|
-
const availableLocales=readBackendData("__availableLocales");const customizationData=readBackendData("__customizationData");const errorData=readBackendData("__errorData");clientExports.createRoot(document.getElementById("root")).render(jsxRuntimeExports.jsx(reactExports.StrictMode,{children:jsxRuntimeExports.jsx(LocaleProvider,{availableLocales:availableLocales,children:jsxRuntimeExports.jsx(ErrorView,{error:errorData,customizationData:customizationData})})}));
|
|
4
|
-
|
|
5
|
-
export { availableLocales, customizationData, errorData };
|
|
6
|
-
//# sourceMappingURL=Cqnfnbvc.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Cqnfnbvc.js","sources":["../../src/error-page.tsx"],"sourcesContent":["import './styles.css'\n\nimport { StrictMode } from 'react'\nimport { createRoot } from 'react-dom/client'\nimport type {\n AvailableLocales,\n CustomizationData,\n ErrorData,\n} from '@atproto/oauth-provider-api'\nimport { readBackendData } from './lib/backend-data.ts'\nimport { LocaleProvider } from './locales/locale-provider.tsx'\nimport { ErrorView } from './views/error/error-view.tsx'\n\nexport const availableLocales =\n readBackendData<AvailableLocales>('__availableLocales')\nexport const customizationData = readBackendData<CustomizationData>(\n '__customizationData',\n)\nexport const errorData = readBackendData<ErrorData>('__errorData')\n\nconst container = document.getElementById('root')!\n\ncreateRoot(container).render(\n <StrictMode>\n <LocaleProvider availableLocales={availableLocales}>\n <ErrorView error={errorData} customizationData={customizationData} />\n </LocaleProvider>\n </StrictMode>,\n)\n"],"names":["availableLocales","readBackendData","customizationData","errorData","createRoot","document","getElementById","render","r","StrictMode","LocaleProvider","ErrorView","error"],"mappings":";;AAaaA,MAAAA,gBAAAA,CACXC,eAAkC,CAAA,oBAAA,QACvBC,iBAAoBD,CAAAA,eAAAA,CAC/B,qBACD,EACM,MAAME,SAAYF,CAAAA,eAAAA,CAA2B,eAIpDG,wBAAAA,CAFkBC,QAASC,CAAAA,cAAc,CAAC,MAAA,CAAA,CAAA,CAEpBC,MAAM,CAC1BC,sBAACC,uBACC,CAAA,CAAA,QAAA,CAAAD,qBAAA,CAACE,cAAeV,CAAAA,CAAAA,gBAAAA,CAAkBA,gBAChC,CAAA,QAAA,CAAAQ,qBAAA,CAACG,SAAUC,CAAAA,CAAAA,KAAAA,CAAOT,UAAWD,iBAAmBA,CAAAA,iBAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA;;;;"}
|