mode-switcher.tsx — ui Source File
Architecture documentation for mode-switcher.tsx, a tsx file in the ui codebase. 7 imports, 0 dependents.
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)
Domain
Subdomains
Functions
Dependencies
- button
- kbd
- next-themes
- react
- script
- tooltip
- use-meta-color
Source
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