mirror of
https://github.com/InsanusMokrassar/JSUIKitKBindings.git
synced 2025-12-04 21:35:40 +00:00
Compare commits
20 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 461b1e845c | |||
| a7f8c6f068 | |||
| 6309656fac | |||
| 0beda0b6ef | |||
| ccf1daa2b5 | |||
| 4a70299db8 | |||
| e1498ddf0f | |||
| 6213ef9212 | |||
| 951a51a057 | |||
| 8aaa83f57d | |||
| a70256cdaf | |||
| 6c5dbdba87 | |||
| a68b4c7d8e | |||
| 2d7d93210a | |||
| 1c0d95112b | |||
| c2ef2b1962 | |||
| 8b53002e2c | |||
| b1decca389 | |||
| acc6d5dbe7 | |||
| 00b1959aba |
20
CHANGELOG.md
20
CHANGELOG.md
@@ -1,3 +1,23 @@
|
||||
## 0.0.6
|
||||
|
||||
Changes in signatures of text field and list
|
||||
|
||||
## 0.0.5
|
||||
|
||||
All elements has changed their signatures: they all will accept an additional lambda for attributes configuration
|
||||
|
||||
## 0.0.4
|
||||
|
||||
__Migrate modifers to modifiers__
|
||||
|
||||
## 0.0.3
|
||||
|
||||
__Global changes in packages__
|
||||
|
||||
## 0.0.2
|
||||
|
||||
* Name of project has been changed: `jsuikitkotlin` -> `kjsuikit`
|
||||
|
||||
## 0.0.1
|
||||
|
||||
It is first version. Here project has been created and added a lot of implementations of elements
|
||||
|
||||
@@ -10,6 +10,7 @@ buildscript {
|
||||
classpath libs.buildscript.kt.gradle
|
||||
classpath libs.buildscript.kt.serialization
|
||||
classpath libs.buildscript.jb.dokka
|
||||
classpath libs.buildscript.gh.release
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ if (new File(projectDir, "secret.gradle").exists()) {
|
||||
token "${project.property('GITHUB_RELEASE_TOKEN')}"
|
||||
|
||||
owner "InsanusMokrassar"
|
||||
repo "JSUIKitBindings"
|
||||
repo "JSUIKitKBindings"
|
||||
|
||||
tagName "${project.version}"
|
||||
releaseName "${project.version}"
|
||||
|
||||
@@ -9,5 +9,4 @@ android.enableJetifier=true
|
||||
# Project data
|
||||
|
||||
group=dev.inmo
|
||||
version=0.0.1
|
||||
|
||||
version=0.0.6
|
||||
|
||||
@@ -14,6 +14,7 @@ kt-test-junit = { module = "org.jetbrains.kotlin:kotlin-test-junit", version.ref
|
||||
buildscript-kt-gradle = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kt" }
|
||||
buildscript-kt-serialization = { module = "org.jetbrains.kotlin:kotlin-serialization", version.ref = "kt" }
|
||||
buildscript-jb-dokka = { module = "org.jetbrains.dokka:dokka-gradle-plugin", version.ref = "jb-dokka" }
|
||||
buildscript-gh-release = { module = "com.github.breadmoirai:github-release", version.ref = "gh-release" }
|
||||
|
||||
[plugins]
|
||||
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
rootProject.name = 'jsuikitkotlin'
|
||||
rootProject.name = 'kjsuikit'
|
||||
|
||||
enableFeaturePreview("VERSION_CATALOGS")
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package dev.inmo.jsuikit.defaults
|
||||
package dev.inmo.jsuikit
|
||||
|
||||
import dev.inmo.jsuikit.defaults.modifers.AttributeValue
|
||||
import dev.inmo.jsuikit.modifiers.AttributeValue
|
||||
import org.jetbrains.compose.web.attributes.AttrsBuilder
|
||||
|
||||
class UIKitAttributeValueBuilder {
|
||||
@@ -1,23 +0,0 @@
|
||||
package dev.inmo.jsuikit.defaults
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import dev.inmo.jsuikit.defaults.modifers.UIKitModifier
|
||||
import dev.inmo.jsuikit.defaults.modifers.include
|
||||
import org.jetbrains.compose.web.dom.Div
|
||||
import org.jetbrains.compose.web.dom.ElementScope
|
||||
import org.w3c.dom.HTMLDivElement
|
||||
|
||||
@Composable
|
||||
fun Flex(
|
||||
vararg modifiers: UIKitModifier,
|
||||
filler: @Composable ElementScope<HTMLDivElement>.() -> Unit
|
||||
) {
|
||||
Div(
|
||||
{
|
||||
classes("uk-flex")
|
||||
include(*modifiers)
|
||||
}
|
||||
) {
|
||||
filler()
|
||||
}
|
||||
}
|
||||
@@ -1,22 +0,0 @@
|
||||
package dev.inmo.jsuikit.defaults
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import dev.inmo.jsuikit.defaults.modifers.UIKitModifier
|
||||
import dev.inmo.jsuikit.defaults.modifers.include
|
||||
import org.jetbrains.compose.web.dom.Progress
|
||||
|
||||
@Composable
|
||||
fun Progress(
|
||||
value: Int,
|
||||
vararg modifiers: UIKitModifier,
|
||||
max: Int = 100
|
||||
) {
|
||||
Progress(
|
||||
{
|
||||
classes("uk-progress")
|
||||
include(*modifiers)
|
||||
attr("max", max.toString())
|
||||
attr("value", value.toString())
|
||||
}
|
||||
)
|
||||
}
|
||||
@@ -1,22 +0,0 @@
|
||||
package dev.inmo.jsuikit.defaults
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import dev.inmo.jsuikit.defaults.modifers.*
|
||||
import org.jetbrains.compose.web.dom.Div
|
||||
|
||||
@Composable
|
||||
fun Spinner(
|
||||
vararg modifier: UIKitModifier,
|
||||
ratio: Float? = null
|
||||
) {
|
||||
Div(
|
||||
{
|
||||
attr("uk-spinner", ratio ?.let { "ratio: $it" } ?: "")
|
||||
classes("uk-icon", "uk-spinner")
|
||||
include(*modifier)
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun DefaultSpinner() = Spinner(UIKitAlign.Center, UIKitMargin.Small, UIKitText.Alignment.Center)
|
||||
@@ -1,4 +0,0 @@
|
||||
package dev.inmo.jsuikit.defaults.modifers
|
||||
|
||||
inline val UIKit
|
||||
get() = js("UIkit")
|
||||
@@ -1,3 +0,0 @@
|
||||
package dev.inmo.jsuikit.defaults.utils
|
||||
|
||||
typealias Milliseconds = Long
|
||||
@@ -1,20 +1,22 @@
|
||||
package dev.inmo.jsuikit.defaults
|
||||
package dev.inmo.jsuikit.elements
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.web.events.SyntheticMouseEvent
|
||||
import dev.inmo.jsuikit.defaults.modifers.*
|
||||
import dev.inmo.jsuikit.modifiers.*
|
||||
import org.jetbrains.compose.web.attributes.InputType
|
||||
import org.jetbrains.compose.web.attributes.disabled
|
||||
import org.jetbrains.compose.web.dom.*
|
||||
import org.w3c.dom.HTMLButtonElement
|
||||
import org.w3c.dom.HTMLDivElement
|
||||
import org.w3c.dom.events.Event
|
||||
|
||||
@Composable
|
||||
fun DefaultButton(
|
||||
vararg modifiers: UIKitModifier,
|
||||
modifiers: Array<UIKitModifier> = emptyArray(),
|
||||
disabled: Boolean = false,
|
||||
buttonType: UIKitButton.Type = UIKitButton.Type.Default,
|
||||
onClick: ((SyntheticMouseEvent) -> Unit)? = null,
|
||||
attributesCustomizer: AttrBuilderContext<HTMLButtonElement> = {},
|
||||
contentAllocator: ContentBuilder<HTMLButtonElement>
|
||||
) {
|
||||
Button(
|
||||
@@ -25,6 +27,7 @@ fun DefaultButton(
|
||||
if (disabled) {
|
||||
disabled()
|
||||
}
|
||||
attributesCustomizer()
|
||||
}
|
||||
) {
|
||||
contentAllocator()
|
||||
@@ -34,13 +37,14 @@ fun DefaultButton(
|
||||
@Composable
|
||||
fun DefaultButton(
|
||||
text: String,
|
||||
vararg modifiers: UIKitModifier,
|
||||
modifiers: Array<UIKitModifier> = emptyArray(),
|
||||
disabled: Boolean = false,
|
||||
buttonType: UIKitButton.Type = UIKitButton.Type.Default,
|
||||
preTextContentAllocator: ContentBuilder<HTMLButtonElement>? = null,
|
||||
afterTextContentAllocator: ContentBuilder<HTMLButtonElement>? = null,
|
||||
attributesCustomizer: AttrBuilderContext<HTMLButtonElement> = {},
|
||||
onClick: ((SyntheticMouseEvent) -> Unit)? = null
|
||||
) = DefaultButton(*modifiers, disabled = disabled, buttonType = buttonType, onClick = onClick) {
|
||||
) = DefaultButton(modifiers, disabled = disabled, buttonType = buttonType, onClick = onClick, attributesCustomizer = attributesCustomizer) {
|
||||
preTextContentAllocator ?.apply { preTextContentAllocator() }
|
||||
Text(text)
|
||||
afterTextContentAllocator ?.apply { afterTextContentAllocator() }
|
||||
@@ -49,10 +53,11 @@ fun DefaultButton(
|
||||
@Composable
|
||||
fun UploadButton(
|
||||
text: String,
|
||||
vararg buttonModifiers: UIKitModifier,
|
||||
buttonModifiers: Array<UIKitModifier> = emptyArray(),
|
||||
containerModifiers: Array<UIKitModifier> = emptyArray(),
|
||||
disabled: Boolean = false,
|
||||
buttonType: UIKitButton.Type = UIKitButton.Type.Default,
|
||||
attributesCustomizer: AttrBuilderContext<HTMLDivElement> = {},
|
||||
onChange: (Event) -> Unit
|
||||
) {
|
||||
Div(
|
||||
@@ -60,6 +65,7 @@ fun UploadButton(
|
||||
classes("js-upload", "uk-form-custom")
|
||||
attr("uk-form-custom", "")
|
||||
include(*containerModifiers)
|
||||
attributesCustomizer()
|
||||
}
|
||||
) {
|
||||
Input(InputType.File) { onChange { onChange(it.nativeEvent) } }
|
||||
@@ -1,11 +1,12 @@
|
||||
package dev.inmo.jsuikit.defaults
|
||||
package dev.inmo.jsuikit.elements
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.DisposableEffectResult
|
||||
import dev.inmo.jsuikit.defaults.modifers.UIKitModifier
|
||||
import dev.inmo.jsuikit.defaults.modifers.include
|
||||
import dev.inmo.jsuikit.modifiers.UIKitModifier
|
||||
import dev.inmo.jsuikit.modifiers.include
|
||||
import org.jetbrains.compose.web.dom.*
|
||||
import org.w3c.dom.HTMLElement
|
||||
import org.jetbrains.compose.web.dom.Text
|
||||
import org.w3c.dom.*
|
||||
import org.w3c.dom.events.Event
|
||||
import kotlin.random.Random
|
||||
import kotlin.random.nextUInt
|
||||
@@ -25,10 +26,11 @@ private class DialogDisposableEffectResult(
|
||||
@Composable
|
||||
fun Dialog(
|
||||
title: String? = null,
|
||||
vararg modifiers: UIKitModifier,
|
||||
modifiers: Array<UIKitModifier> = emptyArray(),
|
||||
hide: (() -> Unit)? = null,
|
||||
hidden: (() -> Unit)? = null,
|
||||
footerBuilder: (@Composable () -> Unit)? = null,
|
||||
attributesCustomizer: AttrBuilderContext<HTMLDivElement> = {},
|
||||
bodyBuilder: @Composable () -> Unit
|
||||
) {
|
||||
Div(
|
||||
@@ -37,6 +39,7 @@ fun Dialog(
|
||||
classes("uk-flex-top", "uk-modal")
|
||||
id("dialog${Random.nextUInt()}")
|
||||
include(*modifiers)
|
||||
attributesCustomizer()
|
||||
}
|
||||
) {
|
||||
Div(
|
||||
@@ -1,4 +1,4 @@
|
||||
package dev.inmo.jsuikit.defaults
|
||||
package dev.inmo.jsuikit.elements
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import org.jetbrains.compose.web.dom.Hr
|
||||
@@ -1,15 +1,15 @@
|
||||
package dev.inmo.jsuikit.defaults
|
||||
package dev.inmo.jsuikit.elements
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import dev.inmo.jsuikit.defaults.modifers.*
|
||||
import dev.inmo.jsuikit.defaults.utils.Milliseconds
|
||||
import org.jetbrains.compose.web.dom.ContentBuilder
|
||||
import org.jetbrains.compose.web.dom.Div
|
||||
import dev.inmo.jsuikit.buildAndAddAttribute
|
||||
import dev.inmo.jsuikit.modifiers.*
|
||||
import dev.inmo.jsuikit.utils.Milliseconds
|
||||
import org.jetbrains.compose.web.dom.*
|
||||
import org.w3c.dom.HTMLDivElement
|
||||
|
||||
@Composable
|
||||
fun Dropdown(
|
||||
vararg modifiers: UIKitModifier,
|
||||
modifiers: Array<UIKitModifier> = emptyArray(),
|
||||
toggle: String? = null,
|
||||
pos: UIKitDropdown.Position? = null,
|
||||
mode: UIKitDropdown.Mode? = null,
|
||||
@@ -21,6 +21,7 @@ fun Dropdown(
|
||||
offset: Int? = null,
|
||||
animation: UIKitAnimation? = null,
|
||||
duration: Milliseconds? = null,
|
||||
attributesCustomizer: AttrBuilderContext<HTMLDivElement> = {},
|
||||
contentBuilder: ContentBuilder<HTMLDivElement>
|
||||
) {
|
||||
Div(
|
||||
@@ -40,6 +41,7 @@ fun Dropdown(
|
||||
}
|
||||
classes("uk-dropdown")
|
||||
include(*modifiers)
|
||||
attributesCustomizer()
|
||||
},
|
||||
contentBuilder
|
||||
)
|
||||
24
src/main/kotlin/dev/inmo/jsuikit/elements/Flex.kt
Normal file
24
src/main/kotlin/dev/inmo/jsuikit/elements/Flex.kt
Normal file
@@ -0,0 +1,24 @@
|
||||
package dev.inmo.jsuikit.elements
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import dev.inmo.jsuikit.modifiers.UIKitModifier
|
||||
import dev.inmo.jsuikit.modifiers.include
|
||||
import org.jetbrains.compose.web.dom.*
|
||||
import org.w3c.dom.HTMLDivElement
|
||||
|
||||
@Composable
|
||||
fun Flex(
|
||||
modifiers: Array<UIKitModifier> = emptyArray(),
|
||||
attributesCustomizer: AttrBuilderContext<HTMLDivElement> = {},
|
||||
filler: @Composable ElementScope<HTMLDivElement>.() -> Unit
|
||||
) {
|
||||
Div(
|
||||
{
|
||||
classes("uk-flex")
|
||||
include(*modifiers)
|
||||
attributesCustomizer()
|
||||
}
|
||||
) {
|
||||
filler()
|
||||
}
|
||||
}
|
||||
@@ -1,20 +1,21 @@
|
||||
package dev.inmo.jsuikit.defaults
|
||||
package dev.inmo.jsuikit.elements
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import dev.inmo.jsuikit.defaults.modifers.UIKitModifier
|
||||
import dev.inmo.jsuikit.defaults.modifers.include
|
||||
import org.jetbrains.compose.web.dom.Div
|
||||
import org.jetbrains.compose.web.dom.ElementScope
|
||||
import dev.inmo.jsuikit.modifiers.UIKitModifier
|
||||
import dev.inmo.jsuikit.modifiers.include
|
||||
import org.jetbrains.compose.web.dom.*
|
||||
import org.w3c.dom.HTMLDivElement
|
||||
|
||||
@Composable
|
||||
fun GridColumn(
|
||||
vararg modifiers: UIKitModifier,
|
||||
modifiers: Array<UIKitModifier> = emptyArray(),
|
||||
attributesCustomizer: AttrBuilderContext<HTMLDivElement> = {},
|
||||
builder: @Composable ElementScope<HTMLDivElement>.() -> Unit
|
||||
) {
|
||||
Div(
|
||||
{
|
||||
include(*modifiers)
|
||||
attributesCustomizer()
|
||||
}
|
||||
) {
|
||||
builder()
|
||||
@@ -23,11 +24,12 @@ fun GridColumn(
|
||||
|
||||
@Composable
|
||||
fun Grid(
|
||||
vararg modifiers: UIKitModifier,
|
||||
modifiers: Array<UIKitModifier> = emptyArray(),
|
||||
masonry: Boolean = false,
|
||||
parallax: Int? = null,
|
||||
marginClass: String? = null,
|
||||
firstColumnClass: String? = null,
|
||||
attributesCustomizer: AttrBuilderContext<HTMLDivElement> = {},
|
||||
builder: @Composable ElementScope<HTMLDivElement>.() -> Unit
|
||||
) {
|
||||
val attrs = listOfNotNull(
|
||||
@@ -41,6 +43,7 @@ fun Grid(
|
||||
attr("uk-grid", attrs.joinToString(";") { (k, v) -> "$k: $v" })
|
||||
classes("uk-grid")
|
||||
include(*modifiers)
|
||||
attributesCustomizer()
|
||||
}
|
||||
) {
|
||||
builder()
|
||||
@@ -1,9 +1,9 @@
|
||||
package dev.inmo.jsuikit.defaults
|
||||
package dev.inmo.jsuikit.elements
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import dev.inmo.jsuikit.defaults.modifers.*
|
||||
import org.jetbrains.compose.web.dom.Button
|
||||
import org.jetbrains.compose.web.dom.Span
|
||||
import dev.inmo.jsuikit.modifiers.*
|
||||
import org.jetbrains.compose.web.dom.*
|
||||
import org.w3c.dom.*
|
||||
import org.w3c.dom.events.Event
|
||||
|
||||
sealed class Icon(val name: String) {
|
||||
@@ -204,47 +204,41 @@ sealed class Icon(val name: String) {
|
||||
|
||||
@Composable
|
||||
operator fun invoke(
|
||||
vararg modifier: UIKitModifier,
|
||||
modifiers: Array<UIKitModifier> = emptyArray(),
|
||||
type: UIKitIconType = UIKitIconType.Default,
|
||||
ratio: Float? = null,
|
||||
attributesCustomizer: AttrBuilderContext<out HTMLElement> = {},
|
||||
onClick: ((Event) -> Unit)? = null
|
||||
) {
|
||||
val configurer: AttrBuilderContext<out HTMLElement> = {
|
||||
classes("uk-icon")
|
||||
include(*modifiers, type)
|
||||
attr("uk-icon", "icon: $name${if (ratio != null) { "; ratio: $ratio" } else ""}")
|
||||
onClick ?.let { _ ->
|
||||
onClick { onClick(it.nativeEvent) }
|
||||
}
|
||||
attributesCustomizer()
|
||||
}
|
||||
if (type == UIKitIconType.Button) {
|
||||
Button(
|
||||
{
|
||||
classes("uk-icon")
|
||||
include(*modifier, type)
|
||||
attr("uk-icon", "icon: $name${if (ratio != null) { "; ratio: $ratio" } else ""}")
|
||||
onClick ?.let { _ ->
|
||||
onClick { onClick(it.nativeEvent) }
|
||||
}
|
||||
}
|
||||
)
|
||||
Button(configurer)
|
||||
} else {
|
||||
Span(
|
||||
{
|
||||
classes("uk-icon")
|
||||
include(*modifier, type)
|
||||
attr("uk-icon", "icon: $name${if (ratio != null) { "; ratio: $ratio" } else ""}")
|
||||
onClick ?.let { _ ->
|
||||
onClick { onClick(it.nativeEvent) }
|
||||
}
|
||||
}
|
||||
)
|
||||
Span(configurer)
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun drawAsButton(
|
||||
vararg modifier: UIKitModifier,
|
||||
modifiers: Array<UIKitModifier> = emptyArray(),
|
||||
ratio: Float? = null,
|
||||
attributesCustomizer: AttrBuilderContext<out HTMLElement> = {},
|
||||
onClick: ((Event) -> Unit)? = null
|
||||
) = invoke(*modifier, type = UIKitIconType.Button, ratio = ratio, onClick = onClick)
|
||||
) = invoke(modifiers, type = UIKitIconType.Button, ratio = ratio, onClick = onClick, attributesCustomizer = attributesCustomizer)
|
||||
|
||||
@Composable
|
||||
fun drawAsIcon(
|
||||
vararg modifier: UIKitModifier,
|
||||
modifiers: Array<UIKitModifier> = emptyArray(),
|
||||
ratio: Float? = null,
|
||||
attributesCustomizer: AttrBuilderContext<out HTMLElement> = {},
|
||||
onClick: ((Event) -> Unit)? = null
|
||||
) = invoke(*modifier, type = UIKitIconType.Default, ratio = ratio, onClick = onClick)
|
||||
) = invoke(modifiers, type = UIKitIconType.Default, ratio = ratio, onClick = onClick, attributesCustomizer = attributesCustomizer)
|
||||
}
|
||||
@@ -1,10 +1,10 @@
|
||||
package dev.inmo.jsuikit.defaults
|
||||
package dev.inmo.jsuikit.elements
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import dev.inmo.jsuikit.defaults.modifers.UIKitModifier
|
||||
import dev.inmo.jsuikit.defaults.modifers.include
|
||||
import org.jetbrains.compose.web.dom.Span
|
||||
import org.jetbrains.compose.web.dom.Text
|
||||
import dev.inmo.jsuikit.modifiers.UIKitModifier
|
||||
import dev.inmo.jsuikit.modifiers.include
|
||||
import org.jetbrains.compose.web.dom.*
|
||||
import org.w3c.dom.HTMLSpanElement
|
||||
|
||||
sealed interface Label {
|
||||
val suffix: String
|
||||
@@ -12,11 +12,13 @@ sealed interface Label {
|
||||
@Composable
|
||||
operator fun invoke(
|
||||
text: String,
|
||||
vararg modifiers: UIKitModifier
|
||||
modifiers: Array<UIKitModifier> = emptyArray(),
|
||||
attributesCustomizer: AttrBuilderContext<HTMLSpanElement> = {},
|
||||
) = Span(
|
||||
{
|
||||
classes("uk-label", "uk-label-$suffix")
|
||||
include(*modifiers)
|
||||
attributesCustomizer()
|
||||
}
|
||||
) {
|
||||
Text(text)
|
||||
@@ -1,10 +1,11 @@
|
||||
package dev.inmo.jsuikit.defaults
|
||||
package dev.inmo.jsuikit.elements
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.snapshots.SnapshotStateList
|
||||
import dev.inmo.jsuikit.defaults.modifers.UIKitModifier
|
||||
import dev.inmo.jsuikit.defaults.modifers.include
|
||||
import dev.inmo.jsuikit.modifiers.UIKitModifier
|
||||
import dev.inmo.jsuikit.modifiers.include
|
||||
import org.jetbrains.compose.web.dom.*
|
||||
import org.w3c.dom.HTMLHeadingElement
|
||||
import org.w3c.dom.HTMLUListElement
|
||||
|
||||
@Composable
|
||||
@@ -14,9 +15,11 @@ fun <T> List(
|
||||
titleModifiers: Array<UIKitModifier> = emptyArray(),
|
||||
ulModifiers: Array<UIKitModifier> = emptyArray(),
|
||||
besidesTitleAndList: (@Composable () -> Unit)? = null,
|
||||
titleCustomizer: AttrBuilderContext<HTMLHeadingElement> = {},
|
||||
ulCustomizer: AttrBuilderContext<HTMLUListElement> = {},
|
||||
elementAllocator: @Composable ElementScope<HTMLUListElement>.(T) -> Unit
|
||||
) {
|
||||
H4({ include(*titleModifiers) }) {
|
||||
H4({ include(*titleModifiers); titleCustomizer() }) {
|
||||
Text(title)
|
||||
}
|
||||
besidesTitleAndList ?.invoke()
|
||||
@@ -24,6 +27,7 @@ fun <T> List(
|
||||
{
|
||||
classes("uk-list")
|
||||
include(*ulModifiers)
|
||||
ulCustomizer()
|
||||
}
|
||||
) {
|
||||
data.forEach {
|
||||
@@ -1,19 +1,21 @@
|
||||
package dev.inmo.jsuikit.defaults
|
||||
package dev.inmo.jsuikit.elements
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import dev.inmo.jsuikit.defaults.modifers.*
|
||||
import dev.inmo.jsuikit.defaults.utils.Milliseconds
|
||||
import dev.inmo.jsuikit.buildAndAddAttribute
|
||||
import dev.inmo.jsuikit.modifiers.*
|
||||
import dev.inmo.jsuikit.utils.Milliseconds
|
||||
import org.jetbrains.compose.web.dom.*
|
||||
import org.w3c.dom.HTMLLIElement
|
||||
import org.w3c.dom.HTMLUListElement
|
||||
|
||||
@Composable
|
||||
fun Nav(
|
||||
vararg modifiers: UIKitModifier,
|
||||
modifiers: Array<UIKitModifier> = emptyArray(),
|
||||
multiple: Boolean? = null,
|
||||
collapsible: Boolean? = null,
|
||||
animation: UIKitAnimation? = null,
|
||||
duration: Milliseconds? = null,
|
||||
attributesCustomizer: AttrBuilderContext<HTMLUListElement> = {},
|
||||
dataAllocator: ContentBuilder<HTMLUListElement>
|
||||
) {
|
||||
Ul(
|
||||
@@ -26,6 +28,7 @@ fun Nav(
|
||||
}
|
||||
classes("uk-nav")
|
||||
include(*modifiers)
|
||||
attributesCustomizer()
|
||||
}
|
||||
) {
|
||||
dataAllocator()
|
||||
@@ -34,14 +37,14 @@ fun Nav(
|
||||
|
||||
@Composable
|
||||
fun NavElement(
|
||||
vararg modifiers: UIKitModifier,
|
||||
attributesAllocator: (AttrBuilderContext<HTMLLIElement>)? = null,
|
||||
modifiers: Array<UIKitModifier> = emptyArray(),
|
||||
attributesCustomizer: AttrBuilderContext<HTMLLIElement> = {},
|
||||
contentAllocator: ContentBuilder<HTMLLIElement>
|
||||
) {
|
||||
Li(
|
||||
{
|
||||
attributesAllocator ?.apply { attributesAllocator() }
|
||||
include(*modifiers)
|
||||
attributesCustomizer
|
||||
}
|
||||
) {
|
||||
contentAllocator()
|
||||
@@ -1,23 +1,25 @@
|
||||
package dev.inmo.jsuikit.defaults
|
||||
package dev.inmo.jsuikit.elements
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import dev.inmo.jsuikit.defaults.modifers.UIKitModifier
|
||||
import dev.inmo.jsuikit.defaults.modifers.include
|
||||
import org.jetbrains.compose.web.dom.Div
|
||||
import org.jetbrains.compose.web.dom.Nav
|
||||
import dev.inmo.jsuikit.modifiers.UIKitModifier
|
||||
import dev.inmo.jsuikit.modifiers.include
|
||||
import org.jetbrains.compose.web.dom.*
|
||||
import org.w3c.dom.HTMLElement
|
||||
|
||||
@Composable
|
||||
fun Navbar(
|
||||
vararg navModifiers: UIKitModifier,
|
||||
leftBuilder: NavbarNavBuilder? = null,
|
||||
centerBuilder: NavbarNavBuilder? = null,
|
||||
rightBuilder: NavbarNavBuilder? = null,
|
||||
navModifiers: Array<UIKitModifier> = emptyArray(),
|
||||
attributesCustomizer: AttrBuilderContext<HTMLElement> = {},
|
||||
) {
|
||||
Nav(
|
||||
{
|
||||
attr("uk-navbar", "")
|
||||
classes("uk-navbar-container", "uk-navbar")
|
||||
include(*navModifiers)
|
||||
attributesCustomizer()
|
||||
}
|
||||
) {
|
||||
leftBuilder ?.let {
|
||||
@@ -1,11 +1,12 @@
|
||||
package dev.inmo.jsuikit.defaults
|
||||
package dev.inmo.jsuikit.elements
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import dev.inmo.jsuikit.defaults.modifers.UIKitModifier
|
||||
import dev.inmo.jsuikit.defaults.modifers.include
|
||||
import dev.inmo.jsuikit.modifiers.UIKitModifier
|
||||
import dev.inmo.jsuikit.modifiers.include
|
||||
import org.jetbrains.compose.web.attributes.AttrsBuilder
|
||||
import org.jetbrains.compose.web.dom.*
|
||||
import org.w3c.dom.HTMLLIElement
|
||||
import org.w3c.dom.HTMLUListElement
|
||||
|
||||
interface NavbarNavElement {
|
||||
fun AttrsBuilder<HTMLLIElement>.setup() {}
|
||||
@@ -29,21 +30,25 @@ interface NavbarNavElement {
|
||||
|
||||
class NavbarNavBuilder(
|
||||
private val modifiers: Array<UIKitModifier>,
|
||||
private val elements: List<NavbarNavElement>
|
||||
private val elements: List<NavbarNavElement>,
|
||||
private val attributesCustomizer: AttrBuilderContext<HTMLUListElement> = {}
|
||||
) {
|
||||
constructor(
|
||||
modifiers: Array<UIKitModifier>,
|
||||
vararg elements: NavbarNavElement
|
||||
) : this(modifiers, elements.toList())
|
||||
vararg elements: NavbarNavElement,
|
||||
attributesCustomizer: AttrBuilderContext<HTMLUListElement> = {}
|
||||
) : this(modifiers, elements.toList(), attributesCustomizer)
|
||||
constructor(
|
||||
vararg elements: NavbarNavElement
|
||||
) : this(emptyArray(), elements.toList())
|
||||
vararg elements: NavbarNavElement,
|
||||
attributesCustomizer: AttrBuilderContext<HTMLUListElement> = {}
|
||||
) : this(emptyArray(), elements.toList(), attributesCustomizer)
|
||||
@Composable
|
||||
fun draw() {
|
||||
Ul(
|
||||
{
|
||||
classes("uk-navbar-nav")
|
||||
include(*modifiers)
|
||||
attributesCustomizer()
|
||||
}
|
||||
) {
|
||||
elements.forEach { element ->
|
||||
26
src/main/kotlin/dev/inmo/jsuikit/elements/Progress.kt
Normal file
26
src/main/kotlin/dev/inmo/jsuikit/elements/Progress.kt
Normal file
@@ -0,0 +1,26 @@
|
||||
package dev.inmo.jsuikit.elements
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import dev.inmo.jsuikit.modifiers.UIKitModifier
|
||||
import dev.inmo.jsuikit.modifiers.include
|
||||
import org.jetbrains.compose.web.dom.AttrBuilderContext
|
||||
import org.jetbrains.compose.web.dom.Progress
|
||||
import org.w3c.dom.HTMLProgressElement
|
||||
|
||||
@Composable
|
||||
fun Progress(
|
||||
value: Int,
|
||||
modifiers: Array<UIKitModifier> = emptyArray(),
|
||||
max: Int = 100,
|
||||
attributesCustomizer: AttrBuilderContext<HTMLProgressElement> = {}
|
||||
) {
|
||||
Progress(
|
||||
{
|
||||
classes("uk-progress")
|
||||
include(*modifiers)
|
||||
attr("max", max.toString())
|
||||
attr("value", value.toString())
|
||||
attributesCustomizer()
|
||||
}
|
||||
)
|
||||
}
|
||||
28
src/main/kotlin/dev/inmo/jsuikit/elements/Spinner.kt
Normal file
28
src/main/kotlin/dev/inmo/jsuikit/elements/Spinner.kt
Normal file
@@ -0,0 +1,28 @@
|
||||
package dev.inmo.jsuikit.elements
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import dev.inmo.jsuikit.modifiers.*
|
||||
import org.jetbrains.compose.web.dom.AttrBuilderContext
|
||||
import org.jetbrains.compose.web.dom.Div
|
||||
import org.w3c.dom.HTMLDivElement
|
||||
|
||||
@Composable
|
||||
fun Spinner(
|
||||
modifiers: Array<UIKitModifier> = emptyArray(),
|
||||
ratio: Float? = null,
|
||||
attributesCustomizer: AttrBuilderContext<HTMLDivElement> = {}
|
||||
) {
|
||||
Div(
|
||||
{
|
||||
attr("uk-spinner", ratio ?.let { "ratio: $it" } ?: "")
|
||||
classes("uk-icon", "uk-spinner")
|
||||
include(*modifiers)
|
||||
attributesCustomizer()
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun DefaultSpinner() = Spinner(
|
||||
arrayOf(UIKitAlign.Center, UIKitMargin.Small, UIKitText.Alignment.Center)
|
||||
)
|
||||
@@ -1,15 +1,18 @@
|
||||
package dev.inmo.jsuikit.defaults
|
||||
package dev.inmo.jsuikit.elements
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.snapshots.SnapshotStateList
|
||||
import dev.inmo.jsuikit.defaults.modifers.*
|
||||
import dev.inmo.jsuikit.modifiers.*
|
||||
import org.jetbrains.compose.web.dom.*
|
||||
import org.w3c.dom.HTMLProgressElement
|
||||
import org.w3c.dom.HTMLTableElement
|
||||
|
||||
@Composable
|
||||
fun <T> DefaultTable(
|
||||
heading: List<String>,
|
||||
dataList: SnapshotStateList<T>,
|
||||
vararg tableModifiers: UIKitModifier,
|
||||
tableModifiers: Array<UIKitModifier> = emptyArray(),
|
||||
attributesCustomizer: AttrBuilderContext<HTMLTableElement> = {},
|
||||
cellFiller: @Composable (i: Int, t: T) -> Unit
|
||||
) {
|
||||
val headingIndexes = heading.indices
|
||||
@@ -17,6 +20,7 @@ fun <T> DefaultTable(
|
||||
{
|
||||
classes("uk-table")
|
||||
include(*tableModifiers)
|
||||
attributesCustomizer()
|
||||
}
|
||||
) {
|
||||
Thead {
|
||||
@@ -1,10 +1,12 @@
|
||||
package dev.inmo.jsuikit.defaults
|
||||
package dev.inmo.jsuikit.elements
|
||||
|
||||
import androidx.compose.runtime.*
|
||||
import dev.inmo.jsuikit.defaults.modifers.UIKitModifier
|
||||
import dev.inmo.jsuikit.defaults.modifers.include
|
||||
import dev.inmo.jsuikit.modifiers.UIKitModifier
|
||||
import dev.inmo.jsuikit.modifiers.include
|
||||
import org.jetbrains.compose.web.attributes.*
|
||||
import org.jetbrains.compose.web.dom.AttrBuilderContext
|
||||
import org.jetbrains.compose.web.dom.Input
|
||||
import org.w3c.dom.HTMLInputElement
|
||||
|
||||
@Composable
|
||||
fun <T> TextField(
|
||||
@@ -12,7 +14,8 @@ fun <T> TextField(
|
||||
state: MutableState<T>,
|
||||
disabledState: State<Boolean>? = null,
|
||||
placeholder: String? = null,
|
||||
vararg modifiers: UIKitModifier
|
||||
modifiers: Array<UIKitModifier> = emptyArray(),
|
||||
attributesCustomizer: AttrBuilderContext<HTMLInputElement> = {},
|
||||
) {
|
||||
Input(type) {
|
||||
classes("uk-input")
|
||||
@@ -26,5 +29,6 @@ fun <T> TextField(
|
||||
disabled()
|
||||
}
|
||||
}
|
||||
attributesCustomizer()
|
||||
}
|
||||
}
|
||||
@@ -1,3 +1,3 @@
|
||||
package dev.inmo.jsuikit.defaults.modifers
|
||||
package dev.inmo.jsuikit.modifiers
|
||||
|
||||
sealed class AttributeValue(val name: String)
|
||||
4
src/main/kotlin/dev/inmo/jsuikit/modifiers/UIKit.kt
Normal file
4
src/main/kotlin/dev/inmo/jsuikit/modifiers/UIKit.kt
Normal file
@@ -0,0 +1,4 @@
|
||||
package dev.inmo.jsuikit.modifiers
|
||||
|
||||
inline val UIKit
|
||||
get() = js("UIkit")
|
||||
@@ -1,4 +1,4 @@
|
||||
package dev.inmo.jsuikit.defaults.modifers
|
||||
package dev.inmo.jsuikit.modifiers
|
||||
|
||||
sealed class UIKitAlign(classnameSuffix: String) : UIKitModifier {
|
||||
override val classes: Array<String> = arrayOf("uk-align-$classnameSuffix")
|
||||
@@ -1,4 +1,4 @@
|
||||
package dev.inmo.jsuikit.defaults.modifers
|
||||
package dev.inmo.jsuikit.modifiers
|
||||
|
||||
sealed class UIKitAnimation (name: String) : UIKitModifier, AttributeValue(name) {
|
||||
override val classes: Array<String> = arrayOf("uk-animation-$name")
|
||||
@@ -1,4 +1,4 @@
|
||||
package dev.inmo.jsuikit.defaults.modifers
|
||||
package dev.inmo.jsuikit.modifiers
|
||||
|
||||
sealed class UIKitBackground(suffix: String) : UIKitModifier {
|
||||
override val classes: Array<String> = arrayOf("uk-background-$suffix")
|
||||
@@ -1,4 +1,4 @@
|
||||
package dev.inmo.jsuikit.defaults.modifers
|
||||
package dev.inmo.jsuikit.modifiers
|
||||
|
||||
sealed class UIKitButton(suffix: String) : UIKitModifier {
|
||||
override val classes: Array<String> = arrayOf("uk-button-$suffix")
|
||||
@@ -1,4 +1,4 @@
|
||||
package dev.inmo.jsuikit.defaults.modifers
|
||||
package dev.inmo.jsuikit.modifiers
|
||||
|
||||
sealed class UIKitDropdown(classname: String) : UIKitModifier {
|
||||
override val classes: Array<String> = arrayOf(classname)
|
||||
@@ -1,4 +1,4 @@
|
||||
package dev.inmo.jsuikit.defaults.modifers
|
||||
package dev.inmo.jsuikit.modifiers
|
||||
|
||||
sealed class UIKitExtension(classname: String) : UIKitModifier {
|
||||
override val classes: Array<String> = arrayOf(classname)
|
||||
@@ -1,4 +1,4 @@
|
||||
package dev.inmo.jsuikit.defaults.modifers
|
||||
package dev.inmo.jsuikit.modifiers
|
||||
|
||||
sealed class UIKitFlex(suffix: String) : UIKitModifier {
|
||||
override val classes: Array<String> = arrayOf("uk-flex-$suffix")
|
||||
@@ -1,4 +1,4 @@
|
||||
package dev.inmo.jsuikit.defaults.modifers
|
||||
package dev.inmo.jsuikit.modifiers
|
||||
|
||||
sealed class UIKitGrid(suffix: String) : UIKitModifier {
|
||||
override val classes: Array<String> = arrayOf("uk-grid-$suffix")
|
||||
@@ -1,4 +1,4 @@
|
||||
package dev.inmo.jsuikit.defaults.modifers
|
||||
package dev.inmo.jsuikit.modifiers
|
||||
|
||||
sealed class UIKitIconType(suffix: String?) : UIKitModifier {
|
||||
override val classes: Array<String> = suffix ?.let {
|
||||
@@ -1,4 +1,4 @@
|
||||
package dev.inmo.jsuikit.defaults.modifers
|
||||
package dev.inmo.jsuikit.modifiers
|
||||
|
||||
sealed class UIKitMargin(val classname: String) : UIKitModifier {
|
||||
override val classes: Array<String> = arrayOf(classname)
|
||||
@@ -1,4 +1,4 @@
|
||||
package dev.inmo.jsuikit.defaults.modifers
|
||||
package dev.inmo.jsuikit.modifiers
|
||||
|
||||
import org.jetbrains.compose.web.attributes.AttrsBuilder
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package dev.inmo.jsuikit.defaults.modifers
|
||||
package dev.inmo.jsuikit.modifiers
|
||||
|
||||
sealed class UIKitNav(classname: String) : UIKitModifier {
|
||||
override val classes: Array<String> = arrayOf(classname)
|
||||
@@ -1,4 +1,4 @@
|
||||
package dev.inmo.jsuikit.defaults.modifers
|
||||
package dev.inmo.jsuikit.modifiers
|
||||
|
||||
sealed class UIKitNavbar(suffix: String) : UIKitModifier {
|
||||
override val classes: Array<String> = arrayOf("uk-navbar-$suffix")
|
||||
@@ -1,4 +1,4 @@
|
||||
package dev.inmo.jsuikit.defaults.modifers
|
||||
package dev.inmo.jsuikit.modifiers
|
||||
|
||||
sealed class UIKitPadding(suffix: String?) : UIKitModifier {
|
||||
override val classes: Array<String> = arrayOf("uk-padding${suffix ?.let { "-$it" } ?: ""}")
|
||||
@@ -1,4 +1,4 @@
|
||||
package dev.inmo.jsuikit.defaults.modifers
|
||||
package dev.inmo.jsuikit.modifiers
|
||||
|
||||
sealed class UIKitPosition(classname: String) : UIKitModifier {
|
||||
override val classes: Array<String> = arrayOf(classname)
|
||||
@@ -1,4 +1,4 @@
|
||||
package dev.inmo.jsuikit.defaults.modifers
|
||||
package dev.inmo.jsuikit.modifiers
|
||||
|
||||
sealed class UIKitScreenSizeModifier(val name: String) {
|
||||
class UIKitScreenSizeModifierModified (
|
||||
@@ -1,4 +1,4 @@
|
||||
package dev.inmo.jsuikit.defaults.modifers
|
||||
package dev.inmo.jsuikit.modifiers
|
||||
|
||||
sealed class UIKitTable(suffix: String) : UIKitModifier {
|
||||
override val classes: Array<String> = arrayOf("uk-table-$suffix")
|
||||
@@ -1,4 +1,4 @@
|
||||
package dev.inmo.jsuikit.defaults.modifers
|
||||
package dev.inmo.jsuikit.modifiers
|
||||
|
||||
sealed class UIKitText(suffix: String) : UIKitModifier {
|
||||
override val classes: Array<String> = arrayOf("uk-text-$suffix")
|
||||
@@ -1,4 +1,4 @@
|
||||
package dev.inmo.jsuikit.defaults.modifers
|
||||
package dev.inmo.jsuikit.modifiers
|
||||
|
||||
class UIKitTooltipModifier(
|
||||
text: String,
|
||||
@@ -1,4 +1,4 @@
|
||||
package dev.inmo.jsuikit.defaults.modifers
|
||||
package dev.inmo.jsuikit.modifiers
|
||||
|
||||
sealed class UIKitUtility(classname: String) : UIKitModifier {
|
||||
override val classes: Array<String> = arrayOf(classname)
|
||||
@@ -1,4 +1,4 @@
|
||||
package dev.inmo.jsuikit.defaults.modifers
|
||||
package dev.inmo.jsuikit.modifiers
|
||||
|
||||
sealed class UIKitWidth(classname: String) : UIKitModifier {
|
||||
override val classes: Array<String> = arrayOf("uk-width-$classname")
|
||||
3
src/main/kotlin/dev/inmo/jsuikit/utils/Milliseconds.kt
Normal file
3
src/main/kotlin/dev/inmo/jsuikit/utils/Milliseconds.kt
Normal file
@@ -0,0 +1,3 @@
|
||||
package dev.inmo.jsuikit.utils
|
||||
|
||||
typealias Milliseconds = Long
|
||||
Reference in New Issue
Block a user