30 lines
890 B
Kotlin
30 lines
890 B
Kotlin
package dev.keluna.example
|
|
|
|
import dev.keluna.core.Element
|
|
import dev.keluna.core.UiTree
|
|
import dev.keluna.ui.*
|
|
|
|
/** Application state and behavior live entirely in Kotlin. See adjacent Counter.css. */
|
|
class Counter {
|
|
val tree = UiTree()
|
|
val increment: Element
|
|
init {
|
|
var count = 0
|
|
var button: Element? = null
|
|
tree.root.column(scope = "counter") {
|
|
heading("Hello, Keluna")
|
|
label("Kotlin/Native state. Your system WebView. Local CSS.")
|
|
val status = label("Count: 0").apply {
|
|
cssClass("counter-value")
|
|
attribute("aria-live", "polite")
|
|
}
|
|
button = button("Increment") {
|
|
count++
|
|
status.text = "Count: $count"
|
|
status.cssClass("active", count > 0)
|
|
}
|
|
}
|
|
increment = checkNotNull(button)
|
|
}
|
|
}
|