react-native-ueno-css-modules
React Native CSS Modules with variables and theme support
yarn add react-native-ueno-css-modules
yarn add node-sass
yarn add stylus
yarn add less
Transformer
const upstreamTransformer = require('metro/src/reactNativeTransformer');
const uenoCssModulesTransformer = require('react-native-ueno-css-modules/transformer');
module.exports.transform = ({ src, filename, options }) => {
if (filename.endsWith('.css') || filename.endsWith('.styl') || filename.endsWith('.scss') || filename.endsWith('.sass') || filename.endsWith('.less')) {
return uenoCssModulesTransformer.transform({ src, filename, options });
}
return upstreamTransformer.transform({ src, filename, options });
};
Add themes and variables
import { setThemeVars, setVars } from 'react-native-ueno-css-modules';
setThemeVars('light', { '--background-color': 'orange' });
setVars({
'--hairline-width': StyleSheet.hairlineWidth,
'--mobx-value': [MobxStore, 'propertyName'],
});
Change theme
import { setTheme } from 'react-native-ueno-css-modules';
setTheme('dark');
Usage in styles
Refer to the classNames documentation
const styles = require('mystyle.css');
styles.foo;
styles({ foo: true });
styles('foo', 'bar', { baz: true });
How this works
Consider the following
.sample {
text-align: left;
font-size: var(--font-size);
color: var(--primary-color);
}
import { setTheme, setThemeVars, setVar } from 'react-native-ueno-css-modules';
setThemeVars('light', {
'--primary-color': '#ffffff',
});
setThemeVars('dark', {
'--primary-color': '#000000',
});
setTheme('light');
const styles = require('styles.css');
{
sample: {
textAlign: 'left',
},
sample__theme__light: {
color: '#ffffff',
},
sample__theme__dark: {
color: '#000000',
},
}
setVar('--font-size', 16);
[ styles.sample, styles.sample__theme__light, { fontSize: 16 } ];
setVar('--font-size', 21);
[ styles.sample, styles.sample__theme__light, { fontSize: 21 } ];
setTheme('dark');
[ styles.sample, styles.sample__theme__dark, { fontSize: 21 } ];