> Fetch clean Markdown by appending `.md` to any page URL under https://signalwire.com/docs or requesting it with the HTTP header `Accept: text/markdown`. The root index at https://signalwire.com/docs/llms.txt lists the available documentation indexes.
# sw-call-provider
Top-level context provider that bridges an external `Call` and/or
`DeviceController` into Lit context for every descendant SDK-aware
component to consume.
```html
```
Internally instantiates two reactive controllers:
* `CallStateContextController` — subscribes to the `Call`'s observables
(`status$`, `self$`, `participants$`, `layoutLayers$`,
`capabilities$`, …) and exposes the latest snapshot through
`callStateContext`.
* `DevicesContextController` — subscribes to the `DeviceController` for
device lists / selected devices / permissions and exposes them
through `devicesContext`. It also wires the active `Call` so
mute / unmute / device-switch operations route correctly.
Re-assigning `.call` or `.deviceController` cleanly disconnects the
previous source and reconnects to the new one.
The host renders with `display: contents`, so the provider does not
introduce its own box — descendants lay out as if they were direct
children of the parent. Use `` if you want a packaged,
styled widget instead of just the context plumbing.
*Class: `SwCallProvider` · Module: `packages/web-components/src/components/sw-call-provider.ts`*
## class: `SwCallProvider`, `sw-call-provider`
### Fields
**`call`** `Call | undefined` — default: undefined
`call` field.
---
**`deviceController`** `DeviceController | undefined` — default: undefined
`deviceController` field.
---
### Slots
| Name | Description |
| ---- | -------------------------------------------------------------------------------------------------------------- |
| | Default slot for any descendant components that should consume \`callStateContext\` and/or \`devicesContext\`. |
---