# androidx.xr.compose.subspace.semantics

## Interfaces

|---|---|
| `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/semantics/SubspaceSemanticsPropertyReceiver` | Scope provided by `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/semantics/package-summary#(androidx.xr.compose.subspace.layout.SubspaceModifier).semantics(kotlin.Function1)` blocks, letting you set key/value pairs for use in testing, accessibility, etc. |

## Classes

|---|---|
| `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/semantics/SubspaceSemanticsConfiguration` | Configuration of semantics properties for a spatial node. |

## Extension functions summary

|---|---|
| `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/layout/SubspaceModifier` | `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/layout/SubspaceModifier.https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/semantics/package-summary#(androidx.xr.compose.subspace.layout.SubspaceModifier).semantics(kotlin.Function1)(properties: https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/semantics/SubspaceSemanticsPropertyReceiver.() -> https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html)` Add semantics key/value pairs to the layout node, for use in testing, accessibility, etc. |
| `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/layout/SubspaceModifier` | `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/layout/SubspaceModifier.https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/semantics/package-summary#(androidx.xr.compose.subspace.layout.SubspaceModifier).testTag(kotlin.String)(tag: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html)` Applies a tag to allow modified element to be found in tests. |

## Extension properties summary

|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html` | `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/semantics/SubspaceSemanticsPropertyReceiver.https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/semantics/package-summary#(androidx.xr.compose.subspace.semantics.SubspaceSemanticsPropertyReceiver).contentDescription()` Developer-set content description of the accessibility node. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html` | `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/semantics/SubspaceSemanticsPropertyReceiver.https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/semantics/package-summary#(androidx.xr.compose.subspace.semantics.SubspaceSemanticsPropertyReceiver).testTag()` Test tag attached to this semantics node. |

## Extension functions

### SubspaceModifier.semantics

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/semantics/SemanticsModifier.kt+function:semantics) Added in [1.0.0-beta02](https://developer.android.com/jetpack/androidx/releases/xr-compose#1.0.0-beta02)

```
fun SubspaceModifier.semantics(properties: SubspaceSemanticsPropertyReceiver.() -> Unit): SubspaceModifier
```

Add semantics key/value pairs to the layout node, for use in testing, accessibility, etc.

**Mental Model (Picture Frame vs. Canvas):** When building a combined UI in Compose for XR, think of a Subspace node (such as `SpatialPanel`) as a "Picture Frame" existing in 3D space, and the standard 2D Compose UI elements inside it as the "Canvas".

- Use `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/semantics/package-summary#(androidx.xr.compose.subspace.layout.SubspaceModifier).semantics(kotlin.Function1)` on the 3D container (the frame) to provide spatial properties (such as `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/semantics/package-summary#(androidx.xr.compose.subspace.layout.SubspaceModifier).testTag(kotlin.String)` and `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/semantics/package-summary#(androidx.xr.compose.subspace.semantics.SubspaceSemanticsPropertyReceiver).contentDescription()`) for 3D placement, anchoring, or testing.

- Use standard `https://developer.android.com/reference/kotlin/androidx/compose/ui/semantics/semantics.modifier#(androidx.compose.ui.Modifier).semantics(kotlin.Boolean,kotlin.Function1)` modifiers on the 2D Compose composables (the canvas) for fine-grained user interactions and TalkBack accessibility.

**Interop \& Merging Guidance:** The 3D Subspace semantics tree and the 2D foundational semantics tree operate as distinct hierarchies. Spatial containers do not support merging descendant semantics (`mergeDescendants = true`).

```kotlin
import androidx.compose.foundation.layout.Column
import androidx.compose.material3.Button
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.semantics.contentDescription
import androidx.compose.ui.semantics.semantics
import androidx.xr.compose.spatial.Subspace
import androidx.xr.compose.subspace.SpatialPanel
import androidx.xr.compose.subspace.layout.SubspaceModifier
import androidx.xr.compose.subspace.semantics.contentDescription
import androidx.xr.compose.subspace.semantics.semantics
import androidx.xr.compose.subspace.semantics.testTag

@Composable
fun AppContent() {
    // Mental Model: The "Picture Frame" (3D Container) vs. the "Canvas" (2D Content)
    Subspace {
        SpatialPanel(
            modifier =
                SubspaceModifier.semantics {
                    // Set spatial semantics on the 3D container (the "Picture Frame")
                    testTag = "main_settings_panel"
                    contentDescription = "System Settings Window"
                }
        ) {
            // Standard 2D Compose UI goes inside (the "Canvas").
            // These elements use standard Modifier.semantics for TalkBack and interactions.
            Column {
                Text("System Settings")
                Button(
                    onClick = { /* do something */ },
                    modifier = Modifier.semantics { contentDescription = "Perform action" },
                ) {
                    Text("Click Me")
                }
            }
        }
    }
}
```

| Parameters |
|---|---|
| `properties: https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/semantics/SubspaceSemanticsPropertyReceiver.() -> https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | Builder block where the semantics properties are defined. |

### SubspaceModifier.testTag

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/semantics/TestTag.kt+function:testTag) Added in [1.0.0-beta02](https://developer.android.com/jetpack/androidx/releases/xr-compose#1.0.0-beta02)

```
fun SubspaceModifier.testTag(tag: String): SubspaceModifier
```

Applies a tag to allow modified element to be found in tests.

This is a convenience method for a `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/semantics/package-summary#(androidx.xr.compose.subspace.layout.SubspaceModifier).semantics(kotlin.Function1)` that sets `https://developer.android.com/reference/kotlin/androidx/xr/compose/subspace/semantics/package-summary#(androidx.xr.compose.subspace.semantics.SubspaceSemanticsPropertyReceiver).testTag()`.

| Parameters |
|---|---|
| `tag: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html` | String used to identify the modified element in tests. |

## Extension properties

### SubspaceSemanticsPropertyReceiver.contentDescription

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/semantics/SubspaceSemanticsPropertyReceiver.kt+symbol:contentDescription) Added in [1.0.0-beta02](https://developer.android.com/jetpack/androidx/releases/xr-compose#1.0.0-beta02)

```
var SubspaceSemanticsPropertyReceiver.contentDescription: String
```

Developer-set content description of the accessibility node.

### SubspaceSemanticsPropertyReceiver.testTag

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/semantics/SubspaceSemanticsPropertyReceiver.kt+symbol:testTag) Added in [1.0.0-beta02](https://developer.android.com/jetpack/androidx/releases/xr-compose#1.0.0-beta02)

```
var SubspaceSemanticsPropertyReceiver.testTag: String
```

Test tag attached to this semantics node.