import { useMemo } from 'react' import { TextStyle, ViewStyle } from 'react-native' /** * Merges state-variant styles (e.g. `placeholder:error`) into a flat object keyed by part name. * Pass a key as `[key, false]` to get only the active state overrides without the base style merged in * — useful when RN props accept raw color values that must not be wrapped in a style array. */ export function useInputBasePartialStyles>( styles: Record, styleKeys: Array, states: S, ) { return useMemo(() => { return styleKeys.reduce((acc, value) => { const [key, overrideWithDefault] = Array.isArray(value) ? value : [value, true] const result = Object.entries(states).reduce((acc, [state, is]) => { if (!is) return acc const style = styles?.[`${key}:${state}` as C] if (!style) return acc return { ...acc, ...styles[`${key}:${state}` as C] } }, {}) if (overrideWithDefault && !!styles?.[key]) { acc[key] = { ...styles[key], ...result, } } else { acc[key] = result } return acc }, {} as Record) }, [states]) }