Skip to content

Commit 7c60dc8

Browse files
committed
refactor: Improve class name handling with cn utility function
1 parent b939634 commit 7c60dc8

File tree

15 files changed

+77
-35
lines changed

15 files changed

+77
-35
lines changed

packages/firebaseui-react/package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,12 @@
1515
"@nanostores/react": "^0.8.4",
1616
"@tailwindcss/vite": "^4.0.0",
1717
"@tanstack/react-form": "^0.41.3",
18+
"clsx": "^2.1.1",
1819
"firebase": "^11.2.0",
1920
"nanostores": "^0.11.3",
2021
"react": "^18.3.1",
2122
"react-dom": "^18.3.1",
23+
"tailwind-merge": "^3.0.1",
2224
"tailwindcss": "^4.0.0",
2325
"zod": "^3.24.1"
2426
},

packages/firebaseui-react/src/auth/custom-sign-in-screen.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { cn } from "~/utils/cn";
2+
13
interface CustomSignInScreenProps {
24
children: React.ReactNode;
35
className?: string;
@@ -7,5 +9,5 @@ export function CustomSignInScreen({
79
children,
810
className,
911
}: CustomSignInScreenProps) {
10-
return <div className={`fui-screen ${className || ""}`}>{children}</div>;
12+
return <div className={cn("fui-screen", className)}>{children}</div>;
1113
}

packages/firebaseui-react/src/auth/email-password-form.tsx

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import { useAuth, useConfig, useTranslations } from "~/hooks";
1212
import { useMemo, useState } from "react";
1313
import { Button } from "../components/button";
1414
import { FieldInfo } from "../components/field-info";
15+
import { cn } from "~/utils/cn";
1516

1617
export function EmailPasswordForm({
1718
onForgotPasswordClick,
@@ -77,9 +78,10 @@ export function EmailPasswordForm({
7778
)}
7879
</label>
7980
<input
80-
className={`fui-form__input ${
81-
field.state.meta.errors.length ? "fui-form__input--error" : ""
82-
}`}
81+
className={cn(
82+
"fui-form__input",
83+
field.state.meta.errors.length && "fui-form__input--error"
84+
)}
8385
id={field.name}
8486
name={field.name}
8587
type="email"
@@ -125,9 +127,10 @@ export function EmailPasswordForm({
125127
)}
126128
</div>
127129
<input
128-
className={`fui-form__input ${
129-
field.state.meta.errors.length ? "fui-form__input--error" : ""
130-
}`}
130+
className={cn(
131+
"fui-form__input",
132+
field.state.meta.errors.length && "fui-form__input--error"
133+
)}
131134
id={field.name}
132135
name={field.name}
133136
type="password"

packages/firebaseui-react/src/auth/phone-form.tsx

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import {
1414
import { Button } from "../components/button";
1515
import { FieldInfo } from "../components/field-info";
1616
import { z } from "zod";
17+
import { cn } from "~/utils/cn";
1718

1819
export function PhoneForm() {
1920
const auth = useAuth();
@@ -143,11 +144,10 @@ export function PhoneForm() {
143144
)}
144145
</label>
145146
<input
146-
className={`fui-form__input ${
147-
field.state.meta.errors.length
148-
? "fui-form__input--error"
149-
: ""
150-
}`}
147+
className={cn(
148+
"fui-form__input",
149+
field.state.meta.errors.length && "fui-form__input--error"
150+
)}
151151
id={field.name}
152152
name={field.name}
153153
type="tel"
@@ -204,9 +204,10 @@ export function PhoneForm() {
204204
)}
205205
</label>
206206
<input
207-
className={`fui-form__input ${
208-
field.state.meta.errors.length ? "fui-form__input--error" : ""
209-
}`}
207+
className={cn(
208+
"fui-form__input",
209+
field.state.meta.errors.length && "fui-form__input--error"
210+
)}
210211
id={field.name}
211212
name={field.name}
212213
type="text"

packages/firebaseui-react/src/auth/register-form.tsx

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import { useAuth, useConfig, useTranslations } from "~/hooks";
1212
import { useMemo, useState } from "react";
1313
import { Button } from "../components/button";
1414
import { FieldInfo } from "../components/field-info";
15+
import { cn } from "~/utils/cn";
1516

1617
export function RegisterForm({
1718
onBackToSignInClick,
@@ -80,9 +81,10 @@ export function RegisterForm({
8081
)}
8182
</label>
8283
<input
83-
className={`fui-form__input ${
84-
field.state.meta.errors.length ? "fui-form__input--error" : ""
85-
}`}
84+
className={cn(
85+
"fui-form__input",
86+
field.state.meta.errors.length && "fui-form__input--error"
87+
)}
8688
id={field.name}
8789
name={field.name}
8890
type="email"
@@ -105,9 +107,10 @@ export function RegisterForm({
105107
{getTranslation("labels", "password", translations, language)}
106108
</label>
107109
<input
108-
className={`fui-form__input ${
109-
field.state.meta.errors.length ? "fui-form__input--error" : ""
110-
}`}
110+
className={cn(
111+
"fui-form__input",
112+
field.state.meta.errors.length && "fui-form__input--error"
113+
)}
111114
id={field.name}
112115
name={field.name}
113116
type="password"

packages/firebaseui-react/src/components/button.tsx

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
import { type ButtonHTMLAttributes } from "react";
1+
import { ButtonHTMLAttributes } from "react";
2+
import { cn } from "~/utils/cn";
23

34
interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
45
variant?: "primary" | "secondary";
@@ -12,9 +13,11 @@ export function Button({
1213
}: ButtonProps) {
1314
return (
1415
<button
15-
className={`fui-form__button ${
16-
variant === "secondary" ? "fui-form__button--secondary" : ""
17-
} ${className}`}
16+
className={cn(
17+
"fui-form__button",
18+
variant === "secondary" && "fui-form__button--secondary",
19+
className
20+
)}
1821
{...props}
1922
>
2023
{children}

packages/firebaseui-react/src/components/card-header.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { CardTitle } from "./card-title";
22
import { CardSubtitle } from "./card-subtitle";
3+
import { cn } from "~/utils/cn";
34

45
interface CardHeaderProps {
56
title?: string;
@@ -9,7 +10,7 @@ interface CardHeaderProps {
910

1011
export function CardHeader({ title, subtitle, className }: CardHeaderProps) {
1112
return (
12-
<div className={`fui-card__header ${className || ""}`}>
13+
<div className={cn("fui-card__header", className)}>
1314
<CardTitle text={title} />
1415
<CardSubtitle text={subtitle} />
1516
</div>

packages/firebaseui-react/src/components/card-subtitle.tsx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { useConfig, useTranslations } from "~/hooks";
22
import { getTranslation } from "@firebase-ui/core";
3+
import { cn } from "~/utils/cn";
34

45
interface CardSubtitleProps {
56
text?: string;
@@ -14,7 +15,5 @@ export function CardSubtitle({ text, className }: CardSubtitleProps) {
1415
text ||
1516
getTranslation("prompts", "signInToAccount", translations, language);
1617

17-
return (
18-
<p className={`fui-card__subtitle ${className || ""}`}>{subtitleText}</p>
19-
);
18+
return <p className={cn("fui-card__subtitle", className)}>{subtitleText}</p>;
2019
}

packages/firebaseui-react/src/components/card-title.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { useConfig, useTranslations } from "~/hooks";
22
import { getTranslation } from "@firebase-ui/core";
3+
import { cn } from "~/utils/cn";
34

45
interface CardTitleProps {
56
text?: string;
@@ -13,5 +14,5 @@ export function CardTitle({ text, className }: CardTitleProps) {
1314
const titleText =
1415
text || getTranslation("labels", "signIn", translations, language);
1516

16-
return <h2 className={`fui-card__title ${className || ""}`}>{titleText}</h2>;
17+
return <h2 className={cn("fui-card__title", className)}>{titleText}</h2>;
1718
}

packages/firebaseui-react/src/components/card.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
1+
import { cn } from "~/utils/cn";
2+
13
interface CardProps {
24
children: React.ReactNode;
35
className?: string;
46
}
57

68
export function Card({ children, className }: CardProps) {
79
return (
8-
<div className={`fui-card ${className || ""}`}>
10+
<div className={cn("fui-card", className)}>
911
<div className="fui-card__container">{children}</div>
1012
</div>
1113
);

0 commit comments

Comments
 (0)