Files
Termix/plugins/ssh-terminal/src/frontend/look/theme-preview.ts
T

31 lines
747 B
TypeScript

import { useSyncExternalStore } from "react";
/**
* The terminal theme the host editor is previewing, so an open terminal for
* that host can show it before the host is saved. Null when nothing is being
* previewed.
*/
let preview: string | null = null;
const listeners = new Set<() => void>();
export function setThemePreview(theme: string | null): void {
if (theme === preview) return;
preview = theme;
for (const listener of listeners) listener();
}
function subscribe(listener: () => void): () => void {
listeners.add(listener);
return () => {
listeners.delete(listener);
};
}
export function useThemePreview(): string | null {
return useSyncExternalStore(
subscribe,
() => preview,
() => preview,
);
}