From 37fe35014c04b6804b0bd4af82feb90a8b753e8c Mon Sep 17 00:00:00 2001 From: Bill Leoutsakos Date: Sun, 20 Sep 2026 15:49:49 -0700 Subject: [PATCH] improvement(ui): share public authentication headings --- .../chat/components/auth/email/email-auth.tsx | 17 ++++++++-------- .../auth/password/password-auth.tsx | 13 +++++------- .../app/f/[token]/public-file-auth-shell.tsx | 10 ++-------- .../components/auth/public-auth-header.tsx | 20 +++++++++++++++++++ apps/sim/ee/sso/components/sso-auth.tsx | 13 +++++------- apps/sim/ee/sso/components/sso-form.tsx | 18 ++--------------- 6 files changed, 42 insertions(+), 49 deletions(-) create mode 100644 apps/sim/components/auth/public-auth-header.tsx diff --git a/apps/sim/app/(interfaces)/chat/components/auth/email/email-auth.tsx b/apps/sim/app/(interfaces)/chat/components/auth/email/email-auth.tsx index 248d24644ee..621a3eecc1e 100644 --- a/apps/sim/app/(interfaces)/chat/components/auth/email/email-auth.tsx +++ b/apps/sim/app/(interfaces)/chat/components/auth/email/email-auth.tsx @@ -4,6 +4,7 @@ import { useEffect, useState } from 'react' import { ChipInput, cn, InputOTP, InputOTPGroup, InputOTPSlot, Label } from '@sim/emcn' import { createLogger } from '@sim/logger' import { toError } from '@sim/utils/errors' +import { PublicAuthHeader } from '@/components/auth/public-auth-header' import { quickValidateEmail } from '@/lib/messaging/email/validation' import { AuthSubmitButton } from '@/app/(auth)/components' import { AUTH_TEXT_LINK } from '@/app/(auth)/components/auth-button-classes' @@ -110,16 +111,14 @@ export default function EmailAuth({ identifier }: EmailAuthProps) {
-
-

- {showOtpVerification ? 'Verify Your Email' : 'Email Verification'} -

-

- {showOtpVerification + -

+ : 'This chat requires email verification' + } + />
{!showOtpVerification ? ( diff --git a/apps/sim/app/(interfaces)/chat/components/auth/password/password-auth.tsx b/apps/sim/app/(interfaces)/chat/components/auth/password/password-auth.tsx index df723907a00..cd49a26fa28 100644 --- a/apps/sim/app/(interfaces)/chat/components/auth/password/password-auth.tsx +++ b/apps/sim/app/(interfaces)/chat/components/auth/password/password-auth.tsx @@ -4,6 +4,7 @@ import { useState } from 'react' import { cn, Label } from '@sim/emcn' import { createLogger } from '@sim/logger' import { toError } from '@sim/utils/errors' +import { PublicAuthHeader } from '@/components/auth/public-auth-header' import { AuthSubmitButton, PasswordInput } from '@/app/(auth)/components' import { useChatPasswordAuth } from '@/hooks/queries/chats' @@ -44,14 +45,10 @@ export default function PasswordAuth({ identifier }: PasswordAuthProps) {
-
-

- Password Required -

-

- This chat is password-protected -

-
+
{ diff --git a/apps/sim/app/f/[token]/public-file-auth-shell.tsx b/apps/sim/app/f/[token]/public-file-auth-shell.tsx index 24da9e8d470..8953a5a5895 100644 --- a/apps/sim/app/f/[token]/public-file-auth-shell.tsx +++ b/apps/sim/app/f/[token]/public-file-auth-shell.tsx @@ -1,4 +1,5 @@ import type { ReactNode } from 'react' +import { PublicAuthHeader } from '@/components/auth/public-auth-header' import { SupportFooter } from '@/app/(auth)/components/support-footer' import { LogoShell } from '@/app/(landing)/components/logo-shell' @@ -17,14 +18,7 @@ export function PublicFileAuthShell({ title, subtitle, children }: PublicFileAut return ( }>
-
-

- {title} -

-

- {subtitle} -

-
+
{children}
diff --git a/apps/sim/components/auth/public-auth-header.tsx b/apps/sim/components/auth/public-auth-header.tsx new file mode 100644 index 00000000000..d3f1fa8a5d7 --- /dev/null +++ b/apps/sim/components/auth/public-auth-header.tsx @@ -0,0 +1,20 @@ +import type { ReactNode } from 'react' + +interface PublicAuthHeaderProps { + title: ReactNode + description: ReactNode +} + +/** Heading shared by public chat, file-share and SSO access gates. */ +export function PublicAuthHeader({ title, description }: PublicAuthHeaderProps) { + return ( +
+

+ {title} +

+

+ {description} +

+
+ ) +} diff --git a/apps/sim/ee/sso/components/sso-auth.tsx b/apps/sim/ee/sso/components/sso-auth.tsx index e5489919698..855651edaed 100644 --- a/apps/sim/ee/sso/components/sso-auth.tsx +++ b/apps/sim/ee/sso/components/sso-auth.tsx @@ -4,6 +4,7 @@ import { type KeyboardEvent, useState } from 'react' import { ChipInput, Label } from '@sim/emcn' import { createLogger } from '@sim/logger' import { useRouter } from 'next/navigation' +import { PublicAuthHeader } from '@/components/auth/public-auth-header' import { ApiClientError } from '@/lib/api/client/errors' import { requestJson } from '@/lib/api/client/request' import { chatSSOContract } from '@/lib/api/contracts/chats' @@ -98,14 +99,10 @@ export default function SSOAuth({ identifier }: SSOAuthProps) {
-
-

- SSO Authentication -

-

- This chat requires SSO authentication -

-
+ { diff --git a/apps/sim/ee/sso/components/sso-form.tsx b/apps/sim/ee/sso/components/sso-form.tsx index 494a9d25df7..5bc2e346594 100644 --- a/apps/sim/ee/sso/components/sso-form.tsx +++ b/apps/sim/ee/sso/components/sso-form.tsx @@ -5,6 +5,7 @@ import { Button, ChipInput, Label } from '@sim/emcn' import { createLogger } from '@sim/logger' import Link from 'next/link' import { useSearchParams } from 'next/navigation' +import { PublicAuthHeader } from '@/components/auth/public-auth-header' import { isApiClientError } from '@/lib/api/client/errors' import { requestJson } from '@/lib/api/client/request' import { resolveSsoProviderContract } from '@/lib/api/contracts/auth' @@ -186,22 +187,7 @@ function SSOFormContent({ return ( <> -
-

- Sign in with SSO -

-

- Enter your work email to continue -

-
+ {formError && (