# `Plushie.Type.Shadow`
[🔗](https://github.com/plushie-ui/plushie-elixir/blob/v0.7.2/lib/plushie/type/shadow.ex#L1)

Shadow type for widget styling.

Used in `container` and other widgets via the `shadow` prop.
The renderer parses shadow into `iced::Shadow`.

## Wire format

    %{color: "#00000080", offset: [4, 4], blur_radius: 8.0}

The `offset` is an `[x, y]` list. `color` is a hex string (see `Plushie.Type.Color`).

## Example

    shadow = Plushie.Type.Shadow.new()
             |> Plushie.Type.Shadow.color("#00000040")
             |> Plushie.Type.Shadow.offset(2, 2)
             |> Plushie.Type.Shadow.blur_radius(6)

# `t`

```elixir
@type t() :: %Plushie.Type.Shadow{
  blur_radius: number(),
  color: Plushie.Type.Color.t(),
  offset_x: number(),
  offset_y: number()
}
```

# `blur_radius`

```elixir
@spec blur_radius(shadow :: t(), r :: number()) :: t()
```

Sets the shadow blur radius in pixels.

# `cast`

```elixir
@spec cast(term()) :: {:ok, t()} | :error
```

Validates a shadow value.

Accepts a `%Shadow{}` struct or a map with shadow fields.

## Examples

    iex> Plushie.Type.Shadow.cast(%Plushie.Type.Shadow{blur_radius: 4})
    {:ok, %Plushie.Type.Shadow{blur_radius: 4}}

# `color`

```elixir
@spec color(shadow :: t(), color :: Plushie.Type.Color.input()) :: t()
```

Sets the shadow color. Accepts a hex string or named color atom.

# `from_opts`

```elixir
@spec from_opts(opts :: keyword()) :: t()
```

Constructs a `Shadow` from a keyword list.

# `new`

```elixir
@spec new() :: t()
```

Creates a new shadow with default values.

# `offset`

```elixir
@spec offset(shadow :: t(), x :: number(), y :: number()) :: t()
```

Sets the shadow offset in pixels.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
