generated from mpetuska/template-kmp-library
-
-
Notifications
You must be signed in to change notification settings - Fork 11
/
MDCButton.kt
48 lines (45 loc) · 1.62 KB
/
MDCButton.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package showcases
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import dev.petuska.katalog.runtime.Showcase
import dev.petuska.katalog.runtime.layout.InteractiveShowcase
import dev.petuska.kmdc.button.*
import dev.petuska.kmdcx.icons.MDCIcon
import dev.petuska.kmdcx.icons.mdcIcon
import org.jetbrains.compose.web.attributes.disabled
import org.jetbrains.compose.web.dom.Text
import sandbox.control.BooleanControl
import sandbox.control.ChoiceControl
import sandbox.control.TextControl
private class MDCButtonVM {
var type by mutableStateOf(MDCButtonType.Text)
var icon by mutableStateOf(MDCButtonIconType.None)
var touch by mutableStateOf(false)
var disabled by mutableStateOf(false)
var label by mutableStateOf("My Label")
}
@Composable
@Showcase(id = "MDCButton")
fun MDCButton() = InteractiveShowcase(
viewModel = { MDCButtonVM() },
controls = {
ChoiceControl("Type", MDCButtonType.values().associateBy(MDCButtonType::name), ::type)
ChoiceControl("Icon", MDCButtonIconType.values().associateBy(MDCButtonIconType::name), ::icon)
BooleanControl("Disabled", ::disabled)
BooleanControl("Touch", ::touch)
TextControl("Label", label) { label = it }
},
) {
MDCButton(type = type, icon = icon, touch = touch, attrs = {
if (disabled) disabled()
}) {
val renderIcon = @Composable {
Icon(attrs = { mdcIcon() }) { Text(MDCIcon.Star.type) }
}
if (icon == MDCButtonIconType.Leading) renderIcon()
Label(label)
if (icon == MDCButtonIconType.Trailing) renderIcon()
}
}