;\n\nexport function PhoneAuthScreen({ children, ...props }: PhoneAuthScreenProps) {\n const ui = useUI();\n\n const titleText = getTranslation(ui, \"labels\", \"signIn\");\n const subtitleText = getTranslation(ui, \"prompts\", \"signInToAccount\");\n const mfaResolver = ui.multiFactorResolver;\n\n return (\n \n
\n \n {titleText}\n {subtitleText}\n \n \n {mfaResolver ? (\n \n ) : (\n <>\n \n {children ? (\n <>\n {getTranslation(ui, \"messages\", \"dividerOr\")}\n \n {children}\n \n
\n >\n ) : null}\n >\n )}\n \n \n
\n );\n}\n",
+ "type": "registry:component"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/packages/shadcn/public/policies.json b/packages/shadcn/public/policies.json
new file mode 100644
index 000000000..cdb112409
--- /dev/null
+++ b/packages/shadcn/public/policies.json
@@ -0,0 +1,17 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "policies",
+ "type": "registry:block",
+ "title": "Policies",
+ "description": "A component allowing users to navigate to the terms of service and privacy policy.",
+ "dependencies": [
+ "@firebase-oss/ui-react"
+ ],
+ "files": [
+ {
+ "path": "src/registry/policies.tsx",
+ "content": "import { cn } from \"@/lib/utils\";\nimport { getTranslation } from \"@firebase-oss/ui-core\";\nimport { useUI, PolicyContext } from \"@firebase-oss/ui-react\";\nimport { cloneElement, useContext } from \"react\";\n\nexport function Policies() {\n const ui = useUI();\n const policies = useContext(PolicyContext);\n\n if (!policies) {\n return null;\n }\n\n const { termsOfServiceUrl, privacyPolicyUrl, onNavigate } = policies;\n const termsAndPrivacyText = getTranslation(ui, \"messages\", \"termsAndPrivacy\");\n const parts = termsAndPrivacyText.split(/(\\{tos\\}|\\{privacy\\})/);\n\n const className = cn(\"hover:underline font-semibold\");\n const Handler = onNavigate ? (\n \n ) : (\n \n );\n\n return (\n \n {parts.map((part: string, index: number) => {\n if (part === \"{tos}\") {\n return cloneElement(Handler, {\n key: index,\n onClick: onNavigate ? () => onNavigate(termsOfServiceUrl) : undefined,\n href: onNavigate ? undefined : termsOfServiceUrl,\n children: getTranslation(ui, \"labels\", \"termsOfService\"),\n });\n }\n\n if (part === \"{privacy}\") {\n return cloneElement(Handler, {\n key: index,\n onClick: onNavigate ? () => onNavigate(privacyPolicyUrl) : undefined,\n href: onNavigate ? undefined : privacyPolicyUrl,\n children: getTranslation(ui, \"labels\", \"privacyPolicy\"),\n });\n }\n\n return {part};\n })}\n
\n );\n}\n",
+ "type": "registry:component"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/packages/shadcn/public/redirect-error.json b/packages/shadcn/public/redirect-error.json
new file mode 100644
index 000000000..66d7bf698
--- /dev/null
+++ b/packages/shadcn/public/redirect-error.json
@@ -0,0 +1,17 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "redirect-error",
+ "type": "registry:block",
+ "title": "Redirect Error",
+ "description": "A component that displays redirect errors from Firebase UI authentication flow.",
+ "dependencies": [
+ "@firebase-oss/ui-react"
+ ],
+ "files": [
+ {
+ "path": "src/registry/redirect-error.tsx",
+ "content": "\"use client\";\n\nimport { useRedirectError } from \"@firebase-oss/ui-react\";\n\nexport function RedirectError() {\n const error = useRedirectError();\n\n if (!error) {\n return null;\n }\n\n return {error}
;\n}\n",
+ "type": "registry:component"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/packages/shadcn/public/sign-in-auth-form.json b/packages/shadcn/public/sign-in-auth-form.json
new file mode 100644
index 000000000..ebcd14fcf
--- /dev/null
+++ b/packages/shadcn/public/sign-in-auth-form.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "sign-in-auth-form",
+ "type": "registry:block",
+ "title": "Sign In Auth Form",
+ "description": "A form allowing users to sign in with email and password.",
+ "dependencies": [
+ "@firebase-oss/ui-react"
+ ],
+ "registryDependencies": [
+ "input",
+ "button",
+ "form",
+ "https://fir-ui-shadcn.web.app/policies.json"
+ ],
+ "files": [
+ {
+ "path": "src/registry/sign-in-auth-form.tsx",
+ "content": "\"use client\";\n\nimport type { SignInAuthFormSchema } from \"@firebase-oss/ui-core\";\nimport { useSignInAuthFormAction, useSignInAuthFormSchema, useUI, type SignInAuthFormProps } from \"@firebase-oss/ui-react\";\nimport { useForm } from \"react-hook-form\";\nimport { standardSchemaResolver } from \"@hookform/resolvers/standard-schema\";\nimport { FirebaseUIError, getTranslation } from \"@firebase-oss/ui-core\";\n\nimport { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from \"@/components/ui/form\";\nimport { Input } from \"@/components/ui/input\";\nimport { Button } from \"@/components/ui/button\";\nimport { Policies } from \"./policies\";\n\nexport type { SignInAuthFormProps };\n\nexport function SignInAuthForm(props: SignInAuthFormProps) {\n const ui = useUI();\n const schema = useSignInAuthFormSchema();\n const action = useSignInAuthFormAction();\n\n const form = useForm({\n resolver: standardSchemaResolver(schema),\n defaultValues: {\n email: \"\",\n password: \"\",\n },\n });\n\n async function onSubmit(values: SignInAuthFormSchema) {\n try {\n const credential = await action(values);\n props.onSignIn?.(credential);\n } catch (error) {\n const message = error instanceof FirebaseUIError ? error.message : String(error);\n form.setError(\"root\", { message });\n }\n }\n\n return (\n \n \n );\n}\n",
+ "type": "registry:component"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/packages/shadcn/public/sign-in-auth-screen.json b/packages/shadcn/public/sign-in-auth-screen.json
new file mode 100644
index 000000000..a9a96daae
--- /dev/null
+++ b/packages/shadcn/public/sign-in-auth-screen.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "sign-in-auth-screen",
+ "type": "registry:block",
+ "title": "Sign In Auth Screen",
+ "description": "A screen allowing users to sign in with email and password.",
+ "dependencies": [
+ "@firebase-oss/ui-react"
+ ],
+ "registryDependencies": [
+ "separator",
+ "card",
+ "https://fir-ui-shadcn.web.app/sign-in-auth-form.json"
+ ],
+ "files": [
+ {
+ "path": "src/registry/sign-in-auth-screen.tsx",
+ "content": "\"use client\";\n\nimport { getTranslation } from \"@firebase-oss/ui-core\";\nimport { useUI, type SignInAuthScreenProps } from \"@firebase-oss/ui-react\";\n\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from \"@/components/ui/card\";\nimport { Separator } from \"@/components/ui/separator\";\nimport { SignInAuthForm } from \"@/registry/sign-in-auth-form\";\nimport { MultiFactorAuthAssertionForm } from \"@/registry/multi-factor-auth-assertion-form\";\n\nexport type { SignInAuthScreenProps };\n\nexport function SignInAuthScreen({ children, ...props }: SignInAuthScreenProps) {\n const ui = useUI();\n\n const titleText = getTranslation(ui, \"labels\", \"signIn\");\n const subtitleText = getTranslation(ui, \"prompts\", \"signInToAccount\");\n\n const mfaResolver = ui.multiFactorResolver;\n\n return (\n \n
\n \n {titleText}\n {subtitleText}\n \n \n {mfaResolver ? (\n \n ) : (\n <>\n \n {children ? (\n <>\n {getTranslation(ui, \"messages\", \"dividerOr\")}\n {children}
\n >\n ) : null}\n >\n )}\n \n \n
\n );\n}\n",
+ "type": "registry:component"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/packages/shadcn/public/sign-up-auth-form.json b/packages/shadcn/public/sign-up-auth-form.json
new file mode 100644
index 000000000..f658b9731
--- /dev/null
+++ b/packages/shadcn/public/sign-up-auth-form.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "sign-up-auth-form",
+ "type": "registry:block",
+ "title": "Sign Up Auth Form",
+ "description": "A form allowing users to sign up with email and password.",
+ "dependencies": [
+ "@firebase-oss/ui-react"
+ ],
+ "registryDependencies": [
+ "input",
+ "button",
+ "form",
+ "https://fir-ui-shadcn.web.app/policies.json"
+ ],
+ "files": [
+ {
+ "path": "src/registry/sign-up-auth-form.tsx",
+ "content": "\"use client\";\n\nimport type { SignUpAuthFormSchema } from \"@firebase-oss/ui-core\";\nimport {\n useSignUpAuthFormAction,\n useSignUpAuthFormSchema,\n useUI,\n type SignUpAuthFormProps,\n useRequireDisplayName,\n} from \"@firebase-oss/ui-react\";\nimport { useForm } from \"react-hook-form\";\nimport { standardSchemaResolver } from \"@hookform/resolvers/standard-schema\";\nimport { FirebaseUIError, getTranslation } from \"@firebase-oss/ui-core\";\n\nimport { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from \"@/components/ui/form\";\nimport { Input } from \"@/components/ui/input\";\nimport { Button } from \"@/components/ui/button\";\nimport { Policies } from \"./policies\";\n\nexport type { SignUpAuthFormProps };\n\nexport function SignUpAuthForm(props: SignUpAuthFormProps) {\n const ui = useUI();\n const schema = useSignUpAuthFormSchema();\n const action = useSignUpAuthFormAction();\n const requireDisplayName = useRequireDisplayName();\n\n const form = useForm({\n resolver: standardSchemaResolver(schema),\n defaultValues: {\n email: \"\",\n password: \"\",\n displayName: requireDisplayName ? \"\" : undefined,\n },\n });\n\n async function onSubmit(values: SignUpAuthFormSchema) {\n try {\n const credential = await action(values);\n props.onSignUp?.(credential);\n } catch (error) {\n const message = error instanceof FirebaseUIError ? error.message : String(error);\n form.setError(\"root\", { message });\n }\n }\n\n return (\n \n \n );\n}\n",
+ "type": "registry:component"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/packages/shadcn/public/sign-up-auth-screen.json b/packages/shadcn/public/sign-up-auth-screen.json
new file mode 100644
index 000000000..e65db9000
--- /dev/null
+++ b/packages/shadcn/public/sign-up-auth-screen.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "sign-up-auth-screen",
+ "type": "registry:block",
+ "title": "Sign Up Auth Screen",
+ "description": "A screen allowing users to sign up with email and password.",
+ "dependencies": [
+ "@firebase-oss/ui-react"
+ ],
+ "registryDependencies": [
+ "separator",
+ "card",
+ "https://fir-ui-shadcn.web.app/sign-up-auth-form.json"
+ ],
+ "files": [
+ {
+ "path": "src/registry/sign-up-auth-screen.tsx",
+ "content": "\"use client\";\n\nimport { getTranslation } from \"@firebase-oss/ui-core\";\nimport { useUI, type SignUpAuthScreenProps } from \"@firebase-oss/ui-react\";\n\nimport { Card, CardContent, CardDescription, CardHeader, CardTitle } from \"@/components/ui/card\";\nimport { Separator } from \"@/components/ui/separator\";\nimport { SignUpAuthForm } from \"@/registry/sign-up-auth-form\";\n\nexport type { SignUpAuthScreenProps };\n\nexport function SignUpAuthScreen({ children, ...props }: SignUpAuthScreenProps) {\n const ui = useUI();\n\n const titleText = getTranslation(ui, \"labels\", \"register\");\n const subtitleText = getTranslation(ui, \"prompts\", \"enterDetailsToCreate\");\n\n return (\n \n
\n \n {titleText}\n {subtitleText}\n \n \n \n {children ? (\n <>\n {getTranslation(ui, \"messages\", \"dividerOr\")}\n {children}
\n >\n ) : null}\n \n \n
\n );\n}\n",
+ "type": "registry:component"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/packages/shadcn/public/sms-multi-factor-assertion-form.json b/packages/shadcn/public/sms-multi-factor-assertion-form.json
new file mode 100644
index 000000000..74ea8c0b9
--- /dev/null
+++ b/packages/shadcn/public/sms-multi-factor-assertion-form.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "sms-multi-factor-assertion-form",
+ "type": "registry:block",
+ "title": "SMS Multi-Factor Assertion Form",
+ "description": "A form allowing users to complete SMS-based multi-factor authentication during sign-in.",
+ "dependencies": [
+ "@firebase-oss/ui-react"
+ ],
+ "registryDependencies": [
+ "form",
+ "input",
+ "button",
+ "input-otp"
+ ],
+ "files": [
+ {
+ "path": "src/registry/sms-multi-factor-assertion-form.tsx",
+ "content": "\"use client\";\n\nimport { useRef, useState } from \"react\";\nimport { type MultiFactorInfo } from \"firebase/auth\";\n\nimport { FirebaseUIError, getTranslation } from \"@firebase-oss/ui-core\";\nimport {\n useMultiFactorPhoneAuthVerifyFormSchema,\n useRecaptchaVerifier,\n useUI,\n useSmsMultiFactorAssertionPhoneFormAction,\n useSmsMultiFactorAssertionVerifyFormAction,\n} from \"@firebase-oss/ui-react\";\nimport { useForm } from \"react-hook-form\";\nimport { standardSchemaResolver } from \"@hookform/resolvers/standard-schema\";\n\nimport { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from \"@/components/ui/form\";\nimport { Button } from \"@/components/ui/button\";\nimport { InputOTP, InputOTPGroup, InputOTPSlot } from \"@/components/ui/input-otp\";\n\ntype PhoneMultiFactorInfo = MultiFactorInfo & {\n phoneNumber?: string;\n};\n\ntype SmsMultiFactorAssertionPhoneFormProps = {\n hint: MultiFactorInfo;\n onSubmit: (verificationId: string) => void;\n};\n\nfunction SmsMultiFactorAssertionPhoneForm(props: SmsMultiFactorAssertionPhoneFormProps) {\n const ui = useUI();\n const recaptchaContainerRef = useRef(null);\n const recaptchaVerifier = useRecaptchaVerifier(recaptchaContainerRef);\n const action = useSmsMultiFactorAssertionPhoneFormAction();\n const [error, setError] = useState(null);\n\n const onSubmit = async () => {\n try {\n setError(null);\n const verificationId = await action({ hint: props.hint, recaptchaVerifier: recaptchaVerifier! });\n props.onSubmit(verificationId);\n } catch (error) {\n const message = error instanceof FirebaseUIError ? error.message : String(error);\n setError(message);\n }\n };\n\n return (\n \n
\n
\n
\n {(props.hint as PhoneMultiFactorInfo).phoneNumber || \"No phone number available\"}\n
\n
\n
\n
\n {error &&
{error}
}\n
\n );\n}\n\ntype SmsMultiFactorAssertionVerifyFormProps = {\n verificationId: string;\n onSuccess: () => void;\n};\n\nfunction SmsMultiFactorAssertionVerifyForm(props: SmsMultiFactorAssertionVerifyFormProps) {\n const ui = useUI();\n const schema = useMultiFactorPhoneAuthVerifyFormSchema();\n const action = useSmsMultiFactorAssertionVerifyFormAction();\n\n const form = useForm<{ verificationId: string; verificationCode: string }>({\n resolver: standardSchemaResolver(schema),\n defaultValues: {\n verificationId: props.verificationId,\n verificationCode: \"\",\n },\n });\n\n const onSubmit = async (values: { verificationId: string; verificationCode: string }) => {\n try {\n await action({ verificationId: values.verificationId, verificationCode: values.verificationCode });\n props.onSuccess();\n } catch (error) {\n const message = error instanceof FirebaseUIError ? error.message : String(error);\n form.setError(\"root\", { message });\n }\n };\n\n return (\n \n \n );\n}\n\nexport type SmsMultiFactorAssertionFormProps = {\n hint: MultiFactorInfo;\n onSuccess?: () => void;\n};\n\nexport function SmsMultiFactorAssertionForm(props: SmsMultiFactorAssertionFormProps) {\n const [verification, setVerification] = useState<{\n verificationId: string;\n } | null>(null);\n\n if (!verification) {\n return (\n setVerification({ verificationId })}\n />\n );\n }\n\n return (\n {\n props.onSuccess?.();\n }}\n />\n );\n}\n",
+ "type": "registry:component"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/packages/shadcn/public/sms-multi-factor-enrollment-form.json b/packages/shadcn/public/sms-multi-factor-enrollment-form.json
new file mode 100644
index 000000000..cc656d155
--- /dev/null
+++ b/packages/shadcn/public/sms-multi-factor-enrollment-form.json
@@ -0,0 +1,24 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "sms-multi-factor-enrollment-form",
+ "type": "registry:block",
+ "title": "SMS Multi-Factor Enrollment Form",
+ "description": "A form allowing users to enroll SMS-based multi-factor authentication.",
+ "dependencies": [
+ "@firebase-oss/ui-react"
+ ],
+ "registryDependencies": [
+ "form",
+ "input",
+ "button",
+ "input-otp",
+ "https://fir-ui-shadcn.web.app/country-selector.json"
+ ],
+ "files": [
+ {
+ "path": "src/registry/sms-multi-factor-enrollment-form.tsx",
+ "content": "\"use client\";\n\nimport { useRef, useState } from \"react\";\nimport { multiFactor, PhoneAuthProvider, PhoneMultiFactorGenerator } from \"firebase/auth\";\nimport {\n enrollWithMultiFactorAssertion,\n FirebaseUIError,\n formatPhoneNumber,\n getTranslation,\n verifyPhoneNumber,\n} from \"@firebase-oss/ui-core\";\nimport { CountrySelector, type CountrySelectorRef } from \"@/registry/country-selector\";\nimport {\n useMultiFactorPhoneAuthNumberFormSchema,\n useMultiFactorPhoneAuthVerifyFormSchema,\n useRecaptchaVerifier,\n useUI,\n} from \"@firebase-oss/ui-react\";\nimport { useForm } from \"react-hook-form\";\nimport { standardSchemaResolver } from \"@hookform/resolvers/standard-schema\";\n\nimport { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from \"@/components/ui/form\";\nimport { Input } from \"@/components/ui/input\";\nimport { Button } from \"@/components/ui/button\";\nimport { InputOTP, InputOTPGroup, InputOTPSlot } from \"@/components/ui/input-otp\";\n\ntype MultiFactorEnrollmentPhoneNumberFormProps = {\n onSubmit: (verificationId: string, displayName?: string) => void;\n};\n\nfunction MultiFactorEnrollmentPhoneNumberForm(props: MultiFactorEnrollmentPhoneNumberFormProps) {\n const ui = useUI();\n const recaptchaContainerRef = useRef(null);\n const recaptchaVerifier = useRecaptchaVerifier(recaptchaContainerRef);\n const countrySelector = useRef(null);\n const schema = useMultiFactorPhoneAuthNumberFormSchema();\n\n const form = useForm<{ displayName: string; phoneNumber: string }>({\n resolver: standardSchemaResolver(schema),\n defaultValues: {\n displayName: \"\",\n phoneNumber: \"\",\n },\n });\n\n const onSubmit = async (values: { displayName: string; phoneNumber: string }) => {\n try {\n const formatted = formatPhoneNumber(values.phoneNumber, countrySelector.current!.getCountry());\n const mfaUser = multiFactor(ui.auth.currentUser!);\n const confirmationResult = await verifyPhoneNumber(ui, formatted, recaptchaVerifier!, mfaUser);\n props.onSubmit(confirmationResult, values.displayName);\n } catch (error) {\n const message = error instanceof FirebaseUIError ? error.message : String(error);\n form.setError(\"root\", { message });\n }\n };\n\n return (\n \n \n );\n}\n\ntype MultiFactorEnrollmentVerifyPhoneNumberFormProps = {\n verificationId: string;\n displayName?: string;\n onSuccess: () => void;\n};\n\nexport function MultiFactorEnrollmentVerifyPhoneNumberForm(props: MultiFactorEnrollmentVerifyPhoneNumberFormProps) {\n const ui = useUI();\n const schema = useMultiFactorPhoneAuthVerifyFormSchema();\n\n const form = useForm<{ verificationId: string; verificationCode: string }>({\n resolver: standardSchemaResolver(schema),\n defaultValues: {\n verificationId: props.verificationId,\n verificationCode: \"\",\n },\n });\n\n const onSubmit = async (values: { verificationId: string; verificationCode: string }) => {\n try {\n const credential = PhoneAuthProvider.credential(values.verificationId, values.verificationCode);\n const assertion = PhoneMultiFactorGenerator.assertion(credential);\n await enrollWithMultiFactorAssertion(ui, assertion, props.displayName);\n props.onSuccess();\n } catch (error) {\n const message = error instanceof FirebaseUIError ? error.message : String(error);\n form.setError(\"root\", { message });\n }\n };\n\n return (\n \n \n );\n}\n\nexport type SmsMultiFactorEnrollmentFormProps = {\n onSuccess?: () => void;\n};\n\nexport function SmsMultiFactorEnrollmentForm(props: SmsMultiFactorEnrollmentFormProps) {\n const ui = useUI();\n\n const [verification, setVerification] = useState<{\n verificationId: string;\n displayName?: string;\n } | null>(null);\n\n if (!ui.auth.currentUser) {\n throw new Error(\"User must be authenticated to enroll with multi-factor authentication\");\n }\n\n if (!verification) {\n return (\n setVerification({ verificationId, displayName })}\n />\n );\n }\n\n return (\n {\n props.onSuccess?.();\n }}\n />\n );\n}\n",
+ "type": "registry:component"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/packages/shadcn/public/totp-multi-factor-assertion-form.json b/packages/shadcn/public/totp-multi-factor-assertion-form.json
new file mode 100644
index 000000000..3ce71ccfd
--- /dev/null
+++ b/packages/shadcn/public/totp-multi-factor-assertion-form.json
@@ -0,0 +1,22 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "totp-multi-factor-assertion-form",
+ "type": "registry:block",
+ "title": "TOTP Multi-Factor Assertion Form",
+ "description": "A form allowing users to complete TOTP-based multi-factor authentication during sign-in.",
+ "dependencies": [
+ "@firebase-oss/ui-react"
+ ],
+ "registryDependencies": [
+ "form",
+ "button",
+ "input-otp"
+ ],
+ "files": [
+ {
+ "path": "src/registry/totp-multi-factor-assertion-form.tsx",
+ "content": "\"use client\";\n\nimport { type MultiFactorInfo } from \"firebase/auth\";\nimport { FirebaseUIError, getTranslation } from \"@firebase-oss/ui-core\";\nimport {\n useMultiFactorTotpAuthVerifyFormSchema,\n useUI,\n useTotpMultiFactorAssertionFormAction,\n} from \"@firebase-oss/ui-react\";\nimport { useForm } from \"react-hook-form\";\nimport { standardSchemaResolver } from \"@hookform/resolvers/standard-schema\";\n\nimport { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from \"@/components/ui/form\";\nimport { Button } from \"@/components/ui/button\";\nimport { InputOTP, InputOTPGroup, InputOTPSlot } from \"@/components/ui/input-otp\";\n\ntype TotpMultiFactorAssertionFormProps = {\n hint: MultiFactorInfo;\n onSuccess?: () => void;\n};\n\nexport function TotpMultiFactorAssertionForm(props: TotpMultiFactorAssertionFormProps) {\n const ui = useUI();\n const schema = useMultiFactorTotpAuthVerifyFormSchema();\n const action = useTotpMultiFactorAssertionFormAction();\n\n const form = useForm<{ verificationCode: string }>({\n resolver: standardSchemaResolver(schema),\n defaultValues: {\n verificationCode: \"\",\n },\n });\n\n const onSubmit = async (values: { verificationCode: string }) => {\n try {\n await action({ verificationCode: values.verificationCode, hint: props.hint });\n props.onSuccess?.();\n } catch (error) {\n const message = error instanceof FirebaseUIError ? error.message : String(error);\n form.setError(\"root\", { message });\n }\n };\n\n return (\n \n \n );\n}\n",
+ "type": "registry:component"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/packages/shadcn/public/totp-multi-factor-enrollment-form.json b/packages/shadcn/public/totp-multi-factor-enrollment-form.json
new file mode 100644
index 000000000..ced8a0bab
--- /dev/null
+++ b/packages/shadcn/public/totp-multi-factor-enrollment-form.json
@@ -0,0 +1,23 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "totp-multi-factor-enrollment-form",
+ "type": "registry:block",
+ "title": "TOTP Multi-Factor Enrollment Form",
+ "description": "A form allowing users to enroll TOTP-based multi-factor authentication with QR code generation.",
+ "dependencies": [
+ "@firebase-oss/ui-react"
+ ],
+ "registryDependencies": [
+ "form",
+ "input",
+ "button",
+ "input-otp"
+ ],
+ "files": [
+ {
+ "path": "src/registry/totp-multi-factor-enrollment-form.tsx",
+ "content": "\"use client\";\n\nimport { useState } from \"react\";\nimport { TotpMultiFactorGenerator, type TotpSecret } from \"firebase/auth\";\nimport {\n enrollWithMultiFactorAssertion,\n FirebaseUIError,\n generateTotpQrCode,\n generateTotpSecret,\n getTranslation,\n} from \"@firebase-oss/ui-core\";\nimport {\n useMultiFactorTotpAuthNumberFormSchema,\n useMultiFactorTotpAuthVerifyFormSchema,\n useUI,\n} from \"@firebase-oss/ui-react\";\nimport { useForm } from \"react-hook-form\";\nimport { standardSchemaResolver } from \"@hookform/resolvers/standard-schema\";\n\nimport { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from \"@/components/ui/form\";\nimport { Input } from \"@/components/ui/input\";\nimport { Button } from \"@/components/ui/button\";\nimport { InputOTP, InputOTPGroup, InputOTPSlot } from \"@/components/ui/input-otp\";\n\ntype TotpMultiFactorSecretGenerationFormProps = {\n onSubmit: (secret: TotpSecret, displayName: string) => void;\n};\n\nfunction TotpMultiFactorSecretGenerationForm(props: TotpMultiFactorSecretGenerationFormProps) {\n const ui = useUI();\n const schema = useMultiFactorTotpAuthNumberFormSchema();\n\n const form = useForm<{ displayName: string }>({\n resolver: standardSchemaResolver(schema),\n defaultValues: {\n displayName: \"\",\n },\n });\n\n const onSubmit = async (values: { displayName: string }) => {\n try {\n const secret = await generateTotpSecret(ui);\n props.onSubmit(secret, values.displayName);\n } catch (error) {\n const message = error instanceof FirebaseUIError ? error.message : String(error);\n form.setError(\"root\", { message });\n }\n };\n\n return (\n \n \n );\n}\n\ntype MultiFactorEnrollmentVerifyTotpFormProps = {\n secret: TotpSecret;\n displayName: string;\n onSuccess: () => void;\n};\n\nexport function MultiFactorEnrollmentVerifyTotpForm(props: MultiFactorEnrollmentVerifyTotpFormProps) {\n const ui = useUI();\n const schema = useMultiFactorTotpAuthVerifyFormSchema();\n\n const form = useForm<{ verificationCode: string }>({\n resolver: standardSchemaResolver(schema),\n defaultValues: {\n verificationCode: \"\",\n },\n });\n\n const onSubmit = async (values: { verificationCode: string }) => {\n try {\n const assertion = TotpMultiFactorGenerator.assertionForEnrollment(props.secret, values.verificationCode);\n await enrollWithMultiFactorAssertion(ui, assertion, values.verificationCode);\n props.onSuccess();\n } catch (error) {\n const message = error instanceof FirebaseUIError ? error.message : String(error);\n form.setError(\"root\", { message });\n }\n };\n\n const qrCodeDataUrl = generateTotpQrCode(ui, props.secret, props.displayName);\n\n return (\n \n
\n
\n

\n
\n Scan this QR code with your authenticator app\n
\n
\n
\n
\n \n
\n );\n}\n\nexport type TotpMultiFactorEnrollmentFormProps = {\n onSuccess?: () => void;\n};\n\nexport function TotpMultiFactorEnrollmentForm(props: TotpMultiFactorEnrollmentFormProps) {\n const ui = useUI();\n\n const [enrollment, setEnrollment] = useState<{\n secret: TotpSecret;\n displayName: string;\n } | null>(null);\n\n if (!ui.auth.currentUser) {\n throw new Error(\"User must be authenticated to enroll with multi-factor authentication\");\n }\n\n if (!enrollment) {\n return (\n setEnrollment({ secret, displayName })} />\n );\n }\n\n return (\n {\n props.onSuccess?.();\n }}\n />\n );\n}\n",
+ "type": "registry:component"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/packages/shadcn/public/twitter-sign-in-button.json b/packages/shadcn/public/twitter-sign-in-button.json
new file mode 100644
index 000000000..a07adecc4
--- /dev/null
+++ b/packages/shadcn/public/twitter-sign-in-button.json
@@ -0,0 +1,31 @@
+{
+ "$schema": "https://ui.shadcn.com/schema/registry-item.json",
+ "name": "twitter-sign-in-button",
+ "type": "registry:block",
+ "title": "Twitter Sign In Button",
+ "description": "A button component for Twitter OAuth authentication.",
+ "dependencies": [
+ "@firebase-oss/ui-react"
+ ],
+ "registryDependencies": [
+ "https://fir-ui-shadcn.web.app/oauth-button.json"
+ ],
+ "files": [
+ {
+ "path": "src/registry/twitter-sign-in-button.tsx",
+ "content": "\"use client\";\n\nimport { TwitterAuthProvider } from \"firebase/auth\";\nimport { getTranslation } from \"@firebase-oss/ui-core\";\nimport { useUI, type TwitterSignInButtonProps, TwitterLogo } from \"@firebase-oss/ui-react\";\n\nimport { OAuthButton } from \"@/registry/oauth-button\";\n\nexport type { TwitterSignInButtonProps };\n\nexport function TwitterSignInButton({ provider, themed }: TwitterSignInButtonProps) {\n const ui = useUI();\n\n return (\n \n \n {getTranslation(ui, \"labels\", \"signInWithTwitter\")}\n \n );\n}\n",
+ "type": "registry:component"
+ }
+ ],
+ "css": {
+ "@layer components": {
+ "button[data-provider='twitter.com'][data-themed='true']": {
+ "--twitter-primary": "#1DA1F2",
+ "--color-primary": "var(--twitter-primary)",
+ "--color-primary-hover": "--alpha(var(--twitter-primary) / 85%)",
+ "--color-primary-surface": "#FFFFFF",
+ "--color-border": "var(--twitter-primary)"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/packages/shadcn/registry-spec.json b/packages/shadcn/registry-spec.json
index 271bfcec4..1943c0d4e 100644
--- a/packages/shadcn/registry-spec.json
+++ b/packages/shadcn/registry-spec.json
@@ -11,8 +11,8 @@
"type": "registry:block",
"title": "Apple Sign In Button",
"description": "A button component for Apple OAuth authentication.",
- "dependencies": ["{{ DEP | @invertase/firebaseui-react }}"],
- "registryDependencies": ["{{ DOMAIN }}/r/oauth-button.json"],
+ "dependencies": ["{{ DEP | @firebase-oss/ui-react }}"],
+ "registryDependencies": ["{{ DOMAIN }}/oauth-button.json"],
"files": [
{
"path": "src/components/apple-sign-in-button.tsx",
@@ -44,7 +44,7 @@
"type": "registry:block",
"title": "Country Selector",
"description": "A country selector component for phone number input with country codes and flags.",
- "dependencies": ["{{ DEP | @invertase/firebaseui-react }}"],
+ "dependencies": ["{{ DEP | @firebase-oss/ui-react }}"],
"registryDependencies": ["select"],
"files": [
{
@@ -61,8 +61,8 @@
"type": "registry:block",
"title": "Email Link Auth Form",
"description": "A form allowing users to sign in via email link.",
- "dependencies": ["{{ DEP | @invertase/firebaseui-react }}"],
- "registryDependencies": ["input", "button", "form", "alert", "{{ DOMAIN }}/r/policies.json"],
+ "dependencies": ["{{ DEP | @firebase-oss/ui-react }}"],
+ "registryDependencies": ["input", "button", "form", "{{ DOMAIN }}/policies.json"],
"files": [
{
"path": "src/components/email-link-auth-form.tsx",
@@ -78,13 +78,8 @@
"type": "registry:block",
"title": "Email Link Auth Screen",
"description": "A screen allowing users to sign in via email link.",
- "dependencies": ["{{ DEP | @invertase/firebaseui-react }}"],
- "registryDependencies": [
- "separator",
- "card",
- "{{ DOMAIN }}/r/email-link-auth-form.json",
- "{{ DOMAIN }}/r/redirect-error.json"
- ],
+ "dependencies": ["{{ DEP | @firebase-oss/ui-react }}"],
+ "registryDependencies": ["separator", "card", "{{ DOMAIN }}/email-link-auth-form.json"],
"files": [
{
"path": "src/components/email-link-auth-screen.tsx",
@@ -100,8 +95,8 @@
"type": "registry:block",
"title": "Facebook Sign In Button",
"description": "A button component for Facebook OAuth authentication.",
- "dependencies": ["{{ DEP | @invertase/firebaseui-react }}"],
- "registryDependencies": ["{{ DOMAIN }}/r/oauth-button.json"],
+ "dependencies": ["{{ DEP | @firebase-oss/ui-react }}"],
+ "registryDependencies": ["{{ DOMAIN }}/oauth-button.json"],
"files": [
{
"path": "src/components/facebook-sign-in-button.tsx",
@@ -126,8 +121,8 @@
"type": "registry:block",
"title": "Forgot Password Auth Form",
"description": "A form allowing users to reset their password via email.",
- "dependencies": ["{{ DEP | @invertase/firebaseui-react }}"],
- "registryDependencies": ["input", "button", "form", "{{ DOMAIN }}/r/policies.json"],
+ "dependencies": ["{{ DEP | @firebase-oss/ui-react }}"],
+ "registryDependencies": ["input", "button", "form", "{{ DOMAIN }}/policies.json"],
"files": [
{
"path": "src/components/forgot-password-auth-form.tsx",
@@ -143,8 +138,8 @@
"type": "registry:block",
"title": "Forgot Password Auth Screen",
"description": "A screen allowing users to reset their password via email.",
- "dependencies": ["{{ DEP | @invertase/firebaseui-react }}"],
- "registryDependencies": ["card", "{{ DOMAIN }}/r/forgot-password-auth-form.json"],
+ "dependencies": ["{{ DEP | @firebase-oss/ui-react }}"],
+ "registryDependencies": ["card", "{{ DOMAIN }}/forgot-password-auth-form.json"],
"files": [
{
"path": "src/components/forgot-password-auth-screen.tsx",
@@ -160,8 +155,8 @@
"type": "registry:block",
"title": "GitHub Sign In Button",
"description": "A button component for GitHub OAuth authentication.",
- "dependencies": ["{{ DEP | @invertase/firebaseui-react }}"],
- "registryDependencies": ["{{ DOMAIN }}/r/oauth-button.json"],
+ "dependencies": ["{{ DEP | @firebase-oss/ui-react }}"],
+ "registryDependencies": ["{{ DOMAIN }}/oauth-button.json"],
"files": [
{
"path": "src/components/github-sign-in-button.tsx",
@@ -193,8 +188,8 @@
"type": "registry:block",
"title": "Google Sign In Button",
"description": "A button component for Google OAuth authentication.",
- "dependencies": ["{{ DEP | @invertase/firebaseui-react }}"],
- "registryDependencies": ["{{ DOMAIN }}/r/oauth-button.json"],
+ "dependencies": ["{{ DEP | @firebase-oss/ui-react }}"],
+ "registryDependencies": ["{{ DOMAIN }}/oauth-button.json"],
"files": [
{
"path": "src/components/google-sign-in-button.tsx",
@@ -231,8 +226,8 @@
"type": "registry:block",
"title": "Microsoft Sign In Button",
"description": "A button component for Microsoft OAuth authentication.",
- "dependencies": ["{{ DEP | @invertase/firebaseui-react }}"],
- "registryDependencies": ["{{ DOMAIN }}/r/oauth-button.json"],
+ "dependencies": ["{{ DEP | @firebase-oss/ui-react }}"],
+ "registryDependencies": ["{{ DOMAIN }}/oauth-button.json"],
"files": [
{
"path": "src/components/microsoft-sign-in-button.tsx",
@@ -264,7 +259,7 @@
"type": "registry:block",
"title": "Multi-Factor Auth Assertion Form",
"description": "A form allowing users to complete multi-factor authentication during sign-in with TOTP or SMS options.",
- "dependencies": ["{{ DEP | @invertase/firebaseui-react }}"],
+ "dependencies": ["{{ DEP | @firebase-oss/ui-react }}"],
"registryDependencies": [
"button",
"{{ DOMAIN }}/r/sms-multi-factor-assertion-form.json",
@@ -285,7 +280,7 @@
"type": "registry:block",
"title": "Multi-Factor Auth Assertion Screen",
"description": "A screen allowing users to complete multi-factor authentication during sign-in with TOTP or SMS options.",
- "dependencies": ["{{ DEP | @invertase/firebaseui-react }}"],
+ "dependencies": ["{{ DEP | @firebase-oss/ui-react }}"],
"registryDependencies": ["card", "{{ DOMAIN }}/r/multi-factor-auth-assertion-form.json"],
"files": [
{
@@ -302,7 +297,7 @@
"type": "registry:block",
"title": "Multi-Factor Auth Enrollment Form",
"description": "A form allowing users to select and configure multi-factor authentication methods.",
- "dependencies": ["{{ DEP | @invertase/firebaseui-react }}"],
+ "dependencies": ["{{ DEP | @firebase-oss/ui-react }}"],
"registryDependencies": [
"button",
"{{ DOMAIN }}/r/sms-multi-factor-enrollment-form.json",
@@ -323,8 +318,8 @@
"type": "registry:block",
"title": "Multi-Factor Auth Enrollment Screen",
"description": "A screen allowing users to set up multi-factor authentication with TOTP or SMS options.",
- "dependencies": ["{{ DEP | @invertase/firebaseui-react }}"],
- "registryDependencies": ["card", "{{ DOMAIN }}/r/multi-factor-auth-enrollment-form.json"],
+ "dependencies": ["{{ DEP | @firebase-oss/ui-react }}"],
+ "registryDependencies": ["card", "{{ DOMAIN }}/multi-factor-auth-enrollment-form.json"],
"files": [
{
"path": "src/components/multi-factor-auth-enrollment-screen.tsx",
@@ -340,7 +335,7 @@
"type": "registry:block",
"title": "OAuth Button",
"description": "A button component for OAuth authentication providers.",
- "dependencies": ["{{ DEP | @invertase/firebaseui-react }}"],
+ "dependencies": ["{{ DEP | @firebase-oss/ui-react }}"],
"registryDependencies": ["button"],
"files": [
{
@@ -357,7 +352,7 @@
"type": "registry:block",
"title": "OAuth Screen",
"description": "A screen allowing users to sign in with OAuth providers.",
- "dependencies": ["{{ DEP | @invertase/firebaseui-react }}"],
+ "dependencies": ["{{ DEP | @firebase-oss/ui-react }}"],
"registryDependencies": [
"card",
"{{ DOMAIN }}/r/policies.json",
@@ -379,7 +374,7 @@
"type": "registry:block",
"title": "Phone Auth Form",
"description": "A form allowing users to authenticate using their phone number with SMS verification.",
- "dependencies": ["{{ DEP | @invertase/firebaseui-react }}"],
+ "dependencies": ["{{ DEP | @firebase-oss/ui-react }}"],
"registryDependencies": [
"form",
"input",
@@ -402,7 +397,7 @@
"type": "registry:block",
"title": "Phone Auth Screen",
"description": "A screen allowing users to authenticate using their phone number with SMS verification.",
- "dependencies": ["{{ DEP | @invertase/firebaseui-react }}"],
+ "dependencies": ["{{ DEP | @firebase-oss/ui-react }}"],
"registryDependencies": [
"card",
"separator",
@@ -425,7 +420,7 @@
"type": "registry:block",
"title": "Policies",
"description": "A component allowing users to navigate to the terms of service and privacy policy.",
- "dependencies": ["{{ DEP | @invertase/firebaseui-react }}"],
+ "dependencies": ["{{ DEP | @firebase-oss/ui-react }}"],
"files": [
{
"path": "src/components/policies.tsx",
@@ -441,7 +436,7 @@
"type": "registry:block",
"title": "Redirect Error",
"description": "A component that displays redirect errors from Firebase UI authentication flow.",
- "dependencies": ["{{ DEP | @invertase/firebaseui-react }}"],
+ "dependencies": ["{{ DEP | @firebase-oss/ui-react }}"],
"files": [
{
"path": "src/components/redirect-error.tsx",
@@ -457,8 +452,8 @@
"type": "registry:block",
"title": "Sign In Auth Form",
"description": "A form allowing users to sign in with email and password.",
- "dependencies": ["{{ DEP | @invertase/firebaseui-react }}"],
- "registryDependencies": ["input", "button", "form", "{{ DOMAIN }}/r/policies.json"],
+ "dependencies": ["{{ DEP | @firebase-oss/ui-react }}"],
+ "registryDependencies": ["input", "button", "form", "{{ DOMAIN }}/policies.json"],
"files": [
{
"path": "src/components/sign-in-auth-form.tsx",
@@ -474,13 +469,8 @@
"type": "registry:block",
"title": "Sign In Auth Screen",
"description": "A screen allowing users to sign in with email and password.",
- "dependencies": ["{{ DEP | @invertase/firebaseui-react }}"],
- "registryDependencies": [
- "separator",
- "card",
- "{{ DOMAIN }}/r/sign-in-auth-form.json",
- "{{ DOMAIN }}/r/multi-factor-auth-assertion-screen.json"
- ],
+ "dependencies": ["{{ DEP | @firebase-oss/ui-react }}"],
+ "registryDependencies": ["separator", "card", "{{ DOMAIN }}/sign-in-auth-form.json"],
"files": [
{
"path": "src/components/sign-in-auth-screen.tsx",
@@ -496,8 +486,8 @@
"type": "registry:block",
"title": "Sign Up Auth Form",
"description": "A form allowing users to sign up with email and password.",
- "dependencies": ["{{ DEP | @invertase/firebaseui-react }}"],
- "registryDependencies": ["input", "button", "form", "{{ DOMAIN }}/r/policies.json"],
+ "dependencies": ["{{ DEP | @firebase-oss/ui-react }}"],
+ "registryDependencies": ["input", "button", "form", "{{ DOMAIN }}/policies.json"],
"files": [
{
"path": "src/components/sign-up-auth-form.tsx",
@@ -513,13 +503,8 @@
"type": "registry:block",
"title": "Sign Up Auth Screen",
"description": "A screen allowing users to sign up with email and password.",
- "dependencies": ["{{ DEP | @invertase/firebaseui-react }}"],
- "registryDependencies": [
- "separator",
- "card",
- "{{ DOMAIN }}/r/sign-up-auth-form.json",
- "{{ DOMAIN }}/r/multi-factor-auth-assertion-screen.json"
- ],
+ "dependencies": ["{{ DEP | @firebase-oss/ui-react }}"],
+ "registryDependencies": ["separator", "card", "{{ DOMAIN }}/sign-up-auth-form.json"],
"files": [
{
"path": "src/components/sign-up-auth-screen.tsx",
@@ -535,7 +520,7 @@
"type": "registry:block",
"title": "SMS Multi-Factor Assertion Form",
"description": "A form allowing users to complete SMS-based multi-factor authentication during sign-in.",
- "dependencies": ["{{ DEP | @invertase/firebaseui-react }}"],
+ "dependencies": ["{{ DEP | @firebase-oss/ui-react }}"],
"registryDependencies": ["form", "input", "button", "input-otp"],
"files": [
{
@@ -552,8 +537,8 @@
"type": "registry:block",
"title": "SMS Multi-Factor Enrollment Form",
"description": "A form allowing users to enroll SMS-based multi-factor authentication.",
- "dependencies": ["{{ DEP | @invertase/firebaseui-react }}"],
- "registryDependencies": ["form", "input", "button", "input-otp", "{{ DOMAIN }}/r/country-selector.json"],
+ "dependencies": ["{{ DEP | @firebase-oss/ui-react }}"],
+ "registryDependencies": ["form", "input", "button", "input-otp", "{{ DOMAIN }}/country-selector.json"],
"files": [
{
"path": "src/components/sms-multi-factor-enrollment-form.tsx",
@@ -569,7 +554,7 @@
"type": "registry:block",
"title": "TOTP Multi-Factor Assertion Form",
"description": "A form allowing users to complete TOTP-based multi-factor authentication during sign-in.",
- "dependencies": ["{{ DEP | @invertase/firebaseui-react }}"],
+ "dependencies": ["{{ DEP | @firebase-oss/ui-react }}"],
"registryDependencies": ["form", "button", "input-otp"],
"files": [
{
@@ -586,7 +571,7 @@
"type": "registry:block",
"title": "TOTP Multi-Factor Enrollment Form",
"description": "A form allowing users to enroll TOTP-based multi-factor authentication with QR code generation.",
- "dependencies": ["{{ DEP | @invertase/firebaseui-react }}"],
+ "dependencies": ["{{ DEP | @firebase-oss/ui-react }}"],
"registryDependencies": ["form", "input", "button", "input-otp"],
"files": [
{
@@ -603,8 +588,8 @@
"type": "registry:block",
"title": "Twitter Sign In Button",
"description": "A button component for Twitter OAuth authentication.",
- "dependencies": ["{{ DEP | @invertase/firebaseui-react }}"],
- "registryDependencies": ["{{ DOMAIN }}/r/oauth-button.json"],
+ "dependencies": ["{{ DEP | @firebase-oss/ui-react }}"],
+ "registryDependencies": ["{{ DOMAIN }}/oauth-button.json"],
"files": [
{
"path": "src/components/twitter-sign-in-button.tsx",
diff --git a/packages/shadcn/src/components/apple-sign-in-button.test.tsx b/packages/shadcn/src/components/apple-sign-in-button.test.tsx
index 490b11362..77cc8635f 100644
--- a/packages/shadcn/src/components/apple-sign-in-button.test.tsx
+++ b/packages/shadcn/src/components/apple-sign-in-button.test.tsx
@@ -18,9 +18,9 @@ import { describe, it, expect, vi, afterEach, beforeEach } from "vitest";
import { render, screen, cleanup } from "@testing-library/react";
import { AppleSignInButton } from "./apple-sign-in-button";
import { createMockUI } from "../../tests/utils";
-import { registerLocale } from "@invertase/firebaseui-translations";
+import { registerLocale } from "@firebase-oss/ui-translations";
import { OAuthProvider } from "firebase/auth";
-import { FirebaseUIProvider } from "@invertase/firebaseui-react";
+import { FirebaseUIProvider } from "@firebase-oss/ui-react";
vi.mock("./oauth-button", () => ({
OAuthButton: ({ provider, children, themed, onSignIn }: any) => (
@@ -33,8 +33,8 @@ vi.mock("./oauth-button", () => ({
),
}));
-vi.mock("@invertase/firebaseui-react", async (importOriginal) => {
- const mod = await importOriginal();
+vi.mock("@firebase-oss/ui-react", async (importOriginal) => {
+ const mod = await importOriginal();
return {
...mod,
AppleLogo: ({ className, ...props }: any) => (
diff --git a/packages/shadcn/src/components/apple-sign-in-button.tsx b/packages/shadcn/src/components/apple-sign-in-button.tsx
index 4aa656fff..01eaf0acf 100644
--- a/packages/shadcn/src/components/apple-sign-in-button.tsx
+++ b/packages/shadcn/src/components/apple-sign-in-button.tsx
@@ -17,8 +17,8 @@
"use client";
import { OAuthProvider } from "firebase/auth";
-import { getTranslation } from "@invertase/firebaseui-core";
-import { useUI, type AppleSignInButtonProps, AppleLogo } from "@invertase/firebaseui-react";
+import { getTranslation } from "@firebase-oss/ui-core";
+import { useUI, type AppleSignInButtonProps, AppleLogo } from "@firebase-oss/ui-react";
import { OAuthButton } from "@/components/oauth-button";
diff --git a/packages/shadcn/src/components/country-selector.test.tsx b/packages/shadcn/src/components/country-selector.test.tsx
index f7a2e6651..9c22e7720 100644
--- a/packages/shadcn/src/components/country-selector.test.tsx
+++ b/packages/shadcn/src/components/country-selector.test.tsx
@@ -16,13 +16,13 @@
import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
import { render, screen, cleanup, renderHook, waitFor } from "@testing-library/react";
-import { countryCodes } from "@invertase/firebaseui-core";
+import { countryCodes } from "@firebase-oss/ui-core";
import { CountrySelector } from "./country-selector";
import { createMockUI, createFirebaseUIProvider } from "../../tests/utils";
-import { FirebaseUIProvider } from "@invertase/firebaseui-react";
-import { useCountries, useDefaultCountry } from "@invertase/firebaseui-react";
+import { FirebaseUIProvider } from "@firebase-oss/ui-react";
+import { useCountries, useDefaultCountry } from "@firebase-oss/ui-react";
import type { RefObject } from "react";
-import type { CountrySelectorRef } from "@invertase/firebaseui-react";
+import type { CountrySelectorRef } from "@firebase-oss/ui-react";
// Mock the shadcn Select components
vi.mock("@/components/ui/select", () => ({
diff --git a/packages/shadcn/src/components/country-selector.tsx b/packages/shadcn/src/components/country-selector.tsx
index aa9c38e39..15599609a 100644
--- a/packages/shadcn/src/components/country-selector.tsx
+++ b/packages/shadcn/src/components/country-selector.tsx
@@ -17,13 +17,13 @@
"use client";
import { forwardRef, useCallback, useImperativeHandle, useState } from "react";
-import type { CountryCode, CountryData } from "@invertase/firebaseui-core";
+import type { CountryCode, CountryData } from "@firebase-oss/ui-core";
import {
type CountrySelectorRef,
type CountrySelectorProps,
useCountries,
useDefaultCountry,
-} from "@invertase/firebaseui-react";
+} from "@firebase-oss/ui-react";
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select";
diff --git a/packages/shadcn/src/components/email-link-auth-form.test.tsx b/packages/shadcn/src/components/email-link-auth-form.test.tsx
index ae0396ab2..233cc6f94 100644
--- a/packages/shadcn/src/components/email-link-auth-form.test.tsx
+++ b/packages/shadcn/src/components/email-link-auth-form.test.tsx
@@ -18,15 +18,15 @@ import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
import { render, screen, fireEvent, cleanup, waitFor } from "@testing-library/react";
import { EmailLinkAuthForm } from "./email-link-auth-form";
import { act } from "react";
-import { useEmailLinkAuthFormAction } from "@invertase/firebaseui-react";
+import { useEmailLinkAuthFormAction } from "@firebase-oss/ui-react";
import { createMockUI } from "../../tests/utils";
-import { registerLocale } from "@invertase/firebaseui-translations";
-import { FirebaseUIProvider } from "@invertase/firebaseui-react";
-import { UserCredential } from "firebase/auth";
-import { completeEmailLinkSignIn } from "@invertase/firebaseui-core";
+import { registerLocale } from "@firebase-oss/ui-translations";
+import { FirebaseUIProvider } from "@firebase-oss/ui-react";
+import type { UserCredential } from "firebase/auth";
+import { completeEmailLinkSignIn } from "@firebase-oss/ui-core";
-vi.mock("@invertase/firebaseui-core", async (importOriginal) => {
- const mod = await importOriginal();
+vi.mock("@firebase-oss/ui-core", async (importOriginal) => {
+ const mod = await importOriginal();
return {
...mod,
sendSignInLinkToEmail: vi.fn(),
@@ -34,8 +34,8 @@ vi.mock("@invertase/firebaseui-core", async (importOriginal) => {
};
});
-vi.mock("@invertase/firebaseui-react", async (importOriginal) => {
- const mod = await importOriginal();
+vi.mock("@firebase-oss/ui-react", async (importOriginal) => {
+ const mod = await importOriginal();
return {
...mod,
useEmailLinkAuthFormAction: vi.fn(),
diff --git a/packages/shadcn/src/components/email-link-auth-form.tsx b/packages/shadcn/src/components/email-link-auth-form.tsx
index f34c7a304..6ca8509a8 100644
--- a/packages/shadcn/src/components/email-link-auth-form.tsx
+++ b/packages/shadcn/src/components/email-link-auth-form.tsx
@@ -16,16 +16,17 @@
"use client";
-import { standardSchemaResolver } from "@hookform/resolvers/standard-schema";
-import type { EmailLinkAuthFormSchema } from "@invertase/firebaseui-core";
-import { FirebaseUIError, getTranslation } from "@invertase/firebaseui-core";
+import type { EmailLinkAuthFormSchema } from "@firebase-oss/ui-core";
import {
+ useUI,
useEmailLinkAuthFormAction,
- useEmailLinkAuthFormCompleteSignIn,
useEmailLinkAuthFormSchema,
- useUI,
+ useEmailLinkAuthFormCompleteSignIn,
type EmailLinkAuthFormProps,
-} from "@invertase/firebaseui-react";
+} from "@firebase-oss/ui-react";
+import { useForm } from "react-hook-form";
+import { standardSchemaResolver } from "@hookform/resolvers/standard-schema";
+import { FirebaseUIError, getTranslation } from "@firebase-oss/ui-core";
import { useState } from "react";
import { useForm } from "react-hook-form";
diff --git a/packages/shadcn/src/components/email-link-auth-screen.test.tsx b/packages/shadcn/src/components/email-link-auth-screen.test.tsx
index 3bc4493b5..05e9ab796 100644
--- a/packages/shadcn/src/components/email-link-auth-screen.test.tsx
+++ b/packages/shadcn/src/components/email-link-auth-screen.test.tsx
@@ -18,8 +18,8 @@ import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
import { render, screen, cleanup, act } from "@testing-library/react";
import { EmailLinkAuthScreen } from "./email-link-auth-screen";
import { createMockUI } from "../../tests/utils";
-import { registerLocale } from "@invertase/firebaseui-translations";
-import { FirebaseUIProvider } from "@invertase/firebaseui-react";
+import { registerLocale } from "@firebase-oss/ui-translations";
+import { FirebaseUIProvider } from "@firebase-oss/ui-react";
import { MultiFactorResolver, type User } from "firebase/auth";
vi.mock("./email-link-auth-form", () => ({
diff --git a/packages/shadcn/src/components/email-link-auth-screen.tsx b/packages/shadcn/src/components/email-link-auth-screen.tsx
index dcb962dfa..044d02859 100644
--- a/packages/shadcn/src/components/email-link-auth-screen.tsx
+++ b/packages/shadcn/src/components/email-link-auth-screen.tsx
@@ -16,8 +16,8 @@
"use client";
-import { getTranslation } from "@invertase/firebaseui-core";
-import { useUI, type EmailLinkAuthScreenProps, useOnUserAuthenticated } from "@invertase/firebaseui-react";
+import { getTranslation } from "@firebase-oss/ui-core";
+import { useUI, type EmailLinkAuthScreenProps, useOnUserAuthenticated } from "@firebase-oss/ui-react";
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card";
import { Separator } from "@/components/ui/separator";
diff --git a/packages/shadcn/src/components/facebook-sign-in-button.test.tsx b/packages/shadcn/src/components/facebook-sign-in-button.test.tsx
index daebce5fb..9357c3051 100644
--- a/packages/shadcn/src/components/facebook-sign-in-button.test.tsx
+++ b/packages/shadcn/src/components/facebook-sign-in-button.test.tsx
@@ -18,9 +18,9 @@ import { describe, it, expect, vi, afterEach, beforeEach } from "vitest";
import { render, screen, cleanup } from "@testing-library/react";
import { FacebookSignInButton } from "./facebook-sign-in-button";
import { createMockUI } from "../../tests/utils";
-import { registerLocale } from "@invertase/firebaseui-translations";
+import { registerLocale } from "@firebase-oss/ui-translations";
import { FacebookAuthProvider } from "firebase/auth";
-import { FirebaseUIProvider } from "@invertase/firebaseui-react";
+import { FirebaseUIProvider } from "@firebase-oss/ui-react";
vi.mock("./oauth-button", () => ({
OAuthButton: ({ provider, children, themed, onSignIn }: any) => (
@@ -33,8 +33,8 @@ vi.mock("./oauth-button", () => ({
),
}));
-vi.mock("@invertase/firebaseui-react", async (importOriginal) => {
- const mod = await importOriginal();
+vi.mock("@firebase-oss/ui-react", async (importOriginal) => {
+ const mod = await importOriginal();
return {
...mod,
FacebookLogo: ({ className, ...props }: any) => (
diff --git a/packages/shadcn/src/components/facebook-sign-in-button.tsx b/packages/shadcn/src/components/facebook-sign-in-button.tsx
index 0afdc44a8..b65311ad0 100644
--- a/packages/shadcn/src/components/facebook-sign-in-button.tsx
+++ b/packages/shadcn/src/components/facebook-sign-in-button.tsx
@@ -17,8 +17,8 @@
"use client";
import { FacebookAuthProvider } from "firebase/auth";
-import { getTranslation } from "@invertase/firebaseui-core";
-import { useUI, type FacebookSignInButtonProps, FacebookLogo } from "@invertase/firebaseui-react";
+import { getTranslation } from "@firebase-oss/ui-core";
+import { useUI, type FacebookSignInButtonProps, FacebookLogo } from "@firebase-oss/ui-react";
import { OAuthButton } from "@/components/oauth-button";
diff --git a/packages/shadcn/src/components/forgot-password-auth-form.test.tsx b/packages/shadcn/src/components/forgot-password-auth-form.test.tsx
index 3a9a4efa3..b363e14e1 100644
--- a/packages/shadcn/src/components/forgot-password-auth-form.test.tsx
+++ b/packages/shadcn/src/components/forgot-password-auth-form.test.tsx
@@ -18,21 +18,21 @@ import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
import { render, screen, fireEvent, cleanup, waitFor } from "@testing-library/react";
import { ForgotPasswordAuthForm } from "./forgot-password-auth-form";
import { act } from "react";
-import { useForgotPasswordAuthFormAction } from "@invertase/firebaseui-react";
+import { useForgotPasswordAuthFormAction } from "@firebase-oss/ui-react";
import { createMockUI } from "../../tests/utils";
-import { registerLocale } from "@invertase/firebaseui-translations";
-import { FirebaseUIProvider } from "@invertase/firebaseui-react";
+import { registerLocale } from "@firebase-oss/ui-translations";
+import { FirebaseUIProvider } from "@firebase-oss/ui-react";
-vi.mock("@invertase/firebaseui-core", async (importOriginal) => {
- const mod = await importOriginal();
+vi.mock("@firebase-oss/ui-core", async (importOriginal) => {
+ const mod = await importOriginal();
return {
...mod,
sendPasswordResetEmail: vi.fn(),
};
});
-vi.mock("@invertase/firebaseui-react", async (importOriginal) => {
- const mod = await importOriginal();
+vi.mock("@firebase-oss/ui-react", async (importOriginal) => {
+ const mod = await importOriginal();
return {
...mod,
useForgotPasswordAuthFormAction: vi.fn(),
diff --git a/packages/shadcn/src/components/forgot-password-auth-form.tsx b/packages/shadcn/src/components/forgot-password-auth-form.tsx
index c7fad3fe8..60546ce1f 100644
--- a/packages/shadcn/src/components/forgot-password-auth-form.tsx
+++ b/packages/shadcn/src/components/forgot-password-auth-form.tsx
@@ -16,16 +16,16 @@
"use client";
-import type { ForgotPasswordAuthFormSchema } from "@invertase/firebaseui-core";
+import type { ForgotPasswordAuthFormSchema } from "@firebase-oss/ui-core";
import {
useForgotPasswordAuthFormAction,
useForgotPasswordAuthFormSchema,
useUI,
type ForgotPasswordAuthFormProps,
-} from "@invertase/firebaseui-react";
+} from "@firebase-oss/ui-react";
import { useForm } from "react-hook-form";
import { standardSchemaResolver } from "@hookform/resolvers/standard-schema";
-import { FirebaseUIError, getTranslation } from "@invertase/firebaseui-core";
+import { FirebaseUIError, getTranslation } from "@firebase-oss/ui-core";
import { useState } from "react";
import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from "@/components/ui/form";
diff --git a/packages/shadcn/src/components/forgot-password-auth-screen.test.tsx b/packages/shadcn/src/components/forgot-password-auth-screen.test.tsx
index f35b9a18d..c5302aef0 100644
--- a/packages/shadcn/src/components/forgot-password-auth-screen.test.tsx
+++ b/packages/shadcn/src/components/forgot-password-auth-screen.test.tsx
@@ -18,8 +18,8 @@ import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
import { render, screen, cleanup } from "@testing-library/react";
import { ForgotPasswordAuthScreen } from "./forgot-password-auth-screen";
import { createMockUI } from "../../tests/utils";
-import { registerLocale } from "@invertase/firebaseui-translations";
-import { FirebaseUIProvider } from "@invertase/firebaseui-react";
+import { registerLocale } from "@firebase-oss/ui-translations";
+import { FirebaseUIProvider } from "@firebase-oss/ui-react";
vi.mock("./forgot-password-auth-form", () => ({
ForgotPasswordAuthForm: ({ onPasswordSent, onBackToSignInClick }: any) => (
diff --git a/packages/shadcn/src/components/forgot-password-auth-screen.tsx b/packages/shadcn/src/components/forgot-password-auth-screen.tsx
index 6f92dd180..338ea8629 100644
--- a/packages/shadcn/src/components/forgot-password-auth-screen.tsx
+++ b/packages/shadcn/src/components/forgot-password-auth-screen.tsx
@@ -16,8 +16,8 @@
"use client";
-import { getTranslation } from "@invertase/firebaseui-core";
-import { useUI, type ForgotPasswordAuthScreenProps } from "@invertase/firebaseui-react";
+import { getTranslation } from "@firebase-oss/ui-core";
+import { useUI, type ForgotPasswordAuthScreenProps } from "@firebase-oss/ui-react";
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card";
import { ForgotPasswordAuthForm } from "@/components/forgot-password-auth-form";
diff --git a/packages/shadcn/src/components/github-sign-in-button.test.tsx b/packages/shadcn/src/components/github-sign-in-button.test.tsx
index 7a35558b1..d7fd1d3eb 100644
--- a/packages/shadcn/src/components/github-sign-in-button.test.tsx
+++ b/packages/shadcn/src/components/github-sign-in-button.test.tsx
@@ -18,9 +18,9 @@ import { describe, it, expect, vi, afterEach, beforeEach } from "vitest";
import { render, screen, cleanup } from "@testing-library/react";
import { GitHubSignInButton } from "./github-sign-in-button";
import { createMockUI } from "../../tests/utils";
-import { registerLocale } from "@invertase/firebaseui-translations";
+import { registerLocale } from "@firebase-oss/ui-translations";
import { GithubAuthProvider } from "firebase/auth";
-import { FirebaseUIProvider } from "@invertase/firebaseui-react";
+import { FirebaseUIProvider } from "@firebase-oss/ui-react";
vi.mock("./oauth-button", () => ({
OAuthButton: ({ provider, children, themed, onSignIn }: any) => (
@@ -33,8 +33,8 @@ vi.mock("./oauth-button", () => ({
),
}));
-vi.mock("@invertase/firebaseui-react", async (importOriginal) => {
- const mod = await importOriginal();
+vi.mock("@firebase-oss/ui-react", async (importOriginal) => {
+ const mod = await importOriginal();
return {
...mod,
GitHubLogo: ({ className, ...props }: any) => (
diff --git a/packages/shadcn/src/components/github-sign-in-button.tsx b/packages/shadcn/src/components/github-sign-in-button.tsx
index 094160352..e93e581bf 100644
--- a/packages/shadcn/src/components/github-sign-in-button.tsx
+++ b/packages/shadcn/src/components/github-sign-in-button.tsx
@@ -17,8 +17,8 @@
"use client";
import { GithubAuthProvider } from "firebase/auth";
-import { getTranslation } from "@invertase/firebaseui-core";
-import { useUI, type GitHubSignInButtonProps, GitHubLogo } from "@invertase/firebaseui-react";
+import { getTranslation } from "@firebase-oss/ui-core";
+import { useUI, type GitHubSignInButtonProps, GitHubLogo } from "@firebase-oss/ui-react";
import { OAuthButton } from "@/components/oauth-button";
diff --git a/packages/shadcn/src/components/google-sign-in-button.test.tsx b/packages/shadcn/src/components/google-sign-in-button.test.tsx
index d7765f1c8..aab0a8483 100644
--- a/packages/shadcn/src/components/google-sign-in-button.test.tsx
+++ b/packages/shadcn/src/components/google-sign-in-button.test.tsx
@@ -18,9 +18,9 @@ import { describe, it, expect, vi, afterEach, beforeEach } from "vitest";
import { render, screen, cleanup } from "@testing-library/react";
import { GoogleSignInButton } from "./google-sign-in-button";
import { createMockUI } from "../../tests/utils";
-import { registerLocale } from "@invertase/firebaseui-translations";
+import { registerLocale } from "@firebase-oss/ui-translations";
import { GoogleAuthProvider } from "firebase/auth";
-import { FirebaseUIProvider } from "@invertase/firebaseui-react";
+import { FirebaseUIProvider } from "@firebase-oss/ui-react";
vi.mock("./oauth-button", () => ({
OAuthButton: ({ provider, children, themed, onSignIn }: any) => (
@@ -33,8 +33,8 @@ vi.mock("./oauth-button", () => ({
),
}));
-vi.mock("@invertase/firebaseui-react", async (importOriginal) => {
- const mod = await importOriginal();
+vi.mock("@firebase-oss/ui-react", async (importOriginal) => {
+ const mod = await importOriginal();
return {
...mod,
GoogleLogo: ({ className, ...props }: any) => (
diff --git a/packages/shadcn/src/components/google-sign-in-button.tsx b/packages/shadcn/src/components/google-sign-in-button.tsx
index 3cb91d41f..596bc6724 100644
--- a/packages/shadcn/src/components/google-sign-in-button.tsx
+++ b/packages/shadcn/src/components/google-sign-in-button.tsx
@@ -17,8 +17,8 @@
"use client";
import { GoogleAuthProvider } from "firebase/auth";
-import { getTranslation } from "@invertase/firebaseui-core";
-import { useUI, type GoogleSignInButtonProps, GoogleLogo } from "@invertase/firebaseui-react";
+import { getTranslation } from "@firebase-oss/ui-core";
+import { useUI, type GoogleSignInButtonProps, GoogleLogo } from "@firebase-oss/ui-react";
import { OAuthButton } from "@/components/oauth-button";
diff --git a/packages/shadcn/src/components/microsoft-sign-in-button.test.tsx b/packages/shadcn/src/components/microsoft-sign-in-button.test.tsx
index e7b9667f8..1111b5f06 100644
--- a/packages/shadcn/src/components/microsoft-sign-in-button.test.tsx
+++ b/packages/shadcn/src/components/microsoft-sign-in-button.test.tsx
@@ -18,9 +18,9 @@ import { describe, it, expect, vi, afterEach, beforeEach } from "vitest";
import { render, screen, cleanup } from "@testing-library/react";
import { MicrosoftSignInButton } from "./microsoft-sign-in-button";
import { createMockUI } from "../../tests/utils";
-import { registerLocale } from "@invertase/firebaseui-translations";
+import { registerLocale } from "@firebase-oss/ui-translations";
import { OAuthProvider } from "firebase/auth";
-import { FirebaseUIProvider } from "@invertase/firebaseui-react";
+import { FirebaseUIProvider } from "@firebase-oss/ui-react";
vi.mock("./oauth-button", () => ({
OAuthButton: ({ provider, children, themed, onSignIn }: any) => (
@@ -33,8 +33,8 @@ vi.mock("./oauth-button", () => ({
),
}));
-vi.mock("@invertase/firebaseui-react", async (importOriginal) => {
- const mod = await importOriginal();
+vi.mock("@firebase-oss/ui-react", async (importOriginal) => {
+ const mod = await importOriginal();
return {
...mod,
MicrosoftLogo: ({ className, ...props }: any) => (
diff --git a/packages/shadcn/src/components/microsoft-sign-in-button.tsx b/packages/shadcn/src/components/microsoft-sign-in-button.tsx
index b2aa2a3c0..7ae7672a2 100644
--- a/packages/shadcn/src/components/microsoft-sign-in-button.tsx
+++ b/packages/shadcn/src/components/microsoft-sign-in-button.tsx
@@ -17,8 +17,8 @@
"use client";
import { OAuthProvider } from "firebase/auth";
-import { getTranslation } from "@invertase/firebaseui-core";
-import { useUI, type MicrosoftSignInButtonProps, MicrosoftLogo } from "@invertase/firebaseui-react";
+import { getTranslation } from "@firebase-oss/ui-core";
+import { useUI, type MicrosoftSignInButtonProps, MicrosoftLogo } from "@firebase-oss/ui-react";
import { OAuthButton } from "@/components/oauth-button";
diff --git a/packages/shadcn/src/components/multi-factor-auth-assertion-form.test.tsx b/packages/shadcn/src/components/multi-factor-auth-assertion-form.test.tsx
index e3995cfb6..8f9aca22f 100644
--- a/packages/shadcn/src/components/multi-factor-auth-assertion-form.test.tsx
+++ b/packages/shadcn/src/components/multi-factor-auth-assertion-form.test.tsx
@@ -18,12 +18,12 @@ import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
import { render, screen, fireEvent, cleanup } from "@testing-library/react";
import { MultiFactorAuthAssertionForm } from "./multi-factor-auth-assertion-form";
import { createFirebaseUIProvider, createMockUI } from "../../tests/utils";
-import { registerLocale } from "@invertase/firebaseui-translations";
-import { MultiFactorResolver, PhoneMultiFactorGenerator, TotpMultiFactorGenerator } from "firebase/auth";
+import { registerLocale } from "@firebase-oss/ui-translations";
+import { FactorId, MultiFactorResolver, PhoneMultiFactorGenerator, TotpMultiFactorGenerator } from "firebase/auth";
const mockUseMultiFactorAssertionCleanup = vi.fn();
-vi.mock("@invertase/firebaseui-react", async () => {
- const actual = await vi.importActual("@invertase/firebaseui-react");
+vi.mock("@firebase-oss/ui-react", async () => {
+ const actual = await vi.importActual("@firebase-oss/ui-react");
return {
...actual,
useMultiFactorAssertionCleanup: () => mockUseMultiFactorAssertionCleanup(),
diff --git a/packages/shadcn/src/components/multi-factor-auth-assertion-form.tsx b/packages/shadcn/src/components/multi-factor-auth-assertion-form.tsx
index 24930fb1d..185cbfca5 100644
--- a/packages/shadcn/src/components/multi-factor-auth-assertion-form.tsx
+++ b/packages/shadcn/src/components/multi-factor-auth-assertion-form.tsx
@@ -16,8 +16,8 @@
"use client";
-import { getTranslation } from "@invertase/firebaseui-core";
-import { useUI } from "@invertase/firebaseui-react";
+import { getTranslation } from "@firebase-oss/ui-core";
+import { useUI } from "@firebase-oss/ui-react";
import {
PhoneMultiFactorGenerator,
TotpMultiFactorGenerator,
@@ -25,7 +25,7 @@ import {
type UserCredential,
} from "firebase/auth";
import { useState, type ComponentProps } from "react";
-import { useMultiFactorAssertionCleanup } from "@invertase/firebaseui-react";
+import { useMultiFactorAssertionCleanup } from "@firebase-oss/ui-react";
import { SmsMultiFactorAssertionForm } from "@/components/sms-multi-factor-assertion-form";
import { TotpMultiFactorAssertionForm } from "@/components/totp-multi-factor-assertion-form";
diff --git a/packages/shadcn/src/components/multi-factor-auth-assertion-screen.test.tsx b/packages/shadcn/src/components/multi-factor-auth-assertion-screen.test.tsx
index e0c12197c..9c0338611 100644
--- a/packages/shadcn/src/components/multi-factor-auth-assertion-screen.test.tsx
+++ b/packages/shadcn/src/components/multi-factor-auth-assertion-screen.test.tsx
@@ -14,8 +14,8 @@
* limitations under the License.
*/
-import { FirebaseUIProvider } from "@invertase/firebaseui-react";
-import { registerLocale } from "@invertase/firebaseui-translations";
+import { FirebaseUIProvider } from "@firebase-oss/ui-react";
+import { registerLocale } from "@firebase-oss/ui-translations";
import { cleanup, render, screen } from "@testing-library/react";
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
import { createMockUI } from "../../tests/utils";
diff --git a/packages/shadcn/src/components/multi-factor-auth-assertion-screen.tsx b/packages/shadcn/src/components/multi-factor-auth-assertion-screen.tsx
index b841181c3..157198959 100644
--- a/packages/shadcn/src/components/multi-factor-auth-assertion-screen.tsx
+++ b/packages/shadcn/src/components/multi-factor-auth-assertion-screen.tsx
@@ -16,8 +16,8 @@
"use client";
-import { getTranslation } from "@invertase/firebaseui-core";
-import { useUI, type MultiFactorAuthAssertionScreenProps } from "@invertase/firebaseui-react";
+import { getTranslation } from "@firebase-oss/ui-core";
+import { useUI, type MultiFactorAuthAssertionScreenProps } from "@firebase-oss/ui-react";
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card";
import { MultiFactorAuthAssertionForm } from "@/components/multi-factor-auth-assertion-form";
diff --git a/packages/shadcn/src/components/multi-factor-auth-enrollment-form.test.tsx b/packages/shadcn/src/components/multi-factor-auth-enrollment-form.test.tsx
index b2efec12e..c13815560 100644
--- a/packages/shadcn/src/components/multi-factor-auth-enrollment-form.test.tsx
+++ b/packages/shadcn/src/components/multi-factor-auth-enrollment-form.test.tsx
@@ -18,8 +18,8 @@ import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
import { render, screen, fireEvent, cleanup } from "@testing-library/react";
import { MultiFactorAuthEnrollmentForm } from "./multi-factor-auth-enrollment-form";
import { createMockUI } from "../../tests/utils";
-import { registerLocale } from "@invertase/firebaseui-translations";
-import { FirebaseUIProvider } from "@invertase/firebaseui-react";
+import { registerLocale } from "@firebase-oss/ui-translations";
+import { FirebaseUIProvider } from "@firebase-oss/ui-react";
import { FactorId } from "firebase/auth";
vi.mock("./sms-multi-factor-enrollment-form", () => ({
diff --git a/packages/shadcn/src/components/multi-factor-auth-enrollment-form.tsx b/packages/shadcn/src/components/multi-factor-auth-enrollment-form.tsx
index 451757dfd..0d6d66e49 100644
--- a/packages/shadcn/src/components/multi-factor-auth-enrollment-form.tsx
+++ b/packages/shadcn/src/components/multi-factor-auth-enrollment-form.tsx
@@ -18,8 +18,8 @@
import { type ComponentProps, useState } from "react";
import { FactorId } from "firebase/auth";
-import { getTranslation } from "@invertase/firebaseui-core";
-import { useUI } from "@invertase/firebaseui-react";
+import { getTranslation } from "@firebase-oss/ui-core";
+import { useUI } from "@firebase-oss/ui-react";
import { SmsMultiFactorEnrollmentForm } from "@/components/sms-multi-factor-enrollment-form";
import { TotpMultiFactorEnrollmentForm } from "@/components/totp-multi-factor-enrollment-form";
diff --git a/packages/shadcn/src/components/multi-factor-auth-enrollment-screen.test.tsx b/packages/shadcn/src/components/multi-factor-auth-enrollment-screen.test.tsx
index 553f4ed25..68f396a01 100644
--- a/packages/shadcn/src/components/multi-factor-auth-enrollment-screen.test.tsx
+++ b/packages/shadcn/src/components/multi-factor-auth-enrollment-screen.test.tsx
@@ -18,8 +18,8 @@ import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
import { render, screen, cleanup } from "@testing-library/react";
import { MultiFactorAuthEnrollmentScreen } from "./multi-factor-auth-enrollment-screen";
import { createMockUI } from "../../tests/utils";
-import { registerLocale } from "@invertase/firebaseui-translations";
-import { FirebaseUIProvider } from "@invertase/firebaseui-react";
+import { registerLocale } from "@firebase-oss/ui-translations";
+import { FirebaseUIProvider } from "@firebase-oss/ui-react";
vi.mock("./multi-factor-auth-enrollment-form", () => ({
MultiFactorAuthEnrollmentForm: ({ onEnrollment }: { onEnrollment?: () => void }) => (
diff --git a/packages/shadcn/src/components/multi-factor-auth-enrollment-screen.tsx b/packages/shadcn/src/components/multi-factor-auth-enrollment-screen.tsx
index eba761160..8bad3717e 100644
--- a/packages/shadcn/src/components/multi-factor-auth-enrollment-screen.tsx
+++ b/packages/shadcn/src/components/multi-factor-auth-enrollment-screen.tsx
@@ -16,8 +16,8 @@
"use client";
-import { getTranslation } from "@invertase/firebaseui-core";
-import { useUI, type MultiFactorAuthEnrollmentFormProps } from "@invertase/firebaseui-react";
+import { getTranslation } from "@firebase-oss/ui-core";
+import { useUI, type MultiFactorAuthEnrollmentFormProps } from "@firebase-oss/ui-react";
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card";
import { MultiFactorAuthEnrollmentForm } from "@/components/multi-factor-auth-enrollment-form";
diff --git a/packages/shadcn/src/components/oauth-button.test.tsx b/packages/shadcn/src/components/oauth-button.test.tsx
index ccbddf858..9692ea7ce 100644
--- a/packages/shadcn/src/components/oauth-button.test.tsx
+++ b/packages/shadcn/src/components/oauth-button.test.tsx
@@ -18,15 +18,15 @@ import { describe, it, expect, vi, afterEach, beforeEach } from "vitest";
import { render, screen, fireEvent, cleanup, waitFor } from "@testing-library/react";
import { OAuthButton } from "./oauth-button";
import { createMockUI } from "../../tests/utils";
-import { registerLocale } from "@invertase/firebaseui-translations";
+import { registerLocale } from "@firebase-oss/ui-translations";
import type { AuthProvider, UserCredential } from "firebase/auth";
import { ComponentProps } from "react";
-import { signInWithProvider } from "@invertase/firebaseui-core";
+import { signInWithProvider } from "@firebase-oss/ui-core";
import { FirebaseError } from "firebase/app";
-import { FirebaseUIProvider } from "@invertase/firebaseui-react";
+import { FirebaseUIProvider } from "@firebase-oss/ui-react";
-vi.mock("@invertase/firebaseui-core", async (importOriginal) => {
+vi.mock("@firebase-oss/ui-core", async (importOriginal) => {
const mod = await importOriginal();
return {
...(mod as object),
@@ -167,7 +167,7 @@ describe("", () => {
});
it("does not call onSignIn callback when sign-in fails", async () => {
- const { FirebaseUIError } = await import("@invertase/firebaseui-core");
+ const { FirebaseUIError } = await import("@firebase-oss/ui-core");
const mockSignInWithProvider = vi.mocked(signInWithProvider);
const onSignIn = vi.fn();
const ui = createMockUI();
@@ -194,7 +194,7 @@ describe("", () => {
});
it("displays FirebaseUIError message when FirebaseUIError occurs", async () => {
- const { FirebaseUIError } = await import("@invertase/firebaseui-core");
+ const { FirebaseUIError } = await import("@firebase-oss/ui-core");
const mockSignInWithProvider = vi.mocked(signInWithProvider);
const ui = createMockUI();
const mockError = new FirebaseUIError(
@@ -261,7 +261,7 @@ describe("", () => {
});
it("clears error when button is clicked again", async () => {
- const { FirebaseUIError } = await import("@invertase/firebaseui-core");
+ const { FirebaseUIError } = await import("@firebase-oss/ui-core");
const mockSignInWithProvider = vi.mocked(signInWithProvider);
const ui = createMockUI();
diff --git a/packages/shadcn/src/components/oauth-button.tsx b/packages/shadcn/src/components/oauth-button.tsx
index 2d59b3553..871d984a5 100644
--- a/packages/shadcn/src/components/oauth-button.tsx
+++ b/packages/shadcn/src/components/oauth-button.tsx
@@ -16,7 +16,7 @@
"use client";
-import { useUI, type OAuthButtonProps, useSignInWithProvider } from "@invertase/firebaseui-react";
+import { useUI, type OAuthButtonProps, useSignInWithProvider } from "@firebase-oss/ui-react";
import { Button } from "@/components/ui/button";
export type { OAuthButtonProps };
diff --git a/packages/shadcn/src/components/oauth-screen.test.tsx b/packages/shadcn/src/components/oauth-screen.test.tsx
index bb49c5799..dd71700f8 100644
--- a/packages/shadcn/src/components/oauth-screen.test.tsx
+++ b/packages/shadcn/src/components/oauth-screen.test.tsx
@@ -17,8 +17,8 @@ import { describe, it, expect, vi, afterEach } from "vitest";
import { render, screen, cleanup, act } from "@testing-library/react";
import { OAuthScreen } from "@/components/oauth-screen";
import { CreateFirebaseUIProvider, createMockUI } from "../../tests/utils";
-import { registerLocale } from "@invertase/firebaseui-translations";
-import { MultiFactorResolver, type User } from "firebase/auth";
+import { registerLocale } from "@firebase-oss/ui-translations";
+import { MultiFactorResolver } from "firebase/auth";
vi.mock("@/components/policies", () => ({
Policies: () => Policies
,
diff --git a/packages/shadcn/src/components/oauth-screen.tsx b/packages/shadcn/src/components/oauth-screen.tsx
index 97cd600ce..b6f227664 100644
--- a/packages/shadcn/src/components/oauth-screen.tsx
+++ b/packages/shadcn/src/components/oauth-screen.tsx
@@ -16,10 +16,10 @@
"use client";
-import { getTranslation } from "@invertase/firebaseui-core";
+import { getTranslation } from "@firebase-oss/ui-core";
import { type User } from "firebase/auth";
import { type PropsWithChildren } from "react";
-import { useUI, useOnUserAuthenticated } from "@invertase/firebaseui-react";
+import { useUI, useOnUserAuthenticated } from "@firebase-oss/ui-react";
import { Card, CardContent, CardHeader, CardDescription, CardTitle } from "@/components/ui/card";
import { Policies } from "@/components/policies";
import { MultiFactorAuthAssertionScreen } from "@/components/multi-factor-auth-assertion-screen";
diff --git a/packages/shadcn/src/components/phone-auth-form.test.tsx b/packages/shadcn/src/components/phone-auth-form.test.tsx
index d8c7e5c01..2bb7624f8 100644
--- a/packages/shadcn/src/components/phone-auth-form.test.tsx
+++ b/packages/shadcn/src/components/phone-auth-form.test.tsx
@@ -18,16 +18,17 @@ import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
import { render, screen, fireEvent, cleanup, waitFor } from "@testing-library/react";
import { PhoneAuthForm } from "./phone-auth-form";
import { act } from "react";
-import { usePhoneNumberFormAction, useVerifyPhoneNumberFormAction, useUI } from "@invertase/firebaseui-react";
+import { usePhoneNumberFormAction, useVerifyPhoneNumberFormAction, useUI } from "@firebase-oss/ui-react";
import { createMockUI } from "../../tests/utils";
-import { registerLocale } from "@invertase/firebaseui-translations";
-import { FirebaseUIProvider } from "@invertase/firebaseui-react";
-import { User, UserCredential } from "firebase/auth";
-import { FirebaseUI, FirebaseUIError } from "@invertase/firebaseui-core";
+import { registerLocale } from "@firebase-oss/ui-translations";
+import { FirebaseUIProvider } from "@firebase-oss/ui-react";
+import type { User, UserCredential } from "firebase/auth";
+import { FirebaseUI, FirebaseUIError } from "@firebase-oss/ui-core";
import { FirebaseError } from "firebase/app";
+import { ERROR_CODE_MAP } from "@firebase-oss/ui-translations";
-vi.mock("@invertase/firebaseui-core", async (importOriginal) => {
- const mod = await importOriginal();
+vi.mock("@firebase-oss/ui-core", async (importOriginal) => {
+ const mod = await importOriginal();
return {
...mod,
verifyPhoneNumber: vi.fn(),
@@ -50,8 +51,8 @@ vi.mock("@invertase/firebaseui-core", async (importOriginal) => {
};
});
-vi.mock("@invertase/firebaseui-react", async (importOriginal) => {
- const mod = await importOriginal();
+vi.mock("@firebase-oss/ui-react", async (importOriginal) => {
+ const mod = await importOriginal();
return {
...mod,
usePhoneNumberFormAction: vi.fn().mockReturnValue(vi.fn().mockResolvedValue("verification-id-123")),
diff --git a/packages/shadcn/src/components/phone-auth-form.tsx b/packages/shadcn/src/components/phone-auth-form.tsx
index adbe84f78..0708e7be6 100644
--- a/packages/shadcn/src/components/phone-auth-form.tsx
+++ b/packages/shadcn/src/components/phone-auth-form.tsx
@@ -24,7 +24,7 @@ import {
useRecaptchaVerifier,
useUI,
useVerifyPhoneNumberFormAction,
-} from "@invertase/firebaseui-react";
+} from "@firebase-oss/ui-react";
import { useState } from "react";
import type { UserCredential } from "firebase/auth";
import { useRef } from "react";
@@ -36,7 +36,7 @@ import {
getTranslation,
type PhoneAuthNumberFormSchema,
type PhoneAuthVerifyFormSchema,
-} from "@invertase/firebaseui-core";
+} from "@firebase-oss/ui-core";
import { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage } from "@/components/ui/form";
import { Input } from "@/components/ui/input";
diff --git a/packages/shadcn/src/components/phone-auth-screen.test.tsx b/packages/shadcn/src/components/phone-auth-screen.test.tsx
index d789517f3..c86fd0c45 100644
--- a/packages/shadcn/src/components/phone-auth-screen.test.tsx
+++ b/packages/shadcn/src/components/phone-auth-screen.test.tsx
@@ -17,8 +17,8 @@ import { describe, it, expect, vi, afterEach } from "vitest";
import { render, screen, cleanup, act } from "@testing-library/react";
import { PhoneAuthScreen } from "@/components/phone-auth-screen";
import { CreateFirebaseUIProvider, createMockUI } from "../../tests/utils";
-import { registerLocale } from "@invertase/firebaseui-translations";
-import { MultiFactorResolver, type User } from "firebase/auth";
+import { registerLocale } from "@firebase-oss/ui-translations";
+import { MultiFactorResolver } from "firebase/auth";
vi.mock("@/components/phone-auth-form", () => ({
PhoneAuthForm: ({ resendDelay }: { resendDelay?: number }) => (
diff --git a/packages/shadcn/src/components/phone-auth-screen.tsx b/packages/shadcn/src/components/phone-auth-screen.tsx
index 28d7e78e4..14835bd05 100644
--- a/packages/shadcn/src/components/phone-auth-screen.tsx
+++ b/packages/shadcn/src/components/phone-auth-screen.tsx
@@ -17,8 +17,8 @@
"use client";
import type { PropsWithChildren } from "react";
-import { getTranslation } from "@invertase/firebaseui-core";
-import { useUI, useOnUserAuthenticated } from "@invertase/firebaseui-react";
+import { getTranslation } from "@firebase-oss/ui-core";
+import { useUI, useOnUserAuthenticated } from "@firebase-oss/ui-react";
import { Card, CardContent, CardHeader, CardDescription, CardTitle } from "@/components/ui/card";
import { Separator } from "@/components/ui/separator";
import { PhoneAuthForm } from "@/components/phone-auth-form";
diff --git a/packages/shadcn/src/components/policies.test.tsx b/packages/shadcn/src/components/policies.test.tsx
index 85610b92e..c7358f35e 100644
--- a/packages/shadcn/src/components/policies.test.tsx
+++ b/packages/shadcn/src/components/policies.test.tsx
@@ -18,11 +18,11 @@ import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
import { render, screen, fireEvent, cleanup } from "@testing-library/react";
import { Policies } from "./policies";
import { createMockUI } from "../../tests/utils";
-import { registerLocale } from "@invertase/firebaseui-translations";
-import { FirebaseUIProvider } from "@invertase/firebaseui-react";
+import { registerLocale } from "@firebase-oss/ui-translations";
+import { FirebaseUIProvider } from "@firebase-oss/ui-react";
-vi.mock("@invertase/firebaseui-core", async (importOriginal) => {
- const mod = await importOriginal();
+vi.mock("@firebase-oss/ui-core", async (importOriginal) => {
+ const mod = await importOriginal();
return {
...mod,
signInWithEmailAndPassword: vi.fn(),
diff --git a/packages/shadcn/src/components/policies.tsx b/packages/shadcn/src/components/policies.tsx
index f15645afb..84cb3b557 100644
--- a/packages/shadcn/src/components/policies.tsx
+++ b/packages/shadcn/src/components/policies.tsx
@@ -15,8 +15,8 @@
*/
import { cn } from "@/lib/utils";
-import { getTranslation } from "@invertase/firebaseui-core";
-import { useUI, PolicyContext } from "@invertase/firebaseui-react";
+import { getTranslation } from "@firebase-oss/ui-core";
+import { useUI, PolicyContext } from "@firebase-oss/ui-react";
import { cloneElement, useContext } from "react";
export function Policies() {
diff --git a/packages/shadcn/src/components/redirect-error.tsx b/packages/shadcn/src/components/redirect-error.tsx
index 3bef7da6d..1515fab88 100644
--- a/packages/shadcn/src/components/redirect-error.tsx
+++ b/packages/shadcn/src/components/redirect-error.tsx
@@ -16,7 +16,7 @@
"use client";
-import { useRedirectError } from "@invertase/firebaseui-react";
+import { useRedirectError } from "@firebase-oss/ui-react";
export function RedirectError() {
const error = useRedirectError();
diff --git a/packages/shadcn/src/components/sign-in-auth-form.test.tsx b/packages/shadcn/src/components/sign-in-auth-form.test.tsx
index 24503e01d..1536e5a11 100644
--- a/packages/shadcn/src/components/sign-in-auth-form.test.tsx
+++ b/packages/shadcn/src/components/sign-in-auth-form.test.tsx
@@ -18,22 +18,22 @@ import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
import { render, screen, fireEvent, cleanup, waitFor } from "@testing-library/react";
import { SignInAuthForm } from "./sign-in-auth-form";
import { act } from "react";
-import { useSignInAuthFormAction } from "@invertase/firebaseui-react";
+import { useSignInAuthFormAction } from "@firebase-oss/ui-react";
import { createMockUI } from "../../tests/utils";
-import { registerLocale } from "@invertase/firebaseui-translations";
-import { FirebaseUIProvider } from "@invertase/firebaseui-react";
+import { registerLocale } from "@firebase-oss/ui-translations";
+import { FirebaseUIProvider } from "@firebase-oss/ui-react";
import { UserCredential } from "firebase/auth";
-vi.mock("@invertase/firebaseui-core", async (importOriginal) => {
- const mod = await importOriginal();
+vi.mock("@firebase-oss/ui-core", async (importOriginal) => {
+ const mod = await importOriginal();
return {
...mod,
signInWithEmailAndPassword: vi.fn(),
};
});
-vi.mock("@invertase/firebaseui-react", async (importOriginal) => {
- const mod = await importOriginal();
+vi.mock("@firebase-oss/ui-react", async (importOriginal) => {
+ const mod = await importOriginal();
return {
...mod,
useSignInAuthFormAction: vi.fn(),
diff --git a/packages/shadcn/src/components/sign-in-auth-form.tsx b/packages/shadcn/src/components/sign-in-auth-form.tsx
index 71c62a4b9..76c510ebd 100644
--- a/packages/shadcn/src/components/sign-in-auth-form.tsx
+++ b/packages/shadcn/src/components/sign-in-auth-form.tsx
@@ -16,16 +16,16 @@
"use client";
-import type { SignInAuthFormSchema } from "@invertase/firebaseui-core";
+import type { SignInAuthFormSchema } from "@firebase-oss/ui-core";
import {
useSignInAuthFormAction,
useSignInAuthFormSchema,
useUI,
type SignInAuthFormProps,
-} from "@invertase/firebaseui-react";
+} from "@firebase-oss/ui-react";
import { useForm } from "react-hook-form";
import { standardSchemaResolver } from "@hookform/resolvers/standard-schema";
-import { FirebaseUIError, getTranslation } from "@invertase/firebaseui-core";
+import { FirebaseUIError, getTranslation } from "@firebase-oss/ui-core";
import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from "@/components/ui/form";
import { Input } from "@/components/ui/input";
diff --git a/packages/shadcn/src/components/sign-in-auth-screen.test.tsx b/packages/shadcn/src/components/sign-in-auth-screen.test.tsx
index dca816c20..25e288bc7 100644
--- a/packages/shadcn/src/components/sign-in-auth-screen.test.tsx
+++ b/packages/shadcn/src/components/sign-in-auth-screen.test.tsx
@@ -17,10 +17,9 @@
import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
import { render, screen, cleanup, act } from "@testing-library/react";
import { SignInAuthScreen } from "./sign-in-auth-screen";
-import { createMockUI } from "../../tests/utils";
-import { FirebaseUIProvider } from "@invertase/firebaseui-react";
-import { registerLocale } from "@invertase/firebaseui-translations";
-import { MultiFactorResolver, type User } from "firebase/auth";
+import { createMockUI, createFirebaseUIProvider } from "../../tests/utils";
+import { registerLocale } from "@firebase-oss/ui-translations";
+import { FirebaseUIProvider } from "@firebase-oss/ui-react";
vi.mock("./sign-in-auth-form", () => ({
SignInAuthForm: ({ onSignIn, onForgotPasswordClick, onRegisterClick }: any) => (
diff --git a/packages/shadcn/src/components/sign-in-auth-screen.tsx b/packages/shadcn/src/components/sign-in-auth-screen.tsx
index ba2f8812b..e229609ce 100644
--- a/packages/shadcn/src/components/sign-in-auth-screen.tsx
+++ b/packages/shadcn/src/components/sign-in-auth-screen.tsx
@@ -16,8 +16,8 @@
"use client";
-import { getTranslation } from "@invertase/firebaseui-core";
-import { useUI, type SignInAuthScreenProps, useOnUserAuthenticated } from "@invertase/firebaseui-react";
+import { getTranslation } from "@firebase-oss/ui-core";
+import { useUI, type SignInAuthScreenProps, useOnUserAuthenticated } from "@firebase-oss/ui-react";
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card";
import { Separator } from "@/components/ui/separator";
diff --git a/packages/shadcn/src/components/sign-up-auth-form.test.tsx b/packages/shadcn/src/components/sign-up-auth-form.test.tsx
index 951ad5771..59082c10c 100644
--- a/packages/shadcn/src/components/sign-up-auth-form.test.tsx
+++ b/packages/shadcn/src/components/sign-up-auth-form.test.tsx
@@ -18,22 +18,22 @@ import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
import { render, screen, fireEvent, cleanup, waitFor } from "@testing-library/react";
import { SignUpAuthForm } from "./sign-up-auth-form";
import { act } from "react";
-import { useSignUpAuthFormAction, useRequireDisplayName } from "@invertase/firebaseui-react";
+import { useSignUpAuthFormAction, useRequireDisplayName } from "@firebase-oss/ui-react";
import { createMockUI } from "../../tests/utils";
-import { registerLocale } from "@invertase/firebaseui-translations";
-import { FirebaseUIProvider } from "@invertase/firebaseui-react";
+import { registerLocale } from "@firebase-oss/ui-translations";
+import { FirebaseUIProvider } from "@firebase-oss/ui-react";
import { UserCredential } from "firebase/auth";
-vi.mock("@invertase/firebaseui-core", async (importOriginal) => {
- const mod = await importOriginal();
+vi.mock("@firebase-oss/ui-core", async (importOriginal) => {
+ const mod = await importOriginal();
return {
...mod,
createUserWithEmailAndPassword: vi.fn(),
};
});
-vi.mock("@invertase/firebaseui-react", async (importOriginal) => {
- const mod = await importOriginal();
+vi.mock("@firebase-oss/ui-react", async (importOriginal) => {
+ const mod = await importOriginal();
return {
...mod,
useSignUpAuthFormAction: vi.fn(),
diff --git a/packages/shadcn/src/components/sign-up-auth-form.tsx b/packages/shadcn/src/components/sign-up-auth-form.tsx
index fca4bb3ab..431073942 100644
--- a/packages/shadcn/src/components/sign-up-auth-form.tsx
+++ b/packages/shadcn/src/components/sign-up-auth-form.tsx
@@ -16,17 +16,17 @@
"use client";
-import type { SignUpAuthFormSchema } from "@invertase/firebaseui-core";
+import type { SignUpAuthFormSchema } from "@firebase-oss/ui-core";
import {
useSignUpAuthFormAction,
useSignUpAuthFormSchema,
useUI,
type SignUpAuthFormProps,
useRequireDisplayName,
-} from "@invertase/firebaseui-react";
+} from "@firebase-oss/ui-react";
import { useForm } from "react-hook-form";
import { standardSchemaResolver } from "@hookform/resolvers/standard-schema";
-import { FirebaseUIError, getTranslation } from "@invertase/firebaseui-core";
+import { FirebaseUIError, getTranslation } from "@firebase-oss/ui-core";
import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from "@/components/ui/form";
import { Input } from "@/components/ui/input";
diff --git a/packages/shadcn/src/components/sign-up-auth-screen.test.tsx b/packages/shadcn/src/components/sign-up-auth-screen.test.tsx
index afbaf6567..14277d350 100644
--- a/packages/shadcn/src/components/sign-up-auth-screen.test.tsx
+++ b/packages/shadcn/src/components/sign-up-auth-screen.test.tsx
@@ -18,8 +18,8 @@ import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
import { render, screen, cleanup, act } from "@testing-library/react";
import { SignUpAuthScreen } from "./sign-up-auth-screen";
import { createMockUI } from "../../tests/utils";
-import { registerLocale } from "@invertase/firebaseui-translations";
-import { FirebaseUIProvider } from "@invertase/firebaseui-react";
+import { registerLocale } from "@firebase-oss/ui-translations";
+import { FirebaseUIProvider } from "@firebase-oss/ui-react";
import { MultiFactorResolver, type User } from "firebase/auth";
vi.mock("./sign-up-auth-form", () => ({
diff --git a/packages/shadcn/src/components/sign-up-auth-screen.tsx b/packages/shadcn/src/components/sign-up-auth-screen.tsx
index 9b0ca46ff..acc40a126 100644
--- a/packages/shadcn/src/components/sign-up-auth-screen.tsx
+++ b/packages/shadcn/src/components/sign-up-auth-screen.tsx
@@ -16,8 +16,8 @@
"use client";
-import { getTranslation } from "@invertase/firebaseui-core";
-import { useUI, type SignUpAuthScreenProps, useOnUserAuthenticated } from "@invertase/firebaseui-react";
+import { getTranslation } from "@firebase-oss/ui-core";
+import { useUI, type SignUpAuthScreenProps, useOnUserAuthenticated } from "@firebase-oss/ui-react";
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card";
import { Separator } from "@/components/ui/separator";
diff --git a/packages/shadcn/src/components/sms-multi-factor-assertion-form.test.tsx b/packages/shadcn/src/components/sms-multi-factor-assertion-form.test.tsx
index 9d7e5aac7..487f7a0fc 100644
--- a/packages/shadcn/src/components/sms-multi-factor-assertion-form.test.tsx
+++ b/packages/shadcn/src/components/sms-multi-factor-assertion-form.test.tsx
@@ -18,11 +18,13 @@ import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
import { render, screen, fireEvent, cleanup, waitFor } from "@testing-library/react";
import { SmsMultiFactorAssertionForm } from "./sms-multi-factor-assertion-form";
import { createFirebaseUIProvider, createMockUI } from "../../tests/utils";
-import { registerLocale } from "@invertase/firebaseui-translations";
+import { registerLocale } from "@firebase-oss/ui-translations";
+import { PhoneMultiFactorGenerator } from "firebase/auth";
+import { verifyPhoneNumber, signInWithMultiFactorAssertion } from "@firebase-oss/ui-core";
import {
useSmsMultiFactorAssertionPhoneFormAction,
useSmsMultiFactorAssertionVerifyFormAction,
-} from "@invertase/firebaseui-react";
+} from "@firebase-oss/ui-react";
import React from "react";
// Mock input-otp components to prevent window access issues
@@ -39,18 +41,8 @@ vi.mock("@/components/ui/input-otp", () => ({
}),
}));
-vi.mock("@/components/ui/form", async (importOriginal) => {
- const mod = await importOriginal();
- return {
- ...mod,
- FormItem: ({ children, ...props }: any) => React.createElement("div", { ...props }, children),
- FormLabel: ({ children, ...props }: any) => React.createElement("label", { ...props }, children),
- FormDescription: ({ children, ...props }: any) => React.createElement("p", { ...props }, children),
- };
-});
-
-vi.mock("@invertase/firebaseui-core", async (importOriginal) => {
- const mod = await importOriginal();
+vi.mock("@firebase-oss/ui-core", async (importOriginal) => {
+ const mod = await importOriginal();
return {
...mod,
verifyPhoneNumber: vi.fn(),
@@ -58,8 +50,8 @@ vi.mock("@invertase/firebaseui-core", async (importOriginal) => {
};
});
-vi.mock("@invertase/firebaseui-react", async (importOriginal) => {
- const mod = await importOriginal();
+vi.mock("@firebase-oss/ui-react", async (importOriginal) => {
+ const mod = await importOriginal();
return {
...mod,
useRecaptchaVerifier: () => ({
diff --git a/packages/shadcn/src/components/sms-multi-factor-assertion-form.tsx b/packages/shadcn/src/components/sms-multi-factor-assertion-form.tsx
index 0be341003..cc12fa807 100644
--- a/packages/shadcn/src/components/sms-multi-factor-assertion-form.tsx
+++ b/packages/shadcn/src/components/sms-multi-factor-assertion-form.tsx
@@ -19,14 +19,14 @@
import { useRef, useState } from "react";
import { type UserCredential, type MultiFactorInfo } from "firebase/auth";
-import { FirebaseUIError, getTranslation } from "@invertase/firebaseui-core";
+import { FirebaseUIError, getTranslation } from "@firebase-oss/ui-core";
import {
useMultiFactorPhoneAuthVerifyFormSchema,
useRecaptchaVerifier,
useUI,
useSmsMultiFactorAssertionPhoneFormAction,
useSmsMultiFactorAssertionVerifyFormAction,
-} from "@invertase/firebaseui-react";
+} from "@firebase-oss/ui-react";
import { useForm } from "react-hook-form";
import { standardSchemaResolver } from "@hookform/resolvers/standard-schema";
diff --git a/packages/shadcn/src/components/sms-multi-factor-enrollment-form.test.tsx b/packages/shadcn/src/components/sms-multi-factor-enrollment-form.test.tsx
index 7d92ced2a..0fd6c3a99 100644
--- a/packages/shadcn/src/components/sms-multi-factor-enrollment-form.test.tsx
+++ b/packages/shadcn/src/components/sms-multi-factor-enrollment-form.test.tsx
@@ -17,8 +17,8 @@ import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
import { render, screen, fireEvent, cleanup, waitFor } from "@testing-library/react";
import { SmsMultiFactorEnrollmentForm } from "./sms-multi-factor-enrollment-form";
import { createFirebaseUIProvider, createMockUIWithUser } from "../../tests/utils";
-import { registerLocale } from "@invertase/firebaseui-translations";
-import { verifyPhoneNumber, enrollWithMultiFactorAssertion } from "@invertase/firebaseui-core";
+import { registerLocale } from "@firebase-oss/ui-translations";
+import { verifyPhoneNumber, enrollWithMultiFactorAssertion } from "@firebase-oss/ui-core";
import React from "react";
// Mock input-otp components to prevent window access issues
@@ -32,16 +32,16 @@ vi.mock("@/components/ui/input-otp", () => ({
}));
// Mock the schema hooks
-vi.mock("@invertase/firebaseui-react", async (importOriginal) => {
- const mod = await importOriginal();
+vi.mock("@firebase-oss/ui-react", async (importOriginal) => {
+ const mod = await importOriginal();
return {
...mod,
useRecaptchaVerifier: vi.fn().mockReturnValue({}),
};
});
-vi.mock("@invertase/firebaseui-core", async (importOriginal) => {
- const mod = await importOriginal();
+vi.mock("@firebase-oss/ui-core", async (importOriginal) => {
+ const mod = await importOriginal();
return {
...mod,
verifyPhoneNumber: vi.fn(),
diff --git a/packages/shadcn/src/components/sms-multi-factor-enrollment-form.tsx b/packages/shadcn/src/components/sms-multi-factor-enrollment-form.tsx
index cff880858..de1e786ec 100644
--- a/packages/shadcn/src/components/sms-multi-factor-enrollment-form.tsx
+++ b/packages/shadcn/src/components/sms-multi-factor-enrollment-form.tsx
@@ -24,14 +24,14 @@ import {
formatPhoneNumber,
getTranslation,
verifyPhoneNumber,
-} from "@invertase/firebaseui-core";
+} from "@firebase-oss/ui-core";
import { CountrySelector, type CountrySelectorRef } from "@/components/country-selector";
import {
useMultiFactorPhoneAuthNumberFormSchema,
useMultiFactorPhoneAuthVerifyFormSchema,
useRecaptchaVerifier,
useUI,
-} from "@invertase/firebaseui-react";
+} from "@firebase-oss/ui-react";
import { useForm } from "react-hook-form";
import { standardSchemaResolver } from "@hookform/resolvers/standard-schema";
diff --git a/packages/shadcn/src/components/totp-multi-factor-assertion-form.test.tsx b/packages/shadcn/src/components/totp-multi-factor-assertion-form.test.tsx
index 6bcdcae72..83fbb845f 100644
--- a/packages/shadcn/src/components/totp-multi-factor-assertion-form.test.tsx
+++ b/packages/shadcn/src/components/totp-multi-factor-assertion-form.test.tsx
@@ -18,9 +18,9 @@ import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
import { render, screen, fireEvent, cleanup, waitFor } from "@testing-library/react";
import { TotpMultiFactorAssertionForm } from "./totp-multi-factor-assertion-form";
import { createFirebaseUIProvider, createMockUI } from "../../tests/utils";
-import { registerLocale } from "@invertase/firebaseui-translations";
+import { registerLocale } from "@firebase-oss/ui-translations";
import { TotpMultiFactorGenerator } from "firebase/auth";
-import { useTotpMultiFactorAssertionFormAction } from "@invertase/firebaseui-react";
+import { useTotpMultiFactorAssertionFormAction } from "@firebase-oss/ui-react";
import React from "react";
// Mock input-otp components to prevent window access issues
@@ -37,8 +37,8 @@ vi.mock("@/components/ui/input-otp", () => ({
}),
}));
-vi.mock("@invertase/firebaseui-react", async (importOriginal) => {
- const mod = await importOriginal();
+vi.mock("@firebase-oss/ui-react", async (importOriginal) => {
+ const mod = await importOriginal();
return {
...mod,
useTotpMultiFactorAssertionFormAction: vi.fn(),
diff --git a/packages/shadcn/src/components/totp-multi-factor-assertion-form.tsx b/packages/shadcn/src/components/totp-multi-factor-assertion-form.tsx
index a960d12f1..79bf17d0b 100644
--- a/packages/shadcn/src/components/totp-multi-factor-assertion-form.tsx
+++ b/packages/shadcn/src/components/totp-multi-factor-assertion-form.tsx
@@ -17,12 +17,12 @@
"use client";
import { type UserCredential, type MultiFactorInfo } from "firebase/auth";
-import { FirebaseUIError, getTranslation } from "@invertase/firebaseui-core";
+import { FirebaseUIError, getTranslation } from "@firebase-oss/ui-core";
import {
useMultiFactorTotpAuthVerifyFormSchema,
useUI,
useTotpMultiFactorAssertionFormAction,
-} from "@invertase/firebaseui-react";
+} from "@firebase-oss/ui-react";
import { useForm } from "react-hook-form";
import { standardSchemaResolver } from "@hookform/resolvers/standard-schema";
diff --git a/packages/shadcn/src/components/totp-multi-factor-enrollment-form.test.tsx b/packages/shadcn/src/components/totp-multi-factor-enrollment-form.test.tsx
index 8b3f100f9..5e85b707f 100644
--- a/packages/shadcn/src/components/totp-multi-factor-enrollment-form.test.tsx
+++ b/packages/shadcn/src/components/totp-multi-factor-enrollment-form.test.tsx
@@ -17,8 +17,8 @@ import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
import { render, screen, fireEvent, cleanup, waitFor } from "@testing-library/react";
import { TotpMultiFactorEnrollmentForm } from "./totp-multi-factor-enrollment-form";
import { createFirebaseUIProvider, createMockUIWithUser } from "../../tests/utils";
-import { registerLocale } from "@invertase/firebaseui-translations";
-import { generateTotpSecret, generateTotpQrCode, enrollWithMultiFactorAssertion } from "@invertase/firebaseui-core";
+import { registerLocale } from "@firebase-oss/ui-translations";
+import { generateTotpSecret, generateTotpQrCode, enrollWithMultiFactorAssertion } from "@firebase-oss/ui-core";
import React from "react";
// Mock input-otp components to prevent window access issues
@@ -35,8 +35,8 @@ vi.mock("@/components/ui/input-otp", () => ({
}),
}));
-vi.mock("@invertase/firebaseui-core", async (importOriginal) => {
- const mod = await importOriginal();
+vi.mock("@firebase-oss/ui-core", async (importOriginal) => {
+ const mod = await importOriginal();
return {
...mod,
generateTotpSecret: vi.fn(),
diff --git a/packages/shadcn/src/components/totp-multi-factor-enrollment-form.tsx b/packages/shadcn/src/components/totp-multi-factor-enrollment-form.tsx
index 734ebef61..3cc936cce 100644
--- a/packages/shadcn/src/components/totp-multi-factor-enrollment-form.tsx
+++ b/packages/shadcn/src/components/totp-multi-factor-enrollment-form.tsx
@@ -24,12 +24,12 @@ import {
generateTotpQrCode,
generateTotpSecret,
getTranslation,
-} from "@invertase/firebaseui-core";
+} from "@firebase-oss/ui-core";
import {
useMultiFactorTotpAuthNumberFormSchema,
useMultiFactorTotpAuthVerifyFormSchema,
useUI,
-} from "@invertase/firebaseui-react";
+} from "@firebase-oss/ui-react";
import { useForm } from "react-hook-form";
import { standardSchemaResolver } from "@hookform/resolvers/standard-schema";
diff --git a/packages/shadcn/src/components/twitter-sign-in-button.test.tsx b/packages/shadcn/src/components/twitter-sign-in-button.test.tsx
index 053580c4e..d3063ce9e 100644
--- a/packages/shadcn/src/components/twitter-sign-in-button.test.tsx
+++ b/packages/shadcn/src/components/twitter-sign-in-button.test.tsx
@@ -18,9 +18,9 @@ import { describe, it, expect, vi, afterEach, beforeEach } from "vitest";
import { render, screen, cleanup } from "@testing-library/react";
import { TwitterSignInButton } from "./twitter-sign-in-button";
import { createMockUI } from "../../tests/utils";
-import { registerLocale } from "@invertase/firebaseui-translations";
+import { registerLocale } from "@firebase-oss/ui-translations";
import { TwitterAuthProvider } from "firebase/auth";
-import { FirebaseUIProvider } from "@invertase/firebaseui-react";
+import { FirebaseUIProvider } from "@firebase-oss/ui-react";
vi.mock("./oauth-button", () => ({
OAuthButton: ({ provider, children, themed, onSignIn }: any) => (
@@ -33,8 +33,8 @@ vi.mock("./oauth-button", () => ({
),
}));
-vi.mock("@invertase/firebaseui-react", async (importOriginal) => {
- const mod = await importOriginal();
+vi.mock("@firebase-oss/ui-react", async (importOriginal) => {
+ const mod = await importOriginal();
return {
...mod,
TwitterLogo: ({ className, ...props }: any) => (
diff --git a/packages/shadcn/src/components/twitter-sign-in-button.tsx b/packages/shadcn/src/components/twitter-sign-in-button.tsx
index de379fc0b..1073a6895 100644
--- a/packages/shadcn/src/components/twitter-sign-in-button.tsx
+++ b/packages/shadcn/src/components/twitter-sign-in-button.tsx
@@ -17,8 +17,8 @@
"use client";
import { TwitterAuthProvider } from "firebase/auth";
-import { getTranslation } from "@invertase/firebaseui-core";
-import { useUI, type TwitterSignInButtonProps, TwitterLogo } from "@invertase/firebaseui-react";
+import { getTranslation } from "@firebase-oss/ui-core";
+import { useUI, type TwitterSignInButtonProps, TwitterLogo } from "@firebase-oss/ui-react";
import { OAuthButton } from "@/components/oauth-button";
diff --git a/packages/shadcn/tests/utils.tsx b/packages/shadcn/tests/utils.tsx
index 12f571779..833292abc 100644
--- a/packages/shadcn/tests/utils.tsx
+++ b/packages/shadcn/tests/utils.tsx
@@ -16,10 +16,10 @@
import type { FirebaseApp } from "firebase/app";
import type { Auth } from "firebase/auth";
-import { enUs } from "@invertase/firebaseui-translations";
-import { FirebaseUIProvider } from "@invertase/firebaseui-react";
-import { Behavior, FirebaseUIOptions, initializeUI } from "@invertase/firebaseui-core";
-import { FirebaseUIStore } from "@invertase/firebaseui-core";
+import { enUs } from "@firebase-oss/ui-translations";
+import { FirebaseUIProvider } from "@firebase-oss/ui-react";
+import { Behavior, FirebaseUIOptions, initializeUI } from "@firebase-oss/ui-core";
+import { FirebaseUIStore } from "@firebase-oss/ui-core";
import { vi } from "vitest";
export function createMockUI(overrides?: Partial) {
diff --git a/packages/shadcn/tsconfig.json b/packages/shadcn/tsconfig.json
index a8e7da5e9..b24344581 100644
--- a/packages/shadcn/tsconfig.json
+++ b/packages/shadcn/tsconfig.json
@@ -8,8 +8,8 @@
"paths": {
"@/*": ["./src/*"],
"@/tests/*": ["./tests/*"],
- "@invertase/firebaseui-core": ["../core/src/index.ts"],
- "@invertase/firebaseui-react": ["../react/src/index.ts"]
+ "@firebase-oss/ui-core": ["../core/src/index.ts"],
+ "@firebase-oss/ui-react": ["../react/src/index.ts"]
}
},
"include": ["src", "tests", "vite.config.ts", "setup-test.ts"]
diff --git a/packages/shadcn/vitest.config.ts b/packages/shadcn/vitest.config.ts
index d658a1d4b..3ccebb4c8 100644
--- a/packages/shadcn/vitest.config.ts
+++ b/packages/shadcn/vitest.config.ts
@@ -19,7 +19,7 @@ import viteConfig from "./vite.config";
export default mergeConfig(viteConfig, {
test: {
- name: "@invertase/firebaseui-shadcn",
+ name: "@firebase-oss/ui-shadcn",
// Use the same environment as the package
environment: "jsdom",
// Include TypeScript files
diff --git a/packages/styles/GEMINI.md b/packages/styles/GEMINI.md
index 8dfa1b46d..00af45eb9 100644
--- a/packages/styles/GEMINI.md
+++ b/packages/styles/GEMINI.md
@@ -1,10 +1,10 @@
# Firebase UI Styles
-This document provides context for the `@invertase/firebaseui-styles` package.
+This document provides context for the `@firebase-oss/ui-styles` package.
## Overview
-The `@invertase/firebaseui-styles` package provides the core styling for all Firebase UI for Web components. It is framework-agnostic and offers multiple ways to be consumed.
+The `@firebase-oss/ui-styles` package provides the core styling for all Firebase UI for Web components. It is framework-agnostic and offers multiple ways to be consumed.
1. **CSS Files**: For direct use in projects. It provides different files depending on whether you use Tailwind CSS.
2. **Component Variants**: It exports utilities using `cva` (Class Variance Authority) to programmatically apply styles, which is useful when building custom components.
@@ -21,7 +21,7 @@ If your project uses Tailwind CSS, you should import the `tailwind` entry point
```css
/* In your global styles.css */
-@import "@invertase/firebaseui-styles/tailwind";
+@import "@firebase-oss/ui-styles/tailwind";
```
### Without Tailwind CSS
@@ -30,7 +30,7 @@ If you are not using Tailwind CSS, you can import the pre-compiled distributed f
```javascript
// In your main application file
-import "@invertase/firebaseui-styles";
+import "@firebase-oss/ui-styles";
```
## Component Variants (CVA)
@@ -44,7 +44,7 @@ Currently, it exports a `buttonVariant` helper.
Here is how you might use it in a React component:
```tsx
-import { buttonVariant, ButtonVariant } from "@invertase/firebaseui-styles";
+import { buttonVariant, ButtonVariant } from "@firebase-oss/ui-styles";
import { type ComponentProps } from "react";
interface ButtonProps extends ComponentProps<"button"> {
diff --git a/packages/styles/README.md b/packages/styles/README.md
index 76e17da22..046be2bb5 100644
--- a/packages/styles/README.md
+++ b/packages/styles/README.md
@@ -1,4 +1,4 @@
-# @invertase/firebaseui-styles
+# @firebase-oss/ui-styles
This package contains the styles for the FirebaseUI components.
@@ -10,7 +10,7 @@ If you are using Tailwind CSS in your project, you can import the source files d
```css
@import "tailwindcss";
-@import "@invertase/firebaseui-styles/tailwind";
+@import "@firebase-oss/ui-styles/tailwind";
```
### With CSS
@@ -18,7 +18,7 @@ If you are using Tailwind CSS in your project, you can import the source files d
Alternatively, you can import fully compiled CSS files into your project. This output contains both the tailwind styles and the FirebaseUI styles.
```jsx
-import "@invertase/firebaseui-styles";
+import "@firebase-oss/ui-styles";
```
## Themes
@@ -27,8 +27,8 @@ The packages also exports themes which overrides the CSS variables with preset c
```css
@import "tailwindcss";
-@import "@invertase/firebaseui-styles/tailwind";
-@import "@invertase/firebaseui-styles/themes/brualist";
+@import "@firebase-oss/ui-styles/tailwind";
+@import "@firebase-oss/ui-styles/themes/brualist";
```
## Building
diff --git a/packages/styles/package.json b/packages/styles/package.json
index 84b979721..c6529f129 100644
--- a/packages/styles/package.json
+++ b/packages/styles/package.json
@@ -1,6 +1,6 @@
{
- "name": "@invertase/firebaseui-styles",
- "version": "0.0.13",
+ "name": "@firebase-oss/ui-styles",
+ "version": "0.0.1",
"type": "module",
"zshy": {
"exports": {
diff --git a/packages/styles/vitest.config.ts b/packages/styles/vitest.config.ts
index 50fd2244c..455adb70b 100644
--- a/packages/styles/vitest.config.ts
+++ b/packages/styles/vitest.config.ts
@@ -18,7 +18,7 @@ import { defineConfig } from "vitest/config";
export default defineConfig({
test: {
- name: "@invertase/firebaseui-styles",
+ name: "@firebase-oss/ui-styles",
environment: "jsdom",
include: ["src/**/*.{test,spec}.{js,ts}"],
exclude: ["node_modules/**/*", "dist/**/*"],
diff --git a/packages/translations/GEMINI.md b/packages/translations/GEMINI.md
index b210dec44..bc3a4d779 100644
--- a/packages/translations/GEMINI.md
+++ b/packages/translations/GEMINI.md
@@ -1,20 +1,20 @@
# Firebase UI Translations
-This document provides context for the `@invertase/firebaseui-translations` package.
+This document provides context for the `@firebase-oss/ui-translations` package.
## Overview
-The `@invertase/firebaseui-translations` package provides the localization and internationalization (i18n) capabilities for the Firebase UI for Web library. It contains the translation strings for various languages and exports utilities to register and use different locales.
+The `@firebase-oss/ui-translations` package provides the localization and internationalization (i18n) capabilities for the Firebase UI for Web library. It contains the translation strings for various languages and exports utilities to register and use different locales.
-This package is a core dependency of `@invertase/firebaseui-core`, which uses it to display all user-facing text, such as labels, messages, and errors.
+This package is a core dependency of `@firebase-oss/ui-core`, which uses it to display all user-facing text, such as labels, messages, and errors.
## Usage
-The primary way to use this package is to import a pre-registered locale and pass it to the `initializeUI` function from the `@invertase/firebaseui-core` package.
+The primary way to use this package is to import a pre-registered locale and pass it to the `initializeUI` function from the `@firebase-oss/ui-core` package.
```typescript
-import { initializeUI } from "@invertase/firebaseui-core";
-import { enUs } from "@invertase/firebaseui-translations";
+import { initializeUI } from "@firebase-oss/ui-core";
+import { enUs } from "@firebase-oss/ui-translations";
import { firebaseApp } from "./firebase";
const ui = initializeUI({
@@ -49,7 +49,7 @@ To contribute a new language, you can create a new locale file and register it u
1. **Create the translation file (`fr.ts`):**
```typescript
- import { type Translations } from "@invertase/firebaseui-translations";
+ import { type Translations } from "@firebase-oss/ui-translations";
export const fr: Translations = {
errors: {
@@ -63,8 +63,8 @@ To contribute a new language, you can create a new locale file and register it u
2. **Register and use the locale:**
```typescript
- import { initializeUI } from "@invertase/firebaseui-core";
- import { registerLocale } from "@invertase/firebaseui-translations";
+ import { initializeUI } from "@firebase-oss/ui-core";
+ import { registerLocale } from "@firebase-oss/ui-translations";
import { fr } from "./fr"; // Your custom locale file
const frFr = registerLocale("fr-FR", fr);
@@ -85,7 +85,7 @@ The `registerLocale` function accepts an optional third argument: a `fallback` l
```typescript
// en-gb.ts
- import { type Translations } from "@invertase/firebaseui-translations";
+ import { type Translations } from "@firebase-oss/ui-translations";
// Only define the strings you want to override.
export const enGB: Partial = {
@@ -98,8 +98,8 @@ The `registerLocale` function accepts an optional third argument: a `fallback` l
2. **Register the locale with a fallback:**
```typescript
- import { initializeUI } from "@invertase/firebaseui-core";
- import { registerLocale, enUs } from "@invertase/firebaseui-translations";
+ import { initializeUI } from "@firebase-oss/ui-core";
+ import { registerLocale, enUs } from "@firebase-oss/ui-translations";
import { enGB } from "./en-gb";
// Register en-GB, with en-US as the fallback.
diff --git a/packages/translations/package.json b/packages/translations/package.json
index 68578b026..6b5a987c6 100644
--- a/packages/translations/package.json
+++ b/packages/translations/package.json
@@ -1,6 +1,6 @@
{
- "name": "@invertase/firebaseui-translations",
- "version": "0.0.8",
+ "name": "@firebase-oss/ui-translations",
+ "version": "0.0.1",
"description": "Translations for Firebase UI",
"type": "module",
"main": "./dist/index.cjs",
diff --git a/packages/translations/vitest.config.ts b/packages/translations/vitest.config.ts
index 43a017fa6..5f7669405 100644
--- a/packages/translations/vitest.config.ts
+++ b/packages/translations/vitest.config.ts
@@ -18,7 +18,7 @@ import { defineConfig } from "vitest/config";
export default defineConfig({
test: {
- name: "@invertase/firebaseui-translations",
+ name: "@firebase-oss/ui-translations",
include: ["src/**/*.{test,spec}.{js,ts}"],
exclude: ["node_modules/**/*", "dist/**/*"],
},
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 1be27c105..4b17532d2 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -179,16 +179,16 @@ importers:
'@angular/ssr':
specifier: ^20.2.2
version: 20.3.7(64ca8375dbaf48ae24b53908d91cad2b)
- '@invertase/firebaseui-angular':
+ '@firebase-oss/ui-angular':
specifier: workspace:*
version: link:../../packages/angular
- '@invertase/firebaseui-core':
+ '@firebase-oss/ui-core':
specifier: workspace:*
version: link:../../packages/core
- '@invertase/firebaseui-styles':
+ '@firebase-oss/ui-styles':
specifier: workspace:*
version: link:../../packages/styles
- '@invertase/firebaseui-translations':
+ '@firebase-oss/ui-translations':
specifier: workspace:*
version: link:../../packages/translations
'@tailwindcss/postcss':
@@ -291,16 +291,16 @@ importers:
examples/nextjs:
dependencies:
- '@invertase/firebaseui-core':
+ '@firebase-oss/ui-core':
specifier: workspace:*
version: link:../../packages/core
- '@invertase/firebaseui-react':
+ '@firebase-oss/ui-react':
specifier: workspace:*
version: link:../../packages/react
- '@invertase/firebaseui-styles':
+ '@firebase-oss/ui-styles':
specifier: workspace:*
version: link:../../packages/styles
- '@invertase/firebaseui-translations':
+ '@firebase-oss/ui-translations':
specifier: workspace:*
version: link:../../packages/translations
firebase:
@@ -346,18 +346,18 @@ importers:
examples/nextjs-ssr:
dependencies:
- '@invertase/firebaseui-core':
- specifier: latest
- version: 0.0.12(firebase@11.10.0)
- '@invertase/firebaseui-react':
- specifier: latest
- version: 0.0.11(@types/react@19.1.16)(firebase@11.10.0)(nanostores@1.0.1)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.3)
- '@invertase/firebaseui-styles':
- specifier: latest
- version: 0.0.14(typescript@5.9.3)
- '@invertase/firebaseui-translations':
- specifier: latest
- version: 0.0.9
+ '@firebase-oss/ui-core':
+ specifier: workspace:*
+ version: link:../../packages/core
+ '@firebase-oss/ui-react':
+ specifier: workspace:*
+ version: link:../../packages/react
+ '@firebase-oss/ui-styles':
+ specifier: workspace:*
+ version: link:../../packages/styles
+ '@firebase-oss/ui-translations':
+ specifier: workspace:*
+ version: link:../../packages/translations
firebase:
specifier: ^11.10.0
version: 11.10.0
@@ -404,16 +404,16 @@ importers:
examples/react:
dependencies:
- '@invertase/firebaseui-core':
+ '@firebase-oss/ui-core':
specifier: workspace:*
version: link:../../packages/core
- '@invertase/firebaseui-react':
+ '@firebase-oss/ui-react':
specifier: workspace:*
version: link:../../packages/react
- '@invertase/firebaseui-styles':
+ '@firebase-oss/ui-styles':
specifier: workspace:*
version: link:../../packages/styles
- '@invertase/firebaseui-translations':
+ '@firebase-oss/ui-translations':
specifier: workspace:*
version: link:../../packages/translations
firebase:
@@ -468,21 +468,21 @@ importers:
examples/shadcn:
dependencies:
- '@hookform/resolvers':
- specifier: ^5.2.2
- version: 5.2.2(react-hook-form@7.65.0(react@19.1.1))
- '@invertase/firebaseui-core':
+ '@firebase-oss/ui-core':
specifier: workspace:*
version: link:../../packages/core
- '@invertase/firebaseui-react':
+ '@firebase-oss/ui-react':
specifier: workspace:*
version: link:../../packages/react
- '@invertase/firebaseui-styles':
+ '@firebase-oss/ui-styles':
specifier: workspace:*
version: link:../../packages/styles
- '@invertase/firebaseui-translations':
+ '@firebase-oss/ui-translations':
specifier: workspace:*
version: link:../../packages/translations
+ '@hookform/resolvers':
+ specifier: ^5.2.2
+ version: 5.2.2(react-hook-form@7.65.0(react@19.1.1))
'@radix-ui/react-accordion':
specifier: ^1.2.12
version: 1.2.12(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
@@ -664,10 +664,10 @@ importers:
packages/angular:
dependencies:
- '@invertase/firebaseui-core':
+ '@firebase-oss/ui-core':
specifier: workspace:*
version: link:../core
- '@invertase/firebaseui-styles':
+ '@firebase-oss/ui-styles':
specifier: workspace:*
version: link:../styles
'@tanstack/angular-form':
@@ -767,7 +767,7 @@ importers:
packages/core:
dependencies:
- '@invertase/firebaseui-translations':
+ '@firebase-oss/ui-translations':
specifier: workspace:*
version: link:../translations
libphonenumber-js:
@@ -813,10 +813,10 @@ importers:
packages/react:
dependencies:
- '@invertase/firebaseui-core':
+ '@firebase-oss/ui-core':
specifier: workspace:*
version: link:../core
- '@invertase/firebaseui-styles':
+ '@firebase-oss/ui-styles':
specifier: workspace:*
version: link:../styles
'@nanostores/react':
@@ -838,7 +838,7 @@ importers:
specifier: 'catalog:'
version: 4.1.12
devDependencies:
- '@invertase/firebaseui-translations':
+ '@firebase-oss/ui-translations':
specifier: workspace:*
version: link:../translations
'@testing-library/jest-dom':
@@ -895,15 +895,15 @@ importers:
packages/shadcn:
dependencies:
- '@hookform/resolvers':
- specifier: ^5.2.2
- version: 5.2.2(react-hook-form@7.65.0(react@19.1.1))
- '@invertase/firebaseui-core':
+ '@firebase-oss/ui-core':
specifier: workspace:*
version: link:../core
- '@invertase/firebaseui-react':
+ '@firebase-oss/ui-react':
specifier: workspace:*
version: link:../react
+ '@hookform/resolvers':
+ specifier: ^5.2.2
+ version: 5.2.2(react-hook-form@7.65.0(react@19.1.1))
'@radix-ui/react-label':
specifier: ^2.1.7
version: 2.1.7(@types/react-dom@19.1.9(@types/react@19.1.16))(@types/react@19.1.16)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
@@ -938,7 +938,7 @@ importers:
specifier: 'catalog:'
version: 4.1.12
devDependencies:
- '@invertase/firebaseui-translations':
+ '@firebase-oss/ui-translations':
specifier: workspace:*
version: link:../translations
'@tailwindcss/vite':
@@ -3063,24 +3063,6 @@ packages:
'@types/node':
optional: true
- '@invertase/firebaseui-core@0.0.12':
- resolution: {integrity: sha512-tmP/OveY+gtqsSedqukmBtn/QWG6cj290EdWn50/ce0fCbgn1OMBSwO6ytCVkoYmIvoexiCV7dRTYHG/9Ub9/w==}
- peerDependencies:
- firebase: ^11 || ^12
-
- '@invertase/firebaseui-react@0.0.11':
- resolution: {integrity: sha512-qkP7G9T/6CEa14e6J3Ch5lTdtAffpR2KvcsIEzt1vX+WqKeTxL+jmMC9+RRvHLMiEbbSJvnp4XsvJ5Ta42ak2Q==}
- peerDependencies:
- firebase: ^11 || ^12
- react: ^19
- react-dom: ^19
-
- '@invertase/firebaseui-styles@0.0.14':
- resolution: {integrity: sha512-l6UfGhByfjS+aTMmOklK5Xpyk/Ktrh/1QkILwLAZhq+frDLmTo3hBGt7F7g5AyI84MQl+ge+L/NbQYjnQ3I6XQ==}
-
- '@invertase/firebaseui-translations@0.0.9':
- resolution: {integrity: sha512-INTu2PQz7DB2PhmhT8bDUaVgV2/8MZ2yqy2Oesln4r6Lkcw6zVtU65VDnHutztaOVT+UiW91v41YXn5cZN7SRQ==}
-
'@isaacs/balanced-match@4.0.1':
resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==}
engines: {node: 20 || >=22}
@@ -10222,7 +10204,7 @@ snapshots:
dependencies:
'@ampproject/remapping': 2.3.0
'@angular-devkit/architect': 0.2003.10(chokidar@4.0.3)
- '@angular-devkit/build-webpack': 0.2003.10(chokidar@4.0.3)(webpack-dev-server@5.2.2(webpack@5.101.2))(webpack@5.101.2)
+ '@angular-devkit/build-webpack': 0.2003.10(chokidar@4.0.3)(webpack-dev-server@5.2.2(webpack@5.101.2))(webpack@5.101.2(esbuild@0.25.9))
'@angular-devkit/core': 20.3.10(chokidar@4.0.3)
'@angular/build': 20.3.10(1be407f5110624cbb4aee41c10128f32)
'@angular/compiler-cli': 20.3.7(@angular/compiler@20.3.7)(typescript@5.9.3)
@@ -10236,7 +10218,7 @@ snapshots:
'@babel/preset-env': 7.28.3(@babel/core@7.28.3)
'@babel/runtime': 7.28.3
'@discoveryjs/json-ext': 0.6.3
- '@ngtools/webpack': 20.3.10(@angular/compiler-cli@20.3.7(@angular/compiler@20.3.7)(typescript@5.9.3))(typescript@5.9.3)(webpack@5.101.2)
+ '@ngtools/webpack': 20.3.10(@angular/compiler-cli@20.3.7(@angular/compiler@20.3.7)(typescript@5.9.3))(typescript@5.9.3)(webpack@5.101.2(esbuild@0.25.9))
ansi-colors: 4.1.3
autoprefixer: 10.4.21(postcss@8.5.6)
babel-loader: 10.0.0(@babel/core@7.28.3)(webpack@5.101.2)
@@ -10313,7 +10295,7 @@ snapshots:
dependencies:
'@ampproject/remapping': 2.3.0
'@angular-devkit/architect': 0.2003.7(chokidar@4.0.3)
- '@angular-devkit/build-webpack': 0.2003.7(chokidar@4.0.3)(webpack-dev-server@5.2.2(webpack@5.101.2))(webpack@5.101.2(esbuild@0.25.9))
+ '@angular-devkit/build-webpack': 0.2003.7(chokidar@4.0.3)(webpack-dev-server@5.2.2(webpack@5.101.2))(webpack@5.101.2)
'@angular-devkit/core': 20.3.7(chokidar@4.0.3)
'@angular/build': 20.3.7(1849c53c536bd3612d435156c655d6b9)
'@angular/compiler-cli': 20.3.7(@angular/compiler@20.3.7)(typescript@5.9.3)
@@ -10327,7 +10309,7 @@ snapshots:
'@babel/preset-env': 7.28.3(@babel/core@7.28.3)
'@babel/runtime': 7.28.3
'@discoveryjs/json-ext': 0.6.3
- '@ngtools/webpack': 20.3.7(@angular/compiler-cli@20.3.7(@angular/compiler@20.3.7)(typescript@5.9.3))(typescript@5.9.3)(webpack@5.101.2(esbuild@0.25.9))
+ '@ngtools/webpack': 20.3.7(@angular/compiler-cli@20.3.7(@angular/compiler@20.3.7)(typescript@5.9.3))(typescript@5.9.3)(webpack@5.101.2)
ansi-colors: 4.1.3
autoprefixer: 10.4.21(postcss@8.5.6)
babel-loader: 10.0.0(@babel/core@7.28.3)(webpack@5.101.2)
@@ -10400,7 +10382,7 @@ snapshots:
- webpack-cli
- yaml
- '@angular-devkit/build-webpack@0.2003.10(chokidar@4.0.3)(webpack-dev-server@5.2.2(webpack@5.101.2))(webpack@5.101.2)':
+ '@angular-devkit/build-webpack@0.2003.10(chokidar@4.0.3)(webpack-dev-server@5.2.2(webpack@5.101.2))(webpack@5.101.2(esbuild@0.25.9))':
dependencies:
'@angular-devkit/architect': 0.2003.10(chokidar@4.0.3)
rxjs: 7.8.2
@@ -10409,7 +10391,7 @@ snapshots:
transitivePeerDependencies:
- chokidar
- '@angular-devkit/build-webpack@0.2003.7(chokidar@4.0.3)(webpack-dev-server@5.2.2(webpack@5.101.2))(webpack@5.101.2(esbuild@0.25.9))':
+ '@angular-devkit/build-webpack@0.2003.7(chokidar@4.0.3)(webpack-dev-server@5.2.2(webpack@5.101.2))(webpack@5.101.2)':
dependencies:
'@angular-devkit/architect': 0.2003.7(chokidar@4.0.3)
rxjs: 7.8.2
@@ -12600,42 +12582,6 @@ snapshots:
optionalDependencies:
'@types/node': 24.9.2
- '@invertase/firebaseui-core@0.0.12(firebase@11.10.0)':
- dependencies:
- '@invertase/firebaseui-translations': 0.0.9
- firebase: 11.10.0
- libphonenumber-js: 1.12.25
- nanostores: 1.0.1
- qrcode-generator: 2.0.4
- zod: 4.1.12
-
- '@invertase/firebaseui-react@0.0.11(@types/react@19.1.16)(firebase@11.10.0)(nanostores@1.0.1)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.3)':
- dependencies:
- '@invertase/firebaseui-core': 0.0.12(firebase@11.10.0)
- '@invertase/firebaseui-styles': 0.0.14(typescript@5.9.3)
- '@nanostores/react': 1.0.0(nanostores@1.0.1)(react@19.1.1)
- '@radix-ui/react-slot': 1.2.3(@types/react@19.1.16)(react@19.1.1)
- '@tanstack/react-form': 1.20.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- clsx: 2.1.1
- firebase: 11.10.0
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
- tailwind-merge: 3.3.1
- zod: 4.1.12
- transitivePeerDependencies:
- - '@tanstack/react-start'
- - '@types/react'
- - nanostores
- - typescript
-
- '@invertase/firebaseui-styles@0.0.14(typescript@5.9.3)':
- dependencies:
- cva: 1.0.0-beta.4(typescript@5.9.3)
- transitivePeerDependencies:
- - typescript
-
- '@invertase/firebaseui-translations@0.0.9': {}
-
'@isaacs/balanced-match@4.0.1': {}
'@isaacs/brace-expansion@5.0.0':
@@ -13141,13 +13087,13 @@ snapshots:
'@next/swc-win32-x64-msvc@15.1.7':
optional: true
- '@ngtools/webpack@20.3.10(@angular/compiler-cli@20.3.7(@angular/compiler@20.3.7)(typescript@5.9.3))(typescript@5.9.3)(webpack@5.101.2)':
+ '@ngtools/webpack@20.3.10(@angular/compiler-cli@20.3.7(@angular/compiler@20.3.7)(typescript@5.9.3))(typescript@5.9.3)(webpack@5.101.2(esbuild@0.25.9))':
dependencies:
'@angular/compiler-cli': 20.3.7(@angular/compiler@20.3.7)(typescript@5.9.3)
typescript: 5.9.3
webpack: 5.101.2(esbuild@0.25.9)
- '@ngtools/webpack@20.3.7(@angular/compiler-cli@20.3.7(@angular/compiler@20.3.7)(typescript@5.9.3))(typescript@5.9.3)(webpack@5.101.2(esbuild@0.25.9))':
+ '@ngtools/webpack@20.3.7(@angular/compiler-cli@20.3.7(@angular/compiler@20.3.7)(typescript@5.9.3))(typescript@5.9.3)(webpack@5.101.2)':
dependencies:
'@angular/compiler-cli': 20.3.7(@angular/compiler@20.3.7)(typescript@5.9.3)
typescript: 5.9.3
@@ -14922,7 +14868,7 @@ snapshots:
sirv: 3.0.2
tinyglobby: 0.2.15
tinyrainbow: 2.0.0
- vitest: 3.2.4(@types/node@24.9.2)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@26.1.0)(less@4.4.2)(lightningcss@1.30.2)(msw@2.11.6(@types/node@24.9.2)(typescript@5.9.3))(sass@1.93.2)(terser@5.43.1)(tsx@4.20.6)
+ vitest: 3.2.4(@types/node@20.19.24)(@vitest/ui@3.2.4)(jiti@2.6.1)(jsdom@25.0.1)(less@4.4.0)(lightningcss@1.30.2)(msw@2.11.6(@types/node@20.19.24)(typescript@5.9.3))(sass@1.90.0)(terser@5.43.1)(tsx@4.20.6)
'@vitest/utils@3.2.4':
dependencies: