> ## Documentation Index
> Fetch the complete documentation index at: https://docs.atlasscripts.net/llms.txt
> Use this file to discover all available pages before exploring further.

# Radial

> A radial action wheel with icon options and optional submenus — always rendered on the bridge's own NUI.

`Bridge.Radial` opens a circular action wheel — a ring of icon options the player clicks. Use it for a compact set of contextual actions (hands up, point, surrender) bound to a key. Options can open submenus to nest deeper sets.

The wheel does not block — your `onSelect` callbacks fire as the player picks options, and you close it with `Bridge.Radial.Close()`.

## Availability

Client only. Radial is **always** rendered on the bridge's own NUI — it is not provider-resolved, so `atlas:ui` does not change it.

```lua theme={null}
Bridge.Radial.Open(def)
Bridge.Radial.Close()
```

## Signature

### Bridge.Radial.Open

`Bridge.Radial.Open(def)`

<ParamField path="title" type="string">
  Shown in the center hub when nothing is hovered.
</ParamField>

<ParamField path="options" type="table[]" required>
  The wheel segments. Each option is shaped below.
</ParamField>

<ParamField path="onClose" type="function">
  Called when the wheel closes (after a leaf select, or on dismiss with ESC). Not called when an option opens a submenu.
</ParamField>

#### Option fields

<ParamField path="options[].label" type="string" required>
  The segment label, shown under its icon and in the hub on hover.
</ParamField>

<ParamField path="options[].icon" type="string">
  An icon name, or an image URL (`http…`, `nui://…`, `data:…`, or a path ending in `.png`/`.jpg`/`.webp`/`.gif`/`.svg`).
</ParamField>

<ParamField path="options[].disabled" type="boolean">
  Greys the segment out and blocks selection.
</ParamField>

<ParamField path="options[].menu" type="boolean">
  Marks this option as opening a submenu — selecting it keeps the wheel focused so you can open the next radial in `onSelect`, and `onClose` is **not** fired.
</ParamField>

### Bridge.Radial.Close

Takes no arguments. Closes the wheel and releases focus.

## Examples

<CodeGroup>
  ```lua Basic theme={null}
  Bridge.Radial.Open({
      title = 'Quick actions',
      options = {
          { label = 'Hands up', icon = 'hands',  onSelect = function() handsUp() end },
          { label = 'Surrender', icon = 'flag',  onSelect = function() surrender() end },
      },
  })
  ```

  ```lua Image icon + submenu theme={null}
  Bridge.Radial.Open({
      title = 'Emotes',
      options = {
          { label = 'Point', icon = 'https://cdn.example.com/point.png', onSelect = point },
          { label = 'Dances', icon = 'music', menu = true,
            onSelect = function() openDanceRadial() end },   -- wheel stays open; open the next one
      },
      onClose = function() print('radial closed') end,
  })
  ```
</CodeGroup>

<Note>
  An option with `menu = true` keeps the wheel focused on select — open the next `Bridge.Radial.Open` from its `onSelect`. A normal (leaf) option closes the wheel and fires `onClose`.
</Note>

<Tip>
  The hovered segment, the ring, and the hub all tint to the player's theme accent automatically. Because Radial is bridge-NUI only, `atlas:ui "ox"` does not affect it.
</Tip>
