From d320fc730893aa66609dc3fc6ce19557fb62fe55 Mon Sep 17 00:00:00 2001 From: Maciej Lodygowski Date: Mon, 15 Jun 2026 13:46:13 +0200 Subject: [PATCH 1/7] feat: add SplitButton component --- docs/src/data/themeColors.ts | 26 + example/src/ExampleList.tsx | 2 + example/src/Examples/SplitButtonExample.tsx | 127 ++++ src/components/SplitButton/SplitButton.tsx | 671 ++++++++++++++++++ src/components/SplitButton/index.ts | 2 + src/components/SplitButton/tokens.ts | 108 +++ src/components/SplitButton/utils.ts | 242 +++++++ src/components/__tests__/SplitButton.test.tsx | 241 +++++++ src/index.tsx | 2 + 9 files changed, 1421 insertions(+) create mode 100644 example/src/Examples/SplitButtonExample.tsx create mode 100644 src/components/SplitButton/SplitButton.tsx create mode 100644 src/components/SplitButton/index.ts create mode 100644 src/components/SplitButton/tokens.ts create mode 100644 src/components/SplitButton/utils.ts create mode 100644 src/components/__tests__/SplitButton.test.tsx diff --git a/docs/src/data/themeColors.ts b/docs/src/data/themeColors.ts index 20f16962f7..8a63a757c4 100644 --- a/docs/src/data/themeColors.ts +++ b/docs/src/data/themeColors.ts @@ -307,6 +307,32 @@ export const themeColors = { iconColor: 'theme.colors.inverseOnSurface', }, }, + SplitButton: { + active: { + filled: { + backgroundColor: 'theme.colors.primary', + textColor: 'theme.colors.onPrimary', + }, + tonal: { + backgroundColor: 'theme.colors.secondaryContainer', + textColor: 'theme.colors.onSecondaryContainer', + }, + elevated: { + backgroundColor: 'theme.colors.surfaceContainerLow', + textColor: 'theme.colors.primary', + }, + outlined: { + textColor: 'theme.colors.onSurfaceVariant', + borderColor: 'theme.colors.outline', + }, + }, + disabled: { + '-': { + backgroundColor: 'theme.colors.onSurface', + textColor: 'theme.colors.onSurface', + }, + }, + }, Surface: { flat: { backgroundColor: 'theme.colors.elevation[elevation]', diff --git a/example/src/ExampleList.tsx b/example/src/ExampleList.tsx index 53132e299f..be30169b1c 100644 --- a/example/src/ExampleList.tsx +++ b/example/src/ExampleList.tsx @@ -36,6 +36,7 @@ import SegmentedButtonMultiselectRealCase from './Examples/SegmentedButtons/Segm import SegmentedButtonRealCase from './Examples/SegmentedButtons/SegmentedButtonRealCase'; import SegmentedButtonExample from './Examples/SegmentedButtonsExample'; import SnackbarExample from './Examples/SnackbarExample'; +import SplitButtonExample from './Examples/SplitButtonExample'; import SurfaceExample from './Examples/SurfaceExample'; import SwitchExample from './Examples/SwitchExample'; import TeamDetails from './Examples/TeamDetails'; @@ -79,6 +80,7 @@ export const mainExamples = { Searchbar: SearchbarExample, SegmentedButton: SegmentedButtonExample, Snackbar: SnackbarExample, + SplitButton: SplitButtonExample, Surface: SurfaceExample, Switch: SwitchExample, Text: TextExample, diff --git a/example/src/Examples/SplitButtonExample.tsx b/example/src/Examples/SplitButtonExample.tsx new file mode 100644 index 0000000000..e6ed5aebe4 --- /dev/null +++ b/example/src/Examples/SplitButtonExample.tsx @@ -0,0 +1,127 @@ +import * as React from 'react'; +import { StyleSheet, View } from 'react-native'; + +import { List, Menu, SplitButton, Switch, useTheme } from 'react-native-paper'; + +import ScreenWrapper from '../ScreenWrapper'; + +const modes = ['filled', 'tonal', 'elevated', 'outlined'] as const; +const SplitButtonExample = () => { + const [menuVisible, setMenuVisible] = React.useState(false); + const [disabled, setDisabled] = React.useState(false); + const [loading, setLoading] = React.useState(false); + const theme = useTheme(); + + return ( + + + + setMenuVisible(false)} + anchorPosition="bottom" + anchor={ + {}} + onTrailingPress={() => setMenuVisible(true)} + trailingAccessibilityLabel="Show send options" + trailingAccessibilityState={{ expanded: menuVisible }} + /> + } + > + setMenuVisible(false)} + /> + setMenuVisible(false)} + /> + + + } + /> + } + /> + + + + + {modes.map((mode) => ( + {}} + onTrailingPress={() => {}} + trailingAccessibilityLabel={`${mode} options`} + /> + ))} + + + + + + {}} + onTrailingPress={() => {}} + trailingAccessibilityLabel="Custom color options" + /> + {}} + onTrailingPress={() => {}} + trailingAccessibilityLabel="Custom label options" + /> + + + + ); +}; + +SplitButtonExample.title = 'SplitButton'; + +const styles = StyleSheet.create({ + playground: { + paddingHorizontal: 16, + paddingVertical: 8, + alignItems: 'flex-start', + }, + row: { + flexDirection: 'row', + flexWrap: 'wrap', + alignItems: 'center', + paddingHorizontal: 12, + gap: 12, + }, + column: { + alignItems: 'flex-start', + paddingHorizontal: 16, + gap: 16, + }, + boldLabel: { + fontWeight: '800', + }, +}); + +export default SplitButtonExample; diff --git a/src/components/SplitButton/SplitButton.tsx b/src/components/SplitButton/SplitButton.tsx new file mode 100644 index 0000000000..b4eaaee75d --- /dev/null +++ b/src/components/SplitButton/SplitButton.tsx @@ -0,0 +1,671 @@ +import * as React from 'react'; +import { + AccessibilityState, + Animated, + ColorValue, + Easing, + GestureResponderEvent, + PressableAndroidRippleConfig, + StyleProp, + StyleSheet, + TextStyle, + View, + ViewStyle, +} from 'react-native'; + +import { splitButtonElevation, type SplitButtonSize } from './tokens'; +import { + getSplitButtonColors, + getSplitButtonHitSlop, + getSplitButtonLeadingShape, + getSplitButtonRippleColor, + getSplitButtonSizeStyle, + getSplitButtonTrailingShape, + normalizeSplitButtonMode, + type SplitButtonMode, +} from './utils'; +import { useInternalTheme } from '../../core/theming'; +import type { $Omit, Theme, ThemeProp } from '../../types'; +import { forwardRef } from '../../utils/forwardRef'; +import hasTouchHandler from '../../utils/hasTouchHandler'; +import ActivityIndicator from '../ActivityIndicator'; +import { getButtonTouchableRippleStyle } from '../Button/utils'; +import Icon, { IconSource } from '../Icon'; +import Surface from '../Surface'; +import TouchableRipple, { + Props as TouchableRippleProps, +} from '../TouchableRipple/TouchableRipple'; +import Text from '../Typography/Text'; + +export type Props = $Omit< + React.ComponentProps, + 'children' | 'mode' +> & { + /** + * Mode of the split button. + * - `filled` - high-emphasis split button for important or final actions. + * - `tonal` - medium-emphasis split button using secondary container colors. + * - `elevated` - tonal split button with elevation for separation from busy surfaces. + * - `outlined` - medium-emphasis split button with transparent containers and outline. + */ + mode?: SplitButtonMode; + /** + * Size of the split button. + */ + size?: SplitButtonSize; + /** + * Label text for the leading button. + */ + label: string; + /** + * Icon to display before the label in the leading button. + */ + icon?: IconSource; + /** + * Icon to display in the trailing button. + */ + trailingIcon?: IconSource; + /** + * Whether to show a loading indicator in the leading button. + */ + loading?: boolean; + /** + * Whether both buttons are disabled. + */ + disabled?: boolean; + /** + * Custom container color for both buttons. + */ + buttonColor?: ColorValue; + /** + * Custom content color for icons and label. + */ + textColor?: ColorValue; + /** + * Custom ripple color for both buttons. + */ + rippleColor?: ColorValue; + /** + * Function to execute when the leading button is pressed. + */ + onPress?: (e: GestureResponderEvent) => void; + /** + * Function to execute when the trailing button is pressed. + */ + onTrailingPress?: (e: GestureResponderEvent) => void; + /** + * Function to execute as soon as the leading button is pressed. + */ + onPressIn?: (e: GestureResponderEvent) => void; + /** + * Function to execute when the leading button press is released. + */ + onPressOut?: (e: GestureResponderEvent) => void; + /** + * Function to execute as soon as the trailing button is pressed. + */ + onTrailingPressIn?: (e: GestureResponderEvent) => void; + /** + * Function to execute when the trailing button press is released. + */ + onTrailingPressOut?: (e: GestureResponderEvent) => void; + /** + * Function to execute when the leading button is long pressed. + */ + onLongPress?: (e: GestureResponderEvent) => void; + /** + * Function to execute when the trailing button is long pressed. + */ + onTrailingLongPress?: (e: GestureResponderEvent) => void; + /** + * The number of milliseconds a user must touch the leading button before executing `onLongPress`. + */ + delayLongPress?: number; + /** + * The number of milliseconds a user must touch the trailing button before executing `onTrailingLongPress`. + */ + trailingDelayLongPress?: number; + /** + * Accessibility label for the leading button. Falls back to `label`. + */ + accessibilityLabel?: string; + /** + * Accessibility label for the trailing button. + */ + trailingAccessibilityLabel?: string; + /** + * Accessibility state for the leading button. + */ + accessibilityState?: AccessibilityState; + /** + * Accessibility state for the trailing button. + */ + trailingAccessibilityState?: AccessibilityState; + /** + * Type of background drawable to display the feedback (Android). + * https://reactnative.dev/docs/pressable#rippleconfig + */ + background?: PressableAndroidRippleConfig; + /** + * Style for the outer split-button group. + */ + style?: Animated.WithAnimatedValue>; + /** + * Style for both button containers. + */ + buttonStyle?: StyleProp; + /** + * Style for the leading button container. + */ + leadingButtonStyle?: StyleProp; + /** + * Style for the trailing button container. + */ + trailingButtonStyle?: StyleProp; + /** + * Style for the leading button content row. + */ + contentStyle?: StyleProp; + /** + * Style for the label. + */ + labelStyle?: StyleProp; + /** + * Specifies the largest possible scale a label font can reach. + */ + maxFontSizeMultiplier?: number; + /** + * Sets additional distance outside of the leading button in which a press can be detected. + */ + hitSlop?: TouchableRippleProps['hitSlop']; + /** + * Sets additional distance outside of the trailing button in which a press can be detected. + */ + trailingHitSlop?: TouchableRippleProps['hitSlop']; + /** + * @optional + */ + theme?: ThemeProp; + /** + * TestID used for testing purposes. + */ + testID?: string; + ref?: React.RefObject; +}; + +/** + * Split buttons let people trigger a primary action from the leading button + * and open or trigger a contextual action from the trailing button. + * + * ## Usage + * ```js + * import * as React from 'react'; + * import { SplitButton } from 'react-native-paper'; + * + * const MyComponent = () => ( + * console.log('Send')} + * onTrailingPress={() => console.log('Show options')} + * /> + * ); + * + * export default MyComponent; + * ``` + */ +const SplitButton = forwardRef( + ( + { + mode = 'filled', + size = 'small', + label, + icon, + trailingIcon = 'menu-down', + loading, + disabled, + buttonColor: customButtonColor, + textColor: customTextColor, + rippleColor: customRippleColor, + onPress, + onTrailingPress, + onPressIn, + onPressOut, + onTrailingPressIn, + onTrailingPressOut, + onLongPress, + onTrailingLongPress, + delayLongPress, + trailingDelayLongPress, + accessibilityLabel = label, + trailingAccessibilityLabel = 'Show options', + accessibilityState, + trailingAccessibilityState, + background, + style, + buttonStyle, + leadingButtonStyle, + trailingButtonStyle, + contentStyle, + labelStyle, + maxFontSizeMultiplier, + hitSlop, + trailingHitSlop, + theme: themeOverrides, + testID = 'split-button', + ...rest + }, + ref + ) => { + const theme = useInternalTheme(themeOverrides); + const normalizedMode = normalizeSplitButtonMode(mode); + const [pressedButton, setPressedButton] = React.useState< + 'leading' | 'trailing' | null + >(null); + const sizeStyle = React.useMemo( + () => getSplitButtonSizeStyle({ size, theme }), + [size, theme] + ); + const colors = React.useMemo( + () => + getSplitButtonColors({ + theme, + mode, + disabled, + customButtonColor, + customTextColor, + }), + [theme, mode, disabled, customButtonColor, customTextColor] + ); + const rippleColor = React.useMemo( + () => + getSplitButtonRippleColor({ + contentColor: colors.contentColor, + customRippleColor, + }), + [colors.contentColor, customRippleColor] + ); + const leadingShape = React.useMemo( + () => + getSplitButtonLeadingShape({ + containerRadius: sizeStyle.containerRadius, + innerRadius: + pressedButton === 'leading' + ? sizeStyle.innerPressedRadius + : sizeStyle.innerRadius, + }), + [ + pressedButton, + sizeStyle.containerRadius, + sizeStyle.innerPressedRadius, + sizeStyle.innerRadius, + ] + ); + const trailingShape = React.useMemo( + () => + getSplitButtonTrailingShape({ + containerRadius: sizeStyle.containerRadius, + innerRadius: + pressedButton === 'trailing' + ? sizeStyle.innerPressedRadius + : sizeStyle.innerRadius, + }), + [ + pressedButton, + sizeStyle.containerRadius, + sizeStyle.innerPressedRadius, + sizeStyle.innerRadius, + ] + ); + const leadingHitSlop = React.useMemo( + () => getSplitButtonHitSlop({ size, hitSlop }), + [size, hitSlop] + ); + const resolvedTrailingHitSlop = React.useMemo( + () => getSplitButtonHitSlop({ size, hitSlop: trailingHitSlop }), + [size, trailingHitSlop] + ); + + const { color: customLabelColor, fontSize: customLabelSize } = + StyleSheet.flatten(labelStyle) || {}; + const contentColor = + typeof customLabelColor === 'string' + ? customLabelColor + : colors.contentColor; + const labelTextStyle: TextStyle = { + color: colors.contentColor, + ...(theme as Theme).fonts[sizeStyle.labelVariant], + }; + const disabledState = { disabled: true }; + const leadingAccessibilityState = disabled + ? { ...accessibilityState, ...disabledState } + : accessibilityState; + const trailingAccessibilityStateWithDisabled = disabled + ? { ...trailingAccessibilityState, ...disabledState } + : trailingAccessibilityState; + const isElevationEntitled = !disabled && normalizedMode === 'elevated'; + const { current: elevation } = React.useRef( + new Animated.Value(isElevationEntitled ? splitButtonElevation.enabled : 0) + ); + const animateElevation = React.useCallback( + (toValue: number) => { + if (!isElevationEntitled) { + return; + } + + Animated.timing(elevation, { + toValue, + duration: + toValue === splitButtonElevation.pressed + ? theme.motion.duration.short4 + : theme.motion.duration.short3, + easing: Easing.bezier(...theme.motion.easing.standard), + useNativeDriver: false, + }).start(); + }, + [ + elevation, + isElevationEntitled, + theme.motion.duration.short3, + theme.motion.duration.short4, + theme.motion.easing.standard, + ] + ); + const leadingHasTouchHandler = hasTouchHandler({ + onPress, + onPressIn, + onPressOut, + onLongPress, + }); + const trailingHasTouchHandler = hasTouchHandler({ + onPress: onTrailingPress, + onPressIn: onTrailingPressIn, + onPressOut: onTrailingPressOut, + onLongPress: onTrailingLongPress, + }); + const handleLeadingPressIn = React.useCallback( + (e: GestureResponderEvent) => { + onPressIn?.(e); + setPressedButton('leading'); + animateElevation(splitButtonElevation.pressed); + }, + [animateElevation, onPressIn] + ); + const handleLeadingPressOut = React.useCallback( + (e: GestureResponderEvent) => { + onPressOut?.(e); + setPressedButton(null); + animateElevation(splitButtonElevation.enabled); + }, + [animateElevation, onPressOut] + ); + const handleTrailingPressIn = React.useCallback( + (e: GestureResponderEvent) => { + onTrailingPressIn?.(e); + setPressedButton('trailing'); + animateElevation(splitButtonElevation.pressed); + }, + [animateElevation, onTrailingPressIn] + ); + const handleTrailingPressOut = React.useCallback( + (e: GestureResponderEvent) => { + onTrailingPressOut?.(e); + setPressedButton(null); + animateElevation(splitButtonElevation.enabled); + }, + [animateElevation, onTrailingPressOut] + ); + React.useEffect(() => { + if (!isElevationEntitled) { + setPressedButton(null); + } + + Animated.timing(elevation, { + toValue: isElevationEntitled ? splitButtonElevation.enabled : 0, + duration: 0, + useNativeDriver: false, + }).start(); + }, [elevation, isElevationEntitled]); + + const commonButtonStyle: ViewStyle = { + height: sizeStyle.containerHeight, + backgroundColor: + colors.containerOpacity < 1 ? 'transparent' : colors.containerColor, + borderColor: colors.borderColor, + borderWidth: colors.borderWidth, + }; + + return ( + > + } + > + + + + + {icon && !loading ? ( + + ) : null} + {loading ? ( + + ) : null} + + {label} + + + + + + + + + + + + + + + ); + } +); + +const ButtonBackground = ({ + backgroundColor, + opacity, + borderRadiusStyle, +}: { + backgroundColor: ColorValue; + opacity: number; + borderRadiusStyle: ViewStyle; +}) => { + if (opacity >= 1) { + return null; + } + + return ( + + ); +}; + +const styles = StyleSheet.create({ + group: { + flexDirection: 'row', + alignItems: 'center', + maxWidth: '100%', + }, + leading: { + minWidth: 48, + flexShrink: 1, + borderStyle: 'solid', + }, + trailing: { + minWidth: 48, + borderStyle: 'solid', + }, + ripple: { + height: '100%', + }, + leadingContent: { + flexDirection: 'row', + alignItems: 'center', + justifyContent: 'center', + }, + label: { + flexShrink: 1, + }, + trailingContent: { + alignItems: 'center', + justifyContent: 'center', + }, +}); + +export default SplitButton; + +// @component-docs ignore-next-line +export { SplitButton }; diff --git a/src/components/SplitButton/index.ts b/src/components/SplitButton/index.ts new file mode 100644 index 0000000000..8a70e0e614 --- /dev/null +++ b/src/components/SplitButton/index.ts @@ -0,0 +1,2 @@ +export { default } from './SplitButton'; +export type { Props } from './SplitButton'; diff --git a/src/components/SplitButton/tokens.ts b/src/components/SplitButton/tokens.ts new file mode 100644 index 0000000000..75c4d569cd --- /dev/null +++ b/src/components/SplitButton/tokens.ts @@ -0,0 +1,108 @@ +import type { ThemeShapeCorners, TypescaleKey } from '../../theme/types'; + +export type SplitButtonSize = + | 'extra-small' + | 'small' + | 'medium' + | 'large' + | 'extra-large'; + +export type SplitButtonShapeKey = keyof ThemeShapeCorners | 'full'; + +export type SplitButtonSizeTokens = { + betweenSpace: number; + containerHeight: number; + containerShape: SplitButtonShapeKey; + innerCornerShape: SplitButtonShapeKey; + innerPressedCornerShape: SplitButtonShapeKey; + leadingButtonLeadingSpace: number; + leadingButtonTrailingSpace: number; + leadingIconSize: number; + trailingButtonLeadingSpace: number; + trailingButtonTrailingSpace: number; + trailingIconSize: number; + labelVariant: TypescaleKey; +}; + +export const splitButtonSizeTokens: Record< + SplitButtonSize, + SplitButtonSizeTokens +> = { + 'extra-small': { + betweenSpace: 2, + containerHeight: 32, + containerShape: 'full', + innerCornerShape: 'extraSmall', + innerPressedCornerShape: 'small', + leadingButtonLeadingSpace: 12, + leadingButtonTrailingSpace: 10, + leadingIconSize: 20, + trailingButtonLeadingSpace: 13, + trailingButtonTrailingSpace: 13, + trailingIconSize: 22, + labelVariant: 'labelLarge', + }, + small: { + betweenSpace: 2, + containerHeight: 40, + containerShape: 'full', + innerCornerShape: 'extraSmall', + innerPressedCornerShape: 'medium', + leadingButtonLeadingSpace: 16, + leadingButtonTrailingSpace: 12, + leadingIconSize: 20, + trailingButtonLeadingSpace: 13, + trailingButtonTrailingSpace: 13, + trailingIconSize: 22, + labelVariant: 'labelLarge', + }, + medium: { + betweenSpace: 2, + containerHeight: 56, + containerShape: 'full', + innerCornerShape: 'extraSmall', + innerPressedCornerShape: 'medium', + leadingButtonLeadingSpace: 24, + leadingButtonTrailingSpace: 24, + leadingIconSize: 24, + trailingButtonLeadingSpace: 15, + trailingButtonTrailingSpace: 15, + trailingIconSize: 26, + labelVariant: 'titleMedium', + }, + large: { + betweenSpace: 2, + containerHeight: 96, + containerShape: 'full', + innerCornerShape: 'small', + innerPressedCornerShape: 'largeIncreased', + leadingButtonLeadingSpace: 48, + leadingButtonTrailingSpace: 48, + leadingIconSize: 32, + trailingButtonLeadingSpace: 29, + trailingButtonTrailingSpace: 29, + trailingIconSize: 38, + labelVariant: 'headlineSmall', + }, + 'extra-large': { + betweenSpace: 2, + containerHeight: 136, + containerShape: 'full', + innerCornerShape: 'medium', + innerPressedCornerShape: 'largeIncreased', + leadingButtonLeadingSpace: 64, + leadingButtonTrailingSpace: 64, + leadingIconSize: 40, + trailingButtonLeadingSpace: 43, + trailingButtonTrailingSpace: 43, + trailingIconSize: 50, + labelVariant: 'headlineLarge', + }, +}; + +export const splitButtonMinInteractiveSize = 48; + +export const splitButtonElevation = { + enabled: 1, + pressed: 2, +} as const; diff --git a/src/components/SplitButton/utils.ts b/src/components/SplitButton/utils.ts new file mode 100644 index 0000000000..1a2ae78f5f --- /dev/null +++ b/src/components/SplitButton/utils.ts @@ -0,0 +1,242 @@ +import type { ColorValue, Insets, ViewStyle } from 'react-native'; + +import color from 'color'; + +import { + splitButtonMinInteractiveSize, + splitButtonSizeTokens, + type SplitButtonShapeKey, + type SplitButtonSize, +} from './tokens'; +import { tokens } from '../../theme/tokens'; +import { cornerFull } from '../../theme/tokens/sys/shape'; +import type { InternalTheme, Theme } from '../../types'; +import type { Props as TouchableRippleProps } from '../TouchableRipple/TouchableRipple'; + +const stateOpacity = tokens.md.sys.state.opacity; + +export type SplitButtonMode = 'filled' | 'tonal' | 'elevated' | 'outlined'; + +export type SplitButtonNormalizedMode = + | 'filled' + | 'tonal' + | 'elevated' + | 'outlined'; + +export const normalizeSplitButtonMode = ( + mode: SplitButtonMode +): SplitButtonNormalizedMode => { + return mode; +}; + +export const resolveSplitButtonCorner = ( + theme: InternalTheme, + key: SplitButtonShapeKey +) => (key === 'full' ? cornerFull : (theme as Theme).shapes.corner[key]); + +export const getSplitButtonSizeStyle = ({ + size, + theme, +}: { + size: SplitButtonSize; + theme: InternalTheme; +}) => { + const sizeTokens = splitButtonSizeTokens[size]; + + return { + ...sizeTokens, + containerRadius: resolveSplitButtonCorner(theme, sizeTokens.containerShape), + innerRadius: resolveSplitButtonCorner(theme, sizeTokens.innerCornerShape), + innerPressedRadius: resolveSplitButtonCorner( + theme, + sizeTokens.innerPressedCornerShape + ), + }; +}; + +const getSplitButtonContainerColor = ({ + mode, + theme, + disabled, + customButtonColor, +}: { + mode: SplitButtonNormalizedMode; + theme: InternalTheme; + disabled?: boolean; + customButtonColor?: ColorValue; +}) => { + const { colors } = theme as Theme; + + if (customButtonColor && !disabled) { + return customButtonColor; + } + + if (disabled) { + return mode === 'outlined' ? 'transparent' : colors.onSurface; + } + + if (mode === 'filled') { + return colors.primary; + } + + if (mode === 'tonal') { + return colors.secondaryContainer; + } + + if (mode === 'elevated') { + return colors.surfaceContainerLow; + } + + return 'transparent'; +}; + +const getSplitButtonContentColor = ({ + mode, + theme, + disabled, + customTextColor, +}: { + mode: SplitButtonNormalizedMode; + theme: InternalTheme; + disabled?: boolean; + customTextColor?: ColorValue; +}) => { + const { colors } = theme as Theme; + + if (customTextColor && !disabled) { + return customTextColor; + } + + if (disabled) { + return colors.onSurface; + } + + if (mode === 'filled') { + return colors.onPrimary; + } + + if (mode === 'tonal') { + return colors.onSecondaryContainer; + } + + if (mode === 'outlined') { + return colors.onSurfaceVariant; + } + + return colors.primary; +}; + +export const getSplitButtonColors = ({ + theme, + mode, + disabled, + customButtonColor, + customTextColor, +}: { + theme: InternalTheme; + mode: SplitButtonMode; + disabled?: boolean; + customButtonColor?: ColorValue; + customTextColor?: ColorValue; +}) => { + const normalizedMode = normalizeSplitButtonMode(mode); + const containerColor = getSplitButtonContainerColor({ + mode: normalizedMode, + theme, + disabled, + customButtonColor, + }); + const contentColor = getSplitButtonContentColor({ + mode: normalizedMode, + theme, + disabled, + customTextColor, + }); + const isOutlined = normalizedMode === 'outlined'; + + return { + containerColor, + contentColor, + borderColor: isOutlined ? (theme as Theme).colors.outline : 'transparent', + borderWidth: isOutlined ? 1 : 0, + containerOpacity: + disabled && normalizedMode !== 'outlined' + ? stateOpacity.pressed + : stateOpacity.enabled, + contentOpacity: disabled ? stateOpacity.disabled : stateOpacity.enabled, + }; +}; + +export const getSplitButtonRippleColor = ({ + contentColor, + customRippleColor, +}: { + contentColor: ColorValue; + customRippleColor?: ColorValue; +}): ColorValue | undefined => { + if (customRippleColor) { + return customRippleColor; + } + + if (typeof contentColor !== 'string') { + return undefined; + } + + return color(contentColor).alpha(stateOpacity.pressed).rgb().string(); +}; + +export const getSplitButtonHitSlop = ({ + size, + hitSlop, +}: { + size: SplitButtonSize; + hitSlop?: TouchableRippleProps['hitSlop']; +}): TouchableRippleProps['hitSlop'] => { + if (typeof hitSlop === 'number') { + return hitSlop; + } + + const height = splitButtonSizeTokens[size].containerHeight; + const verticalSlop = Math.max( + 0, + (splitButtonMinInteractiveSize - height) / 2 + ); + + if (verticalSlop === 0) { + return hitSlop; + } + + const insetHitSlop = (hitSlop || {}) as Insets; + + return { + ...insetHitSlop, + top: insetHitSlop.top ?? verticalSlop, + bottom: insetHitSlop.bottom ?? verticalSlop, + }; +}; + +export const getSplitButtonLeadingShape = ({ + containerRadius, + innerRadius, +}: { + containerRadius: number; + innerRadius: number; +}): ViewStyle => ({ + borderTopStartRadius: containerRadius, + borderBottomStartRadius: containerRadius, + borderTopEndRadius: innerRadius, + borderBottomEndRadius: innerRadius, +}); + +export const getSplitButtonTrailingShape = ({ + containerRadius, + innerRadius, +}: { + containerRadius: number; + innerRadius: number; +}): ViewStyle => ({ + borderTopStartRadius: innerRadius, + borderBottomStartRadius: innerRadius, + borderTopEndRadius: containerRadius, + borderBottomEndRadius: containerRadius, +}); diff --git a/src/components/__tests__/SplitButton.test.tsx b/src/components/__tests__/SplitButton.test.tsx new file mode 100644 index 0000000000..3a7bb87c1d --- /dev/null +++ b/src/components/__tests__/SplitButton.test.tsx @@ -0,0 +1,241 @@ +import * as React from 'react'; +import { StyleSheet } from 'react-native'; + +import { fireEvent } from '@testing-library/react-native'; + +import { getTheme } from '../../core/theming'; +import { render } from '../../test-utils'; +import SplitButton from '../SplitButton/SplitButton'; +import { + getSplitButtonColors, + getSplitButtonHitSlop, + getSplitButtonLeadingShape, + getSplitButtonSizeStyle, + getSplitButtonTrailingShape, + normalizeSplitButtonMode, +} from '../SplitButton/utils'; + +const styles = StyleSheet.create({ + leading: { + minWidth: 120, + }, + trailing: { + minWidth: 64, + }, + label: { + fontSize: 18, + }, +}); + +it('renders a filled split button by default', () => { + const { getByTestId } = render( + {}} onTrailingPress={() => {}} /> + ); + + expect(getByTestId('split-button-label')).toHaveTextContent('Send'); + expect(getByTestId('split-button-container')).toHaveStyle({ + height: 40, + }); + expect(getByTestId('split-button-leading-container')).toBeTruthy(); + expect(getByTestId('split-button-trailing-container')).toBeTruthy(); +}); + +it('calls leading and trailing press handlers separately', () => { + const onPress = jest.fn(); + const onTrailingPress = jest.fn(); + const { getByTestId } = render( + + ); + + fireEvent.press(getByTestId('split-button-leading')); + fireEvent.press(getByTestId('split-button-trailing')); + + expect(onPress).toHaveBeenCalledTimes(1); + expect(onTrailingPress).toHaveBeenCalledTimes(1); +}); + +it('calls leading and trailing press-in and press-out handlers separately', () => { + const onPress = jest.fn(); + const onPressIn = jest.fn(); + const onPressOut = jest.fn(); + const onTrailingPress = jest.fn(); + const onTrailingPressIn = jest.fn(); + const onTrailingPressOut = jest.fn(); + const { getByTestId } = render( + + ); + + fireEvent(getByTestId('split-button-leading'), 'onPressIn'); + fireEvent(getByTestId('split-button-leading'), 'onPressOut'); + fireEvent(getByTestId('split-button-trailing'), 'onPressIn'); + fireEvent(getByTestId('split-button-trailing'), 'onPressOut'); + + expect(onPressIn).toHaveBeenCalledTimes(1); + expect(onPressOut).toHaveBeenCalledTimes(1); + expect(onTrailingPressIn).toHaveBeenCalledTimes(1); + expect(onTrailingPressOut).toHaveBeenCalledTimes(1); +}); + +it('uses pressed inner-corner tokens for the active side', () => { + const theme = getTheme(); + const { getByTestId } = render( + {}} onTrailingPress={() => {}} /> + ); + + fireEvent(getByTestId('split-button-leading'), 'onPressIn'); + + expect(getByTestId('split-button-leading-container')).toHaveStyle({ + borderTopEndRadius: theme.shapes.corner.medium, + borderBottomEndRadius: theme.shapes.corner.medium, + }); + expect(getByTestId('split-button-trailing-container')).toHaveStyle({ + borderTopStartRadius: theme.shapes.corner.extraSmall, + borderBottomStartRadius: theme.shapes.corner.extraSmall, + }); + + fireEvent(getByTestId('split-button-leading'), 'onPressOut'); + fireEvent(getByTestId('split-button-trailing'), 'onPressIn'); + + expect(getByTestId('split-button-trailing-container')).toHaveStyle({ + borderTopStartRadius: theme.shapes.corner.medium, + borderBottomStartRadius: theme.shapes.corner.medium, + }); +}); + +it('marks both press targets disabled when disabled', () => { + const { getByTestId } = render( + {}} + onTrailingPress={() => {}} + /> + ); + + expect(getByTestId('split-button-leading').props.accessibilityState).toEqual({ + disabled: true, + }); + expect(getByTestId('split-button-trailing').props.accessibilityState).toEqual( + { + disabled: true, + } + ); +}); + +it('passes custom styles to the correct target', () => { + const { getByTestId } = render( + {}} + onTrailingPress={() => {}} + leadingButtonStyle={styles.leading} + trailingButtonStyle={styles.trailing} + labelStyle={styles.label} + /> + ); + + expect(getByTestId('split-button-leading-container')).toHaveStyle( + styles.leading + ); + expect(getByTestId('split-button-trailing-container')).toHaveStyle( + styles.trailing + ); + expect(getByTestId('split-button-label')).toHaveStyle(styles.label); +}); + +it('merges trailing accessibility state with expanded state', () => { + const { getByTestId } = render( + {}} + onTrailingPress={() => {}} + trailingAccessibilityState={{ expanded: true }} + /> + ); + + expect( + getByTestId('split-button-trailing').props.accessibilityState + ).toMatchObject({ + expanded: true, + }); +}); + +describe('SplitButton utils', () => { + it('normalizes supported MD3 modes', () => { + expect(normalizeSplitButtonMode('filled')).toBe('filled'); + expect(normalizeSplitButtonMode('tonal')).toBe('tonal'); + expect(normalizeSplitButtonMode('outlined')).toBe('outlined'); + }); + + it('resolves MD3 color roles for modes', () => { + const theme = getTheme(); + + expect(getSplitButtonColors({ theme, mode: 'filled' }).containerColor).toBe( + theme.colors.primary + ); + expect(getSplitButtonColors({ theme, mode: 'tonal' }).contentColor).toBe( + theme.colors.onSecondaryContainer + ); + expect(getSplitButtonColors({ theme, mode: 'elevated' }).contentColor).toBe( + theme.colors.primary + ); + expect(getSplitButtonColors({ theme, mode: 'outlined' }).borderColor).toBe( + theme.colors.outline + ); + }); + + it('resolves per-size tokens against theme shape values', () => { + const theme = getTheme(); + const sizeStyle = getSplitButtonSizeStyle({ theme, size: 'large' }); + + expect(sizeStyle.containerHeight).toBe(96); + expect(sizeStyle.trailingIconSize).toBe(38); + expect(sizeStyle.innerRadius).toBe(theme.shapes.corner.small); + expect(sizeStyle.innerPressedRadius).toBe( + theme.shapes.corner.largeIncreased + ); + }); + + it('uses logical leading and trailing shapes', () => { + expect( + getSplitButtonLeadingShape({ containerRadius: 20, innerRadius: 4 }) + ).toEqual({ + borderTopStartRadius: 20, + borderBottomStartRadius: 20, + borderTopEndRadius: 4, + borderBottomEndRadius: 4, + }); + expect( + getSplitButtonTrailingShape({ containerRadius: 20, innerRadius: 4 }) + ).toEqual({ + borderTopStartRadius: 4, + borderBottomStartRadius: 4, + borderTopEndRadius: 20, + borderBottomEndRadius: 20, + }); + }); + + it('expands small visual sizes to a 48dp touch target', () => { + expect(getSplitButtonHitSlop({ size: 'extra-small' })).toEqual({ + top: 8, + bottom: 8, + }); + expect(getSplitButtonHitSlop({ size: 'small' })).toEqual({ + top: 4, + bottom: 4, + }); + expect(getSplitButtonHitSlop({ size: 'medium' })).toBeUndefined(); + }); +}); diff --git a/src/index.tsx b/src/index.tsx index 8863e2fa20..8280928eae 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -42,6 +42,7 @@ export { default as ProgressBar } from './components/ProgressBar'; export { default as RadioButton } from './components/RadioButton'; export { default as Searchbar } from './components/Searchbar'; export { default as Snackbar } from './components/Snackbar'; +export { default as SplitButton } from './components/SplitButton'; export { default as Surface } from './components/Surface'; export { default as Switch } from './components/Switch/Switch'; export { default as Appbar } from './components/Appbar'; @@ -126,6 +127,7 @@ export type { Props as RadioButtonIOSProps } from './components/RadioButton/Radi export type { Props as RadioButtonItemProps } from './components/RadioButton/RadioButtonItem'; export type { Props as SearchbarProps } from './components/Searchbar'; export type { Props as SnackbarProps } from './components/Snackbar'; +export type { Props as SplitButtonProps } from './components/SplitButton'; export type { Props as SurfaceProps } from './components/Surface'; export type { Props as SwitchProps } from './components/Switch/Switch'; export type { From f0821e8cb25a1a518a061a39a171d857db50c107 Mon Sep 17 00:00:00 2001 From: Maciej Lodygowski Date: Thu, 25 Jun 2026 17:10:07 +0200 Subject: [PATCH 2/7] fix: address split button review feedback --- src/components/SplitButton/SplitButton.tsx | 771 +++++++++--------- src/components/SplitButton/tokens.ts | 1 + src/components/SplitButton/utils.ts | 10 +- src/components/__tests__/SplitButton.test.tsx | 132 +-- 4 files changed, 469 insertions(+), 445 deletions(-) diff --git a/src/components/SplitButton/SplitButton.tsx b/src/components/SplitButton/SplitButton.tsx index b4eaaee75d..97a4e818fd 100644 --- a/src/components/SplitButton/SplitButton.tsx +++ b/src/components/SplitButton/SplitButton.tsx @@ -1,18 +1,24 @@ import * as React from 'react'; import { AccessibilityState, - Animated, ColorValue, - Easing, GestureResponderEvent, PressableAndroidRippleConfig, StyleProp, StyleSheet, TextStyle, View, + ViewProps, ViewStyle, } from 'react-native'; +import Animated, { + Easing, + useAnimatedStyle, + useSharedValue, + withTiming, +} from 'react-native-reanimated'; + import { splitButtonElevation, type SplitButtonSize } from './tokens'; import { getSplitButtonColors, @@ -25,8 +31,7 @@ import { type SplitButtonMode, } from './utils'; import { useInternalTheme } from '../../core/theming'; -import type { $Omit, Theme, ThemeProp } from '../../types'; -import { forwardRef } from '../../utils/forwardRef'; +import type { $Omit, ThemeProp } from '../../types'; import hasTouchHandler from '../../utils/hasTouchHandler'; import ActivityIndicator from '../ActivityIndicator'; import { getButtonTouchableRippleStyle } from '../Button/utils'; @@ -37,9 +42,11 @@ import TouchableRipple, { } from '../TouchableRipple/TouchableRipple'; import Text from '../Typography/Text'; +const AnimatedSurface = Animated.createAnimatedComponent(Surface); + export type Props = $Omit< - React.ComponentProps, - 'children' | 'mode' + ViewProps, + 'children' | 'style' | 'onPress' | 'onPressIn' | 'onPressOut' > & { /** * Mode of the split button. @@ -149,7 +156,7 @@ export type Props = $Omit< /** * Style for the outer split-button group. */ - style?: Animated.WithAnimatedValue>; + style?: StyleProp; /** * Style for both button containers. */ @@ -190,7 +197,6 @@ export type Props = $Omit< * TestID used for testing purposes. */ testID?: string; - ref?: React.RefObject; }; /** @@ -216,397 +222,412 @@ export type Props = $Omit< * export default MyComponent; * ``` */ -const SplitButton = forwardRef( - ( - { - mode = 'filled', - size = 'small', - label, - icon, - trailingIcon = 'menu-down', - loading, - disabled, - buttonColor: customButtonColor, - textColor: customTextColor, - rippleColor: customRippleColor, - onPress, - onTrailingPress, +const SplitButton = ({ + mode = 'filled', + size = 'small', + label, + icon, + trailingIcon = 'menu-down', + loading, + disabled, + buttonColor: customButtonColor, + textColor: customTextColor, + rippleColor: customRippleColor, + onPress, + onTrailingPress, + onPressIn, + onPressOut, + onTrailingPressIn, + onTrailingPressOut, + onLongPress, + onTrailingLongPress, + delayLongPress, + trailingDelayLongPress, + accessibilityLabel = label, + trailingAccessibilityLabel = 'Show options', + accessibilityState, + trailingAccessibilityState, + background, + style, + buttonStyle, + leadingButtonStyle, + trailingButtonStyle, + contentStyle, + labelStyle, + maxFontSizeMultiplier, + hitSlop, + trailingHitSlop, + theme: themeOverrides, + testID, + ...rest +}: Props) => { + const theme = useInternalTheme(themeOverrides); + const normalizedMode = normalizeSplitButtonMode(mode); + const sizeStyle = React.useMemo( + () => getSplitButtonSizeStyle({ size, theme }), + [size, theme] + ); + const leadingInnerRadius = useSharedValue(sizeStyle.innerRadius); + const trailingInnerRadius = useSharedValue(sizeStyle.innerRadius); + const colors = React.useMemo( + () => + getSplitButtonColors({ + theme, + mode, + disabled, + customButtonColor, + customTextColor, + }), + [theme, mode, disabled, customButtonColor, customTextColor] + ); + const rippleColor = React.useMemo( + () => + getSplitButtonRippleColor({ + contentColor: colors.contentColor, + customRippleColor, + }), + [colors.contentColor, customRippleColor] + ); + const leadingShape = React.useMemo( + () => + getSplitButtonLeadingShape({ + containerRadius: sizeStyle.containerRadius, + innerRadius: sizeStyle.innerRadius, + }), + [sizeStyle.containerRadius, sizeStyle.innerRadius] + ); + const trailingShape = React.useMemo( + () => + getSplitButtonTrailingShape({ + containerRadius: sizeStyle.containerRadius, + innerRadius: sizeStyle.innerRadius, + }), + [sizeStyle.containerRadius, sizeStyle.innerRadius] + ); + const pressTimingConfig = React.useMemo( + () => ({ + duration: theme.motion.duration.short4, + easing: Easing.bezier(...theme.motion.easing.standard), + }), + [theme.motion.duration.short4, theme.motion.easing.standard] + ); + const releaseTimingConfig = React.useMemo( + () => ({ + duration: theme.motion.duration.short3, + easing: Easing.bezier(...theme.motion.easing.standard), + }), + [theme.motion.duration.short3, theme.motion.easing.standard] + ); + const leadingAnimatedShapeStyle = useAnimatedStyle( + () => ({ + ...getSplitButtonLeadingShape({ + containerRadius: sizeStyle.containerRadius, + innerRadius: leadingInnerRadius.value, + }), + }), + [sizeStyle.containerRadius] + ); + const trailingAnimatedShapeStyle = useAnimatedStyle( + () => ({ + ...getSplitButtonTrailingShape({ + containerRadius: sizeStyle.containerRadius, + innerRadius: trailingInnerRadius.value, + }), + }), + [sizeStyle.containerRadius] + ); + const leadingHitSlop = React.useMemo( + () => getSplitButtonHitSlop({ size, hitSlop }), + [size, hitSlop] + ); + const resolvedTrailingHitSlop = React.useMemo( + () => getSplitButtonHitSlop({ size, hitSlop: trailingHitSlop }), + [size, trailingHitSlop] + ); + + const { color: customLabelColor, fontSize: customLabelSize } = + StyleSheet.flatten(labelStyle) || {}; + const contentColor = + typeof customLabelColor === 'string' + ? customLabelColor + : colors.contentColor; + const labelTextStyle: TextStyle = { + color: colors.contentColor, + ...theme.fonts[sizeStyle.labelVariant], + }; + const disabledState = { disabled: true }; + const leadingAccessibilityState = disabled + ? { ...accessibilityState, ...disabledState } + : accessibilityState; + const trailingAccessibilityStateWithDisabled = disabled + ? { ...trailingAccessibilityState, ...disabledState } + : trailingAccessibilityState; + const isElevationEntitled = !disabled && normalizedMode === 'elevated'; + const leadingHasTouchHandler = hasTouchHandler({ + onPress, + onPressIn, + onPressOut, + onLongPress, + }); + const trailingHasTouchHandler = hasTouchHandler({ + onPress: onTrailingPress, + onPressIn: onTrailingPressIn, + onPressOut: onTrailingPressOut, + onLongPress: onTrailingLongPress, + }); + const handleLeadingPressIn = React.useCallback( + (e: GestureResponderEvent) => { + onPressIn?.(e); + leadingInnerRadius.value = withTiming( + sizeStyle.innerPressedRadius, + pressTimingConfig + ); + trailingInnerRadius.value = withTiming( + sizeStyle.innerRadius, + releaseTimingConfig + ); + }, + [ + leadingInnerRadius, onPressIn, - onPressOut, - onTrailingPressIn, - onTrailingPressOut, - onLongPress, - onTrailingLongPress, - delayLongPress, - trailingDelayLongPress, - accessibilityLabel = label, - trailingAccessibilityLabel = 'Show options', - accessibilityState, - trailingAccessibilityState, - background, - style, - buttonStyle, - leadingButtonStyle, - trailingButtonStyle, - contentStyle, - labelStyle, - maxFontSizeMultiplier, - hitSlop, - trailingHitSlop, - theme: themeOverrides, - testID = 'split-button', - ...rest + pressTimingConfig, + releaseTimingConfig, + sizeStyle.innerPressedRadius, + sizeStyle.innerRadius, + trailingInnerRadius, + ] + ); + const handleLeadingPressOut = React.useCallback( + (e: GestureResponderEvent) => { + onPressOut?.(e); + leadingInnerRadius.value = withTiming( + sizeStyle.innerRadius, + releaseTimingConfig + ); }, - ref - ) => { - const theme = useInternalTheme(themeOverrides); - const normalizedMode = normalizeSplitButtonMode(mode); - const [pressedButton, setPressedButton] = React.useState< - 'leading' | 'trailing' | null - >(null); - const sizeStyle = React.useMemo( - () => getSplitButtonSizeStyle({ size, theme }), - [size, theme] - ); - const colors = React.useMemo( - () => - getSplitButtonColors({ - theme, - mode, - disabled, - customButtonColor, - customTextColor, - }), - [theme, mode, disabled, customButtonColor, customTextColor] - ); - const rippleColor = React.useMemo( - () => - getSplitButtonRippleColor({ - contentColor: colors.contentColor, - customRippleColor, - }), - [colors.contentColor, customRippleColor] - ); - const leadingShape = React.useMemo( - () => - getSplitButtonLeadingShape({ - containerRadius: sizeStyle.containerRadius, - innerRadius: - pressedButton === 'leading' - ? sizeStyle.innerPressedRadius - : sizeStyle.innerRadius, - }), - [ - pressedButton, - sizeStyle.containerRadius, + [leadingInnerRadius, onPressOut, releaseTimingConfig, sizeStyle.innerRadius] + ); + const handleTrailingPressIn = React.useCallback( + (e: GestureResponderEvent) => { + onTrailingPressIn?.(e); + trailingInnerRadius.value = withTiming( sizeStyle.innerPressedRadius, + pressTimingConfig + ); + leadingInnerRadius.value = withTiming( sizeStyle.innerRadius, - ] - ); - const trailingShape = React.useMemo( - () => - getSplitButtonTrailingShape({ - containerRadius: sizeStyle.containerRadius, - innerRadius: - pressedButton === 'trailing' - ? sizeStyle.innerPressedRadius - : sizeStyle.innerRadius, - }), - [ - pressedButton, - sizeStyle.containerRadius, - sizeStyle.innerPressedRadius, + releaseTimingConfig + ); + }, + [ + leadingInnerRadius, + onTrailingPressIn, + pressTimingConfig, + releaseTimingConfig, + sizeStyle.innerPressedRadius, + sizeStyle.innerRadius, + trailingInnerRadius, + ] + ); + const handleTrailingPressOut = React.useCallback( + (e: GestureResponderEvent) => { + onTrailingPressOut?.(e); + trailingInnerRadius.value = withTiming( sizeStyle.innerRadius, - ] - ); - const leadingHitSlop = React.useMemo( - () => getSplitButtonHitSlop({ size, hitSlop }), - [size, hitSlop] - ); - const resolvedTrailingHitSlop = React.useMemo( - () => getSplitButtonHitSlop({ size, hitSlop: trailingHitSlop }), - [size, trailingHitSlop] - ); - - const { color: customLabelColor, fontSize: customLabelSize } = - StyleSheet.flatten(labelStyle) || {}; - const contentColor = - typeof customLabelColor === 'string' - ? customLabelColor - : colors.contentColor; - const labelTextStyle: TextStyle = { - color: colors.contentColor, - ...(theme as Theme).fonts[sizeStyle.labelVariant], - }; - const disabledState = { disabled: true }; - const leadingAccessibilityState = disabled - ? { ...accessibilityState, ...disabledState } - : accessibilityState; - const trailingAccessibilityStateWithDisabled = disabled - ? { ...trailingAccessibilityState, ...disabledState } - : trailingAccessibilityState; - const isElevationEntitled = !disabled && normalizedMode === 'elevated'; - const { current: elevation } = React.useRef( - new Animated.Value(isElevationEntitled ? splitButtonElevation.enabled : 0) - ); - const animateElevation = React.useCallback( - (toValue: number) => { - if (!isElevationEntitled) { - return; - } - - Animated.timing(elevation, { - toValue, - duration: - toValue === splitButtonElevation.pressed - ? theme.motion.duration.short4 - : theme.motion.duration.short3, - easing: Easing.bezier(...theme.motion.easing.standard), - useNativeDriver: false, - }).start(); - }, - [ - elevation, - isElevationEntitled, - theme.motion.duration.short3, - theme.motion.duration.short4, - theme.motion.easing.standard, - ] - ); - const leadingHasTouchHandler = hasTouchHandler({ - onPress, - onPressIn, - onPressOut, - onLongPress, - }); - const trailingHasTouchHandler = hasTouchHandler({ - onPress: onTrailingPress, - onPressIn: onTrailingPressIn, - onPressOut: onTrailingPressOut, - onLongPress: onTrailingLongPress, - }); - const handleLeadingPressIn = React.useCallback( - (e: GestureResponderEvent) => { - onPressIn?.(e); - setPressedButton('leading'); - animateElevation(splitButtonElevation.pressed); - }, - [animateElevation, onPressIn] - ); - const handleLeadingPressOut = React.useCallback( - (e: GestureResponderEvent) => { - onPressOut?.(e); - setPressedButton(null); - animateElevation(splitButtonElevation.enabled); - }, - [animateElevation, onPressOut] - ); - const handleTrailingPressIn = React.useCallback( - (e: GestureResponderEvent) => { - onTrailingPressIn?.(e); - setPressedButton('trailing'); - animateElevation(splitButtonElevation.pressed); - }, - [animateElevation, onTrailingPressIn] - ); - const handleTrailingPressOut = React.useCallback( - (e: GestureResponderEvent) => { - onTrailingPressOut?.(e); - setPressedButton(null); - animateElevation(splitButtonElevation.enabled); - }, - [animateElevation, onTrailingPressOut] - ); - React.useEffect(() => { - if (!isElevationEntitled) { - setPressedButton(null); - } - - Animated.timing(elevation, { - toValue: isElevationEntitled ? splitButtonElevation.enabled : 0, - duration: 0, - useNativeDriver: false, - }).start(); - }, [elevation, isElevationEntitled]); + releaseTimingConfig + ); + }, + [ + onTrailingPressOut, + releaseTimingConfig, + sizeStyle.innerRadius, + trailingInnerRadius, + ] + ); + React.useEffect(() => { + leadingInnerRadius.value = sizeStyle.innerRadius; + trailingInnerRadius.value = sizeStyle.innerRadius; + }, [leadingInnerRadius, sizeStyle.innerRadius, trailingInnerRadius]); - const commonButtonStyle: ViewStyle = { - height: sizeStyle.containerHeight, - backgroundColor: - colors.containerOpacity < 1 ? 'transparent' : colors.containerColor, - borderColor: colors.borderColor, - borderWidth: colors.borderWidth, - }; + const commonButtonStyle: ViewStyle = { + height: sizeStyle.containerHeight, + backgroundColor: + colors.containerOpacity < 1 ? 'transparent' : colors.containerColor, + borderColor: colors.borderColor, + borderWidth: colors.borderWidth, + }; + const elevation = isElevationEntitled + ? splitButtonElevation.enabled + : splitButtonElevation.disabled; + const getTestID = (suffix: string) => + testID ? `${testID}-${suffix}` : undefined; - return ( - > - } + return ( + + - + - - - + ) : null} + {loading ? ( + + ) : null} + - {icon && !loading ? ( - - ) : null} - {loading ? ( - - ) : null} - - {label} - - - - + {label} + + + + - + + - - - - - - - - - ); - } -); + + + + + + ); +}; const ButtonBackground = ({ backgroundColor, diff --git a/src/components/SplitButton/tokens.ts b/src/components/SplitButton/tokens.ts index 75c4d569cd..575c296f66 100644 --- a/src/components/SplitButton/tokens.ts +++ b/src/components/SplitButton/tokens.ts @@ -103,6 +103,7 @@ export const splitButtonSizeTokens: Record< export const splitButtonMinInteractiveSize = 48; export const splitButtonElevation = { + disabled: 0, enabled: 1, pressed: 2, } as const; diff --git a/src/components/SplitButton/utils.ts b/src/components/SplitButton/utils.ts index 1a2ae78f5f..077c17f883 100644 --- a/src/components/SplitButton/utils.ts +++ b/src/components/SplitButton/utils.ts @@ -10,7 +10,7 @@ import { } from './tokens'; import { tokens } from '../../theme/tokens'; import { cornerFull } from '../../theme/tokens/sys/shape'; -import type { InternalTheme, Theme } from '../../types'; +import type { InternalTheme } from '../../types'; import type { Props as TouchableRippleProps } from '../TouchableRipple/TouchableRipple'; const stateOpacity = tokens.md.sys.state.opacity; @@ -32,7 +32,7 @@ export const normalizeSplitButtonMode = ( export const resolveSplitButtonCorner = ( theme: InternalTheme, key: SplitButtonShapeKey -) => (key === 'full' ? cornerFull : (theme as Theme).shapes.corner[key]); +) => (key === 'full' ? cornerFull : theme.shapes.corner[key]); export const getSplitButtonSizeStyle = ({ size, @@ -65,7 +65,7 @@ const getSplitButtonContainerColor = ({ disabled?: boolean; customButtonColor?: ColorValue; }) => { - const { colors } = theme as Theme; + const { colors } = theme; if (customButtonColor && !disabled) { return customButtonColor; @@ -101,7 +101,7 @@ const getSplitButtonContentColor = ({ disabled?: boolean; customTextColor?: ColorValue; }) => { - const { colors } = theme as Theme; + const { colors } = theme; if (customTextColor && !disabled) { return customTextColor; @@ -157,7 +157,7 @@ export const getSplitButtonColors = ({ return { containerColor, contentColor, - borderColor: isOutlined ? (theme as Theme).colors.outline : 'transparent', + borderColor: isOutlined ? theme.colors.outlineVariant : 'transparent', borderWidth: isOutlined ? 1 : 0, containerOpacity: disabled && normalizedMode !== 'outlined' diff --git a/src/components/__tests__/SplitButton.test.tsx b/src/components/__tests__/SplitButton.test.tsx index 3a7bb87c1d..674b8ede72 100644 --- a/src/components/__tests__/SplitButton.test.tsx +++ b/src/components/__tests__/SplitButton.test.tsx @@ -1,5 +1,5 @@ import * as React from 'react'; -import { StyleSheet } from 'react-native'; +import { PlatformColor, StyleSheet } from 'react-native'; import { fireEvent } from '@testing-library/react-native'; @@ -10,6 +10,7 @@ import { getSplitButtonColors, getSplitButtonHitSlop, getSplitButtonLeadingShape, + getSplitButtonRippleColor, getSplitButtonSizeStyle, getSplitButtonTrailingShape, normalizeSplitButtonMode, @@ -27,11 +28,22 @@ const styles = StyleSheet.create({ }, }); -it('renders a filled split button by default', () => { - const { getByTestId } = render( - {}} onTrailingPress={() => {}} /> +const renderSplitButton = ( + props: Partial> = {} +) => + render( + {}} + onTrailingPress={() => {}} + {...props} + /> ); +it('renders a filled split button by default', () => { + const { getByTestId } = renderSplitButton(); + expect(getByTestId('split-button-label')).toHaveTextContent('Send'); expect(getByTestId('split-button-container')).toHaveStyle({ height: 40, @@ -43,13 +55,7 @@ it('renders a filled split button by default', () => { it('calls leading and trailing press handlers separately', () => { const onPress = jest.fn(); const onTrailingPress = jest.fn(); - const { getByTestId } = render( - - ); + const { getByTestId } = renderSplitButton({ onPress, onTrailingPress }); fireEvent.press(getByTestId('split-button-leading')); fireEvent.press(getByTestId('split-button-trailing')); @@ -65,17 +71,14 @@ it('calls leading and trailing press-in and press-out handlers separately', () = const onTrailingPress = jest.fn(); const onTrailingPressIn = jest.fn(); const onTrailingPressOut = jest.fn(); - const { getByTestId } = render( - - ); + const { getByTestId } = renderSplitButton({ + onPress, + onPressIn, + onPressOut, + onTrailingPress, + onTrailingPressIn, + onTrailingPressOut, + }); fireEvent(getByTestId('split-button-leading'), 'onPressIn'); fireEvent(getByTestId('split-button-leading'), 'onPressOut'); @@ -88,41 +91,22 @@ it('calls leading and trailing press-in and press-out handlers separately', () = expect(onTrailingPressOut).toHaveBeenCalledTimes(1); }); -it('uses pressed inner-corner tokens for the active side', () => { +it('uses resting inner-corner tokens for both sides', () => { const theme = getTheme(); - const { getByTestId } = render( - {}} onTrailingPress={() => {}} /> - ); - - fireEvent(getByTestId('split-button-leading'), 'onPressIn'); + const { getByTestId } = renderSplitButton(); expect(getByTestId('split-button-leading-container')).toHaveStyle({ - borderTopEndRadius: theme.shapes.corner.medium, - borderBottomEndRadius: theme.shapes.corner.medium, + borderTopEndRadius: theme.shapes.corner.extraSmall, + borderBottomEndRadius: theme.shapes.corner.extraSmall, }); expect(getByTestId('split-button-trailing-container')).toHaveStyle({ borderTopStartRadius: theme.shapes.corner.extraSmall, borderBottomStartRadius: theme.shapes.corner.extraSmall, }); - - fireEvent(getByTestId('split-button-leading'), 'onPressOut'); - fireEvent(getByTestId('split-button-trailing'), 'onPressIn'); - - expect(getByTestId('split-button-trailing-container')).toHaveStyle({ - borderTopStartRadius: theme.shapes.corner.medium, - borderBottomStartRadius: theme.shapes.corner.medium, - }); }); it('marks both press targets disabled when disabled', () => { - const { getByTestId } = render( - {}} - onTrailingPress={() => {}} - /> - ); + const { getByTestId } = renderSplitButton({ disabled: true }); expect(getByTestId('split-button-leading').props.accessibilityState).toEqual({ disabled: true, @@ -135,16 +119,11 @@ it('marks both press targets disabled when disabled', () => { }); it('passes custom styles to the correct target', () => { - const { getByTestId } = render( - {}} - onTrailingPress={() => {}} - leadingButtonStyle={styles.leading} - trailingButtonStyle={styles.trailing} - labelStyle={styles.label} - /> - ); + const { getByTestId } = renderSplitButton({ + leadingButtonStyle: styles.leading, + trailingButtonStyle: styles.trailing, + labelStyle: styles.label, + }); expect(getByTestId('split-button-leading-container')).toHaveStyle( styles.leading @@ -156,14 +135,9 @@ it('passes custom styles to the correct target', () => { }); it('merges trailing accessibility state with expanded state', () => { - const { getByTestId } = render( - {}} - onTrailingPress={() => {}} - trailingAccessibilityState={{ expanded: true }} - /> - ); + const { getByTestId } = renderSplitButton({ + trailingAccessibilityState: { expanded: true }, + }); expect( getByTestId('split-button-trailing').props.accessibilityState @@ -172,6 +146,16 @@ it('merges trailing accessibility state with expanded state', () => { }); }); +it('does not add SplitButton test IDs unless testID is provided', () => { + const { queryByTestId } = render( + {}} onTrailingPress={() => {}} /> + ); + + expect(queryByTestId('split-button-container')).toBeNull(); + expect(queryByTestId('split-button-leading')).toBeNull(); + expect(queryByTestId('split-button-trailing')).toBeNull(); +}); + describe('SplitButton utils', () => { it('normalizes supported MD3 modes', () => { expect(normalizeSplitButtonMode('filled')).toBe('filled'); @@ -192,10 +176,28 @@ describe('SplitButton utils', () => { theme.colors.primary ); expect(getSplitButtonColors({ theme, mode: 'outlined' }).borderColor).toBe( - theme.colors.outline + theme.colors.outlineVariant ); }); + it('resolves ripple colors from overrides, string content colors, and opaque colors', () => { + const theme = getTheme(); + const customRippleColor = 'rgba(1, 2, 3, 0.4)'; + + expect( + getSplitButtonRippleColor({ + contentColor: theme.colors.primary, + customRippleColor, + }) + ).toBe(customRippleColor); + expect( + getSplitButtonRippleColor({ contentColor: theme.colors.primary }) + ).toBe('rgba(103, 80, 164, 0.1)'); + expect( + getSplitButtonRippleColor({ contentColor: PlatformColor('label') }) + ).toBeUndefined(); + }); + it('resolves per-size tokens against theme shape values', () => { const theme = getTheme(); const sizeStyle = getSplitButtonSizeStyle({ theme, size: 'large' }); From 7ce1d74e39a9642662ab36d01a5d71cf76a64ced Mon Sep 17 00:00:00 2001 From: Maciej Lodygowski Date: Tue, 30 Jun 2026 12:04:02 +0200 Subject: [PATCH 3/7] fix: address split button review feedback --- src/components/SplitButton/SplitButton.tsx | 25 +++-- src/components/__tests__/SplitButton.test.tsx | 96 +++++++++---------- 2 files changed, 55 insertions(+), 66 deletions(-) diff --git a/src/components/SplitButton/SplitButton.tsx b/src/components/SplitButton/SplitButton.tsx index 97a4e818fd..5e9fc22f3f 100644 --- a/src/components/SplitButton/SplitButton.tsx +++ b/src/components/SplitButton/SplitButton.tsx @@ -1,13 +1,12 @@ import * as React from 'react'; -import { +import { StyleSheet, View } from 'react-native'; +import type { AccessibilityState, ColorValue, GestureResponderEvent, PressableAndroidRippleConfig, StyleProp, - StyleSheet, TextStyle, - View, ViewProps, ViewStyle, } from 'react-native'; @@ -35,10 +34,10 @@ import type { $Omit, ThemeProp } from '../../types'; import hasTouchHandler from '../../utils/hasTouchHandler'; import ActivityIndicator from '../ActivityIndicator'; import { getButtonTouchableRippleStyle } from '../Button/utils'; -import Icon, { IconSource } from '../Icon'; +import Icon, { type IconSource } from '../Icon'; import Surface from '../Surface'; import TouchableRipple, { - Props as TouchableRippleProps, + type Props as TouchableRippleProps, } from '../TouchableRipple/TouchableRipple'; import Text from '../Typography/Text'; @@ -320,19 +319,19 @@ const SplitButton = ({ ); const leadingAnimatedShapeStyle = useAnimatedStyle( () => ({ - ...getSplitButtonLeadingShape({ - containerRadius: sizeStyle.containerRadius, - innerRadius: leadingInnerRadius.value, - }), + borderTopStartRadius: sizeStyle.containerRadius, + borderBottomStartRadius: sizeStyle.containerRadius, + borderTopEndRadius: leadingInnerRadius.value, + borderBottomEndRadius: leadingInnerRadius.value, }), [sizeStyle.containerRadius] ); const trailingAnimatedShapeStyle = useAnimatedStyle( () => ({ - ...getSplitButtonTrailingShape({ - containerRadius: sizeStyle.containerRadius, - innerRadius: trailingInnerRadius.value, - }), + borderTopStartRadius: trailingInnerRadius.value, + borderBottomStartRadius: trailingInnerRadius.value, + borderTopEndRadius: sizeStyle.containerRadius, + borderBottomEndRadius: sizeStyle.containerRadius, }), [sizeStyle.containerRadius] ); diff --git a/src/components/__tests__/SplitButton.test.tsx b/src/components/__tests__/SplitButton.test.tsx index 674b8ede72..d9c58712fd 100644 --- a/src/components/__tests__/SplitButton.test.tsx +++ b/src/components/__tests__/SplitButton.test.tsx @@ -1,10 +1,10 @@ import * as React from 'react'; import { PlatformColor, StyleSheet } from 'react-native'; -import { fireEvent } from '@testing-library/react-native'; +import { describe, expect, it, jest } from '@jest/globals'; import { getTheme } from '../../core/theming'; -import { render } from '../../test-utils'; +import { fireEvent, render, screen, userEvent } from '../../test-utils'; import SplitButton from '../SplitButton/SplitButton'; import { getSplitButtonColors, @@ -41,49 +41,46 @@ const renderSplitButton = ( /> ); -it('renders a filled split button by default', () => { - const { getByTestId } = renderSplitButton(); +it('renders a filled split button by default', async () => { + await renderSplitButton(); - expect(getByTestId('split-button-label')).toHaveTextContent('Send'); - expect(getByTestId('split-button-container')).toHaveStyle({ + expect(screen.getByTestId('split-button-label')).toHaveTextContent('Send'); + expect(screen.getByTestId('split-button-container')).toHaveStyle({ height: 40, }); - expect(getByTestId('split-button-leading-container')).toBeTruthy(); - expect(getByTestId('split-button-trailing-container')).toBeTruthy(); + expect(screen.getByTestId('split-button-leading-container')).toBeTruthy(); + expect(screen.getByTestId('split-button-trailing-container')).toBeTruthy(); }); -it('calls leading and trailing press handlers separately', () => { +it('calls leading and trailing press handlers separately', async () => { + const user = userEvent.setup(); const onPress = jest.fn(); const onTrailingPress = jest.fn(); - const { getByTestId } = renderSplitButton({ onPress, onTrailingPress }); + await renderSplitButton({ onPress, onTrailingPress }); - fireEvent.press(getByTestId('split-button-leading')); - fireEvent.press(getByTestId('split-button-trailing')); + await user.press(screen.getByTestId('split-button-leading')); + await user.press(screen.getByTestId('split-button-trailing')); expect(onPress).toHaveBeenCalledTimes(1); expect(onTrailingPress).toHaveBeenCalledTimes(1); }); -it('calls leading and trailing press-in and press-out handlers separately', () => { - const onPress = jest.fn(); +it('calls leading and trailing press-in and press-out handlers separately', async () => { const onPressIn = jest.fn(); const onPressOut = jest.fn(); - const onTrailingPress = jest.fn(); const onTrailingPressIn = jest.fn(); const onTrailingPressOut = jest.fn(); - const { getByTestId } = renderSplitButton({ - onPress, + await renderSplitButton({ onPressIn, onPressOut, - onTrailingPress, onTrailingPressIn, onTrailingPressOut, }); - fireEvent(getByTestId('split-button-leading'), 'onPressIn'); - fireEvent(getByTestId('split-button-leading'), 'onPressOut'); - fireEvent(getByTestId('split-button-trailing'), 'onPressIn'); - fireEvent(getByTestId('split-button-trailing'), 'onPressOut'); + await fireEvent(screen.getByTestId('split-button-leading'), 'onPressIn'); + await fireEvent(screen.getByTestId('split-button-leading'), 'onPressOut'); + await fireEvent(screen.getByTestId('split-button-trailing'), 'onPressIn'); + await fireEvent(screen.getByTestId('split-button-trailing'), 'onPressOut'); expect(onPressIn).toHaveBeenCalledTimes(1); expect(onPressOut).toHaveBeenCalledTimes(1); @@ -91,69 +88,62 @@ it('calls leading and trailing press-in and press-out handlers separately', () = expect(onTrailingPressOut).toHaveBeenCalledTimes(1); }); -it('uses resting inner-corner tokens for both sides', () => { +it('uses resting inner-corner tokens for both sides', async () => { const theme = getTheme(); - const { getByTestId } = renderSplitButton(); + await renderSplitButton(); - expect(getByTestId('split-button-leading-container')).toHaveStyle({ + expect(screen.getByTestId('split-button-leading-container')).toHaveStyle({ borderTopEndRadius: theme.shapes.corner.extraSmall, borderBottomEndRadius: theme.shapes.corner.extraSmall, }); - expect(getByTestId('split-button-trailing-container')).toHaveStyle({ + expect(screen.getByTestId('split-button-trailing-container')).toHaveStyle({ borderTopStartRadius: theme.shapes.corner.extraSmall, borderBottomStartRadius: theme.shapes.corner.extraSmall, }); }); -it('marks both press targets disabled when disabled', () => { - const { getByTestId } = renderSplitButton({ disabled: true }); +it('marks both press targets disabled when disabled', async () => { + await renderSplitButton({ disabled: true }); - expect(getByTestId('split-button-leading').props.accessibilityState).toEqual({ - disabled: true, - }); - expect(getByTestId('split-button-trailing').props.accessibilityState).toEqual( - { - disabled: true, - } - ); + expect(screen.getByTestId('split-button-leading')).toBeDisabled(); + expect(screen.getByTestId('split-button-trailing')).toBeDisabled(); }); -it('passes custom styles to the correct target', () => { - const { getByTestId } = renderSplitButton({ +it('passes custom styles to the correct target', async () => { + await renderSplitButton({ leadingButtonStyle: styles.leading, trailingButtonStyle: styles.trailing, labelStyle: styles.label, }); - expect(getByTestId('split-button-leading-container')).toHaveStyle( + expect(screen.getByTestId('split-button-leading-container')).toHaveStyle( styles.leading ); - expect(getByTestId('split-button-trailing-container')).toHaveStyle( + expect(screen.getByTestId('split-button-trailing-container')).toHaveStyle( styles.trailing ); - expect(getByTestId('split-button-label')).toHaveStyle(styles.label); + expect(screen.getByTestId('split-button-label')).toHaveStyle(styles.label); }); -it('merges trailing accessibility state with expanded state', () => { - const { getByTestId } = renderSplitButton({ +it('merges trailing accessibility state with expanded state', async () => { + await renderSplitButton({ trailingAccessibilityState: { expanded: true }, }); - expect( - getByTestId('split-button-trailing').props.accessibilityState - ).toMatchObject({ - expanded: true, - }); + expect(screen.getByTestId('split-button-trailing')).toHaveProp( + 'accessibilityState', + expect.objectContaining({ expanded: true }) + ); }); -it('does not add SplitButton test IDs unless testID is provided', () => { - const { queryByTestId } = render( +it('does not add SplitButton test IDs unless testID is provided', async () => { + await render( {}} onTrailingPress={() => {}} /> ); - expect(queryByTestId('split-button-container')).toBeNull(); - expect(queryByTestId('split-button-leading')).toBeNull(); - expect(queryByTestId('split-button-trailing')).toBeNull(); + expect(screen.queryByTestId('split-button-container')).toBeNull(); + expect(screen.queryByTestId('split-button-leading')).toBeNull(); + expect(screen.queryByTestId('split-button-trailing')).toBeNull(); }); describe('SplitButton utils', () => { From 5cc89d10f8ea2b6243ea37d4d398b36c8f9ccad5 Mon Sep 17 00:00:00 2001 From: Konrad Rydygier Date: Tue, 25 Aug 2026 14:45:17 +0200 Subject: [PATCH 4/7] fix: address remaining SplitButton review feedback Removes the no-op mode normalization, derives the disabled outlined border color from onSurface per MD3 tokens, drops the unused elevation.pressed token and the leading/style prop omissions that View doesn't have, replaces icon-label spacing and the hardcoded touch-target size with proper tokens, avoids a redundant font style on the label, adds a sizes example, and trims utils unit tests down to public component behavior. --- example/src/Examples/SplitButtonExample.tsx | 23 ++++ src/components/SplitButton/SplitButton.tsx | 22 ++-- src/components/SplitButton/tokens.ts | 9 +- src/components/SplitButton/utils.ts | 49 ++++---- src/components/__tests__/SplitButton.test.tsx | 112 +----------------- 5 files changed, 70 insertions(+), 145 deletions(-) diff --git a/example/src/Examples/SplitButtonExample.tsx b/example/src/Examples/SplitButtonExample.tsx index e6ed5aebe4..17bbaed4ab 100644 --- a/example/src/Examples/SplitButtonExample.tsx +++ b/example/src/Examples/SplitButtonExample.tsx @@ -6,6 +6,13 @@ import { List, Menu, SplitButton, Switch, useTheme } from 'react-native-paper'; import ScreenWrapper from '../ScreenWrapper'; const modes = ['filled', 'tonal', 'elevated', 'outlined'] as const; +const sizes = [ + 'extra-small', + 'small', + 'medium', + 'large', + 'extra-large', +] as const; const SplitButtonExample = () => { const [menuVisible, setMenuVisible] = React.useState(false); const [disabled, setDisabled] = React.useState(false); @@ -72,6 +79,22 @@ const SplitButtonExample = () => { + + + {sizes.map((size) => ( + {}} + onTrailingPress={() => {}} + trailingAccessibilityLabel={`${size} options`} + /> + ))} + + + & { +export type Props = $Omit & { /** * Mode of the split button. * - `filled` - high-emphasis split button for important or final actions. @@ -261,7 +261,6 @@ const SplitButton = ({ ...rest }: Props) => { const theme = useInternalTheme(themeOverrides); - const normalizedMode = normalizeSplitButtonMode(mode); const sizeStyle = React.useMemo( () => getSplitButtonSizeStyle({ size, theme }), [size, theme] @@ -352,7 +351,6 @@ const SplitButton = ({ : colors.contentColor; const labelTextStyle: TextStyle = { color: colors.contentColor, - ...theme.fonts[sizeStyle.labelVariant], }; const disabledState = { disabled: true }; const leadingAccessibilityState = disabled @@ -361,7 +359,7 @@ const SplitButton = ({ const trailingAccessibilityStateWithDisabled = disabled ? { ...trailingAccessibilityState, ...disabledState } : trailingAccessibilityState; - const isElevationEntitled = !disabled && normalizedMode === 'elevated'; + const isElevationEntitled = !disabled && mode === 'elevated'; const leadingHasTouchHandler = hasTouchHandler({ onPress, onPressIn, @@ -549,7 +547,7 @@ const SplitButton = ({ style={[ styles.label, icon || loading - ? { marginStart: sizeStyle.leadingIconSize / 3 } + ? { marginStart: sizeStyle.iconLabelGap } : null, labelTextStyle, labelStyle, @@ -660,12 +658,12 @@ const styles = StyleSheet.create({ maxWidth: '100%', }, leading: { - minWidth: 48, + minWidth: splitButtonMinInteractiveSize, flexShrink: 1, borderStyle: 'solid', }, trailing: { - minWidth: 48, + minWidth: splitButtonMinInteractiveSize, borderStyle: 'solid', }, ripple: { diff --git a/src/components/SplitButton/tokens.ts b/src/components/SplitButton/tokens.ts index 575c296f66..7bf2cedd03 100644 --- a/src/components/SplitButton/tokens.ts +++ b/src/components/SplitButton/tokens.ts @@ -18,6 +18,7 @@ export type SplitButtonSizeTokens = { leadingButtonLeadingSpace: number; leadingButtonTrailingSpace: number; leadingIconSize: number; + iconLabelGap: number; trailingButtonLeadingSpace: number; trailingButtonTrailingSpace: number; trailingIconSize: number; @@ -37,6 +38,7 @@ export const splitButtonSizeTokens: Record< leadingButtonLeadingSpace: 12, leadingButtonTrailingSpace: 10, leadingIconSize: 20, + iconLabelGap: 8, trailingButtonLeadingSpace: 13, trailingButtonTrailingSpace: 13, trailingIconSize: 22, @@ -51,6 +53,7 @@ export const splitButtonSizeTokens: Record< leadingButtonLeadingSpace: 16, leadingButtonTrailingSpace: 12, leadingIconSize: 20, + iconLabelGap: 8, trailingButtonLeadingSpace: 13, trailingButtonTrailingSpace: 13, trailingIconSize: 22, @@ -65,6 +68,7 @@ export const splitButtonSizeTokens: Record< leadingButtonLeadingSpace: 24, leadingButtonTrailingSpace: 24, leadingIconSize: 24, + iconLabelGap: 8, trailingButtonLeadingSpace: 15, trailingButtonTrailingSpace: 15, trailingIconSize: 26, @@ -79,6 +83,7 @@ export const splitButtonSizeTokens: Record< leadingButtonLeadingSpace: 48, leadingButtonTrailingSpace: 48, leadingIconSize: 32, + iconLabelGap: 12, trailingButtonLeadingSpace: 29, trailingButtonTrailingSpace: 29, trailingIconSize: 38, @@ -93,6 +98,7 @@ export const splitButtonSizeTokens: Record< leadingButtonLeadingSpace: 64, leadingButtonTrailingSpace: 64, leadingIconSize: 40, + iconLabelGap: 16, trailingButtonLeadingSpace: 43, trailingButtonTrailingSpace: 43, trailingIconSize: 50, @@ -102,8 +108,9 @@ export const splitButtonSizeTokens: Record< export const splitButtonMinInteractiveSize = 48; +export const splitButtonDisabledOutlineOpacity = 0.12; + export const splitButtonElevation = { disabled: 0, enabled: 1, - pressed: 2, } as const; diff --git a/src/components/SplitButton/utils.ts b/src/components/SplitButton/utils.ts index 077c17f883..5f060aed7e 100644 --- a/src/components/SplitButton/utils.ts +++ b/src/components/SplitButton/utils.ts @@ -1,8 +1,9 @@ -import type { ColorValue, Insets, ViewStyle } from 'react-native'; +import type { ColorValue, ViewStyle } from 'react-native'; import color from 'color'; import { + splitButtonDisabledOutlineOpacity, splitButtonMinInteractiveSize, splitButtonSizeTokens, type SplitButtonShapeKey, @@ -17,18 +18,6 @@ const stateOpacity = tokens.md.sys.state.opacity; export type SplitButtonMode = 'filled' | 'tonal' | 'elevated' | 'outlined'; -export type SplitButtonNormalizedMode = - | 'filled' - | 'tonal' - | 'elevated' - | 'outlined'; - -export const normalizeSplitButtonMode = ( - mode: SplitButtonMode -): SplitButtonNormalizedMode => { - return mode; -}; - export const resolveSplitButtonCorner = ( theme: InternalTheme, key: SplitButtonShapeKey @@ -60,7 +49,7 @@ const getSplitButtonContainerColor = ({ disabled, customButtonColor, }: { - mode: SplitButtonNormalizedMode; + mode: SplitButtonMode; theme: InternalTheme; disabled?: boolean; customButtonColor?: ColorValue; @@ -96,7 +85,7 @@ const getSplitButtonContentColor = ({ disabled, customTextColor, }: { - mode: SplitButtonNormalizedMode; + mode: SplitButtonMode; theme: InternalTheme; disabled?: boolean; customTextColor?: ColorValue; @@ -139,28 +128,38 @@ export const getSplitButtonColors = ({ customButtonColor?: ColorValue; customTextColor?: ColorValue; }) => { - const normalizedMode = normalizeSplitButtonMode(mode); const containerColor = getSplitButtonContainerColor({ - mode: normalizedMode, + mode, theme, disabled, customButtonColor, }); const contentColor = getSplitButtonContentColor({ - mode: normalizedMode, + mode, theme, disabled, customTextColor, }); - const isOutlined = normalizedMode === 'outlined'; + const isOutlined = mode === 'outlined'; + const disabledBorderColor = + typeof theme.colors.onSurface === 'string' + ? color(theme.colors.onSurface) + .alpha(splitButtonDisabledOutlineOpacity) + .rgb() + .string() + : theme.colors.outlineVariant; return { containerColor, contentColor, - borderColor: isOutlined ? theme.colors.outlineVariant : 'transparent', + borderColor: isOutlined + ? disabled + ? disabledBorderColor + : theme.colors.outlineVariant + : 'transparent', borderWidth: isOutlined ? 1 : 0, containerOpacity: - disabled && normalizedMode !== 'outlined' + disabled && mode !== 'outlined' ? stateOpacity.pressed : stateOpacity.enabled, contentOpacity: disabled ? stateOpacity.disabled : stateOpacity.enabled, @@ -206,12 +205,10 @@ export const getSplitButtonHitSlop = ({ return hitSlop; } - const insetHitSlop = (hitSlop || {}) as Insets; - return { - ...insetHitSlop, - top: insetHitSlop.top ?? verticalSlop, - bottom: insetHitSlop.bottom ?? verticalSlop, + ...hitSlop, + top: hitSlop?.top ?? verticalSlop, + bottom: hitSlop?.bottom ?? verticalSlop, }; }; diff --git a/src/components/__tests__/SplitButton.test.tsx b/src/components/__tests__/SplitButton.test.tsx index d9c58712fd..7b2d4af9c2 100644 --- a/src/components/__tests__/SplitButton.test.tsx +++ b/src/components/__tests__/SplitButton.test.tsx @@ -1,20 +1,11 @@ import * as React from 'react'; -import { PlatformColor, StyleSheet } from 'react-native'; +import { StyleSheet } from 'react-native'; -import { describe, expect, it, jest } from '@jest/globals'; +import { expect, it, jest } from '@jest/globals'; import { getTheme } from '../../core/theming'; import { fireEvent, render, screen, userEvent } from '../../test-utils'; import SplitButton from '../SplitButton/SplitButton'; -import { - getSplitButtonColors, - getSplitButtonHitSlop, - getSplitButtonLeadingShape, - getSplitButtonRippleColor, - getSplitButtonSizeStyle, - getSplitButtonTrailingShape, - normalizeSplitButtonMode, -} from '../SplitButton/utils'; const styles = StyleSheet.create({ leading: { @@ -88,17 +79,12 @@ it('calls leading and trailing press-in and press-out handlers separately', asyn expect(onTrailingPressOut).toHaveBeenCalledTimes(1); }); -it('uses resting inner-corner tokens for both sides', async () => { +it('dims the outline color for a disabled outlined split button', async () => { const theme = getTheme(); - await renderSplitButton(); + await renderSplitButton({ mode: 'outlined', disabled: true }); - expect(screen.getByTestId('split-button-leading-container')).toHaveStyle({ - borderTopEndRadius: theme.shapes.corner.extraSmall, - borderBottomEndRadius: theme.shapes.corner.extraSmall, - }); - expect(screen.getByTestId('split-button-trailing-container')).toHaveStyle({ - borderTopStartRadius: theme.shapes.corner.extraSmall, - borderBottomStartRadius: theme.shapes.corner.extraSmall, + expect(screen.getByTestId('split-button-leading-container')).not.toHaveStyle({ + borderColor: theme.colors.outlineVariant, }); }); @@ -145,89 +131,3 @@ it('does not add SplitButton test IDs unless testID is provided', async () => { expect(screen.queryByTestId('split-button-leading')).toBeNull(); expect(screen.queryByTestId('split-button-trailing')).toBeNull(); }); - -describe('SplitButton utils', () => { - it('normalizes supported MD3 modes', () => { - expect(normalizeSplitButtonMode('filled')).toBe('filled'); - expect(normalizeSplitButtonMode('tonal')).toBe('tonal'); - expect(normalizeSplitButtonMode('outlined')).toBe('outlined'); - }); - - it('resolves MD3 color roles for modes', () => { - const theme = getTheme(); - - expect(getSplitButtonColors({ theme, mode: 'filled' }).containerColor).toBe( - theme.colors.primary - ); - expect(getSplitButtonColors({ theme, mode: 'tonal' }).contentColor).toBe( - theme.colors.onSecondaryContainer - ); - expect(getSplitButtonColors({ theme, mode: 'elevated' }).contentColor).toBe( - theme.colors.primary - ); - expect(getSplitButtonColors({ theme, mode: 'outlined' }).borderColor).toBe( - theme.colors.outlineVariant - ); - }); - - it('resolves ripple colors from overrides, string content colors, and opaque colors', () => { - const theme = getTheme(); - const customRippleColor = 'rgba(1, 2, 3, 0.4)'; - - expect( - getSplitButtonRippleColor({ - contentColor: theme.colors.primary, - customRippleColor, - }) - ).toBe(customRippleColor); - expect( - getSplitButtonRippleColor({ contentColor: theme.colors.primary }) - ).toBe('rgba(103, 80, 164, 0.1)'); - expect( - getSplitButtonRippleColor({ contentColor: PlatformColor('label') }) - ).toBeUndefined(); - }); - - it('resolves per-size tokens against theme shape values', () => { - const theme = getTheme(); - const sizeStyle = getSplitButtonSizeStyle({ theme, size: 'large' }); - - expect(sizeStyle.containerHeight).toBe(96); - expect(sizeStyle.trailingIconSize).toBe(38); - expect(sizeStyle.innerRadius).toBe(theme.shapes.corner.small); - expect(sizeStyle.innerPressedRadius).toBe( - theme.shapes.corner.largeIncreased - ); - }); - - it('uses logical leading and trailing shapes', () => { - expect( - getSplitButtonLeadingShape({ containerRadius: 20, innerRadius: 4 }) - ).toEqual({ - borderTopStartRadius: 20, - borderBottomStartRadius: 20, - borderTopEndRadius: 4, - borderBottomEndRadius: 4, - }); - expect( - getSplitButtonTrailingShape({ containerRadius: 20, innerRadius: 4 }) - ).toEqual({ - borderTopStartRadius: 4, - borderBottomStartRadius: 4, - borderTopEndRadius: 20, - borderBottomEndRadius: 20, - }); - }); - - it('expands small visual sizes to a 48dp touch target', () => { - expect(getSplitButtonHitSlop({ size: 'extra-small' })).toEqual({ - top: 8, - bottom: 8, - }); - expect(getSplitButtonHitSlop({ size: 'small' })).toEqual({ - top: 4, - bottom: 4, - }); - expect(getSplitButtonHitSlop({ size: 'medium' })).toBeUndefined(); - }); -}); From 5d6f987fa388e6c63a00eb152a8695da81901d3e Mon Sep 17 00:00:00 2001 From: Konrad Rydygier Date: Wed, 26 Aug 2026 13:37:33 +0200 Subject: [PATCH 5/7] fix: review feedback and m3 material alignment --- .../components/SplitButton/SplitButton.mdx | 341 +++++++++++++ .../docs/components/SplitButton/_meta.json | 3 + docs/6.x/docs/components/_meta.json | 7 + docs/component-docs.config.ts | 3 + docs/src/data/componentDocs6x.json | 448 ++++++++++++++++++ docs/src/data/themeColors.ts | 6 +- src/components/SplitButton/SplitButton.tsx | 291 +++++------- .../SplitButton/SplitButtonSurface.tsx | 50 ++ src/components/SplitButton/index.ts | 2 - src/components/SplitButton/tokens.ts | 8 +- src/components/SplitButton/utils.ts | 24 +- src/components/__tests__/SplitButton.test.tsx | 124 ++++- .../__tests__/SplitButtonUtils.test.tsx | 294 ++++++++++++ src/index.tsx | 4 +- 14 files changed, 1425 insertions(+), 180 deletions(-) create mode 100644 docs/6.x/docs/components/SplitButton/SplitButton.mdx create mode 100644 docs/6.x/docs/components/SplitButton/_meta.json create mode 100644 src/components/SplitButton/SplitButtonSurface.tsx delete mode 100644 src/components/SplitButton/index.ts create mode 100644 src/components/__tests__/SplitButtonUtils.test.tsx diff --git a/docs/6.x/docs/components/SplitButton/SplitButton.mdx b/docs/6.x/docs/components/SplitButton/SplitButton.mdx new file mode 100644 index 0000000000..5cbc2992dc --- /dev/null +++ b/docs/6.x/docs/components/SplitButton/SplitButton.mdx @@ -0,0 +1,341 @@ +--- +title: SplitButton +--- + +import PropTable from '@docs/components/PropTable.tsx'; +import ExtendsLink from '@docs/components/ExtendsLink.tsx'; +import ThemeColorsTable from '@docs/components/ThemeColorsTable.tsx'; +import ScreenshotTabs from '@docs/components/ScreenshotTabs.tsx'; +import ExtendedExample from '@docs/components/ExtendedExample.tsx'; + +Split buttons let people trigger a primary action from the leading button +and open or trigger a contextual action from the trailing button. + + + + + +## Usage +```js +import * as React from 'react'; +import { SplitButton } from 'react-native-paper'; + +const MyComponent = () => ( + console.log('Send')} + onTrailingPress={() => console.log('Show options')} + /> +); + +export default MyComponent; +``` + + + ## Props + + + + +
+ +### mode + +
+ + + +
+ +### size + +
+ + + +
+ +### label (required) + +
+ + + +
+ +### icon + +
+ + + +
+ +### trailingIcon + +
+ + + +
+ +### loading + +
+ + + +
+ +### disabled + +
+ + + +
+ +### buttonColor + +
+ + + +
+ +### textColor + +
+ + + +
+ +### rippleColor + +
+ + + +
+ +### onPress + +
+ + + +
+ +### onTrailingPress + +
+ + + +
+ +### onPressIn + +
+ + + +
+ +### onPressOut + +
+ + + +
+ +### onTrailingPressIn + +
+ + + +
+ +### onTrailingPressOut + +
+ + + +
+ +### onLongPress + +
+ + + +
+ +### onTrailingLongPress + +
+ + + +
+ +### delayLongPress + +
+ + + +
+ +### trailingDelayLongPress + +
+ + + +
+ +### accessibilityLabel + +
+ + + +
+ +### trailingAccessibilityLabel + +
+ + + +
+ +### accessibilityState + +
+ + + +
+ +### trailingAccessibilityState + +
+ + + +
+ +### background + +
+ + + +
+ +### style + +
+ + + +
+ +### buttonStyle + +
+ + + +
+ +### leadingButtonStyle + +
+ + + +
+ +### trailingButtonStyle + +
+ + + +
+ +### contentStyle + +
+ + + +
+ +### labelStyle + +
+ + + +
+ +### maxFontSizeMultiplier + +
+ + + +
+ +### hitSlop + +
+ + + +
+ +### trailingHitSlop + +
+ + + +
+ +### theme + +
+ + + +
+ +### testID + +
+ + + + + + + + + ## Theme colors + + + + + diff --git a/docs/6.x/docs/components/SplitButton/_meta.json b/docs/6.x/docs/components/SplitButton/_meta.json new file mode 100644 index 0000000000..e84ed30583 --- /dev/null +++ b/docs/6.x/docs/components/SplitButton/_meta.json @@ -0,0 +1,3 @@ +[ + "SplitButton" +] diff --git a/docs/6.x/docs/components/_meta.json b/docs/6.x/docs/components/_meta.json index 6f793d41a3..b36cc317c3 100644 --- a/docs/6.x/docs/components/_meta.json +++ b/docs/6.x/docs/components/_meta.json @@ -127,6 +127,13 @@ "collapsed": false }, "Snackbar", + { + "type": "dir", + "name": "SplitButton", + "label": "SplitButton", + "collapsible": true, + "collapsed": false + }, "Surface", { "type": "dir", diff --git a/docs/component-docs.config.ts b/docs/component-docs.config.ts index bad25d4eec..a6934750a7 100644 --- a/docs/component-docs.config.ts +++ b/docs/component-docs.config.ts @@ -120,6 +120,9 @@ const pages = { SegmentedButtons: 'SegmentedButtons/SegmentedButtons', }, Snackbar: 'Snackbar', + SplitButton: { + SplitButton: 'SplitButton/SplitButton', + }, Surface: 'Surface', Switch: { Switch: 'Switch/Switch', diff --git a/docs/src/data/componentDocs6x.json b/docs/src/data/componentDocs6x.json index 300c315b99..d4c6d2d44b 100644 --- a/docs/src/data/componentDocs6x.json +++ b/docs/src/data/componentDocs6x.json @@ -11142,6 +11142,454 @@ "src/components/Snackbar.tsx" ] }, + "SplitButton/SplitButton": { + "filepath": "SplitButton/SplitButton.tsx", + "title": "SplitButton", + "description": "Split buttons let people trigger a primary action from the leading button\nand open or trigger a contextual action from the trailing button.\n\n## Usage\n```js\nimport * as React from 'react';\nimport { SplitButton } from 'react-native-paper';\n\nconst MyComponent = () => (\n console.log('Send')}\n onTrailingPress={() => console.log('Show options')}\n />\n);\n\nexport default MyComponent;\n```", + "link": "split-button", + "data": { + "description": "Split buttons let people trigger a primary action from the leading button\nand open or trigger a contextual action from the trailing button.\n\n## Usage\n```js\nimport * as React from 'react';\nimport { SplitButton } from 'react-native-paper';\n\nconst MyComponent = () => (\n console.log('Send')}\n onTrailingPress={() => console.log('Show options')}\n />\n);\n\nexport default MyComponent;\n```", + "displayName": "SplitButton", + "methods": [], + "statics": [], + "props": { + "mode": { + "required": false, + "tsType": { + "name": "SplitButtonMode" + }, + "description": "Mode of the split button.\n- `filled` - high-emphasis split button for important or final actions.\n- `tonal` - medium-emphasis split button using secondary container colors.\n- `elevated` - tonal split button with elevation for separation from busy surfaces.\n- `outlined` - medium-emphasis split button with transparent containers and outline.", + "defaultValue": { + "value": "'filled'", + "computed": false + } + }, + "size": { + "required": false, + "tsType": { + "name": "SplitButtonSize" + }, + "description": "Size of the split button.", + "defaultValue": { + "value": "'small'", + "computed": false + } + }, + "label": { + "required": true, + "tsType": { + "name": "string" + }, + "description": "Label text for the leading button." + }, + "icon": { + "required": false, + "tsType": { + "name": "IconSource" + }, + "description": "Icon to display before the label in the leading button." + }, + "trailingIcon": { + "required": false, + "tsType": { + "name": "IconSource" + }, + "description": "Icon to display in the trailing button.", + "defaultValue": { + "value": "'chevron-down'", + "computed": false + } + }, + "loading": { + "required": false, + "tsType": { + "name": "boolean" + }, + "description": "Whether to show a loading indicator in the leading button." + }, + "disabled": { + "required": false, + "tsType": { + "name": "boolean" + }, + "description": "Whether both buttons are disabled." + }, + "buttonColor": { + "required": false, + "tsType": { + "name": "ColorValue" + }, + "description": "Custom container color for both buttons." + }, + "textColor": { + "required": false, + "tsType": { + "name": "ColorValue" + }, + "description": "Custom content color for icons and label." + }, + "rippleColor": { + "required": false, + "tsType": { + "name": "ColorValue" + }, + "description": "Custom ripple color for both buttons." + }, + "onPress": { + "required": false, + "tsType": { + "name": "signature", + "type": "function", + "raw": "(e: GestureResponderEvent) => void", + "signature": { + "arguments": [ + { + "name": "e", + "type": { + "name": "GestureResponderEvent" + } + } + ], + "return": { + "name": "void" + } + } + }, + "description": "Function to execute when the leading button is pressed." + }, + "onTrailingPress": { + "required": false, + "tsType": { + "name": "signature", + "type": "function", + "raw": "(e: GestureResponderEvent) => void", + "signature": { + "arguments": [ + { + "name": "e", + "type": { + "name": "GestureResponderEvent" + } + } + ], + "return": { + "name": "void" + } + } + }, + "description": "Function to execute when the trailing button is pressed." + }, + "onPressIn": { + "required": false, + "tsType": { + "name": "signature", + "type": "function", + "raw": "(e: GestureResponderEvent) => void", + "signature": { + "arguments": [ + { + "name": "e", + "type": { + "name": "GestureResponderEvent" + } + } + ], + "return": { + "name": "void" + } + } + }, + "description": "Function to execute as soon as the leading button is pressed." + }, + "onPressOut": { + "required": false, + "tsType": { + "name": "signature", + "type": "function", + "raw": "(e: GestureResponderEvent) => void", + "signature": { + "arguments": [ + { + "name": "e", + "type": { + "name": "GestureResponderEvent" + } + } + ], + "return": { + "name": "void" + } + } + }, + "description": "Function to execute when the leading button press is released." + }, + "onTrailingPressIn": { + "required": false, + "tsType": { + "name": "signature", + "type": "function", + "raw": "(e: GestureResponderEvent) => void", + "signature": { + "arguments": [ + { + "name": "e", + "type": { + "name": "GestureResponderEvent" + } + } + ], + "return": { + "name": "void" + } + } + }, + "description": "Function to execute as soon as the trailing button is pressed." + }, + "onTrailingPressOut": { + "required": false, + "tsType": { + "name": "signature", + "type": "function", + "raw": "(e: GestureResponderEvent) => void", + "signature": { + "arguments": [ + { + "name": "e", + "type": { + "name": "GestureResponderEvent" + } + } + ], + "return": { + "name": "void" + } + } + }, + "description": "Function to execute when the trailing button press is released." + }, + "onLongPress": { + "required": false, + "tsType": { + "name": "signature", + "type": "function", + "raw": "(e: GestureResponderEvent) => void", + "signature": { + "arguments": [ + { + "name": "e", + "type": { + "name": "GestureResponderEvent" + } + } + ], + "return": { + "name": "void" + } + } + }, + "description": "Function to execute when the leading button is long pressed." + }, + "onTrailingLongPress": { + "required": false, + "tsType": { + "name": "signature", + "type": "function", + "raw": "(e: GestureResponderEvent) => void", + "signature": { + "arguments": [ + { + "name": "e", + "type": { + "name": "GestureResponderEvent" + } + } + ], + "return": { + "name": "void" + } + } + }, + "description": "Function to execute when the trailing button is long pressed." + }, + "delayLongPress": { + "required": false, + "tsType": { + "name": "number" + }, + "description": "The number of milliseconds a user must touch the leading button before executing `onLongPress`." + }, + "trailingDelayLongPress": { + "required": false, + "tsType": { + "name": "number" + }, + "description": "The number of milliseconds a user must touch the trailing button before executing `onTrailingLongPress`." + }, + "accessibilityLabel": { + "required": false, + "tsType": { + "name": "string" + }, + "description": "Accessibility label for the leading button. Falls back to `label`.", + "defaultValue": { + "value": "label", + "computed": true + } + }, + "trailingAccessibilityLabel": { + "required": false, + "tsType": { + "name": "string" + }, + "description": "Accessibility label for the trailing button.", + "defaultValue": { + "value": "'Show options'", + "computed": false + } + }, + "accessibilityState": { + "required": false, + "tsType": { + "name": "AccessibilityState" + }, + "description": "Accessibility state for the leading button." + }, + "trailingAccessibilityState": { + "required": false, + "tsType": { + "name": "AccessibilityState" + }, + "description": "Accessibility state for the trailing button." + }, + "background": { + "required": false, + "tsType": { + "name": "PressableAndroidRippleConfig" + }, + "description": "Type of background drawable to display the feedback (Android).\nhttps://reactnative.dev/docs/pressable#rippleconfig" + }, + "style": { + "required": false, + "tsType": { + "name": "StyleProp", + "elements": [ + { + "name": "ViewStyle" + } + ], + "raw": "StyleProp" + }, + "description": "Style for the outer split-button group." + }, + "buttonStyle": { + "required": false, + "tsType": { + "name": "StyleProp", + "elements": [ + { + "name": "ViewStyle" + } + ], + "raw": "StyleProp" + }, + "description": "Style for both button containers." + }, + "leadingButtonStyle": { + "required": false, + "tsType": { + "name": "StyleProp", + "elements": [ + { + "name": "ViewStyle" + } + ], + "raw": "StyleProp" + }, + "description": "Style for the leading button container." + }, + "trailingButtonStyle": { + "required": false, + "tsType": { + "name": "StyleProp", + "elements": [ + { + "name": "ViewStyle" + } + ], + "raw": "StyleProp" + }, + "description": "Style for the trailing button container." + }, + "contentStyle": { + "required": false, + "tsType": { + "name": "StyleProp", + "elements": [ + { + "name": "ViewStyle" + } + ], + "raw": "StyleProp" + }, + "description": "Style for the leading button content row." + }, + "labelStyle": { + "required": false, + "tsType": { + "name": "StyleProp", + "elements": [ + { + "name": "TextStyle" + } + ], + "raw": "StyleProp" + }, + "description": "Style for the label." + }, + "maxFontSizeMultiplier": { + "required": false, + "tsType": { + "name": "number" + }, + "description": "Specifies the largest possible scale a label font can reach." + }, + "hitSlop": { + "required": false, + "tsType": { + "name": "TouchableRippleProps['hitSlop']", + "raw": "TouchableRippleProps['hitSlop']" + }, + "description": "Sets additional distance outside of the leading button in which a press can be detected." + }, + "trailingHitSlop": { + "required": false, + "tsType": { + "name": "TouchableRippleProps['hitSlop']", + "raw": "TouchableRippleProps['hitSlop']" + }, + "description": "Sets additional distance outside of the trailing button in which a press can be detected." + }, + "theme": { + "required": false, + "tsType": { + "name": "ThemeProp" + }, + "description": "" + }, + "testID": { + "required": false, + "tsType": { + "name": "string" + }, + "description": "TestID used for testing purposes." + } + } + }, + "type": "component", + "dependencies": [ + "src/components/SplitButton/SplitButton.tsx" + ] + }, "Surface": { "filepath": "Surface.tsx", "title": "Surface", diff --git a/docs/src/data/themeColors.ts b/docs/src/data/themeColors.ts index 8a63a757c4..83c8081137 100644 --- a/docs/src/data/themeColors.ts +++ b/docs/src/data/themeColors.ts @@ -323,7 +323,7 @@ export const themeColors = { }, outlined: { textColor: 'theme.colors.onSurfaceVariant', - borderColor: 'theme.colors.outline', + borderColor: 'theme.colors.outlineVariant', }, }, disabled: { @@ -331,6 +331,10 @@ export const themeColors = { backgroundColor: 'theme.colors.onSurface', textColor: 'theme.colors.onSurface', }, + outlined: { + backgroundColor: 'transparent', + textColor: 'theme.colors.onSurface', + }, }, }, Surface: { diff --git a/src/components/SplitButton/SplitButton.tsx b/src/components/SplitButton/SplitButton.tsx index 3841a2c93f..9f6acae366 100644 --- a/src/components/SplitButton/SplitButton.tsx +++ b/src/components/SplitButton/SplitButton.tsx @@ -21,6 +21,7 @@ import Animated, { import { splitButtonElevation, splitButtonMinInteractiveSize, + splitButtonStateLayerOpacity, type SplitButtonSize, } from './tokens'; import { @@ -39,13 +40,12 @@ import ActivityIndicator from '../ActivityIndicator'; import { getButtonTouchableRippleStyle } from '../Button/utils'; import Icon, { type IconSource } from '../Icon'; import Surface from '../Surface'; +import SplitButtonSurface from './SplitButtonSurface'; import TouchableRipple, { type Props as TouchableRippleProps, } from '../TouchableRipple/TouchableRipple'; import Text from '../Typography/Text'; -const AnimatedSurface = Animated.createAnimatedComponent(Surface); - export type Props = $Omit & { /** * Mode of the split button. @@ -226,7 +226,7 @@ const SplitButton = ({ size = 'small', label, icon, - trailingIcon = 'menu-down', + trailingIcon = 'chevron-down', loading, disabled, buttonColor: customButtonColor, @@ -265,8 +265,11 @@ const SplitButton = ({ () => getSplitButtonSizeStyle({ size, theme }), [size, theme] ); - const leadingInnerRadius = useSharedValue(sizeStyle.innerRadius); - const trailingInnerRadius = useSharedValue(sizeStyle.innerRadius); + const isTrailingExpanded = trailingAccessibilityState?.expanded === true; + const trailingIconRotation = useSharedValue(isTrailingExpanded ? 1 : 0); + const trailingInnerRadiusProgress = useSharedValue( + isTrailingExpanded ? 1 : 0 + ); const colors = React.useMemo( () => getSplitButtonColors({ @@ -278,13 +281,19 @@ const SplitButton = ({ }), [theme, mode, disabled, customButtonColor, customTextColor] ); + const { color: customLabelColor, fontSize: customLabelSize } = + StyleSheet.flatten(labelStyle) || {}; + const contentColor = + typeof customLabelColor === 'string' + ? customLabelColor + : colors.contentColor; const rippleColor = React.useMemo( () => getSplitButtonRippleColor({ - contentColor: colors.contentColor, + contentColor, customRippleColor, }), - [colors.contentColor, customRippleColor] + [contentColor, customRippleColor] ); const leadingShape = React.useMemo( () => @@ -309,31 +318,32 @@ const SplitButton = ({ }), [theme.motion.duration.short4, theme.motion.easing.standard] ); - const releaseTimingConfig = React.useMemo( - () => ({ - duration: theme.motion.duration.short3, - easing: Easing.bezier(...theme.motion.easing.standard), - }), - [theme.motion.duration.short3, theme.motion.easing.standard] - ); - const leadingAnimatedShapeStyle = useAnimatedStyle( - () => ({ - borderTopStartRadius: sizeStyle.containerRadius, - borderBottomStartRadius: sizeStyle.containerRadius, - borderTopEndRadius: leadingInnerRadius.value, - borderBottomEndRadius: leadingInnerRadius.value, - }), - [sizeStyle.containerRadius] - ); - const trailingAnimatedShapeStyle = useAnimatedStyle( - () => ({ - borderTopStartRadius: trailingInnerRadius.value, - borderBottomStartRadius: trailingInnerRadius.value, - borderTopEndRadius: sizeStyle.containerRadius, - borderBottomEndRadius: sizeStyle.containerRadius, - }), - [sizeStyle.containerRadius] - ); + // Interpolated between `trailingShape`'s own Start radius (resting) and + // its End radius (expanded), so the Start corner always lands exactly on + // the same radius already driving the segment's static End corners. + const trailingRestingRadius = trailingShape.borderTopStartRadius as number; + const trailingExpandedRadius = trailingShape.borderTopEndRadius as number; + const trailingAnimatedShapeStyle = useAnimatedStyle(() => { + const radius = + trailingRestingRadius + + trailingInnerRadiusProgress.value * + (trailingExpandedRadius - trailingRestingRadius); + + return { + borderTopStartRadius: radius, + borderBottomStartRadius: radius, + }; + }); + const trailingIconAnimatedStyle = useAnimatedStyle(() => ({ + transform: [{ rotate: `${trailingIconRotation.value * 180}deg` }], + })); + // Per the M3 spec, the trailing button's color doesn't change when + // selected (expanded) — only a state layer is applied on top of it. + const trailingStateLayerAnimatedStyle = useAnimatedStyle(() => ({ + opacity: disabled + ? 0 + : trailingInnerRadiusProgress.value * splitButtonStateLayerOpacity, + })); const leadingHitSlop = React.useMemo( () => getSplitButtonHitSlop({ size, hitSlop }), [size, hitSlop] @@ -343,12 +353,6 @@ const SplitButton = ({ [size, trailingHitSlop] ); - const { color: customLabelColor, fontSize: customLabelSize } = - StyleSheet.flatten(labelStyle) || {}; - const contentColor = - typeof customLabelColor === 'string' - ? customLabelColor - : colors.contentColor; const labelTextStyle: TextStyle = { color: colors.contentColor, }; @@ -372,79 +376,17 @@ const SplitButton = ({ onPressOut: onTrailingPressOut, onLongPress: onTrailingLongPress, }); - const handleLeadingPressIn = React.useCallback( - (e: GestureResponderEvent) => { - onPressIn?.(e); - leadingInnerRadius.value = withTiming( - sizeStyle.innerPressedRadius, - pressTimingConfig - ); - trailingInnerRadius.value = withTiming( - sizeStyle.innerRadius, - releaseTimingConfig - ); - }, - [ - leadingInnerRadius, - onPressIn, - pressTimingConfig, - releaseTimingConfig, - sizeStyle.innerPressedRadius, - sizeStyle.innerRadius, - trailingInnerRadius, - ] - ); - const handleLeadingPressOut = React.useCallback( - (e: GestureResponderEvent) => { - onPressOut?.(e); - leadingInnerRadius.value = withTiming( - sizeStyle.innerRadius, - releaseTimingConfig - ); - }, - [leadingInnerRadius, onPressOut, releaseTimingConfig, sizeStyle.innerRadius] - ); - const handleTrailingPressIn = React.useCallback( - (e: GestureResponderEvent) => { - onTrailingPressIn?.(e); - trailingInnerRadius.value = withTiming( - sizeStyle.innerPressedRadius, - pressTimingConfig - ); - leadingInnerRadius.value = withTiming( - sizeStyle.innerRadius, - releaseTimingConfig - ); - }, - [ - leadingInnerRadius, - onTrailingPressIn, - pressTimingConfig, - releaseTimingConfig, - sizeStyle.innerPressedRadius, - sizeStyle.innerRadius, - trailingInnerRadius, - ] - ); - const handleTrailingPressOut = React.useCallback( - (e: GestureResponderEvent) => { - onTrailingPressOut?.(e); - trailingInnerRadius.value = withTiming( - sizeStyle.innerRadius, - releaseTimingConfig - ); - }, - [ - onTrailingPressOut, - releaseTimingConfig, - sizeStyle.innerRadius, - trailingInnerRadius, - ] - ); React.useEffect(() => { - leadingInnerRadius.value = sizeStyle.innerRadius; - trailingInnerRadius.value = sizeStyle.innerRadius; - }, [leadingInnerRadius, sizeStyle.innerRadius, trailingInnerRadius]); + const progress = isTrailingExpanded ? 1 : 0; + + trailingIconRotation.value = withTiming(progress, pressTimingConfig); + trailingInnerRadiusProgress.value = withTiming(progress, pressTimingConfig); + }, [ + isTrailingExpanded, + pressTimingConfig, + trailingIconRotation, + trailingInnerRadiusProgress, + ]); const commonButtonStyle: ViewStyle = { height: sizeStyle.containerHeight, @@ -460,7 +402,7 @@ const SplitButton = ({ testID ? `${testID}-${suffix}` : undefined; return ( - -
- + - - - - + + - - - - - + + + + + + + + + ); }; @@ -666,6 +623,12 @@ const styles = StyleSheet.create({ minWidth: splitButtonMinInteractiveSize, borderStyle: 'solid', }, + // Clips the ripple and background to the trailing segment's current + // (possibly animated) shape, since `TouchableRipple`'s own clip is static + // and would let the ripple show past the segment once its corners morph. + trailingClip: { + overflow: 'hidden', + }, ripple: { height: '100%', }, diff --git a/src/components/SplitButton/SplitButtonSurface.tsx b/src/components/SplitButton/SplitButtonSurface.tsx new file mode 100644 index 0000000000..9785e03e25 --- /dev/null +++ b/src/components/SplitButton/SplitButtonSurface.tsx @@ -0,0 +1,50 @@ +import * as React from 'react'; +import { Platform } from 'react-native'; +import type { ViewProps, ViewStyle } from 'react-native'; + +import Animated from 'react-native-reanimated'; + +import { useInternalTheme } from '../../core/theming'; +import { + androidElevationLevels, + shadow, +} from '../../theme/tokens/sys/elevation'; +import type { ThemeProp } from '../../types'; + +type Props = ViewProps & { + children: React.ReactNode; + elevation: number; + // `SplitButton` mixes plain style objects with Reanimated + // `useAnimatedStyle()` results in the same array, which TS can't unify + // structurally, so this internal-only prop is intentionally untyped. + style?: any; + theme?: ThemeProp; +}; + +/** + * A bare `Surface` stand-in used only by `SplitButton`'s trailing segment, + * so its Reanimated-driven shape style reaches a single native view + * directly instead of going through `Surface`'s own JS-side style + * splitting (which doesn't propagate Reanimated updates reliably). + */ +const SplitButtonSurface = ({ + elevation, + style, + theme: themeOverrides, + children, + ...rest +}: Props) => { + const theme = useInternalTheme(themeOverrides); + const elevationStyle: ViewStyle = + Platform.OS === 'android' + ? { elevation: androidElevationLevels[elevation] } + : shadow(elevation, theme.colors.shadow); + + return ( + + {children} + + ); +}; + +export default SplitButtonSurface; diff --git a/src/components/SplitButton/index.ts b/src/components/SplitButton/index.ts deleted file mode 100644 index 8a70e0e614..0000000000 --- a/src/components/SplitButton/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { default } from './SplitButton'; -export type { Props } from './SplitButton'; diff --git a/src/components/SplitButton/tokens.ts b/src/components/SplitButton/tokens.ts index 7bf2cedd03..5208fa947e 100644 --- a/src/components/SplitButton/tokens.ts +++ b/src/components/SplitButton/tokens.ts @@ -14,7 +14,6 @@ export type SplitButtonSizeTokens = { containerHeight: number; containerShape: SplitButtonShapeKey; innerCornerShape: SplitButtonShapeKey; - innerPressedCornerShape: SplitButtonShapeKey; leadingButtonLeadingSpace: number; leadingButtonTrailingSpace: number; leadingIconSize: number; @@ -34,7 +33,6 @@ export const splitButtonSizeTokens: Record< containerHeight: 32, containerShape: 'full', innerCornerShape: 'extraSmall', - innerPressedCornerShape: 'small', leadingButtonLeadingSpace: 12, leadingButtonTrailingSpace: 10, leadingIconSize: 20, @@ -49,7 +47,6 @@ export const splitButtonSizeTokens: Record< containerHeight: 40, containerShape: 'full', innerCornerShape: 'extraSmall', - innerPressedCornerShape: 'medium', leadingButtonLeadingSpace: 16, leadingButtonTrailingSpace: 12, leadingIconSize: 20, @@ -64,7 +61,6 @@ export const splitButtonSizeTokens: Record< containerHeight: 56, containerShape: 'full', innerCornerShape: 'extraSmall', - innerPressedCornerShape: 'medium', leadingButtonLeadingSpace: 24, leadingButtonTrailingSpace: 24, leadingIconSize: 24, @@ -79,7 +75,6 @@ export const splitButtonSizeTokens: Record< containerHeight: 96, containerShape: 'full', innerCornerShape: 'small', - innerPressedCornerShape: 'largeIncreased', leadingButtonLeadingSpace: 48, leadingButtonTrailingSpace: 48, leadingIconSize: 32, @@ -94,7 +89,6 @@ export const splitButtonSizeTokens: Record< containerHeight: 136, containerShape: 'full', innerCornerShape: 'medium', - innerPressedCornerShape: 'largeIncreased', leadingButtonLeadingSpace: 64, leadingButtonTrailingSpace: 64, leadingIconSize: 40, @@ -110,6 +104,8 @@ export const splitButtonMinInteractiveSize = 48; export const splitButtonDisabledOutlineOpacity = 0.12; +export const splitButtonStateLayerOpacity = 0.1; + export const splitButtonElevation = { disabled: 0, enabled: 1, diff --git a/src/components/SplitButton/utils.ts b/src/components/SplitButton/utils.ts index 5f060aed7e..f9caffdc79 100644 --- a/src/components/SplitButton/utils.ts +++ b/src/components/SplitButton/utils.ts @@ -23,6 +23,22 @@ export const resolveSplitButtonCorner = ( key: SplitButtonShapeKey ) => (key === 'full' ? cornerFull : theme.shapes.corner[key]); +// `resolveSplitButtonCorner`'s 'full' case returns a large sentinel radius +// (`cornerFull`) meant for shapes whose corners are all resolved the same +// way. Paired on the same edge with the smaller `innerRadius`, that +// sentinel triggers RN's corner-overlap correction and collapses the inner +// radius too — so the container shape is resolved on its own, relative to +// its own height, instead: 'full' means "fully rounded", i.e. a stadium +// whose radius is exactly half its height. +export const resolveSplitButtonContainerRadius = ( + theme: InternalTheme, + shape: SplitButtonShapeKey, + containerHeight: number +) => + shape === 'full' + ? containerHeight / 2 + : resolveSplitButtonCorner(theme, shape); + export const getSplitButtonSizeStyle = ({ size, theme, @@ -34,12 +50,12 @@ export const getSplitButtonSizeStyle = ({ return { ...sizeTokens, - containerRadius: resolveSplitButtonCorner(theme, sizeTokens.containerShape), - innerRadius: resolveSplitButtonCorner(theme, sizeTokens.innerCornerShape), - innerPressedRadius: resolveSplitButtonCorner( + containerRadius: resolveSplitButtonContainerRadius( theme, - sizeTokens.innerPressedCornerShape + sizeTokens.containerShape, + sizeTokens.containerHeight ), + innerRadius: resolveSplitButtonCorner(theme, sizeTokens.innerCornerShape), }; }; diff --git a/src/components/__tests__/SplitButton.test.tsx b/src/components/__tests__/SplitButton.test.tsx index 7b2d4af9c2..cdeaf6336e 100644 --- a/src/components/__tests__/SplitButton.test.tsx +++ b/src/components/__tests__/SplitButton.test.tsx @@ -2,6 +2,7 @@ import * as React from 'react'; import { StyleSheet } from 'react-native'; import { expect, it, jest } from '@jest/globals'; +import color from 'color'; import { getTheme } from '../../core/theming'; import { fireEvent, render, screen, userEvent } from '../../test-utils'; @@ -83,11 +84,132 @@ it('dims the outline color for a disabled outlined split button', async () => { const theme = getTheme(); await renderSplitButton({ mode: 'outlined', disabled: true }); - expect(screen.getByTestId('split-button-leading-container')).not.toHaveStyle({ + const expectedBorderColor = color(theme.colors.onSurface as string) + .alpha(0.12) + .rgb() + .string(); + + expect(screen.getByTestId('split-button-leading-container')).toHaveStyle({ + borderColor: expectedBorderColor, + }); +}); + +it('applies the filled mode container color', async () => { + const theme = getTheme(); + await renderSplitButton({ mode: 'filled' }); + + expect(screen.getByTestId('split-button-leading-container')).toHaveStyle({ + backgroundColor: theme.colors.primary, + }); +}); + +it('applies the tonal mode container color', async () => { + const theme = getTheme(); + await renderSplitButton({ mode: 'tonal' }); + + expect(screen.getByTestId('split-button-leading-container')).toHaveStyle({ + backgroundColor: theme.colors.secondaryContainer, + }); +}); + +it('applies a transparent container and visible border for outlined mode', async () => { + const theme = getTheme(); + await renderSplitButton({ mode: 'outlined' }); + + expect(screen.getByTestId('split-button-leading-container')).toHaveStyle({ + backgroundColor: 'transparent', borderColor: theme.colors.outlineVariant, }); }); +it('applies the container height for the extra-small size', async () => { + await renderSplitButton({ size: 'extra-small' }); + + expect(screen.getByTestId('split-button-container')).toHaveStyle({ + height: 32, + }); +}); + +it('applies the container height for the large size', async () => { + await renderSplitButton({ size: 'large' }); + + expect(screen.getByTestId('split-button-container')).toHaveStyle({ + height: 96, + }); +}); + +it('shows a progress indicator instead of the icon while loading', async () => { + await renderSplitButton({ icon: 'send', loading: true }); + + expect(screen.getByRole('progressbar')).toBeTruthy(); +}); + +it('defaults accessibility labels from label and to "Show options"', async () => { + await renderSplitButton(); + + expect(screen.getByTestId('split-button-leading')).toHaveProp( + 'accessibilityLabel', + 'Send' + ); + expect(screen.getByTestId('split-button-trailing')).toHaveProp( + 'accessibilityLabel', + 'Show options' + ); +}); + +it('calls leading and trailing long-press handlers separately', async () => { + const user = userEvent.setup(); + const onLongPress = jest.fn(); + const onTrailingLongPress = jest.fn(); + await renderSplitButton({ onLongPress, onTrailingLongPress }); + + await user.longPress(screen.getByTestId('split-button-leading')); + await user.longPress(screen.getByTestId('split-button-trailing')); + + expect(onLongPress).toHaveBeenCalledTimes(1); + expect(onTrailingLongPress).toHaveBeenCalledTimes(1); +}); + +it('applies a state layer instead of a color change when selected', async () => { + const theme = getTheme(); + await renderSplitButton({ + mode: 'filled', + trailingAccessibilityState: { expanded: true }, + }); + + // Per the M3 spec, the trailing button's color doesn't change when + // selected — only a state layer, tinted with the container's own "on" + // color, is applied on top of it. + expect(screen.getByTestId('split-button-trailing-container')).toHaveStyle({ + backgroundColor: theme.colors.primary, + }); + expect(screen.getByTestId('split-button-trailing-state-layer')).toHaveStyle({ + backgroundColor: theme.colors.onPrimary, + opacity: 0.1, + }); +}); + +it('hides the state layer when not selected', async () => { + await renderSplitButton({ + trailingAccessibilityState: { expanded: false }, + }); + + expect(screen.getByTestId('split-button-trailing-state-layer')).toHaveStyle({ + opacity: 0, + }); +}); + +it('hides the state layer when disabled, even if selected', async () => { + await renderSplitButton({ + disabled: true, + trailingAccessibilityState: { expanded: true }, + }); + + expect(screen.getByTestId('split-button-trailing-state-layer')).toHaveStyle({ + opacity: 0, + }); +}); + it('marks both press targets disabled when disabled', async () => { await renderSplitButton({ disabled: true }); diff --git a/src/components/__tests__/SplitButtonUtils.test.tsx b/src/components/__tests__/SplitButtonUtils.test.tsx new file mode 100644 index 0000000000..6076bb786c --- /dev/null +++ b/src/components/__tests__/SplitButtonUtils.test.tsx @@ -0,0 +1,294 @@ +import { describe, expect, it } from '@jest/globals'; +import color from 'color'; + +import { getTheme } from '../../core/theming'; +import { + getSplitButtonColors, + getSplitButtonHitSlop, + getSplitButtonLeadingShape, + getSplitButtonRippleColor, + getSplitButtonSizeStyle, + getSplitButtonTrailingShape, + resolveSplitButtonContainerRadius, +} from '../SplitButton/utils'; + +describe('resolveSplitButtonContainerRadius', () => { + it('resolves a "full" shape to exactly half the container height, not the corner-overlap sentinel', () => { + const theme = getTheme(); + + const radius = resolveSplitButtonContainerRadius(theme, 'full', 40); + + expect(radius).toBe(20); + // Regression guard: 'full' used to resolve through the `cornerFull` + // sentinel (9999), which triggers RN's corner-overlap correction and + // silently collapses the paired inner radius too. + expect(radius).toBeLessThan(9999); + }); + + it('resolves a non-"full" shape from the theme, ignoring container height', () => { + const theme = getTheme(); + + const radius = resolveSplitButtonContainerRadius(theme, 'medium', 999); + + expect(radius).toBe(theme.shapes.corner.medium); + }); +}); + +describe('getSplitButtonSizeStyle', () => { + it('resolves the container radius to exactly half the container height', () => { + const theme = getTheme(); + + ( + ['extra-small', 'small', 'medium', 'large', 'extra-large'] as const + ).forEach((size) => { + const sizeStyle = getSplitButtonSizeStyle({ size, theme }); + + expect(sizeStyle.containerRadius).toBe(sizeStyle.containerHeight / 2); + expect(sizeStyle.containerRadius).toBeLessThan(9999); + }); + }); + + it('resolves the inner radius from the theme shape corner for the size', () => { + const theme = getTheme(); + const sizeStyle = getSplitButtonSizeStyle({ size: 'small', theme }); + + expect(sizeStyle.innerRadius).toBe(theme.shapes.corner.extraSmall); + }); + + it('returns different inner radii for sizes with different corner shapes', () => { + const theme = getTheme(); + const small = getSplitButtonSizeStyle({ size: 'small', theme }); + const large = getSplitButtonSizeStyle({ size: 'large', theme }); + + expect(small.innerRadius).toBe(theme.shapes.corner.extraSmall); + expect(large.innerRadius).toBe(theme.shapes.corner.small); + }); +}); + +describe('getSplitButtonColors', () => { + it('returns filled mode colors', () => { + const theme = getTheme(); + const colors = getSplitButtonColors({ theme, mode: 'filled' }); + + expect(colors.containerColor).toBe(theme.colors.primary); + expect(colors.contentColor).toBe(theme.colors.onPrimary); + expect(colors.borderColor).toBe('transparent'); + expect(colors.borderWidth).toBe(0); + }); + + it('returns tonal mode colors', () => { + const theme = getTheme(); + const colors = getSplitButtonColors({ theme, mode: 'tonal' }); + + expect(colors.containerColor).toBe(theme.colors.secondaryContainer); + expect(colors.contentColor).toBe(theme.colors.onSecondaryContainer); + }); + + it('returns elevated mode colors', () => { + const theme = getTheme(); + const colors = getSplitButtonColors({ theme, mode: 'elevated' }); + + expect(colors.containerColor).toBe(theme.colors.surfaceContainerLow); + expect(colors.contentColor).toBe(theme.colors.primary); + }); + + it('returns outlined mode colors with a visible border', () => { + const theme = getTheme(); + const colors = getSplitButtonColors({ theme, mode: 'outlined' }); + + expect(colors.containerColor).toBe('transparent'); + expect(colors.contentColor).toBe(theme.colors.onSurfaceVariant); + expect(colors.borderColor).toBe(theme.colors.outlineVariant); + expect(colors.borderWidth).toBe(1); + }); + + it('prefers custom container and text colors when not disabled', () => { + const theme = getTheme(); + const colors = getSplitButtonColors({ + theme, + mode: 'filled', + customButtonColor: '#123456', + customTextColor: '#abcdef', + }); + + expect(colors.containerColor).toBe('#123456'); + expect(colors.contentColor).toBe('#abcdef'); + }); + + it('ignores custom colors when disabled', () => { + const theme = getTheme(); + const colors = getSplitButtonColors({ + theme, + mode: 'filled', + disabled: true, + customButtonColor: '#123456', + customTextColor: '#abcdef', + }); + + expect(colors.containerColor).toBe(theme.colors.onSurface); + expect(colors.contentColor).toBe(theme.colors.onSurface); + }); + + it('fades a disabled filled container instead of using a flat disabled color', () => { + const theme = getTheme(); + const colors = getSplitButtonColors({ + theme, + mode: 'filled', + disabled: true, + }); + + expect(colors.containerColor).toBe(theme.colors.onSurface); + expect(colors.containerOpacity).toBeLessThan(1); + }); + + it('uses a transparent container for a disabled outlined split button', () => { + const theme = getTheme(); + const colors = getSplitButtonColors({ + theme, + mode: 'outlined', + disabled: true, + }); + + expect(colors.containerColor).toBe('transparent'); + expect(colors.containerOpacity).toBe(1); + }); + + it('dims the outline color for a disabled outlined split button', () => { + const theme = getTheme(); + const colors = getSplitButtonColors({ + theme, + mode: 'outlined', + disabled: true, + }); + const expectedBorderColor = color(theme.colors.onSurface as string) + .alpha(0.12) + .rgb() + .string(); + + expect(colors.borderColor).toBe(expectedBorderColor); + expect(colors.borderColor).not.toBe(theme.colors.outlineVariant); + }); + + it('reduces content opacity when disabled', () => { + const theme = getTheme(); + const enabledColors = getSplitButtonColors({ theme, mode: 'filled' }); + const disabledColors = getSplitButtonColors({ + theme, + mode: 'filled', + disabled: true, + }); + + expect(disabledColors.contentOpacity).toBeLessThan( + enabledColors.contentOpacity + ); + }); +}); + +describe('getSplitButtonRippleColor', () => { + it('derives a translucent ripple color from the content color', () => { + const rippleColor = getSplitButtonRippleColor({ + contentColor: '#ffffff', + }); + + expect(rippleColor).toBe(color('#ffffff').alpha(0.1).rgb().string()); + }); + + it('prefers a custom ripple color when provided', () => { + const rippleColor = getSplitButtonRippleColor({ + contentColor: '#ffffff', + customRippleColor: '#ff0000', + }); + + expect(rippleColor).toBe('#ff0000'); + }); + + it('returns undefined when the content color is not a string', () => { + const rippleColor = getSplitButtonRippleColor({ + // OpaqueColorValue-like non-string value, e.g. from a native color. + contentColor: {} as unknown as string, + }); + + expect(rippleColor).toBeUndefined(); + }); +}); + +describe('getSplitButtonHitSlop', () => { + it('pads small sizes up to the minimum interactive size', () => { + const hitSlop = getSplitButtonHitSlop({ size: 'small' }); + + expect(hitSlop).toEqual({ top: 4, bottom: 4 }); + }); + + it('pads extra-small sizes further, since they are further from the minimum', () => { + const hitSlop = getSplitButtonHitSlop({ size: 'extra-small' }); + + expect(hitSlop).toEqual({ top: 8, bottom: 8 }); + }); + + it('does not add slop for sizes already at or above the minimum', () => { + const hitSlop = getSplitButtonHitSlop({ size: 'medium' }); + + expect(hitSlop).toBeUndefined(); + }); + + it('passes a numeric hitSlop through unchanged', () => { + const hitSlop = getSplitButtonHitSlop({ size: 'small', hitSlop: 10 }); + + expect(hitSlop).toBe(10); + }); + + it('does not override explicit top/bottom values in an object hitSlop', () => { + const hitSlop = getSplitButtonHitSlop({ + size: 'small', + hitSlop: { top: 1, left: 2 }, + }); + + expect(hitSlop).toEqual({ top: 1, left: 2, bottom: 4 }); + }); +}); + +describe('getSplitButtonLeadingShape / getSplitButtonTrailingShape', () => { + it('rounds the leading segment on the Start side and squares it on the End side', () => { + const shape = getSplitButtonLeadingShape({ + containerRadius: 20, + innerRadius: 4, + }); + + expect(shape).toEqual({ + borderTopStartRadius: 20, + borderBottomStartRadius: 20, + borderTopEndRadius: 4, + borderBottomEndRadius: 4, + }); + }); + + it('rounds the trailing segment on the End side and squares it on the Start side', () => { + const shape = getSplitButtonTrailingShape({ + containerRadius: 20, + innerRadius: 4, + }); + + expect(shape).toEqual({ + borderTopStartRadius: 4, + borderBottomStartRadius: 4, + borderTopEndRadius: 20, + borderBottomEndRadius: 20, + }); + }); + + it('mirrors the leading and trailing shapes around the shared inner edge', () => { + const leading = getSplitButtonLeadingShape({ + containerRadius: 20, + innerRadius: 4, + }); + const trailing = getSplitButtonTrailingShape({ + containerRadius: 20, + innerRadius: 4, + }); + + expect(leading.borderTopEndRadius).toBe(trailing.borderTopStartRadius); + expect(leading.borderBottomEndRadius).toBe( + trailing.borderBottomStartRadius + ); + }); +}); diff --git a/src/index.tsx b/src/index.tsx index 8280928eae..527190eea6 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -42,7 +42,7 @@ export { default as ProgressBar } from './components/ProgressBar'; export { default as RadioButton } from './components/RadioButton'; export { default as Searchbar } from './components/Searchbar'; export { default as Snackbar } from './components/Snackbar'; -export { default as SplitButton } from './components/SplitButton'; +export { default as SplitButton } from './components/SplitButton/SplitButton'; export { default as Surface } from './components/Surface'; export { default as Switch } from './components/Switch/Switch'; export { default as Appbar } from './components/Appbar'; @@ -127,7 +127,7 @@ export type { Props as RadioButtonIOSProps } from './components/RadioButton/Radi export type { Props as RadioButtonItemProps } from './components/RadioButton/RadioButtonItem'; export type { Props as SearchbarProps } from './components/Searchbar'; export type { Props as SnackbarProps } from './components/Snackbar'; -export type { Props as SplitButtonProps } from './components/SplitButton'; +export type { Props as SplitButtonProps } from './components/SplitButton/SplitButton'; export type { Props as SurfaceProps } from './components/Surface'; export type { Props as SwitchProps } from './components/Switch/Switch'; export type { From 25a7d4628751274c031b1470ab6e17924a6bbef1 Mon Sep 17 00:00:00 2001 From: Konrad Rydygier Date: Wed, 26 Aug 2026 15:05:40 +0200 Subject: [PATCH 6/7] docs: add SplitButton screenshots and fix 5.x nav generation --- .../components/SplitButton/SplitButton.mdx | 4 ++- .../screenshots/split-button-collapsed.png | Bin 0 -> 218191 bytes .../screenshots/split-button-expanded.png | Bin 0 -> 230781 bytes docs/scripts/generate-rspress-content.ts | 34 +++++++++++++++--- docs/src/data/screenshots.ts | 4 +++ src/components/SplitButton/SplitButton.tsx | 13 +++++-- src/components/__tests__/SplitButton.test.tsx | 9 ++--- .../__tests__/SplitButtonUtils.test.tsx | 14 ++++---- 8 files changed, 61 insertions(+), 17 deletions(-) create mode 100644 docs/public/screenshots/split-button-collapsed.png create mode 100644 docs/public/screenshots/split-button-expanded.png diff --git a/docs/6.x/docs/components/SplitButton/SplitButton.mdx b/docs/6.x/docs/components/SplitButton/SplitButton.mdx index 5cbc2992dc..1f091c833f 100644 --- a/docs/6.x/docs/components/SplitButton/SplitButton.mdx +++ b/docs/6.x/docs/components/SplitButton/SplitButton.mdx @@ -13,7 +13,9 @@ and open or trigger a contextual action from the trailing button. - + + + ## Usage ```js diff --git a/docs/public/screenshots/split-button-collapsed.png b/docs/public/screenshots/split-button-collapsed.png new file mode 100644 index 0000000000000000000000000000000000000000..aff20774408a8b873026adb12d282528b28c7f33 GIT binary patch literal 218191 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 LObiP2?C$*^$a8}_ literal 0 HcmV?d00001 diff --git a/docs/public/screenshots/split-button-expanded.png b/docs/public/screenshots/split-button-expanded.png new file mode 100644 index 0000000000000000000000000000000000000000..2d10bc6abe8f872b7f96d7567b12ddac75a6e3bf GIT binary patch literal 230781 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 z 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 { ]; }; +// 6.x pages are (re)generated fresh from the current source on every run, +// so every `pages` entry always has a matching 6.x doc. 5.x is a static, +// frozen snapshot that's never regenerated — a `pages` entry only belongs +// in its nav if that entry's docs actually exist in the 5.x tree, otherwise +// newer, 6.x-only components (added to `pages` after 5.x was frozen) would +// produce a broken nav item pointing at a directory that doesn't exist. +const componentDocsExistFor5x = ( + version: string, + entryName: string, + value: string | Record +) => { + if (version !== '5.x') { + return true; + } + + const componentsDir = path.join(getVersionDocsDir(version), 'components'); + const entryPath = + typeof value === 'string' + ? path.join(componentsDir, `${entryName}.mdx`) + : path.join(componentsDir, entryName); + + return fs.existsSync(entryPath); +}; + const getVersionComponentOrder = (version: string): MetaEntry[] => { - const fromConfig = Object.entries(componentDocsConfig.pages).map( - ([entryName, value]) => { + const fromConfig = Object.entries(componentDocsConfig.pages) + .filter(([entryName, value]) => + componentDocsExistFor5x(version, entryName, value) + ) + .map(([entryName, value]) => { if (typeof value === 'string') { return entryName; } @@ -121,8 +148,7 @@ const getVersionComponentOrder = (version: string): MetaEntry[] => { collapsible: true, collapsed: false, }; - } - ); + }); if (version !== '5.x') { return fromConfig; diff --git a/docs/src/data/screenshots.ts b/docs/src/data/screenshots.ts index 92bf8f2788..d2ec21821d 100644 --- a/docs/src/data/screenshots.ts +++ b/docs/src/data/screenshots.ts @@ -134,6 +134,10 @@ export const screenshots = { multiselect: 'screenshots/segmented-button-multi-select.png', }, Snackbar: 'screenshots/snackbar.gif', + SplitButton: { + collapsed: 'screenshots/split-button-collapsed.png', + expanded: 'screenshots/split-button-expanded.png', + }, Surface: { elevated: 'screenshots/surface-elevated-full-width.png', flat: 'screenshots/surface-flat-full-width.png', diff --git a/src/components/SplitButton/SplitButton.tsx b/src/components/SplitButton/SplitButton.tsx index 9f6acae366..82725bc9e5 100644 --- a/src/components/SplitButton/SplitButton.tsx +++ b/src/components/SplitButton/SplitButton.tsx @@ -321,8 +321,17 @@ const SplitButton = ({ // Interpolated between `trailingShape`'s own Start radius (resting) and // its End radius (expanded), so the Start corner always lands exactly on // the same radius already driving the segment's static End corners. - const trailingRestingRadius = trailingShape.borderTopStartRadius as number; - const trailingExpandedRadius = trailingShape.borderTopEndRadius as number; + // `trailingShape`'s corner properties are typed loosely (`ViewStyle`), so + // narrow to the `sizeStyle` values that `getSplitButtonTrailingShape` + // always assigns them from, rather than asserting the type. + const trailingRestingRadius = + typeof trailingShape.borderTopStartRadius === 'number' + ? trailingShape.borderTopStartRadius + : sizeStyle.innerRadius; + const trailingExpandedRadius = + typeof trailingShape.borderTopEndRadius === 'number' + ? trailingShape.borderTopEndRadius + : sizeStyle.containerRadius; const trailingAnimatedShapeStyle = useAnimatedStyle(() => { const radius = trailingRestingRadius + diff --git a/src/components/__tests__/SplitButton.test.tsx b/src/components/__tests__/SplitButton.test.tsx index cdeaf6336e..8694f7934a 100644 --- a/src/components/__tests__/SplitButton.test.tsx +++ b/src/components/__tests__/SplitButton.test.tsx @@ -84,10 +84,11 @@ it('dims the outline color for a disabled outlined split button', async () => { const theme = getTheme(); await renderSplitButton({ mode: 'outlined', disabled: true }); - const expectedBorderColor = color(theme.colors.onSurface as string) - .alpha(0.12) - .rgb() - .string(); + const { onSurface } = theme.colors; + if (typeof onSurface !== 'string') { + throw new Error('Expected default theme onSurface to be a string'); + } + const expectedBorderColor = color(onSurface).alpha(0.12).rgb().string(); expect(screen.getByTestId('split-button-leading-container')).toHaveStyle({ borderColor: expectedBorderColor, diff --git a/src/components/__tests__/SplitButtonUtils.test.tsx b/src/components/__tests__/SplitButtonUtils.test.tsx index 6076bb786c..1706dafe5f 100644 --- a/src/components/__tests__/SplitButtonUtils.test.tsx +++ b/src/components/__tests__/SplitButtonUtils.test.tsx @@ -1,3 +1,5 @@ +import { PlatformColor } from 'react-native'; + import { describe, expect, it } from '@jest/globals'; import color from 'color'; @@ -160,10 +162,11 @@ describe('getSplitButtonColors', () => { mode: 'outlined', disabled: true, }); - const expectedBorderColor = color(theme.colors.onSurface as string) - .alpha(0.12) - .rgb() - .string(); + const { onSurface } = theme.colors; + if (typeof onSurface !== 'string') { + throw new Error('Expected default theme onSurface to be a string'); + } + const expectedBorderColor = color(onSurface).alpha(0.12).rgb().string(); expect(colors.borderColor).toBe(expectedBorderColor); expect(colors.borderColor).not.toBe(theme.colors.outlineVariant); @@ -204,8 +207,7 @@ describe('getSplitButtonRippleColor', () => { it('returns undefined when the content color is not a string', () => { const rippleColor = getSplitButtonRippleColor({ - // OpaqueColorValue-like non-string value, e.g. from a native color. - contentColor: {} as unknown as string, + contentColor: PlatformColor('label'), }); expect(rippleColor).toBeUndefined(); From be0fbb834bd9966069c2742150e8cff5da2c5c92 Mon Sep 17 00:00:00 2001 From: Konrad Rydygier Date: Thu, 27 Aug 2026 12:48:15 +0200 Subject: [PATCH 7/7] fix: derive SplitButton colors and elevation from tokens --- .../components/SplitButton/SplitButton.mdx | 2 +- docs/src/data/themeColors.ts | 3 +- example/src/Examples/SplitButtonExample.tsx | 1 - src/components/SplitButton/SplitButton.tsx | 16 +-- src/components/SplitButton/tokens.ts | 99 +++++++++++++- src/components/SplitButton/utils.ts | 127 ++++-------------- src/components/__tests__/SplitButton.test.tsx | 11 +- .../__tests__/SplitButtonUtils.test.tsx | 48 +++++-- 8 files changed, 161 insertions(+), 146 deletions(-) diff --git a/docs/6.x/docs/components/SplitButton/SplitButton.mdx b/docs/6.x/docs/components/SplitButton/SplitButton.mdx index 1f091c833f..7bcb58993f 100644 --- a/docs/6.x/docs/components/SplitButton/SplitButton.mdx +++ b/docs/6.x/docs/components/SplitButton/SplitButton.mdx @@ -337,7 +337,7 @@ export default MyComponent; ## Theme colors - + diff --git a/docs/src/data/themeColors.ts b/docs/src/data/themeColors.ts index 83c8081137..a210904e0a 100644 --- a/docs/src/data/themeColors.ts +++ b/docs/src/data/themeColors.ts @@ -333,7 +333,8 @@ export const themeColors = { }, outlined: { backgroundColor: 'transparent', - textColor: 'theme.colors.onSurface', + textColor: 'theme.colors.outlineVariant', + borderColor: 'theme.colors.outlineVariant', }, }, }, diff --git a/example/src/Examples/SplitButtonExample.tsx b/example/src/Examples/SplitButtonExample.tsx index 17bbaed4ab..4af66cb343 100644 --- a/example/src/Examples/SplitButtonExample.tsx +++ b/example/src/Examples/SplitButtonExample.tsx @@ -31,7 +31,6 @@ const SplitButtonExample = () => { {}} diff --git a/src/components/SplitButton/SplitButton.tsx b/src/components/SplitButton/SplitButton.tsx index 82725bc9e5..b5e61091eb 100644 --- a/src/components/SplitButton/SplitButton.tsx +++ b/src/components/SplitButton/SplitButton.tsx @@ -19,7 +19,6 @@ import Animated, { } from 'react-native-reanimated'; import { - splitButtonElevation, splitButtonMinInteractiveSize, splitButtonStateLayerOpacity, type SplitButtonSize, @@ -372,7 +371,6 @@ const SplitButton = ({ const trailingAccessibilityStateWithDisabled = disabled ? { ...trailingAccessibilityState, ...disabledState } : trailingAccessibilityState; - const isElevationEntitled = !disabled && mode === 'elevated'; const leadingHasTouchHandler = hasTouchHandler({ onPress, onPressIn, @@ -404,9 +402,6 @@ const SplitButton = ({ borderColor: colors.borderColor, borderWidth: colors.borderWidth, }; - const elevation = isElevationEntitled - ? splitButtonElevation.enabled - : splitButtonElevation.disabled; const getTestID = (suffix: string) => testID ? `${testID}-${suffix}` : undefined; @@ -425,7 +420,7 @@ const SplitButton = ({ > = { + elevated: { + enabled: { + containerColor: 'surfaceContainerLow', + containerOpacity: 1, + contentColor: 'primary', + contentOpacity: 1, + elevation: 1, + }, + disabled: { + containerColor: 'onSurface', + containerOpacity: 0.1, + contentColor: 'onSurface', + contentOpacity: 0.38, + elevation: 0, + }, + }, + filled: { + enabled: { + containerColor: 'primary', + containerOpacity: 1, + contentColor: 'onPrimary', + contentOpacity: 1, + elevation: 0, + }, + disabled: { + containerColor: 'onSurface', + containerOpacity: 0.1, + contentColor: 'onSurface', + contentOpacity: 0.38, + elevation: 0, + }, + }, + tonal: { + enabled: { + containerColor: 'secondaryContainer', + containerOpacity: 1, + contentColor: 'onSecondaryContainer', + contentOpacity: 1, + elevation: 0, + }, + disabled: { + containerColor: 'onSurface', + containerOpacity: 0.1, + contentColor: 'onSurface', + contentOpacity: 0.38, + elevation: 0, + }, + }, + outlined: { + enabled: { + containerOpacity: 1, + contentColor: 'onSurfaceVariant', + contentOpacity: 1, + borderColor: 'outlineVariant', + elevation: 0, + }, + disabled: { + containerOpacity: 1, + contentColor: 'outlineVariant', + contentOpacity: 0.38, + borderColor: 'outlineVariant', + elevation: 0, + }, + }, +}; diff --git a/src/components/SplitButton/utils.ts b/src/components/SplitButton/utils.ts index f9caffdc79..7f179d8600 100644 --- a/src/components/SplitButton/utils.ts +++ b/src/components/SplitButton/utils.ts @@ -3,9 +3,10 @@ import type { ColorValue, ViewStyle } from 'react-native'; import color from 'color'; import { - splitButtonDisabledOutlineOpacity, + splitButtonColorTokens, splitButtonMinInteractiveSize, splitButtonSizeTokens, + type SplitButtonMode, type SplitButtonShapeKey, type SplitButtonSize, } from './tokens'; @@ -16,7 +17,7 @@ import type { Props as TouchableRippleProps } from '../TouchableRipple/Touchable const stateOpacity = tokens.md.sys.state.opacity; -export type SplitButtonMode = 'filled' | 'tonal' | 'elevated' | 'outlined'; +export type { SplitButtonMode } from './tokens'; export const resolveSplitButtonCorner = ( theme: InternalTheme, @@ -59,78 +60,6 @@ export const getSplitButtonSizeStyle = ({ }; }; -const getSplitButtonContainerColor = ({ - mode, - theme, - disabled, - customButtonColor, -}: { - mode: SplitButtonMode; - theme: InternalTheme; - disabled?: boolean; - customButtonColor?: ColorValue; -}) => { - const { colors } = theme; - - if (customButtonColor && !disabled) { - return customButtonColor; - } - - if (disabled) { - return mode === 'outlined' ? 'transparent' : colors.onSurface; - } - - if (mode === 'filled') { - return colors.primary; - } - - if (mode === 'tonal') { - return colors.secondaryContainer; - } - - if (mode === 'elevated') { - return colors.surfaceContainerLow; - } - - return 'transparent'; -}; - -const getSplitButtonContentColor = ({ - mode, - theme, - disabled, - customTextColor, -}: { - mode: SplitButtonMode; - theme: InternalTheme; - disabled?: boolean; - customTextColor?: ColorValue; -}) => { - const { colors } = theme; - - if (customTextColor && !disabled) { - return customTextColor; - } - - if (disabled) { - return colors.onSurface; - } - - if (mode === 'filled') { - return colors.onPrimary; - } - - if (mode === 'tonal') { - return colors.onSecondaryContainer; - } - - if (mode === 'outlined') { - return colors.onSurfaceVariant; - } - - return colors.primary; -}; - export const getSplitButtonColors = ({ theme, mode, @@ -144,41 +73,31 @@ export const getSplitButtonColors = ({ customButtonColor?: ColorValue; customTextColor?: ColorValue; }) => { - const containerColor = getSplitButtonContainerColor({ - mode, - theme, - disabled, - customButtonColor, - }); - const contentColor = getSplitButtonContentColor({ - mode, - theme, - disabled, - customTextColor, - }); - const isOutlined = mode === 'outlined'; - const disabledBorderColor = - typeof theme.colors.onSurface === 'string' - ? color(theme.colors.onSurface) - .alpha(splitButtonDisabledOutlineOpacity) - .rgb() - .string() - : theme.colors.outlineVariant; + const { colors } = theme; + const colorTokens = + splitButtonColorTokens[mode][disabled ? 'disabled' : 'enabled']; + + const containerColor = + customButtonColor && !disabled + ? customButtonColor + : colorTokens.containerColor + ? colors[colorTokens.containerColor] + : 'transparent'; + const contentColor = + customTextColor && !disabled + ? customTextColor + : colors[colorTokens.contentColor]; return { containerColor, contentColor, - borderColor: isOutlined - ? disabled - ? disabledBorderColor - : theme.colors.outlineVariant + borderColor: colorTokens.borderColor + ? colors[colorTokens.borderColor] : 'transparent', - borderWidth: isOutlined ? 1 : 0, - containerOpacity: - disabled && mode !== 'outlined' - ? stateOpacity.pressed - : stateOpacity.enabled, - contentOpacity: disabled ? stateOpacity.disabled : stateOpacity.enabled, + borderWidth: colorTokens.borderColor ? 1 : 0, + containerOpacity: colorTokens.containerOpacity, + contentOpacity: colorTokens.contentOpacity, + elevation: colorTokens.elevation, }; }; diff --git a/src/components/__tests__/SplitButton.test.tsx b/src/components/__tests__/SplitButton.test.tsx index 8694f7934a..afd3c9e963 100644 --- a/src/components/__tests__/SplitButton.test.tsx +++ b/src/components/__tests__/SplitButton.test.tsx @@ -2,7 +2,6 @@ import * as React from 'react'; import { StyleSheet } from 'react-native'; import { expect, it, jest } from '@jest/globals'; -import color from 'color'; import { getTheme } from '../../core/theming'; import { fireEvent, render, screen, userEvent } from '../../test-utils'; @@ -80,18 +79,12 @@ it('calls leading and trailing press-in and press-out handlers separately', asyn expect(onTrailingPressOut).toHaveBeenCalledTimes(1); }); -it('dims the outline color for a disabled outlined split button', async () => { +it('keeps the outline color at full opacity for a disabled outlined split button', async () => { const theme = getTheme(); await renderSplitButton({ mode: 'outlined', disabled: true }); - const { onSurface } = theme.colors; - if (typeof onSurface !== 'string') { - throw new Error('Expected default theme onSurface to be a string'); - } - const expectedBorderColor = color(onSurface).alpha(0.12).rgb().string(); - expect(screen.getByTestId('split-button-leading-container')).toHaveStyle({ - borderColor: expectedBorderColor, + borderColor: theme.colors.outlineVariant, }); }); diff --git a/src/components/__tests__/SplitButtonUtils.test.tsx b/src/components/__tests__/SplitButtonUtils.test.tsx index 1706dafe5f..fd8ebc18fa 100644 --- a/src/components/__tests__/SplitButtonUtils.test.tsx +++ b/src/components/__tests__/SplitButtonUtils.test.tsx @@ -143,6 +143,19 @@ describe('getSplitButtonColors', () => { expect(colors.containerOpacity).toBeLessThan(1); }); + it('shares the same disabled onSurface treatment across filled, tonal, and elevated', () => { + const theme = getTheme(); + + (['filled', 'tonal', 'elevated'] as const).forEach((mode) => { + const colors = getSplitButtonColors({ theme, mode, disabled: true }); + + expect(colors.containerColor).toBe(theme.colors.onSurface); + expect(colors.contentColor).toBe(theme.colors.onSurface); + expect(colors.containerOpacity).toBe(0.1); + expect(colors.contentOpacity).toBe(0.38); + }); + }); + it('uses a transparent container for a disabled outlined split button', () => { const theme = getTheme(); const colors = getSplitButtonColors({ @@ -155,21 +168,38 @@ describe('getSplitButtonColors', () => { expect(colors.containerOpacity).toBe(1); }); - it('dims the outline color for a disabled outlined split button', () => { + it('keeps the outline color at full opacity for a disabled outlined split button', () => { const theme = getTheme(); const colors = getSplitButtonColors({ theme, mode: 'outlined', disabled: true, }); - const { onSurface } = theme.colors; - if (typeof onSurface !== 'string') { - throw new Error('Expected default theme onSurface to be a string'); - } - const expectedBorderColor = color(onSurface).alpha(0.12).rgb().string(); - - expect(colors.borderColor).toBe(expectedBorderColor); - expect(colors.borderColor).not.toBe(theme.colors.outlineVariant); + + expect(colors.borderColor).toBe(theme.colors.outlineVariant); + }); + + it('uses outline-variant content color for a disabled outlined split button', () => { + const theme = getTheme(); + const colors = getSplitButtonColors({ + theme, + mode: 'outlined', + disabled: true, + }); + + expect(colors.contentColor).toBe(theme.colors.outlineVariant); + }); + + it('only grants elevation to an enabled elevated split button', () => { + const theme = getTheme(); + + (['elevated', 'filled', 'tonal', 'outlined'] as const).forEach((mode) => { + const enabled = getSplitButtonColors({ theme, mode }); + const disabled = getSplitButtonColors({ theme, mode, disabled: true }); + + expect(enabled.elevation).toBe(mode === 'elevated' ? 1 : 0); + expect(disabled.elevation).toBe(0); + }); }); it('reduces content opacity when disabled', () => {