'use client'; import { H4 } from '@expo/html-elements'; import { createActionsheet } from '@gluestack-ui/actionsheet'; import { Pressable, View, Text, ScrollView, VirtualizedList, FlatList, SectionList, ViewStyle, } from 'react-native'; import { PrimitiveIcon, UIIcon } from '@gluestack-ui/icon'; import { tva } from '@gluestack-ui/nativewind-utils/tva'; import type { VariantProps } from '@gluestack-ui/nativewind-utils'; import { withStyleContext } from '@gluestack-ui/nativewind-utils/withStyleContext'; import { cssInterop } from 'nativewind'; import { Motion, AnimatePresence, createMotionAnimatedComponent, MotionComponentProps, } from '@legendapp/motion'; import React from 'react'; type IAnimatedPressableProps = React.ComponentProps & MotionComponentProps; const AnimatedPressable = createMotionAnimatedComponent( Pressable ) as React.ComponentType; type IMotionViewProps = React.ComponentProps & MotionComponentProps; const MotionView = Motion.View as React.ComponentType; export const UIActionsheet = createActionsheet({ Root: View, Content: withStyleContext(MotionView), Item: withStyleContext(Pressable), ItemText: Text, DragIndicator: View, IndicatorWrapper: View, Backdrop: AnimatedPressable, ScrollView: ScrollView, VirtualizedList: VirtualizedList, FlatList: FlatList, SectionList: SectionList, SectionHeaderText: H4, Icon: UIIcon, AnimatePresence: AnimatePresence, }); cssInterop(UIActionsheet, { className: 'style' }); cssInterop(UIActionsheet.Content, { className: 'style' }); cssInterop(UIActionsheet.Item, { className: 'style' }); cssInterop(UIActionsheet.ItemText, { className: 'style' }); cssInterop(UIActionsheet.DragIndicator, { className: 'style' }); cssInterop(UIActionsheet.DragIndicatorWrapper, { className: 'style' }); cssInterop(UIActionsheet.Backdrop, { className: 'style' }); cssInterop(UIActionsheet.ScrollView, { className: 'style', contentContainerClassName: 'contentContainerStyle', indicatorClassName: 'indicatorStyle', }); cssInterop(UIActionsheet.VirtualizedList, { className: 'style', ListFooterComponentClassName: 'ListFooterComponentStyle', ListHeaderComponentClassName: 'ListHeaderComponentStyle', contentContainerClassName: 'contentContainerStyle', indicatorClassName: 'indicatorStyle', }); cssInterop(UIActionsheet.FlatList, { className: 'style', ListFooterComponentClassName: 'ListFooterComponentStyle', ListHeaderComponentClassName: 'ListHeaderComponentStyle', columnWrapperClassName: 'columnWrapperStyle', contentContainerClassName: 'contentContainerStyle', indicatorClassName: 'indicatorStyle', }); cssInterop(UIActionsheet.SectionList, { className: 'style' }); cssInterop(UIActionsheet.SectionHeaderText, { className: 'style' }); cssInterop(PrimitiveIcon, { className: { target: 'style', nativeStyleToProp: { height: true, width: true, fill: true, color: 'classNameColor', stroke: true, }, }, }); const actionsheetStyle = tva({ base: 'w-full h-full web:pointer-events-none' }); const actionsheetContentStyle = tva({ base: 'items-center rounded-tl-3xl rounded-tr-3xl p-2 bg-background-0 web:pointer-events-auto web:select-none shadow-lg', }); const actionsheetItemStyle = tva({ base: 'w-full flex-row items-center p-3 rounded-sm data-[disabled=true]:opacity-40 data-[disabled=true]:web:pointer-events-auto data-[disabled=true]:web:cursor-not-allowed hover:bg-background-50 active:bg-background-100 data-[focus=true]:bg-background-100 web:data-[focus-visible=true]:bg-background-100 data-[checked=true]:bg-background-100', }); const actionsheetItemTextStyle = tva({ base: 'text-typography-700 font-normal font-body tracking-md text-left mx-2', variants: { isTruncated: { true: '', }, bold: { true: 'font-bold', }, underline: { true: 'underline', }, strikeThrough: { true: 'line-through', }, size: { '2xs': 'text-2xs', 'xs': 'text-xs', 'sm': 'text-sm', 'md': 'text-base', 'lg': 'text-lg', 'xl': 'text-xl', '2xl': 'text-2xl', '3xl': 'text-3xl', '4xl': 'text-4xl', '5xl': 'text-5xl', '6xl': 'text-6xl', }, }, defaultVariants: { size: 'md', }, }); const actionsheetDragIndicatorStyle = tva({ base: 'w-16 h-1 bg-background-400 rounded-full', }); const actionsheetDragIndicatorWrapperStyle = tva({ base: 'w-full py-1 items-center', }); const actionsheetBackdropStyle = tva({ base: 'absolute left-0 top-0 right-0 bottom-0 bg-background-dark web:cursor-default web:pointer-events-auto', }); const actionsheetScrollViewStyle = tva({ base: 'w-full h-auto', }); const actionsheetVirtualizedListStyle = tva({ base: 'w-full h-auto', }); const actionsheetFlatListStyle = tva({ base: 'w-full h-auto', }); const actionsheetSectionListStyle = tva({ base: 'w-full h-auto', }); const actionsheetSectionHeaderTextStyle = tva({ base: 'leading-5 font-bold font-heading my-0 text-typography-500 p-3 uppercase', variants: { isTruncated: { true: '', }, bold: { true: 'font-bold', }, underline: { true: 'underline', }, strikeThrough: { true: 'line-through', }, size: { '5xl': 'text-5xl', '4xl': 'text-4xl', '3xl': 'text-3xl', '2xl': 'text-2xl', 'xl': 'text-xl', 'lg': 'text-lg', 'md': 'text-base', 'sm': 'text-sm', 'xs': 'text-xs', }, sub: { true: 'text-xs', }, italic: { true: 'italic', }, highlight: { true: 'bg-yellow500', }, }, defaultVariants: { size: 'xs', }, }); const actionsheetIconStyle = tva({ base: 'text-typography-900', variants: { size: { '2xs': 'h-3 w-3', 'xs': 'h-3.5 w-3.5', 'sm': 'h-4 w-4', 'md': 'w-4 h-4', 'lg': 'h-5 w-5', 'xl': 'h-6 w-6', }, }, }); type IActionsheetProps = VariantProps & React.ComponentProps & { className?: string }; type IActionsheetContentProps = VariantProps & React.ComponentProps & { className?: string }; type IActionsheetItemProps = VariantProps & React.ComponentProps & { className?: string }; type IActionsheetItemTextProps = VariantProps & React.ComponentProps & { className?: string }; type IActionsheetDragIndicatorProps = VariantProps< typeof actionsheetDragIndicatorStyle > & React.ComponentProps & { className?: string; }; type IActionsheetDragIndicatorWrapperProps = VariantProps< typeof actionsheetDragIndicatorWrapperStyle > & React.ComponentProps & { className?: string; }; type IActionsheetBackdropProps = VariantProps & React.ComponentProps & { className?: string; }; type IActionsheetScrollViewProps = VariantProps< typeof actionsheetScrollViewStyle > & React.ComponentProps & { className?: string; }; type IActionsheetVirtualizedListProps = VariantProps< typeof actionsheetVirtualizedListStyle > & React.ComponentProps & { className?: string; }; type IActionsheetFlatListProps = VariantProps & React.ComponentProps & { className?: string; }; type IActionsheetSectionListProps = VariantProps< typeof actionsheetSectionListStyle > & React.ComponentProps & { className?: string; }; type IActionsheetSectionHeaderTextProps = VariantProps< typeof actionsheetSectionHeaderTextStyle > & React.ComponentProps & { className?: string; }; type IActionsheetIconProps = VariantProps & React.ComponentProps & { className?: string; as?: React.ElementType; }; const Actionsheet = React.forwardRef< React.ComponentRef, IActionsheetProps >(function Actionsheet({ className, ...props }, ref) { return ( ); }); const ActionsheetContent = React.forwardRef< React.ComponentRef, IActionsheetContentProps & { className?: string } >(function ActionsheetContent({ className, ...props }, ref) { return ( ); }); const ActionsheetItem = React.forwardRef< React.ComponentRef, IActionsheetItemProps >(function ActionsheetItem({ className, ...props }, ref) { return ( ); }); const ActionsheetItemText = React.forwardRef< React.ComponentRef, IActionsheetItemTextProps >(function ActionsheetItemText( { className, isTruncated, bold, underline, strikeThrough, size, ...props }, ref ) { return ( ); }); const ActionsheetDragIndicator = React.forwardRef< React.ComponentRef, IActionsheetDragIndicatorProps >(function ActionsheetDragIndicator({ className, ...props }, ref) { return ( ); }); const ActionsheetDragIndicatorWrapper = React.forwardRef< React.ComponentRef, IActionsheetDragIndicatorWrapperProps >(function ActionsheetDragIndicatorWrapper({ className, ...props }, ref) { return ( ); }); const ActionsheetBackdrop = React.forwardRef< React.ComponentRef, IActionsheetBackdropProps >(function ActionsheetBackdrop({ className, ...props }, ref) { return ( ); }); const ActionsheetScrollView = React.forwardRef< React.ComponentRef, IActionsheetScrollViewProps >(function ActionsheetScrollView({ className, ...props }, ref) { return ( ); }); const ActionsheetVirtualizedList = React.forwardRef< React.ComponentRef, IActionsheetVirtualizedListProps >(function ActionsheetVirtualizedList({ className, ...props }, ref) { return ( ); }); const ActionsheetFlatList = React.forwardRef< React.ComponentRef, IActionsheetFlatListProps >(function ActionsheetFlatList({ className, ...props }, ref) { return ( ); }); const ActionsheetSectionList = React.forwardRef< React.ComponentRef, IActionsheetSectionListProps >(function ActionsheetSectionList({ className, ...props }, ref) { return ( ); }); const ActionsheetSectionHeaderText = React.forwardRef< React.ComponentRef, IActionsheetSectionHeaderTextProps >(function ActionsheetSectionHeaderText( { className, isTruncated, bold, underline, strikeThrough, size, sub, italic, highlight, ...props }, ref ) { return ( ); }); const ActionsheetIcon = React.forwardRef< React.ComponentRef, IActionsheetIconProps >(function ActionsheetIcon( { className, as: AsComp, size = 'sm', ...props }, ref ) { if (AsComp) { return ( ); } return ( ); }); export { Actionsheet, ActionsheetContent, ActionsheetItem, ActionsheetItemText, ActionsheetDragIndicator, ActionsheetDragIndicatorWrapper, ActionsheetBackdrop, ActionsheetScrollView, ActionsheetVirtualizedList, ActionsheetFlatList, ActionsheetSectionList, ActionsheetSectionHeaderText, ActionsheetIcon, };