react-native-paper
Version:
Material design for React Native
184 lines (164 loc) • 3.45 kB
text/typescript
import color from 'color';
import type { InternalTheme } from '../../types';
const getAndroidCheckedColor = ({
theme,
customColor,
}: {
theme: InternalTheme;
customColor?: string;
}) => {
if (customColor) {
return customColor;
}
if (theme.isV3) {
return theme.colors.primary;
}
return theme.colors.accent;
};
const getAndroidUncheckedColor = ({
theme,
customUncheckedColor,
}: {
theme: InternalTheme;
customUncheckedColor?: string;
}) => {
if (customUncheckedColor) {
return customUncheckedColor;
}
if (theme.isV3) {
return theme.colors.onSurfaceVariant;
}
if (theme.dark) {
return color(theme.colors.text).alpha(0.7).rgb().string();
}
return color(theme.colors.text).alpha(0.54).rgb().string();
};
const getAndroidRippleColor = ({
theme,
checkedColor,
disabled,
}: {
theme: InternalTheme;
checkedColor: string;
disabled?: boolean;
}) => {
if (disabled) {
if (theme.isV3) {
return color(theme.colors.onSurface).alpha(0.16).rgb().string();
}
return color(theme.colors.text).alpha(0.16).rgb().string();
}
return color(checkedColor).fade(0.32).rgb().string();
};
const getAndroidControlColor = ({
theme,
checked,
disabled,
checkedColor,
uncheckedColor,
}: {
theme: InternalTheme;
checked: boolean;
checkedColor: string;
uncheckedColor: string;
disabled?: boolean;
}) => {
if (disabled) {
if (theme.isV3) {
return theme.colors.onSurfaceDisabled;
}
return theme.colors.disabled;
}
if (checked) {
return checkedColor;
}
return uncheckedColor;
};
export const getAndroidSelectionControlColor = ({
theme,
disabled,
checked,
customColor,
customUncheckedColor,
}: {
theme: InternalTheme;
checked: boolean;
disabled?: boolean;
customColor?: string;
customUncheckedColor?: string;
}) => {
const checkedColor = getAndroidCheckedColor({ theme, customColor });
const uncheckedColor = getAndroidUncheckedColor({
theme,
customUncheckedColor,
});
return {
rippleColor: getAndroidRippleColor({ theme, checkedColor, disabled }),
selectionControlColor: getAndroidControlColor({
theme,
disabled,
checked,
checkedColor,
uncheckedColor,
}),
};
};
const getIOSCheckedColor = ({
theme,
disabled,
customColor,
}: {
theme: InternalTheme;
customColor?: string;
disabled?: boolean;
}) => {
if (disabled) {
if (theme.isV3) {
return theme.colors.onSurfaceDisabled;
}
return theme.colors.disabled;
}
if (customColor) {
return customColor;
}
if (theme.isV3) {
return theme.colors.primary;
}
return theme.colors.accent;
};
const getIOSRippleColor = ({
theme,
checkedColor,
disabled,
}: {
theme: InternalTheme;
checkedColor: string;
disabled?: boolean;
}) => {
if (disabled) {
if (theme.isV3) {
return color(theme.colors.onSurface).alpha(0.16).rgb().string();
}
return color(theme.colors.text).alpha(0.16).rgb().string();
}
return color(checkedColor).fade(0.32).rgb().string();
};
export const getSelectionControlIOSColor = ({
theme,
disabled,
customColor,
}: {
theme: InternalTheme;
disabled?: boolean;
customColor?: string;
}) => {
const checkedColor = getIOSCheckedColor({ theme, disabled, customColor });
return {
checkedColor,
rippleColor: getIOSRippleColor({
theme,
checkedColor,
disabled,
}),
};
};