Skip to content

Theme ModeSSR-безопасное состояние темы для Nuxt и Vue

Модуль для Nuxt, примитивы переключателя для Vue и независимые утилиты, которые держат выбранный режим и вычисленную тему раздельно.

Превью Theme Mode в автоматическом режимеПревью Theme Mode в автоматическом режиме
Сохранённый режим остаётся явным: auto хранится как auto, а вычисленная тема следует настройке ОС.Импортируйте только ту точку входа Nuxt, Vue или core, которая реально нужна приложению.

Установка из GitHub Packages

Один сценарий: подключите GitHub Packages, установите пакет и импортируйте только ту точку входа, которая реально нужна приложению.

Добавьте реестр GitHub Packages в .npmrc:

ini
@alyldas:registry=https://npm.pkg.github.com

Для чтения пакета может понадобиться токен с read:packages.

Установите пакет:

sh
npm install @alyldas/theme-mode

Импортируйте CSS и нужную точку входа:

ts
import '@alyldas/theme-mode/style.css'
import '@alyldas/theme-mode/nuxt'

Выберите точку входа

Замените строку импорта выше одной из этих строк:

@alyldas/theme-mode/nuxt

Модуль Nuxt

Лучший вариант для Nuxt-приложений, где тема должна быть корректной ещё до гидрации.

Добавляет SSR-безопасный сценарий запуска и держит настройки согласованными.

import '@alyldas/theme-mode/nuxt'
@alyldas/theme-mode/vue

Композиционная функция Vue и переключатель

Подходит для оболочек приложения, своих кнопок, виджетов и тестов.

Используйте общий контроллер или переключатель без собственной разметки внутри вашего интерфейса.

import '@alyldas/theme-mode/vue'
@alyldas/theme-mode/core

Независимые утилиты

Подходит для адаптеров, которым нужны только разбор настроек, сохранение режима и DOM-запись.

Используйте из обычного TypeScript-кода без Vue.

import '@alyldas/theme-mode/core'

Настройка Nuxt

Начните с одного модуля. Опции добавляйте только тогда, когда нужны свои ключи, атрибуты или CSS-переменные.

ts
export default defineNuxtConfig({
  modules: ['@alyldas/theme-mode/nuxt'],
})
ts
export default defineNuxtConfig({
  modules: ['@alyldas/theme-mode/nuxt'],
  themeMode: {
    // До монтирования Vue
    defaultMode: 'auto',
    fallbackTheme: 'dark', // color-scheme: нативные элементы браузера
    attribute: 'data-theme', // data-theme: light | dark
    modeAttribute: 'data-theme-mode', // data-theme-mode: auto | dark | light
    cssVariablePrefix: 'theme-mode', // --theme-mode-*: состояние переключателя
    storageKey: 'theme',
  },
})

Состояния

Скриншоты выше генерируются из отдельного примера, который закоммичен в репозитории.

Контроллер темы для Nuxt, Vue и TypeScript.