UNPKG

seitu

Version:
60 lines • 1.92 kB
import { i as Subscribable, n as Readable } from "../../index-B0IeflOl.mjs"; import { UseSubscriptionOptions } from "../hooks/index.mjs"; //#region src/react/components/index.d.ts interface SubscriptionProps<S extends Subscribable<any> & Readable<any>, R = S['~']['output']> extends Pick<UseSubscriptionOptions<S, R>, 'selector'> { value: S; children: (value: R) => React.ReactNode; } /** * Subscribes to a value and passes it to `children`. Prefer over the hook when * you want a component API. * * @example Basic usage * ```tsx twoslash title="/app/page.tsx" * 'use client' * * import { createWebStorage } from 'seitu/web' * import { Subscription } from 'seitu/react' * import * as z from 'zod' * * const sessionStorage = createWebStorage({ * type: 'sessionStorage', * schemas: { count: z.number(), name: z.string() }, * defaultValues: { count: 0, name: '' }, * }) * * export default function Page() { * return ( * <Subscription value={sessionStorage}> * {(value) => <div>{value.count}</div>} * </Subscription> * ) * } * ``` * * @example With selector * ```tsx twoslash title="/app/page.tsx" * 'use client' * * import { createWebStorage } from 'seitu/web' * import { Subscription } from 'seitu/react' * import * as z from 'zod' * * const sessionStorage = createWebStorage({ * type: 'sessionStorage', * schemas: { count: z.number(), name: z.string() }, * defaultValues: { count: 0, name: '' }, * }) * * export default function Page() { * return ( * <Subscription value={sessionStorage} selector={(v) => v.count}> * {(count) => <div>{count}</div>} * </Subscription> * ) * } * ``` */ declare function Subscription<S extends Subscribable<any> & Readable<any>, R = S['~']['output']>({ value, selector, children }: SubscriptionProps<S, R>): import("react").ReactNode; //#endregion export { Subscription, SubscriptionProps };