MCPcopy
hub / github.com/tailwindlabs/tailwindcss / darkModePlugin

Function darkModePlugin

packages/tailwindcss/src/compat/dark-mode.ts:4–51  ·  view source on GitHub ↗
({ addVariant, config }: Pick<PluginAPI, 'addVariant' | 'config'>)

Source from the content-addressed store, hash-verified

2import type { PluginAPI } from './plugin-api'
3
4export function darkModePlugin({ addVariant, config }: Pick<PluginAPI, 'addVariant' | 'config'>) {
5 let darkMode = config('darkMode', null) as ResolvedConfig['darkMode']
6 let [mode, selector = '.dark'] = Array.isArray(darkMode) ? darkMode : [darkMode]
7
8 if (mode === 'variant') {
9 let formats
10
11 if (Array.isArray(selector)) {
12 formats = selector
13 } else if (typeof selector === 'function') {
14 formats = selector
15 } else if (typeof selector === 'string') {
16 formats = [selector]
17 }
18
19 if (Array.isArray(formats)) {
20 for (let format of formats) {
21 if (format === '.dark') {
22 mode = false
23 console.warn(
24 'When using `variant` for `darkMode`, you must provide a selector.\nExample: `darkMode: ["variant", ".your-selector &"]`',
25 )
26 } else if (!format.includes('&')) {
27 mode = false
28 console.warn(
29 'When using `variant` for `darkMode`, your selector must contain `&`.\nExample `darkMode: ["variant", ".your-selector &"]`',
30 )
31 }
32 }
33 }
34
35 selector = formats as any
36 }
37
38 if (mode === null) {
39 // Do nothing
40 } else if (mode === 'selector') {
41 // New preferred behavior
42 addVariant('dark', `&:where(${selector}, ${selector} *)`)
43 } else if (mode === 'media') {
44 addVariant('dark', '@media (prefers-color-scheme: dark)')
45 } else if (mode === 'variant') {
46 addVariant('dark', selector)
47 } else if (mode === 'class') {
48 // Old behavior
49 addVariant('dark', `&:is(${selector} *)`)
50 }
51}

Callers 1

migrateDarkModeFunction · 0.90

Calls 2

configFunction · 0.70
addVariantFunction · 0.70

Tested by

no test coverage detected