155058f92SEvan Baconimport { ClassAttributes, ComponentProps, ComponentType } from 'react';
268675f3eSEvan Baconimport {
3641d0767SEvan Bacon  AccessibilityRole,
468675f3eSEvan Bacon  StyleProp,
568675f3eSEvan Bacon  View as NativeView,
668675f3eSEvan Bacon  ViewStyle as NativeViewStyle,
768675f3eSEvan Bacon} from 'react-native';
855058f92SEvan Bacon
9641d0767SEvan Baconimport { createDevView } from './createDevView';
10*8a424bebSJames Ideimport { createSafeStyledView } from '../css/createSafeStyledView';
11641d0767SEvan Bacon
1255058f92SEvan Bacon// https://github.com/necolas/react-native-web/issues/832
1355058f92SEvan Bacon
1455058f92SEvan Bacontype NativeViewProps = ComponentProps<typeof NativeView> & ClassAttributes<typeof NativeView>;
1555058f92SEvan Bacon
1655058f92SEvan Bacon/**
1755058f92SEvan Bacon * https://baconbrix.gitbook.io/react-native-web/primitives/view
1855058f92SEvan Bacon */
1955058f92SEvan Baconexport interface WebViewStyle {
2055058f92SEvan Bacon  /** @platform web */
2155058f92SEvan Bacon  backdropFilter?: string;
2255058f92SEvan Bacon  /** @platform web */
2355058f92SEvan Bacon  animationDelay?: string;
2455058f92SEvan Bacon  /** @platform web */
2555058f92SEvan Bacon  animationDirection?: string;
2655058f92SEvan Bacon  /** @platform web */
2755058f92SEvan Bacon  animationDuration?: string;
2855058f92SEvan Bacon  /** @platform web */
2955058f92SEvan Bacon  animationFillMode?: string;
3055058f92SEvan Bacon  /** @platform web */
3155058f92SEvan Bacon  animationName?: string | any[];
3255058f92SEvan Bacon  /** @platform web */
3355058f92SEvan Bacon  animationIterationCount?: number | 'infinite';
3455058f92SEvan Bacon  /** @platform web */
3555058f92SEvan Bacon  animationPlayState?: string;
3655058f92SEvan Bacon  /** @platform web */
3755058f92SEvan Bacon  animationTimingFunction?: string;
3855058f92SEvan Bacon  /** @platform web */
3955058f92SEvan Bacon  backgroundAttachment?: string;
4055058f92SEvan Bacon  /** @platform web */
4155058f92SEvan Bacon  backgroundBlendMode?: string;
4255058f92SEvan Bacon  /** @platform web */
4355058f92SEvan Bacon  backgroundClip?: string;
4455058f92SEvan Bacon  /** @platform web */
4555058f92SEvan Bacon  backgroundImage?: string;
4655058f92SEvan Bacon  /** @platform web */
4755058f92SEvan Bacon  backgroundOrigin?: 'border-box' | 'content-box' | 'padding-box';
4855058f92SEvan Bacon  /** @platform web */
4955058f92SEvan Bacon  backgroundPosition?: string;
5055058f92SEvan Bacon  /** @platform web */
5155058f92SEvan Bacon  backgroundRepeat?: string;
5255058f92SEvan Bacon  /** @platform web */
5355058f92SEvan Bacon  backgroundSize?: string;
5455058f92SEvan Bacon  /** @platform web */
5555058f92SEvan Bacon  boxShadow?: string;
5655058f92SEvan Bacon  /** @platform web */
5755058f92SEvan Bacon  boxSizing?: string;
5855058f92SEvan Bacon  /** @platform web */
5955058f92SEvan Bacon  clip?: string;
6055058f92SEvan Bacon  /** @platform web */
6155058f92SEvan Bacon  cursor?: string;
6255058f92SEvan Bacon  /** @platform web */
6355058f92SEvan Bacon  filter?: string;
6455058f92SEvan Bacon  /** @platform web */
6555058f92SEvan Bacon  gridAutoColumns?: string;
6655058f92SEvan Bacon  /** @platform web */
6755058f92SEvan Bacon  gridAutoFlow?: string;
6855058f92SEvan Bacon  /** @platform web */
6955058f92SEvan Bacon  gridAutoRows?: string;
7055058f92SEvan Bacon  /** @platform web */
7155058f92SEvan Bacon  gridColumnEnd?: string;
7255058f92SEvan Bacon  /** @platform web */
7355058f92SEvan Bacon  gridColumnGap?: string;
7455058f92SEvan Bacon  /** @platform web */
7555058f92SEvan Bacon  gridColumnStart?: string;
7655058f92SEvan Bacon  /** @platform web */
7755058f92SEvan Bacon  gridRowEnd?: string;
7855058f92SEvan Bacon  /** @platform web */
7955058f92SEvan Bacon  gridRowGap?: string;
8055058f92SEvan Bacon  /** @platform web */
8155058f92SEvan Bacon  gridRowStart?: string;
8255058f92SEvan Bacon  /** @platform web */
8355058f92SEvan Bacon  gridTemplateColumns?: string;
8455058f92SEvan Bacon  /** @platform web */
8555058f92SEvan Bacon  gridTemplateRows?: string;
8655058f92SEvan Bacon  /** @platform web */
8755058f92SEvan Bacon  gridTemplateAreas?: string;
8855058f92SEvan Bacon  /** @platform web */
8955058f92SEvan Bacon  outline?: string;
9055058f92SEvan Bacon  /** @platform web */
9155058f92SEvan Bacon  outlineColor?: string;
9255058f92SEvan Bacon  /** @platform web */
9355058f92SEvan Bacon  overflowX?: string;
9455058f92SEvan Bacon  /** @platform web */
9555058f92SEvan Bacon  overflowY?: string;
9655058f92SEvan Bacon  /** @platform web */
9755058f92SEvan Bacon  overscrollBehavior?: 'auto' | 'contain' | 'none';
9855058f92SEvan Bacon  /** @platform web */
9955058f92SEvan Bacon  overscrollBehaviorX?: 'auto' | 'contain' | 'none';
10055058f92SEvan Bacon  /** @platform web */
10155058f92SEvan Bacon  overscrollBehaviorY?: 'auto' | 'contain' | 'none';
10255058f92SEvan Bacon  /** @platform web */
10355058f92SEvan Bacon  perspective?: string;
10455058f92SEvan Bacon  /** @platform web */
10555058f92SEvan Bacon  perspectiveOrigin?: string;
10655058f92SEvan Bacon  /** @platform web */
10755058f92SEvan Bacon  touchAction?: string;
10855058f92SEvan Bacon  /** @platform web */
10955058f92SEvan Bacon  transformOrigin?: string;
11055058f92SEvan Bacon  /** @platform web */
11155058f92SEvan Bacon  transitionDelay?: string;
11255058f92SEvan Bacon  /** @platform web */
11355058f92SEvan Bacon  transitionDuration?: string;
11455058f92SEvan Bacon  /** @platform web */
11555058f92SEvan Bacon  transitionProperty?: string;
11655058f92SEvan Bacon  /** @platform web */
11755058f92SEvan Bacon  transitionTimingFunction?: string;
11855058f92SEvan Bacon  /** @platform web */
11955058f92SEvan Bacon  userSelect?: string;
12055058f92SEvan Bacon  /** @platform web */
12155058f92SEvan Bacon  visibility?: string;
12255058f92SEvan Bacon  /** @platform web */
12355058f92SEvan Bacon  willChange?: string;
124641d0767SEvan Bacon  /** @platform web */
125641d0767SEvan Bacon  position?: 'static' | 'relative' | 'absolute' | 'fixed' | 'sticky';
12655058f92SEvan Bacon}
12755058f92SEvan Bacon
128a3634a2bSEvan Baconexport type ViewStyle = Omit<NativeViewStyle, 'position'> & WebViewStyle;
12955058f92SEvan Bacon
13055058f92SEvan Baconexport type WebViewProps = {
13155058f92SEvan Bacon  style?: StyleProp<ViewStyle>;
13255058f92SEvan Bacon
13368675f3eSEvan Bacon  accessibilityRole?:
134a8465056SEvan Bacon    | 'list'
135a8465056SEvan Bacon    | 'listitem'
13668675f3eSEvan Bacon    | 'complementary'
13768675f3eSEvan Bacon    | 'contentinfo'
13868675f3eSEvan Bacon    | 'region'
13968675f3eSEvan Bacon    | 'navigation'
14068675f3eSEvan Bacon    | 'main'
14168675f3eSEvan Bacon    | 'article'
14268675f3eSEvan Bacon    | 'banner'
14368675f3eSEvan Bacon    | AccessibilityRole;
14455058f92SEvan Bacon};
14555058f92SEvan Bacon
14655058f92SEvan Baconexport type ViewProps = WebViewProps & Omit<NativeViewProps, 'style' | 'accessibilityRole'>;
14755058f92SEvan Bacon
148641d0767SEvan Baconlet View = NativeView as ComponentType<ViewProps>;
14955058f92SEvan Bacon
150641d0767SEvan Baconif (process.env.NODE_ENV !== 'production') {
151641d0767SEvan Bacon  // Add better errors and warnings in development builds.
152641d0767SEvan Bacon  View = createDevView(NativeView) as ComponentType<ViewProps>;
153641d0767SEvan Bacon}
154641d0767SEvan Bacon
155641d0767SEvan Baconexport default createSafeStyledView(View) as ComponentType<ViewProps>;
156