import React, {useState} from 'react' import {ScrollView, View} from 'react-native' import {useSafeAreaInsets} from 'react-native-safe-area-context' import {msg} from '@lingui/macro' import {useLingui} from '@lingui/react' import {isWeb} from '#/platform/detection' import {useOnboardingDispatch} from '#/state/shell' import {Context} from '#/screens/Onboarding/state' import { atoms as a, flatten, native, type TextStyleProp, tokens, useBreakpoints, useTheme, web, } from '#/alf' import {leading} from '#/alf/typography' import {Button, ButtonIcon, ButtonText} from '#/components/Button' import {ArrowLeft_Stroke2_Corner0_Rounded as ArrowLeft} from '#/components/icons/Arrow' import {HEADER_SLOT_SIZE} from '#/components/Layout' import {createPortalGroup} from '#/components/Portal' import {P, Text} from '#/components/Typography' const ONBOARDING_COL_WIDTH = 420 export const OnboardingControls = createPortalGroup() export const OnboardingHeaderSlot = createPortalGroup() export function Layout({children}: React.PropsWithChildren<{}>) { const {_} = useLingui() const t = useTheme() const insets = useSafeAreaInsets() const {gtMobile} = useBreakpoints() const onboardDispatch = useOnboardingDispatch() const {state, dispatch} = React.useContext(Context) const scrollview = React.useRef(null) const prevActiveStep = React.useRef(state.activeStep) React.useEffect(() => { if (state.activeStep !== prevActiveStep.current) { prevActiveStep.current = state.activeStep scrollview.current?.scrollTo({y: 0, animated: false}) } }, [state]) const paddingTop = gtMobile ? a.py_5xl : a.py_lg const dialogLabel = _(msg`Set up your account`) const [footerHeight, setFooterHeight] = useState(0) return ( {__DEV__ && ( )} {!gtMobile && ( {state.hasPrev ? ( ) : ( )} )} {Array(state.totalSteps) .fill(0) .map((__, i) => ( ))} {children} setFooterHeight(evt.nativeEvent.layout.height)} style={[ isWeb ? a.fixed : a.absolute, {bottom: 0, left: 0, right: 0}, t.atoms.bg, t.atoms.border_contrast_low, a.border_t, a.align_center, gtMobile ? a.px_5xl : a.px_xl, isWeb ? a.py_2xl : { paddingTop: tokens.space.md, paddingBottom: insets.bottom + tokens.space.md, }, ]}> {gtMobile && (state.hasPrev ? ( ) : ( ))} ) } export function TitleText({ children, style, }: React.PropsWithChildren) { return ( {children} ) } export function DescriptionText({ children, style, }: React.PropsWithChildren) { const t = useTheme() return (

{children}

) }