Home / File/ mode-switcher.tsx — ui Source File

mode-switcher.tsx — ui Source File

Architecture documentation for mode-switcher.tsx, a tsx file in the ui codebase. 7 imports, 0 dependents.

File tsx Internationalization RTLLayout 7 imports 2 functions

Entity Profile

Dependency Diagram

graph LR
  449e9f5f_4c83_3a43_0cf3_5da2cfe0c8e2["mode-switcher.tsx"]
  1d141819_425e_b5fd_4c8e_32f7c6a42cf2["react"]
  449e9f5f_4c83_3a43_0cf3_5da2cfe0c8e2 --> 1d141819_425e_b5fd_4c8e_32f7c6a42cf2
  79511111_e2db_7710_6e07_29cc266a5518["script"]
  449e9f5f_4c83_3a43_0cf3_5da2cfe0c8e2 --> 79511111_e2db_7710_6e07_29cc266a5518
  75d25ec8_fe84_91a4_54c6_20dabb286f91["next-themes"]
  449e9f5f_4c83_3a43_0cf3_5da2cfe0c8e2 --> 75d25ec8_fe84_91a4_54c6_20dabb286f91
  78f438c1_34dd_4824_63b3_180c613db378["use-meta-color"]
  449e9f5f_4c83_3a43_0cf3_5da2cfe0c8e2 --> 78f438c1_34dd_4824_63b3_180c613db378
  57e86e45_ac6e_7278_be08_9092724e8401["button"]
  449e9f5f_4c83_3a43_0cf3_5da2cfe0c8e2 --> 57e86e45_ac6e_7278_be08_9092724e8401
  eef72ee8_5107_2380_708f_cd0adbb65f49["kbd"]
  449e9f5f_4c83_3a43_0cf3_5da2cfe0c8e2 --> eef72ee8_5107_2380_708f_cd0adbb65f49
  a2518e24_160d_3f8f_bb12_2206d8e84ab8["tooltip"]
  449e9f5f_4c83_3a43_0cf3_5da2cfe0c8e2 --> a2518e24_160d_3f8f_bb12_2206d8e84ab8
  style 449e9f5f_4c83_3a43_0cf3_5da2cfe0c8e2 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

"use client"

import * as React from "react"
import Script from "next/script"
import { useTheme } from "next-themes"

import { useMetaColor } from "@/hooks/use-meta-color"
import { Button } from "@/registry/new-york-v4/ui/button"
import { Kbd } from "@/registry/new-york-v4/ui/kbd"
import {
  Tooltip,
  TooltipContent,
  TooltipTrigger,
} from "@/registry/new-york-v4/ui/tooltip"

export const DARK_MODE_FORWARD_TYPE = "dark-mode-forward"

export function ModeSwitcher() {
  const { setTheme, resolvedTheme } = useTheme()
  const { setMetaColor, metaColor } = useMetaColor()

  React.useEffect(() => {
    setMetaColor(metaColor)
  }, [metaColor, setMetaColor])

  const toggleTheme = React.useCallback(() => {
    setTheme(resolvedTheme === "dark" ? "light" : "dark")
  }, [resolvedTheme, setTheme])

  React.useEffect(() => {
    const down = (e: KeyboardEvent) => {
      if ((e.key === "d" || e.key === "D") && !e.metaKey && !e.ctrlKey) {
        if (
          (e.target instanceof HTMLElement && e.target.isContentEditable) ||
          e.target instanceof HTMLInputElement ||
          e.target instanceof HTMLTextAreaElement ||
          e.target instanceof HTMLSelectElement
        ) {
          return
        }

        e.preventDefault()
        toggleTheme()
      }
    }

    document.addEventListener("keydown", down)
    return () => document.removeEventListener("keydown", down)
  }, [toggleTheme])

  return (
    <Tooltip>
      <TooltipTrigger asChild>
        <Button
          variant="ghost"
          size="icon"
          className="group/toggle extend-touch-target size-8"
          onClick={toggleTheme}
        >
          <svg
// ... (64 more lines)

Subdomains

Dependencies

  • button
  • kbd
  • next-themes
  • react
  • script
  • tooltip
  • use-meta-color

Frequently Asked Questions

What does mode-switcher.tsx do?
mode-switcher.tsx is a source file in the ui codebase, written in tsx. It belongs to the Internationalization domain, RTLLayout subdomain.
What functions are defined in mode-switcher.tsx?
mode-switcher.tsx defines 2 function(s): DarkModeScript, ModeSwitcher.
What does mode-switcher.tsx depend on?
mode-switcher.tsx imports 7 module(s): button, kbd, next-themes, react, script, tooltip, use-meta-color.
Where is mode-switcher.tsx in the architecture?
mode-switcher.tsx is located at apps/v4/components/mode-switcher.tsx (domain: Internationalization, subdomain: RTLLayout, directory: apps/v4/components).

Analyze Your Own Codebase

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

Try Supermodel Free