.() -> Unit) {
+ subheaderTypographyProps = RBuilder().typography(block = block).props
+ }
+ fun Tag.subheaderTypographyProps(block: TypographyElementBuilder.() -> Unit) {
+ subheaderTypographyProps = RBuilder().typography(p = true, block = block).props
+ }
+ fun Tag.titleTypographyProps(block: TypographyElementBuilder.() -> Unit) {
+ titleTypographyProps = RBuilder().typography(block = block).props
+ }
+ fun Tag.titleTypographyProps(block: TypographyElementBuilder.() -> Unit) {
+ titleTypographyProps = RBuilder().typography(p = true, block = block).props
+ }
+}
\ No newline at end of file
diff --git a/core/src/main/kotlin/materialui/components/cardheader/cardHeader.kt b/core/src/main/kotlin/materialui/components/cardheader/cardHeader.kt
new file mode 100644
index 00000000..b01216f0
--- /dev/null
+++ b/core/src/main/kotlin/materialui/components/cardheader/cardHeader.kt
@@ -0,0 +1,27 @@
+package materialui.components.cardheader
+
+import kotlinx.html.DIV
+import kotlinx.html.Tag
+import kotlinx.html.TagConsumer
+import materialui.CardHeader
+import materialui.components.StandardProps
+import materialui.components.cardheader.enums.CardHeaderStyle
+import react.RBuilder
+import react.RProps
+import react.ReactElement
+
+external interface CardHeaderProps : StandardProps {
+ var action: ReactElement?
+ var avatar: ReactElement?
+ var disableTypography: Boolean?
+ var subheader: ReactElement?
+ var subheaderTypographyProps: RProps?
+ var title: ReactElement?
+ var titleTypographyProps: RProps?
+}
+
+fun RBuilder.cardHeader(vararg classMap: Pair, block: CardHeaderElementBuilder.() -> Unit)
+ = child(CardHeaderElementBuilder(CardHeader, classMap.toList()) { DIV(mapOf(), it) }.apply(block).create())
+
+fun
RBuilder.cardHeader(vararg classMap: Pair, factory: (TagConsumer) -> T, block: CardHeaderElementBuilder.() -> Unit)
+ = child(CardHeaderElementBuilder(CardHeader, classMap.toList(), factory).apply(block).create())
diff --git a/core/src/main/kotlin/materialui/components/cardheader/enums/CardHeaderStyle.kt b/core/src/main/kotlin/materialui/components/cardheader/enums/CardHeaderStyle.kt
new file mode 100644
index 00000000..9d5c40ae
--- /dev/null
+++ b/core/src/main/kotlin/materialui/components/cardheader/enums/CardHeaderStyle.kt
@@ -0,0 +1,6 @@
+package materialui.components.cardheader.enums
+
+@Suppress("EnumEntryName")
+enum class CardHeaderStyle {
+ root, avatar, action, content, title, subheader
+}
\ No newline at end of file
diff --git a/core/src/main/kotlin/materialui/components/cardmedia/CardMediaElementBuilder.kt b/core/src/main/kotlin/materialui/components/cardmedia/CardMediaElementBuilder.kt
new file mode 100644
index 00000000..e2f93995
--- /dev/null
+++ b/core/src/main/kotlin/materialui/components/cardmedia/CardMediaElementBuilder.kt
@@ -0,0 +1,23 @@
+package materialui.components.cardmedia
+
+import kotlinx.html.Tag
+import kotlinx.html.TagConsumer
+import materialui.components.MaterialElementBuilder
+import materialui.components.cardmedia.enums.CardMediaStyle
+import materialui.components.getValue
+import materialui.components.setValue
+import react.RClass
+
+class CardMediaElementBuilder internal constructor(
+ type: RClass,
+ classMap: List, String>>,
+ factory: (TagConsumer) -> T
+) : MaterialElementBuilder(type, classMap, factory) {
+ fun Tag.classes(vararg classMap: Pair) {
+ classes(classMap.toList())
+ }
+
+ var Tag.image: String? by materialProps
+ var Tag.src: String? by materialProps
+ var Tag.style: Any? by materialProps
+}
\ No newline at end of file
diff --git a/core/src/main/kotlin/materialui/components/cardmedia/cardmedia.kt b/core/src/main/kotlin/materialui/components/cardmedia/cardmedia.kt
new file mode 100644
index 00000000..803f929a
--- /dev/null
+++ b/core/src/main/kotlin/materialui/components/cardmedia/cardmedia.kt
@@ -0,0 +1,21 @@
+package materialui.components.cardmedia
+
+import kotlinx.html.DIV
+import kotlinx.html.Tag
+import kotlinx.html.TagConsumer
+import materialui.CardMedia
+import materialui.components.StandardProps
+import materialui.components.cardmedia.enums.CardMediaStyle
+import react.RBuilder
+
+external interface CardMediaProps : StandardProps {
+ var image: String?
+ var src: String?
+ var style: Any?
+}
+
+fun RBuilder.cardMedia(vararg classMap: Pair, block: CardMediaElementBuilder.() -> Unit)
+ = child(CardMediaElementBuilder(CardMedia, classMap.toList()) { DIV(mapOf(), it) }.apply(block).create())
+
+fun
RBuilder.cardMedia(vararg classMap: Pair, factory: (TagConsumer) -> T, block: CardMediaElementBuilder.() -> Unit)
+ = child(CardMediaElementBuilder(CardMedia, classMap.toList(), factory).apply(block).create())
diff --git a/core/src/main/kotlin/materialui/components/cardmedia/enums/CardMediaStyle.kt b/core/src/main/kotlin/materialui/components/cardmedia/enums/CardMediaStyle.kt
new file mode 100644
index 00000000..94d6e84c
--- /dev/null
+++ b/core/src/main/kotlin/materialui/components/cardmedia/enums/CardMediaStyle.kt
@@ -0,0 +1,6 @@
+package materialui.components.cardmedia.enums
+
+@Suppress("EnumEntryName")
+enum class CardMediaStyle {
+ root, media
+}
\ No newline at end of file
diff --git a/core/src/main/kotlin/materialui/components/checkbox/CheckboxElementBuilder.kt b/core/src/main/kotlin/materialui/components/checkbox/CheckboxElementBuilder.kt
new file mode 100644
index 00000000..9b5a44cf
--- /dev/null
+++ b/core/src/main/kotlin/materialui/components/checkbox/CheckboxElementBuilder.kt
@@ -0,0 +1,24 @@
+package materialui.components.checkbox
+
+import kotlinx.html.Tag
+import materialui.components.checkbox.enums.CheckboxColor
+import materialui.components.checkbox.enums.CheckboxStyle
+import materialui.components.getValue
+import materialui.components.internal.SwitchBaseElementBuilder
+import materialui.components.setValue
+import react.RClass
+import react.ReactElement
+
+class CheckboxElementBuilder internal constructor(
+ type: RClass,
+ classMap: List, String>>
+) : SwitchBaseElementBuilder(type, classMap) {
+ fun Tag.classes(vararg classMap: Pair) {
+ classes(classMap.toList())
+ }
+
+ var Tag.color: CheckboxColor? by materialProps
+ var Tag.indeterminate: Boolean? by materialProps
+ var Tag.indeterminateIcon: ReactElement? by materialProps
+ var Tag.value: String? by materialProps
+}
diff --git a/core/src/main/kotlin/materialui/components/checkbox/checkbox.kt b/core/src/main/kotlin/materialui/components/checkbox/checkbox.kt
new file mode 100644
index 00000000..202b936e
--- /dev/null
+++ b/core/src/main/kotlin/materialui/components/checkbox/checkbox.kt
@@ -0,0 +1,15 @@
+package materialui.components.checkbox
+
+import materialui.Checkbox
+import materialui.components.checkbox.enums.CheckboxStyle
+import materialui.components.internal.SwitchBaseProps
+import react.*
+
+external interface CheckboxProps : SwitchBaseProps {
+ var color: String?
+ var indeterminate: Boolean?
+ var indeterminateIcon: ReactElement?
+}
+
+fun RBuilder.checkbox(vararg classMap: Pair, block: CheckboxElementBuilder.() -> Unit)
+ = child(CheckboxElementBuilder(Checkbox, classMap.toList()).apply(block).create())
diff --git a/core/src/main/kotlin/materialui/components/checkbox/enums/CheckboxColor.kt b/core/src/main/kotlin/materialui/components/checkbox/enums/CheckboxColor.kt
new file mode 100644
index 00000000..9070c5db
--- /dev/null
+++ b/core/src/main/kotlin/materialui/components/checkbox/enums/CheckboxColor.kt
@@ -0,0 +1,6 @@
+package materialui.components.checkbox.enums
+
+@Suppress("EnumEntryName")
+enum class CheckboxColor {
+ primary, secondary, default
+}
\ No newline at end of file
diff --git a/core/src/main/kotlin/materialui/components/checkbox/enums/CheckboxStyle.kt b/core/src/main/kotlin/materialui/components/checkbox/enums/CheckboxStyle.kt
new file mode 100644
index 00000000..5d14a60c
--- /dev/null
+++ b/core/src/main/kotlin/materialui/components/checkbox/enums/CheckboxStyle.kt
@@ -0,0 +1,11 @@
+package materialui.components.checkbox.enums
+
+@Suppress("EnumEntryName")
+enum class CheckboxStyle {
+ root,
+ checked,
+ disabled,
+ indeterminate,
+ colorPrimary,
+ colorSecondary
+}
\ No newline at end of file
diff --git a/core/src/main/kotlin/materialui/components/chip/ChipElementBuilder.kt b/core/src/main/kotlin/materialui/components/chip/ChipElementBuilder.kt
new file mode 100644
index 00000000..017686e7
--- /dev/null
+++ b/core/src/main/kotlin/materialui/components/chip/ChipElementBuilder.kt
@@ -0,0 +1,42 @@
+package materialui.components.chip
+
+import kotlinx.html.Tag
+import kotlinx.html.TagConsumer
+import materialui.components.MaterialElementBuilder
+import materialui.components.chip.enums.ChipColor
+import materialui.components.chip.enums.ChipStyle
+import materialui.components.chip.enums.ChipVariant
+import materialui.components.getValue
+import materialui.components.setValue
+import org.w3c.dom.events.Event
+import react.RBuilder
+import react.RClass
+import react.ReactElement
+import react.buildElement
+
+class ChipElementBuilder internal constructor(
+ type: RClass,
+ classMap: List, String>>,
+ factory: (TagConsumer) -> T
+) : MaterialElementBuilder(type, classMap, factory) {
+ fun Tag.classes(vararg classMap: Pair) {
+ classes(classMap.toList())
+ }
+
+ var Tag.avatar: ReactElement? by materialProps
+ var Tag.clickable: Boolean? by materialProps
+ var Tag.color: ChipColor? by materialProps
+ var Tag.deleteIcon: ReactElement? by materialProps
+ var Tag.icon: ReactElement? by materialProps
+ var Tag.label: ReactElement? by materialProps
+ var Tag.onDelete: ((Event) -> Unit)? by materialProps
+ val Tag.tabIndex: String? by materialProps
+ var Tag.variant: ChipVariant? by materialProps
+
+ fun Tag.avatar(block: RBuilder.() -> Unit) { avatar = buildElement(block) }
+ fun Tag.deleteIcon(block: RBuilder.() -> Unit) { deleteIcon = buildElement(block) }
+ fun Tag.icon(block: RBuilder.() -> Unit) { icon = buildElement(block) }
+ fun Tag.label(block: RBuilder.() -> Unit) { label = buildElement(block) }
+ fun Tag.tabIndex(index: Number) { materialProps.tabIndex = index }
+ fun Tag.tabIndex(index: String) { materialProps.tabIndex = index }
+}
\ No newline at end of file
diff --git a/core/src/main/kotlin/materialui/components/chip/chip.kt b/core/src/main/kotlin/materialui/components/chip/chip.kt
new file mode 100644
index 00000000..2e983460
--- /dev/null
+++ b/core/src/main/kotlin/materialui/components/chip/chip.kt
@@ -0,0 +1,29 @@
+package materialui.components.chip
+
+import kotlinx.html.DIV
+import kotlinx.html.Tag
+import kotlinx.html.TagConsumer
+import materialui.Chip
+import materialui.components.StandardProps
+import materialui.components.chip.enums.ChipStyle
+import org.w3c.dom.events.Event
+import react.RBuilder
+import react.ReactElement
+
+external interface ChipProps : StandardProps {
+ var avatar: ReactElement?
+ var clickable: Boolean?
+ var color: String?
+ var deleteIcon: ReactElement?
+ var icon: ReactElement?
+ var label: ReactElement?
+ var onDelete: ((Event) -> Unit)?
+ var tabIndex: dynamic
+ var variant: String?
+}
+
+fun RBuilder.chip(vararg classMap: Pair, block: ChipElementBuilder.() -> Unit)
+ = child(ChipElementBuilder(Chip, classMap.toList()) { DIV(mapOf(), it) }.apply(block).create())
+
+fun
RBuilder.chip(vararg classMap: Pair, factory: (TagConsumer) -> T, block: ChipElementBuilder.() -> Unit)
+ = child(ChipElementBuilder(Chip, classMap.toList(), factory).apply(block).create())
diff --git a/core/src/main/kotlin/materialui/components/chip/enums/ChipColor.kt b/core/src/main/kotlin/materialui/components/chip/enums/ChipColor.kt
new file mode 100644
index 00000000..372bf148
--- /dev/null
+++ b/core/src/main/kotlin/materialui/components/chip/enums/ChipColor.kt
@@ -0,0 +1,6 @@
+package materialui.components.chip.enums
+
+@Suppress("EnumEntryName")
+enum class ChipColor {
+ default, primary, secondary
+}
\ No newline at end of file
diff --git a/core/src/main/kotlin/materialui/components/chip/enums/ChipStyle.kt b/core/src/main/kotlin/materialui/components/chip/enums/ChipStyle.kt
new file mode 100644
index 00000000..30ae6c11
--- /dev/null
+++ b/core/src/main/kotlin/materialui/components/chip/enums/ChipStyle.kt
@@ -0,0 +1,30 @@
+package materialui.components.chip.enums
+
+@Suppress("EnumEntryName")
+enum class ChipStyle {
+ root,
+ colorPrimary,
+ colorSecondary,
+ clickable,
+ clickableColorPrimary,
+ clickableColorSecondary,
+ deletable,
+ deletableColorPrimary,
+ deletableColorSecondary,
+ outlined,
+ outlinedPrimary,
+ outlinedSecondary,
+ avatar,
+ avatarColorPrimary,
+ avatarColorSecondary,
+ avatarChildren,
+ icon,
+ iconColorPrimary,
+ iconColorSecondary,
+ label,
+ deleteIcon,
+ deleteIconColorPrimary,
+ deleteIconColorSecondary,
+ deleteIconOutlinedColorPrimary,
+ deleteIconOutlinedColorSecondary
+}
\ No newline at end of file
diff --git a/core/src/main/kotlin/materialui/components/chip/enums/ChipVariant.kt b/core/src/main/kotlin/materialui/components/chip/enums/ChipVariant.kt
new file mode 100644
index 00000000..8e512044
--- /dev/null
+++ b/core/src/main/kotlin/materialui/components/chip/enums/ChipVariant.kt
@@ -0,0 +1,6 @@
+package materialui.components.chip.enums
+
+@Suppress("EnumEntryName")
+enum class ChipVariant {
+ default, outlined
+}
\ No newline at end of file
diff --git a/core/src/main/kotlin/materialui/components/circularprogress/CircularProgressElementBuilder.kt b/core/src/main/kotlin/materialui/components/circularprogress/CircularProgressElementBuilder.kt
new file mode 100644
index 00000000..641362ee
--- /dev/null
+++ b/core/src/main/kotlin/materialui/components/circularprogress/CircularProgressElementBuilder.kt
@@ -0,0 +1,31 @@
+package materialui.components.circularprogress
+
+import kotlinx.html.DIV
+import kotlinx.html.Tag
+import materialui.components.MaterialElementBuilder
+import materialui.components.circularprogress.enums.CircularProgressColor
+import materialui.components.circularprogress.enums.CircularProgressStyle
+import materialui.components.circularprogress.enums.CircularProgressVariant
+import materialui.components.getValue
+import materialui.components.setValue
+import react.RClass
+
+class CircularProgressElementBuilder internal constructor(
+ type: RClass,
+ classMap: List, String>>
+) : MaterialElementBuilder(type, classMap.toList(), { DIV(mapOf(), it) }) {
+ fun Tag.classes(vararg classMap: Pair
) {
+ classes(classMap.toList())
+ }
+
+ var Tag.color: CircularProgressColor? by materialProps
+ var Tag.disableShrink: Boolean? by materialProps
+ val Tag.size: String? by materialProps
+ var Tag.style: Any? by materialProps
+ var Tag.thickness: Number? by materialProps
+ var Tag.value: Number? by materialProps
+ var Tag.variant: CircularProgressVariant? by materialProps
+
+ fun Tag.size(size: Number) { materialProps.size = size }
+ fun Tag.size(size: String) { materialProps.size = size }
+}
\ No newline at end of file
diff --git a/core/src/main/kotlin/materialui/components/circularprogress/circularprogress.kt b/core/src/main/kotlin/materialui/components/circularprogress/circularprogress.kt
new file mode 100644
index 00000000..4c6ec507
--- /dev/null
+++ b/core/src/main/kotlin/materialui/components/circularprogress/circularprogress.kt
@@ -0,0 +1,19 @@
+package materialui.components.circularprogress
+
+import materialui.CircularProgress
+import materialui.components.StandardProps
+import materialui.components.circularprogress.enums.CircularProgressStyle
+import react.RBuilder
+
+external interface CircularProgressProps : StandardProps {
+ var color: String?
+ var disableShrink: Boolean?
+ var size: dynamic
+ var style: Any?
+ var thickness: Number?
+ var value: Number?
+ var variant: String?
+}
+
+fun RBuilder.circularProgress(vararg classMap: Pair, block: CircularProgressElementBuilder.() -> Unit)
+ = child(CircularProgressElementBuilder(CircularProgress, classMap.toList()).apply(block).create())
diff --git a/core/src/main/kotlin/materialui/components/circularprogress/enums/CircularProgressColor.kt b/core/src/main/kotlin/materialui/components/circularprogress/enums/CircularProgressColor.kt
new file mode 100644
index 00000000..39abbddd
--- /dev/null
+++ b/core/src/main/kotlin/materialui/components/circularprogress/enums/CircularProgressColor.kt
@@ -0,0 +1,6 @@
+package materialui.components.circularprogress.enums
+
+@Suppress("EnumEntryName")
+enum class CircularProgressColor {
+ primary, secondary, inherit
+}
\ No newline at end of file
diff --git a/core/src/main/kotlin/materialui/components/circularprogress/enums/CircularProgressStyle.kt b/core/src/main/kotlin/materialui/components/circularprogress/enums/CircularProgressStyle.kt
new file mode 100644
index 00000000..2f067dd0
--- /dev/null
+++ b/core/src/main/kotlin/materialui/components/circularprogress/enums/CircularProgressStyle.kt
@@ -0,0 +1,15 @@
+package materialui.components.circularprogress.enums
+
+@Suppress("EnumEntryName")
+enum class CircularProgressStyle {
+ root,
+ static,
+ indeterminate,
+ colorPrimary,
+ colorSecondary,
+ svg,
+ circle,
+ circleStatic,
+ circleIndeterminate,
+ circleDisableShrink,
+}
\ No newline at end of file
diff --git a/core/src/main/kotlin/materialui/components/circularprogress/enums/CircularProgressVariant.kt b/core/src/main/kotlin/materialui/components/circularprogress/enums/CircularProgressVariant.kt
new file mode 100644
index 00000000..f5e80c68
--- /dev/null
+++ b/core/src/main/kotlin/materialui/components/circularprogress/enums/CircularProgressVariant.kt
@@ -0,0 +1,6 @@
+package materialui.components.circularprogress.enums
+
+@Suppress("EnumEntryName")
+enum class CircularProgressVariant {
+ determinate, indeterminate, static
+}
\ No newline at end of file
diff --git a/core/src/main/kotlin/materialui/components/clickawaylistener/ClickAwayListenerBuilder.kt b/core/src/main/kotlin/materialui/components/clickawaylistener/ClickAwayListenerBuilder.kt
new file mode 100644
index 00000000..7769c8bb
--- /dev/null
+++ b/core/src/main/kotlin/materialui/components/clickawaylistener/ClickAwayListenerBuilder.kt
@@ -0,0 +1,29 @@
+package materialui.components.clickawaylistener
+
+import kotlinext.js.jsObject
+import materialui.components.clickawaylistener.enums.ClickAwayMouseEvent
+import materialui.components.clickawaylistener.enums.ClickAwayTouchEvent
+import materialui.reacteventlistener.REventListenerBuilder
+import react.RClass
+
+class ClickAwayListenerBuilder internal constructor(
+ type: RClass
+) : REventListenerBuilder(type, jsObject { }) {
+
+ fun ClickAwayListenerProps.mouseEvent(event: ClickAwayMouseEvent, enable: Boolean = true) {
+ if (!enable) {
+ mouseEvent = false
+ return
+ }
+
+ mouseEvent = event.toString()
+ }
+ fun ClickAwayListenerProps.touchEvent(event: ClickAwayTouchEvent, enable: Boolean = true) {
+ if (!enable) {
+ mouseEvent = false
+ return
+ }
+
+ touchEvent = event.toString()
+ }
+}
\ No newline at end of file
diff --git a/core/src/main/kotlin/materialui/components/clickawaylistener/clickAwayListener.kt b/core/src/main/kotlin/materialui/components/clickawaylistener/clickAwayListener.kt
new file mode 100644
index 00000000..ec34703f
--- /dev/null
+++ b/core/src/main/kotlin/materialui/components/clickawaylistener/clickAwayListener.kt
@@ -0,0 +1,15 @@
+package materialui.components.clickawaylistener
+
+import materialui.ClickAwayListener
+import org.w3c.dom.events.Event
+import react.RBuilder
+import react.RProps
+
+external interface ClickAwayListenerProps : RProps {
+ var mouseEvent: dynamic
+ var onClickAway: ((Event) -> Unit)?
+ var touchEvent: dynamic
+}
+
+fun RBuilder.clickAwayListener(block: ClickAwayListenerBuilder.() -> Unit)
+ = child(ClickAwayListenerBuilder(ClickAwayListener).apply(block).create())
diff --git a/core/src/main/kotlin/materialui/components/clickawaylistener/enums/ClickAwayMouseEvent.kt b/core/src/main/kotlin/materialui/components/clickawaylistener/enums/ClickAwayMouseEvent.kt
new file mode 100644
index 00000000..f6f0ef06
--- /dev/null
+++ b/core/src/main/kotlin/materialui/components/clickawaylistener/enums/ClickAwayMouseEvent.kt
@@ -0,0 +1,6 @@
+package materialui.components.clickawaylistener.enums
+
+@Suppress("EnumEntryName")
+enum class ClickAwayMouseEvent {
+ onClick, onMouseDown, onMouseUp
+}
\ No newline at end of file
diff --git a/core/src/main/kotlin/materialui/components/clickawaylistener/enums/ClickAwayTouchEvent.kt b/core/src/main/kotlin/materialui/components/clickawaylistener/enums/ClickAwayTouchEvent.kt
new file mode 100644
index 00000000..a4b0b97f
--- /dev/null
+++ b/core/src/main/kotlin/materialui/components/clickawaylistener/enums/ClickAwayTouchEvent.kt
@@ -0,0 +1,6 @@
+package materialui.components.clickawaylistener.enums
+
+@Suppress("EnumEntryName")
+enum class ClickAwayTouchEvent {
+ onTouchStart, onTouchEnd
+}
\ No newline at end of file
diff --git a/core/src/main/kotlin/materialui/components/collapse/CollapseElementBuilder.kt b/core/src/main/kotlin/materialui/components/collapse/CollapseElementBuilder.kt
new file mode 100644
index 00000000..57e47012
--- /dev/null
+++ b/core/src/main/kotlin/materialui/components/collapse/CollapseElementBuilder.kt
@@ -0,0 +1,48 @@
+package materialui.components.collapse
+
+import kotlinext.js.js
+import kotlinx.css.LinearDimension
+import kotlinx.html.Tag
+import kotlinx.html.TagConsumer
+import materialui.components.MaterialElementBuilder
+import materialui.components.collapse.enums.CollapseStyle
+import materialui.components.getValue
+import materialui.components.setValue
+import materialui.styles.muitheme.MuiTheme
+import org.w3c.dom.events.Event
+import react.RClass
+import react.ReactElement
+
+class CollapseElementBuilder internal constructor(
+ type: RClass,
+ classMap: List, String>>,
+ factory: (TagConsumer) -> T
+) : MaterialElementBuilder(type, classMap, factory) {
+ fun Tag.classes(vararg classMap: Pair) {
+ classes(classMap.map { it.first to it.second })
+ }
+
+ var Tag.collapsedHeight: LinearDimension?
+ get() = materialProps.collapsedHeight
+ set(value) { materialProps.collapsedHeight = value }
+ var Tag.style: Any? by materialProps
+ var Tag.theme: MuiTheme? by materialProps
+
+ var Tag.`in`: Boolean? by materialProps
+ var Tag.mountOnEnter: Boolean? by materialProps
+ var Tag.unmountOnExit: Boolean? by materialProps
+ var Tag.appear: Boolean? by materialProps
+ var Tag.enter: Boolean? by materialProps
+ var Tag.exit: Boolean? by materialProps
+ var Tag.addEndListener: ((ReactElement, (Event) -> Unit) -> Unit)? by materialProps
+ var Tag.onEnter: ((ReactElement, Boolean) -> Unit)? by materialProps
+ var Tag.onEntering: ((ReactElement, Boolean) -> Unit)? by materialProps
+ var Tag.onEntered: ((ReactElement, Boolean) -> Unit)? by materialProps
+ var Tag.onExit: ((ReactElement) -> Unit)? by materialProps
+ var Tag.onExiting: ((ReactElement) -> Unit)? by materialProps
+ var Tag.onExited: ((ReactElement) -> Unit)? by materialProps
+
+ fun Tag.timeout(msec: Long) { materialProps.timeout = msec }
+ fun Tag.timeout(enter: Long, end: Long) { materialProps.timeout = js { this["enter"] = enter; this["end"] = end } }
+ fun Tag.timeout() { materialProps.timeout = "auto" }
+}
\ No newline at end of file
diff --git a/core/src/main/kotlin/materialui/components/collapse/collapse.kt b/core/src/main/kotlin/materialui/components/collapse/collapse.kt
new file mode 100644
index 00000000..fa5bc1aa
--- /dev/null
+++ b/core/src/main/kotlin/materialui/components/collapse/collapse.kt
@@ -0,0 +1,26 @@
+package materialui.components.collapse
+
+import kotlinx.css.LinearDimension
+import kotlinx.html.DIV
+import kotlinx.html.Tag
+import kotlinx.html.TagConsumer
+import materialui.Collapse
+import materialui.components.StandardProps
+import materialui.components.collapse.enums.CollapseStyle
+import materialui.reacttransiton.RTransitionProps
+import materialui.styles.LinearDimensionDelegate
+import materialui.styles.muitheme.MuiTheme
+import react.RBuilder
+
+external interface CollapseProps : RTransitionProps, StandardProps {
+ var style: Any?
+ var theme: MuiTheme?
+}
+
+var CollapseProps.collapsedHeight: LinearDimension? by LinearDimensionDelegate
+
+fun RBuilder.collapse(vararg classMap: Pair, block: CollapseElementBuilder.() -> Unit)
+ = child(CollapseElementBuilder(Collapse, classMap.toList()) { DIV(mapOf(), it) }.apply(block).create())
+
+fun
RBuilder.collapse(vararg classMap: Pair, factory: (TagConsumer) -> T, block: CollapseElementBuilder.() -> Unit)
+ = child(CollapseElementBuilder(Collapse, classMap.toList(), factory).apply(block).create())
diff --git a/core/src/main/kotlin/materialui/components/collapse/enums/CollapseStyle.kt b/core/src/main/kotlin/materialui/components/collapse/enums/CollapseStyle.kt
new file mode 100644
index 00000000..b54f8a42
--- /dev/null
+++ b/core/src/main/kotlin/materialui/components/collapse/enums/CollapseStyle.kt
@@ -0,0 +1,6 @@
+package materialui.components.collapse.enums
+
+@Suppress("EnumEntryName")
+enum class CollapseStyle {
+ container, entered, wrapper, wrapperInner
+}
\ No newline at end of file
diff --git a/core/src/main/kotlin/materialui/components/container/ContainerElementBuilder.kt b/core/src/main/kotlin/materialui/components/container/ContainerElementBuilder.kt
new file mode 100644
index 00000000..ae332824
--- /dev/null
+++ b/core/src/main/kotlin/materialui/components/container/ContainerElementBuilder.kt
@@ -0,0 +1,25 @@
+package materialui.components.container
+
+import kotlinx.html.Tag
+import kotlinx.html.TagConsumer
+import materialui.components.MaterialElementBuilder
+import materialui.components.container.enums.ContainerMaxWidth
+import materialui.components.container.enums.ContainerStyle
+import materialui.components.getValue
+import materialui.components.setValue
+import react.RClass
+
+class ContainerElementBuilder internal constructor(
+ type: RClass,
+ classMap: List, String>>,
+ factory: (TagConsumer) -> T
+) : MaterialElementBuilder(type, classMap, factory) {
+ fun Tag.classes(vararg classMap: Pair) {
+ classes(classMap.map { it.first to it.second })
+ }
+
+ var Tag.disableGutters: Boolean? by materialProps
+ var Tag.fixed: Boolean? by materialProps
+ var Tag.maxWidth: ContainerMaxWidth? by materialProps
+}
+
diff --git a/core/src/main/kotlin/materialui/components/container/container.kt b/core/src/main/kotlin/materialui/components/container/container.kt
new file mode 100644
index 00000000..f7f32eb0
--- /dev/null
+++ b/core/src/main/kotlin/materialui/components/container/container.kt
@@ -0,0 +1,25 @@
+package materialui.components.container
+
+import kotlinx.html.DIV
+import kotlinx.html.Tag
+import kotlinx.html.TagConsumer
+import materialui.Container
+import materialui.components.StandardProps
+import materialui.components.container.enums.ContainerMaxWidth
+import materialui.components.container.enums.ContainerStyle
+import react.RBuilder
+
+external interface ContainerProps : StandardProps {
+ var disableGutters: Boolean?
+ var fixed: Boolean?
+ var maxWidth: ContainerMaxWidth?
+}
+
+fun RBuilder.container(vararg classMap: Pair, block: ContainerElementBuilder.() -> Unit) =
+ child(ContainerElementBuilder(Container, classMap.toList()) { DIV(mapOf(), it) }.apply(block).create())
+
+fun RBuilder.container(vararg classMap: Pair