create-expo-cljs-app
Version:
Create a react native application with Expo and Shadow-CLJS!
71 lines (61 loc) • 1.92 kB
JavaScript
/**
* Copyright (c) Nicolas Gallagher.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow strict-local
*/
import normalizeValueWithProperty from './normalizeValueWithProperty';
import resolveShadowValue from './resolveShadowValue';
const defaultOffset = { height: 0, width: 0 };
function boxShadowReducer(resolvedStyle, style) {
const { boxShadow } = style;
const shadow = resolveShadowValue(style);
if (shadow != null) {
resolvedStyle.boxShadow = boxShadow ? `${boxShadow}, ${shadow}` : shadow;
}
}
function textShadowReducer(resolvedStyle, style) {
const { textShadowColor, textShadowOffset, textShadowRadius } = style;
const { height, width } = textShadowOffset || defaultOffset;
const radius = textShadowRadius || 0;
const offsetX = normalizeValueWithProperty(width);
const offsetY = normalizeValueWithProperty(height);
const blurRadius = normalizeValueWithProperty(radius);
const color = normalizeValueWithProperty(textShadowColor, 'textShadowColor');
if (
color &&
(height !== 0 || width !== 0 || radius !== 0) &&
offsetX != null &&
offsetY != null &&
blurRadius != null
) {
resolvedStyle.textShadow = `${offsetX} ${offsetY} ${blurRadius} ${color}`;
}
}
const createCompileableStyle = (styles: Object): Object => {
const {
shadowColor,
shadowOffset,
shadowOpacity,
shadowRadius,
textShadowColor,
textShadowOffset,
textShadowRadius,
...nextStyles
} = styles;
if (
shadowColor != null ||
shadowOffset != null ||
shadowOpacity != null ||
shadowRadius != null
) {
boxShadowReducer(nextStyles, styles);
}
if (textShadowColor != null || textShadowOffset != null || textShadowRadius != null) {
textShadowReducer(nextStyles, styles);
}
return nextStyles;
};
export default createCompileableStyle;