Home / File/ dark-mode.ts — tailwindcss Source File

dark-mode.ts — tailwindcss Source File

Architecture documentation for dark-mode.ts, a typescript file in the tailwindcss codebase. 4 imports, 2 dependents.

File typescript Oxide PreProcessors 4 imports 2 dependents 1 functions

Entity Profile

Dependency Diagram

graph LR
  4c8bb5d7_9845_fe79_ed7d_c561197c3471["dark-mode.ts"]
  479eaf18_f640_94ff_bd07_456688f9ac14["types.ts"]
  4c8bb5d7_9845_fe79_ed7d_c561197c3471 --> 479eaf18_f640_94ff_bd07_456688f9ac14
  da7f1255_7a1d_1af3_bf27_bd71a9a7671e["ResolvedConfig"]
  4c8bb5d7_9845_fe79_ed7d_c561197c3471 --> da7f1255_7a1d_1af3_bf27_bd71a9a7671e
  da5d1116_ab2a_437a_6b13_c1429fd546fa["plugin-api.ts"]
  4c8bb5d7_9845_fe79_ed7d_c561197c3471 --> da5d1116_ab2a_437a_6b13_c1429fd546fa
  78ae59ed_15ed_26ff_5333_748db1fc1326["PluginAPI"]
  4c8bb5d7_9845_fe79_ed7d_c561197c3471 --> 78ae59ed_15ed_26ff_5333_748db1fc1326
  ffe9c87e_35ad_f431_9625_80fc875792a7["migrate-js-config.ts"]
  ffe9c87e_35ad_f431_9625_80fc875792a7 --> 4c8bb5d7_9845_fe79_ed7d_c561197c3471
  2745c5e0_8ea4_a1c7_4f84_369746e3eb63["apply-compat-hooks.ts"]
  2745c5e0_8ea4_a1c7_4f84_369746e3eb63 --> 4c8bb5d7_9845_fe79_ed7d_c561197c3471
  style 4c8bb5d7_9845_fe79_ed7d_c561197c3471 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

import type { ResolvedConfig } from './config/types'
import type { PluginAPI } from './plugin-api'

export function darkModePlugin({ addVariant, config }: Pick<PluginAPI, 'addVariant' | 'config'>) {
  let darkMode = config('darkMode', null) as ResolvedConfig['darkMode']
  let [mode, selector = '.dark'] = Array.isArray(darkMode) ? darkMode : [darkMode]

  if (mode === 'variant') {
    let formats

    if (Array.isArray(selector)) {
      formats = selector
    } else if (typeof selector === 'function') {
      formats = selector
    } else if (typeof selector === 'string') {
      formats = [selector]
    }

    if (Array.isArray(formats)) {
      for (let format of formats) {
        if (format === '.dark') {
          mode = false
          console.warn(
            'When using `variant` for `darkMode`, you must provide a selector.\nExample: `darkMode: ["variant", ".your-selector &"]`',
          )
        } else if (!format.includes('&')) {
          mode = false
          console.warn(
            'When using `variant` for `darkMode`, your selector must contain `&`.\nExample `darkMode: ["variant", ".your-selector &"]`',
          )
        }
      }
    }

    selector = formats as any
  }

  if (mode === null) {
    // Do nothing
  } else if (mode === 'selector') {
    // New preferred behavior
    addVariant('dark', `&:where(${selector}, ${selector} *)`)
  } else if (mode === 'media') {
    addVariant('dark', '@media (prefers-color-scheme: dark)')
  } else if (mode === 'variant') {
    addVariant('dark', selector)
  } else if (mode === 'class') {
    // Old behavior
    addVariant('dark', `&:is(${selector} *)`)
  }
}

Domain

Subdomains

Functions

Frequently Asked Questions

What does dark-mode.ts do?
dark-mode.ts is a source file in the tailwindcss codebase, written in typescript. It belongs to the Oxide domain, PreProcessors subdomain.
What functions are defined in dark-mode.ts?
dark-mode.ts defines 1 function(s): darkModePlugin.
What does dark-mode.ts depend on?
dark-mode.ts imports 4 module(s): PluginAPI, ResolvedConfig, plugin-api.ts, types.ts.
What files import dark-mode.ts?
dark-mode.ts is imported by 2 file(s): apply-compat-hooks.ts, migrate-js-config.ts.
Where is dark-mode.ts in the architecture?
dark-mode.ts is located at packages/tailwindcss/src/compat/dark-mode.ts (domain: Oxide, subdomain: PreProcessors, directory: packages/tailwindcss/src/compat).

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free