# ToolHandle

Import it from `@grafloria/renderer`.

One grabbable tool in the floating layer.

```ts
interface ToolHandle
```

**Properties**

| Name | Type | Default | Description |
| --- | --- | --- | --- |
| `id` | `string` |  | Stable key (also the DOM key a host keys its |
| `kind` | `ToolKind` |  |  |
| `world` | `Point` |  | Centre of the handle, in WORLD coordinates. |
| `hitRadius` | `number` |  | Hit radius in WORLD units (= screen px / zoom). |
| `segment?` | `{ a: Point; b: Point }` |  | resize-ux: for the four SIDE resize handles (n/e/s/w), the full edge they own, as a WORLD segment (rotated with the node). React Flow's side affordance is the whole border line, not a midpoint dot — the live audit found the 6px dots unreachable (fully inside the port's hover halo), so a side handle hit-tests as a BAND around this segment: grab the border anywhere and that edge follows. |
| `cursor` | `string` |  | CSS cursor a host should show over this handle. |
| `label` | `string` |  | Accessible name (also used for tooltips / ARIA). |
| `handleId?` | `ResizeHandleId` |  | For `resize`. |
| `action?` | `HaloAction` |  | For `halo`. |
| `endpoint?` | `'source' \| 'target'` |  | For `link-endpoint`. |
| `index?` | `number` |  | Vertex index (`vertex-remove`) or segment index (`vertex-add`). |
| `nodeId?` | `string` |  | Owning entity. |
| `linkId?` | `string` |  |  |
