import { i as Subscribable, n as Readable$1 } from "../../index-B0IeflOl.mjs";
import { Readable } from "svelte/store";
//#region src/svelte/hooks/index.d.ts
interface UseSubscriptionOptions<S extends Subscribable<any> & Readable$1<any>, R = S['~']['output']> {
  selector?: (value: S['~']['output']) => R;
  isEqual?: (prev: R, next: R) => boolean;
}
/**
 * Subscribe to a reactive value from a Svelte component. Pass a handle or a
 * factory (run once). Returns a Svelte `Readable` (`$value`); it attaches on
 * first subscriber and detaches on last.
 *
 * @example Inline subscription
 * ```svelte
 * <script lang="ts">
 *   import { createWebStorageValue } from 'seitu/web'
 *   import { useSubscription } from 'seitu/svelte'
 *   import * as z from 'zod'
 *
 *   const value = useSubscription(() => createWebStorageValue({
 *     type: 'sessionStorage',
 *     key: 'test',
 *     defaultValue: 0,
 *     schema: z.number(),
 *   }))
 * </script>
 *
 * <div>{$value}</div>
 * ```
 *
 * @example Instance outside of component
 * ```svelte
 * <script lang="ts">
 *   import { createWebStorage } from 'seitu/web'
 *   import { useSubscription } from 'seitu/svelte'
 *   import * as z from 'zod'
 *
 *   const sessionStorage = createWebStorage({
 *     type: 'sessionStorage',
 *     schemas: { count: z.number(), name: z.string() },
 *     defaultValues: { count: 0, name: '' },
 *   })
 *
 *   const value = useSubscription(sessionStorage)
 * </script>
 *
 * <div>{$value.count}</div>
 * ```
 *
 * @example With selector
 * ```svelte
 * <script lang="ts">
 *   import { createWebStorage } from 'seitu/web'
 *   import { useSubscription } from 'seitu/svelte'
 *   import * as z from 'zod'
 *
 *   const sessionStorage = createWebStorage({
 *     type: 'sessionStorage',
 *     schemas: { count: z.number(), name: z.string() },
 *     defaultValues: { count: 0, name: '' },
 *   })
 *
 *   // Updates only when `count` changes
 *   const count = useSubscription(sessionStorage, { selector: v => v.count })
 * </script>
 *
 * <div>{$count}</div>
 * ```
 */
declare function useSubscription<S extends Subscribable<any> & Readable$1<any>, R = S['~']['output']>(source: S | (() => S), options?: UseSubscriptionOptions<S, R>): Readable<R>;
//#endregion
export { UseSubscriptionOptions, useSubscription };