rn-less

2.0.14 • Public • Published

rn-less

Style react-native with less.

Powered by react-native-css and less.js.

Example

rn-config{//style's config 
    arguments: containerMargin,bgColor;//arguments used in less 
}
CardExampleStyle {
    .render-title{
        flex: 1;
        align-items: center;
        margin-top: 20;
        .title-text{
            font-size: 20
        }
    }
    .container {
        flex: 1;
        margin-top: containerMargin;// use the variable declared above 
        margin-bottom: "containerMargin";// use the variable with string 
        .title {
            font-size: "containerMargin/2";// and any expression starts with variable name 
            background-color: bgColor;
        }
    }
}
import { rnLess } from 'rn-less/src/runtime';// import the decorator
import style from './a.less.js'; // import the style
 
const rootStyle = style({containerMargin,bgColor});// pass your arguments and get the style object
 
//decorate the component with the style
//write the decorator in this a.b way to let the vscode extention track the style
@rnLess(rootStyle.CardExampleStyle)
class CardExample extends Component {
    //the strings in the style attribute are the class names in the less file
    _renderTitle(title) {
        // function invoking is processed, but stateless is not
        return (
            <View style="render-title">
                <Text style="title-text">{title}</Text>
            </View>
        )
    }
 
    render() {
        return (
            <ScrollView>
                <View style="container">                    
                    {this._renderTitle('Basic')}
                    <Card>
                        <CardTitle>
                            <Text style={["title"]}>Card Title</Text>
                        </CardTitle>
                    </Card>
                </View>
            </ScrollView>
        )
    }
}

How to use it

Install things

# enter the root directory of the project 
npm i -S rn-less
cp -i node_modules/rn-less/example/gulpfile.js .
npm i -g gulp
 

Modify the gulpfile.js

// change it to your source folder
const sourceDir='./app';

Notice

All the styles in a component with the same className would be combined into a single one. It ignores the hierarchy of the less file. The hierarchy in the less file is just for you, not for rn-less.

Run the gulp

gulp

Create your less file and import it in a js/jsx file

import { rnLess } from 'rn-less/src/runtime';// import the decorator
import style from './a.less.js'; // import the style
 
const rootStyle = style({containerMargin,bgColor});// pass your arguments and get the style object
 
//decorate the component with the style
@rnLess(rootStyle.CardExampleStyle)
class CardExample extends Component {}

What's more

Process the less output

code = processStyleobject({
    code,
    hierarchy: false,
    custom: function ({
        root,
        traverseProperty,
        traverseStyle,
        traverseChunk
    }) {
        // font-size:10 -> fontSize:Theme.font10
        traverseProperty(root, function ({ value, property, selector }) {
            if (property === 'fontSize') {
                return `Theme.font${value}`;
            }
        });
 
        // sort the keys 
        traverseStyle(root, function ({ style, selector, chunk, component }) {
            const ret = {};
            Object.keys(style).sort().forEach((key) => {
                ret[key] = style[key];
            });
            return ret;
        });
 
        //print the chunks
        traverseChunk(root, function ({ chunk, styleName, component }) {
            console.log(chunk);
        });
    }
});

Enjoy the vscode extension

https://github.com/blackmiaool/rn-less-helper

Versions

Current Tags

VersionDownloads (Last 7 Days)Tag
2.0.141latest

Version History

VersionDownloads (Last 7 Days)Published
2.0.141
2.0.134
2.0.122
2.0.113
2.0.90
2.0.80
2.0.70
2.0.60
2.0.50
2.0.42
2.0.30
2.0.21
2.0.11
1.0.242
1.0.230
1.0.222
1.0.210
1.0.160
1.0.130
1.0.120
1.0.110
1.0.100
1.0.90
1.0.80
1.0.70
1.0.60
1.0.50
1.0.40
1.0.30
1.0.20
1.0.10

Package Sidebar

Install

npm i rn-less

Weekly Downloads

18

Version

2.0.14

License

ISC

Last publish

Collaborators

  • blackmiaool