import { H1, H2, H3, H4, H5, H6 } from '@expo/html-elements'; import { AnimatePresence, AnimatedPressable, AnimatedView, } from '@gluestack-style/animation-resolver'; import { styled, AsForwarder } from '@gluestack-style/react'; import { createActionsheet } from '@gluestack-ui/actionsheet'; import { Pressable, View, Text, ScrollView, VirtualizedList, FlatList, SectionList, } from 'react-native'; const StyledRoot = styled(View, { width: '$full', height: '$full', _web: { pointerEvents: 'none', }, }); const StyledContent = styled( AnimatedView, { alignItems: 'center', borderTopLeftRadius: '$3xl', borderTopRightRadius: '$3xl', h: '$full', p: '$2', bg: '$background0', _sectionHeaderBackground: { bg: '$background0', }, defaultProps: { hardShadow: '5', }, _web: { userSelect: 'none', pointerEvents: 'auto', }, }, { descendantStyle: ['_sectionHeaderBackground'], } ); const StyledItem = styled( Pressable, { 'p': '$3', 'flexDirection': 'row', 'alignItems': 'center', 'rounded': '$sm', 'w': '$full', ':disabled': { opacity: 0.4, _web: { // @ts-ignore pointerEvents: 'all !important', cursor: 'not-allowed', }, }, ':hover': { bg: '$background50', }, ':active': { bg: '$background100', }, ':focus': { bg: '$background100', }, '_web': { ':focusVisible': { bg: '$background100', }, }, }, { descendantStyle: ['_text', '_icon'], } ); const StyledText = styled( Text, { color: '$text700', flex: 1, fontWeight: '$normal', fontFamily: '$body', fontStyle: 'normal', letterSpacing: '$md', variants: { isTruncated: { true: { props: { // @ts-ignore numberOfLines: 1, ellipsizeMode: 'tail', }, }, }, bold: { true: { fontWeight: '$bold', }, }, underline: { true: { textDecorationLine: 'underline', }, }, strikeThrough: { true: { textDecorationLine: 'line-through', }, }, size: { '2xs': { fontSize: '$2xs', }, 'xs': { fontSize: '$xs', }, 'sm': { fontSize: '$sm', }, 'md': { fontSize: '$md', }, 'lg': { fontSize: '$lg', }, 'xl': { fontSize: '$xl', }, '2xl': { fontSize: '$2xl', }, '3xl': { fontSize: '$3xl', }, '4xl': { fontSize: '$4xl', }, '5xl': { fontSize: '$5xl', }, '6xl': { fontSize: '$6xl', }, }, sub: { true: { fontSize: '$xs', }, }, italic: { true: { fontStyle: 'italic', }, }, highlight: { true: { bg: '$yellow500', }, }, }, defaultProps: { size: 'md', }, }, { ancestorStyle: ['_text'], } ); const StyledItemText = styled( StyledText, { fontWeight: '$normal', fontFamily: '$body', fontStyle: 'normal', letterSpacing: '$md', variants: { isTruncated: { true: { props: { // @ts-ignore numberOfLines: 1, ellipsizeMode: 'tail', }, }, }, bold: { true: { fontWeight: '$bold', }, }, underline: { true: { textDecorationLine: 'underline', }, }, strikeThrough: { true: { textDecorationLine: 'line-through', }, }, size: { '2xs': { fontSize: '$2xs', }, 'xs': { fontSize: '$xs', }, 'sm': { fontSize: '$sm', }, 'md': { fontSize: '$md', }, 'lg': { fontSize: '$lg', }, 'xl': { fontSize: '$xl', }, '2xl': { fontSize: '$2xl', }, '3xl': { fontSize: '$3xl', }, '4xl': { fontSize: '$4xl', }, '5xl': { fontSize: '$5xl', }, '6xl': { fontSize: '$6xl', }, }, sub: { true: { fontSize: '$xs', }, }, italic: { true: { fontStyle: 'italic', }, }, highlight: { true: { bg: '$yellow500', }, }, }, defaultProps: { size: 'md', }, mx: '$2', props: { size: 'md', }, color: '$text800', }, { ancestorStyle: ['_text'], } ); const StyledDragIndicator = styled(View, { w: '$16', h: '$1', bg: '$background400', rounded: '$full', }); const StyledDragIndicatorWrapper = styled(View, { py: '$1', w: '$full', alignItems: 'center', }); const StyledBackdrop = styled(AnimatedPressable, { ':initial': { opacity: 0, }, ':animate': { opacity: 0.5, }, ':exit': { opacity: 0, }, 'position': 'absolute', 'left': 0, 'top': 0, 'right': 0, 'bottom': 0, 'bg': '$background950', '_web': { cursor: 'default', pointerEvents: 'auto', }, }); const StyledScrollView = styled(ScrollView, { w: '$full', h: 'auto', }); const StyledVirtualizedList = styled(VirtualizedList, { w: '$full', h: 'auto', }); const StyledFlatList = styled(FlatList, { w: '$full', h: 'auto', }); const StyledSectionList = styled(SectionList, { w: '$full', h: 'auto', }); const StyledSectionHeaderText = styled(H4, { letterSpacing: '$sm', fontWeight: '$bold', fontFamily: '$heading', // Overrides expo-html default styling marginVertical: 0, variants: { isTruncated: { true: { props: { // @ts-ignore numberOfLines: 1, ellipsizeMode: 'tail', }, }, }, bold: { true: { fontWeight: '$bold', }, }, underline: { true: { textDecorationLine: 'underline', }, }, strikeThrough: { true: { textDecorationLine: 'line-through', }, }, size: { '5xl': { //@ts-ignore props: { as: H1 }, fontSize: '$6xl', }, '4xl': { //@ts-ignore props: { as: H1 }, fontSize: '$5xl', }, '3xl': { //@ts-ignore props: { as: H1 }, fontSize: '$4xl', }, '2xl': { //@ts-ignore props: { as: H2 }, fontSize: '$3xl', }, 'xl': { //@ts-ignore props: { as: H3 }, fontSize: '$2xl', }, 'lg': { //@ts-ignore props: { as: H4 }, fontSize: '$xl', }, 'md': { //@ts-ignore props: { as: H5 }, fontSize: '$lg', }, 'sm': { //@ts-ignore props: { as: H6 }, fontSize: '$md', }, 'xs': { //@ts-ignore props: { as: H6 }, fontSize: '$sm', }, }, sub: { true: { fontSize: '$xs', }, }, italic: { true: { fontStyle: 'italic', }, }, highlight: { true: { bg: '$yellow500', }, }, }, color: '$text500', props: { size: 'xs' }, textTransform: 'uppercase', p: '$3', }); const StyledIcon = styled( AsForwarder, { variants: { size: { '2xs': { h: '$3', w: '$3', props: { // @ts-ignore size: 12, }, }, 'xs': { h: '$3.5', w: '$3.5', props: { //@ts-ignore size: 14, }, }, 'sm': { h: '$4', w: '$4', props: { //@ts-ignore size: 16, }, }, 'md': { h: '$4.5', w: '$4.5', props: { //@ts-ignore size: 18, }, }, 'lg': { h: '$5', w: '$5', props: { //@ts-ignore size: 20, }, }, 'xl': { h: '$6', w: '$6', props: { //@ts-ignore size: 24, }, }, }, }, props: { size: 'sm', }, color: '$background500', }, { componentName: 'BaseIcon', resolveProps: ['stroke', 'fill'], } as const, { propertyTokenMap: { stroke: 'colors', fill: 'colors', }, } ); export const Actionsheet = createActionsheet({ Root: StyledRoot, Content: StyledContent, Item: StyledItem, ItemText: StyledItemText, DragIndicator: StyledDragIndicator, IndicatorWrapper: StyledDragIndicatorWrapper, Backdrop: StyledBackdrop, ScrollView: StyledScrollView, VirtualizedList: StyledVirtualizedList, FlatList: StyledFlatList, SectionList: StyledSectionList, SectionHeaderText: StyledSectionHeaderText, Icon: StyledIcon, AnimatePresence: AnimatePresence, }); export const ActionsheetContent = Actionsheet.Content; export const ActionsheetItem = Actionsheet.Item; export const ActionsheetItemText = Actionsheet.ItemText; export const ActionsheetDragIndicator = Actionsheet.DragIndicator; export const ActionsheetDragIndicatorWrapper = Actionsheet.DragIndicatorWrapper; export const ActionsheetBackdrop = Actionsheet.Backdrop; export const ActionsheetScrollView = Actionsheet.ScrollView; export const ActionsheetVirtualizedList = Actionsheet.VirtualizedList; export const ActionsheetFlatList = Actionsheet.FlatList; export const ActionsheetSectionList = Actionsheet.SectionList; export const ActionsheetSectionHeaderText = Actionsheet.SectionHeaderText; export const ActionsheetIcon = Actionsheet.Icon;