native-base
Version:
Essential cross-platform UI components for React Native
157 lines (148 loc) • 3.35 kB
JavaScript
import { mode } from '../tools';
import { Platform } from 'react-native';
function getSelectionColor(props) {
if (Platform.OS === 'ios') {
return mode('coolGray.800', 'warmGray.50')(props);
} else if (Platform.OS === 'android') {
return mode('coolGray.800', 'warmGray.50')(props);
}
}
const baseStyle = props => {
// const { primary } = props.theme.colors;
// Todo: Resolve boxShadow Color or Provide some alternatiove prop for user to change focusRing color
// // Todo: Update to support similar focusRing on iOS , Android and Web
// const focusRing =
// Platform.OS === 'web'
// ? {
// boxShadow:
// props.variant !== 'underlined'
// ? `${primary[400]} 0px 0px 0px 1px`
// : `${primary[400]} 0px 1px 0px 0px`,
// zIndex: 1,
// }
// : {
// // boxShadow: `${useToken('colors', ['primary.400'])} 0px 0px 0px 1px`,
// };
return {
selectionColor: getSelectionColor(props),
fontFamily: 'body',
p: '2',
borderRadius: 'sm',
overflow: 'hidden',
color: mode('coolGray.800', 'warmGray.50')(props),
placeholderTextColor: 'muted.400',
borderColor: mode('muted.200', 'gray.500')(props),
_disabled: {
opacity: '80',
bg: mode('muted.100', 'muted.700')(props),
_web: {
disabled: true,
cursor: 'not-allowed'
}
},
_invalid: {
borderColor: mode('danger.600', 'danger.300')(props)
},
_focus: {
borderColor: mode('primary.400', 'primary.500')(props)
},
_web: {
outlineWidth: '0',
overflow: 'auto',
lineHeight: 'lg',
// Todo: Move to _web inside size so that sm and xs don't have this much height
outline: 'none',
cursor: 'auto'
},
_stack: {
flexDirection: 'row',
alignItems: 'center',
// justifyContent: 'space-between',
overflow: 'hidden'
},
_input: {
bg: 'transparent',
flex: 1
}
};
};
function roundedStyle(props) {
return {
borderRadius: '25',
borderWidth: '1',
_hover: {
bg: mode('gray.100', 'gray.700')(props)
}
};
}
function outlineStyle(props) {
return {
borderWidth: '1',
_hover: {
bg: mode('gray.100', 'gray.700')(props)
}
};
}
function filledStyle(props) {
return {
bg: props.bg || mode('muted.200', 'muted.600')(props),
borderWidth: '1',
borderColor: 'transparent',
_hover: {
bg: mode('muted.300', 'muted.700')(props)
}
};
}
function unstyledStyle() {
return {
borderWidth: '0'
};
}
function underlinedStyle() {
return {
borderRadius: '0',
borderTopWidth: '0',
borderLeftWidth: '0',
borderRightWidth: '0',
borderBottomWidth: '1'
};
}
const variants = {
outline: outlineStyle,
underlined: underlinedStyle,
rounded: roundedStyle,
filled: filledStyle,
unstyled: unstyledStyle
};
const sizes = {
'2xl': {
fontSize: 'xl'
},
'xl': {
fontSize: 'lg'
},
'lg': {
fontSize: 'md'
},
'md': {
fontSize: 'sm'
},
'sm': {
fontSize: 'xs'
},
'xs': {
fontSize: '2xs'
}
};
const defaultProps = {
size: 'sm',
variant: 'outline'
}; // Input
export const Input = {
baseStyle,
defaultProps,
variants,
sizes
};
export default {};
//# sourceMappingURL=input.js.map