Repository files navigation

πŸŒ— react-theme-mode

Hook to manage your theme mode in React.


npm versionci statusGitHub licensePRs Welcomecode style: prettierbuild formatsbundle size


Menu

Motivation

Do you often find yourself in a situation where you have to implement once more the theme mode management in your React application ?

Would you like your theme mode to be saved in your users' browser for future visits ?

Well, if so, react-theme-mode was made for you. It handles all those features for you. It comes you with a pair of Provider and Hook that will provide you with the following features:

  • Management of the theme mode across all your React application.
  • The Hook comes with a simple interface: the theme and a setter.
  • The theme mode picked by your users will automatically be saved to their localStorage.
  • Next time your users visit your application, their saved theme mode will be used by default.

Note: react-theme-mode is also Server-Side-Rendering friendly! :)

Requirements

Since the library was built using React, you will need the following dependancy to make it work:

Get Started

Installation

yarn add react-theme-mode or npm add react-theme-mode.

Imports

react-theme-mode is shipped in both cjs and esm formats, so you can use either ES5 or ES6+ imports:

ES6

import{useThemeMode}from'react-theme-mode'

ES5

const{ useThemeMode }=require('react-theme-mode')

Also: react-theme-mode is tree-shakeable and side-effects free!

Usage

You only need two steps to get started:

1. The Provider

Since react-theme-mode is built using React's Context, you will need to wrap your React application, or at least the part of your application that will consume the Hook inside the <ThemeModeProvider> component:

import{ThemeModeProvider}from'react-theme-mode'importSomeComponentfrom'./SomeComponent'constApp=()=>{return(<ThemeModeProviderdefaultTheme="dark"><SomeComponent/></ThemeModeProvider>)}

Please note that the defaultTheme prop is mandatory in case the client doesn't have any theme saved in the broswer yet.

You may be rendering your React application on server-side using CSS-in-JS solutions - in this case, since the views are built on the server, there is no localStorage to access to. You will need to pass the isSSR prop to the <ThemeModeProvider> so that it re-renders the views on runtime, to take into account the theme mode stored in the localStorage.

2. The Hook

You can then consume the useThemeMode() hook and manage your theme from SomeComponent:

import{useThemeMode}from'react-theme-mode'constSomeComponent=()=>{const[theme,setTheme]=useThemeMode()return(<div><p>Current theme: {theme}</p><buttononClick={()=>setTheme('light')}>light theme</button></div>)}

The setTheme() function will automatically save the new theme in the localStorage for future visits. You can disable this default behavior using the noStorage prop. See the API section below for more references.

Since the useThemeMode() hook is using a Context, you can manage your theme from anywhere inside your React application.

API

ThemeModeProvider

A React provider. Provides a state management for the theme mode. You need to wrap any of your components that consume the useThemeMode() hook inside it. It acts mainly as a initializer of your theme.

Props

PropsTypeDefault ValueDescription
defaultTheme*stringThe default theme mode. The provider will fallback to this value if it does not find the saved mode in the localStorage. Required.
isSSRbooleanfalseIf you are rendering your front-end on server-side, and using CSS-in-JS solutions, set this prop to true. Since localStorage is not available on server-side, we need to update the internal state during runtime, and re-render the react views.
noStoragebooleanfalseBy default, the theme-mode selected by the vistor is saved in the localStorage. Use this prop if you don't want to save it nor use it as initial value.

Example

<ThemeModeProviderdefaultTheme="dark"><SomeComponent/></ThemeModeProvider>

useThemeMode()

A React hook. You can use this hook to manage your theme across your application on runtime. Just like React.setState(), the hook returns an array of 2 elements: the theme and its setter.

By default, it will look for the value stored in the localStorage. If it does not exist, it will fallback to the defaultTheme you give it. If no defaultTheme is given, it will return null.

Returns

  • Array [string | null, (string) => void]: the array containing the theme and its setter.

Example

const[theme,setTheme]=useThemeMode()...setTheme('dark')

Contributing

Any contribution would be more than welcome.

Found any bugs or you have some ideas ? Please, open an issue or a PR! :)

The following commands are executed with yarn, but you can of course use any package manager tool like npm or npx.

To install dependencies:

yarn install

To build the project:

yarn build

To run the tests:

yarn test

Before you commit:

yarn validate

About

πŸŒ— Hook to manage your theme mode in React.

Topics

Resources

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, '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

πŸŒ— react-theme-mode

Hook to manage your theme mode in React.


npm versionci statusGitHub licensePRs Welcomecode style: prettierbuild formatsbundle size


Menu

Motivation

Do you often find yourself in a situation where you have to implement once more the theme mode management in your React application ?

Would you like your theme mode to be saved in your users' browser for future visits ?

Well, if so, react-theme-mode was made for you. It handles all those features for you. It comes you with a pair of Provider and Hook that will provide you with the following features:

  • Management of the theme mode across all your React application.
  • The Hook comes with a simple interface: the theme and a setter.
  • The theme mode picked by your users will automatically be saved to their localStorage.
  • Next time your users visit your application, their saved theme mode will be used by default.

Note: react-theme-mode is also Server-Side-Rendering friendly! :)

Requirements

Since the library was built using React, you will need the following dependancy to make it work:

Get Started

Installation

yarn add react-theme-mode or npm add react-theme-mode.

Imports

react-theme-mode is shipped in both cjs and esm formats, so you can use either ES5 or ES6+ imports:

ES6

import{useThemeMode}from'react-theme-mode'

ES5

const{ useThemeMode }=require('react-theme-mode')

Also: react-theme-mode is tree-shakeable and side-effects free!

Usage

You only need two steps to get started:

1. The Provider

Since react-theme-mode is built using React's Context, you will need to wrap your React application, or at least the part of your application that will consume the Hook inside the <ThemeModeProvider> component:

import{ThemeModeProvider}from'react-theme-mode'importSomeComponentfrom'./SomeComponent'constApp=()=>{return(<ThemeModeProviderdefaultTheme="dark"><SomeComponent/></ThemeModeProvider>)}

Please note that the defaultTheme prop is mandatory in case the client doesn't have any theme saved in the broswer yet.

You may be rendering your React application on server-side using CSS-in-JS solutions - in this case, since the views are built on the server, there is no localStorage to access to. You will need to pass the isSSR prop to the <ThemeModeProvider> so that it re-renders the views on runtime, to take into account the theme mode stored in the localStorage.

2. The Hook

You can then consume the useThemeMode() hook and manage your theme from SomeComponent:

import{useThemeMode}from'react-theme-mode'constSomeComponent=()=>{const[theme,setTheme]=useThemeMode()return(<div><p>Current theme: {theme}</p><buttononClick={()=>setTheme('light')}>light theme</button></div>)}

The setTheme() function will automatically save the new theme in the localStorage for future visits. You can disable this default behavior using the noStorage prop. See the API section below for more references.

Since the useThemeMode() hook is using a Context, you can manage your theme from anywhere inside your React application.

API

ThemeModeProvider

A React provider. Provides a state management for the theme mode. You need to wrap any of your components that consume the useThemeMode() hook inside it. It acts mainly as a initializer of your theme.

Props

PropsTypeDefault ValueDescription
defaultTheme*stringThe default theme mode. The provider will fallback to this value if it does not find the saved mode in the localStorage. Required.
isSSRbooleanfalseIf you are rendering your front-end on server-side, and using CSS-in-JS solutions, set this prop to true. Since localStorage is not available on server-side, we need to update the internal state during runtime, and re-render the react views.
noStoragebooleanfalseBy default, the theme-mode selected by the vistor is saved in the localStorage. Use this prop if you don't want to save it nor use it as initial value.

Example

<ThemeModeProviderdefaultTheme="dark"><SomeComponent/></ThemeModeProvider>

useThemeMode()

A React hook. You can use this hook to manage your theme across your application on runtime. Just like React.setState(), the hook returns an array of 2 elements: the theme and its setter.

By default, it will look for the value stored in the localStorage. If it does not exist, it will fallback to the defaultTheme you give it. If no defaultTheme is given, it will return null.

Returns

  • Array [string | null, (string) => void]: the array containing the theme and its setter.

Example

const[theme,setTheme]=useThemeMode()...setTheme('dark')

Contributing

Any contribution would be more than welcome.

Found any bugs or you have some ideas ? Please, open an issue or a PR! :)

The following commands are executed with yarn, but you can of course use any package manager tool like npm or npx.

To install dependencies:

yarn install

To build the project:

yarn build

To run the tests:

yarn test

Before you commit:

yarn validate

About

πŸŒ— Hook to manage your theme mode in React.

Topics

Resources

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, '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

πŸŒ— react-theme-mode

Hook to manage your theme mode in React.


npm versionci statusGitHub licensePRs Welcomecode style: prettierbuild formatsbundle size


Menu

Motivation

Do you often find yourself in a situation where you have to implement once more the theme mode management in your React application ?

Would you like your theme mode to be saved in your users' browser for future visits ?

Well, if so, react-theme-mode was made for you. It handles all those features for you. It comes you with a pair of Provider and Hook that will provide you with the following features:

  • Management of the theme mode across all your React application.
  • The Hook comes with a simple interface: the theme and a setter.
  • The theme mode picked by your users will automatically be saved to their localStorage.
  • Next time your users visit your application, their saved theme mode will be used by default.

Note: react-theme-mode is also Server-Side-Rendering friendly! :)

Requirements

Since the library was built using React, you will need the following dependancy to make it work:

Get Started

Installation

yarn add react-theme-mode or npm add react-theme-mode.

Imports

react-theme-mode is shipped in both cjs and esm formats, so you can use either ES5 or ES6+ imports:

ES6

import{useThemeMode}from'react-theme-mode'

ES5

const{ useThemeMode }=require('react-theme-mode')

Also: react-theme-mode is tree-shakeable and side-effects free!

Usage

You only need two steps to get started:

1. The Provider

Since react-theme-mode is built using React's Context, you will need to wrap your React application, or at least the part of your application that will consume the Hook inside the <ThemeModeProvider> component:

import{ThemeModeProvider}from'react-theme-mode'importSomeComponentfrom'./SomeComponent'constApp=()=>{return(<ThemeModeProviderdefaultTheme="dark"><SomeComponent/></ThemeModeProvider>)}

Please note that the defaultTheme prop is mandatory in case the client doesn't have any theme saved in the broswer yet.

You may be rendering your React application on server-side using CSS-in-JS solutions - in this case, since the views are built on the server, there is no localStorage to access to. You will need to pass the isSSR prop to the <ThemeModeProvider> so that it re-renders the views on runtime, to take into account the theme mode stored in the localStorage.

2. The Hook

You can then consume the useThemeMode() hook and manage your theme from SomeComponent:

import{useThemeMode}from'react-theme-mode'constSomeComponent=()=>{const[theme,setTheme]=useThemeMode()return(<div><p>Current theme: {theme}</p><buttononClick={()=>setTheme('light')}>light theme</button></div>)}

The setTheme() function will automatically save the new theme in the localStorage for future visits. You can disable this default behavior using the noStorage prop. See the API section below for more references.

Since the useThemeMode() hook is using a Context, you can manage your theme from anywhere inside your React application.

API

ThemeModeProvider

A React provider. Provides a state management for the theme mode. You need to wrap any of your components that consume the useThemeMode() hook inside it. It acts mainly as a initializer of your theme.

Props

PropsTypeDefault ValueDescription
defaultTheme*stringThe default theme mode. The provider will fallback to this value if it does not find the saved mode in the localStorage. Required.
isSSRbooleanfalseIf you are rendering your front-end on server-side, and using CSS-in-JS solutions, set this prop to true. Since localStorage is not available on server-side, we need to update the internal state during runtime, and re-render the react views.
noStoragebooleanfalseBy default, the theme-mode selected by the vistor is saved in the localStorage. Use this prop if you don't want to save it nor use it as initial value.

Example

<ThemeModeProviderdefaultTheme="dark"><SomeComponent/></ThemeModeProvider>

useThemeMode()

A React hook. You can use this hook to manage your theme across your application on runtime. Just like React.setState(), the hook returns an array of 2 elements: the theme and its setter.

By default, it will look for the value stored in the localStorage. If it does not exist, it will fallback to the defaultTheme you give it. If no defaultTheme is given, it will return null.

Returns

  • Array [string | null, (string) => void]: the array containing the theme and its setter.

Example

const[theme,setTheme]=useThemeMode()...setTheme('dark')

Contributing

Any contribution would be more than welcome.

Found any bugs or you have some ideas ? Please, open an issue or a PR! :)

The following commands are executed with yarn, but you can of course use any package manager tool like npm or npx.

To install dependencies:

yarn install

To build the project:

yarn build

To run the tests:

yarn test

Before you commit:

yarn validate

About

πŸŒ— Hook to manage your theme mode in React.

Topics

Resources

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, '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

πŸŒ— react-theme-mode

Hook to manage your theme mode in React.


npm versionci statusGitHub licensePRs Welcomecode style: prettierbuild formatsbundle size


Menu

Motivation

Do you often find yourself in a situation where you have to implement once more the theme mode management in your React application ?

Would you like your theme mode to be saved in your users' browser for future visits ?

Well, if so, react-theme-mode was made for you. It handles all those features for you. It comes you with a pair of Provider and Hook that will provide you with the following features:

  • Management of the theme mode across all your React application.
  • The Hook comes with a simple interface: the theme and a setter.
  • The theme mode picked by your users will automatically be saved to their localStorage.
  • Next time your users visit your application, their saved theme mode will be used by default.

Note: react-theme-mode is also Server-Side-Rendering friendly! :)

Requirements

Since the library was built using React, you will need the following dependancy to make it work:

Get Started

Installation

yarn add react-theme-mode or npm add react-theme-mode.

Imports

react-theme-mode is shipped in both cjs and esm formats, so you can use either ES5 or ES6+ imports:

ES6

import{useThemeMode}from'react-theme-mode'

ES5

const{ useThemeMode }=require('react-theme-mode')

Also: react-theme-mode is tree-shakeable and side-effects free!

Usage

You only need two steps to get started:

1. The Provider

Since react-theme-mode is built using React's Context, you will need to wrap your React application, or at least the part of your application that will consume the Hook inside the <ThemeModeProvider> component:

import{ThemeModeProvider}from'react-theme-mode'importSomeComponentfrom'./SomeComponent'constApp=()=>{return(<ThemeModeProviderdefaultTheme="dark"><SomeComponent/></ThemeModeProvider>)}

Please note that the defaultTheme prop is mandatory in case the client doesn't have any theme saved in the broswer yet.

You may be rendering your React application on server-side using CSS-in-JS solutions - in this case, since the views are built on the server, there is no localStorage to access to. You will need to pass the isSSR prop to the <ThemeModeProvider> so that it re-renders the views on runtime, to take into account the theme mode stored in the localStorage.

2. The Hook

You can then consume the useThemeMode() hook and manage your theme from SomeComponent:

import{useThemeMode}from'react-theme-mode'constSomeComponent=()=>{const[theme,setTheme]=useThemeMode()return(<div><p>Current theme: {theme}</p><buttononClick={()=>setTheme('light')}>light theme</button></div>)}

The setTheme() function will automatically save the new theme in the localStorage for future visits. You can disable this default behavior using the noStorage prop. See the API section below for more references.

Since the useThemeMode() hook is using a Context, you can manage your theme from anywhere inside your React application.

API

ThemeModeProvider

A React provider. Provides a state management for the theme mode. You need to wrap any of your components that consume the useThemeMode() hook inside it. It acts mainly as a initializer of your theme.

Props

PropsTypeDefault ValueDescription
defaultTheme*stringThe default theme mode. The provider will fallback to this value if it does not find the saved mode in the localStorage. Required.
isSSRbooleanfalseIf you are rendering your front-end on server-side, and using CSS-in-JS solutions, set this prop to true. Since localStorage is not available on server-side, we need to update the internal state during runtime, and re-render the react views.
noStoragebooleanfalseBy default, the theme-mode selected by the vistor is saved in the localStorage. Use this prop if you don't want to save it nor use it as initial value.

Example

<ThemeModeProviderdefaultTheme="dark"><SomeComponent/></ThemeModeProvider>

useThemeMode()

A React hook. You can use this hook to manage your theme across your application on runtime. Just like React.setState(), the hook returns an array of 2 elements: the theme and its setter.

By default, it will look for the value stored in the localStorage. If it does not exist, it will fallback to the defaultTheme you give it. If no defaultTheme is given, it will return null.

Returns

  • Array [string | null, (string) => void]: the array containing the theme and its setter.

Example

const[theme,setTheme]=useThemeMode()...setTheme('dark')

Contributing

Any contribution would be more than welcome.

Found any bugs or you have some ideas ? Please, open an issue or a PR! :)

The following commands are executed with yarn, but you can of course use any package manager tool like npm or npx.

To install dependencies:

yarn install

To build the project:

yarn build

To run the tests:

yarn test

Before you commit:

yarn validate

About

πŸŒ— Hook to manage your theme mode in React.

Topics

Resources

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, '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

πŸŒ— react-theme-mode

Hook to manage your theme mode in React.


npm versionci statusGitHub licensePRs Welcomecode style: prettierbuild formatsbundle size


Menu

Motivation

Do you often find yourself in a situation where you have to implement once more the theme mode management in your React application ?

Would you like your theme mode to be saved in your users' browser for future visits ?

Well, if so, react-theme-mode was made for you. It handles all those features for you. It comes you with a pair of Provider and Hook that will provide you with the following features:

  • Management of the theme mode across all your React application.
  • The Hook comes with a simple interface: the theme and a setter.
  • The theme mode picked by your users will automatically be saved to their localStorage.
  • Next time your users visit your application, their saved theme mode will be used by default.

Note: react-theme-mode is also Server-Side-Rendering friendly! :)

Requirements

Since the library was built using React, you will need the following dependancy to make it work:

Get Started

Installation

yarn add react-theme-mode or npm add react-theme-mode.

Imports

react-theme-mode is shipped in both cjs and esm formats, so you can use either ES5 or ES6+ imports:

ES6

import{useThemeMode}from'react-theme-mode'

ES5

const{ useThemeMode }=require('react-theme-mode')

Also: react-theme-mode is tree-shakeable and side-effects free!

Usage

You only need two steps to get started:

1. The Provider

Since react-theme-mode is built using React's Context, you will need to wrap your React application, or at least the part of your application that will consume the Hook inside the <ThemeModeProvider> component:

import{ThemeModeProvider}from'react-theme-mode'importSomeComponentfrom'./SomeComponent'constApp=()=>{return(<ThemeModeProviderdefaultTheme="dark"><SomeComponent/></ThemeModeProvider>)}

Please note that the defaultTheme prop is mandatory in case the client doesn't have any theme saved in the broswer yet.

You may be rendering your React application on server-side using CSS-in-JS solutions - in this case, since the views are built on the server, there is no localStorage to access to. You will need to pass the isSSR prop to the <ThemeModeProvider> so that it re-renders the views on runtime, to take into account the theme mode stored in the localStorage.

2. The Hook

You can then consume the useThemeMode() hook and manage your theme from SomeComponent:

import{useThemeMode}from'react-theme-mode'constSomeComponent=()=>{const[theme,setTheme]=useThemeMode()return(<div><p>Current theme: {theme}</p><buttononClick={()=>setTheme('light')}>light theme</button></div>)}

The setTheme() function will automatically save the new theme in the localStorage for future visits. You can disable this default behavior using the noStorage prop. See the API section below for more references.

Since the useThemeMode() hook is using a Context, you can manage your theme from anywhere inside your React application.

API

ThemeModeProvider

A React provider. Provides a state management for the theme mode. You need to wrap any of your components that consume the useThemeMode() hook inside it. It acts mainly as a initializer of your theme.

Props

PropsTypeDefault ValueDescription
defaultTheme*stringThe default theme mode. The provider will fallback to this value if it does not find the saved mode in the localStorage. Required.
isSSRbooleanfalseIf you are rendering your front-end on server-side, and using CSS-in-JS solutions, set this prop to true. Since localStorage is not available on server-side, we need to update the internal state during runtime, and re-render the react views.
noStoragebooleanfalseBy default, the theme-mode selected by the vistor is saved in the localStorage. Use this prop if you don't want to save it nor use it as initial value.

Example

<ThemeModeProviderdefaultTheme="dark"><SomeComponent/></ThemeModeProvider>

useThemeMode()

A React hook. You can use this hook to manage your theme across your application on runtime. Just like React.setState(), the hook returns an array of 2 elements: the theme and its setter.

By default, it will look for the value stored in the localStorage. If it does not exist, it will fallback to the defaultTheme you give it. If no defaultTheme is given, it will return null.

Returns

  • Array [string | null, (string) => void]: the array containing the theme and its setter.

Example

const[theme,setTheme]=useThemeMode()...setTheme('dark')

Contributing

Any contribution would be more than welcome.

Found any bugs or you have some ideas ? Please, open an issue or a PR! :)

The following commands are executed with yarn, but you can of course use any package manager tool like npm or npx.

To install dependencies:

yarn install

To build the project:

yarn build

To run the tests:

yarn test

Before you commit:

yarn validate

About

πŸŒ— Hook to manage your theme mode in React.

Topics

Resources

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, '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

πŸŒ— react-theme-mode

Hook to manage your theme mode in React.


npm versionci statusGitHub licensePRs Welcomecode style: prettierbuild formatsbundle size


Menu

Motivation

Do you often find yourself in a situation where you have to implement once more the theme mode management in your React application ?

Would you like your theme mode to be saved in your users' browser for future visits ?

Well, if so, react-theme-mode was made for you. It handles all those features for you. It comes you with a pair of Provider and Hook that will provide you with the following features:

  • Management of the theme mode across all your React application.
  • The Hook comes with a simple interface: the theme and a setter.
  • The theme mode picked by your users will automatically be saved to their localStorage.
  • Next time your users visit your application, their saved theme mode will be used by default.

Note: react-theme-mode is also Server-Side-Rendering friendly! :)

Requirements

Since the library was built using React, you will need the following dependancy to make it work:

Get Started

Installation

yarn add react-theme-mode or npm add react-theme-mode.

Imports

react-theme-mode is shipped in both cjs and esm formats, so you can use either ES5 or ES6+ imports:

ES6

import{useThemeMode}from'react-theme-mode'

ES5

const{ useThemeMode }=require('react-theme-mode')

Also: react-theme-mode is tree-shakeable and side-effects free!

Usage

You only need two steps to get started:

1. The Provider

Since react-theme-mode is built using React's Context, you will need to wrap your React application, or at least the part of your application that will consume the Hook inside the <ThemeModeProvider> component:

import{ThemeModeProvider}from'react-theme-mode'importSomeComponentfrom'./SomeComponent'constApp=()=>{return(<ThemeModeProviderdefaultTheme="dark"><SomeComponent/></ThemeModeProvider>)}

Please note that the defaultTheme prop is mandatory in case the client doesn't have any theme saved in the broswer yet.

You may be rendering your React application on server-side using CSS-in-JS solutions - in this case, since the views are built on the server, there is no localStorage to access to. You will need to pass the isSSR prop to the <ThemeModeProvider> so that it re-renders the views on runtime, to take into account the theme mode stored in the localStorage.

2. The Hook

You can then consume the useThemeMode() hook and manage your theme from SomeComponent:

import{useThemeMode}from'react-theme-mode'constSomeComponent=()=>{const[theme,setTheme]=useThemeMode()return(<div><p>Current theme: {theme}</p><buttononClick={()=>setTheme('light')}>light theme</button></div>)}

The setTheme() function will automatically save the new theme in the localStorage for future visits. You can disable this default behavior using the noStorage prop. See the API section below for more references.

Since the useThemeMode() hook is using a Context, you can manage your theme from anywhere inside your React application.

API

ThemeModeProvider

A React provider. Provides a state management for the theme mode. You need to wrap any of your components that consume the useThemeMode() hook inside it. It acts mainly as a initializer of your theme.

Props

PropsTypeDefault ValueDescription
defaultTheme*stringThe default theme mode. The provider will fallback to this value if it does not find the saved mode in the localStorage. Required.
isSSRbooleanfalseIf you are rendering your front-end on server-side, and using CSS-in-JS solutions, set this prop to true. Since localStorage is not available on server-side, we need to update the internal state during runtime, and re-render the react views.
noStoragebooleanfalseBy default, the theme-mode selected by the vistor is saved in the localStorage. Use this prop if you don't want to save it nor use it as initial value.

Example

<ThemeModeProviderdefaultTheme="dark"><SomeComponent/></ThemeModeProvider>

useThemeMode()

A React hook. You can use this hook to manage your theme across your application on runtime. Just like React.setState(), the hook returns an array of 2 elements: the theme and its setter.

By default, it will look for the value stored in the localStorage. If it does not exist, it will fallback to the defaultTheme you give it. If no defaultTheme is given, it will return null.

Returns

  • Array [string | null, (string) => void]: the array containing the theme and its setter.

Example

const[theme,setTheme]=useThemeMode()...setTheme('dark')

Contributing

Any contribution would be more than welcome.

Found any bugs or you have some ideas ? Please, open an issue or a PR! :)

The following commands are executed with yarn, but you can of course use any package manager tool like npm or npx.

To install dependencies:

yarn install

To build the project:

yarn build

To run the tests:

yarn test

Before you commit:

yarn validate

About

πŸŒ— Hook to manage your theme mode in React.

Topics

Resources

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, '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

πŸŒ— react-theme-mode

Hook to manage your theme mode in React.


npm versionci statusGitHub licensePRs Welcomecode style: prettierbuild formatsbundle size


Menu

Motivation

Do you often find yourself in a situation where you have to implement once more the theme mode management in your React application ?

Would you like your theme mode to be saved in your users' browser for future visits ?

Well, if so, react-theme-mode was made for you. It handles all those features for you. It comes you with a pair of Provider and Hook that will provide you with the following features:

  • Management of the theme mode across all your React application.
  • The Hook comes with a simple interface: the theme and a setter.
  • The theme mode picked by your users will automatically be saved to their localStorage.
  • Next time your users visit your application, their saved theme mode will be used by default.

Note: react-theme-mode is also Server-Side-Rendering friendly! :)

Requirements

Since the library was built using React, you will need the following dependancy to make it work:

Get Started

Installation

yarn add react-theme-mode or npm add react-theme-mode.

Imports

react-theme-mode is shipped in both cjs and esm formats, so you can use either ES5 or ES6+ imports:

ES6

import{useThemeMode}from'react-theme-mode'

ES5

const{ useThemeMode }=require('react-theme-mode')

Also: react-theme-mode is tree-shakeable and side-effects free!

Usage

You only need two steps to get started:

1. The Provider

Since react-theme-mode is built using React's Context, you will need to wrap your React application, or at least the part of your application that will consume the Hook inside the <ThemeModeProvider> component:

import{ThemeModeProvider}from'react-theme-mode'importSomeComponentfrom'./SomeComponent'constApp=()=>{return(<ThemeModeProviderdefaultTheme="dark"><SomeComponent/></ThemeModeProvider>)}

Please note that the defaultTheme prop is mandatory in case the client doesn't have any theme saved in the broswer yet.

You may be rendering your React application on server-side using CSS-in-JS solutions - in this case, since the views are built on the server, there is no localStorage to access to. You will need to pass the isSSR prop to the <ThemeModeProvider> so that it re-renders the views on runtime, to take into account the theme mode stored in the localStorage.

2. The Hook

You can then consume the useThemeMode() hook and manage your theme from SomeComponent:

import{useThemeMode}from'react-theme-mode'constSomeComponent=()=>{const[theme,setTheme]=useThemeMode()return(<div><p>Current theme: {theme}</p><buttononClick={()=>setTheme('light')}>light theme</button></div>)}

The setTheme() function will automatically save the new theme in the localStorage for future visits. You can disable this default behavior using the noStorage prop. See the API section below for more references.

Since the useThemeMode() hook is using a Context, you can manage your theme from anywhere inside your React application.

API

ThemeModeProvider

A React provider. Provides a state management for the theme mode. You need to wrap any of your components that consume the useThemeMode() hook inside it. It acts mainly as a initializer of your theme.

Props

PropsTypeDefault ValueDescription
defaultTheme*stringThe default theme mode. The provider will fallback to this value if it does not find the saved mode in the localStorage. Required.
isSSRbooleanfalseIf you are rendering your front-end on server-side, and using CSS-in-JS solutions, set this prop to true. Since localStorage is not available on server-side, we need to update the internal state during runtime, and re-render the react views.
noStoragebooleanfalseBy default, the theme-mode selected by the vistor is saved in the localStorage. Use this prop if you don't want to save it nor use it as initial value.

Example

<ThemeModeProviderdefaultTheme="dark"><SomeComponent/></ThemeModeProvider>

useThemeMode()

A React hook. You can use this hook to manage your theme across your application on runtime. Just like React.setState(), the hook returns an array of 2 elements: the theme and its setter.

By default, it will look for the value stored in the localStorage. If it does not exist, it will fallback to the defaultTheme you give it. If no defaultTheme is given, it will return null.

Returns

  • Array [string | null, (string) => void]: the array containing the theme and its setter.

Example

const[theme,setTheme]=useThemeMode()...setTheme('dark')

Contributing

Any contribution would be more than welcome.

Found any bugs or you have some ideas ? Please, open an issue or a PR! :)

The following commands are executed with yarn, but you can of course use any package manager tool like npm or npx.

To install dependencies:

yarn install

To build the project:

yarn build

To run the tests:

yarn test

Before you commit:

yarn validate

About

πŸŒ— Hook to manage your theme mode in React.

Topics

Resources

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, '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

πŸŒ— react-theme-mode

Hook to manage your theme mode in React.


npm versionci statusGitHub licensePRs Welcomecode style: prettierbuild formatsbundle size


Menu

Motivation

Do you often find yourself in a situation where you have to implement once more the theme mode management in your React application ?

Would you like your theme mode to be saved in your users' browser for future visits ?

Well, if so, react-theme-mode was made for you. It handles all those features for you. It comes you with a pair of Provider and Hook that will provide you with the following features:

  • Management of the theme mode across all your React application.
  • The Hook comes with a simple interface: the theme and a setter.
  • The theme mode picked by your users will automatically be saved to their localStorage.
  • Next time your users visit your application, their saved theme mode will be used by default.

Note: react-theme-mode is also Server-Side-Rendering friendly! :)

Requirements

Since the library was built using React, you will need the following dependancy to make it work:

Get Started

Installation

yarn add react-theme-mode or npm add react-theme-mode.

Imports

react-theme-mode is shipped in both cjs and esm formats, so you can use either ES5 or ES6+ imports:

ES6

import{useThemeMode}from'react-theme-mode'

ES5

const{ useThemeMode }=require('react-theme-mode')

Also: react-theme-mode is tree-shakeable and side-effects free!

Usage

You only need two steps to get started:

1. The Provider

Since react-theme-mode is built using React's Context, you will need to wrap your React application, or at least the part of your application that will consume the Hook inside the <ThemeModeProvider> component:

import{ThemeModeProvider}from'react-theme-mode'importSomeComponentfrom'./SomeComponent'constApp=()=>{return(<ThemeModeProviderdefaultTheme="dark"><SomeComponent/></ThemeModeProvider>)}

Please note that the defaultTheme prop is mandatory in case the client doesn't have any theme saved in the broswer yet.

You may be rendering your React application on server-side using CSS-in-JS solutions - in this case, since the views are built on the server, there is no localStorage to access to. You will need to pass the isSSR prop to the <ThemeModeProvider> so that it re-renders the views on runtime, to take into account the theme mode stored in the localStorage.

2. The Hook

You can then consume the useThemeMode() hook and manage your theme from SomeComponent:

import{useThemeMode}from'react-theme-mode'constSomeComponent=()=>{const[theme,setTheme]=useThemeMode()return(<div><p>Current theme: {theme}</p><buttononClick={()=>setTheme('light')}>light theme</button></div>)}

The setTheme() function will automatically save the new theme in the localStorage for future visits. You can disable this default behavior using the noStorage prop. See the API section below for more references.

Since the useThemeMode() hook is using a Context, you can manage your theme from anywhere inside your React application.

API

ThemeModeProvider

A React provider. Provides a state management for the theme mode. You need to wrap any of your components that consume the useThemeMode() hook inside it. It acts mainly as a initializer of your theme.

Props

PropsTypeDefault ValueDescription
defaultTheme*stringThe default theme mode. The provider will fallback to this value if it does not find the saved mode in the localStorage. Required.
isSSRbooleanfalseIf you are rendering your front-end on server-side, and using CSS-in-JS solutions, set this prop to true. Since localStorage is not available on server-side, we need to update the internal state during runtime, and re-render the react views.
noStoragebooleanfalseBy default, the theme-mode selected by the vistor is saved in the localStorage. Use this prop if you don't want to save it nor use it as initial value.

Example

<ThemeModeProviderdefaultTheme="dark"><SomeComponent/></ThemeModeProvider>

useThemeMode()

A React hook. You can use this hook to manage your theme across your application on runtime. Just like React.setState(), the hook returns an array of 2 elements: the theme and its setter.

By default, it will look for the value stored in the localStorage. If it does not exist, it will fallback to the defaultTheme you give it. If no defaultTheme is given, it will return null.

Returns

  • Array [string | null, (string) => void]: the array containing the theme and its setter.

Example

const[theme,setTheme]=useThemeMode()...setTheme('dark')

Contributing

Any contribution would be more than welcome.

Found any bugs or you have some ideas ? Please, open an issue or a PR! :)

The following commands are executed with yarn, but you can of course use any package manager tool like npm or npx.

To install dependencies:

yarn install

To build the project:

yarn build

To run the tests:

yarn test

Before you commit:

yarn validate

About

πŸŒ— Hook to manage your theme mode in React.

Topics

Resources

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages