Home

Awesome

Binary theme switcher component

Published on webcomponents.org

A web component that helps you implement and change two themes on a web page. See the live demo and the code example.

Table of Contents

  1. Usage flow example
  2. Documentation
    1. Rules
    2. JavaScript interface
    3. What the component does

Usage flow example <a name="usage-flow"></a>

  1. Install

With npm

npm i theme-switcher-component

With yarn

yarn add theme-switcher-component

  1. Import and declare the web component in a HTML file
<html>
<head>
  <!--- ... More code above ... --->

  <import src="./node_modules/theme-switcher-component/switch.js" type="module" defer>

  <!--- ... More code below ... --->
</head>
<body>
  <theme-switcher themes="["dark", "light"]"></theme-switcher>
  <p>Hellow World</p>
</body>
</html>
  1. Define a default theme in a CSS file via css custom properties
/* Define the default theme variables in the root element */
:root{ --paragraph-color: black; }

/* Change the variables values defined in root */
body[data-theme="dark"]{ --paragraph-color: white; }

p { color: var(--paragraph-color) }

Documentation <a name="documentation"></a>

Rules <a name="rules"></a>

AttributesTypeRequiredDescriptionError
themesJSONArray of StringsYesThe two themes to defineIf more than two themes defined or themes attribute undefined
verboseboolNoLogs to console information about the state of the componentNone
data-themeStringNoAdded after the component is renderedNone

JavaScript interface <a name="javascript-interface"></a>

A.K.A the instance properties

This can be used programmatically, you can control it with javascript

PropertyTypeDescription
verboseboolLogs to console information about the state of the component
currenStatenumberThe currentState of the state machine
currentThemeStringThe theme that is currently applied

Do not use any of the methods like prepareTheme(), transition(), otherwise the component can be set to a wrong state, to make state changes with javascript use the click() method

CSS variables <a name="css-variables"></a>

The variables are defined on the host element, these are the default values

theme-switcher {
  --switch-color: black; 
  --switch-width: 60px;
  --switch-height: 34px;
  --switch-radius: 34px;
  --slider-width: 25px;
  --slider-height: 25px;
  --slider-margin: 4px 2px 0px 5px;
  --slider-transition: .4s;
  --slider-radius: 50%;
  --slider-cursor: pointer; 
  --slider-color: white;
  --slider-translatex-unswitched: translateX(0px);
  --slider-translatex-switched: translateX(26px);
}

What the component does <a name="what-the-component-does"></a>

Adds and updates the data attribute "data-theme" to the body element which can be used in CSS to react when the value changes with attribute selectors.

Every time the theme changes gets set to local storage.

It handles the state via a super simple state machine inspired by this article.