Make the whole items in advanced settings screen clickable, standarize paddings (#2314)
* Make sure the whole item in advanced settings screen triggers the toggle action * Fix UI changes when setting `onChecked` actions to null. * Fix padding in invite member list items * Remove redundant `CheckableUserRow` alternatives. * Use 4dp for padding instead --------- Co-authored-by: ElementBot <benoitm+elementbot@element.io>
This commit is contained in:
parent
ede1dc0fab
commit
0f5038af8f
68 changed files with 230 additions and 305 deletions
|
|
@ -23,10 +23,11 @@ import androidx.compose.ui.tooling.preview.Preview
|
|||
import io.element.android.libraries.designsystem.components.avatar.AvatarSize
|
||||
import io.element.android.libraries.designsystem.preview.ElementThemedPreview
|
||||
import io.element.android.libraries.designsystem.theme.components.HorizontalDivider
|
||||
import io.element.android.libraries.matrix.ui.components.CheckableMatrixUserRow
|
||||
import io.element.android.libraries.matrix.ui.components.CheckableUnresolvedUserRow
|
||||
import io.element.android.libraries.matrix.ui.components.CheckableUserRow
|
||||
import io.element.android.libraries.matrix.ui.components.CheckableUserRowData
|
||||
import io.element.android.libraries.matrix.ui.components.aMatrixUser
|
||||
import io.element.android.libraries.matrix.ui.model.getAvatarData
|
||||
import io.element.android.libraries.matrix.ui.model.getBestName
|
||||
import io.element.android.libraries.usersearch.api.UserSearchResult
|
||||
|
||||
@Composable
|
||||
|
|
@ -36,23 +37,24 @@ fun SearchMultipleUsersResultItem(
|
|||
onCheckedChange: (Boolean) -> Unit,
|
||||
modifier: Modifier = Modifier,
|
||||
) {
|
||||
if (searchResult.isUnresolved) {
|
||||
CheckableUnresolvedUserRow(
|
||||
checked = isUserSelected,
|
||||
modifier = modifier,
|
||||
val data = if (searchResult.isUnresolved) {
|
||||
CheckableUserRowData.Unresolved(
|
||||
avatarData = searchResult.matrixUser.getAvatarData(AvatarSize.UserListItem),
|
||||
id = searchResult.matrixUser.userId.value,
|
||||
onCheckedChange = onCheckedChange,
|
||||
)
|
||||
} else {
|
||||
CheckableMatrixUserRow(
|
||||
checked = isUserSelected,
|
||||
modifier = modifier,
|
||||
matrixUser = searchResult.matrixUser,
|
||||
avatarSize = AvatarSize.UserListItem,
|
||||
onCheckedChange = onCheckedChange,
|
||||
CheckableUserRowData.Resolved(
|
||||
name = searchResult.matrixUser.getBestName(),
|
||||
subtext = if (searchResult.matrixUser.displayName.isNullOrEmpty()) null else searchResult.matrixUser.userId.value,
|
||||
avatarData = searchResult.matrixUser.getAvatarData(AvatarSize.UserListItem),
|
||||
)
|
||||
}
|
||||
CheckableUserRow(
|
||||
checked = isUserSelected,
|
||||
modifier = modifier,
|
||||
data = data,
|
||||
onCheckedChange = onCheckedChange,
|
||||
)
|
||||
}
|
||||
|
||||
@Preview
|
||||
|
|
|
|||
|
|
@ -66,8 +66,8 @@ fun AdvancedSettingsView(
|
|||
},
|
||||
trailingContent = ListItemContent.Switch(
|
||||
checked = state.isRichTextEditorEnabled,
|
||||
onChange = { state.eventSink(AdvancedSettingsEvents.SetRichTextEditorEnabled(it)) },
|
||||
),
|
||||
onClick = { state.eventSink(AdvancedSettingsEvents.SetRichTextEditorEnabled(!state.isRichTextEditorEnabled)) }
|
||||
)
|
||||
ListItem(
|
||||
headlineContent = {
|
||||
|
|
@ -78,8 +78,8 @@ fun AdvancedSettingsView(
|
|||
},
|
||||
trailingContent = ListItemContent.Switch(
|
||||
checked = state.isDeveloperModeEnabled,
|
||||
onChange = { state.eventSink(AdvancedSettingsEvents.SetDeveloperModeEnabled(it)) },
|
||||
),
|
||||
onClick = { state.eventSink(AdvancedSettingsEvents.SetDeveloperModeEnabled(!state.isDeveloperModeEnabled)) }
|
||||
)
|
||||
ListItem(
|
||||
headlineContent = {
|
||||
|
|
@ -90,8 +90,8 @@ fun AdvancedSettingsView(
|
|||
},
|
||||
trailingContent = ListItemContent.Switch(
|
||||
checked = state.isSendPublicReadReceiptsEnabled,
|
||||
onChange = { state.eventSink(AdvancedSettingsEvents.SetSendPublicReadReceiptsEnabled(it)) },
|
||||
),
|
||||
onClick = { state.eventSink(AdvancedSettingsEvents.SetSendPublicReadReceiptsEnabled(!state.isSendPublicReadReceiptsEnabled)) }
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -46,8 +46,8 @@ import io.element.android.libraries.designsystem.theme.components.Text
|
|||
import io.element.android.libraries.designsystem.theme.components.TextButton
|
||||
import io.element.android.libraries.designsystem.theme.components.TopAppBar
|
||||
import io.element.android.libraries.matrix.api.user.MatrixUser
|
||||
import io.element.android.libraries.matrix.ui.components.CheckableUnresolvedUserRow
|
||||
import io.element.android.libraries.matrix.ui.components.CheckableUserRow
|
||||
import io.element.android.libraries.matrix.ui.components.CheckableUserRowData
|
||||
import io.element.android.libraries.matrix.ui.components.SelectedUsersList
|
||||
import io.element.android.libraries.matrix.ui.model.getAvatarData
|
||||
import io.element.android.libraries.matrix.ui.model.getBestName
|
||||
|
|
@ -186,18 +186,16 @@ private fun RoomInviteMembersSearchBar(
|
|||
|
||||
LazyColumn {
|
||||
itemsIndexed(results) { index, invitableUser ->
|
||||
if (invitableUser.isUnresolved && !invitableUser.isAlreadyInvited && !invitableUser.isAlreadyJoined) {
|
||||
CheckableUnresolvedUserRow(
|
||||
checked = invitableUser.isSelected,
|
||||
val notInvitedOrJoined = !(invitableUser.isAlreadyInvited || invitableUser.isAlreadyJoined)
|
||||
val isUnresolved = invitableUser.isUnresolved && notInvitedOrJoined
|
||||
val enabled = isUnresolved || notInvitedOrJoined
|
||||
val data = if (isUnresolved) {
|
||||
CheckableUserRowData.Unresolved(
|
||||
avatarData = invitableUser.matrixUser.getAvatarData(AvatarSize.UserListItem),
|
||||
id = invitableUser.matrixUser.userId.value,
|
||||
onCheckedChange = { onUserToggled(invitableUser.matrixUser) },
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
)
|
||||
} else {
|
||||
CheckableUserRow(
|
||||
checked = invitableUser.isSelected,
|
||||
enabled = !invitableUser.isAlreadyInvited && !invitableUser.isAlreadyJoined,
|
||||
CheckableUserRowData.Resolved(
|
||||
avatarData = invitableUser.matrixUser.getAvatarData(AvatarSize.UserListItem),
|
||||
name = invitableUser.matrixUser.getBestName(),
|
||||
subtext = when {
|
||||
|
|
@ -207,11 +205,16 @@ private fun RoomInviteMembersSearchBar(
|
|||
// Otherwise show the ID, unless that's already used for their name
|
||||
invitableUser.matrixUser.displayName.isNullOrEmpty().not() -> invitableUser.matrixUser.userId.value
|
||||
else -> null
|
||||
},
|
||||
onCheckedChange = { onUserToggled(invitableUser.matrixUser) },
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
}
|
||||
)
|
||||
}
|
||||
CheckableUserRow(
|
||||
checked = invitableUser.isSelected,
|
||||
enabled = enabled,
|
||||
data = data,
|
||||
onCheckedChange = { onUserToggled(invitableUser.matrixUser) },
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
)
|
||||
|
||||
if (index < results.lastIndex) {
|
||||
HorizontalDivider()
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ import androidx.compose.foundation.layout.Column
|
|||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.material3.CheckboxColors
|
||||
import androidx.compose.material3.CheckboxDefaults
|
||||
import androidx.compose.material3.minimumInteractiveComponentSize
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
|
|
@ -57,7 +58,7 @@ fun Checkbox(
|
|||
onCheckedChange(!checked)
|
||||
}
|
||||
},
|
||||
modifier = modifier,
|
||||
modifier = modifier.minimumInteractiveComponentSize(),
|
||||
enabled = enabled,
|
||||
colors = colors,
|
||||
interactionSource = interactionSource,
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ import androidx.compose.foundation.layout.Column
|
|||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.material3.RadioButtonColors
|
||||
import androidx.compose.material3.RadioButtonDefaults
|
||||
import androidx.compose.material3.minimumInteractiveComponentSize
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
|
|
@ -48,7 +49,7 @@ fun RadioButton(
|
|||
androidx.compose.material3.RadioButton(
|
||||
selected = selected,
|
||||
onClick = onClick,
|
||||
modifier = modifier,
|
||||
modifier = modifier.minimumInteractiveComponentSize(),
|
||||
enabled = enabled,
|
||||
colors = colors,
|
||||
interactionSource = interactionSource,
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ import androidx.compose.foundation.layout.Row
|
|||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.material3.SwitchColors
|
||||
import androidx.compose.material3.SwitchDefaults
|
||||
import androidx.compose.material3.minimumInteractiveComponentSize
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
|
|
@ -52,7 +53,7 @@ fun Switch(
|
|||
Material3Switch(
|
||||
checked = checked,
|
||||
onCheckedChange = onCheckedChange,
|
||||
modifier = modifier,
|
||||
modifier = modifier.minimumInteractiveComponentSize(),
|
||||
enabled = enabled,
|
||||
colors = colors,
|
||||
interactionSource = interactionSource,
|
||||
|
|
|
|||
|
|
@ -1,75 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2023 New Vector Ltd
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package io.element.android.libraries.matrix.ui.components
|
||||
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.tooling.preview.PreviewParameter
|
||||
import io.element.android.libraries.designsystem.components.avatar.AvatarSize
|
||||
import io.element.android.libraries.designsystem.preview.ElementPreview
|
||||
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
|
||||
import io.element.android.libraries.matrix.api.user.MatrixUser
|
||||
import io.element.android.libraries.matrix.ui.model.getAvatarData
|
||||
import io.element.android.libraries.matrix.ui.model.getBestName
|
||||
|
||||
@Composable
|
||||
fun CheckableMatrixUserRow(
|
||||
checked: Boolean,
|
||||
matrixUser: MatrixUser,
|
||||
onCheckedChange: (Boolean) -> Unit,
|
||||
modifier: Modifier = Modifier,
|
||||
avatarSize: AvatarSize = AvatarSize.UserListItem,
|
||||
enabled: Boolean = true,
|
||||
) = CheckableUserRow(
|
||||
checked = checked,
|
||||
avatarData = matrixUser.getAvatarData(avatarSize),
|
||||
name = matrixUser.getBestName(),
|
||||
subtext = if (matrixUser.displayName.isNullOrEmpty()) null else matrixUser.userId.value,
|
||||
modifier = modifier,
|
||||
onCheckedChange = onCheckedChange,
|
||||
enabled = enabled,
|
||||
)
|
||||
|
||||
@PreviewsDayNight
|
||||
@Composable
|
||||
internal fun CheckableMatrixUserRowPreview(@PreviewParameter(MatrixUserProvider::class) matrixUser: MatrixUser) = ElementPreview {
|
||||
Column {
|
||||
CheckableMatrixUserRow(
|
||||
checked = true,
|
||||
onCheckedChange = { },
|
||||
matrixUser = matrixUser,
|
||||
)
|
||||
CheckableMatrixUserRow(
|
||||
checked = false,
|
||||
onCheckedChange = { },
|
||||
matrixUser = matrixUser,
|
||||
)
|
||||
CheckableMatrixUserRow(
|
||||
checked = true,
|
||||
onCheckedChange = { },
|
||||
matrixUser = matrixUser,
|
||||
enabled = false,
|
||||
)
|
||||
CheckableMatrixUserRow(
|
||||
checked = false,
|
||||
onCheckedChange = { },
|
||||
matrixUser = matrixUser,
|
||||
enabled = false,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -1,104 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2023 New Vector Ltd
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package io.element.android.libraries.matrix.ui.components
|
||||
|
||||
import androidx.compose.foundation.clickable
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.semantics.Role
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import androidx.compose.ui.unit.dp
|
||||
import io.element.android.libraries.designsystem.components.avatar.AvatarData
|
||||
import io.element.android.libraries.designsystem.components.avatar.AvatarSize
|
||||
import io.element.android.libraries.designsystem.preview.ElementThemedPreview
|
||||
import io.element.android.libraries.designsystem.theme.components.Checkbox
|
||||
import io.element.android.libraries.designsystem.theme.components.HorizontalDivider
|
||||
import io.element.android.libraries.matrix.ui.model.getAvatarData
|
||||
|
||||
@Composable
|
||||
fun CheckableUnresolvedUserRow(
|
||||
checked: Boolean,
|
||||
onCheckedChange: (Boolean) -> Unit,
|
||||
avatarData: AvatarData,
|
||||
id: String,
|
||||
modifier: Modifier = Modifier,
|
||||
enabled: Boolean = true,
|
||||
) {
|
||||
Row(
|
||||
modifier = modifier
|
||||
.fillMaxWidth()
|
||||
.clickable(role = Role.Checkbox, enabled = enabled) {
|
||||
onCheckedChange(!checked)
|
||||
},
|
||||
verticalAlignment = Alignment.CenterVertically,
|
||||
) {
|
||||
UnresolvedUserRow(
|
||||
modifier = Modifier.weight(1f),
|
||||
avatarData = avatarData,
|
||||
id = id,
|
||||
)
|
||||
|
||||
Checkbox(
|
||||
modifier = Modifier.padding(end = 16.dp),
|
||||
checked = checked,
|
||||
onCheckedChange = null,
|
||||
enabled = enabled,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
internal fun CheckableUnresolvedUserRowPreview() = ElementThemedPreview {
|
||||
val matrixUser = aMatrixUser()
|
||||
Column {
|
||||
CheckableUnresolvedUserRow(
|
||||
checked = false,
|
||||
onCheckedChange = { },
|
||||
avatarData = matrixUser.getAvatarData(AvatarSize.UserListItem),
|
||||
id = matrixUser.userId.value,
|
||||
)
|
||||
HorizontalDivider()
|
||||
CheckableUnresolvedUserRow(
|
||||
checked = true,
|
||||
onCheckedChange = { },
|
||||
avatarData = matrixUser.getAvatarData(AvatarSize.UserListItem),
|
||||
id = matrixUser.userId.value,
|
||||
)
|
||||
HorizontalDivider()
|
||||
CheckableUnresolvedUserRow(
|
||||
checked = false,
|
||||
onCheckedChange = { },
|
||||
avatarData = matrixUser.getAvatarData(AvatarSize.UserListItem),
|
||||
id = matrixUser.userId.value,
|
||||
enabled = false,
|
||||
)
|
||||
HorizontalDivider()
|
||||
CheckableUnresolvedUserRow(
|
||||
checked = true,
|
||||
onCheckedChange = { },
|
||||
avatarData = matrixUser.getAvatarData(AvatarSize.UserListItem),
|
||||
id = matrixUser.userId.value,
|
||||
enabled = false,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -17,24 +17,29 @@
|
|||
package io.element.android.libraries.matrix.ui.components
|
||||
|
||||
import androidx.compose.foundation.clickable
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.Immutable
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.semantics.Role
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import androidx.compose.ui.unit.dp
|
||||
import io.element.android.libraries.designsystem.components.avatar.AvatarData
|
||||
import io.element.android.libraries.designsystem.components.avatar.AvatarSize
|
||||
import io.element.android.libraries.designsystem.preview.ElementThemedPreview
|
||||
import io.element.android.libraries.designsystem.theme.components.Checkbox
|
||||
import io.element.android.libraries.designsystem.theme.components.HorizontalDivider
|
||||
import io.element.android.libraries.matrix.ui.model.getAvatarData
|
||||
|
||||
@Composable
|
||||
fun CheckableUserRow(
|
||||
checked: Boolean,
|
||||
onCheckedChange: (Boolean) -> Unit,
|
||||
avatarData: AvatarData,
|
||||
name: String,
|
||||
subtext: String?,
|
||||
data: CheckableUserRowData,
|
||||
modifier: Modifier = Modifier,
|
||||
enabled: Boolean = true,
|
||||
) {
|
||||
|
|
@ -46,19 +51,119 @@ fun CheckableUserRow(
|
|||
},
|
||||
verticalAlignment = Alignment.CenterVertically,
|
||||
) {
|
||||
UserRow(
|
||||
modifier = Modifier.weight(1f),
|
||||
avatarData = avatarData,
|
||||
name = name,
|
||||
subtext = subtext,
|
||||
)
|
||||
val rowModifier = Modifier.weight(1f)
|
||||
when (data) {
|
||||
is CheckableUserRowData.Resolved -> {
|
||||
UserRow(
|
||||
modifier = rowModifier,
|
||||
avatarData = data.avatarData,
|
||||
name = data.name,
|
||||
subtext = data.subtext,
|
||||
)
|
||||
}
|
||||
is CheckableUserRowData.Unresolved -> {
|
||||
UnresolvedUserRow(
|
||||
modifier = rowModifier,
|
||||
avatarData = data.avatarData,
|
||||
id = data.id,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
Checkbox(
|
||||
modifier = Modifier
|
||||
.padding(end = 16.dp),
|
||||
modifier = Modifier.padding(end = 4.dp),
|
||||
checked = checked,
|
||||
onCheckedChange = null,
|
||||
enabled = enabled,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@Immutable
|
||||
sealed interface CheckableUserRowData {
|
||||
data class Resolved(
|
||||
val avatarData: AvatarData,
|
||||
val name: String,
|
||||
val subtext: String?,
|
||||
) : CheckableUserRowData
|
||||
|
||||
data class Unresolved(
|
||||
val avatarData: AvatarData,
|
||||
val id: String,
|
||||
) : CheckableUserRowData
|
||||
}
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
internal fun CheckableResolvedUserRowPreview() = ElementThemedPreview {
|
||||
val matrixUser = aMatrixUser()
|
||||
val data = CheckableUserRowData.Resolved(
|
||||
avatarData = matrixUser.getAvatarData(AvatarSize.UserListItem),
|
||||
name = matrixUser.displayName.orEmpty(),
|
||||
subtext = matrixUser.userId.value,
|
||||
)
|
||||
Column {
|
||||
CheckableUserRow(
|
||||
checked = false,
|
||||
onCheckedChange = { },
|
||||
data = data,
|
||||
)
|
||||
HorizontalDivider()
|
||||
CheckableUserRow(
|
||||
checked = true,
|
||||
onCheckedChange = { },
|
||||
data = data,
|
||||
)
|
||||
HorizontalDivider()
|
||||
CheckableUserRow(
|
||||
checked = false,
|
||||
onCheckedChange = { },
|
||||
data = data,
|
||||
enabled = false,
|
||||
)
|
||||
HorizontalDivider()
|
||||
CheckableUserRow(
|
||||
checked = true,
|
||||
onCheckedChange = { },
|
||||
data = data,
|
||||
enabled = false,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
internal fun CheckableUnresolvedUserRowPreview() = ElementThemedPreview {
|
||||
val matrixUser = aMatrixUser()
|
||||
val data = CheckableUserRowData.Unresolved(
|
||||
avatarData = matrixUser.getAvatarData(AvatarSize.UserListItem),
|
||||
id = matrixUser.userId.value,
|
||||
)
|
||||
Column {
|
||||
CheckableUserRow(
|
||||
checked = false,
|
||||
onCheckedChange = { },
|
||||
data = data,
|
||||
)
|
||||
HorizontalDivider()
|
||||
CheckableUserRow(
|
||||
checked = true,
|
||||
onCheckedChange = { },
|
||||
data = data,
|
||||
)
|
||||
HorizontalDivider()
|
||||
CheckableUserRow(
|
||||
checked = false,
|
||||
onCheckedChange = { },
|
||||
data = data,
|
||||
enabled = false,
|
||||
)
|
||||
HorizontalDivider()
|
||||
CheckableUserRow(
|
||||
checked = true,
|
||||
onCheckedChange = { },
|
||||
data = data,
|
||||
enabled = false,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:6638cb923a57c8ee4a577626bef41c87da3ad5081a6bda6b4a303f094be30bfd
|
||||
size 23181
|
||||
oid sha256:6e66e3395d8ce9b9b98ba21c99a82111f3e007e31d5845524f3c19284f478a8c
|
||||
size 23232
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:4ffb2f6bd00607dd9f84d9b9dd4014f4389d0a3dd73fea8881a867680c0aa47b
|
||||
size 22301
|
||||
oid sha256:9e0fee8d19a8522b34ec4ec3bbf8473284a01ec827aeb520f58b8df67079df53
|
||||
size 22367
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:748900111b5b9cb1235f979d889098366ed66a88e8078224ec2780feac47a2e8
|
||||
size 86365
|
||||
oid sha256:0334ad25584ed508739fefb75a44d419d3904620e957c9ffa125985532d0bc10
|
||||
size 86328
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:2fc96ed56a48c2feaaa712ce57253678d0d79f834423aa5b41315df9213b4da9
|
||||
size 26277
|
||||
oid sha256:c3128ee234cf48f37fa0432f904d2e791614d20c82c16dc639edb849b42c4fe4
|
||||
size 26348
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:a09f0d8c68fb4af7dcd239f342ec2d68b3d3af4720e27277d4bfd6e37c15541e
|
||||
size 25141
|
||||
oid sha256:4ceb2fe1dd526d36f90efe2bdcc4e4c5d407709fee053937ff8e53b760f85e0a
|
||||
size 25186
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:f38cda30a54ee8b4c4f95e6303c9cca43b06fa0ce4c2d690c992b2037537453f
|
||||
size 35986
|
||||
oid sha256:1e55a3501da2a4217a245b7e6a9527ab5963a018dfc70aa2bce62c558f88f75b
|
||||
size 36138
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:41896059efcfa8b424cd80cf93f233a263498222a8a555b6eb8cfa9a5f62d941
|
||||
size 33347
|
||||
oid sha256:4c5baa96c59c7e61f84be5e730c56a6f18b0f180fa4c2c7b9bd64e53b20d52b5
|
||||
size 33392
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:1aaf3d3282191d2e775ef8c8184ed7c56fdc34f8649e1ff8e7ad9da8b8cb4a9d
|
||||
size 35806
|
||||
oid sha256:d659a2a7be6a053aa8c4468f2e833687de20248a6b2fd9dcd4a5d47ea54df20c
|
||||
size 35913
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:7076ab247512b4b0c0e631d060e193af0f4d741e5819dcf891368b2b1f3cd890
|
||||
size 35739
|
||||
oid sha256:4ddd2c2a6bec2701d8ca8ae755d31713d5dbfcbbe30642f636f0a8ce22712996
|
||||
size 35843
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:5168d33c67566213cab7f71ee0fc71f151172dc8c5065e302249c6bd01cb751c
|
||||
size 33507
|
||||
oid sha256:6cacbc497b8211b3c18cec602e24ecca799c07790c1c6766b91c2c84556161f5
|
||||
size 32322
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:c264a1541965790ed5661a3a319e6d6a87e48cc85a95a3590d9595ad39deb760
|
||||
size 36654
|
||||
oid sha256:b8cee12ff95d1ccfce0f4445a8e32cea154d8f956cf05888129c23f3d9fe43d5
|
||||
size 36865
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:f65c369e8f8c9526910f375b1d4b7166d1025a143400c6d53f61f3ce6537d67f
|
||||
size 49858
|
||||
oid sha256:e08c52be5c9c77c5d3743522f4b2ac4d5dad5cebbaba11245202a9f0e2ca1ccb
|
||||
size 50275
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:e89d557862545f7468cefd88593d0995c813dc8871a92c94552ce26f9ae4651b
|
||||
size 33066
|
||||
oid sha256:c54ea0c5ffdb094bea1fe07208a5ed9683f7104ca9d7c85a452c5f0983aeff47
|
||||
size 33119
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:d0fa8bac7f79b1a4feb4b7e808afae0c6b897867539c234daa9faea1bf6daf6e
|
||||
size 33021
|
||||
oid sha256:bf6f825427bab3e344617e78971521a1cbbd2daaaf132334b8bd32335111c605
|
||||
size 33075
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:c8f2cc0a8cf7303aef994db2d23efb83b7a8a1c74af39dcef61ae3cfd3277c65
|
||||
size 30350
|
||||
oid sha256:144fe1c105acf228ddf28d29f141cff5eca275529e11e38877bdfc8c5a37065f
|
||||
size 29042
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:5dfc5747625a6743966a518dd693cd8c55899ca241005df8179167b1728c2589
|
||||
size 32274
|
||||
oid sha256:e7e8b50a6e456b812b0ae5a58442361d85051951979634f89148e09812c0bada
|
||||
size 32312
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:19e89d8cab891198e62951c0b08ed1318a14347795a35b5e8d94f6358c9f1964
|
||||
size 47052
|
||||
oid sha256:3105639c450f6f867cf5592c2cc5c029f20d01c31273ac2eb7680d8d9548f1c0
|
||||
size 47447
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:44096d9f97614b5e84cf5dd0d966f674b47b50da065daaaa4a70476b3ecdcf91
|
||||
size 33908
|
||||
oid sha256:8cea32585e950298058338f5a195ac4a4699f04aa60adb5d794da26dbe43a64f
|
||||
size 33848
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:605ab2a5cc9b2b10c09908a2f9dd3629f1731742909936ae180c74855e32eed8
|
||||
size 37695
|
||||
oid sha256:96db0b988e47a0e3cbaae3982561053f4c7a68a3d0f475c2723619cfce8f891a
|
||||
size 37959
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:ccab888ebe0e5ed94f2cb00117e3d69a888ad656b985768dc08e7fddacdceee7
|
||||
size 34011
|
||||
oid sha256:c4b244008a0a0946605641e26ac1ee2b2ed0d689af8e45223458cd06d54970cf
|
||||
size 33905
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:1510614f000837b743b847e616f7e40e86a259846058c1c0ea7a41233392117b
|
||||
size 41239
|
||||
oid sha256:60dbf7ac48dc77b79f80c15ea811381ee5885e2c5f702e522e789f16672c694b
|
||||
size 41164
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:ccab888ebe0e5ed94f2cb00117e3d69a888ad656b985768dc08e7fddacdceee7
|
||||
size 34011
|
||||
oid sha256:c4b244008a0a0946605641e26ac1ee2b2ed0d689af8e45223458cd06d54970cf
|
||||
size 33905
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:1510614f000837b743b847e616f7e40e86a259846058c1c0ea7a41233392117b
|
||||
size 41239
|
||||
oid sha256:60dbf7ac48dc77b79f80c15ea811381ee5885e2c5f702e522e789f16672c694b
|
||||
size 41164
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:44096d9f97614b5e84cf5dd0d966f674b47b50da065daaaa4a70476b3ecdcf91
|
||||
size 33908
|
||||
oid sha256:8cea32585e950298058338f5a195ac4a4699f04aa60adb5d794da26dbe43a64f
|
||||
size 33848
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:ef6d0fe324b2f622732cfbda77b55bd5debaf058eadd278f820a23de7c164103
|
||||
size 31553
|
||||
oid sha256:ab4197e309e72fb1e486210ef92655b18814eb1f21e9cbcb1e6e60ec7fc8627a
|
||||
size 31463
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:4af656ee89190d8b818e2dfa1c260afca60c4b5f3e24ec6f4d30fe0cd2ed267d
|
||||
size 34758
|
||||
oid sha256:103e9412a0a04a5c98290ef51670fbcfaf64b6d76e62fcecf486cb777c4373fa
|
||||
size 35088
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:fddde23759a830f0e0ed9bab9d1754970ce2b2e8ffa78c02c458b090dbbb76aa
|
||||
size 30719
|
||||
oid sha256:41b7d2e99dc922af5990a87bea479cefa1da0a274e373d88b3505df0b13ff05a
|
||||
size 30622
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:c78c34bc3f0df68b9130263ac5d35ac1c8b6f98a0e9aa0316461b473653dedc5
|
||||
size 36730
|
||||
oid sha256:052a42e15095538d05231b73fd7f5259bd3782d1b280ef0726a0445a9dd719ad
|
||||
size 36640
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:fddde23759a830f0e0ed9bab9d1754970ce2b2e8ffa78c02c458b090dbbb76aa
|
||||
size 30719
|
||||
oid sha256:41b7d2e99dc922af5990a87bea479cefa1da0a274e373d88b3505df0b13ff05a
|
||||
size 30622
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:c78c34bc3f0df68b9130263ac5d35ac1c8b6f98a0e9aa0316461b473653dedc5
|
||||
size 36730
|
||||
oid sha256:052a42e15095538d05231b73fd7f5259bd3782d1b280ef0726a0445a9dd719ad
|
||||
size 36640
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:ef6d0fe324b2f622732cfbda77b55bd5debaf058eadd278f820a23de7c164103
|
||||
size 31553
|
||||
oid sha256:ab4197e309e72fb1e486210ef92655b18814eb1f21e9cbcb1e6e60ec7fc8627a
|
||||
size 31463
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:3a3cb6371045e712f494857cd35268724936558550e7dc41344581fd2a1936c3
|
||||
size 31012
|
||||
oid sha256:1ed4d3d6c3148ea14e1680c9f7c3af86bc5158a3ffa8ce3f2b62283983bc91f4
|
||||
size 31166
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:ee41b24ea7b2ca8b7c9fa568c0a66537ec9d39c7fc80bf99bfda1592156ec174
|
||||
size 29041
|
||||
oid sha256:1a5a64aab614f944cef77887b0c9e848e4273d8e2acf0561aafd28a064767937
|
||||
size 29319
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:ffb71a4dbd1324963ead4b188986a6c90dc6755a5d49e520c5aa74d3cce00384
|
||||
size 24290
|
||||
oid sha256:ca0abf8c339aeb7ccaf6e6dd4482288bae180319dbf9f5c25b5ec65011c6838b
|
||||
size 24211
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:132d77ede5c96774b958b79ec3143c99a66734b04659796351a7b127ab3e2243
|
||||
size 22852
|
||||
oid sha256:aa8dfdcdacf72109ab7b0944e3af0f7cbdd6ae2ad42429128f0885483baed011
|
||||
size 22630
|
||||
|
|
|
|||
|
|
@ -1,3 +0,0 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:2d91c6228c80d1d38217e557552e18e64494a94d284de8702d07cc3793150406
|
||||
size 29177
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:eeb5b50675e186318458d0900b2d3872ec52710df8e25ba7b633a4be7e13c8da
|
||||
size 28196
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:35d63106802f7bce6ddc7ae56a2b206120e9eba1459169480a10bcc5a0d3f9e3
|
||||
size 29334
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:3e4c742ac4907f79f5830f2fed5fbacc4ae352e24fcf7e15b75f3f3d8ce85ab2
|
||||
size 27151
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:9ffaad9291e2a8bb3168b08365faac8417a77dbe1e39e94cd4f1d7dfb12ef7e4
|
||||
size 54838
|
||||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:3dd3995ea7bdf218f55d2883fade50c29558d2ed2faca318c8d18a0eb7f06a34
|
||||
size 116197
|
||||
oid sha256:85ead49e9a818ddc9b337e8386b78d80dcb1723e8f77cb8fe4ce5278680eb6a9
|
||||
size 116251
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue