UNPKG

alinea

Version:
70 lines (66 loc) 2.25 kB
import { dist_default } from "../../chunks/chunk-A5O3N2GS.js"; import "../../chunks/chunk-NZLE2WMY.js"; // src/dashboard/view/Viewport.tsx import { useContrastColor } from "alinea/ui/hook/UseContrastColor"; import { useEffect, useLayoutEffect } from "react"; import { usePreferences } from "../hook/UsePreferences.js"; // src/dashboard/view/Viewport.module.scss var Viewport_module_default = { "root": "alinea-Viewport", "is-light": "alinea-Viewport-is-light", "isLight": "alinea-Viewport-is-light", "is-dark": "alinea-Viewport-is-dark", "isDark": "alinea-Viewport-is-dark", "main": "alinea-Viewport-main", "is-contain": "alinea-Viewport-is-contain", "isContain": "alinea-Viewport-is-contain" }; // src/dashboard/view/Viewport.tsx import { jsx } from "react/jsx-runtime"; var styles = dist_default(Viewport_module_default); var useIsomorphicEffect = typeof window !== "undefined" ? useLayoutEffect : useEffect; function Viewport({ children, color = "#6673FC", contain, attachToBody, ...props }) { const accentColor = color; const accentColorForeground = useContrastColor(accentColor); const { scheme, size } = usePreferences(); useEffect(() => { if (!size) return; document.documentElement.style.fontSize = `${size}px`; }, [size]); const style = { "--alinea-accent": accentColor, "--alinea-accent-foreground": accentColorForeground }; const className = styles.root(scheme); const styleString = Object.entries(style).map(([key, value]) => { return `${key}: ${value}`; }).join("; "); useIsomorphicEffect(() => { if (attachToBody) { document.body.className = className; document.body.style.cssText = styleString; } }, [attachToBody, styleString, className]); useIsomorphicEffect(() => { const meta = document.createElement("meta"); meta.setAttribute("content", accentColor); meta.setAttribute("name", "theme-color"); document.head.appendChild(meta); return () => { document.head.removeChild(meta); }; }, [accentColor]); const mainProps = attachToBody ? {} : { className, style }; return /* @__PURE__ */ jsx("main", { ...mainProps, className: styles.main.mergeProps(props)({ contain }), children }); } export { Viewport };