Compose Multiplatform foundation library for building web UIs with type-safe HTML DSL, CSS-in-Kotlin, and event handling, compiled for WebAssembly/JavaScript target
—
Complete set of type-safe HTML element constructors providing composable functions for all standard HTML elements with proper attribute scoping and content builders.
import androidx.compose.runtime.*
import org.jetbrains.compose.web.dom.*
import org.jetbrains.compose.web.attributes.*Core text elements for displaying and structuring textual content.
/**
* Creates a text node with the specified content
* @param value - The text content to display
*/
@Composable
fun Text(value: String)
/**
* Paragraph element for text blocks
*/
@Composable
fun P(
attrs: AttrBuilderContext<HTMLParagraphElement>? = null,
content: ContentBuilder<HTMLParagraphElement>? = null
)
/**
* Heading elements H1 through H6
*/
@Composable
fun H1(
attrs: AttrBuilderContext<HTMLHeadingElement>? = null,
content: ContentBuilder<HTMLHeadingElement>? = null
)
@Composable
fun H2(
attrs: AttrBuilderContext<HTMLHeadingElement>? = null,
content: ContentBuilder<HTMLHeadingElement>? = null
)
@Composable
fun H3(
attrs: AttrBuilderContext<HTMLHeadingElement>? = null,
content: ContentBuilder<HTMLHeadingElement>? = null
)
@Composable
fun H4(
attrs: AttrBuilderContext<HTMLHeadingElement>? = null,
content: ContentBuilder<HTMLHeadingElement>? = null
)
@Composable
fun H5(
attrs: AttrBuilderContext<HTMLHeadingElement>? = null,
content: ContentBuilder<HTMLHeadingElement>? = null
)
@Composable
fun H6(
attrs: AttrBuilderContext<HTMLHeadingElement>? = null,
content: ContentBuilder<HTMLHeadingElement>? = null
)Usage Examples:
@Composable
fun TextContent() {
H1 { Text("Main Title") }
H2 { Text("Subtitle") }
P { Text("This is a paragraph of text content.") }
P({
style {
fontSize(16.px)
lineHeight(1.5)
}
}) {
Text("Styled paragraph with custom CSS.")
}
}Structural elements for organizing and containing other elements.
/**
* Generic container element (div)
*/
@Composable
fun Div(
attrs: AttrBuilderContext<HTMLDivElement>? = null,
content: ContentBuilder<HTMLDivElement>? = null
)
/**
* Inline container element (span)
*/
@Composable
fun Span(
attrs: AttrBuilderContext<HTMLSpanElement>? = null,
content: ContentBuilder<HTMLSpanElement>? = null
)
/**
* Semantic HTML5 structural elements
*/
@Composable
fun Header(
attrs: AttrBuilderContext<HTMLElement>? = null,
content: ContentBuilder<HTMLElement>? = null
)
@Composable
fun Footer(
attrs: AttrBuilderContext<HTMLElement>? = null,
content: ContentBuilder<HTMLElement>? = null
)
@Composable
fun Nav(
attrs: AttrBuilderContext<HTMLElement>? = null,
content: ContentBuilder<HTMLElement>? = null
)
@Composable
fun Main(
attrs: AttrBuilderContext<HTMLElement>? = null,
content: ContentBuilder<HTMLElement>? = null
)
@Composable
fun Section(
attrs: AttrBuilderContext<HTMLElement>? = null,
content: ContentBuilder<HTMLElement>? = null
)
@Composable
fun Article(
attrs: AttrBuilderContext<HTMLElement>? = null,
content: ContentBuilder<HTMLElement>? = null
)
@Composable
fun Aside(
attrs: AttrBuilderContext<HTMLElement>? = null,
content: ContentBuilder<HTMLElement>? = null
)Usage Examples:
@Composable
fun Layout() {
Header({
style {
padding(20.px)
backgroundColor(Color.lightgray)
}
}) {
Nav {
// Navigation content
}
}
Main {
Article {
H1 { Text("Article Title") }
P { Text("Article content goes here.") }
}
Aside {
H3 { Text("Sidebar") }
P { Text("Sidebar content.") }
}
}
Footer {
P { Text("© 2024 My Website") }
}
}Elements for styling and emphasizing text content.
/**
* Bold text formatting
*/
@Composable
fun B(
attrs: AttrBuilderContext<HTMLElement>? = null,
content: ContentBuilder<HTMLElement>? = null
)
/**
* Italic text formatting
*/
@Composable
fun I(
attrs: AttrBuilderContext<HTMLElement>? = null,
content: ContentBuilder<HTMLElement>? = null
)
/**
* Emphasized text (semantic emphasis)
*/
@Composable
fun Em(
attrs: AttrBuilderContext<HTMLElement>? = null,
content: ContentBuilder<HTMLElement>? = null
)
/**
* Small text formatting
*/
@Composable
fun Small(
attrs: AttrBuilderContext<HTMLElement>? = null,
content: ContentBuilder<HTMLElement>? = null
)
/**
* Superscript text
*/
@Composable
fun Sup(
attrs: AttrBuilderContext<HTMLElement>? = null,
content: ContentBuilder<HTMLElement>? = null
)
/**
* Subscript text
*/
@Composable
fun Sub(
attrs: AttrBuilderContext<HTMLElement>? = null,
content: ContentBuilder<HTMLElement>? = null
)
/**
* Block quote element
*/
@Composable
fun Blockquote(
attrs: AttrBuilderContext<HTMLElement>? = null,
content: ContentBuilder<HTMLElement>? = null
)
/**
* Inline code formatting
*/
@Composable
fun Code(
attrs: AttrBuilderContext<HTMLElement>? = null,
content: ContentBuilder<HTMLElement>? = null
)
/**
* Preformatted text block
*/
@Composable
fun Pre(
attrs: AttrBuilderContext<HTMLPreElement>? = null,
content: ContentBuilder<HTMLPreElement>? = null
)List elements for organizing content in ordered and unordered structures.
/**
* Unordered list container
*/
@Composable
fun Ul(
attrs: AttrBuilderContext<HTMLUListElement>? = null,
content: ContentBuilder<HTMLUListElement>? = null
)
/**
* Ordered list container
*/
@Composable
fun Ol(
attrs: AttrBuilderContext<HTMLOListElement>? = null,
content: ContentBuilder<HTMLOListElement>? = null
)
/**
* List item element
*/
@Composable
fun Li(
attrs: AttrBuilderContext<HTMLLIElement>? = null,
content: ContentBuilder<HTMLLIElement>? = null
)
/**
* Definition list container
*/
@Composable
fun DList(
attrs: AttrBuilderContext<HTMLDListElement>? = null,
content: ContentBuilder<HTMLDListElement>? = null
)
/**
* Definition term element
*/
@Composable
fun DTerm(
attrs: AttrBuilderContext<HTMLElement>? = null,
content: ContentBuilder<HTMLElement>? = null
)
/**
* Definition description element
*/
@Composable
fun DDescription(
attrs: AttrBuilderContext<HTMLElement>? = null,
content: ContentBuilder<HTMLElement>? = null
)Usage Examples:
@Composable
fun ListExamples() {
// Unordered list
Ul {
Li { Text("First item") }
Li { Text("Second item") }
Li { Text("Third item") }
}
// Ordered list
Ol({
style {
listStyleType("decimal")
}
}) {
Li { Text("Step one") }
Li { Text("Step two") }
Li { Text("Step three") }
}
// Definition list
DList {
DTerm { Text("HTML") }
DDescription { Text("HyperText Markup Language") }
DTerm { Text("CSS") }
DDescription { Text("Cascading Style Sheets") }
}
}Elements for user interaction including links, buttons, and other interactive components.
/**
* Anchor/link element
*/
@Composable
fun A(
href: String? = null,
attrs: AttrBuilderContext<HTMLAnchorElement>? = null,
content: ContentBuilder<HTMLAnchorElement>? = null
)
/**
* Button element
*/
@Composable
fun Button(
attrs: AttrBuilderContext<HTMLButtonElement>? = null,
content: ContentBuilder<HTMLButtonElement>? = null
)Usage Examples:
@Composable
fun InteractiveElements() {
A(
href = "https://example.com",
attrs = {
target(ATarget.Blank)
style {
color(Color.blue)
textDecoration("underline")
}
}
) {
Text("Visit Example.com")
}
Button({
onClick { event ->
console.log("Button clicked!")
}
style {
padding(12.px, 24.px)
backgroundColor(Color.blue)
color(Color.white)
border(0.px)
borderRadius(4.px)
}
}) {
Text("Click Me")
}
}Elements for embedding media content including images, audio, and video.
/**
* Image element
*/
@Composable
fun Img(
src: String,
alt: String = "",
attrs: AttrBuilderContext<HTMLImageElement>? = null
)
/**
* Audio element
*/
@Composable
fun Audio(
attrs: AttrBuilderContext<HTMLAudioElement>? = null,
content: ContentBuilder<HTMLAudioElement>? = null
)
/**
* Video element
*/
@Composable
fun Video(
attrs: AttrBuilderContext<HTMLVideoElement>? = null,
content: ContentBuilder<HTMLVideoElement>? = null
)
/**
* Canvas element for graphics
*/
@Composable
fun Canvas(
attrs: AttrBuilderContext<HTMLCanvasElement>? = null,
content: ContentBuilder<HTMLCanvasElement>? = null
)
/**
* Media source element
*/
@Composable
fun Source(
attrs: AttrBuilderContext<HTMLSourceElement>? = null
)
/**
* Media track element
*/
@Composable
fun Track(
attrs: AttrBuilderContext<HTMLTrackElement>? = null
)
/**
* Picture element for responsive images
*/
@Composable
fun Picture(
attrs: AttrBuilderContext<HTMLPictureElement>? = null,
content: ContentBuilder<HTMLPictureElement>? = null
)Complete set of table elements for displaying tabular data.
/**
* Table container
*/
@Composable
fun Table(
attrs: AttrBuilderContext<HTMLTableElement>? = null,
content: ContentBuilder<HTMLTableElement>? = null
)
/**
* Table row
*/
@Composable
fun Tr(
attrs: AttrBuilderContext<HTMLTableRowElement>? = null,
content: ContentBuilder<HTMLTableRowElement>? = null
)
/**
* Table data cell
*/
@Composable
fun Td(
attrs: AttrBuilderContext<HTMLTableCellElement>? = null,
content: ContentBuilder<HTMLTableCellElement>? = null
)
/**
* Table header cell
*/
@Composable
fun Th(
attrs: AttrBuilderContext<HTMLTableCellElement>? = null,
content: ContentBuilder<HTMLTableCellElement>? = null
)
/**
* Table head section
*/
@Composable
fun Thead(
attrs: AttrBuilderContext<HTMLTableSectionElement>? = null,
content: ContentBuilder<HTMLTableSectionElement>? = null
)
/**
* Table body section
*/
@Composable
fun Tbody(
attrs: AttrBuilderContext<HTMLTableSectionElement>? = null,
content: ContentBuilder<HTMLTableSectionElement>? = null
)
/**
* Table foot section
*/
@Composable
fun Tfoot(
attrs: AttrBuilderContext<HTMLTableSectionElement>? = null,
content: ContentBuilder<HTMLTableSectionElement>? = null
)
/**
* Table caption
*/
@Composable
fun Caption(
attrs: AttrBuilderContext<HTMLTableCaptionElement>? = null,
content: ContentBuilder<HTMLTableCaptionElement>? = null
)
/**
* Table column
*/
@Composable
fun Col(
attrs: AttrBuilderContext<HTMLTableColElement>? = null
)
/**
* Table column group
*/
@Composable
fun Colgroup(
attrs: AttrBuilderContext<HTMLTableColElement>? = null,
content: ContentBuilder<HTMLTableColElement>? = null
)Elements that do not contain content and close themselves.
/**
* Line break element
*/
@Composable
fun Br(
attrs: AttrBuilderContext<HTMLBRElement>? = null
)
/**
* Horizontal rule element
*/
@Composable
fun Hr(
attrs: AttrBuilderContext<HTMLHRElement>? = null
)Elements for embedding external content and objects.
/**
* Embedded content element
*/
@Composable
fun Embed(
attrs: AttrBuilderContext<HTMLEmbedElement>? = null
)
/**
* Embedded object element
*/
@Composable
fun Object(
attrs: AttrBuilderContext<HTMLObjectElement>? = null,
content: ContentBuilder<HTMLObjectElement>? = null
)
/**
* Object parameter element
*/
@Composable
fun Param(
attrs: AttrBuilderContext<HTMLParamElement>? = null
)
/**
* Inline frame element
*/
@Composable
fun Iframe(
attrs: AttrBuilderContext<HTMLIFrameElement>? = null,
content: ContentBuilder<HTMLIFrameElement>? = null
)
/**
* Image map element (renamed to avoid Kotlin keyword conflict)
*/
@Composable
fun HTMLMap(
attrs: AttrBuilderContext<HTMLMapElement>? = null,
content: ContentBuilder<HTMLMapElement>? = null
)
/**
* Image map area element
*/
@Composable
fun Area(
attrs: AttrBuilderContext<HTMLAreaElement>? = null
)typealias AttrBuilderContext<T> = AttrsScope<T>.() -> Unit
typealias ContentBuilder<T> = @Composable ElementScope<T>.() -> Unit
interface ElementScope<out TElement> {
val scopeElement: TElement
}Install with Tessl CLI
npx tessl i tessl/maven-org-jetbrains-compose-foundation--foundation-wasm-js