# tabIndex

Derives 0 only for the active item under roving focus; virtual-focus items always receive -1.

## Signatures

```ts
export declare function tabIndex<CompositeState extends State, E, R>(state: RefSubject.RefSubject<CompositeState, E, R>, id: string): RefSubject.Computed<0 | -1, E, R>;
```

## Why

The operation exposes Composite's transition directly so callers can compose it in Effect
programs and native event handlers.

## Ownership and lifetime

Creating the Computed value acquires nothing eagerly. The Scope that subscribes to it owns
observation of the source RefSubject.

## Example

Import with `import { tabIndex } from "@typed/ui/Composite";` Extend the [Composite.makeState
runnable setup](https://tylors.github.io/typed/reference/symbols/QHR5cGVkL3VpL0NvbXBvc2l0ZSNtYWtlU3RhdGU/). Inside the linked Effect
program read `const value = yield* tabIndex(state, "item-2")`; it is `0` only while that item
owns roving focus and is `-1` under virtual focus.
