seitu
Version:
72 lines • 2.3 kB
text/typescript
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 };