import { Effect, Equivalence, Option, Stream } from "effect" import * as React from "react" import * as Component from "./Component.js" export const use: { ( stream: Stream.Stream ): Effect.Effect, never, R> , E, R>( stream: Stream.Stream, initialValue: A, ): Effect.Effect, never, R> } = Effect.fnUntraced(function* , E, R>( stream: Stream.Stream, initialValue?: A, ) { const [reactStateValue, setReactStateValue] = React.useState(() => initialValue ? Option.some(initialValue) : Option.none() ) yield* Component.useReactEffect(() => Effect.forkScoped( Stream.runForEach( Stream.changesWith(stream, Equivalence.strict()), v => Effect.sync(() => setReactStateValue(Option.some(v))), ) ), [stream]) return reactStateValue as Option.Some }) export * from "effect/Stream"