export class CrossTabSync { constructor(channelName) { this._channel = null; if (typeof BroadcastChannel !== "undefined") { this._channel = new BroadcastChannel(channelName); } } post(type, payload = {}) { if (!this._channel) return; this._channel.postMessage({ type, ...payload }); } onMessage(handler) { if (!this._channel) return () => {}; const wrapped = (event) => handler(event.data || {}); this._channel.addEventListener("message", wrapped); return () => this._channel.removeEventListener("message", wrapped); } close() { if (this._channel) { this._channel.close(); this._channel = null; } } }