commonMain.com.mikepenz.aboutlibraries.ui.compose.m3.Libraries.kt Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of aboutlibraries-compose-m3 Show documentation
Show all versions of aboutlibraries-compose-m3 Show documentation
AboutLibraries automatically detects all dependencies of a project and collects their information including the license. Optionally visualising it via the provided ui components.
The newest version!
package com.mikepenz.aboutlibraries.ui.compose.m3
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.lazy.LazyListScope
import androidx.compose.foundation.lazy.LazyListState
import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.State
import androidx.compose.runtime.produceState
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import com.mikepenz.aboutlibraries.Libs
import com.mikepenz.aboutlibraries.entity.Library
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
/**
* Displays all provided libraries in a simple list.
*/
@Composable
fun LibrariesContainer(
aboutLibsJson: String,
modifier: Modifier = Modifier,
lazyListState: LazyListState = rememberLazyListState(),
contentPadding: PaddingValues = PaddingValues(0.dp),
showAuthor: Boolean = true,
showVersion: Boolean = true,
showLicenseBadges: Boolean = true,
colors: LibraryColors = LibraryDefaults.libraryColors(),
padding: LibraryPadding = LibraryDefaults.libraryPadding(),
itemContentPadding: PaddingValues = LibraryDefaults.ContentPadding,
itemSpacing: Dp = LibraryDefaults.LibraryItemSpacing,
header: (LazyListScope.() -> Unit)? = null,
onLibraryClick: ((Library) -> Unit)? = null,
) {
val libs = Libs.Builder().withJson(aboutLibsJson).build()
LibrariesContainer(
libs,
modifier = modifier,
lazyListState = lazyListState,
contentPadding = contentPadding,
showAuthor = showAuthor,
showVersion = showVersion,
showLicenseBadges = showLicenseBadges,
colors = colors,
padding = padding,
itemContentPadding = itemContentPadding,
itemSpacing = itemSpacing,
header = header,
onLibraryClick = onLibraryClick,
licenseDialogBody = { library ->
Text(library.licenses.firstOrNull()?.licenseContent ?: "")
}
)
}
/**
* Displays all provided libraries in a simple list.
*/
@Composable
fun LibrariesContainer(
librariesBlock: () -> Libs,
modifier: Modifier = Modifier,
lazyListState: LazyListState = rememberLazyListState(),
contentPadding: PaddingValues = PaddingValues(0.dp),
showAuthor: Boolean = true,
showVersion: Boolean = true,
showLicenseBadges: Boolean = true,
colors: LibraryColors = LibraryDefaults.libraryColors(),
padding: LibraryPadding = LibraryDefaults.libraryPadding(),
itemContentPadding: PaddingValues = LibraryDefaults.ContentPadding,
itemSpacing: Dp = LibraryDefaults.LibraryItemSpacing,
header: (LazyListScope.() -> Unit)? = null,
onLibraryClick: ((Library) -> Unit)? = null,
) {
val libs = librariesBlock()
LibrariesContainer(
libs,
modifier,
lazyListState,
contentPadding,
showAuthor,
showVersion,
showLicenseBadges,
colors,
padding,
itemContentPadding,
itemSpacing,
header,
onLibraryClick,
licenseDialogBody = { library ->
Text(library.licenses.firstOrNull()?.licenseContent ?: "")
}
)
}
/**
* Creates a State that holds the [Libs] as loaded by the [libraries].
*
* @see Libs
*/
@Composable
fun rememberLibraries(
libraries: ByteArray,
): State = rememberLibraries {
libraries.decodeToString()
}
/**
* Creates a State that holds the [Libs] as loaded by the [block].
*
* @see Libs
*/
@Composable
fun rememberLibraries(
block: suspend () -> String,
): State {
return produceState(initialValue = null) {
value = withContext(Dispatchers.Default) {
Libs.Builder()
.withJson(block())
.build()
}
}
}