import { r as CrossTabEventTarget, u as PersistStorage } from "../persist-core-B649IGlX.mjs";

//#region src/adapters/transport/crosstab.d.ts
interface CreateBroadcastCrossTabOptions {
  /** BroadcastChannel name — all tabs sharing this name sync. */
  channelName: string;
}
interface BroadcastCrossTab<S> {
  /** Pass as `crossTabEventTarget`. Listens for `message` events and dispatches
   *  storage-shaped events (storageArea: null → key-only matching in every tab). */
  crossTabEventTarget: CrossTabEventTarget;
  /** Wrap a base `PersistStorage` so writes/removes broadcast. Pass the result
   *  as `storage`. Preserves `raw`. */
  wrap: (storage: PersistStorage<S>) => PersistStorage<S>;
  /** Close the underlying channel — call from the persist `destroy()` path. */
  close: () => void;
}
/**
 * Bridge a `BroadcastChannel` as the cross-tab transport for backends that
 * fire no `storage` events (IndexedDB). Posts `storageArea: null` on every
 * event so key-only matching applies in every tab (each tab owns its own
 * backend instance — reference equality on `raw` would fail across tabs).
 *
 * @example
 * ```ts
 * import { createBroadcastCrossTab } from "@stainless-code/persist/transport/crosstab";
 * import { createIdbStorage } from "@stainless-code/persist/backends/idb";
 * import { persistStore } from "@stainless-code/persist/sources/tanstack-store";
 *
 * const bridge = createBroadcastCrossTab({ channelName: "app:prefs" })!;
 * const persist = persistStore(store, {
 *   name: "app:prefs:v1",
 *   storage: bridge.wrap(createIdbStorage()!),
 *   crossTab: true,
 *   crossTabEventTarget: bridge.crossTabEventTarget,
 * });
 * // on teardown: persist.destroy(); bridge.close();
 * ```
 */
declare function createBroadcastCrossTab<S>(options: CreateBroadcastCrossTabOptions): BroadcastCrossTab<S> | undefined;
//#endregion
export { BroadcastCrossTab, CreateBroadcastCrossTabOptions, createBroadcastCrossTab };