You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

83 lines
2.4 KiB

package com.sample.content
import androidx.compose.runtime.Composable
import org.jetbrains.compose.web.css.*
import org.jetbrains.compose.web.css.selectors.*
import org.jetbrains.compose.web.attributes.*
import org.jetbrains.compose.web.dom.*
import com.sample.style.AppStylesheet
private object SwitcherVariables : CSSVariables {
val labelWidth by variable<CSSpxValue>()
val labelPadding by variable<CSSpxValue>()
}
object SwitcherStylesheet : StyleSheet(AppStylesheet) {
val boxed by style {
media(mediaMaxWidth(640.px)) {
self style {
SwitcherVariables.labelWidth(48.px)
SwitcherVariables.labelPadding(5.px)
}
}
descendant(self, CSSSelector.Type("label")) style {
display(DisplayStyle.InlineBlock)
property("width", SwitcherVariables.labelWidth.value(56.px))
property("padding", SwitcherVariables.labelPadding.value(10.px))
property("transition", "all 0.3s")
property("text-align", "center")
property("box-sizing", "border-box")
border {
style(LineStyle.Solid)
width(3.px)
color(Color.transparent)
borderRadius(20.px, 20.px, 20.px)
}
color("#aaa")
}
border {
style(LineStyle.Solid)
width(1.px)
color(Color("#aaa"))
padding(0.px)
borderRadius(22.px, 22.px, 22.px)
}
descendant(self, selector("input[type=\"radio\"]")) style {
display(DisplayStyle.None)
}
descendant(self, selector("input[type=\"radio\"]:checked + label")) style {
border {
style(LineStyle.Solid)
width(3.px)
color(Color("#167dff"))
borderRadius(20.px, 20.px, 20.px)
}
color("#000")
}
}
}
@Composable
fun CodeSampleSwitcher(count: Int, current: Int, onSelect: (Int) -> Unit) {
Form(attrs = {
classes(SwitcherStylesheet.boxed)
}) {
repeat(count) { ix ->
Input(type = InputType.Radio, attrs = {
name("code-snippet")
value("snippet$ix")
id("snippet$ix")
if (current == ix) checked()
onInput { onSelect(ix) }
})
Label(forId = "snippet$ix") { Text("${ix + 1}") }
}
}
}