Repository files navigation

npm version

A classy approach

Did you ever want to organize your styles properly? This library contains an easy to use API that lets you do it in a classy way.

Installation

npm i react-native-use-styles

Usage

Using styles

importuseStylesfrom'./my-namespaced-styles';constComponent=(){
const s=useStyles();return(<Textstyles={s`.global .namespaced`}>
Hello World!
</Text>);}

Note that we are classy now, and nobody would deny it. Next we'll define our .global and .namespaced styles to use them in our components as we are doing in this example.

Global styles

global-styles.js

import{GlobalStyles}from'react-native-use-styles';GlobalStyles({global: 'flex:1 fx:dir:row',});

We are using aliases or shortcuts to define our styles. This is equivalent to do:

import{GlobalStyles}from'react-native-use-styles';GlobalStyles({global: {flex: 1,flexDirection: 'row',},});

Namespaced styles

my-namespaced-styles.js

import{Styles}from'react-native-use-styles';exportdefaultStyles({reused: 'bg:color:green',namespaced: '.global .reused color:purple',});

Namespaced styles are a way to isolate a group of styles for a particular part of your app, it could be styles for a component, a screen, etc. This is a way to group semantically and avoid collisions between your styles. Note that we are exporting the result of our namespaced definition.

Constants

import{GlobalStyles}from'react-native-use-styles';GlobalStyles({constants: {purple: 'purple',},path: 'color:$purple',object: {color: '$purple'},});

You can define constants in your global or namespaced styles that will be available to reuse with the $ prefix.

Computed and Dynamic styles

Computed styles:

importuseStylesfrom'./my-namespaced-styles';constComponent=(){const isPurple =useState(true);consts=useStyles([isPurple]);return(<Textstyles={s`fx:1 &purple`}>
Hello World!
</Text>);}

Computed styles are prefixed with the & character. Note that we are passing isPurple as a hook's dependency to track it changes. We can then use this dependency in our computed styles as following.

import{Styles}from'react-native-use-styles';exportdefaultStyles({computed: {purple: ([isPurple])=>({color: isPurple ? 'purple' : 'black'});}});

If the dependencies change, only styles with a computed in it will be recomputed.

Dynamic styles:

importuseStylesfrom'./my-namespaced-styles';constComponent=(){const isPurple =useState(true);consts=useStyles();return(<Textstyles={s`fx:1 ${isPurple&&'.purple'}`}>
Hello World!
</Text>);}

And a simple style definition as following:

import{Styles}from'react-native-use-styles';exportdefaultStyles({purple: {color: 'purple'},});

There are plenty more things you can do with useStyles, learn more in User Guide

Definition order

You want your global styles to be defined or imported before all the other styles. So just import your global styles at the top of your App.js or your main entry point; before the imports of your custom or navigation component.

App.js

import'./globalStyles';// ultra safe zoneimportReactfrom'react';importCustomComponentfrom'./CustomComponent';exportdefaultfunctionApp(){return<CustomComponent/>;}

List of aliases

This is the current list of aliases available, we plan to add more.

bot=bottom;col=column;dir=direction;fx=flex;lt=left;rt=right;bg=background;txt=text;jf=justify;pd=padding;wd=width;hg=height;

Performance

This library was created with performance in mind; useStyles has multiple cache layers to avoid unnecessary renders, calculations, and transformations. More info in the User Guide

Contributing

We plan to keep working in the library to optimize and add new features (contributions are welcome). If you have an idea that could make this library better we would love to hear it. Please take a look at our Contributing Guidelines to get to know the rules and how to get started with your contribution.

How to run the demo app

In order to contribute with some code you will need to test your changes within the demo app. At the moment the mechanism that we are using to test the lib inside the app is to import it locally. That means that:

You need to install the dependencies on the library in production mode (npm install --only=prod) so you don't have problems with dual installations of react-native each time you make a change, you need to do a force install of the library inside the demo folder. If the problem persists, after you test or build the app you encounter duplicated issues, you may want to delete the modules of one of the packages, the lib or the demo app, to solve this issue.

If you are comfortable using something like Wix's wml, it could provide a better development experience for you. We wanted the main contributing option to not require any extra installations or knowledge. Symlinks have not worked and that is why we recommend Wml.

License

react-native-use-styles is available under the MIT license. See the LICENSE file for more info.

Credits

react-native-use-styles is maintained by Rootstrap with the help of our contributors.

About

A classy approach to manage your react native styles.

Topics

Resources

Code of conduct

Contributing

Stars

65 stars

Watchers

2 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages

Generated from wbkd/webpack-starter
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

npm version

A classy approach

Did you ever want to organize your styles properly? This library contains an easy to use API that lets you do it in a classy way.

Installation

npm i react-native-use-styles

Usage

Using styles

importuseStylesfrom'./my-namespaced-styles';constComponent=(){
const s=useStyles();return(<Textstyles={s`.global .namespaced`}>
Hello World!
</Text>);}

Note that we are classy now, and nobody would deny it. Next we'll define our .global and .namespaced styles to use them in our components as we are doing in this example.

Global styles

global-styles.js

import{GlobalStyles}from'react-native-use-styles';GlobalStyles({global: 'flex:1 fx:dir:row',});

We are using aliases or shortcuts to define our styles. This is equivalent to do:

import{GlobalStyles}from'react-native-use-styles';GlobalStyles({global: {flex: 1,flexDirection: 'row',},});

Namespaced styles

my-namespaced-styles.js

import{Styles}from'react-native-use-styles';exportdefaultStyles({reused: 'bg:color:green',namespaced: '.global .reused color:purple',});

Namespaced styles are a way to isolate a group of styles for a particular part of your app, it could be styles for a component, a screen, etc. This is a way to group semantically and avoid collisions between your styles. Note that we are exporting the result of our namespaced definition.

Constants

import{GlobalStyles}from'react-native-use-styles';GlobalStyles({constants: {purple: 'purple',},path: 'color:$purple',object: {color: '$purple'},});

You can define constants in your global or namespaced styles that will be available to reuse with the $ prefix.

Computed and Dynamic styles

Computed styles:

importuseStylesfrom'./my-namespaced-styles';constComponent=(){const isPurple =useState(true);consts=useStyles([isPurple]);return(<Textstyles={s`fx:1 &purple`}>
Hello World!
</Text>);}

Computed styles are prefixed with the & character. Note that we are passing isPurple as a hook's dependency to track it changes. We can then use this dependency in our computed styles as following.

import{Styles}from'react-native-use-styles';exportdefaultStyles({computed: {purple: ([isPurple])=>({color: isPurple ? 'purple' : 'black'});}});

If the dependencies change, only styles with a computed in it will be recomputed.

Dynamic styles:

importuseStylesfrom'./my-namespaced-styles';constComponent=(){const isPurple =useState(true);consts=useStyles();return(<Textstyles={s`fx:1 ${isPurple&&'.purple'}`}>
Hello World!
</Text>);}

And a simple style definition as following:

import{Styles}from'react-native-use-styles';exportdefaultStyles({purple: {color: 'purple'},});

There are plenty more things you can do with useStyles, learn more in User Guide

Definition order

You want your global styles to be defined or imported before all the other styles. So just import your global styles at the top of your App.js or your main entry point; before the imports of your custom or navigation component.

App.js

import'./globalStyles';// ultra safe zoneimportReactfrom'react';importCustomComponentfrom'./CustomComponent';exportdefaultfunctionApp(){return<CustomComponent/>;}

List of aliases

This is the current list of aliases available, we plan to add more.

bot=bottom;col=column;dir=direction;fx=flex;lt=left;rt=right;bg=background;txt=text;jf=justify;pd=padding;wd=width;hg=height;

Performance

This library was created with performance in mind; useStyles has multiple cache layers to avoid unnecessary renders, calculations, and transformations. More info in the User Guide

Contributing

We plan to keep working in the library to optimize and add new features (contributions are welcome). If you have an idea that could make this library better we would love to hear it. Please take a look at our Contributing Guidelines to get to know the rules and how to get started with your contribution.

How to run the demo app

In order to contribute with some code you will need to test your changes within the demo app. At the moment the mechanism that we are using to test the lib inside the app is to import it locally. That means that:

You need to install the dependencies on the library in production mode (npm install --only=prod) so you don't have problems with dual installations of react-native each time you make a change, you need to do a force install of the library inside the demo folder. If the problem persists, after you test or build the app you encounter duplicated issues, you may want to delete the modules of one of the packages, the lib or the demo app, to solve this issue.

If you are comfortable using something like Wix's wml, it could provide a better development experience for you. We wanted the main contributing option to not require any extra installations or knowledge. Symlinks have not worked and that is why we recommend Wml.

License

react-native-use-styles is available under the MIT license. See the LICENSE file for more info.

Credits

react-native-use-styles is maintained by Rootstrap with the help of our contributors.

About

A classy approach to manage your react native styles.

Topics

Resources

Code of conduct

Contributing

Stars

65 stars

Watchers

2 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages

Generated from wbkd/webpack-starter
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

npm version

A classy approach

Did you ever want to organize your styles properly? This library contains an easy to use API that lets you do it in a classy way.

Installation

npm i react-native-use-styles

Usage

Using styles

importuseStylesfrom'./my-namespaced-styles';constComponent=(){
const s=useStyles();return(<Textstyles={s`.global .namespaced`}>
Hello World!
</Text>);}

Note that we are classy now, and nobody would deny it. Next we'll define our .global and .namespaced styles to use them in our components as we are doing in this example.

Global styles

global-styles.js

import{GlobalStyles}from'react-native-use-styles';GlobalStyles({global: 'flex:1 fx:dir:row',});

We are using aliases or shortcuts to define our styles. This is equivalent to do:

import{GlobalStyles}from'react-native-use-styles';GlobalStyles({global: {flex: 1,flexDirection: 'row',},});

Namespaced styles

my-namespaced-styles.js

import{Styles}from'react-native-use-styles';exportdefaultStyles({reused: 'bg:color:green',namespaced: '.global .reused color:purple',});

Namespaced styles are a way to isolate a group of styles for a particular part of your app, it could be styles for a component, a screen, etc. This is a way to group semantically and avoid collisions between your styles. Note that we are exporting the result of our namespaced definition.

Constants

import{GlobalStyles}from'react-native-use-styles';GlobalStyles({constants: {purple: 'purple',},path: 'color:$purple',object: {color: '$purple'},});

You can define constants in your global or namespaced styles that will be available to reuse with the $ prefix.

Computed and Dynamic styles

Computed styles:

importuseStylesfrom'./my-namespaced-styles';constComponent=(){const isPurple =useState(true);consts=useStyles([isPurple]);return(<Textstyles={s`fx:1 &purple`}>
Hello World!
</Text>);}

Computed styles are prefixed with the & character. Note that we are passing isPurple as a hook's dependency to track it changes. We can then use this dependency in our computed styles as following.

import{Styles}from'react-native-use-styles';exportdefaultStyles({computed: {purple: ([isPurple])=>({color: isPurple ? 'purple' : 'black'});}});

If the dependencies change, only styles with a computed in it will be recomputed.

Dynamic styles:

importuseStylesfrom'./my-namespaced-styles';constComponent=(){const isPurple =useState(true);consts=useStyles();return(<Textstyles={s`fx:1 ${isPurple&&'.purple'}`}>
Hello World!
</Text>);}

And a simple style definition as following:

import{Styles}from'react-native-use-styles';exportdefaultStyles({purple: {color: 'purple'},});

There are plenty more things you can do with useStyles, learn more in User Guide

Definition order

You want your global styles to be defined or imported before all the other styles. So just import your global styles at the top of your App.js or your main entry point; before the imports of your custom or navigation component.

App.js

import'./globalStyles';// ultra safe zoneimportReactfrom'react';importCustomComponentfrom'./CustomComponent';exportdefaultfunctionApp(){return<CustomComponent/>;}

List of aliases

This is the current list of aliases available, we plan to add more.

bot=bottom;col=column;dir=direction;fx=flex;lt=left;rt=right;bg=background;txt=text;jf=justify;pd=padding;wd=width;hg=height;

Performance

This library was created with performance in mind; useStyles has multiple cache layers to avoid unnecessary renders, calculations, and transformations. More info in the User Guide

Contributing

We plan to keep working in the library to optimize and add new features (contributions are welcome). If you have an idea that could make this library better we would love to hear it. Please take a look at our Contributing Guidelines to get to know the rules and how to get started with your contribution.

How to run the demo app

In order to contribute with some code you will need to test your changes within the demo app. At the moment the mechanism that we are using to test the lib inside the app is to import it locally. That means that:

You need to install the dependencies on the library in production mode (npm install --only=prod) so you don't have problems with dual installations of react-native each time you make a change, you need to do a force install of the library inside the demo folder. If the problem persists, after you test or build the app you encounter duplicated issues, you may want to delete the modules of one of the packages, the lib or the demo app, to solve this issue.

If you are comfortable using something like Wix's wml, it could provide a better development experience for you. We wanted the main contributing option to not require any extra installations or knowledge. Symlinks have not worked and that is why we recommend Wml.

License

react-native-use-styles is available under the MIT license. See the LICENSE file for more info.

Credits

react-native-use-styles is maintained by Rootstrap with the help of our contributors.

About

A classy approach to manage your react native styles.

Topics

Resources

Code of conduct

Contributing

Stars

65 stars

Watchers

2 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages

Generated from wbkd/webpack-starter
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

npm version

A classy approach

Did you ever want to organize your styles properly? This library contains an easy to use API that lets you do it in a classy way.

Installation

npm i react-native-use-styles

Usage

Using styles

importuseStylesfrom'./my-namespaced-styles';constComponent=(){
const s=useStyles();return(<Textstyles={s`.global .namespaced`}>
Hello World!
</Text>);}

Note that we are classy now, and nobody would deny it. Next we'll define our .global and .namespaced styles to use them in our components as we are doing in this example.

Global styles

global-styles.js

import{GlobalStyles}from'react-native-use-styles';GlobalStyles({global: 'flex:1 fx:dir:row',});

We are using aliases or shortcuts to define our styles. This is equivalent to do:

import{GlobalStyles}from'react-native-use-styles';GlobalStyles({global: {flex: 1,flexDirection: 'row',},});

Namespaced styles

my-namespaced-styles.js

import{Styles}from'react-native-use-styles';exportdefaultStyles({reused: 'bg:color:green',namespaced: '.global .reused color:purple',});

Namespaced styles are a way to isolate a group of styles for a particular part of your app, it could be styles for a component, a screen, etc. This is a way to group semantically and avoid collisions between your styles. Note that we are exporting the result of our namespaced definition.

Constants

import{GlobalStyles}from'react-native-use-styles';GlobalStyles({constants: {purple: 'purple',},path: 'color:$purple',object: {color: '$purple'},});

You can define constants in your global or namespaced styles that will be available to reuse with the $ prefix.

Computed and Dynamic styles

Computed styles:

importuseStylesfrom'./my-namespaced-styles';constComponent=(){const isPurple =useState(true);consts=useStyles([isPurple]);return(<Textstyles={s`fx:1 &purple`}>
Hello World!
</Text>);}

Computed styles are prefixed with the & character. Note that we are passing isPurple as a hook's dependency to track it changes. We can then use this dependency in our computed styles as following.

import{Styles}from'react-native-use-styles';exportdefaultStyles({computed: {purple: ([isPurple])=>({color: isPurple ? 'purple' : 'black'});}});

If the dependencies change, only styles with a computed in it will be recomputed.

Dynamic styles:

importuseStylesfrom'./my-namespaced-styles';constComponent=(){const isPurple =useState(true);consts=useStyles();return(<Textstyles={s`fx:1 ${isPurple&&'.purple'}`}>
Hello World!
</Text>);}

And a simple style definition as following:

import{Styles}from'react-native-use-styles';exportdefaultStyles({purple: {color: 'purple'},});

There are plenty more things you can do with useStyles, learn more in User Guide

Definition order

You want your global styles to be defined or imported before all the other styles. So just import your global styles at the top of your App.js or your main entry point; before the imports of your custom or navigation component.

App.js

import'./globalStyles';// ultra safe zoneimportReactfrom'react';importCustomComponentfrom'./CustomComponent';exportdefaultfunctionApp(){return<CustomComponent/>;}

List of aliases

This is the current list of aliases available, we plan to add more.

bot=bottom;col=column;dir=direction;fx=flex;lt=left;rt=right;bg=background;txt=text;jf=justify;pd=padding;wd=width;hg=height;

Performance

This library was created with performance in mind; useStyles has multiple cache layers to avoid unnecessary renders, calculations, and transformations. More info in the User Guide

Contributing

We plan to keep working in the library to optimize and add new features (contributions are welcome). If you have an idea that could make this library better we would love to hear it. Please take a look at our Contributing Guidelines to get to know the rules and how to get started with your contribution.

How to run the demo app

In order to contribute with some code you will need to test your changes within the demo app. At the moment the mechanism that we are using to test the lib inside the app is to import it locally. That means that:

You need to install the dependencies on the library in production mode (npm install --only=prod) so you don't have problems with dual installations of react-native each time you make a change, you need to do a force install of the library inside the demo folder. If the problem persists, after you test or build the app you encounter duplicated issues, you may want to delete the modules of one of the packages, the lib or the demo app, to solve this issue.

If you are comfortable using something like Wix's wml, it could provide a better development experience for you. We wanted the main contributing option to not require any extra installations or knowledge. Symlinks have not worked and that is why we recommend Wml.

License

react-native-use-styles is available under the MIT license. See the LICENSE file for more info.

Credits

react-native-use-styles is maintained by Rootstrap with the help of our contributors.

About

A classy approach to manage your react native styles.

Topics

Resources

Code of conduct

Contributing

Stars

65 stars

Watchers

2 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages

Generated from wbkd/webpack-starter
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

npm version

A classy approach

Did you ever want to organize your styles properly? This library contains an easy to use API that lets you do it in a classy way.

Installation

npm i react-native-use-styles

Usage

Using styles

importuseStylesfrom'./my-namespaced-styles';constComponent=(){
const s=useStyles();return(<Textstyles={s`.global .namespaced`}>
Hello World!
</Text>);}

Note that we are classy now, and nobody would deny it. Next we'll define our .global and .namespaced styles to use them in our components as we are doing in this example.

Global styles

global-styles.js

import{GlobalStyles}from'react-native-use-styles';GlobalStyles({global: 'flex:1 fx:dir:row',});

We are using aliases or shortcuts to define our styles. This is equivalent to do:

import{GlobalStyles}from'react-native-use-styles';GlobalStyles({global: {flex: 1,flexDirection: 'row',},});

Namespaced styles

my-namespaced-styles.js

import{Styles}from'react-native-use-styles';exportdefaultStyles({reused: 'bg:color:green',namespaced: '.global .reused color:purple',});

Namespaced styles are a way to isolate a group of styles for a particular part of your app, it could be styles for a component, a screen, etc. This is a way to group semantically and avoid collisions between your styles. Note that we are exporting the result of our namespaced definition.

Constants

import{GlobalStyles}from'react-native-use-styles';GlobalStyles({constants: {purple: 'purple',},path: 'color:$purple',object: {color: '$purple'},});

You can define constants in your global or namespaced styles that will be available to reuse with the $ prefix.

Computed and Dynamic styles

Computed styles:

importuseStylesfrom'./my-namespaced-styles';constComponent=(){const isPurple =useState(true);consts=useStyles([isPurple]);return(<Textstyles={s`fx:1 &purple`}>
Hello World!
</Text>);}

Computed styles are prefixed with the & character. Note that we are passing isPurple as a hook's dependency to track it changes. We can then use this dependency in our computed styles as following.

import{Styles}from'react-native-use-styles';exportdefaultStyles({computed: {purple: ([isPurple])=>({color: isPurple ? 'purple' : 'black'});}});

If the dependencies change, only styles with a computed in it will be recomputed.

Dynamic styles:

importuseStylesfrom'./my-namespaced-styles';constComponent=(){const isPurple =useState(true);consts=useStyles();return(<Textstyles={s`fx:1 ${isPurple&&'.purple'}`}>
Hello World!
</Text>);}

And a simple style definition as following:

import{Styles}from'react-native-use-styles';exportdefaultStyles({purple: {color: 'purple'},});

There are plenty more things you can do with useStyles, learn more in User Guide

Definition order

You want your global styles to be defined or imported before all the other styles. So just import your global styles at the top of your App.js or your main entry point; before the imports of your custom or navigation component.

App.js

import'./globalStyles';// ultra safe zoneimportReactfrom'react';importCustomComponentfrom'./CustomComponent';exportdefaultfunctionApp(){return<CustomComponent/>;}

List of aliases

This is the current list of aliases available, we plan to add more.

bot=bottom;col=column;dir=direction;fx=flex;lt=left;rt=right;bg=background;txt=text;jf=justify;pd=padding;wd=width;hg=height;

Performance

This library was created with performance in mind; useStyles has multiple cache layers to avoid unnecessary renders, calculations, and transformations. More info in the User Guide

Contributing

We plan to keep working in the library to optimize and add new features (contributions are welcome). If you have an idea that could make this library better we would love to hear it. Please take a look at our Contributing Guidelines to get to know the rules and how to get started with your contribution.

How to run the demo app

In order to contribute with some code you will need to test your changes within the demo app. At the moment the mechanism that we are using to test the lib inside the app is to import it locally. That means that:

You need to install the dependencies on the library in production mode (npm install --only=prod) so you don't have problems with dual installations of react-native each time you make a change, you need to do a force install of the library inside the demo folder. If the problem persists, after you test or build the app you encounter duplicated issues, you may want to delete the modules of one of the packages, the lib or the demo app, to solve this issue.

If you are comfortable using something like Wix's wml, it could provide a better development experience for you. We wanted the main contributing option to not require any extra installations or knowledge. Symlinks have not worked and that is why we recommend Wml.

License

react-native-use-styles is available under the MIT license. See the LICENSE file for more info.

Credits

react-native-use-styles is maintained by Rootstrap with the help of our contributors.

About

A classy approach to manage your react native styles.

Topics

Resources

Code of conduct

Contributing

Stars

65 stars

Watchers

2 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages

Generated from wbkd/webpack-starter
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

npm version

A classy approach

Did you ever want to organize your styles properly? This library contains an easy to use API that lets you do it in a classy way.

Installation

npm i react-native-use-styles

Usage

Using styles

importuseStylesfrom'./my-namespaced-styles';constComponent=(){
const s=useStyles();return(<Textstyles={s`.global .namespaced`}>
Hello World!
</Text>);}

Note that we are classy now, and nobody would deny it. Next we'll define our .global and .namespaced styles to use them in our components as we are doing in this example.

Global styles

global-styles.js

import{GlobalStyles}from'react-native-use-styles';GlobalStyles({global: 'flex:1 fx:dir:row',});

We are using aliases or shortcuts to define our styles. This is equivalent to do:

import{GlobalStyles}from'react-native-use-styles';GlobalStyles({global: {flex: 1,flexDirection: 'row',},});

Namespaced styles

my-namespaced-styles.js

import{Styles}from'react-native-use-styles';exportdefaultStyles({reused: 'bg:color:green',namespaced: '.global .reused color:purple',});

Namespaced styles are a way to isolate a group of styles for a particular part of your app, it could be styles for a component, a screen, etc. This is a way to group semantically and avoid collisions between your styles. Note that we are exporting the result of our namespaced definition.

Constants

import{GlobalStyles}from'react-native-use-styles';GlobalStyles({constants: {purple: 'purple',},path: 'color:$purple',object: {color: '$purple'},});

You can define constants in your global or namespaced styles that will be available to reuse with the $ prefix.

Computed and Dynamic styles

Computed styles:

importuseStylesfrom'./my-namespaced-styles';constComponent=(){const isPurple =useState(true);consts=useStyles([isPurple]);return(<Textstyles={s`fx:1 &purple`}>
Hello World!
</Text>);}

Computed styles are prefixed with the & character. Note that we are passing isPurple as a hook's dependency to track it changes. We can then use this dependency in our computed styles as following.

import{Styles}from'react-native-use-styles';exportdefaultStyles({computed: {purple: ([isPurple])=>({color: isPurple ? 'purple' : 'black'});}});

If the dependencies change, only styles with a computed in it will be recomputed.

Dynamic styles:

importuseStylesfrom'./my-namespaced-styles';constComponent=(){const isPurple =useState(true);consts=useStyles();return(<Textstyles={s`fx:1 ${isPurple&&'.purple'}`}>
Hello World!
</Text>);}

And a simple style definition as following:

import{Styles}from'react-native-use-styles';exportdefaultStyles({purple: {color: 'purple'},});

There are plenty more things you can do with useStyles, learn more in User Guide

Definition order

You want your global styles to be defined or imported before all the other styles. So just import your global styles at the top of your App.js or your main entry point; before the imports of your custom or navigation component.

App.js

import'./globalStyles';// ultra safe zoneimportReactfrom'react';importCustomComponentfrom'./CustomComponent';exportdefaultfunctionApp(){return<CustomComponent/>;}

List of aliases

This is the current list of aliases available, we plan to add more.

bot=bottom;col=column;dir=direction;fx=flex;lt=left;rt=right;bg=background;txt=text;jf=justify;pd=padding;wd=width;hg=height;

Performance

This library was created with performance in mind; useStyles has multiple cache layers to avoid unnecessary renders, calculations, and transformations. More info in the User Guide

Contributing

We plan to keep working in the library to optimize and add new features (contributions are welcome). If you have an idea that could make this library better we would love to hear it. Please take a look at our Contributing Guidelines to get to know the rules and how to get started with your contribution.

How to run the demo app

In order to contribute with some code you will need to test your changes within the demo app. At the moment the mechanism that we are using to test the lib inside the app is to import it locally. That means that:

You need to install the dependencies on the library in production mode (npm install --only=prod) so you don't have problems with dual installations of react-native each time you make a change, you need to do a force install of the library inside the demo folder. If the problem persists, after you test or build the app you encounter duplicated issues, you may want to delete the modules of one of the packages, the lib or the demo app, to solve this issue.

If you are comfortable using something like Wix's wml, it could provide a better development experience for you. We wanted the main contributing option to not require any extra installations or knowledge. Symlinks have not worked and that is why we recommend Wml.

License

react-native-use-styles is available under the MIT license. See the LICENSE file for more info.

Credits

react-native-use-styles is maintained by Rootstrap with the help of our contributors.

About

A classy approach to manage your react native styles.

Topics

Resources

Code of conduct

Contributing

Stars

65 stars

Watchers

2 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages

Generated from wbkd/webpack-starter
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

npm version

A classy approach

Did you ever want to organize your styles properly? This library contains an easy to use API that lets you do it in a classy way.

Installation

npm i react-native-use-styles

Usage

Using styles

importuseStylesfrom'./my-namespaced-styles';constComponent=(){
const s=useStyles();return(<Textstyles={s`.global .namespaced`}>
Hello World!
</Text>);}

Note that we are classy now, and nobody would deny it. Next we'll define our .global and .namespaced styles to use them in our components as we are doing in this example.

Global styles

global-styles.js

import{GlobalStyles}from'react-native-use-styles';GlobalStyles({global: 'flex:1 fx:dir:row',});

We are using aliases or shortcuts to define our styles. This is equivalent to do:

import{GlobalStyles}from'react-native-use-styles';GlobalStyles({global: {flex: 1,flexDirection: 'row',},});

Namespaced styles

my-namespaced-styles.js

import{Styles}from'react-native-use-styles';exportdefaultStyles({reused: 'bg:color:green',namespaced: '.global .reused color:purple',});

Namespaced styles are a way to isolate a group of styles for a particular part of your app, it could be styles for a component, a screen, etc. This is a way to group semantically and avoid collisions between your styles. Note that we are exporting the result of our namespaced definition.

Constants

import{GlobalStyles}from'react-native-use-styles';GlobalStyles({constants: {purple: 'purple',},path: 'color:$purple',object: {color: '$purple'},});

You can define constants in your global or namespaced styles that will be available to reuse with the $ prefix.

Computed and Dynamic styles

Computed styles:

importuseStylesfrom'./my-namespaced-styles';constComponent=(){const isPurple =useState(true);consts=useStyles([isPurple]);return(<Textstyles={s`fx:1 &purple`}>
Hello World!
</Text>);}

Computed styles are prefixed with the & character. Note that we are passing isPurple as a hook's dependency to track it changes. We can then use this dependency in our computed styles as following.

import{Styles}from'react-native-use-styles';exportdefaultStyles({computed: {purple: ([isPurple])=>({color: isPurple ? 'purple' : 'black'});}});

If the dependencies change, only styles with a computed in it will be recomputed.

Dynamic styles:

importuseStylesfrom'./my-namespaced-styles';constComponent=(){const isPurple =useState(true);consts=useStyles();return(<Textstyles={s`fx:1 ${isPurple&&'.purple'}`}>
Hello World!
</Text>);}

And a simple style definition as following:

import{Styles}from'react-native-use-styles';exportdefaultStyles({purple: {color: 'purple'},});

There are plenty more things you can do with useStyles, learn more in User Guide

Definition order

You want your global styles to be defined or imported before all the other styles. So just import your global styles at the top of your App.js or your main entry point; before the imports of your custom or navigation component.

App.js

import'./globalStyles';// ultra safe zoneimportReactfrom'react';importCustomComponentfrom'./CustomComponent';exportdefaultfunctionApp(){return<CustomComponent/>;}

List of aliases

This is the current list of aliases available, we plan to add more.

bot=bottom;col=column;dir=direction;fx=flex;lt=left;rt=right;bg=background;txt=text;jf=justify;pd=padding;wd=width;hg=height;

Performance

This library was created with performance in mind; useStyles has multiple cache layers to avoid unnecessary renders, calculations, and transformations. More info in the User Guide

Contributing

We plan to keep working in the library to optimize and add new features (contributions are welcome). If you have an idea that could make this library better we would love to hear it. Please take a look at our Contributing Guidelines to get to know the rules and how to get started with your contribution.

How to run the demo app

In order to contribute with some code you will need to test your changes within the demo app. At the moment the mechanism that we are using to test the lib inside the app is to import it locally. That means that:

You need to install the dependencies on the library in production mode (npm install --only=prod) so you don't have problems with dual installations of react-native each time you make a change, you need to do a force install of the library inside the demo folder. If the problem persists, after you test or build the app you encounter duplicated issues, you may want to delete the modules of one of the packages, the lib or the demo app, to solve this issue.

If you are comfortable using something like Wix's wml, it could provide a better development experience for you. We wanted the main contributing option to not require any extra installations or knowledge. Symlinks have not worked and that is why we recommend Wml.

License

react-native-use-styles is available under the MIT license. See the LICENSE file for more info.

Credits

react-native-use-styles is maintained by Rootstrap with the help of our contributors.

About

A classy approach to manage your react native styles.

Topics

Resources

Code of conduct

Contributing

Stars

65 stars

Watchers

2 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages

Generated from wbkd/webpack-starter
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

npm version

A classy approach

Did you ever want to organize your styles properly? This library contains an easy to use API that lets you do it in a classy way.

Installation

npm i react-native-use-styles

Usage

Using styles

importuseStylesfrom'./my-namespaced-styles';constComponent=(){
const s=useStyles();return(<Textstyles={s`.global .namespaced`}>
Hello World!
</Text>);}

Note that we are classy now, and nobody would deny it. Next we'll define our .global and .namespaced styles to use them in our components as we are doing in this example.

Global styles

global-styles.js

import{GlobalStyles}from'react-native-use-styles';GlobalStyles({global: 'flex:1 fx:dir:row',});

We are using aliases or shortcuts to define our styles. This is equivalent to do:

import{GlobalStyles}from'react-native-use-styles';GlobalStyles({global: {flex: 1,flexDirection: 'row',},});

Namespaced styles

my-namespaced-styles.js

import{Styles}from'react-native-use-styles';exportdefaultStyles({reused: 'bg:color:green',namespaced: '.global .reused color:purple',});

Namespaced styles are a way to isolate a group of styles for a particular part of your app, it could be styles for a component, a screen, etc. This is a way to group semantically and avoid collisions between your styles. Note that we are exporting the result of our namespaced definition.

Constants

import{GlobalStyles}from'react-native-use-styles';GlobalStyles({constants: {purple: 'purple',},path: 'color:$purple',object: {color: '$purple'},});

You can define constants in your global or namespaced styles that will be available to reuse with the $ prefix.

Computed and Dynamic styles

Computed styles:

importuseStylesfrom'./my-namespaced-styles';constComponent=(){const isPurple =useState(true);consts=useStyles([isPurple]);return(<Textstyles={s`fx:1 &purple`}>
Hello World!
</Text>);}

Computed styles are prefixed with the & character. Note that we are passing isPurple as a hook's dependency to track it changes. We can then use this dependency in our computed styles as following.

import{Styles}from'react-native-use-styles';exportdefaultStyles({computed: {purple: ([isPurple])=>({color: isPurple ? 'purple' : 'black'});}});

If the dependencies change, only styles with a computed in it will be recomputed.

Dynamic styles:

importuseStylesfrom'./my-namespaced-styles';constComponent=(){const isPurple =useState(true);consts=useStyles();return(<Textstyles={s`fx:1 ${isPurple&&'.purple'}`}>
Hello World!
</Text>);}

And a simple style definition as following:

import{Styles}from'react-native-use-styles';exportdefaultStyles({purple: {color: 'purple'},});

There are plenty more things you can do with useStyles, learn more in User Guide

Definition order

You want your global styles to be defined or imported before all the other styles. So just import your global styles at the top of your App.js or your main entry point; before the imports of your custom or navigation component.

App.js

import'./globalStyles';// ultra safe zoneimportReactfrom'react';importCustomComponentfrom'./CustomComponent';exportdefaultfunctionApp(){return<CustomComponent/>;}

List of aliases

This is the current list of aliases available, we plan to add more.

bot=bottom;col=column;dir=direction;fx=flex;lt=left;rt=right;bg=background;txt=text;jf=justify;pd=padding;wd=width;hg=height;

Performance

This library was created with performance in mind; useStyles has multiple cache layers to avoid unnecessary renders, calculations, and transformations. More info in the User Guide

Contributing

We plan to keep working in the library to optimize and add new features (contributions are welcome). If you have an idea that could make this library better we would love to hear it. Please take a look at our Contributing Guidelines to get to know the rules and how to get started with your contribution.

How to run the demo app

In order to contribute with some code you will need to test your changes within the demo app. At the moment the mechanism that we are using to test the lib inside the app is to import it locally. That means that:

You need to install the dependencies on the library in production mode (npm install --only=prod) so you don't have problems with dual installations of react-native each time you make a change, you need to do a force install of the library inside the demo folder. If the problem persists, after you test or build the app you encounter duplicated issues, you may want to delete the modules of one of the packages, the lib or the demo app, to solve this issue.

If you are comfortable using something like Wix's wml, it could provide a better development experience for you. We wanted the main contributing option to not require any extra installations or knowledge. Symlinks have not worked and that is why we recommend Wml.

License

react-native-use-styles is available under the MIT license. See the LICENSE file for more info.

Credits

react-native-use-styles is maintained by Rootstrap with the help of our contributors.

About

A classy approach to manage your react native styles.

Topics

Resources

Code of conduct

Contributing

Stars

65 stars

Watchers

2 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages

Generated from wbkd/webpack-starter