Control

fun <T : Any> ManuscriptScope.Control(type: KClass<T>, control: @Composable BoxScope.(control: Control<T>) -> Unit)

Register a custom control for handling a data type that Manuscript doesn't natively handle

Parameters

type

the class that this control should be used for

control

composable function to

NOTE: if you think that there's a common data type that Manuscript should handle that it doesn't currently handle, then create an issue on the GitHub repo!

Samples

import androidx.compose.foundation.background
import androidx.compose.foundation.layout.*
import androidx.compose.material.Button
import androidx.compose.material.Text
import androidx.compose.material.TextField
import androidx.compose.material.TextFieldDefaults
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp
import io.ezard.manuscript.manuscript.LocalManuscriptData
import io.ezard.manuscript.manuscript.Manuscript
import io.ezard.manuscript.manuscript.ManuscriptScope
import io.ezard.manuscript.variant.Variant
import kotlin.reflect.KClass
import kotlin.reflect.KProperty
fun main() { 
   //sampleStart 
   Row {
    var color by control

    val red = (color.red * 255).toInt().toString()
    val green = (color.green * 255).toInt().toString()
    val blue = (color.blue * 255).toInt().toString()

    TextField(
        value = red,
        onValueChange = { r -> color = color.copy(red = r.toFloat() / 255) },
        modifier = Modifier.weight(1f),
    )
    Spacer(modifier = Modifier.width(4.dp))
    TextField(
        value = green,
        onValueChange = { g -> color = color.copy(green = g.toFloat() / 255) },
        modifier = Modifier.weight(1f),
    )
    Spacer(modifier = Modifier.width(4.dp))
    TextField(
        value = blue,
        onValueChange = { b -> color = color.copy(blue = b.toFloat() / 255) },
        modifier = Modifier.weight(1f),
    )
} 
   //sampleEnd
}
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.*
import androidx.compose.material.Button
import androidx.compose.material.Text
import androidx.compose.material.TextField
import androidx.compose.material.TextFieldDefaults
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp
import io.ezard.manuscript.manuscript.LocalManuscriptData
import io.ezard.manuscript.manuscript.Manuscript
import io.ezard.manuscript.manuscript.ManuscriptScope
import io.ezard.manuscript.variant.Variant
import kotlin.reflect.KClass
import kotlin.reflect.KProperty
fun main() { 
   //sampleStart 
   Manuscript {
    Control(
        type = Color::class,
        control = { control -> ColourControl(control = control) },
    )

    val colour by control(name = "Colour", defaultValue = Color.Red)

    Variant("Button") {
        Button(onClick = {}) {
            Text(text = "Click me!", modifier = Modifier.background(colour))
        }
    }
} 
   //sampleEnd
}