# Fx.throttle

Limits emissions to configured leading and trailing edges of fixed windows.

Pass `{ duration, leading, trailing }` for trailing or both-edge behavior.
A duration alone defaults to `{ leading: true, trailing: false }`.

## Signatures

```ts
export declare const throttle: {
    (duration: Duration.Input): <A, E, R>(fx: Fx<A, E, R>) => Fx<A, E, R | Scope.Scope>;
    (options: ThrottleOptions): <A, E, R>(fx: Fx<A, E, R>) => Fx<A, E, R | Scope.Scope>;
    <A, E, R>(fx: Fx<A, E, R>, duration: Duration.Input): Fx<A, E, R | Scope.Scope>;
    <A, E, R>(fx: Fx<A, E, R>, options: ThrottleOptions): Fx<A, E, R | Scope.Scope>;
};
```

## Why

Throttling bounds push frequency while allowing immediate feedback, a final
settled value, or both, without moving timing state outside the Fx graph.

## Ownership and lifetime

The first value opens a window. Leading mode emits it immediately. Values
arriving while open replace one pending latest value; trailing mode emits
that value when the timer closes, except that both-edge mode does not repeat
the first value unless another arrived. Windows never overlap. Source errors
propagate, source completion waits for the active window, and interruption
stops the scoped timer and discards pending state.

## Examples

```ts
import { throttle } from "@typed/fx/Fx"
import { fromIterable } from "@typed/fx/Fx"

const bounded = throttle(fromIterable([1, 2, 3]), {
  duration: "250 millis",
  leading: true,
  trailing: true
})
```
