Widgets
This is definitely experimental, so do not take this example too seriously, but it explores the idea of using shapeless to automatically derive "widgets" for case classes.
import calico.*
import calico.dsl.io.*
import calico.syntax.*
import calico.unsafe.given
import calico.widget.*
import cats.effect.*
import cats.effect.syntax.all.*
import fs2.*
import fs2.concurrent.*
case class Person(firstName: String, lastName: String, age: Int)
val app = SignallingRef[IO].of(Person("", "", 0)).toResource.flatMap { person =>
div(
div(h3("View"), Widget.view(person)),
div(h3("Edit"), Widget.edit(person))
)
}
app.renderInto(node).allocated.unsafeRunAndForget()