< Summary

Information
Class: theme.ts
Assembly: app.lib
File(s): /home/runner/work/ClutterStock/ClutterStock/frontend/app/lib/theme.ts
Tag: 58_25416222083
Line coverage
100%
Covered lines: 10
Uncovered lines: 0
Coverable lines: 10
Total lines: 20
Line coverage: 100%
Branch coverage
100%
Covered branches: 2
Total branches: 2
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

File(s)

/home/runner/work/ClutterStock/ClutterStock/frontend/app/lib/theme.ts

#LineLine coverage
 1import { useState, useEffect } from "react";
 2
 3export type ThemeId = "system" | "tui" | "win98" | "cde";
 4
 35export function useTheme(): ThemeId {
 36  const [theme, setTheme] = useState<ThemeId>("system");
 7
 38  useEffect(() => {
 39    const read = () =>
 310      setTheme((document.documentElement.getAttribute("data-theme") as ThemeId) || "system");
 11
 312    read();
 13
 314    const obs = new MutationObserver(read);
 315    obs.observe(document.documentElement, { attributes: true, attributeFilter: ["data-theme"] });
 316    return () => obs.disconnect();
 17  }, []);
 18
 319  return theme;
 20}