66 lines · 1.9 KB · TypeScript
RawDownload
import { isWindowsPlatform } from "./utils"; const WCO_CLASS_NAME = "wco";const ELECTRON_CLASS_NAME = "electron";const ELECTRON_WINDOWS_CLASS_NAME = "electron-windows"; interface WindowControlsOverlayLike {  readonly visible: boolean;  addEventListener(type: "geometrychange", listener: EventListener): void;  removeEventListener(type: "geometrychange", listener: EventListener): void;} interface NavigatorWithWindowControlsOverlay extends Navigator {  readonly windowControlsOverlay?: WindowControlsOverlayLike;} function getWindowControlsOverlay(): WindowControlsOverlayLike | null {  if (typeof navigator === "undefined") {    return null;  }   return (navigator as NavigatorWithWindowControlsOverlay).windowControlsOverlay ?? null;} export function syncDocumentWindowControlsOverlayClass(): () => void {  if (typeof document === "undefined") {    return () => {};  }   const overlay = getWindowControlsOverlay();  const update = () => {    document.documentElement.classList.toggle(WCO_CLASS_NAME, overlay !== null && overlay.visible);  };   update();  if (!overlay) {    return () => {};  }   overlay.addEventListener("geometrychange", update);  return () => {    overlay.removeEventListener("geometrychange", update);  };} export function getElectronPlatformClassNames(  platform: string,):  | readonly [typeof ELECTRON_CLASS_NAME]  | readonly [typeof ELECTRON_CLASS_NAME, typeof ELECTRON_WINDOWS_CLASS_NAME] {  return isWindowsPlatform(platform)    ? [ELECTRON_CLASS_NAME, ELECTRON_WINDOWS_CLASS_NAME]    : [ELECTRON_CLASS_NAME];} export function syncDocumentElectronPlatformClasses(platform: string): () => void {  if (typeof document === "undefined") {    return () => {};  }   const classNames = getElectronPlatformClassNames(platform);  document.documentElement.classList.add(...classNames);  return () => {    document.documentElement.classList.remove(...classNames);  };}