From a0a19a91fad4dbc42bc4ab319da6094d85eb0e49 Mon Sep 17 00:00:00 2001 From: Charlie Date: Tue, 28 Oct 2025 16:55:43 +0800 Subject: [PATCH] feat: new authenticate UI (#12172) * enhance(ui): login form * enhance(ui): add localization support with translate and locale management * enhance(ui): WIP implement new authentication forms with context management * enhance(ui): add password visibility toggle to input row * enhance(ui): adjust padding for password visibility toggle * enhance(i18n): implement internationalization support for authentication UI * enhance(ui): implement sign in and sign up functionality with loading state * enhance(ui): add session management and error handling in login form * enhance(ui): add confirm code form and enhance authentication flow * enhance(ui): improve sign-in flow and confirm code handling * enhance(ui): add warning variant to alerts and improve error handling * enhance(ui): implement countdown timer for code resend functionality * enhance(ui): implement countdown timer for password reset and enhance login flow * enhance(ui): export authentication and enhance UI components * enhance(ui): integrate new login component and refresh token handling * chore: clear amplify related codes * enhance(i18n): normalize language codes and update locale handling * enhance(auth): add multilingual support for signup and password reset flows * enhance(ui): update login styles to inherit text color * enhance(ui): adjust input color variables for improved accessibility * enhance(auth): add password policy validation and tips in multiple languages * enhance(ui): improve localization handling and update alert styles * enhance(mobile): enhance login modal styling and accessibility * fix(ui): update password validation regex for special characters * enhance(ui): add padding to card header in login dialog --------- Co-authored-by: Tienson Qin --- gulpfile.js | 2 - package.json | 2 +- packages/ui/@/components/ui/alert.tsx | 2 + packages/ui/examples/index.html | 5 + packages/ui/examples/index.tsx | 57 +- packages/ui/package.json | 2 + packages/ui/src/amplify/core.ts | 26 + packages/ui/src/amplify/index.ts | 8 + packages/ui/src/amplify/lang.ts | 114 ++ packages/ui/src/amplify/ui.tsx | 710 ++++++++++ packages/ui/src/i18n.ts | 40 + packages/ui/src/ui.ts | 11 + packages/ui/yarn.lock | 1305 +++++++++++++++++- resources/css/shui.css | 4 +- resources/index.html | 1 - resources/mobile/index.html | 3 +- src/main/frontend/components/theme.cljs | 7 +- src/main/frontend/components/user/config.js | 56 - src/main/frontend/components/user/login.cljs | 87 +- src/main/frontend/components/user/login.css | 122 +- src/main/frontend/handler.cljs | 2 + src/main/frontend/handler/user.cljs | 15 + src/main/frontend/mobile/index.css | 29 +- src/main/mobile/components/settings.cljs | 1 + tailwind.all.css | 1 - tailwind.config.js | 3 +- tailwind.mobile.css | 1 - 27 files changed, 2365 insertions(+), 251 deletions(-) create mode 100644 packages/ui/src/amplify/core.ts create mode 100644 packages/ui/src/amplify/index.ts create mode 100644 packages/ui/src/amplify/lang.ts create mode 100644 packages/ui/src/amplify/ui.tsx create mode 100644 packages/ui/src/i18n.ts delete mode 100644 src/main/frontend/components/user/config.js diff --git a/gulpfile.js b/gulpfile.js index fb781719f4..eef18c1549 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -79,7 +79,6 @@ const common = { 'node_modules/marked/marked.min.js', 'node_modules/@highlightjs/cdn-assets/highlight.min.js', 'node_modules/@isomorphic-git/lightning-fs/dist/lightning-fs.min.js', - 'packages/amplify/dist/amplify.js', 'packages/ui/dist/ui/ui.js', 'node_modules/@sqlite.org/sqlite-wasm/sqlite-wasm/jswasm/sqlite3.wasm', 'node_modules/react/umd/react.production.min.js', @@ -130,7 +129,6 @@ const common = { 'node_modules/prop-types/prop-types.min.js', 'node_modules/interactjs/dist/interact.min.js', 'node_modules/photoswipe/dist/umd/*.js', - 'packages/amplify/dist/amplify.js', 'packages/ui/dist/ui/ui.js', 'node_modules/@sqlite.org/sqlite-wasm/sqlite-wasm/jswasm/sqlite3.wasm', ]).pipe(gulp.dest(path.join(outputPath, 'mobile', 'js'))), diff --git a/package.json b/package.json index 73337d7cc1..d346116037 100644 --- a/package.json +++ b/package.json @@ -105,7 +105,7 @@ "tldraw:build": "yarn --cwd packages/tldraw install", "amplify:build": "yarn --cwd packages/amplify install", "ui:build": "yarn --cwd packages/ui install", - "postinstall": "yarn tldraw:build && yarn amplify:build && yarn ui:build" + "postinstall": "yarn tldraw:build && yarn ui:build" }, "dependencies": { "@capacitor-community/safe-area": "7.0.0-alpha.1", diff --git a/packages/ui/@/components/ui/alert.tsx b/packages/ui/@/components/ui/alert.tsx index 5fff67c887..663ce663f9 100644 --- a/packages/ui/@/components/ui/alert.tsx +++ b/packages/ui/@/components/ui/alert.tsx @@ -12,6 +12,8 @@ const alertVariants = cva( default: 'bg-background text-foreground', destructive: 'border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive', + warning: + 'border-yellow-600 text-yellow-600 dark:text-yellow-500/70 [&>svg]:text-yellow-600', }, }, defaultVariants: { diff --git a/packages/ui/examples/index.html b/packages/ui/examples/index.html index abe103c457..f5f9336c7d 100644 --- a/packages/ui/examples/index.html +++ b/packages/ui/examples/index.html @@ -9,6 +9,11 @@ +
diff --git a/packages/ui/examples/index.tsx b/packages/ui/examples/index.tsx index c20fa37bef..3963fcfdb0 100644 --- a/packages/ui/examples/index.tsx +++ b/packages/ui/examples/index.tsx @@ -2,22 +2,63 @@ import '../src/index.css' import { setupGlobals } from '../src/ui' import * as React from 'react' import * as ReactDOM from 'react-dom' +import { init, t } from '../src/amplify/core' // @ts-ignore -import { Button } from '@/components/ui/button' +import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' +import { LoginForm, ResetPasswordForm, SignupForm, ConfirmWithCodeForm } from '../src/amplify/ui' +import { AuthFormRootContext } from '../src/amplify/core' // bootstrap setupGlobals() +init() function App() { + const [errors, setErrors] = React.useState(null) + const [currentTab, setCurrentTab] = React.useState<'login' | 'reset' | 'signup' | 'confirm-code' | any>('login') + const onSessionCallback = React.useCallback((session: any) => { + console.log('==>>session callback:', session) + }, []) + + React.useEffect(() => { + setErrors(null) + }, [currentTab]) + + let content = null + // support passing object with type field + let _currentTab = currentTab?.type ? currentTab.type : currentTab + let _currentTabProps = currentTab?.props || {} + + switch (_currentTab) { + case 'login': + content = + break + case 'reset': + content = + break + case 'signup': + content = + break + case 'confirm-code': + content = + break + } + return ( -
-

- Hello, Logseq UI :) -

- +
+ + + + {t(_currentTab)?.replace('-', ' ')} + + + {content} + + +
) } diff --git a/packages/ui/package.json b/packages/ui/package.json index 8c634234ce..6f2076d77d 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -34,6 +34,7 @@ "@radix-ui/react-toggle-group": "^1.1.7", "@radix-ui/react-tooltip": "^1.2.4", "@silk-hq/components": "^0.9.10", + "aws-amplify": "^6.15.6", "class-variance-authority": "^0.7.1", "clsx": "^2.0.0", "cmdk": "^0.2.0", @@ -70,6 +71,7 @@ "@types/prop-types": "^15", "@types/react": "17", "@types/react-dom": "17", + "buffer": "^5.5.0", "parcel": "2.8.3", "postcss": "^8.4.31", "postcss-loader": "^7.3.3", diff --git a/packages/ui/src/amplify/core.ts b/packages/ui/src/amplify/core.ts new file mode 100644 index 0000000000..0a791a5529 --- /dev/null +++ b/packages/ui/src/amplify/core.ts @@ -0,0 +1,26 @@ +import { Amplify } from 'aws-amplify' +import { createContext, useContext } from 'react' +import { translate, setNSDicts, setLocale } from '../i18n' + +export const AuthFormRootContext = createContext(null) +export const useAuthFormState = () => { + return useContext(AuthFormRootContext) +} + +export function t(key: string, ...args: any) { + return translate('amplify', key, ...args) +} + +export function init({ lang, authCognito }: any) { + // Load default language + setNSDicts('amplify', require('./lang').default) + if (lang) setLocale(lang) + Amplify.configure({ + Auth: { + Cognito: { + ...authCognito, + loginWith: { email: true } + } + } + }) +} \ No newline at end of file diff --git a/packages/ui/src/amplify/index.ts b/packages/ui/src/amplify/index.ts new file mode 100644 index 0000000000..bc19ec8646 --- /dev/null +++ b/packages/ui/src/amplify/index.ts @@ -0,0 +1,8 @@ +import * as Auth from 'aws-amplify/auth' +import { init } from './core' +import { LSAuthenticator } from './ui' + +export { + init, Auth, + LSAuthenticator +} \ No newline at end of file diff --git a/packages/ui/src/amplify/lang.ts b/packages/ui/src/amplify/lang.ts new file mode 100644 index 0000000000..6d46e32ba3 --- /dev/null +++ b/packages/ui/src/amplify/lang.ts @@ -0,0 +1,114 @@ +export default { + 'en': { + 'signup': 'Sign Up', + 'reset-password': 'Reset Password', + 'confirm-code': 'Confirm Code', + 'CODE_ON_THE_WAY_TIP': 'Your code is on the way. To log in, enter the code we sent you. It may take a minute to arrive.', + 'PW_POLICY_TIP': '1. at least 8 characters.\n' + + '2. must have lowercase characters.\n' + + '3. must have uppercase characters.\n' + + '4. must have symbol characters.', + }, + 'zh-cn': { + 'login': '登录', + 'signup': '注册', + 'reset-password': '重置密码', + 'confirm-code': '确认验证码', + 'PW_POLICY_TIP': '1. 密码长度至少8个字符\n' + + '2. 密码必须包含小写字母\n' + + '3. 密码必须包含大写字母\n' + + '4. 密码必须包含特殊字符', + 'CODE_ON_THE_WAY_TIP': '验证码已发送。请输入我们发送给您的验证码以登录。可能需要一分钟才能收到。', + 'Sign in to your account': '登录到您的账户', + 'Email': '电子邮箱', + 'Password': '密码', + 'Sign in': '登录', + 'Confirm': '确认', + 'Don\'t have an account?': '还没有账户?', + 'Sign up': '注册', + 'or': '或 ', + 'Forgot your password?': '忘记密码?', + 'Create account': '创建您的账户', + 'Username': '用户名', + 'Confirm Password': '确认密码', + 'New Password': '新密码', + 'By signing up, you agree to our': '注册即表示您同意我们的 ', + 'Terms of Service': '服务条款', + 'Privacy Policy': '隐私政策', + 'Already have an account?': '已经有账户?', + 'Reset password': '重置您的密码', + 'Enter the code sent to your email': '输入发送到您邮箱的验证码', + 'Send code': '发送验证码', + 'Resend code': '重新发送验证码', + 'Back to login': '返回登录', + 'Enter your email': '请输入您的电子邮箱' + }, + 'zh-hant': { + 'login': '登入', + 'signup': '註冊', + 'reset-password': '重置密碼', + 'confirm-code': '確認驗證碼', + 'CODE_ON_THE_WAY_TIP': '驗證碼已發送。請輸入我們發送給您的驗證碼以登入。可能需要一分鐘才能收到。', + 'PW_POLICY_TIP': '1. 密碼長度至少8個字符\n' + + '2. 密碼必須包含小寫字母\n' + + '3. 密碼必須包含大寫字母\n' + + '4. 密碼必須包含特殊字符', + 'Sign in to your account': '登入到您的帳戶', + 'Email': '電子郵箱', + 'Password': '密碼', + 'Sign in': '登入', + 'Confirm': '確認', + 'Don\'t have an account?': '還沒有帳戶?', + 'Sign up': '註冊', + 'or': '或 ', + 'Forgot your password?': '忘記密碼?', + 'Create account': '創建您的帳戶', + 'Username': '用戶名', + 'Confirm Password': '確認密碼', + 'New Password': '新密碼', + 'By signing up, you agree to our': '註冊即表示您同意我們的 ', + 'Terms of Service': '服務條款', + 'Privacy Policy': '隱私政策', + 'Already have an account?': '已經有帳戶?', + 'Reset password': '重置您的密碼', + 'Enter the code sent to your email': '輸入發送到您郵箱的驗證碼', + 'Send code': '發送驗證碼', + 'Resend code': '重新發送驗證碼', + 'Back to login': '返回登入', + 'Enter your email': '請輸入您的電子郵箱' + }, + 'ja': { + 'login': 'ログイン', + 'signup': 'サインアップ', + 'reset-password': 'パスワードをリセットする', + 'confirm-code': 'コードを確認する', + 'CODE_ON_THE_WAY_TIP': 'コードが送信されました。ログインするには、送信したコードを入力してください。届くまでに1分ほどかかる場合があります。', + 'PW_POLICY_TIP': '1. パスワードは8文字以上であること。\n' + + '2. パスワードには小文字を含める必要があります。\n' + + '3. パスワードには大文字を含める必要があります。\n' + + '4. パスワードには記号を含める必要があります。', + 'Sign in to your account': 'アカウントにサインイン', + 'Email': 'メール', + 'Password': 'パスワード', + 'Sign in': 'サインイン', + 'Confirm': '確認', + 'Don\'t have an account?': 'アカウントをお持ちでないですか?', + 'Sign up': 'サインアップ', + 'or': 'または ', + 'Forgot your password?': 'パスワードをお忘れですか?', + 'Create account': 'アカウントを作成する', + 'Username': 'ユーザー名', + 'New Password': '新しいパスワード', + 'Confirm Password': 'パスワードを確認する', + 'By signing up, you agree to our': 'サインアップすることで、あなたは私たちの ', + 'Terms of Service': '利用規約', + 'Privacy Policy': 'プライバシーポリシー', + 'Already have an account? ': 'すでにアカウントをお持ちですか?', + 'Reset password': 'パスワードをリセットする', + 'Enter the code sent to your email': 'メールに送信されたコードを入力してください', + 'Send code': 'コードを送信', + 'Resend code': 'コードを再送信', + 'Back to login': 'ログインに戻る', + 'Enter your email': 'メールアドレスを入力してください' + } +} diff --git a/packages/ui/src/amplify/ui.tsx b/packages/ui/src/amplify/ui.tsx new file mode 100644 index 0000000000..859d8a3444 --- /dev/null +++ b/packages/ui/src/amplify/ui.tsx @@ -0,0 +1,710 @@ +import { Button } from '@/components/ui/button' +import { Input, InputProps } from '@/components/ui/input' +import { Label } from '@/components/ui/label' +import { cn } from '@/lib/utils' +import { FormHTMLAttributes, useEffect, useState } from 'react' +import { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert' +import { AlertCircleIcon, Loader2Icon, LucideEye, LucideEyeClosed, LucideX } from 'lucide-react' +import { AuthFormRootContext, t, useAuthFormState } from './core' +import * as Auth from 'aws-amplify/auth' +import { Skeleton } from '@/components/ui/skeleton' +import * as React from 'react' + +function ErrorTip({ error, removeError }: { + error: string | { variant?: 'warning' | 'destructive', title?: string, message: string | any }, + removeError?: () => void +}) { + if (!error) return null + if (typeof error === 'string') { + error = { message: error } + } + + return ( + + + {error.title && {error.title}} + +

+ {(typeof error.message === 'string' ? error.message : JSON.stringify(error.message))?.split('\n') + .map((line: string, idx: number) => { + return {line}
+ })} +

+
+ removeError?.()}> + + +
+ ) +} + +function InputRow( + props: InputProps & { label: string | React.ReactNode }, +) { + const { errors, setErrors } = useAuthFormState() + const { label, type, ...rest } = props + const isPassword = type === 'password' + const error = props.name && errors?.[props.name] + const [localType, setLocalType] = useState(type || 'text') + const [showPassword, setShowPassword] = useState(false) + const removeError = () => { + if (props.name && errors?.[props.name]) { + const newErrors = { ...errors } + delete newErrors[props.name] + setErrors(newErrors) + } + } + + return ( + + ) +} + +function FormGroup(props: FormHTMLAttributes) { + const { className, children, ...reset } = props + return ( +
+ {children} +
+ ) +} + +// 1. Password must be at least 8 characters +// 2. Password must have lowercase characters +// 3. Password must have uppercase characters +// 4. Password must have symbol characters +function validatePasswordPolicy(password: string) { + if (!password || + password.length < 8 || + !/[a-z]/.test(password) || + !/[A-Z]/.test(password) || + !/[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?~`]/.test(password) + ) { + throw new Error(t('PW_POLICY_TIP')) + } +} + +function useCountDown() { + const [countDownNum, setCountDownNum] = useState(0) + const startCountDown = () => { + setCountDownNum(60) + const interval = setInterval(() => { + setCountDownNum((num) => { + if (num <= 1) { + clearInterval(interval) + return 0 + } + return num - 1 + }) + }, 1000) + } + + useEffect(() => { + return () => { + setCountDownNum(0) + } + }, []) + + return { countDownNum, startCountDown, setCountDownNum } +} + +export function LoginForm() { + const { setErrors, setCurrentTab, onSessionCallback, userSessionRender } = useAuthFormState() + const [loading, setLoading] = useState(false) + const [sessionUser, setSessionUser] = useState(null) + const loadSession = async () => { + try { + const ret = await Auth.fetchAuthSession() + if (!ret?.userSub) throw new Error('no session') + const user = await Auth.getCurrentUser() + onSessionCallback?.({ ...ret, user }) + const tokens = ret.tokens + setSessionUser({ + ...user, signInUserSession: { + idToken: { jwtToken: tokens?.idToken?.toString() }, + accessToken: { jwtToken: tokens?.accessToken.toString() }, + refreshToken: null + } + }) + await (new Promise(resolve => setTimeout(resolve, 100))) + } catch (e) { + console.warn('no current session:', e) + setSessionUser(false) + } + } + + useEffect(() => { + // check current auth session + loadSession() + }, []) + + if (sessionUser === null) { + return ( +
+ + +
) + } + + const signOut = async () => { + await Auth.signOut() + setSessionUser(false) + setErrors(null) + } + + if (sessionUser?.username) { + if (userSessionRender) { + if (typeof userSessionRender === 'function') { + return userSessionRender({ sessionUser, signOut }) + } + return userSessionRender + } + + return ( +
+

{t('You are already logged in as')} {sessionUser.username}

+ +
+ ) + } + + return ( + { + setErrors(null) + e.preventDefault() + + // get submit form input data + const formData = new FormData(e.target as HTMLFormElement) + const data = Object.fromEntries(formData.entries()) + + // sign in logic here + try { + setLoading(true) + const username = (data.email as string)?.trim() + const ret = await Auth.signIn({ username, password: data.password as string }) + const nextStep = ret?.nextStep?.signInStep + if (!nextStep) throw new Error(JSON.stringify(ret)) + switch (nextStep) { + case 'CONFIRM_SIGN_UP': + case 'CONFIRM_SIGN_IN_WITH_EMAIL_CODE': + case 'CONFIRM_SIGN_IN_WITH_TOTP_CODE': + setCurrentTab({ type: 'confirm-code', props: { user: { ...ret, username }, nextStep } }) + return + case 'RESET_PASSWORD': + setCurrentTab({ type: 'reset-password', props: { user: { ...ret, username }, nextStep } }) + return + case 'DONE': + // signed in + await loadSession() + return + default: + throw new Error('Unsupported sign-in step: ' + nextStep) + } + } catch (e) { + setErrors({ password: { message: (e as Error).message, title: t('Bad Response.') } }) + console.error(e) + } finally { + setLoading(false) + } + }}> + + + + + + ) +} + +export function SignupForm() { + const { setCurrentTab, setErrors } = useAuthFormState() + const [loading, setLoading] = useState(false) + + return ( + <> + { + setErrors(null) + e.preventDefault() + + // get submit form input data + const formData = new FormData(e.target as HTMLFormElement) + const data = Object.fromEntries(formData.entries()) as any + + try { + validatePasswordPolicy(data.password) + } catch (e) { + setErrors({ + password: { + message: (e as Error).message, + title: t('Invalid Password') + } + }) + return + } + + if (data.password !== data.confirm_password) { + setErrors({ + confirm_password: { + message: t('Passwords do not match.'), + title: t('Invalid Password') + } + }) + return + } + + try { + setLoading(true) + const ret = await Auth.signUp({ + username: data.username as string, + password: data.password as string, + options: { + userAttributes: { + email: data.email as string, + } + } + }) + + if (ret.isSignUpComplete) { + // TODO: auto sign in + if (ret.nextStep?.signUpStep === 'COMPLETE_AUTO_SIGN_IN') { + const { nextStep } = await Auth.autoSignIn() + if (nextStep.signInStep === 'DONE') { + // signed in + setCurrentTab('login') + } + } + + setCurrentTab('login') + return + } else { + if (ret.nextStep?.signUpStep === 'CONFIRM_SIGN_UP') { + setCurrentTab({ + type: 'confirm-code', + props: { + user: { ...ret, username: data.username }, + nextStep: 'CONFIRM_SIGN_UP' + } + }) + } + return + } + } catch (e: any) { + console.error(e) + const error = { title: t('Bad Response.'), message: (e as Error).message } + let k = 'confirm_password' + if (e.name === 'UsernameExistsException') { + k = 'username' + } + setErrors({ [k]: error }) + } finally { + setLoading(false) + } + }}> + + + + +
+ + {t('By signing up, you agree to our')}  + {t('Terms of Service')} + {t(' and ')} + {t('Privacy Policy')}. + +
+
+ +
+ +

+ setCurrentTab('login')} + className={'text-sm opacity-60 hover:opacity-80 underline'}> + {t('Back to login')} + +

+
+ + ) +} + +export function ResetPasswordForm() { + const [isSentCode, setIsSentCode] = useState(false) + const [sentUsername, setSentUsername] = useState('') + const { setCurrentTab, setErrors } = useAuthFormState() + const { countDownNum, startCountDown } = useCountDown() + const [loading, setLoading] = useState(false) + + useEffect(() => { + setErrors({}) + }, [isSentCode]) + + return ( + { + setErrors(null) + e.preventDefault() + + // get submit form input data + const formData = new FormData(e.target as HTMLFormElement) + const data = Object.fromEntries(formData.entries()) + + if (!isSentCode) { + try { + setLoading(true) + + const username = (data.email as string)?.trim() + // send reset code + const ret = await Auth.resetPassword({ username }) + console.debug('[Auth] reset pw code sent: ', ret) + setSentUsername(username) + startCountDown() + setIsSentCode(true) + } catch (error) { + console.error('Error sending reset code:', error) + setErrors({ email: { message: (error as Error).message, title: t('Bad Response.') } }) + } finally { + setLoading(false) + } + } else { + // confirm reset password + if ((data.password as string)?.length < 8) { + setErrors({ + password: { + message: t('Password must be at least 8 characters.'), + title: t('Invalid Password') + } + }) + return + } else if (data.password !== data.confirm_password) { + setErrors({ + confirm_password: { + message: t('Passwords do not match.'), + title: t('Invalid Password') + } + }) + return + } else { + try { + setLoading(true) + const ret = await Auth.confirmResetPassword({ + username: sentUsername, + newPassword: data.password as string, + confirmationCode: data.code as string + }) + + console.debug('[Auth] confirm reset pw: ', ret) + setCurrentTab('login') + } catch (error) { + console.error('Error confirming reset password:', error) + setErrors({ 'confirm_password': { message: (error as Error).message, title: t('Bad Response.') } }) + } finally { + setLoading(false) + } + } + } + }}> + {isSentCode ? ( + <> + + + + + + + + + + ) : ( + <> + + + + )} + + ) +} + +export function ConfirmWithCodeForm( + props: { user: any, nextStep: any } +) { + const { setCurrentTab, setErrors } = useAuthFormState() + const [loading, setLoading] = useState(false) + const isFromSignIn = props.user?.hasOwnProperty('isSignedIn') + const signUpCodeDeliveryDetails = props.user?.nextStep?.codeDeliveryDetails + const { countDownNum, startCountDown, setCountDownNum } = useCountDown() + + return ( + { + setErrors(null) + e.preventDefault() + + // get submit form input data + const formData = new FormData(e.target as HTMLFormElement) + const data = Object.fromEntries(formData.entries()) + + try { + setLoading(true) + if (props.nextStep === 'CONFIRM_SIGN_UP') { + const ret = await Auth.confirmSignUp({ + username: props.user?.username, + confirmationCode: data.code as string, + }) + + if (ret.nextStep?.signUpStep === 'COMPLETE_AUTO_SIGN_IN') { + const { nextStep } = await Auth.autoSignIn() + if (nextStep.signInStep === 'DONE') { + // signed in + setCurrentTab('login') + return + } + } + + setCurrentTab('login') + } else { + const ret = await Auth.confirmSignIn({ + challengeResponse: data.code as string, + }) + + console.debug('confirmSignIn: ', ret) + } + } catch (e) { + setErrors({ code: { message: (e as Error).message, title: t('Bad Response.') } }) + console.error(e) + } finally { + setLoading(false) + } + }}> + +

+ {isFromSignIn ? t('CODE_ON_THE_WAY_TIP') : ( + signUpCodeDeliveryDetails && + {t('We have sent a numeric verification code to your email address at')}  + {signUpCodeDeliveryDetails.destination}. + + )} +

+ + {/*
*/}
+      {/*  {JSON.stringify(props.user, null, 2)}*/}
+      {/*  {JSON.stringify(props.nextStep, null, 2)}*/}
+      {/*
*/} + + + {countDownNum > 0 ? ( + + {countDownNum}s + + ) : { + e.stopPropagation() + // resend code + try { + startCountDown() + if (props.nextStep === 'CONFIRM_SIGN_UP') { + const ret = await Auth.resendSignUpCode({ + username: props.user?.username + }) + + console.debug('resendSignUpCode: ', ret) + } else { + // await Auth.resendSignInCode(props.user) + } + } catch (e) { + setErrors({ code: { message: (e as Error).message, title: t('Bad Response.') } }) + setCountDownNum(0) + console.error(e) + } finally {} + }}>{t('Resend code')} + } + + + + +
+ ) +} + +export function LSAuthenticator(props: any) { + const [errors, setErrors] = React.useState(null) + const [currentTab, setCurrentTab] = React.useState<'login' | 'signup' | 'reset-password' | 'confirm-code' | any>('login') + const onSessionCallback = React.useCallback((session: any) => { + props.onSessionCallback?.(session) + }, [props.onSessionCallback]) + + React.useEffect(() => { + setErrors(null) + }, [currentTab]) + + let content = null + // support passing object with type field + let _currentTab = currentTab?.type ? currentTab.type : currentTab + let _currentTabProps = currentTab?.props || {} + + switch (_currentTab) { + case 'login': + content = + break + case 'signup': + content = + break + case 'reset-password': + content = + break + case 'confirm-code': + content = + break + } + + return ( + + {props.titleRender?.(_currentTab, t(_currentTab))} +
+ {content} +
+
+ ) +} \ No newline at end of file diff --git a/packages/ui/src/i18n.ts b/packages/ui/src/i18n.ts new file mode 100644 index 0000000000..5b366b984b --- /dev/null +++ b/packages/ui/src/i18n.ts @@ -0,0 +1,40 @@ +export type TranslateFn = ( + locale: string, + dicts: Record, + key: string, + ...args: any +) => string + +let _nsDicts = {} +let _locale: string = 'en' +let _translate: TranslateFn = ( + locale: string, + dicts: Record, + key: string, + ...args: any +) => { + return dicts[locale]?.[key] || args[0] || key +} + +export function setTranslate(t: TranslateFn) { + _translate = t +} + +export function setLocale(locale: string) { + _locale = locale +} + +export function setNSDicts(ns: string, dicts: Record) { + (_nsDicts as any)[ns] = dicts +} + +export const translate = ( + ns: string, + key: string, + ...args: any +) => { + const dicts = (_nsDicts as any)[ns] || {} + return _translate( + _nsDicts?.hasOwnProperty(_locale) ? _locale : 'en', + dicts, key, ...args) +} \ No newline at end of file diff --git a/packages/ui/src/ui.ts b/packages/ui/src/ui.ts index bcc53991a3..5dc9037e35 100644 --- a/packages/ui/src/ui.ts +++ b/packages/ui/src/ui.ts @@ -93,10 +93,14 @@ import { ToggleGroup, ToggleGroupItem } from '@/components/ui/toggle-group' import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar' import * as uniqolor from 'uniqolor' import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs' +import { setLocale, setTranslate } from './i18n' +import * as amplifyAuth from './amplify' declare global { var LSUI: any var LSUtils: any + var LSI18N: any + var LSAuth: any } const shadui = { @@ -199,6 +203,13 @@ function setupGlobals() { isDev: process.env.NODE_ENV === 'development', uniqolor, } + + window.LSI18N = { + setTranslate, + setLocale, + } + + window.LSAuth = amplifyAuth } // setup diff --git a/packages/ui/yarn.lock b/packages/ui/yarn.lock index 1fccd7a7d2..297aa87b11 100644 --- a/packages/ui/yarn.lock +++ b/packages/ui/yarn.lock @@ -17,6 +17,693 @@ dependencies: default-browser-id "3.0.0" +"@aws-amplify/analytics@7.0.87": + version "7.0.87" + resolved "https://registry.yarnpkg.com/@aws-amplify/analytics/-/analytics-7.0.87.tgz#32405d022e4bbca0f854337b41c75a03878daba6" + integrity sha512-Kkehhc1PIE9lGXUtq4vm9dcV4HmfXkDXoBmmLeaax3YVbJMjmyvXw7Mdvp1P+zURdb3p+EALmKii0pKgfMe5FQ== + dependencies: + "@aws-sdk/client-firehose" "3.621.0" + "@aws-sdk/client-kinesis" "3.621.0" + "@aws-sdk/client-personalize-events" "3.621.0" + "@smithy/util-utf8" "2.0.0" + tslib "^2.5.0" + +"@aws-amplify/api-graphql@4.7.22": + version "4.7.22" + resolved "https://registry.yarnpkg.com/@aws-amplify/api-graphql/-/api-graphql-4.7.22.tgz#ea1e7863ebc0a3cf3aa360829eda1f02b1ade27f" + integrity sha512-zHOeh/Yfogss4+35GTCLrxKTfCMvFmtYuUKbBftfJ5BSrAsppMBA5yPr03Mea3xNhZLFunkFJj8tkgXAoADeKA== + dependencies: + "@aws-amplify/api-rest" "4.4.0" + "@aws-amplify/core" "6.13.2" + "@aws-amplify/data-schema" "^1.7.0" + "@aws-sdk/types" "3.387.0" + graphql "15.8.0" + rxjs "^7.8.1" + tslib "^2.5.0" + uuid "^11.0.0" + +"@aws-amplify/api-rest@4.4.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@aws-amplify/api-rest/-/api-rest-4.4.0.tgz#8995243c7cf3fd39ed61bc5bba500106e1de0e80" + integrity sha512-woly6TqB6z+LoB2UoVut11Sg+HauuXIUQAbnnjPp18lWIyO2SYLp5EqgczAUP/AC0WP8/SCLOPSZnJkDnKT4QA== + dependencies: + tslib "^2.5.0" + +"@aws-amplify/api@6.3.18": + version "6.3.18" + resolved "https://registry.yarnpkg.com/@aws-amplify/api/-/api-6.3.18.tgz#a020b56f449e9c8b46af86b6fbf116b27e141e39" + integrity sha512-9R5yhx/7SOadrmFch1Z33yh/Pyye1N6tk9E6u8yLLv1dkbeeRAXAwiTSICT5kBXB7X+9CfGGFA8GMxWjMgEC0w== + dependencies: + "@aws-amplify/api-graphql" "4.7.22" + "@aws-amplify/api-rest" "4.4.0" + "@aws-amplify/data-schema" "^1.7.0" + rxjs "^7.8.1" + tslib "^2.5.0" + +"@aws-amplify/auth@6.15.1": + version "6.15.1" + resolved "https://registry.yarnpkg.com/@aws-amplify/auth/-/auth-6.15.1.tgz#2ab61777ab243301e495c5bdbb3aafa2b7dbbdfb" + integrity sha512-lbvtABrUye0eQiHj5l7tRPIcrTchSUfA2UyBv48vz9YQDuQjwGNAFbFs074N7zaib6PQqO9QOJ8EQBskLypHcg== + dependencies: + "@aws-crypto/sha256-js" "5.2.0" + "@smithy/types" "^3.3.0" + tslib "^2.5.0" + +"@aws-amplify/core@6.13.2": + version "6.13.2" + resolved "https://registry.yarnpkg.com/@aws-amplify/core/-/core-6.13.2.tgz#fc6e0bbfe227fa00a745d34e2a2ca39467534856" + integrity sha512-nxetCeXgfMalkEUXb0gkYEnAkz9oi2tFIT9e/rng/68GsNGbJTAhbsjAeDdQJXNPbVOAeg7j2ILrJeSuxpV09A== + dependencies: + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/types" "3.398.0" + "@smithy/util-hex-encoding" "2.0.0" + "@types/uuid" "^9.0.0" + js-cookie "^3.0.5" + rxjs "^7.8.1" + tslib "^2.5.0" + uuid "^11.0.0" + +"@aws-amplify/data-schema-types@*": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@aws-amplify/data-schema-types/-/data-schema-types-1.2.0.tgz#fd4ed507adf0786f4ea005121726c72c739d4db0" + integrity sha512-1hy2r7jl3hQ5J/CGjhmPhFPcdGSakfme1ZLjlTMJZILfYifZLSlGRKNCelMb3J5N9203hyeT5XDi5yR47JL1TQ== + dependencies: + graphql "15.8.0" + rxjs "^7.8.1" + +"@aws-amplify/data-schema@^1.7.0": + version "1.21.1" + resolved "https://registry.yarnpkg.com/@aws-amplify/data-schema/-/data-schema-1.21.1.tgz#b16a373aeb8645e45f7a3826251e86be6391bbee" + integrity sha512-ZR7zHcjW9NKlCI39F03Ou/q//fobYNRe0w++3Ne75FU2eGGpi7MCIYEP5Hghued/PZkAuarF5dRt79aQt76V8w== + dependencies: + "@aws-amplify/data-schema-types" "*" + "@smithy/util-base64" "^3.0.0" + "@types/aws-lambda" "^8.10.134" + "@types/json-schema" "^7.0.15" + rxjs "^7.8.1" + +"@aws-amplify/datastore@5.0.89": + version "5.0.89" + resolved "https://registry.yarnpkg.com/@aws-amplify/datastore/-/datastore-5.0.89.tgz#5af0eff4e5d511d5ade123c16ad109e6f8aab184" + integrity sha512-8Mku5ZAeGWEjH6UHjycbIgjrVAg2JSyx8q9ZBbqcY1AhXpZ7y4r8PzY46FVAdmUq6jzhlSjGycZ6KSg7TRaY1A== + dependencies: + "@aws-amplify/api" "6.3.18" + "@aws-amplify/api-graphql" "4.7.22" + buffer "4.9.2" + idb "5.0.6" + immer "9.0.6" + rxjs "^7.8.1" + ulid "^2.3.0" + +"@aws-amplify/notifications@2.0.87": + version "2.0.87" + resolved "https://registry.yarnpkg.com/@aws-amplify/notifications/-/notifications-2.0.87.tgz#1eba9e520f5226e9066a68c8fe2e64617190bce3" + integrity sha512-GB/gYS9V9dj8gYpSVaf0JrnSv9Rd3g3sFGSCqFBSQjutGrPWAHHBMIQrQwr1p5Jt8QfCBoFN8CWcBvFlW7D/wQ== + dependencies: + "@aws-sdk/types" "3.398.0" + lodash "^4.17.21" + tslib "^2.5.0" + +"@aws-amplify/storage@6.9.6": + version "6.9.6" + resolved "https://registry.yarnpkg.com/@aws-amplify/storage/-/storage-6.9.6.tgz#ba351d105ea4549bbb8d506acbe18a90a224cc6d" + integrity sha512-bCpiToPwPgpgvH15T9ezI3uZCk/u+6JA0l5fqJDw3LUbU/UVXD7/P2pP7pFdES12NpAYkVQOUAjVlXk3VZ2+Dw== + dependencies: + "@aws-sdk/types" "3.398.0" + "@smithy/md5-js" "2.0.7" + buffer "4.9.2" + crc-32 "1.2.2" + fast-xml-parser "^4.4.1" + tslib "^2.5.0" + +"@aws-crypto/crc32@5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/crc32/-/crc32-5.2.0.tgz#cfcc22570949c98c6689cfcbd2d693d36cdae2e1" + integrity sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg== + dependencies: + "@aws-crypto/util" "^5.2.0" + "@aws-sdk/types" "^3.222.0" + tslib "^2.6.2" + +"@aws-crypto/sha256-browser@5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz#153895ef1dba6f9fce38af550e0ef58988eb649e" + integrity sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw== + dependencies: + "@aws-crypto/sha256-js" "^5.2.0" + "@aws-crypto/supports-web-crypto" "^5.2.0" + "@aws-crypto/util" "^5.2.0" + "@aws-sdk/types" "^3.222.0" + "@aws-sdk/util-locate-window" "^3.0.0" + "@smithy/util-utf8" "^2.0.0" + tslib "^2.6.2" + +"@aws-crypto/sha256-js@5.2.0", "@aws-crypto/sha256-js@^5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz#c4fdb773fdbed9a664fc1a95724e206cf3860042" + integrity sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA== + dependencies: + "@aws-crypto/util" "^5.2.0" + "@aws-sdk/types" "^3.222.0" + tslib "^2.6.2" + +"@aws-crypto/supports-web-crypto@^5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz#a1e399af29269be08e695109aa15da0a07b5b5fb" + integrity sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg== + dependencies: + tslib "^2.6.2" + +"@aws-crypto/util@^5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-5.2.0.tgz#71284c9cffe7927ddadac793c14f14886d3876da" + integrity sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ== + dependencies: + "@aws-sdk/types" "^3.222.0" + "@smithy/util-utf8" "^2.0.0" + tslib "^2.6.2" + +"@aws-sdk/client-firehose@3.621.0": + version "3.621.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-firehose/-/client-firehose-3.621.0.tgz#2bfb5bc59808dde055ccc18fcb89f6322326729a" + integrity sha512-XAjAkXdb35PDvBYph609Fxn4g00HYH/U6N4+KjF9gLQrdTU+wkjf3D9YD02DZNbApJVcu4eIxWh/8M25YkW02A== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/client-sso-oidc" "3.621.0" + "@aws-sdk/client-sts" "3.621.0" + "@aws-sdk/core" "3.621.0" + "@aws-sdk/credential-provider-node" "3.621.0" + "@aws-sdk/middleware-host-header" "3.620.0" + "@aws-sdk/middleware-logger" "3.609.0" + "@aws-sdk/middleware-recursion-detection" "3.620.0" + "@aws-sdk/middleware-user-agent" "3.620.0" + "@aws-sdk/region-config-resolver" "3.614.0" + "@aws-sdk/types" "3.609.0" + "@aws-sdk/util-endpoints" "3.614.0" + "@aws-sdk/util-user-agent-browser" "3.609.0" + "@aws-sdk/util-user-agent-node" "3.614.0" + "@smithy/config-resolver" "^3.0.5" + "@smithy/core" "^2.3.1" + "@smithy/fetch-http-handler" "^3.2.4" + "@smithy/hash-node" "^3.0.3" + "@smithy/invalid-dependency" "^3.0.3" + "@smithy/middleware-content-length" "^3.0.5" + "@smithy/middleware-endpoint" "^3.1.0" + "@smithy/middleware-retry" "^3.0.13" + "@smithy/middleware-serde" "^3.0.3" + "@smithy/middleware-stack" "^3.0.3" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/node-http-handler" "^3.1.4" + "@smithy/protocol-http" "^4.1.0" + "@smithy/smithy-client" "^3.1.11" + "@smithy/types" "^3.3.0" + "@smithy/url-parser" "^3.0.3" + "@smithy/util-base64" "^3.0.0" + "@smithy/util-body-length-browser" "^3.0.0" + "@smithy/util-body-length-node" "^3.0.0" + "@smithy/util-defaults-mode-browser" "^3.0.13" + "@smithy/util-defaults-mode-node" "^3.0.13" + "@smithy/util-endpoints" "^2.0.5" + "@smithy/util-middleware" "^3.0.3" + "@smithy/util-retry" "^3.0.3" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/client-kinesis@3.621.0": + version "3.621.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-kinesis/-/client-kinesis-3.621.0.tgz#3af1e18622638d20cd0fa3df5182978cb130ab86" + integrity sha512-53Omt/beFmTQPjQNpMuPMk5nMzYVsXCRiO+MeqygZEKYG1fWw/UGluCWVbi7WjClOHacsW8lQcsqIRvkPDFNag== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/client-sso-oidc" "3.621.0" + "@aws-sdk/client-sts" "3.621.0" + "@aws-sdk/core" "3.621.0" + "@aws-sdk/credential-provider-node" "3.621.0" + "@aws-sdk/middleware-host-header" "3.620.0" + "@aws-sdk/middleware-logger" "3.609.0" + "@aws-sdk/middleware-recursion-detection" "3.620.0" + "@aws-sdk/middleware-user-agent" "3.620.0" + "@aws-sdk/region-config-resolver" "3.614.0" + "@aws-sdk/types" "3.609.0" + "@aws-sdk/util-endpoints" "3.614.0" + "@aws-sdk/util-user-agent-browser" "3.609.0" + "@aws-sdk/util-user-agent-node" "3.614.0" + "@smithy/config-resolver" "^3.0.5" + "@smithy/core" "^2.3.1" + "@smithy/eventstream-serde-browser" "^3.0.5" + "@smithy/eventstream-serde-config-resolver" "^3.0.3" + "@smithy/eventstream-serde-node" "^3.0.4" + "@smithy/fetch-http-handler" "^3.2.4" + "@smithy/hash-node" "^3.0.3" + "@smithy/invalid-dependency" "^3.0.3" + "@smithy/middleware-content-length" "^3.0.5" + "@smithy/middleware-endpoint" "^3.1.0" + "@smithy/middleware-retry" "^3.0.13" + "@smithy/middleware-serde" "^3.0.3" + "@smithy/middleware-stack" "^3.0.3" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/node-http-handler" "^3.1.4" + "@smithy/protocol-http" "^4.1.0" + "@smithy/smithy-client" "^3.1.11" + "@smithy/types" "^3.3.0" + "@smithy/url-parser" "^3.0.3" + "@smithy/util-base64" "^3.0.0" + "@smithy/util-body-length-browser" "^3.0.0" + "@smithy/util-body-length-node" "^3.0.0" + "@smithy/util-defaults-mode-browser" "^3.0.13" + "@smithy/util-defaults-mode-node" "^3.0.13" + "@smithy/util-endpoints" "^2.0.5" + "@smithy/util-middleware" "^3.0.3" + "@smithy/util-retry" "^3.0.3" + "@smithy/util-utf8" "^3.0.0" + "@smithy/util-waiter" "^3.1.2" + tslib "^2.6.2" + +"@aws-sdk/client-personalize-events@3.621.0": + version "3.621.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-personalize-events/-/client-personalize-events-3.621.0.tgz#f061e00d2dc75b1165ace8280879119e78f9a577" + integrity sha512-qkVkqYvOe3WVuVNL/gRITGYFfHJCx2ijGFK7H3hNUJH3P4AwskmouAd1pWf+3cbGedRnj2is7iw7E602LeJIHA== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/client-sso-oidc" "3.621.0" + "@aws-sdk/client-sts" "3.621.0" + "@aws-sdk/core" "3.621.0" + "@aws-sdk/credential-provider-node" "3.621.0" + "@aws-sdk/middleware-host-header" "3.620.0" + "@aws-sdk/middleware-logger" "3.609.0" + "@aws-sdk/middleware-recursion-detection" "3.620.0" + "@aws-sdk/middleware-user-agent" "3.620.0" + "@aws-sdk/region-config-resolver" "3.614.0" + "@aws-sdk/types" "3.609.0" + "@aws-sdk/util-endpoints" "3.614.0" + "@aws-sdk/util-user-agent-browser" "3.609.0" + "@aws-sdk/util-user-agent-node" "3.614.0" + "@smithy/config-resolver" "^3.0.5" + "@smithy/core" "^2.3.1" + "@smithy/fetch-http-handler" "^3.2.4" + "@smithy/hash-node" "^3.0.3" + "@smithy/invalid-dependency" "^3.0.3" + "@smithy/middleware-content-length" "^3.0.5" + "@smithy/middleware-endpoint" "^3.1.0" + "@smithy/middleware-retry" "^3.0.13" + "@smithy/middleware-serde" "^3.0.3" + "@smithy/middleware-stack" "^3.0.3" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/node-http-handler" "^3.1.4" + "@smithy/protocol-http" "^4.1.0" + "@smithy/smithy-client" "^3.1.11" + "@smithy/types" "^3.3.0" + "@smithy/url-parser" "^3.0.3" + "@smithy/util-base64" "^3.0.0" + "@smithy/util-body-length-browser" "^3.0.0" + "@smithy/util-body-length-node" "^3.0.0" + "@smithy/util-defaults-mode-browser" "^3.0.13" + "@smithy/util-defaults-mode-node" "^3.0.13" + "@smithy/util-endpoints" "^2.0.5" + "@smithy/util-middleware" "^3.0.3" + "@smithy/util-retry" "^3.0.3" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/client-sso-oidc@3.621.0": + version "3.621.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.621.0.tgz#3fa3d468fbebbd93a5f75c1d51b63cc7af3ef17b" + integrity sha512-mMjk3mFUwV2Y68POf1BQMTF+F6qxt5tPu6daEUCNGC9Cenk3h2YXQQoS4/eSyYzuBiYk3vx49VgleRvdvkg8rg== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.621.0" + "@aws-sdk/credential-provider-node" "3.621.0" + "@aws-sdk/middleware-host-header" "3.620.0" + "@aws-sdk/middleware-logger" "3.609.0" + "@aws-sdk/middleware-recursion-detection" "3.620.0" + "@aws-sdk/middleware-user-agent" "3.620.0" + "@aws-sdk/region-config-resolver" "3.614.0" + "@aws-sdk/types" "3.609.0" + "@aws-sdk/util-endpoints" "3.614.0" + "@aws-sdk/util-user-agent-browser" "3.609.0" + "@aws-sdk/util-user-agent-node" "3.614.0" + "@smithy/config-resolver" "^3.0.5" + "@smithy/core" "^2.3.1" + "@smithy/fetch-http-handler" "^3.2.4" + "@smithy/hash-node" "^3.0.3" + "@smithy/invalid-dependency" "^3.0.3" + "@smithy/middleware-content-length" "^3.0.5" + "@smithy/middleware-endpoint" "^3.1.0" + "@smithy/middleware-retry" "^3.0.13" + "@smithy/middleware-serde" "^3.0.3" + "@smithy/middleware-stack" "^3.0.3" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/node-http-handler" "^3.1.4" + "@smithy/protocol-http" "^4.1.0" + "@smithy/smithy-client" "^3.1.11" + "@smithy/types" "^3.3.0" + "@smithy/url-parser" "^3.0.3" + "@smithy/util-base64" "^3.0.0" + "@smithy/util-body-length-browser" "^3.0.0" + "@smithy/util-body-length-node" "^3.0.0" + "@smithy/util-defaults-mode-browser" "^3.0.13" + "@smithy/util-defaults-mode-node" "^3.0.13" + "@smithy/util-endpoints" "^2.0.5" + "@smithy/util-middleware" "^3.0.3" + "@smithy/util-retry" "^3.0.3" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/client-sso@3.621.0": + version "3.621.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.621.0.tgz#c0eefeb9adcbc6bb7c91c32070404c8c91846825" + integrity sha512-xpKfikN4u0BaUYZA9FGUMkkDmfoIP0Q03+A86WjqDWhcOoqNA1DkHsE4kZ+r064ifkPUfcNuUvlkVTEoBZoFjA== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.621.0" + "@aws-sdk/middleware-host-header" "3.620.0" + "@aws-sdk/middleware-logger" "3.609.0" + "@aws-sdk/middleware-recursion-detection" "3.620.0" + "@aws-sdk/middleware-user-agent" "3.620.0" + "@aws-sdk/region-config-resolver" "3.614.0" + "@aws-sdk/types" "3.609.0" + "@aws-sdk/util-endpoints" "3.614.0" + "@aws-sdk/util-user-agent-browser" "3.609.0" + "@aws-sdk/util-user-agent-node" "3.614.0" + "@smithy/config-resolver" "^3.0.5" + "@smithy/core" "^2.3.1" + "@smithy/fetch-http-handler" "^3.2.4" + "@smithy/hash-node" "^3.0.3" + "@smithy/invalid-dependency" "^3.0.3" + "@smithy/middleware-content-length" "^3.0.5" + "@smithy/middleware-endpoint" "^3.1.0" + "@smithy/middleware-retry" "^3.0.13" + "@smithy/middleware-serde" "^3.0.3" + "@smithy/middleware-stack" "^3.0.3" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/node-http-handler" "^3.1.4" + "@smithy/protocol-http" "^4.1.0" + "@smithy/smithy-client" "^3.1.11" + "@smithy/types" "^3.3.0" + "@smithy/url-parser" "^3.0.3" + "@smithy/util-base64" "^3.0.0" + "@smithy/util-body-length-browser" "^3.0.0" + "@smithy/util-body-length-node" "^3.0.0" + "@smithy/util-defaults-mode-browser" "^3.0.13" + "@smithy/util-defaults-mode-node" "^3.0.13" + "@smithy/util-endpoints" "^2.0.5" + "@smithy/util-middleware" "^3.0.3" + "@smithy/util-retry" "^3.0.3" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/client-sts@3.621.0": + version "3.621.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.621.0.tgz#2994f601790893901704c5df56c837e89f279952" + integrity sha512-707uiuReSt+nAx6d0c21xLjLm2lxeKc7padxjv92CIrIocnQSlJPxSCM7r5zBhwiahJA6MNQwmTl2xznU67KgA== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/client-sso-oidc" "3.621.0" + "@aws-sdk/core" "3.621.0" + "@aws-sdk/credential-provider-node" "3.621.0" + "@aws-sdk/middleware-host-header" "3.620.0" + "@aws-sdk/middleware-logger" "3.609.0" + "@aws-sdk/middleware-recursion-detection" "3.620.0" + "@aws-sdk/middleware-user-agent" "3.620.0" + "@aws-sdk/region-config-resolver" "3.614.0" + "@aws-sdk/types" "3.609.0" + "@aws-sdk/util-endpoints" "3.614.0" + "@aws-sdk/util-user-agent-browser" "3.609.0" + "@aws-sdk/util-user-agent-node" "3.614.0" + "@smithy/config-resolver" "^3.0.5" + "@smithy/core" "^2.3.1" + "@smithy/fetch-http-handler" "^3.2.4" + "@smithy/hash-node" "^3.0.3" + "@smithy/invalid-dependency" "^3.0.3" + "@smithy/middleware-content-length" "^3.0.5" + "@smithy/middleware-endpoint" "^3.1.0" + "@smithy/middleware-retry" "^3.0.13" + "@smithy/middleware-serde" "^3.0.3" + "@smithy/middleware-stack" "^3.0.3" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/node-http-handler" "^3.1.4" + "@smithy/protocol-http" "^4.1.0" + "@smithy/smithy-client" "^3.1.11" + "@smithy/types" "^3.3.0" + "@smithy/url-parser" "^3.0.3" + "@smithy/util-base64" "^3.0.0" + "@smithy/util-body-length-browser" "^3.0.0" + "@smithy/util-body-length-node" "^3.0.0" + "@smithy/util-defaults-mode-browser" "^3.0.13" + "@smithy/util-defaults-mode-node" "^3.0.13" + "@smithy/util-endpoints" "^2.0.5" + "@smithy/util-middleware" "^3.0.3" + "@smithy/util-retry" "^3.0.3" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/core@3.621.0": + version "3.621.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.621.0.tgz#e38c56c3ce0c819ca1185eaabcb98412429aaca3" + integrity sha512-CtOwWmDdEiINkGXD93iGfXjN0WmCp9l45cDWHHGa8lRgEDyhuL7bwd/pH5aSzj0j8SiQBG2k0S7DHbd5RaqvbQ== + dependencies: + "@smithy/core" "^2.3.1" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/protocol-http" "^4.1.0" + "@smithy/signature-v4" "^4.1.0" + "@smithy/smithy-client" "^3.1.11" + "@smithy/types" "^3.3.0" + "@smithy/util-middleware" "^3.0.3" + fast-xml-parser "4.4.1" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-env@3.620.1": + version "3.620.1" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.620.1.tgz#d4692c49a65ebc11dae3f7f8b053fee9268a953c" + integrity sha512-ExuILJ2qLW5ZO+rgkNRj0xiAipKT16Rk77buvPP8csR7kkCflT/gXTyzRe/uzIiETTxM7tr8xuO9MP/DQXqkfg== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/property-provider" "^3.1.3" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-http@3.621.0": + version "3.621.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.621.0.tgz#5f944bf548f203d842cf71a5792f73c205544627" + integrity sha512-/jc2tEsdkT1QQAI5Dvoci50DbSxtJrevemwFsm0B73pwCcOQZ5ZwwSdVqGsPutzYzUVx3bcXg3LRL7jLACqRIg== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/fetch-http-handler" "^3.2.4" + "@smithy/node-http-handler" "^3.1.4" + "@smithy/property-provider" "^3.1.3" + "@smithy/protocol-http" "^4.1.0" + "@smithy/smithy-client" "^3.1.11" + "@smithy/types" "^3.3.0" + "@smithy/util-stream" "^3.1.3" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-ini@3.621.0": + version "3.621.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.621.0.tgz#bda2365f88fee40e3ae067b08bf484106c339222" + integrity sha512-0EWVnSc+JQn5HLnF5Xv405M8n4zfdx9gyGdpnCmAmFqEDHA8LmBdxJdpUk1Ovp/I5oPANhjojxabIW5f1uU0RA== + dependencies: + "@aws-sdk/credential-provider-env" "3.620.1" + "@aws-sdk/credential-provider-http" "3.621.0" + "@aws-sdk/credential-provider-process" "3.620.1" + "@aws-sdk/credential-provider-sso" "3.621.0" + "@aws-sdk/credential-provider-web-identity" "3.621.0" + "@aws-sdk/types" "3.609.0" + "@smithy/credential-provider-imds" "^3.2.0" + "@smithy/property-provider" "^3.1.3" + "@smithy/shared-ini-file-loader" "^3.1.4" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-node@3.621.0": + version "3.621.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.621.0.tgz#9cc5052760a9f9d70d70f12ddbdbf0d59bf13a47" + integrity sha512-4JqpccUgz5Snanpt2+53hbOBbJQrSFq7E1sAAbgY6BKVQUsW5qyXqnjvSF32kDeKa5JpBl3bBWLZl04IadcPHw== + dependencies: + "@aws-sdk/credential-provider-env" "3.620.1" + "@aws-sdk/credential-provider-http" "3.621.0" + "@aws-sdk/credential-provider-ini" "3.621.0" + "@aws-sdk/credential-provider-process" "3.620.1" + "@aws-sdk/credential-provider-sso" "3.621.0" + "@aws-sdk/credential-provider-web-identity" "3.621.0" + "@aws-sdk/types" "3.609.0" + "@smithy/credential-provider-imds" "^3.2.0" + "@smithy/property-provider" "^3.1.3" + "@smithy/shared-ini-file-loader" "^3.1.4" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-process@3.620.1": + version "3.620.1" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.620.1.tgz#10387cf85400420bb4bbda9cc56937dcc6d6d0ee" + integrity sha512-hWqFMidqLAkaV9G460+1at6qa9vySbjQKKc04p59OT7lZ5cO5VH5S4aI05e+m4j364MBROjjk2ugNvfNf/8ILg== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/property-provider" "^3.1.3" + "@smithy/shared-ini-file-loader" "^3.1.4" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-sso@3.621.0": + version "3.621.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.621.0.tgz#710f413708cb372f9f94e8eb9726cf263ffd83e3" + integrity sha512-Kza0jcFeA/GEL6xJlzR2KFf1PfZKMFnxfGzJzl5yN7EjoGdMijl34KaRyVnfRjnCWcsUpBWKNIDk9WZVMY9yiw== + dependencies: + "@aws-sdk/client-sso" "3.621.0" + "@aws-sdk/token-providers" "3.614.0" + "@aws-sdk/types" "3.609.0" + "@smithy/property-provider" "^3.1.3" + "@smithy/shared-ini-file-loader" "^3.1.4" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-web-identity@3.621.0": + version "3.621.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.621.0.tgz#b25878c0a05dad60cd5f91e7e5a31a145c2f14be" + integrity sha512-w7ASSyfNvcx7+bYGep3VBgC3K6vEdLmlpjT7nSIHxxQf+WSdvy+HynwJosrpZax0sK5q0D1Jpn/5q+r5lwwW6w== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/property-provider" "^3.1.3" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-host-header@3.620.0": + version "3.620.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.620.0.tgz#b561d419a08a984ba364c193376b482ff5224d74" + integrity sha512-VMtPEZwqYrII/oUkffYsNWY9PZ9xpNJpMgmyU0rlDQ25O1c0Hk3fJmZRe6pEkAJ0omD7kLrqGl1DUjQVxpd/Rg== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/protocol-http" "^4.1.0" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-logger@3.609.0": + version "3.609.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.609.0.tgz#ed44d201f091b8bac908cbf14724c7a4d492553f" + integrity sha512-S62U2dy4jMDhDFDK5gZ4VxFdWzCtLzwbYyFZx2uvPYTECkepLUfzLic2BHg2Qvtu4QjX+oGE3P/7fwaGIsGNuQ== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-recursion-detection@3.620.0": + version "3.620.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.620.0.tgz#f8270dfff843fd756be971e5673f89c6a24c6513" + integrity sha512-nh91S7aGK3e/o1ck64sA/CyoFw+gAYj2BDOnoNa6ouyCrVJED96ZXWbhye/fz9SgmNUZR2g7GdVpiLpMKZoI5w== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/protocol-http" "^4.1.0" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-user-agent@3.620.0": + version "3.620.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.620.0.tgz#1fe3104f04f576a942cf0469bfbd73c38eef3d9e" + integrity sha512-bvS6etn+KsuL32ubY5D3xNof1qkenpbJXf/ugGXbg0n98DvDFQ/F+SMLxHgbnER5dsKYchNnhmtI6/FC3HFu/A== + dependencies: + "@aws-sdk/types" "3.609.0" + "@aws-sdk/util-endpoints" "3.614.0" + "@smithy/protocol-http" "^4.1.0" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@aws-sdk/region-config-resolver@3.614.0": + version "3.614.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.614.0.tgz#9cebb31a5bcfea2a41891fff7f28d0164cde179a" + integrity sha512-vDCeMXvic/LU0KFIUjpC3RiSTIkkvESsEfbVHiHH0YINfl8HnEqR5rj+L8+phsCeVg2+LmYwYxd5NRz4PHxt5g== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/types" "^3.3.0" + "@smithy/util-config-provider" "^3.0.0" + "@smithy/util-middleware" "^3.0.3" + tslib "^2.6.2" + +"@aws-sdk/token-providers@3.614.0": + version "3.614.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.614.0.tgz#88da04f6d4ce916b0b0f6e045676d04201fb47fd" + integrity sha512-okItqyY6L9IHdxqs+Z116y5/nda7rHxLvROxtAJdLavWTYDydxrZstImNgGWTeVdmc0xX2gJCI77UYUTQWnhRw== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/property-provider" "^3.1.3" + "@smithy/shared-ini-file-loader" "^3.1.4" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@aws-sdk/types@3.387.0": + version "3.387.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.387.0.tgz#15a968344956b2587dbab1224718d72329e050f4" + integrity sha512-YTjFabNwjTF+6yl88f0/tWff018qmmgMmjlw45s6sdVKueWxdxV68U7gepNLF2nhaQPZa6FDOBoA51NaviVs0Q== + dependencies: + "@smithy/types" "^2.1.0" + tslib "^2.5.0" + +"@aws-sdk/types@3.398.0": + version "3.398.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.398.0.tgz#8ce02559536670f9188cddfce32e9dd12b4fe965" + integrity sha512-r44fkS+vsEgKCuEuTV+TIk0t0m5ZlXHNjSDYEUvzLStbbfUFiNus/YG4UCa0wOk9R7VuQI67badsvvPeVPCGDQ== + dependencies: + "@smithy/types" "^2.2.2" + tslib "^2.5.0" + +"@aws-sdk/types@3.609.0": + version "3.609.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.609.0.tgz#06b39d799c9f197a7b43670243e8e78a3bf7d6a5" + integrity sha512-+Tqnh9w0h2LcrUsdXyT1F8mNhXz+tVYBtP19LpeEGntmvHwa2XzvLUCWpoIAIVsHp5+HdB2X9Sn0KAtmbFXc2Q== + dependencies: + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + +"@aws-sdk/types@^3.222.0": + version "3.893.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.893.0.tgz#1afbdb9d62bf86caeac380e3cac11a051076400a" + integrity sha512-Aht1nn5SnA0N+Tjv0dzhAY7CQbxVtmq1bBR6xI0MhG7p2XYVh1wXuKTzrldEvQWwA3odOYunAfT9aBiKZx9qIg== + dependencies: + "@smithy/types" "^4.5.0" + tslib "^2.6.2" + +"@aws-sdk/util-endpoints@3.614.0": + version "3.614.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.614.0.tgz#6564b0ffd7dc3728221e9f9821f5aab1cc58468e" + integrity sha512-wK2cdrXHH4oz4IomV/yrGkftU9A+ITB6nFL+rxxyO78is2ifHJpFdV4aqk4LSkXYPi6CXWNru/Dqc7yiKXgJPw== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/types" "^3.3.0" + "@smithy/util-endpoints" "^2.0.5" + tslib "^2.6.2" + +"@aws-sdk/util-locate-window@^3.0.0": + version "3.893.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.893.0.tgz#5df15f24e1edbe12ff1fe8906f823b51cd53bae8" + integrity sha512-T89pFfgat6c8nMmpI8eKjBcDcgJq36+m9oiXbcUzeU55MP9ZuGgBomGjGnHaEyF36jenW9gmg3NfZDm0AO2XPg== + dependencies: + tslib "^2.6.2" + +"@aws-sdk/util-user-agent-browser@3.609.0": + version "3.609.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.609.0.tgz#aa15421b2e32ae8bc589dac2bd6e8969832ce588" + integrity sha512-fojPU+mNahzQ0YHYBsx0ZIhmMA96H+ZIZ665ObU9tl+SGdbLneVZVikGve+NmHTQwHzwkFsZYYnVKAkreJLAtA== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/types" "^3.3.0" + bowser "^2.11.0" + tslib "^2.6.2" + +"@aws-sdk/util-user-agent-node@3.614.0": + version "3.614.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.614.0.tgz#1e3f49a80f841a3f21647baed2adce01aac5beb5" + integrity sha512-15ElZT88peoHnq5TEoEtZwoXTXRxNrk60TZNdpl/TUBJ5oNJ9Dqb5Z4ryb8ofN6nm9aFf59GVAerFDz8iUoHBA== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.22.13": version "7.22.13" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" @@ -3109,6 +3796,502 @@ resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== +"@smithy/abort-controller@^3.1.9": + version "3.1.9" + resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-3.1.9.tgz#47d323f754136a489e972d7fd465d534d72fcbff" + integrity sha512-yiW0WI30zj8ZKoSYNx90no7ugVn3khlyH/z5W8qtKBtVE6awRALbhSG+2SAHA1r6bO/6M9utxYKVZ3PCJ1rWxw== + dependencies: + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@smithy/config-resolver@^3.0.13", "@smithy/config-resolver@^3.0.5": + version "3.0.13" + resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-3.0.13.tgz#653643a77a33d0f5907a5e7582353886b07ba752" + integrity sha512-Gr/qwzyPaTL1tZcq8WQyHhTZREER5R1Wytmz4WnVGL4onA3dNk6Btll55c8Vr58pLdvWZmtG8oZxJTw3t3q7Jg== + dependencies: + "@smithy/node-config-provider" "^3.1.12" + "@smithy/types" "^3.7.2" + "@smithy/util-config-provider" "^3.0.0" + "@smithy/util-middleware" "^3.0.11" + tslib "^2.6.2" + +"@smithy/core@^2.3.1", "@smithy/core@^2.5.7": + version "2.5.7" + resolved "https://registry.yarnpkg.com/@smithy/core/-/core-2.5.7.tgz#b545649071905f064cb0407102f3b9159246f8d9" + integrity sha512-8olpW6mKCa0v+ibCjoCzgZHQx1SQmZuW/WkrdZo73wiTprTH6qhmskT60QLFdT9DRa5mXxjz89kQPZ7ZSsoqqg== + dependencies: + "@smithy/middleware-serde" "^3.0.11" + "@smithy/protocol-http" "^4.1.8" + "@smithy/types" "^3.7.2" + "@smithy/util-body-length-browser" "^3.0.0" + "@smithy/util-middleware" "^3.0.11" + "@smithy/util-stream" "^3.3.4" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@smithy/credential-provider-imds@^3.2.0", "@smithy/credential-provider-imds@^3.2.8": + version "3.2.8" + resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.8.tgz#27ed2747074c86a7d627a98e56f324a65cba88de" + integrity sha512-ZCY2yD0BY+K9iMXkkbnjo+08T2h8/34oHd0Jmh6BZUSZwaaGlGCyBT/3wnS7u7Xl33/EEfN4B6nQr3Gx5bYxgw== + dependencies: + "@smithy/node-config-provider" "^3.1.12" + "@smithy/property-provider" "^3.1.11" + "@smithy/types" "^3.7.2" + "@smithy/url-parser" "^3.0.11" + tslib "^2.6.2" + +"@smithy/eventstream-codec@^3.1.10": + version "3.1.10" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-3.1.10.tgz#0c1a3457e7a23b71cd71525ceb668f8569a84dad" + integrity sha512-323B8YckSbUH0nMIpXn7HZsAVKHYHFUODa8gG9cHo0ySvA1fr5iWaNT+iIL0UCqUzG6QPHA3BSsBtRQou4mMqQ== + dependencies: + "@aws-crypto/crc32" "5.2.0" + "@smithy/types" "^3.7.2" + "@smithy/util-hex-encoding" "^3.0.0" + tslib "^2.6.2" + +"@smithy/eventstream-serde-browser@^3.0.5": + version "3.0.14" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-3.0.14.tgz#0c3584c7cde2e210aacdfbbd2b57c1d7e2ca3b95" + integrity sha512-kbrt0vjOIihW3V7Cqj1SXQvAI5BR8SnyQYsandva0AOR307cXAc+IhPngxIPslxTLfxwDpNu0HzCAq6g42kCPg== + dependencies: + "@smithy/eventstream-serde-universal" "^3.0.13" + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@smithy/eventstream-serde-config-resolver@^3.0.3": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.0.11.tgz#5edceba836debea165ea93145231036f6286d67c" + integrity sha512-P2pnEp4n75O+QHjyO7cbw/vsw5l93K/8EWyjNCAAybYwUmj3M+hjSQZ9P5TVdUgEG08ueMAP5R4FkuSkElZ5tQ== + dependencies: + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@smithy/eventstream-serde-node@^3.0.4": + version "3.0.13" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-3.0.13.tgz#5aebd7b553becee277e411a2b69f6af8c9d7b3a6" + integrity sha512-zqy/9iwbj8Wysmvi7Lq7XFLeDgjRpTbCfwBhJa8WbrylTAHiAu6oQTwdY7iu2lxigbc9YYr9vPv5SzYny5tCXQ== + dependencies: + "@smithy/eventstream-serde-universal" "^3.0.13" + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@smithy/eventstream-serde-universal@^3.0.13": + version "3.0.13" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-3.0.13.tgz#609c922ea14a0a3eed23a28ac110344c935704eb" + integrity sha512-L1Ib66+gg9uTnqp/18Gz4MDpJPKRE44geOjOQ2SVc0eiaO5l255ADziATZgjQjqumC7yPtp1XnjHlF1srcwjKw== + dependencies: + "@smithy/eventstream-codec" "^3.1.10" + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@smithy/fetch-http-handler@^3.2.4": + version "3.2.9" + resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.9.tgz#8d5199c162a37caa37a8b6848eefa9ca58221a0b" + integrity sha512-hYNVQOqhFQ6vOpenifFME546f0GfJn2OiQ3M0FDmuUu8V/Uiwy2wej7ZXxFBNqdx0R5DZAqWM1l6VRhGz8oE6A== + dependencies: + "@smithy/protocol-http" "^4.1.4" + "@smithy/querystring-builder" "^3.0.7" + "@smithy/types" "^3.5.0" + "@smithy/util-base64" "^3.0.0" + tslib "^2.6.2" + +"@smithy/fetch-http-handler@^4.1.3": + version "4.1.3" + resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-4.1.3.tgz#fc590dea2470d32559ae298306f1277729d24aa9" + integrity sha512-6SxNltSncI8s689nvnzZQc/dPXcpHQ34KUj6gR/HBroytKOd/isMG3gJF/zBE1TBmTT18TXyzhg3O3SOOqGEhA== + dependencies: + "@smithy/protocol-http" "^4.1.8" + "@smithy/querystring-builder" "^3.0.11" + "@smithy/types" "^3.7.2" + "@smithy/util-base64" "^3.0.0" + tslib "^2.6.2" + +"@smithy/hash-node@^3.0.3": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-3.0.11.tgz#99e09ead3fc99c8cd7ca0f254ea0e35714f2a0d3" + integrity sha512-emP23rwYyZhQBvklqTtwetkQlqbNYirDiEEwXl2v0GYWMnCzxst7ZaRAnWuy28njp5kAH54lvkdG37MblZzaHA== + dependencies: + "@smithy/types" "^3.7.2" + "@smithy/util-buffer-from" "^3.0.0" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@smithy/invalid-dependency@^3.0.3": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-3.0.11.tgz#8144d7b0af9d34ab5f672e1f674f97f8740bb9ae" + integrity sha512-NuQmVPEJjUX6c+UELyVz8kUx8Q539EDeNwbRyu4IIF8MeV7hUtq1FB3SHVyki2u++5XLMFqngeMKk7ccspnNyQ== + dependencies: + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@smithy/is-array-buffer@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz#f84f0d9f9a36601a9ca9381688bd1b726fd39111" + integrity sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA== + dependencies: + tslib "^2.6.2" + +"@smithy/is-array-buffer@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz#9a95c2d46b8768946a9eec7f935feaddcffa5e7a" + integrity sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ== + dependencies: + tslib "^2.6.2" + +"@smithy/md5-js@2.0.7": + version "2.0.7" + resolved "https://registry.yarnpkg.com/@smithy/md5-js/-/md5-js-2.0.7.tgz#4dea27b20b065857f953c74dbaa050003f48a374" + integrity sha512-2i2BpXF9pI5D1xekqUsgQ/ohv5+H//G9FlawJrkOJskV18PgJ8LiNbLiskMeYt07yAsSTZR7qtlcAaa/GQLWww== + dependencies: + "@smithy/types" "^2.3.1" + "@smithy/util-utf8" "^2.0.0" + tslib "^2.5.0" + +"@smithy/middleware-content-length@^3.0.5": + version "3.0.13" + resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-3.0.13.tgz#6e08fe52739ac8fb3996088e0f8837e4b2ea187f" + integrity sha512-zfMhzojhFpIX3P5ug7jxTjfUcIPcGjcQYzB9t+rv0g1TX7B0QdwONW+ATouaLoD7h7LOw/ZlXfkq4xJ/g2TrIw== + dependencies: + "@smithy/protocol-http" "^4.1.8" + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@smithy/middleware-endpoint@^3.1.0", "@smithy/middleware-endpoint@^3.2.8": + version "3.2.8" + resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-3.2.8.tgz#6ca5de80543ba0f0d40e15dc3f9d0f14d192e06e" + integrity sha512-OEJZKVUEhMOqMs3ktrTWp7UvvluMJEvD5XgQwRePSbDg1VvBaL8pX8mwPltFn6wk1GySbcVwwyldL8S+iqnrEQ== + dependencies: + "@smithy/core" "^2.5.7" + "@smithy/middleware-serde" "^3.0.11" + "@smithy/node-config-provider" "^3.1.12" + "@smithy/shared-ini-file-loader" "^3.1.12" + "@smithy/types" "^3.7.2" + "@smithy/url-parser" "^3.0.11" + "@smithy/util-middleware" "^3.0.11" + tslib "^2.6.2" + +"@smithy/middleware-retry@^3.0.13": + version "3.0.34" + resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-3.0.34.tgz#136c89fc22d70819fdefc51b0d24952cf98883f1" + integrity sha512-yVRr/AAtPZlUvwEkrq7S3x7Z8/xCd97m2hLDaqdz6ucP2RKHsBjEqaUA2ebNv2SsZoPEi+ZD0dZbOB1u37tGCA== + dependencies: + "@smithy/node-config-provider" "^3.1.12" + "@smithy/protocol-http" "^4.1.8" + "@smithy/service-error-classification" "^3.0.11" + "@smithy/smithy-client" "^3.7.0" + "@smithy/types" "^3.7.2" + "@smithy/util-middleware" "^3.0.11" + "@smithy/util-retry" "^3.0.11" + tslib "^2.6.2" + uuid "^9.0.1" + +"@smithy/middleware-serde@^3.0.11", "@smithy/middleware-serde@^3.0.3": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-3.0.11.tgz#c7d54e0add4f83e05c6878a011fc664e21022f12" + integrity sha512-KzPAeySp/fOoQA82TpnwItvX8BBURecpx6ZMu75EZDkAcnPtO6vf7q4aH5QHs/F1s3/snQaSFbbUMcFFZ086Mw== + dependencies: + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@smithy/middleware-stack@^3.0.11", "@smithy/middleware-stack@^3.0.3": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-3.0.11.tgz#453af2096924e4064d9da4e053cfdf65d9a36acc" + integrity sha512-1HGo9a6/ikgOMrTrWL/WiN9N8GSVYpuRQO5kjstAq4CvV59bjqnh7TbdXGQ4vxLD3xlSjfBjq5t1SOELePsLnA== + dependencies: + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@smithy/node-config-provider@^3.1.12", "@smithy/node-config-provider@^3.1.4": + version "3.1.12" + resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-3.1.12.tgz#1b1d674fc83f943dc7b3017e37f16f374e878a6c" + integrity sha512-O9LVEu5J/u/FuNlZs+L7Ikn3lz7VB9hb0GtPT9MQeiBmtK8RSY3ULmsZgXhe6VAlgTw0YO+paQx4p8xdbs43vQ== + dependencies: + "@smithy/property-provider" "^3.1.11" + "@smithy/shared-ini-file-loader" "^3.1.12" + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@smithy/node-http-handler@^3.1.4", "@smithy/node-http-handler@^3.3.3": + version "3.3.3" + resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-3.3.3.tgz#94dbb3f15342b656ceba2b26e14aa741cace8919" + integrity sha512-BrpZOaZ4RCbcJ2igiSNG16S+kgAc65l/2hmxWdmhyoGWHTLlzQzr06PXavJp9OBlPEG/sHlqdxjWmjzV66+BSQ== + dependencies: + "@smithy/abort-controller" "^3.1.9" + "@smithy/protocol-http" "^4.1.8" + "@smithy/querystring-builder" "^3.0.11" + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@smithy/property-provider@^3.1.11", "@smithy/property-provider@^3.1.3": + version "3.1.11" + resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-3.1.11.tgz#161cf1c2a2ada361e417382c57f5ba6fbca8acad" + integrity sha512-I/+TMc4XTQ3QAjXfOcUWbSS073oOEAxgx4aZy8jHaf8JQnRkq2SZWw8+PfDtBvLUjcGMdxl+YwtzWe6i5uhL/A== + dependencies: + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@smithy/protocol-http@^4.1.0", "@smithy/protocol-http@^4.1.4", "@smithy/protocol-http@^4.1.8": + version "4.1.8" + resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-4.1.8.tgz#0461758671335f65e8ff3fc0885ab7ed253819c9" + integrity sha512-hmgIAVyxw1LySOwkgMIUN0kjN8TG9Nc85LJeEmEE/cNEe2rkHDUWhnJf2gxcSRFLWsyqWsrZGw40ROjUogg+Iw== + dependencies: + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@smithy/querystring-builder@^3.0.11", "@smithy/querystring-builder@^3.0.7": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-3.0.11.tgz#2ed04adbe725671824c5613d0d6f9376d791a909" + integrity sha512-u+5HV/9uJaeLj5XTb6+IEF/dokWWkEqJ0XiaRRogyREmKGUgZnNecLucADLdauWFKUNbQfulHFEZEdjwEBjXRg== + dependencies: + "@smithy/types" "^3.7.2" + "@smithy/util-uri-escape" "^3.0.0" + tslib "^2.6.2" + +"@smithy/querystring-parser@^3.0.11": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-3.0.11.tgz#9d3177ea19ce8462f18d9712b395239e1ca1f969" + integrity sha512-Je3kFvCsFMnso1ilPwA7GtlbPaTixa3WwC+K21kmMZHsBEOZYQaqxcMqeFFoU7/slFjKDIpiiPydvdJm8Q/MCw== + dependencies: + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@smithy/service-error-classification@^3.0.11": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-3.0.11.tgz#d3d7fc0aacd2e60d022507367e55c7939e5bcb8a" + integrity sha512-QnYDPkyewrJzCyaeI2Rmp7pDwbUETe+hU8ADkXmgNusO1bgHBH7ovXJiYmba8t0fNfJx75fE8dlM6SEmZxheog== + dependencies: + "@smithy/types" "^3.7.2" + +"@smithy/shared-ini-file-loader@^3.1.12", "@smithy/shared-ini-file-loader@^3.1.4": + version "3.1.12" + resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.12.tgz#d98b1b663eb18935ce2cbc79024631d34f54042a" + integrity sha512-1xKSGI+U9KKdbG2qDvIR9dGrw3CNx+baqJfyr0igKEpjbHL5stsqAesYBzHChYHlelWtb87VnLWlhvfCz13H8Q== + dependencies: + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@smithy/signature-v4@^4.1.0": + version "4.2.4" + resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-4.2.4.tgz#3501d3d09fd82768867bfc00a7be4bad62f62f4d" + integrity sha512-5JWeMQYg81TgU4cG+OexAWdvDTs5JDdbEZx+Qr1iPbvo91QFGzjy0IkXAKaXUHqmKUJgSHK0ZxnCkgZpzkeNTA== + dependencies: + "@smithy/is-array-buffer" "^3.0.0" + "@smithy/protocol-http" "^4.1.8" + "@smithy/types" "^3.7.2" + "@smithy/util-hex-encoding" "^3.0.0" + "@smithy/util-middleware" "^3.0.11" + "@smithy/util-uri-escape" "^3.0.0" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@smithy/smithy-client@^3.1.11", "@smithy/smithy-client@^3.7.0": + version "3.7.0" + resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-3.7.0.tgz#8cfaa7b68b7af15e588b96aa14e5dce393f85839" + integrity sha512-9wYrjAZFlqWhgVo3C4y/9kpc68jgiSsKUnsFPzr/MSiRL93+QRDafGTfhhKAb2wsr69Ru87WTiqSfQusSmWipA== + dependencies: + "@smithy/core" "^2.5.7" + "@smithy/middleware-endpoint" "^3.2.8" + "@smithy/middleware-stack" "^3.0.11" + "@smithy/protocol-http" "^4.1.8" + "@smithy/types" "^3.7.2" + "@smithy/util-stream" "^3.3.4" + tslib "^2.6.2" + +"@smithy/types@^2.1.0", "@smithy/types@^2.2.2", "@smithy/types@^2.3.1": + version "2.12.0" + resolved "https://registry.yarnpkg.com/@smithy/types/-/types-2.12.0.tgz#c44845f8ba07e5e8c88eda5aed7e6a0c462da041" + integrity sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw== + dependencies: + tslib "^2.6.2" + +"@smithy/types@^3.3.0", "@smithy/types@^3.5.0", "@smithy/types@^3.7.2": + version "3.7.2" + resolved "https://registry.yarnpkg.com/@smithy/types/-/types-3.7.2.tgz#05cb14840ada6f966de1bf9a9c7dd86027343e10" + integrity sha512-bNwBYYmN8Eh9RyjS1p2gW6MIhSO2rl7X9QeLM8iTdcGRP+eDiIWDt66c9IysCc22gefKszZv+ubV9qZc7hdESg== + dependencies: + tslib "^2.6.2" + +"@smithy/types@^4.5.0": + version "4.5.0" + resolved "https://registry.yarnpkg.com/@smithy/types/-/types-4.5.0.tgz#850e334662a1ef1286c35814940c80880400a370" + integrity sha512-RkUpIOsVlAwUIZXO1dsz8Zm+N72LClFfsNqf173catVlvRZiwPy0x2u0JLEA4byreOPKDZPGjmPDylMoP8ZJRg== + dependencies: + tslib "^2.6.2" + +"@smithy/url-parser@^3.0.11", "@smithy/url-parser@^3.0.3": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-3.0.11.tgz#e5f5ffabfb6230159167cf4cc970705fca6b8b2d" + integrity sha512-TmlqXkSk8ZPhfc+SQutjmFr5FjC0av3GZP4B/10caK1SbRwe/v+Wzu/R6xEKxoNqL+8nY18s1byiy6HqPG37Aw== + dependencies: + "@smithy/querystring-parser" "^3.0.11" + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@smithy/util-base64@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-base64/-/util-base64-3.0.0.tgz#f7a9a82adf34e27a72d0719395713edf0e493017" + integrity sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ== + dependencies: + "@smithy/util-buffer-from" "^3.0.0" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@smithy/util-body-length-browser@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-body-length-browser/-/util-body-length-browser-3.0.0.tgz#86ec2f6256310b4845a2f064e2f571c1ca164ded" + integrity sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ== + dependencies: + tslib "^2.6.2" + +"@smithy/util-body-length-node@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-body-length-node/-/util-body-length-node-3.0.0.tgz#99a291bae40d8932166907fe981d6a1f54298a6d" + integrity sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA== + dependencies: + tslib "^2.6.2" + +"@smithy/util-buffer-from@^2.0.0", "@smithy/util-buffer-from@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz#6fc88585165ec73f8681d426d96de5d402021e4b" + integrity sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA== + dependencies: + "@smithy/is-array-buffer" "^2.2.0" + tslib "^2.6.2" + +"@smithy/util-buffer-from@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz#559fc1c86138a89b2edaefc1e6677780c24594e3" + integrity sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA== + dependencies: + "@smithy/is-array-buffer" "^3.0.0" + tslib "^2.6.2" + +"@smithy/util-config-provider@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-config-provider/-/util-config-provider-3.0.0.tgz#62c6b73b22a430e84888a8f8da4b6029dd5b8efe" + integrity sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ== + dependencies: + tslib "^2.6.2" + +"@smithy/util-defaults-mode-browser@^3.0.13": + version "3.0.34" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.34.tgz#885312529599cf24b09335cb20439c838e452f9f" + integrity sha512-FumjjF631lR521cX+svMLBj3SwSDh9VdtyynTYDAiBDEf8YPP5xORNXKQ9j0105o5+ARAGnOOP/RqSl40uXddA== + dependencies: + "@smithy/property-provider" "^3.1.11" + "@smithy/smithy-client" "^3.7.0" + "@smithy/types" "^3.7.2" + bowser "^2.11.0" + tslib "^2.6.2" + +"@smithy/util-defaults-mode-node@^3.0.13": + version "3.0.34" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.34.tgz#5eb0d97231a34e137980abfb08ea5e3a8f2156f7" + integrity sha512-vN6aHfzW9dVVzkI0wcZoUXvfjkl4CSbM9nE//08lmUMyf00S75uuCpTrqF9uD4bD9eldIXlt53colrlwKAT8Gw== + dependencies: + "@smithy/config-resolver" "^3.0.13" + "@smithy/credential-provider-imds" "^3.2.8" + "@smithy/node-config-provider" "^3.1.12" + "@smithy/property-provider" "^3.1.11" + "@smithy/smithy-client" "^3.7.0" + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@smithy/util-endpoints@^2.0.5": + version "2.1.7" + resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-2.1.7.tgz#a088ebfab946a7219dd4763bfced82709894b82d" + integrity sha512-tSfcqKcN/Oo2STEYCABVuKgJ76nyyr6skGl9t15hs+YaiU06sgMkN7QYjo0BbVw+KT26zok3IzbdSOksQ4YzVw== + dependencies: + "@smithy/node-config-provider" "^3.1.12" + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@smithy/util-hex-encoding@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-2.0.0.tgz#0aa3515acd2b005c6d55675e377080a7c513b59e" + integrity sha512-c5xY+NUnFqG6d7HFh1IFfrm3mGl29lC+vF+geHv4ToiuJCBmIfzx6IeHLg+OgRdPFKDXIw6pvi+p3CsscaMcMA== + dependencies: + tslib "^2.5.0" + +"@smithy/util-hex-encoding@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz#32938b33d5bf2a15796cd3f178a55b4155c535e6" + integrity sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ== + dependencies: + tslib "^2.6.2" + +"@smithy/util-middleware@^3.0.11", "@smithy/util-middleware@^3.0.3": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-3.0.11.tgz#2ab5c17266b42c225e62befcffb048afa682b5bf" + integrity sha512-dWpyc1e1R6VoXrwLoLDd57U1z6CwNSdkM69Ie4+6uYh2GC7Vg51Qtan7ITzczuVpqezdDTKJGJB95fFvvjU/ow== + dependencies: + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@smithy/util-retry@^3.0.11", "@smithy/util-retry@^3.0.3": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-3.0.11.tgz#d267e5ccb290165cee69732547fea17b695a7425" + integrity sha512-hJUC6W7A3DQgaee3Hp9ZFcOxVDZzmBIRBPlUAk8/fSOEl7pE/aX7Dci0JycNOnm9Mfr0KV2XjIlUOcGWXQUdVQ== + dependencies: + "@smithy/service-error-classification" "^3.0.11" + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + +"@smithy/util-stream@^3.1.3", "@smithy/util-stream@^3.3.4": + version "3.3.4" + resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-3.3.4.tgz#c506ac41310ebcceb0c3f0ba20755e4fe0a90b8d" + integrity sha512-SGhGBG/KupieJvJSZp/rfHHka8BFgj56eek9px4pp7lZbOF+fRiVr4U7A3y3zJD8uGhxq32C5D96HxsTC9BckQ== + dependencies: + "@smithy/fetch-http-handler" "^4.1.3" + "@smithy/node-http-handler" "^3.3.3" + "@smithy/types" "^3.7.2" + "@smithy/util-base64" "^3.0.0" + "@smithy/util-buffer-from" "^3.0.0" + "@smithy/util-hex-encoding" "^3.0.0" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@smithy/util-uri-escape@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz#e43358a78bf45d50bb736770077f0f09195b6f54" + integrity sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg== + dependencies: + tslib "^2.6.2" + +"@smithy/util-utf8@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-2.0.0.tgz#b4da87566ea7757435e153799df9da717262ad42" + integrity sha512-rctU1VkziY84n5OXe3bPNpKR001ZCME2JCaBBFgtiM2hfKbHFudc/BkMuPab8hRbLd0j3vbnBTTZ1igBf0wgiQ== + dependencies: + "@smithy/util-buffer-from" "^2.0.0" + tslib "^2.5.0" + +"@smithy/util-utf8@^2.0.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-2.3.0.tgz#dd96d7640363259924a214313c3cf16e7dd329c5" + integrity sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A== + dependencies: + "@smithy/util-buffer-from" "^2.2.0" + tslib "^2.6.2" + +"@smithy/util-utf8@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-3.0.0.tgz#1a6a823d47cbec1fd6933e5fc87df975286d9d6a" + integrity sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA== + dependencies: + "@smithy/util-buffer-from" "^3.0.0" + tslib "^2.6.2" + +"@smithy/util-waiter@^3.1.2": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-3.2.0.tgz#1e52f870e77d2e5572025f7606053e6ff00df93d" + integrity sha512-PpjSboaDUE6yl+1qlg3Si57++e84oXdWGbuFUSAciXsVfEZJJJupR2Nb0QuXHiunt2vGR+1PTizOMvnUPaG2Qg== + dependencies: + "@smithy/abort-controller" "^3.1.9" + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + "@storybook/addon-actions@7.5.3": version "7.5.3" resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-7.5.3.tgz#e0d0d819488d1d19918b23469b3ea6610fee5f07" @@ -3994,6 +5177,11 @@ resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-5.0.4.tgz#1a31c3d378850d2778dabb6374d036dcba4ba708" integrity sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw== +"@types/aws-lambda@^8.10.134": + version "8.10.152" + resolved "https://registry.yarnpkg.com/@types/aws-lambda/-/aws-lambda-8.10.152.tgz#f68424a8175f0a54a2a941e65b76c3f51f3bd89d" + integrity sha512-soT/c2gYBnT5ygwiHPmd9a1bftj462NWVk2tKCc1PYHSIacB2UwbTS2zYG4jzag1mRDuzg/OjtxQjQ2NKRB6Rw== + "@types/babel__core@^7", "@types/babel__core@^7.0.0": version "7.20.4" resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.4.tgz#26a87347e6c6f753b3668398e34496d6d9ac6ac0" @@ -4166,7 +5354,7 @@ dependencies: "@types/istanbul-lib-report" "*" -"@types/json-schema@*", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": +"@types/json-schema@*", "@types/json-schema@^7.0.15", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": version "7.0.15" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== @@ -4305,6 +5493,11 @@ resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.10.tgz#04ffa7f406ab628f7f7e97ca23e290cd8ab15efc" integrity sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA== +"@types/uuid@^9.0.0": + version "9.0.8" + resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-9.0.8.tgz#7545ba4fc3c003d6c756f651f3bf163d8f0f29ba" + integrity sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA== + "@types/yargs-parser@*": version "21.0.3" resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" @@ -4730,6 +5923,20 @@ available-typed-arrays@^1.0.5: resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== +aws-amplify@^6.15.6: + version "6.15.6" + resolved "https://registry.yarnpkg.com/aws-amplify/-/aws-amplify-6.15.6.tgz#d4c11090beeab70529177166596545015ec40b2a" + integrity sha512-beQ7afqfb/I2888GQVQ4olhQeEiJpFyqfZ8aSwpwz16CpfS918VvnUyqtwJ5jY4G3hxA5VLk7n1FL28TwQB2Mw== + dependencies: + "@aws-amplify/analytics" "7.0.87" + "@aws-amplify/api" "6.3.18" + "@aws-amplify/auth" "6.15.1" + "@aws-amplify/core" "6.13.2" + "@aws-amplify/datastore" "5.0.89" + "@aws-amplify/notifications" "2.0.87" + "@aws-amplify/storage" "6.9.6" + tslib "^2.5.0" + babel-core@^7.0.0-bridge.0: version "7.0.0-bridge.0" resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-7.0.0-bridge.0.tgz#95a492ddd90f9b4e9a4a1da14eb335b87b634ece" @@ -4809,7 +6016,7 @@ base-x@^3.0.8: dependencies: safe-buffer "^5.0.1" -base64-js@^1.3.1: +base64-js@^1.0.2, base64-js@^1.3.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== @@ -4868,6 +6075,11 @@ boolbase@^1.0.0: resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== +bowser@^2.11.0: + version "2.12.1" + resolved "https://registry.yarnpkg.com/bowser/-/bowser-2.12.1.tgz#f9ad78d7aebc472feb63dd9635e3ce2337e0e2c1" + integrity sha512-z4rE2Gxh7tvshQ4hluIT7XcFrgLIQaw9X3A+kTTRdovCz5PMukm/0QC/BKSYPj3omF5Qfypn9O/c5kgpmvYUCw== + bplist-parser@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.2.0.tgz#43a9d183e5bf9d545200ceac3e712f79ebbe8d0e" @@ -4936,6 +6148,15 @@ buffer-from@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== +buffer@4.9.2: + version "4.9.2" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" + integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + buffer@^5.5.0: version "5.7.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" @@ -5323,6 +6544,11 @@ cosmiconfig@^8.0.0, cosmiconfig@^8.2.0: parse-json "^5.2.0" path-type "^4.0.0" +crc-32@1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" + integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== + cross-spawn@^7.0.0, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" @@ -5966,6 +7192,20 @@ fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== +fast-xml-parser@4.4.1: + version "4.4.1" + resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz#86dbf3f18edf8739326447bcaac31b4ae7f6514f" + integrity sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw== + dependencies: + strnum "^1.0.5" + +fast-xml-parser@^4.4.1: + version "4.5.3" + resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.5.3.tgz#c54d6b35aa0f23dc1ea60b6c884340c006dc6efb" + integrity sha512-RKihhV+SHsIUGXObeVy9AXiBbFwkVk7Syp8XgwN5U3JV416+Gwp/GO9i0JYKmikykgz/UHRrrV4ROuZEo/T0ig== + dependencies: + strnum "^1.1.1" + fastq@^1.6.0: version "1.15.0" resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" @@ -6357,6 +7597,11 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== +graphql@15.8.0: + version "15.8.0" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-15.8.0.tgz#33410e96b012fa3bdb1091cc99a94769db212b38" + integrity sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw== + gunzip-maybe@^1.4.2: version "1.4.2" resolved "https://registry.yarnpkg.com/gunzip-maybe/-/gunzip-maybe-1.4.2.tgz#b913564ae3be0eda6f3de36464837a9cd94b98ac" @@ -6549,7 +7794,12 @@ icss-utils@^5.0.0, icss-utils@^5.1.0: resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== -ieee754@^1.1.13: +idb@5.0.6: + version "5.0.6" + resolved "https://registry.yarnpkg.com/idb/-/idb-5.0.6.tgz#8c94624f5a8a026abe3bef3c7166a5febd1cadc1" + integrity sha512-/PFvOWPzRcEPmlDt5jEvzVZVs0wyd/EvGvkDIcbBpGuMMLQKrTPG0TxvE2UJtgZtCQCmOtM2QD7yQJBVEjKGOw== + +ieee754@^1.1.13, ieee754@^1.1.4: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== @@ -6559,6 +7809,11 @@ ignore@^5.2.0: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== +immer@9.0.6: + version "9.0.6" + resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.6.tgz#7a96bf2674d06c8143e327cbf73539388ddf1a73" + integrity sha512-G95ivKpy+EvVAnAab4fVa4YGYn24J1SpEktnJX7JJ45Bd7xqME/SCplFzYFmTbrkwZbQ4xJK1xMTUYBkN6pWsQ== + import-fresh@^3.2.1, import-fresh@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" @@ -6851,16 +8106,16 @@ is-wsl@^2.2.0: dependencies: is-docker "^2.0.0" +isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + isarray@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== -isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" @@ -6991,6 +8246,11 @@ jiti@^1.18.2: resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.0.tgz#7c97f8fe045724e136a397f7340475244156105d" integrity sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q== +js-cookie@^3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-3.0.5.tgz#0b7e2fd0c01552c58ba86e0841f94dc2557dcdbc" + integrity sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw== + "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -8697,6 +9957,13 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" +rxjs@^7.8.1: + version "7.8.2" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.2.tgz#955bc473ed8af11a002a2be52071bf475638607b" + integrity sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA== + dependencies: + tslib "^2.1.0" + safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" @@ -9045,6 +10312,11 @@ strip-json-comments@^3.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== +strnum@^1.0.5, strnum@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/strnum/-/strnum-1.1.2.tgz#57bca4fbaa6f271081715dbc9ed7cee5493e28e4" + integrity sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA== + style-loader@3.3.1: version "3.3.1" resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-3.3.1.tgz#057dfa6b3d4d7c7064462830f9113ed417d38575" @@ -9294,6 +10566,11 @@ tslib@^2.0.0, tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.4.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== +tslib@^2.5.0, tslib@^2.6.2: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== + tween-functions@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/tween-functions/-/tween-functions-1.2.0.tgz#1ae3a50e7c60bb3def774eac707acbca73bbc3ff" @@ -9342,6 +10619,11 @@ uglify-js@^3.1.4: resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c" integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g== +ulid@^2.3.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/ulid/-/ulid-2.4.0.tgz#9d9ee22e63f4390ee1bcd9ad09fca39d8ae0afed" + integrity sha512-fIRiVTJNcSRmXKPZtGzFQv9WRrZ3M9eoptl/teFJvjOzmpU+/K/JH6HZ8deBfb5vMEpicJcLn7JmvdknlMq7Zg== + undici-types@~5.26.4: version "5.26.5" resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" @@ -9525,7 +10807,12 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== -uuid@^9.0.0: +uuid@^11.0.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-11.1.0.tgz#9549028be1753bb934fc96e2bca09bb4105ae912" + integrity sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A== + +uuid@^9.0.0, uuid@^9.0.1: version "9.0.1" resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== diff --git a/resources/css/shui.css b/resources/css/shui.css index 1748ff8355..900017bc8b 100644 --- a/resources/css/shui.css +++ b/resources/css/shui.css @@ -5,7 +5,7 @@ html * { html[data-theme=light] { --accent: var(--rx-gray-12-hsl); --accent-foreground: var(--rx-gray-02-hsl); - --input: var(--rx-gray-03-hsl); + --input: var(--rx-gray-05-hsl); --secondary: 240 4.8% 95.9%; } @@ -23,7 +23,7 @@ html[data-theme=dark] { --muted: 0 0% 15%; --popover: 0 0% 7%; --popover-foreground: 0 0 95%; - --input: 0 0% 25%; + --input: 0 0% 16%; } html { diff --git a/resources/index.html b/resources/index.html index 8eb5f72ce0..27a1535451 100644 --- a/resources/index.html +++ b/resources/index.html @@ -49,7 +49,6 @@ - diff --git a/resources/mobile/index.html b/resources/mobile/index.html index fa78e34469..0f7099cdae 100644 --- a/resources/mobile/index.html +++ b/resources/mobile/index.html @@ -2,7 +2,7 @@ - + Logseq: A privacy-first platform for knowledge management and collaboration @@ -23,7 +23,6 @@ - diff --git a/src/main/frontend/components/theme.cljs b/src/main/frontend/components/theme.cljs index 4b73ffcc81..e7b4762c5c 100644 --- a/src/main/frontend/components/theme.cljs +++ b/src/main/frontend/components/theme.cljs @@ -1,5 +1,6 @@ (ns frontend.components.theme - (:require [electron.ipc :as ipc] + (:require [clojure.string :as string] + [electron.ipc :as ipc] [frontend.components.settings :as settings] [frontend.config :as config] [frontend.context.i18n :refer [t]] @@ -68,7 +69,9 @@ (hooks/use-effect! #(let [doc js/document.documentElement] - (.setAttribute doc "lang" preferred-language))) + (.setAttribute doc "lang" preferred-language) + (some-> preferred-language (string/lower-case) (js/LSI18N.setLocale))) + [preferred-language]) (hooks/use-effect! #(js/setTimeout diff --git a/src/main/frontend/components/user/config.js b/src/main/frontend/components/user/config.js deleted file mode 100644 index df71e27b4f..0000000000 --- a/src/main/frontend/components/user/config.js +++ /dev/null @@ -1,56 +0,0 @@ -import {Amplify} from '@aws-amplify/core'; - -Amplify.configure({ - Auth: { - // REQUIRED only for Federated Authentication - Amazon Cognito Identity Pool ID - // identityPoolId: 'XX-XXXX-X:XXXXXXXX-XXXX-1234-abcd-1234567890ab', - - // REQUIRED - Amazon Cognito Region - region: 'us-east-1', - - // OPTIONAL - Amazon Cognito Federated Identity Pool Region - // Required only if it's different from Amazon Cognito Region - // identityPoolRegion: 'XX-XXXX-X', - - // OPTIONAL - Amazon Cognito User Pool ID - userPoolId: 'us-east-1_ldvDmC9Fe', - - // OPTIONAL - Amazon Cognito Web Client ID (26-char alphanumeric string) - userPoolWebClientId: '41m82unjghlea984vjpk887qcr', - - // OPTIONAL - Enforce user authentication prior to accessing AWS resources or not - // mandatorySignIn: false, - - // OPTIONAL - This is used when autoSignIn is enabled for Auth.signUp - // 'code' is used for Auth.confirmSignUp, 'link' is used for email link verification - // signUpVerificationMethod: 'code', // 'code' | 'link' - - // OPTIONAL - Configuration for cookie storage - // Note: if the secure flag is set to true, then the cookie transmission requires a secure protocol - cookieStorage: { - domain: "localhost", - path: "/", - expires: 365, - sameSite: "strict", - secure: true, - }, - - // OPTIONAL - customized storage object - // storage: MyStorage, - - // OPTIONAL - Manually set the authentication flow type. Default is 'USER_SRP_AUTH' - authenticationFlowType: 'USER_SRP_AUTH', - - // - // // OPTIONAL - Manually set key value pairs that can be passed to Cognito Lambda Triggers - // clientMetadata: {myCustomKey: 'myCustomValue'}, - // - // // OPTIONAL - Hosted UI configuration - // oauth: { - // domain: 'your_cognito_domain', - // scope: ['phone', 'email', 'profile', 'openid', 'aws.cognito.signin.user.admin'], - // redirectSignIn: 'http://localhost:3000/', - // redirectSignOut: 'http://localhost:3000/', - // responseType: 'code' // or 'token', note that REFRESH token will only be generated when the responseType is code - } -}); \ No newline at end of file diff --git a/src/main/frontend/components/user/login.cljs b/src/main/frontend/components/user/login.cljs index bf1746db2b..e3e8fea54b 100644 --- a/src/main/frontend/components/user/login.cljs +++ b/src/main/frontend/components/user/login.cljs @@ -1,7 +1,7 @@ (ns frontend.components.user.login (:require [cljs-bean.core :as bean] [clojure.string :as string] - [dommy.core :refer-macros [sel]] + [dommy.core :refer-macros [sel by-id]] [frontend.config :as config] [frontend.handler.notification :as notification] [frontend.handler.route :as route-handler] @@ -17,24 +17,24 @@ (defn sign-out! [] - (try (.signOut js/LSAmplify.Auth) + (try (.signOut js/LSAuth.Auth) (catch :default e (js/console.warn e)))) -(defn- setup-configure! +(defn setup-configure! [] #_:clj-kondo/ignore - (def setupAuthConfigure! (.-setupAuthConfigure js/LSAmplify)) + (defn setupAuthConfigure! [config] + (.init js/LSAuth (bean/->js {:authCognito (merge config {:loginWith {:email true}})}))) #_:clj-kondo/ignore (def LSAuthenticator - (adapt-class (.-LSAuthenticator js/LSAmplify))) + (adapt-class (.-LSAuthenticator js/LSAuth))) - (.setLanguage js/LSAmplify.I18n (or (:preferred-language @state/state) "en")) (setupAuthConfigure! - #js {:region config/REGION, - :userPoolId config/USER-POOL-ID, - :userPoolWebClientId config/COGNITO-CLIENT-ID, - :identityPoolId config/IDENTITY-POOL-ID, - :oauthDomain config/OAUTH-DOMAIN})) + {:region config/REGION, + :userPoolId config/USER-POOL-ID, + :userPoolClientId config/COGNITO-CLIENT-ID, + :identityPoolId config/IDENTITY-POOL-ID, + :oauthDomain config/OAUTH-DOMAIN})) (rum/defc user-pane [_sign-out! user] @@ -55,45 +55,24 @@ (rum/defc page-impl [] - (let [[ready?, set-ready?] (rum/use-state false) - [tab, set-tab!] (rum/use-state :login) - *ref-el (rum/use-ref nil)] - - (hooks/use-effect! - (fn [] (setup-configure!) - (set-ready? true) - (js/setTimeout - (fn [] - (when-let [^js el (some-> (rum/deref *ref-el) (.querySelector ".amplify-tabs"))] - (let [btn1 (.querySelector el "button")] - (.addEventListener el "pointerdown" - (fn [^js e] - (if (= (.-target e) btn1) - (set-tab! :login) - (set-tab! :create-account))))))))) - []) - - (hooks/use-effect! - (fn [] - (when-let [^js el (rum/deref *ref-el)] - (js/setTimeout - #(some-> (.querySelector el (str "input[name=" (if (= tab :login) "username" "email") "]")) - (.focus)) 100))) - [tab]) - + (let [*ref-el (rum/use-ref nil) + [tab set-tab!] (rum/use-state nil)] [:div.cp__user-login - {:ref *ref-el} - (when ready? - (LSAuthenticator - {:termsLink "https://blog.logseq.com/terms/"} - (fn [^js op] - (let [sign-out!' (.-signOut op) - ^js user-proxy (.-user op) - ^js user (try (js/JSON.parse (js/JSON.stringify user-proxy)) - (catch js/Error e - (js/console.error "Error: Amplify user payload:" e))) - user' (bean/->clj user)] - (user-pane sign-out!' user')))))])) + {:ref *ref-el + :id (str "user-auth-" tab)} + (LSAuthenticator + {:titleRender (fn [key title] + (set-tab! key) + (shui/card-header + {:class "px-0"} + (shui/card-title + {:class "capitalize"} + (string/replace title "-" " ")))) + :onSessionCallback #()} + (fn [^js op] + (let [sign-out!' (.-signOut op) + user' (bean/->clj (.-sessionUser op))] + (user-pane sign-out!' user'))))])) (rum/defcs modal-inner < shortcut/disable-all-shortcuts @@ -109,7 +88,9 @@ (shui/dialog-open! (fn [_close] (modal-inner)) {:label "user-login" - :content-props {:onPointerDownOutside #(let [inputs (sel "form[data-amplify-form] input:not([type=checkbox])") - inputs (some->> inputs (map (fn [^js e] (.-value e))) (remove string/blank?))] - (when (seq inputs) - (.preventDefault %)))}})) + :content-props {:onPointerDownOutside #(if (by-id "#user-auth-login") + (let [inputs (sel ".ls-authenticator-content form input:not([type=checkbox])") + inputs (some->> inputs (map (fn [^js e] (.-value e))) (remove string/blank?))] + (when (seq inputs) + (.preventDefault %))) + (.preventDefault %))}})) diff --git a/src/main/frontend/components/user/login.css b/src/main/frontend/components/user/login.css index 54a250e2d4..b7cda8c83c 100644 --- a/src/main/frontend/components/user/login.css +++ b/src/main/frontend/components/user/login.css @@ -1,126 +1,38 @@ .cp__user-login { - [data-amplify-authenticator] [data-amplify-router] { - --amplify-components-authenticator-router-background-color: var(--ls-primary-background-color); - --amplify-components-field-label-color: var(--ls-primary-text-color); - --amplify-components-authenticator-router-border-color: var(--ls-border-color); - --amplify-components-tabs-item-color: var(--ls-primary-text-color); - --amplify-components-tabs-item-active-color: var(--ls-primary-text-color); - --amplify-components-tabs-item-hover-color: var(--ls-primary-text-color); - --amplify-components-tabs-item-active-border-color: var(--ls-tertiary-background-color); - --amplify-components-tabs-border-width: 0; - --amplify-components-authenticator-state-inactive-background-color: var(--ls-tertiary-background-color); - --amplify-components-tabs-item-active-background-color: var(--ls-primary-background-color); - --amplify-components-button-border-color: var(--ls-border-color); - --amplify-components-textfield-border-color: var(--ls-border-color); - --amplify-components-button-primary-background-color: var(--color-indigo-600); - --amplify-components-text-color: var(--ls-primary-text-color); - --amplify-components-button-hover-background-color: var(--ls-primary-background-color); - --amplify-components-button-border-width: 0; - --amplify-internal-button-loading-background-color: var(--ls-header-button-background); - --amplify-components-authenticator-router-border-width: 1px; - --amplify-components-button-color: var(--ls-primary-text-color); - --amplify-components-divider-label-background-color: var(--ls-primary-background-color); - --amplify-components-divider-label-color: var(--ls-primary-text-color); - --amplify-components-heading-color: var(--ls-primary-text-color); - --amplify-components-button-link-hover-background-color: transparent; - --amplify-components-button-link-active-background-color: transparent; - --amplify-components-textfield-color: var(--ls-primary-text-color); - --amplify-components-checkbox-icon-background-color: var(--color-indigo-600); + span.opacity-50, a.opacity-60 { + @apply opacity-80; } - [data-amplify-authenticator] [data-amplify-router] { - @apply overflow-hidden rounded-[6px] shadow-2xl; + p { + @apply text-[inherit]; } - [data-amplify-authenticator] [data-amplify-container] { - place-self: unset; - } + .ui__alert { + @apply bg-red-300 dark:border-red-800 dark:bg-red-800/90 dark:text-red-200; - [data-amplify-authenticator] [data-amplify-form] { - @apply px-4 py-2; + svg { + @apply dark:text-red-200; + } - @screen sm { - @apply px-6 py-4; + &-description { + @apply -mb-3; } } -} -@media (min-width: 30rem) { - [data-amplify-authenticator] [data-amplify-container] { - width: 100%; - } } .ui__dialog-content[label=user-login] { - @apply flex items-center top-0 p-0 border-none w-auto; + @apply flex items-center top-0 px-6 pt-0 w-auto; + + .ui__card-header { + @apply pb-7; + } .ui__dialog-main-content { - @apply p-0 min-w-fit relative max-w-[600px] sm:max-w-[90vw] sm:w-[500px]; + @apply p-0 w-[70vw] relative max-w-[500px] sm:w-[440px]; } .ui__modal-close-wrap { @apply z-10 top-[4px]; } } - -.cp__user { - &-login { - ::placeholder { - color: var(--ls-primary-text-color); - opacity: .3; - } - - [data-indicator-position=top] > .amplify-tabs-item { - margin-top: 0; - } - - .amplify-tabs-item { - transition: none; - - &:focus { - color: var(--ls-primary-text-color); - } - - &:hover { - opacity: .9; - } - } - - .amplify-field-group { - @apply relative; - - .amplify-button { - color: var(--ls-primary-text-color); - - &:active, &:hover, &:focus { - background-color: transparent; - } - } - } - - .amplify-field-group__outer-end { - @apply absolute right-0 top-0 bottom-0; - } - - .amplify-input { - border-radius: 4px !important; - } - - .amplify-checkboxfield { - @apply text-sm; - - .amplify-field__error-message { - color: var(--ls-primary-text-color); - opacity: .4; - } - } - - .amplify-text--error { - color: var(--ls-error-text-color); - } - } -} - -.federated-sign-in-container { - display: none; -} diff --git a/src/main/frontend/handler.cljs b/src/main/frontend/handler.cljs index af0713f24a..a6e94ca375 100644 --- a/src/main/frontend/handler.cljs +++ b/src/main/frontend/handler.cljs @@ -8,6 +8,7 @@ [frontend.components.content :as cp-content] [frontend.components.editor :as editor] [frontend.components.page :as page] + [frontend.components.user.login :as user.login] [frontend.components.reference :as reference] [frontend.components.whiteboard :as whiteboard] [frontend.config :as config] @@ -143,6 +144,7 @@ (register-components-fns!) (user-handler/restore-tokens-from-localstorage) + (user.login/setup-configure!) (state/set-db-restoring! true) (when (util/electron?) (el/listen!)) diff --git a/src/main/frontend/handler/user.cljs b/src/main/frontend/handler/user.cljs index 34cd8fa65f..d2713f164b 100644 --- a/src/main/frontend/handler/user.cljs +++ b/src/main/frontend/handler/user.cljs @@ -108,6 +108,20 @@ (when (string/starts-with? key prefix) (js/localStorage.removeItem key))))) +(defn auto-fill-refresh-token-from-cognito! + [] + (let [prefix "CognitoIdentityServiceProvider." + refresh-token-key (some #(when (string/starts-with? % prefix) + (when (string/ends-with? % "refreshToken") + %)) + (js/Object.keys js/localStorage))] + (when refresh-token-key + (let [refresh-token (js/localStorage.getItem refresh-token-key)] + (when (and refresh-token (not= refresh-token "undefined")) + (state/set-auth-refresh-token refresh-token) + (js/localStorage.setItem "refresh-token" refresh-token))))) + ) + (defn- clear-tokens ([] (state/set-auth-id-token nil) @@ -206,6 +220,7 @@ (:jwtToken (:idToken session)) (:jwtToken (:accessToken session)) (:token (:refreshToken session))) + (auto-fill-refresh-token-from-cognito!) (state/pub-event! [:user/fetch-info-and-graphs])) (defn ^:export login-with-username-password-e2e diff --git a/src/main/frontend/mobile/index.css b/src/main/frontend/mobile/index.css index cda1a17810..a00d0da1df 100644 --- a/src/main/frontend/mobile/index.css +++ b/src/main/frontend/mobile/index.css @@ -2,13 +2,10 @@ @apply fixed bottom-[100px] h-[70px] p-1.5 rounded-md overflow-y-hidden overflow-x-auto bg-[var(--ls-secondary-background-color)] z-[99999]; - box-shadow: - /* bottom = shadow-lg */ - 0 10px 15px -3px rgba(0,0,0,0.1), - 0 4px 6px -4px rgba(0,0,0,0.1), - /* top = lighter (closer to shadow-md) */ - 0 -6px 10px -4px rgba(0,0,0,0.08), - 0 -2px 4px -4px rgba(0,0,0,0.08); + box-shadow: /* bottom = shadow-lg */ 0 10px 15px -3px rgba(0, 0, 0, 0.1), + 0 4px 6px -4px rgba(0, 0, 0, 0.1), + /* top = lighter (closer to shadow-md) */ 0 -6px 10px -4px rgba(0, 0, 0, 0.08), + 0 -2px 4px -4px rgba(0, 0, 0, 0.08); .action-bar-commands { @apply relative flex w-full; @@ -144,3 +141,21 @@ html.is-zoomed-native-ios { } } } + +html.has-mobile-keyboard { + .ui__dialog-overlay { + &:has(.app-login-modal) { + @apply overflow-y-auto; + } + } + + .ui__dialog-content { + &.app-login-modal { + margin-bottom: 460px; + } + } +} + +.ui__dialog-content[label=user-login] { + @apply rounded-lg pb-3; +} \ No newline at end of file diff --git a/src/main/mobile/components/settings.cljs b/src/main/mobile/components/settings.cljs index 74214a5f6f..1310ad9541 100644 --- a/src/main/mobile/components/settings.cljs +++ b/src/main/mobile/components/settings.cljs @@ -15,6 +15,7 @@ :class "text-1xl flex flex-1 w-full my-8" :on-click #(shui/dialog-open! login/page-impl {:close-btn? false + :label "user-login" :align :top :content-props {:class "app-login-modal"}})} "Login") diff --git a/tailwind.all.css b/tailwind.all.css index fd17bd799e..29d838b0ac 100644 --- a/tailwind.all.css +++ b/tailwind.all.css @@ -9,7 +9,6 @@ @import "inter-ui/inter.css"; @import "photoswipe/dist/photoswipe.css"; @import "shepherd.js/dist/css/shepherd.css"; -@import "packages/amplify/dist/amplify.css"; @import "packages/tldraw/apps/tldraw-logseq/src/styles.css"; @import "katex/dist/katex.min.css"; @import "codemirror/lib/codemirror.css"; diff --git a/tailwind.config.js b/tailwind.config.js index 3c21d639c0..512f1088f8 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -129,7 +129,8 @@ module.exports = { './resources/**/*.html', './deps/shui/src/**/*.cljs', './deps/shui/src/**/*.cljc', - './packages/ui/@/components/**/*.{ts,tsx}' + './packages/ui/@/components/**/*.{ts,tsx}', + './packages/ui/src/amplify/**/*.{ts,tsx}' ], safelist: [ 'bg-black', 'bg-white', 'capitalize-first', diff --git a/tailwind.mobile.css b/tailwind.mobile.css index 6c4ef78d6c..4371539ee5 100644 --- a/tailwind.mobile.css +++ b/tailwind.mobile.css @@ -9,7 +9,6 @@ @import "inter-ui/inter.css"; @import "photoswipe/dist/photoswipe.css"; -@import "packages/amplify/dist/amplify.css"; @import "katex/dist/katex.min.css"; @import "codemirror/lib/codemirror.css"; @import "codemirror/theme/solarized.css";