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); };}
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);
};
}