# `Plushie.Widget.Pin`
[🔗](https://github.com/plushie-ui/plushie-elixir/blob/v0.6.0/lib/plushie/widget/pin.ex#L1)

Pin layout -- positions child at absolute coordinates.

## Props

- `x` (number) -- x position in pixels. Default: 0.
- `y` (number) -- y position in pixels. Default: 0.
- `width` (length) -- pin container width. Default: shrink. See `Plushie.Type.Length`.
- `height` (length) -- pin container height. Default: shrink.
- `a11y` (map) -- accessibility overrides. See `Plushie.Type.A11y`.

# `option`

```elixir
@type option() ::
  {:x, number()}
  | {:y, number()}
  | {:width, Plushie.Type.Length.t()}
  | {:height, Plushie.Type.Length.t()}
  | {:a11y, Plushie.Type.A11y.t() | map() | keyword()}
```

# `t`

```elixir
@type t() :: %Plushie.Widget.Pin{
  a11y: Plushie.Type.A11y.t() | nil,
  children: [Plushie.Widget.child()],
  height: Plushie.Type.Length.t() | nil,
  id: String.t(),
  width: Plushie.Type.Length.t() | nil,
  x: number() | nil,
  y: number() | nil
}
```

# `a11y`

```elixir
@spec a11y(pin :: t(), a11y :: Plushie.Type.A11y.t() | map() | keyword()) :: t()
```

Sets accessibility annotations.

# `build`

```elixir
@spec build(pin :: t()) :: Plushie.Widget.ui_node()
```

Converts this pin struct to a `ui_node()` map via the `Plushie.Widget` protocol.

# `extend`

```elixir
@spec extend(pin :: t(), children :: [Plushie.Widget.child()]) :: t()
```

Appends multiple children to the pin.

# `height`

```elixir
@spec height(pin :: t(), height :: Plushie.Type.Length.t()) :: t()
```

Sets the pin container height.

# `new`

```elixir
@spec new(id :: String.t(), opts :: [option()]) :: t()
```

Creates a new pin struct with optional keyword opts.

# `push`

```elixir
@spec push(pin :: t(), child :: Plushie.Widget.child()) :: t()
```

Appends a child to the pin.

# `width`

```elixir
@spec width(pin :: t(), width :: Plushie.Type.Length.t()) :: t()
```

Sets the pin container width.

# `with_options`

```elixir
@spec with_options(pin :: t(), opts :: [option()]) :: t()
```

Applies keyword options to an existing pin struct.

# `x`

```elixir
@spec x(pin :: t(), x :: number()) :: t()
```

Sets the x position in pixels.

# `y`

```elixir
@spec y(pin :: t(), y :: number()) :: t()
```

Sets the y position in pixels.

---

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