diff options
Diffstat (limited to 'src/components')
-rw-r--r-- | src/components/Toast/Toast.tsx | 62 | ||||
-rw-r--r-- | src/components/Toast/index.e2e.tsx | 6 |
2 files changed, 54 insertions, 14 deletions
diff --git a/src/components/Toast/Toast.tsx b/src/components/Toast/Toast.tsx index ef15c6d97..2d1ea4261 100644 --- a/src/components/Toast/Toast.tsx +++ b/src/components/Toast/Toast.tsx @@ -1,7 +1,7 @@ import {createContext, useContext, useMemo} from 'react' import {View} from 'react-native' -import {atoms as a, select, useTheme} from '#/alf' +import {atoms as a, select, useAlf, useTheme} from '#/alf' import {CircleInfo_Stroke2_Corner0_Rounded as CircleInfo} from '#/components/icons/CircleInfo' import {CircleInfo_Stroke2_Corner0_Rounded as ErrorIcon} from '#/components/icons/CircleInfo' import {Warning_Stroke2_Corner0_Rounded as WarningIcon} from '#/components/icons/Warning' @@ -32,9 +32,19 @@ export function Toast({ type: ToastType content: React.ReactNode }) { + const {fonts} = useAlf() const t = useTheme() const styles = useToastStyles({type}) const Icon = ICONS[type] + /** + * Vibes-based number, adjusts `top` of `View` that wraps the text to + * compensate for different type sizes and keep the first line of text + * aligned with the icon. - esb + */ + const fontScaleCompensation = useMemo( + () => parseInt(fonts.scale) * -1 * 0.65, + [fonts.scale], + ) return ( <Context.Provider value={useMemo(() => ({type}), [type])}> @@ -56,7 +66,13 @@ export function Toast({ ]}> <Icon size="md" fill={styles.iconColor} /> - <View style={[a.flex_1]}> + <View + style={[ + a.flex_1, + { + top: fontScaleCompensation, + }, + ]}> {typeof content === 'string' ? ( <ToastText>{content}</ToastText> ) : ( @@ -92,35 +108,55 @@ function useToastStyles({type}: {type: ToastType}) { return { default: { backgroundColor: t.atoms.bg_contrast_25.backgroundColor, - borderColor: t.atoms.border_contrast_high.borderColor, + borderColor: t.atoms.border_contrast_low.borderColor, iconColor: t.atoms.text.color, textColor: t.atoms.text.color, }, success: { backgroundColor: t.palette.primary_25, - borderColor: t.palette.primary_300, - iconColor: t.palette.primary_600, - textColor: t.palette.primary_600, + borderColor: select(t.name, { + light: t.palette.primary_300, + dim: t.palette.primary_200, + dark: t.palette.primary_100, + }), + iconColor: select(t.name, { + light: t.palette.primary_600, + dim: t.palette.primary_700, + dark: t.palette.primary_700, + }), + textColor: select(t.name, { + light: t.palette.primary_600, + dim: t.palette.primary_700, + dark: t.palette.primary_700, + }), }, error: { backgroundColor: t.palette.negative_25, borderColor: select(t.name, { - light: t.palette.negative_300, - dim: t.palette.negative_300, - dark: t.palette.negative_300, + light: t.palette.negative_200, + dim: t.palette.negative_200, + dark: t.palette.negative_100, + }), + iconColor: select(t.name, { + light: t.palette.negative_700, + dim: t.palette.negative_900, + dark: t.palette.negative_900, + }), + textColor: select(t.name, { + light: t.palette.negative_700, + dim: t.palette.negative_900, + dark: t.palette.negative_900, }), - iconColor: t.palette.negative_600, - textColor: t.palette.negative_600, }, warning: { backgroundColor: t.atoms.bg_contrast_25.backgroundColor, - borderColor: t.atoms.border_contrast_high.borderColor, + borderColor: t.atoms.border_contrast_low.borderColor, iconColor: t.atoms.text.color, textColor: t.atoms.text.color, }, info: { backgroundColor: t.atoms.bg_contrast_25.backgroundColor, - borderColor: t.atoms.border_contrast_high.borderColor, + borderColor: t.atoms.border_contrast_low.borderColor, iconColor: t.atoms.text.color, textColor: t.atoms.text.color, }, diff --git a/src/components/Toast/index.e2e.tsx b/src/components/Toast/index.e2e.tsx index 57daf5bf0..64072d88d 100644 --- a/src/components/Toast/index.e2e.tsx +++ b/src/components/Toast/index.e2e.tsx @@ -1,5 +1,9 @@ +import {type ToastApi} from '#/components/Toast/types' + export function ToastContainer() { return null } -export function show() {} +export const toast: ToastApi = { + show() {}, +} |