From d5d8a2465365dc798ce68c83894c03d1ce845fe9 Mon Sep 17 00:00:00 2001 From: Ido Shamun <1993245+idoshamun@users.noreply.github.com> Date: Thu, 16 Apr 2026 14:59:05 +0300 Subject: [PATCH] feat: add signup widget to post page sidebar Add an alternative signup banner placement in the post page right column, behind the `post_signup_widget` feature flag. When enabled, the bottom PostAuthBanner is hidden on laptop and replaced by a compact widget with gradient-animated heading, auth buttons (Google/GitHub/email), and legal disclaimer. Reuses AuthOptions for full auth flow and analytics parity. Adds `compact`, `hideLoginLink`, and `onboardingSignupButton` size support to OnboardingRegistrationForm for reusability. --- .../src/components/auth/AuthOptionsInner.tsx | 6 +- .../auth/OnboardingRegistrationForm.tsx | 33 ++++---- .../shared/src/components/auth/common.tsx | 2 + .../src/components/post/PostSignupWidget.tsx | 76 +++++++++++++++++++ .../src/components/post/PostWidgets.tsx | 2 + .../src/components/post/SquadPostWidgets.tsx | 2 + .../post/collection/CollectionPostWidgets.tsx | 2 + packages/shared/src/lib/auth.ts | 1 + packages/shared/src/lib/featureManagement.ts | 2 + packages/webapp/pages/posts/[id]/index.tsx | 10 ++- 10 files changed, 121 insertions(+), 15 deletions(-) create mode 100644 packages/shared/src/components/post/PostSignupWidget.tsx diff --git a/packages/shared/src/components/auth/AuthOptionsInner.tsx b/packages/shared/src/components/auth/AuthOptionsInner.tsx index 43c9ead930..76e8ffd945 100644 --- a/packages/shared/src/components/auth/AuthOptionsInner.tsx +++ b/packages/shared/src/components/auth/AuthOptionsInner.tsx @@ -159,6 +159,8 @@ function AuthOptionsInner({ simplified = false, ignoreMessages = false, onboardingSignupButton, + hideLoginLink, + compact, autoTriggerProvider, socialProviderScopes, }: AuthOptionsProps): ReactElement { @@ -681,7 +683,7 @@ function AuthOptionsInner({ className={classNames( 'z-1 flex w-full max-w-[26.25rem] flex-col overflow-y-auto rounded-16', !simplified && 'bg-accent-pepper-subtlest', - defaultDisplay === AuthDisplay.OnboardingSignup + defaultDisplay === AuthDisplay.OnboardingSignup && !compact ? 'min-h-[21.25rem]' : undefined, className?.container, @@ -786,6 +788,8 @@ function AuthOptionsInner({ targetId={targetId} className={className} onboardingSignupButton={onboardingSignupButton} + hideLoginLink={hideLoginLink} + compact={compact} /> diff --git a/packages/shared/src/components/auth/OnboardingRegistrationForm.tsx b/packages/shared/src/components/auth/OnboardingRegistrationForm.tsx index f2e434da1b..44cf1a3266 100644 --- a/packages/shared/src/components/auth/OnboardingRegistrationForm.tsx +++ b/packages/shared/src/components/auth/OnboardingRegistrationForm.tsx @@ -36,6 +36,8 @@ interface OnboardingRegistrationFormProps extends AuthFormProps { isSocialAuthLoading?: boolean; className?: ClassName; onboardingSignupButton?: ButtonProps<'button'>; + hideLoginLink?: boolean; + compact?: boolean; } export const isWebView = (): boolean => { @@ -105,6 +107,9 @@ export const OnboardingRegistrationForm = ({ onProviderClick, targetId, trigger, + onboardingSignupButton, + hideLoginLink, + compact, }: OnboardingRegistrationFormProps): ReactElement => { const { logEvent } = useLogContext(); const { value: isOnboardingV2 } = useConditionalFeature({ @@ -144,9 +149,9 @@ export const OnboardingRegistrationForm = ({ icon={provider.icon} loading={!isReady || isSocialAuthLoading} onClick={() => onProviderClick?.(provider.value, false)} - size={ButtonSize.Large} + size={onboardingSignupButton?.size ?? ButtonSize.Large} type="button" - variant={ButtonVariant.Primary} + variant={onboardingSignupButton?.variant ?? ButtonVariant.Primary} > Continue with {provider.label} @@ -160,26 +165,28 @@ export const OnboardingRegistrationForm = ({ label="OR" />
- onExistingEmail?.('')} - className={{ - container: isOnboardingV2 - ? 'mx-auto mt-6 w-full justify-center border-t border-border-subtlest-tertiary pt-6 text-center text-text-secondary typo-callout' - : 'mx-auto mt-6 text-center text-text-secondary typo-callout', - login: '!text-inherit', - }} - /> + {!hideLoginLink && ( + onExistingEmail?.('')} + className={{ + container: isOnboardingV2 + ? 'mx-auto mt-6 w-full justify-center border-t border-border-subtlest-tertiary pt-6 text-center text-text-secondary typo-callout' + : 'mx-auto mt-6 text-center text-text-secondary typo-callout', + login: '!text-inherit', + }} + /> + )}