import {View, StyleSheet, Image } from 'react-native';
import ZenText from './../themed/ZenText';
import ZenIconButton from './../themed/ZenIconButton';
import type { ThemeType } from '../../literals/Type.literal';
import { useTheme } from '../../hooks/useTheme';
import LayoutConfig from '../../config/LayoutConfig';
import ColorUtil from '../../util/Color.util';
import ThemeConfig from '../../config/Theme.config';
type ZenSpotlightProps = {
title?: string;
titleBackground?: boolean;
titleType?: keyof typeof ThemeConfig.text,
imageSource: any;
footerText?: string;
iconName?: string;
type?: ThemeType
bordered?: boolean;
borderRounded?: boolean;
style?: any;
onPress?: () => void;
}
/**
* @docunator
* @title ZenSpotlight
* @description A spotlight component that displays an image with an optional footer and an icon button.
* @author Danilo RamÃrez Mattey
* @version 1.0.0
* @category Widget Components
* @group Widgets
* @param {string} title - Optional title to be displayed on top of the image.
* @param {boolean} titleBackground - Whether the title should have a background for better visibility. Default is false.
* @param {string} titleType - The text type for the title. Default is 'h3'.
* @param {ImageSource} imageSource - The source of the image to be displayed.
* @param {string} footerText - Optional text to be displayed in the footer.
* @param {string} iconName - The name of the icon to be displayed in the button. Default is 'arrow-right-circle'.
* @param {string} type - The theme type for the component. Default is 'primary'.
* @param {boolean} bordered - Whether the image should have a border. Default is false.
* @param {boolean} borderRounded - Whether the border should be rounded. Default is false.
* @param {Object} style - Additional styles for the container.
* @param {Function} onPress - Function to be called when the icon button is pressed.
* @example {tsx}
import { Layout, Screen, ZenSpaceBlock, ZenSpotlight } from 'react-zen-ui';
import {View} from 'react-native';
export default function SpotlightScreen() {
return (
<>
>
);
}
{/tsx}
@see ZenText
@see ZenIconButton
*/
export default function ZenSpotlight(
{
title,
titleType = 'h3',
titleBackground = false,
imageSource,
footerText,
iconName = 'arrow-right-circle',
type = 'primary',
bordered= false,
borderRounded = false,
style = {},
onPress = () => {}
} : ZenSpotlightProps
){
const theme = useTheme();
if(!theme[type]){
throw new Error('ZenSpotlight: Invalid type provided');
}
const styles = StyleSheet.create({
container: {
display: 'flex',
position: 'relative',
marginBottom: LayoutConfig.space * 2
},
footer:{
flexDirection: 'row',
justifyContent: 'space-between',
},
image:{
flex: 1,
// width: '100%',
// height: 'auto',
aspectRatio: 1,
borderWidth: (bordered ? 1 : 0),
borderColor: theme[type],
borderStyle: 'solid',
borderRadius: (borderRounded ? LayoutConfig.border : 0),
},
icon:{
position: 'absolute',
right: 0,
transform: 'translate(0%, -50%)',
},
title:{
position: 'absolute',
top: LayoutConfig.space,
left: LayoutConfig.space,
zIndex: 1,
backgroundColor: (titleBackground ? ColorUtil.hexToRgb(theme.background, 0.4) : 'transparent'),
}
});
return (
{ title && ({title}) }
{ footerText && ({footerText}) }
);
}