Split function into separate files.

This commit is contained in:
Benoit Marty
2025-06-26 12:59:08 +02:00
committed by Benoit Marty
parent 67e280280f
commit 71e309f6c3
5 changed files with 112 additions and 77 deletions
@@ -7,29 +7,20 @@
package io.element.android.libraries.designsystem.theme.components package io.element.android.libraries.designsystem.theme.components
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.RowScope import androidx.compose.foundation.layout.RowScope
import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.foundation.layout.offset
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.NavigationBarDefaults import androidx.compose.material3.NavigationBarDefaults
import androidx.compose.material3.NavigationBarItemColors
import androidx.compose.material3.NavigationBarItemDefaults
import androidx.compose.material3.contentColorFor import androidx.compose.material3.contentColorFor
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import io.element.android.compound.theme.ElementTheme import io.element.android.compound.theme.ElementTheme
import io.element.android.compound.tokens.generated.CompoundIcons import io.element.android.compound.tokens.generated.CompoundIcons
import io.element.android.libraries.designsystem.atomic.atoms.CounterAtom
import io.element.android.libraries.designsystem.preview.ElementThemedPreview import io.element.android.libraries.designsystem.preview.ElementThemedPreview
import io.element.android.libraries.designsystem.preview.PreviewGroup import io.element.android.libraries.designsystem.preview.PreviewGroup
import androidx.compose.material3.NavigationBarItem as MaterialNavigationBarItem
@Composable @Composable
fun NavigationBar( fun NavigationBar(
@@ -64,72 +55,6 @@ object ElementNavigationBarDefaults {
@Composable get() = NavigationBarDefaults.windowInsets @Composable get() = NavigationBarDefaults.windowInsets
} }
@Composable
fun RowScope.NavigationBarItem(
selected: Boolean,
onClick: () -> Unit,
icon: @Composable () -> Unit,
modifier: Modifier = Modifier,
enabled: Boolean = true,
label: @Composable (() -> Unit)? = null,
alwaysShowLabel: Boolean = true,
colors: NavigationBarItemColors = ElementNavigationBarItemDefaultsDefaults.colors(),
interactionSource: MutableInteractionSource? = null
) {
MaterialNavigationBarItem(
selected = selected,
onClick = onClick,
icon = icon,
modifier = modifier,
enabled = enabled,
label = label,
alwaysShowLabel = alwaysShowLabel,
colors = colors,
interactionSource = interactionSource,
)
}
object ElementNavigationBarItemDefaultsDefaults {
@Composable
fun colors() = NavigationBarItemDefaults.colors().copy(
selectedIconColor = ElementTheme.colors.iconPrimary,
selectedTextColor = ElementTheme.colors.textPrimary,
unselectedIconColor = ElementTheme.colors.iconTertiary,
unselectedTextColor = ElementTheme.colors.textDisabled,
selectedIndicatorColor = Color.Transparent,
)
}
@Composable
fun NavigationBarIcon(
imageVector: ImageVector,
count: Int,
isCritical: Boolean,
) {
Box {
Icon(
imageVector = imageVector,
contentDescription = null,
)
CounterAtom(
modifier = Modifier.offset(11.dp, (-11).dp),
textStyle = ElementTheme.typography.fontBodyXsMedium,
count = count,
isCritical = isCritical,
)
}
}
@Composable
fun NavigationBarText(
text: String,
) {
Text(
text = text,
style = ElementTheme.typography.fontBodySmMedium,
)
}
@Preview(group = PreviewGroup.AppBars) @Preview(group = PreviewGroup.AppBars)
@Composable @Composable
internal fun NavigationBarPreview() = ElementThemedPreview { internal fun NavigationBarPreview() = ElementThemedPreview {
@@ -0,0 +1,37 @@
/*
* Copyright 2025 New Vector Ltd.
*
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
* Please see LICENSE files in the repository root for full details.
*/
package io.element.android.libraries.designsystem.theme.components
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.offset
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.unit.dp
import io.element.android.compound.theme.ElementTheme
import io.element.android.libraries.designsystem.atomic.atoms.CounterAtom
@Composable
fun NavigationBarIcon(
imageVector: ImageVector,
count: Int,
isCritical: Boolean,
) {
Box {
Icon(
imageVector = imageVector,
contentDescription = null,
)
CounterAtom(
modifier = Modifier.Companion.offset(11.dp, (-11).dp),
textStyle = ElementTheme.typography.fontBodyXsMedium,
count = count,
isCritical = isCritical,
)
}
}
@@ -0,0 +1,54 @@
/*
* Copyright 2025 New Vector Ltd.
*
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
* Please see LICENSE files in the repository root for full details.
*/
package io.element.android.libraries.designsystem.theme.components
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.RowScope
import androidx.compose.material3.NavigationBarItem
import androidx.compose.material3.NavigationBarItemColors
import androidx.compose.material3.NavigationBarItemDefaults
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import io.element.android.compound.theme.ElementTheme
@Composable
fun RowScope.NavigationBarItem(
selected: Boolean,
onClick: () -> Unit,
icon: @Composable () -> Unit,
modifier: Modifier = Modifier,
enabled: Boolean = true,
label: @Composable (() -> Unit)? = null,
alwaysShowLabel: Boolean = true,
colors: NavigationBarItemColors = ElementNavigationBarItemDefaultsDefaults.colors(),
interactionSource: MutableInteractionSource? = null
) {
NavigationBarItem(
selected = selected,
onClick = onClick,
icon = icon,
modifier = modifier,
enabled = enabled,
label = label,
alwaysShowLabel = alwaysShowLabel,
colors = colors,
interactionSource = interactionSource,
)
}
object ElementNavigationBarItemDefaultsDefaults {
@Composable
fun colors() = NavigationBarItemDefaults.colors().copy(
selectedIconColor = ElementTheme.colors.iconPrimary,
selectedTextColor = ElementTheme.colors.textPrimary,
unselectedIconColor = ElementTheme.colors.iconTertiary,
unselectedTextColor = ElementTheme.colors.textDisabled,
selectedIndicatorColor = Color.Companion.Transparent,
)
}
@@ -0,0 +1,21 @@
/*
* Copyright 2025 New Vector Ltd.
*
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
* Please see LICENSE files in the repository root for full details.
*/
package io.element.android.libraries.designsystem.theme.components
import androidx.compose.runtime.Composable
import io.element.android.compound.theme.ElementTheme
@Composable
fun NavigationBarText(
text: String,
) {
Text(
text = text,
style = ElementTheme.typography.fontBodySmMedium,
)
}
@@ -34,8 +34,6 @@ class KonsistComposableTest {
// Add some exceptions... // Add some exceptions...
"InvisibleButton", "InvisibleButton",
"OutlinedButton", "OutlinedButton",
"NavigationBarIcon",
"NavigationBarText",
"SimpleAlertDialogContent", "SimpleAlertDialogContent",
"TextButton", "TextButton",
) )