import { View, StyleSheet, TouchableOpacity } from 'react-native';
import type { ThemeType } from '../../literals/Type.literal';
import { useTheme } from './../../hooks/useTheme';
import ZenText from './ZenText';
import LayoutConfig from '../../config/LayoutConfig';
import ZenIcon from './ZenIcon';
const chipType = 's1';
const iconSize = LayoutConfig.space * 1.5;
type ZenChipsProps = {
text?: string;
type?: ThemeType | 'default';
rounded?: boolean;
ghost?: boolean;
onPress?: Function;
style?: object;
leftIcon?: string;
rightIcon?: string;
};
/**
* @docunator
* @title ZenChips
* @description A simple chip component to display a small piece of information.
* @category Themed Components
* @version 1.0.0
* @param {string} type - The theme type to use. Default is 'default'.
* @param {string} text - The text to display inside the chip. Default is 'Chip'.
* @param {boolean} rounded - Whether the chip should have rounded corners. Default is true.
* @param {boolean} ghost - Whether the chip should have a ghost style (transparent background). Default is false.
* @param {Function} onPress - Function to execute when the chip is pressed.
* @param {StyleSheet} style - Additional styles to apply to the chip container.
* @param {string} leftIcon - Name of the left icon to display inside the chip.
* @param {string} rightIcon - Name of the right icon to display inside the chip.
*
* @see ZenText
* @see ZenIcon
* @see ZenButton
* @example {tsx}
import {
Layout,
Screen,
ZenIcon,
ZenListItem,
ZenSpaceBlock,
ZenChips,
} from 'react-zen-ui';
import { useState } from 'react';
export default function ListScreen() {
const [currentTime] = useState(new Date().toLocaleTimeString());
const [currentDate] = useState(new Date().toLocaleDateString());
return (
<>
>
);
}
const styles = StyleSheet.create({
chipsContainer: {
display: 'flex',
flexDirection: 'row',
gap: 10,
flexWrap: 'wrap',
justifyContent: 'space-between',
alignItems: 'center',
marginBottom: 20,
},
});
{/tsx}
*/
export default function ZenChip({
text = 'Chip',
type = 'default',
rounded = true,
ghost = false,
onPress,
style = {},
leftIcon,
rightIcon,
}: ZenChipsProps) {
const theme = useTheme();
if (type !== 'default' && theme[type] === undefined) {
throw new Error(
'ZenChips: theme.type is undefined. Please make sure you are using a valid theme.'
);
}
const styles = StyleSheet.create({
container: {
backgroundColor: ghost
? 'transparent'
: (theme[type] ?? theme.backgroundSecondary),
borderWidth: 1,
borderColor: theme[type] ?? theme.text,
paddingHorizontal: LayoutConfig.space,
paddingVertical: LayoutConfig.space / 4,
minWidth: LayoutConfig.space * LayoutConfig.chipsMinimalFactor,
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
gap: LayoutConfig.space / 2,
borderRadius: rounded ? LayoutConfig.border : 0,
flexDirection: 'row',
},
});
if (onPress !== undefined) {
return ( // @ts-ignore
{ leftIcon && (
)}
{text}
{ rightIcon && (
)}
);
}
return (
{ leftIcon && (
)}
{text}
{ rightIcon && (
)}
);
}