# TV Material3 1.0.0-rc01 API Reference

Reverse-engineered from JARs in `.gradle/caches/.../jetified-tv-material-1.0.0-rc01`.
This is a migration guide from tv-material3 alpha → rc01.

## Border API

```kotlin
// Package: androidx.tv.material3.Border
// Constructor: (BorderStroke, Float inset, Shape) — public synthetic
// IMPORTANT: DO NOT import this class — conflicts with compose.foundation.Border
// Always use fully-qualified: androidx.tv.material3.Border(...)

val border = androidx.tv.material3.Border(
    BorderStroke(2.dp, color),  // from compose.foundation.BorderStroke
    0f,                          // inset (Float, NOT Dp)
    shape,
)
```

`Border.Companion` only has `None` — no other factory methods.

## CardBorder API

```kotlin
// Package: androidx.tv.material3.CardBorder
// Constructor: (Border?, Border?, Border?) = (unfocused, focused, pressed)
// Used as return type of CardDefaults.border(), NOT constructed directly
```

## CardShape API

```kotlin
// Package: androidx.tv.material3.CardShape
// Constructor: (Shape, Shape, Shape) = (normal, focused, pressed)
// NOT constructed directly — use CardDefaults.shape()
```

## ClickableSurfaceBorder API

```kotlin
// Constructor: (Border?, Border?, Border?, Border?, Border?)
// = (unfocused, focused, pressed, disabled, focusedDisabled)
```

## ClickableSurfaceShape API

```kotlin
// Constructor: (Shape, Shape, Shape, Shape, Shape)
// = (normal, focused, pressed, disabled, focusedDisabled)
```

## ButtonBorder / ButtonShape API

```kotlin
// ButtonBorder: (Border?, Border?, Border?, Border?, Border?)
// ButtonShape: (Shape, Shape, Shape, Shape, Shape)
```

## CardDefaults Usage (rc01)

```kotlin
import androidx.tv.material3.CardDefaults
import androidx.compose.foundation.BorderStroke

Card(
    border = CardDefaults.border(
        focusedBorder = androidx.tv.material3.Border(
            BorderStroke(2.dp, NexColors.Accent), 0f, cardShape
        ),
    ),
    shape = CardDefaults.shape(cardShape),  // NOT CardShape(cardShape)
)
```

`CardDefaults.border()` is @Composable, returns `CardBorder`.
`CardDefaults.shape()` returns `CardShape`.

## ClickableSurfaceDefaults Usage (rc01)

```kotlin
import androidx.tv.material3.ClickableSurfaceDefaults

// border() is @Composable — call with named params
ClickableSurfaceDefaults.border(
    focusedBorder = androidx.tv.material3.Border(
        BorderStroke(2.dp, color), 0f, shape
    ),
)

// shape() is NOT @Composable — just returns ClickableSurfaceShape
ClickableSurfaceDefaults.shape(shape, shape, shape, shape, shape)
```

## ButtonDefaults Usage (rc01)

```kotlin
import androidx.tv.material3.ButtonDefaults

ButtonDefaults.border(
    focusedBorder = androidx.tv.material3.Border(
        BorderStroke(2.dp, color), 0f, shape
    ),
)
ButtonDefaults.shape(shape)
```

## Important Imports

```kotlin
import androidx.compose.foundation.BorderStroke     // for BorderStroke
import androidx.tv.material3.ButtonDefaults         // for ButtonDefaults.border/shape
import androidx.tv.material3.ClickableSurfaceDefaults  // for ClickableSurfaceDefaults.border/shape
// DO NOT import androidx.tv.material3.Border — conflicts with compose.foundation.Border
```

## Key Migration Patterns

| Alpha API | rc01 API |
|---|---|
| `ImmutableBorder(width, color, shape)` | `androidx.tv.material3.Border(BorderStroke(width, color), 0f, shape)` |
| `CardDefaults.border(focused = ...)` | `CardDefaults.border(focusedBorder = ...)` |
| `shape = RoundedCornerShape(...)` (on Card) | `shape = CardDefaults.shape(RoundedCornerShape(...))` |
| `shape = RoundedCornerShape(...)` (on Button) | `shape = ButtonDefaults.shape(RoundedCornerShape(...))` |
| `ButtonDefaults.buttonColors(...)` | `ButtonDefaults.colors(...)` |
| `onKeyEvent` (Modifier) | `onPreviewKeyEvent` (import: `androidx.compose.ui.input.key.onPreviewKeyEvent`) |
| `Modifier.isFocused` | `Modifier.onFocusChanged { state -> ... }` (import: `androidx.compose.ui.focus.onFocusChanged`) |
