From 1d0e0c8b47b93a9900234a8611cd9125345012fc Mon Sep 17 00:00:00 2001 From: Samuel Newman Date: Thu, 17 Jul 2025 19:05:44 +0300 Subject: [PATCH] move ghosttext component to textfield --- src/components/forms/TextField.tsx | 84 ++++++++++++++++++++++++++---- src/screens/Signup/StepHandle.tsx | 65 ++--------------------- 2 files changed, 79 insertions(+), 70 deletions(-) diff --git a/src/components/forms/TextField.tsx b/src/components/forms/TextField.tsx index 9b7ada3199..3913c32831 100644 --- a/src/components/forms/TextField.tsx +++ b/src/components/forms/TextField.tsx @@ -1,4 +1,4 @@ -import React from 'react' +import {createContext, useContext, useMemo, useRef} from 'react' import { type AccessibilityProps, StyleSheet, @@ -16,7 +16,9 @@ import { applyFonts, atoms as a, ios, + platform, type TextStyleProp, + tokens, useAlf, useTheme, web, @@ -25,7 +27,7 @@ import {useInteractionState} from '#/components/hooks/useInteractionState' import {type Props as SVGIconProps} from '#/components/icons/common' import {Text} from '#/components/Typography' -const Context = React.createContext<{ +const Context = createContext<{ inputRef: React.RefObject | null isInvalid: boolean hovered: boolean @@ -48,7 +50,7 @@ const Context = React.createContext<{ export type RootProps = React.PropsWithChildren<{isInvalid?: boolean}> export function Root({children, isInvalid = false}: RootProps) { - const inputRef = React.useRef(null) + const inputRef = useRef(null) const { state: hovered, onIn: onHoverIn, @@ -56,7 +58,7 @@ export function Root({children, isInvalid = false}: RootProps) { } = useInteractionState() const {state: focused, onIn: onFocus, onOut: onBlur} = useInteractionState() - const context = React.useMemo( + const context = useMemo( () => ({ inputRef, hovered, @@ -96,7 +98,7 @@ export function Root({children, isInvalid = false}: RootProps) { export function useSharedInputStyles() { const t = useTheme() - return React.useMemo(() => { + return useMemo(() => { const hover: ViewStyle[] = [ { borderColor: t.palette.contrast_100, @@ -158,7 +160,7 @@ export function createInput(Component: typeof TextInput) { }: InputProps) { const t = useTheme() const {fonts} = useAlf() - const ctx = React.useContext(Context) + const ctx = useContext(Context) const withinRoot = Boolean(ctx.inputRef) const {chromeHover, chromeFocus, chromeError, chromeErrorHover} = @@ -283,8 +285,8 @@ export function LabelText({ export function Icon({icon: Comp}: {icon: React.ComponentType}) { const t = useTheme() - const ctx = React.useContext(Context) - const {hover, focus, errorHover, errorFocus} = React.useMemo(() => { + const ctx = useContext(Context) + const {hover, focus, errorHover, errorFocus} = useMemo(() => { const hover: TextStyle[] = [ { color: t.palette.contrast_800, @@ -342,7 +344,7 @@ export function SuffixText({ } >) { const t = useTheme() - const ctx = React.useContext(Context) + const ctx = useContext(Context) return ( ) } + +export function GhostText({ + children, + value, +}: { + children: string + value: string +}) { + const t = useTheme() + // eslint-disable-next-line bsky-internal/avoid-unwrapped-text + return ( + + + {children} + + {value} + + + + ) +} diff --git a/src/screens/Signup/StepHandle.tsx b/src/screens/Signup/StepHandle.tsx index 066b176a15..c81a05d58d 100644 --- a/src/screens/Signup/StepHandle.tsx +++ b/src/screens/Signup/StepHandle.tsx @@ -22,7 +22,7 @@ import {useHandleAvailabilityQuery} from '#/state/queries/handle-availablility' import {useAgent} from '#/state/session' import {ScreenTransition} from '#/screens/Login/ScreenTransition' import {useSignupContext} from '#/screens/Signup/state' -import {atoms as a, platform, tokens, useTheme, web} from '#/alf' +import {atoms as a, useTheme} from '#/alf' import * as TextField from '#/components/forms/TextField' import {useThrottledValue} from '#/components/hooks/useThrottledValue' import {At_Stroke2_Corner0_Rounded as AtIcon} from '#/components/icons/At' @@ -152,9 +152,10 @@ export function StepHandle() { autoFocus autoComplete="off" /> - {draftValue.length > 0 && ( - {draftValue} + + {draftValue} + )} @@ -297,61 +298,3 @@ function RequirementIcon({ return } } - -function GhostText({children, value}: {children: string; value: string}) { - const t = useTheme() - // eslint-disable-next-line bsky-internal/avoid-unwrapped-text - return ( - - - {children} - - {value} - - - - ) -}