Compare commits

..

32 Commits

Author SHA1 Message Date
9449eccec1 headingCustomizer -> headerCellCustomizer + add index and title parameters for it 2022-01-25 00:02:29 +06:00
f518933195 start 0.0.17 2022-01-25 00:00:42 +06:00
23f3ecb0d4 Merge pull request #16 from InsanusMokrassar/0.0.16
0.0.16
2022-01-24 21:46:41 +06:00
c6023d3075 add opportunity to customize NavDivider 2022-01-24 21:39:47 +06:00
7b72f99f66 start 0.0.16 2022-01-24 21:39:40 +06:00
66c3f97f65 Merge pull request #15 from InsanusMokrassar/0.0.15
0.0.15
2022-01-21 22:41:49 +06:00
40c3c0f437 add support of link icons type 2022-01-21 22:41:26 +06:00
e46b2e0ddd start 0.0.15 2022-01-21 22:41:18 +06:00
2db4e48571 Merge pull request #14 from InsanusMokrassar/0.0.14
0.0.14
2022-01-21 22:20:16 +06:00
e13a2fd241 add DefaultTable parameter cellAttributes 2022-01-21 22:20:02 +06:00
b3b19ed2b7 start 0.0.14 2022-01-21 22:16:03 +06:00
d590762d28 Merge pull request #13 from InsanusMokrassar/0.0.13
0.0.13
2022-01-21 21:37:39 +06:00
65703d1c22 add Icon#Custom 2022-01-21 21:37:16 +06:00
814045a43f start 0.0.13 2022-01-21 21:37:07 +06:00
1f36657857 Merge pull request #12 from InsanusMokrassar/0.0.12
0.0.12
2022-01-21 20:29:00 +06:00
a2830e5e85 add rowAttributes customizer for tables 2022-01-21 20:28:19 +06:00
484564e323 start 0.0.12 2022-01-21 20:27:31 +06:00
b5e93bc829 Merge pull request #11 from InsanusMokrassar/0.0.11
0.0.11
2022-01-21 11:32:00 +06:00
4282165d79 upfill navs 2022-01-21 11:31:00 +06:00
1e452c78d1 start 0.0.11 2022-01-21 11:30:47 +06:00
5fa388c169 Merge pull request #10 from InsanusMokrassar/0.0.10
0.0.10
2022-01-21 10:57:06 +06:00
763e1fa5ac upfill utilities 2022-01-21 10:55:14 +06:00
150efa1719 start 0.0.10 2022-01-21 10:55:01 +06:00
20bf43b8a1 Merge pull request #9 from InsanusMokrassar/0.0.9
0.0.9
2022-01-20 20:06:36 +06:00
93dd63c6b1 nav support improving 2022-01-20 19:56:46 +06:00
eb06ff80a1 start 0.0.9 2022-01-20 19:46:30 +06:00
25ba9188e3 Update README.md 2022-01-14 23:32:06 +06:00
19ca960b35 Update README.md 2022-01-14 00:45:09 +06:00
ef3b711e2b Merge pull request #8 from InsanusMokrassar/0.0.8
0.0.8
2022-01-13 21:38:04 +06:00
6bebb8b8d4 removing of redundant things 2022-01-13 21:36:39 +06:00
c013a978d4 start 0.0.8 2022-01-13 21:36:28 +06:00
9f342f428a Merge pull request #7 from InsanusMokrassar/0.0.7
0.0.7
2022-01-13 19:59:17 +06:00
9 changed files with 414 additions and 32 deletions

View File

@@ -1,3 +1,46 @@
# Changelog
## 0.0.17
* In `DefaultTable` `headingCustomizer` has been renamed to `headerCellCustomizer`
* Add index and title parameters for `headerCellCustomizer` in `DefaultTable`
## 0.0.16
* Add opportunity to customize `NavDivider`
## 0.0.15
* Add support of link icons
## 0.0.14
* Add DefaultTable parameter cellCustomizer
## 0.0.13
* Add `Icon#Custom`
## 0.0.12
* Add `rowAttributes` to table fun
## 0.0.11
* Upfill `Nav` and `UIKitNav`
## 0.0.10
* Filling of `UIKitUtility`
## 0.0.9
* Improving of `Nav` support
## 0.0.8
Removing of redundant non standard things
## 0.0.7
Rewrite project onto multiplatform paradigm and return back varargs instead of most `Array<UIKitModifier>`

View File

@@ -1,8 +1,5 @@
# JSUIKit Kotlin
**IMPORTANT NOTICE**: ___Currently it is possible that you will have issues with `vararg` arguments passing to the functions.
Use `arrayOf(...)` instead___
Hello :) This library is a wrapper for JavaScript/CSS [UIKit](https://getuikit.com) framework. It uses the same
structure as in [UIKit Docs](https://getuikit.com/docs/introduction) and in most cases you may use it.
@@ -11,10 +8,10 @@ for you in case you are using it too.
## How to include
Last version: [![Maven Central](https://maven-badges.herokuapp.com/maven-central/dev.inmo/jsuikitkotlin/badge.svg)](https://maven-badges.herokuapp.com/maven-central/dev.inmo/jsuikitkotlin)
Last version: [![Maven Central](https://maven-badges.herokuapp.com/maven-central/dev.inmo/kjsuikit/badge.svg)](https://maven-badges.herokuapp.com/maven-central/dev.inmo/kjsuikit)
```groovy
implementation "dev.inmo:jsuikitkotlin:$jsuikitkotlin_version"
implementation "dev.inmo:kjsuikit:$kjsuikit_version"
```
**THIS LIBRARY DO NOT ADD ANY JS OR CSS**. So, you must download and include UIKit js/css by yourself. See

View File

@@ -9,4 +9,4 @@ android.enableJetifier=true
# Project data
group=dev.inmo
version=0.0.7
version=0.0.17

View File

@@ -219,13 +219,15 @@ sealed class Icon(val name: String) {
}
attributesCustomizer()
}
if (type == UIKitIconType.Button) {
Button(configurer)
} else {
Span(configurer)
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,
@@ -241,4 +243,12 @@ sealed class Icon(val name: String) {
attributesCustomizer: AttrBuilderContext<out HTMLElement> = {},
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<out HTMLElement> = {},
onClick: ((Event) -> Unit)? = null
) = invoke(*modifiers, type = UIKitIconType.Link, ratio = ratio, onClick = onClick, attributesCustomizer = attributesCustomizer)
}

View File

@@ -1,12 +1,13 @@
package dev.inmo.jsuikit.elements
import androidx.compose.runtime.Composable
import androidx.compose.runtime.snapshots.SnapshotStateList
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
import org.jetbrains.compose.web.dom.Text
import org.w3c.dom.*
@Composable
fun Nav(
@@ -26,8 +27,7 @@ fun Nav(
"animation" to animation
"duration" to duration ?.toString()
}
classes("uk-nav")
include(*modifiers)
include(*modifiers, UIKitNav)
attributesCustomizer()
}
) {
@@ -35,6 +35,223 @@ fun Nav(
}
}
@Composable
fun DefaultNav(
vararg modifiers: UIKitModifier,
multiple: Boolean? = null,
collapsible: Boolean? = null,
animation: UIKitAnimation? = null,
duration: Milliseconds? = null,
attributesCustomizer: AttrBuilderContext<HTMLUListElement> = {},
dataAllocator: ContentBuilder<HTMLUListElement>
) = Nav(
modifiers = modifiers + UIKitNav.Default,
multiple,
collapsible,
animation,
duration,
attributesCustomizer,
dataAllocator
)
@Composable
fun PrimaryNav(
vararg modifiers: UIKitModifier,
multiple: Boolean? = null,
collapsible: Boolean? = null,
animation: UIKitAnimation? = null,
duration: Milliseconds? = null,
attributesCustomizer: AttrBuilderContext<HTMLUListElement> = {},
dataAllocator: ContentBuilder<HTMLUListElement>
) = Nav(
modifiers = modifiers + UIKitNav.Primary,
multiple,
collapsible,
animation,
duration,
attributesCustomizer,
dataAllocator
)
@Composable
fun SubNav(
vararg modifiers: UIKitModifier,
multiple: Boolean? = null,
collapsible: Boolean? = null,
animation: UIKitAnimation? = null,
duration: Milliseconds? = null,
attributesCustomizer: AttrBuilderContext<HTMLUListElement> = {},
dataAllocator: ContentBuilder<HTMLUListElement>
) = Nav(
modifiers = modifiers + UIKitNav.SubNav,
multiple,
collapsible,
animation,
duration,
attributesCustomizer,
dataAllocator
)
@Composable
fun <T> Nav(
title: String,
data: SnapshotStateList<T>,
vararg ulModifiers: UIKitModifier,
titleModifiers: Array<UIKitModifier> = emptyArray(),
multiple: Boolean? = null,
collapsible: Boolean? = null,
animation: UIKitAnimation? = null,
duration: Milliseconds? = null,
besidesTitleAndList: ContentBuilder<HTMLUListElement>? = null,
titleCustomizer: AttrBuilderContext<HTMLLIElement> = {},
ulCustomizer: AttrBuilderContext<HTMLUListElement> = {},
elementAllocator: @Composable ElementScope<HTMLUListElement>.(T) -> Unit
) {
Ul(
{
buildAndAddAttribute("uk-nav") {
"multiple" to multiple ?.toString()
"collapsible" to collapsible ?.toString()
"animation" to animation
"duration" to duration ?.toString()
}
include(*ulModifiers, UIKitNav)
ulCustomizer()
}
) {
NavHeader(
title,
*titleModifiers,
attributesCustomizer = titleCustomizer
)
besidesTitleAndList ?.let { it() }
data.forEach {
elementAllocator(it)
}
}
}
@Composable
fun <T> DefaultNav(
title: String,
data: SnapshotStateList<T>,
vararg ulModifiers: UIKitModifier,
titleModifiers: Array<UIKitModifier> = emptyArray(),
multiple: Boolean? = null,
collapsible: Boolean? = null,
animation: UIKitAnimation? = null,
duration: Milliseconds? = null,
besidesTitleAndList: ContentBuilder<HTMLUListElement>? = null,
titleCustomizer: AttrBuilderContext<HTMLLIElement> = {},
ulCustomizer: AttrBuilderContext<HTMLUListElement> = {},
elementAllocator: @Composable ElementScope<HTMLUListElement>.(T) -> Unit
) = Nav(
title,
data,
ulModifiers = ulModifiers + UIKitNav.Default,
titleModifiers,
multiple,
collapsible,
animation,
duration,
besidesTitleAndList,
titleCustomizer,
ulCustomizer,
elementAllocator
)
@Composable
fun <T> PrimaryNav(
title: String,
data: SnapshotStateList<T>,
vararg ulModifiers: UIKitModifier,
titleModifiers: Array<UIKitModifier> = emptyArray(),
multiple: Boolean? = null,
collapsible: Boolean? = null,
animation: UIKitAnimation? = null,
duration: Milliseconds? = null,
besidesTitleAndList: ContentBuilder<HTMLUListElement>? = null,
titleCustomizer: AttrBuilderContext<HTMLLIElement> = {},
ulCustomizer: AttrBuilderContext<HTMLUListElement> = {},
elementAllocator: @Composable ElementScope<HTMLUListElement>.(T) -> Unit
) = Nav(
title,
data,
ulModifiers = ulModifiers + UIKitNav.Primary,
titleModifiers,
multiple,
collapsible,
animation,
duration,
besidesTitleAndList,
titleCustomizer,
ulCustomizer,
elementAllocator
)
@Composable
fun <T> SubNav(
title: String,
data: SnapshotStateList<T>,
vararg ulModifiers: UIKitModifier,
titleModifiers: Array<UIKitModifier> = emptyArray(),
multiple: Boolean? = null,
collapsible: Boolean? = null,
animation: UIKitAnimation? = null,
duration: Milliseconds? = null,
besidesTitleAndList: ContentBuilder<HTMLUListElement>? = null,
titleCustomizer: AttrBuilderContext<HTMLLIElement> = {},
ulCustomizer: AttrBuilderContext<HTMLUListElement> = {},
elementAllocator: @Composable ElementScope<HTMLUListElement>.(T) -> Unit
) = Nav(
title,
data,
ulModifiers = ulModifiers + UIKitNav.SubNav,
titleModifiers,
multiple,
collapsible,
animation,
duration,
besidesTitleAndList,
titleCustomizer,
ulCustomizer,
elementAllocator
)
@Composable
fun NavHeader(
text: String,
vararg modifiers: UIKitModifier,
attributesCustomizer: AttrBuilderContext<HTMLLIElement> = {},
) {
Li(
{
include(*modifiers, UIKitNav.Header)
attributesCustomizer()
}
) {
Text(text)
}
}
@Composable
fun NavItemElement(
vararg modifiers: UIKitModifier,
attributesCustomizer: AttrBuilderContext<HTMLLIElement> = {},
contentAllocator: ContentBuilder<HTMLAnchorElement>
) {
Li(
{
include(*modifiers)
attributesCustomizer()
}
) {
A("#") {
contentAllocator()
}
}
}
@Composable
fun NavElement(
vararg modifiers: UIKitModifier,
@@ -44,9 +261,17 @@ fun NavElement(
Li(
{
include(*modifiers)
attributesCustomizer
attributesCustomizer()
}
) {
contentAllocator()
}
}
@Composable
fun NavDivider(
vararg modifiers: UIKitModifier,
attributesCustomizer: AttrBuilderContext<HTMLLIElement> = {},
) {
Li({ include(UIKitNav.Divider, *modifiers);attributesCustomizer() })
}

View File

@@ -3,9 +3,10 @@ package dev.inmo.jsuikit.elements
import androidx.compose.runtime.Composable
import androidx.compose.runtime.snapshots.SnapshotStateList
import dev.inmo.jsuikit.modifiers.*
import org.jetbrains.compose.web.attributes.AttrsBuilder
import org.jetbrains.compose.web.dom.*
import org.w3c.dom.HTMLProgressElement
import org.w3c.dom.HTMLTableElement
import org.jetbrains.compose.web.dom.Text
import org.w3c.dom.*
@Composable
fun <T> DefaultTable(
@@ -13,7 +14,10 @@ fun <T> DefaultTable(
dataList: SnapshotStateList<T>,
vararg tableModifiers: UIKitModifier,
attributesCustomizer: AttrBuilderContext<HTMLTableElement> = {},
cellFiller: @Composable (i: Int, t: T) -> Unit
headerCellCustomizer: AttrsBuilder<HTMLTableCellElement>.(i: Int, title: String) -> Unit = { _, _ -> },
rowAttributes: AttrsBuilder<HTMLTableRowElement>.(t: T) -> Unit = {},
cellCustomizer: AttrsBuilder<HTMLTableCellElement>.(i: Int, t: T) -> Unit = { _, _ -> },
cellFiller: @Composable ElementScope<HTMLTableCellElement>.(i: Int, t: T) -> Unit
) {
val headingIndexes = heading.indices
Table(
@@ -25,22 +29,30 @@ fun <T> DefaultTable(
) {
Thead {
Tr {
heading.forEach {
heading.forEachIndexed { i, t ->
Th(
{
include(UIKitExtension.TextTransformUnset)
headerCellCustomizer(i, t)
}
) {
Text(it)
Text(t)
}
}
}
}
Tbody {
dataList.forEach {
Tr {
Tr(
{
rowAttributes(it)
}
) {
headingIndexes.forEach { i ->
Td {
Td(
{
cellCustomizer(i, it)
}
) {
cellFiller(i, it)
}
}

View File

@@ -1,7 +0,0 @@
package dev.inmo.jsuikit.modifiers
sealed class UIKitExtension(classname: String) : UIKitModifier {
override val classes: Array<String> = arrayOf(classname)
object TextTransformUnset : UIKitExtension("text_transform_unset")
object CursorPointer : UIKitExtension("cursor_pointer")
}

View File

@@ -3,8 +3,8 @@ package dev.inmo.jsuikit.modifiers
sealed class UIKitNav(classname: String) : UIKitModifier {
override val classes: Array<String> = arrayOf(classname)
object Accordion : UIKitNav("uk-nav-parent-icon")
object Subnav : UIKitNav("uk-nav-sub")
object ParentIcon : UIKitNav("uk-nav-parent-icon")
object SubNav : UIKitNav("uk-nav-sub")
object Header : UIKitNav("uk-nav-header")
object Divider : UIKitNav("uk-nav-divider")
@@ -14,4 +14,6 @@ sealed class UIKitNav(classname: String) : UIKitModifier {
object Primary : UIKitNav("uk-nav-primary")
object Center : UIKitNav("uk-nav-center")
companion object : UIKitNav("uk-nav")
}

View File

@@ -3,10 +3,110 @@ package dev.inmo.jsuikit.modifiers
sealed class UIKitUtility(classname: String) : UIKitModifier {
override val classes: Array<String> = arrayOf(classname)
object Panel : UIKitUtility("uk-panel")
sealed class Float(suffix: String) : UIKitUtility("uk-float-$suffix") {
object Left : Float("left")
object Right : Float("right")
}
object Clearfix : Float("clearfix")
sealed class Overflow(suffix: String) : UIKitUtility("uk-overflow-$suffix") {
object Hidden : Overflow("hidden")
object Auto : Overflow("auto")
}
sealed class Resize(suffix: String?) : UIKitUtility("uk-resize${suffix ?.let { "-$it" } ?: ""}") {
object Vertical : Resize("vertical")
companion object : Resize(null)
}
sealed class Display(suffix: String) : UIKitUtility("uk-display-$suffix") {
object Block : Display("block")
sealed class Inline(suffix: String?) : Display("inline${suffix ?.let { "-$it" } ?: ""}") {
object Block : Inline("block")
companion object : Inline(null)
}
}
sealed class Inline(suffix: String?) : UIKitUtility("uk-inline${suffix ?.let { "-$it" } ?: ""}") {
object Clip : Inline("clip")
companion object : Inline(null)
}
sealed class Responsive(suffix: String) : UIKitUtility("uk-responsive-$suffix") {
object Width : Responsive("width")
object Height : Responsive("height")
}
object PreserveWidth : UIKitUtility("uk-preserve-width")
sealed class Border(suffix: String) : UIKitUtility("uk-border-$suffix") {
object Rounded : Border("rounded")
object Circle : Border("circle")
object Pill : Border("pill")
}
sealed class BoxShadow(suffix: String) : UIKitUtility("uk-box-shadow-$suffix") {
object Small : BoxShadow("small")
object Medium : BoxShadow("medium")
object Large : BoxShadow("large")
object XLarge : BoxShadow("xlarge")
object Bottom : BoxShadow("bottom")
sealed class Hover(suffix: String) : BoxShadow("hover-$suffix") {
object Small : Hover("small")
object Medium : Hover("medium")
object Large : Hover("large")
object XLarge : Hover("xlarge")
}
}
object DropCap : UIKitUtility("uk-dropcap")
object Logo : UIKitUtility("uk-logo")
sealed class Blend(suffix: String) : UIKitUtility("uk-blend-$suffix") {
object Multiply : Blend("multiply")
object Screen : Blend("screen")
object Overlay : Blend("overlay")
object Darken : Blend("darken")
object Lighten : Blend("lighten")
sealed class Color(suffix: String?) : Blend("color${suffix ?.let { "-$it" } ?: ""}") {
object Dodge : Color("dodge")
object Burn : Color("burn")
companion object : Color(null)
}
object HardLight : Blend("hard-light")
object SoftLight : Blend("soft-light")
object Difference : Blend("difference")
object Exclusion : Blend("exclusion")
object Hue : Blend("hue")
object Saturation : Blend("saturation")
object Luminosity : Blend("luminosity")
}
sealed class Transform(suffix: String) : UIKitUtility("uk-transform-$suffix") {
object Center : Transform("center")
sealed class Origin(suffix: String) : Transform("origin-$suffix") {
sealed class Top(suffix: String) : Origin("top-$suffix") {
object Left : Top("left")
object Center : Top("center")
object Right : Top("right")
}
sealed class Center(suffix: String) : Origin("center-$suffix") {
object Left : Center("left")
object Right : Center("right")
}
sealed class Bottom(suffix: String) : Origin("bottom-$suffix") {
object Left : Bottom("left")
object Center : Bottom("center")
object Right : Bottom("right")
}
}
}
object Disabled : UIKitUtility("uk-disabled")
object Drag : UIKitUtility("uk-drag")
object Active : UIKitUtility("uk-active")
}