Self-hosted multi-platform broadcast newsroom for activist collectives: publishing pipeline with group approval and DST-proof scheduling, TweetDeck-style column wall with hostile-content-safe rendering, live control room with Auto Director, bridged chat governance with polls and quorum, distributed sandboxed transcode workers, encrypted content-addressed archive, monthly analytics. MIT licensed. See README.md and docs/.
15 lines
446 B
TypeScript
15 lines
446 B
TypeScript
"use client";
|
|
|
|
import { useSyncExternalStore } from "react";
|
|
|
|
const QUERY = "(max-width: 1023px)";
|
|
|
|
function subscribe(onChange: () => void): () => void {
|
|
const media = window.matchMedia(QUERY);
|
|
media.addEventListener("change", onChange);
|
|
return () => media.removeEventListener("change", onChange);
|
|
}
|
|
|
|
export function useIsMobile(): boolean {
|
|
return useSyncExternalStore(subscribe, () => window.matchMedia(QUERY).matches, () => false);
|
|
}
|