# DelegatableSubspaceNode

Artifact: [androidx.xr.compose:compose](https://developer.android.com/jetpack/androidx/releases/xr-compose) [View Source](https://cs.android.com/search?q=file:androidx/xr/compose/subspace/layout/DelegatableSubspaceNode.kt+class:androidx.xr.compose.subspace.layout.DelegatableSubspaceNode) Added in [1.0.0-beta02](https://developer.android.com/jetpack/androidx/releases/xr-compose#1.0.0-beta02)


```
interface DelegatableSubspaceNode
```

<br />

Known direct subclasses [CompositionLocalConsumerSubspaceModifierNode](https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/node/CompositionLocalConsumerSubspaceModifierNode), [ParentLayoutParamsModifier](https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/layout/ParentLayoutParamsModifier), [SubspaceLayoutModifierNode](https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/node/SubspaceLayoutModifierNode), [SubspaceMeasuredSizeAwareModifierNode](https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/node/SubspaceMeasuredSizeAwareModifierNode), [SubspaceModifier.Node](https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/layout/SubspaceModifier.Node)

|---|---|
| `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/node/CompositionLocalConsumerSubspaceModifierNode` | Implementing this interface allows your `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/layout/SubspaceModifier.Node` subclass to read `https://developer.android.com/reference/kotlin/androidx/compose/runtime/CompositionLocal` via the `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/node/package-summary#(androidx.xr.compose.subspace.node.CompositionLocalConsumerSubspaceModifierNode).currentValueOf(androidx.compose.runtime.CompositionLocal)` function. |
| `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/layout/ParentLayoutParamsModifier` | Interface for modifiers that can adjust the layout parameters of a composable that implements `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/layout/ParentLayoutParamsAdjustable`. |
| `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/node/SubspaceLayoutModifierNode` | A specialized `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/layout/SubspaceModifier.Node` responsible for modifying the measurement and layout behavior of its wrapped content within the Subspace environment. |
| `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/node/SubspaceMeasuredSizeAwareModifierNode` | A `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/layout/SubspaceModifier.Node` which receives callbacks when the layout it is attached to is remeasured. |
| `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/layout/SubspaceModifier.Node` | The longer-lived object that is created for each `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/node/SubspaceModifierNodeElement` applied to a `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/layout/SubspaceLayout.composable#SubspaceLayout(androidx.xr.compose.subspace.layout.SubspaceModifier,androidx.xr.compose.subspace.layout.SubspaceMeasurePolicy)` |

Known indirect subclasses [SubspaceLayoutAwareModifierNode](https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/node/SubspaceLayoutAwareModifierNode)

|---|---|
| `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/node/SubspaceLayoutAwareModifierNode` | A `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/layout/DelegatableSubspaceNode` whose `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/node/SubspaceLayoutAwareModifierNode#onPlaced(androidx.xr.compose.subspace.layout.SubspaceLayoutCoordinates)` callback is invoked when the layout coordinates of the layout node may have changed. |

*** ** * ** ***

Represents a `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/layout/SubspaceModifier.Node` which can be a delegate of another `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/layout/SubspaceModifier.Node`. Since `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/layout/SubspaceModifier.Node` implements this interface, in practice any `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/layout/SubspaceModifier.Node` can be delegated.

This interface is conceptually similar to `https://developer.android.com/reference/kotlin/androidx/compose/ui/node/DelegatableNode` from 2D Compose, but it intentionally exposes a minimal subset of functionality to meet current Jetpack XR Compose requirements. This approach aims to reduce complexity and avoid prematurely adopting concepts from 2D Compose that may not apply or may have different implications in a 3D context.

For example, callbacks like `onDensityChange` or `onLayoutDirectionChange` found in the 2D version are not currently included.

This design choice follows guidance to tailor the API to the specific needs of XR and avoid unnecessary inherited complexity (see b/483999028 for API review context).

If additional capabilities from 2D Compose are needed in the future, they can potentially be added to this interface. To maintain backward compatibility, such additions should provide default implementations, avoiding breaking changes for external implementations. In the meantime, users requiring more advanced node access can often utilize extension functions like `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/layout/package-summary#(androidx.xr.compose.subspace.layout.DelegatableSubspaceNode).requireCoordinator()` and `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/layout/package-summary#(androidx.xr.compose.subspace.layout.DelegatableSubspaceNode).requireOwner()`, or directly access properties on `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/layout/SubspaceModifier.Node`.

## Summary

| ### Public properties |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/layout/SubspaceModifier.Node` | `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/layout/DelegatableSubspaceNode#node()` A reference of the `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/layout/SubspaceModifier.Node` that holds this node's position in the node hierarchy. |

## Public properties

### node

Added in [1.0.0-beta02](https://developer.android.com/jetpack/androidx/releases/xr-compose#1.0.0-beta02)

```
val node: SubspaceModifier.Node
```

A reference of the `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/layout/SubspaceModifier.Node` that holds this node's position in the node hierarchy. If the node is a delegate of another node, this will point to the root delegating node that is actually part of the node tree. Otherwise, this will point to itself.