// import { $_ } from '../utils.js'; // const themeToggle = $_('button#theme-toggle'); // if (themeToggle) { // const prefersDarkScheme = window.matchMedia('(prefers-color-scheme: dark)'); // let theme = localStorage.getItem('theme') || 'light'; // const setTheme = (mode: 'light' | 'dark') => { // document.documentElement.setAttribute('data-theme', mode); // document.body.classList.remove(`sl-theme-light`); // document.body.classList.remove(`sl-theme-dark`); // document.body.classList.add(`sl-theme-${mode}`); // localStorage.setItem('theme', mode); // theme = mode; // themeToggle.classList.remove('light', 'dark'); // themeToggle.classList.add(mode); // themeToggle.title = `Switch between dark and light mode (currently ${mode} mode)`; // themeToggle.setAttribute('aria-label', `Switch between dark and light mode (currently ${mode} mode)`); // } // setTheme(theme === 'dark' || (!theme && prefersDarkScheme.matches) ? 'dark' : 'light'); // themeToggle.addEventListener('click', () => { // setTheme(theme === 'dark' ? 'light' : 'dark'); // }); // }; import { LitElement, css, html } from 'lit'; import { Ref, createRef, ref } from 'lit/directives/ref.js'; // import { styleMap } from 'lit/directives/style-map.js'; import { query, state, } from 'lit/decorators.js'; import { classMap } from 'lit-html/directives/class-map.js'; export const TAG_NAME = 'theme-toggle'; export class ThemeToggle extends LitElement { // Define scoped styles right with your component, in plain CSS static styles = css` button { cursor: pointer; background: none; border: none; display: flex; justify-content: center; align-items: center; } svg { &:hover { color: var(--color-accent); } } .dark { #sun { display: none; } } .light { #moon { display: none; } } `; static readonly metadata = { version: '0.1.0', tag: TAG_NAME, }; @state() protected theme: string; constructor() { super(); const prefersDarkScheme = window.matchMedia('(prefers-color-scheme: dark)'); this.theme = localStorage.getItem('theme') || 'light'; this.setTheme(this.theme === 'dark' || (!this.theme && prefersDarkScheme.matches) ? 'dark' : 'light'); } setTheme = (mode: 'light' | 'dark') => { document.documentElement.setAttribute('data-theme', mode); document.body.classList.remove(`sl-theme-light`); document.body.classList.remove(`sl-theme-dark`); document.body.classList.add(`sl-theme-${mode}`); localStorage.setItem('theme', mode); this.theme = mode; } click = () => { const theme = document.documentElement.getAttribute('data-theme'); this.setTheme(theme === 'dark' ? 'light' : 'dark'); } protected render() { return html` `; } }