From 36214aeba53ec087d407dadb602a4def00713b4f Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Tue, 15 Nov 2022 21:46:29 +0600 Subject: [PATCH 1/5] start 0.4.1 --- CHANGELOG.md | 2 ++ gradle.properties | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d3d8dc1..d69d984 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,7 @@ # Changelog +## 0.4.1 + ## 0.4.0 * `Kotlin`: `1.7.20` diff --git a/gradle.properties b/gradle.properties index acb5b2f..68a26ec 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,4 +9,4 @@ android.enableJetifier=true # Project data group=dev.inmo -version=0.4.0 +version=0.4.1 From 17ae0b119b353a5b1fdfe4418388ccd9898d0da8 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Tue, 15 Nov 2022 21:50:15 +0600 Subject: [PATCH 2/5] StandardInput improvements --- CHANGELOG.md | 2 ++ .../inmo/jsuikit/elements/StandardInput.kt | 34 ++++++++++++++----- 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d69d984..218050d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ## 0.4.1 +* Now it is possible to use `StandardInput` with simple `T` types instead of states + ## 0.4.0 * `Kotlin`: `1.7.20` diff --git a/src/jsMain/kotlin/dev/inmo/jsuikit/elements/StandardInput.kt b/src/jsMain/kotlin/dev/inmo/jsuikit/elements/StandardInput.kt index f5d5dd4..20d5965 100644 --- a/src/jsMain/kotlin/dev/inmo/jsuikit/elements/StandardInput.kt +++ b/src/jsMain/kotlin/dev/inmo/jsuikit/elements/StandardInput.kt @@ -11,11 +11,12 @@ import org.w3c.dom.HTMLInputElement @Composable fun StandardInput( type: InputType, - state: MutableState, - disabledState: State? = null, + value: T, + disabled: Boolean = false, placeholder: String? = null, vararg modifiers: UIKitModifier, attributesCustomizer: AttrBuilderContext = {}, + onChange: (T) -> Unit ) { Input(type) { classes("uk-input") @@ -23,7 +24,7 @@ fun StandardInput( placeholder ?.let(::placeholder) - state.value.let { + value.let { when (it) { is String -> value(it) is Number -> value(it) @@ -31,13 +32,30 @@ fun StandardInput( } } - onInput { state.value = it.value } + onInput { onChange(it.value) } - disabledState ?.let { - if (it.value) { - disabled() - } + if (disabled) { + disabled() } attributesCustomizer() } } + +@Composable +fun StandardInput( + type: InputType, + state: MutableState, + disabledState: State? = null, + placeholder: String? = null, + vararg modifiers: UIKitModifier, + attributesCustomizer: AttrBuilderContext = {}, +) = StandardInput( + type, + state.value, + disabledState ?.value == true, + placeholder, + modifiers = modifiers, + attributesCustomizer = attributesCustomizer +) { + state.value = it +} From 0c281aa6534fab7329c1a4f968ef6ce5139ce9ad Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Wed, 16 Nov 2022 00:17:03 +0600 Subject: [PATCH 3/5] fixes for build --- .../kotlin/dev/inmo/jsuikit/elements/Icon.kt | 110 +++++++++--------- .../inmo/jsuikit/elements/StandardInput.kt | 4 +- 2 files changed, 58 insertions(+), 56 deletions(-) diff --git a/src/jsMain/kotlin/dev/inmo/jsuikit/elements/Icon.kt b/src/jsMain/kotlin/dev/inmo/jsuikit/elements/Icon.kt index 945e8bb..bde17ba 100644 --- a/src/jsMain/kotlin/dev/inmo/jsuikit/elements/Icon.kt +++ b/src/jsMain/kotlin/dev/inmo/jsuikit/elements/Icon.kt @@ -202,60 +202,62 @@ sealed class Icon(val name: String) { object Youtube : Brands("youtube") } - @Composable - operator fun invoke( - vararg modifiers: UIKitModifier, - type: UIKitIconType = UIKitIconType.Default, - ratio: Float? = null, - attributesCustomizer: AttrBuilderContext = {}, - onClick: ((Event) -> Unit)? = null - ) { - val configurer: AttrBuilderContext = { - include(*modifiers, type, UIKitIcon) - attr("uk-icon", "icon: $name${if (ratio != null) { "; ratio: $ratio" } else ""}") - onClick ?.let { _ -> - onClick { onClick(it.nativeEvent) } - } - attributesCustomizer() - } - when (type) { - UIKitIconType.Default -> Span(configurer) - UIKitIconType.Link -> A(href = "#", configurer) - UIKitIconType.Button -> Button(configurer) - } - } - class Custom(name: String) : Icon(name) - @Composable - fun drawAsButton( - vararg modifiers: UIKitModifier, - ratio: Float? = null, - attributesCustomizer: AttrBuilderContext = {}, - onClick: ((Event) -> Unit)? = null - ) = invoke(*modifiers, type = UIKitIconType.Button, ratio = ratio, onClick = onClick, attributesCustomizer = attributesCustomizer) - - @Composable - fun drawAsIcon( - vararg modifiers: UIKitModifier, - ratio: Float? = null, - attributesCustomizer: AttrBuilderContext = {}, - onClick: ((Event) -> Unit)? = null - ) = invoke(*modifiers, type = UIKitIconType.Default, ratio = ratio, onClick = onClick, attributesCustomizer = attributesCustomizer) - - @Composable - fun drawAsLink( - vararg modifiers: UIKitModifier, - ratio: Float? = null, - attributesCustomizer: AttrBuilderContext = {}, - onClick: ((Event) -> Unit)? = null - ) = invoke(*modifiers, type = UIKitIconType.Link, ratio = ratio, onClick = onClick, attributesCustomizer = attributesCustomizer) - - @Composable - fun drawAsFormInputPart( - vararg modifiers: UIKitModifier, - ratio: Float? = null, - attributesCustomizer: AttrBuilderContext = {}, - onClick: ((Event) -> Unit)? = null - ) = invoke(*modifiers, UIKitForm.Icon, ratio = ratio, onClick = onClick, attributesCustomizer = attributesCustomizer) + companion object { + } } +@Composable +operator fun Icon.invoke( + vararg modifiers: UIKitModifier, + type: UIKitIconType = UIKitIconType.Default, + ratio: Float? = null, + attributesCustomizer: AttrBuilderContext = {}, + onClick: ((Event) -> Unit)? = null +) { + val configurer: AttrBuilderContext = { + include(*modifiers, type, UIKitIcon) + attr("uk-icon", "icon: $name${if (ratio != null) { "; ratio: $ratio" } else ""}") + onClick ?.let { _ -> + onClick { onClick(it.nativeEvent) } + } + attributesCustomizer() + } + when (type) { + UIKitIconType.Default -> Span(configurer) + UIKitIconType.Link -> A(href = "#", configurer) + UIKitIconType.Button -> Button(configurer) + } +} + +@Composable +fun Icon.drawAsButton( + vararg modifiers: UIKitModifier, + ratio: Float? = null, + attributesCustomizer: AttrBuilderContext = {}, + onClick: ((Event) -> Unit)? = null +) = invoke(*modifiers, type = UIKitIconType.Button, ratio = ratio, onClick = onClick, attributesCustomizer = attributesCustomizer) + +@Composable +fun Icon.drawAsIcon( + vararg modifiers: UIKitModifier, + ratio: Float? = null, + attributesCustomizer: AttrBuilderContext = {}, + onClick: ((Event) -> Unit)? = null +) = invoke(*modifiers, type = UIKitIconType.Default, ratio = ratio, onClick = onClick, attributesCustomizer = attributesCustomizer) + +@Composable +fun Icon.drawAsLink( + vararg modifiers: UIKitModifier, + ratio: Float? = null, + attributesCustomizer: AttrBuilderContext = {}, + onClick: ((Event) -> Unit)? = null +) = invoke(*modifiers, type = UIKitIconType.Link, ratio = ratio, onClick = onClick, attributesCustomizer = attributesCustomizer) + +@Composable +fun Icon.drawAsFormInputPart( + vararg modifiers: UIKitModifier, + ratio: Float? = null, + attributesCustomizer: AttrBuilderContext = {}, + onClick: ((Event) -> Unit)? = null +) = invoke(*modifiers, UIKitForm.Icon, ratio = ratio, onClick = onClick, attributesCustomizer = attributesCustomizer) diff --git a/src/jsMain/kotlin/dev/inmo/jsuikit/elements/StandardInput.kt b/src/jsMain/kotlin/dev/inmo/jsuikit/elements/StandardInput.kt index 20d5965..dab38d2 100644 --- a/src/jsMain/kotlin/dev/inmo/jsuikit/elements/StandardInput.kt +++ b/src/jsMain/kotlin/dev/inmo/jsuikit/elements/StandardInput.kt @@ -9,7 +9,7 @@ import org.jetbrains.compose.web.dom.Input import org.w3c.dom.HTMLInputElement @Composable -fun StandardInput( +fun DefaultInput( type: InputType, value: T, disabled: Boolean = false, @@ -49,7 +49,7 @@ fun StandardInput( placeholder: String? = null, vararg modifiers: UIKitModifier, attributesCustomizer: AttrBuilderContext = {}, -) = StandardInput( +) = DefaultInput( type, state.value, disabledState ?.value == true, From eefdb5fda1429d698d54128a1b909b14f9d30a41 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Wed, 16 Nov 2022 00:45:10 +0600 Subject: [PATCH 4/5] list may accept any iterable --- src/jsMain/kotlin/dev/inmo/jsuikit/elements/List.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/jsMain/kotlin/dev/inmo/jsuikit/elements/List.kt b/src/jsMain/kotlin/dev/inmo/jsuikit/elements/List.kt index d9dd2af..913e208 100644 --- a/src/jsMain/kotlin/dev/inmo/jsuikit/elements/List.kt +++ b/src/jsMain/kotlin/dev/inmo/jsuikit/elements/List.kt @@ -10,7 +10,7 @@ import org.w3c.dom.HTMLUListElement @Composable fun List( - data: SnapshotStateList, + data: Iterable, ukAttrs: Attrs = Attrs.empty(), elementAllocator: @Composable ElementScope.(T) -> Unit ) { @@ -29,7 +29,7 @@ fun List( @Composable fun ListWithTitle( title: String, - data: SnapshotStateList, + data: Iterable, vararg titleModifiers: UIKitModifier, ulModifiers: Array = emptyArray(), besidesTitleAndList: (@Composable () -> Unit)? = null, From 0d55505e0974b607c7010a02d824332c46b73d6c Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Wed, 16 Nov 2022 00:57:11 +0600 Subject: [PATCH 5/5] fill changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 218050d..d49061b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ## 0.4.1 * Now it is possible to use `StandardInput` with simple `T` types instead of states +* `List` may accept any `Iterable` ## 0.4.0