Add 'unencrypted room' badges and labels (#4445)

* Add 'unencrypted room' icon and label to composer

* Modify colors for room details screen info labels

* Add exception to Konsist's preview check

* Update screenshots

---------

Co-authored-by: ElementBot <android@element.io>
This commit is contained in:
Jorge Martin Espinosa 2025-03-25 12:26:25 +01:00 committed by GitHub
parent 56683259d9
commit bb97015e59
113 changed files with 493 additions and 196 deletions

View file

@ -73,7 +73,7 @@ class AttachmentsPreviewPresenter @AssistedInject constructor(
val markdownTextEditorState = rememberMarkdownTextEditorState(initialText = null, initialFocus = false) val markdownTextEditorState = rememberMarkdownTextEditorState(initialText = null, initialFocus = false)
val textEditorState by rememberUpdatedState( val textEditorState by rememberUpdatedState(
TextEditorState.Markdown(markdownTextEditorState) TextEditorState.Markdown(markdownTextEditorState, isRoomEncrypted = null)
) )
val ongoingSendAttachmentJob = remember { mutableStateOf<Job?>(null) } val ongoingSendAttachmentJob = remember { mutableStateOf<Job?>(null) }

View file

@ -141,6 +141,8 @@ class MessageComposerPresenter @AssistedInject constructor(
override fun present(): MessageComposerState { override fun present(): MessageComposerState {
val localCoroutineScope = rememberCoroutineScope() val localCoroutineScope = rememberCoroutineScope()
val roomInfo by room.roomInfoFlow.collectAsState()
val richTextEditorState = richTextEditorStateFactory.remember() val richTextEditorState = richTextEditorStateFactory.remember()
if (isTesting) { if (isTesting) {
richTextEditorState.isReadyToProcessActions = true richTextEditorState.isReadyToProcessActions = true
@ -242,9 +244,9 @@ class MessageComposerPresenter @AssistedInject constructor(
val textEditorState by rememberUpdatedState( val textEditorState by rememberUpdatedState(
if (showTextFormatting) { if (showTextFormatting) {
TextEditorState.Rich(richTextEditorState) TextEditorState.Rich(richTextEditorState, roomInfo.isEncrypted == true)
} else { } else {
TextEditorState.Markdown(markdownTextEditorState) TextEditorState.Markdown(markdownTextEditorState, roomInfo.isEncrypted == true)
} }
) )

View file

@ -469,14 +469,14 @@ private fun RoomBadge.toMatrixBadgeData(): MatrixBadgeAtom.MatrixBadgeData {
MatrixBadgeAtom.MatrixBadgeData( MatrixBadgeAtom.MatrixBadgeData(
text = stringResource(R.string.screen_room_details_badge_not_encrypted), text = stringResource(R.string.screen_room_details_badge_not_encrypted),
icon = CompoundIcons.LockOff(), icon = CompoundIcons.LockOff(),
type = MatrixBadgeAtom.Type.Neutral, type = MatrixBadgeAtom.Type.Info,
) )
} }
RoomBadge.PUBLIC -> { RoomBadge.PUBLIC -> {
MatrixBadgeAtom.MatrixBadgeData( MatrixBadgeAtom.MatrixBadgeData(
text = stringResource(R.string.screen_room_details_badge_public), text = stringResource(R.string.screen_room_details_badge_public),
icon = CompoundIcons.Public(), icon = CompoundIcons.Public(),
type = MatrixBadgeAtom.Type.Neutral, type = MatrixBadgeAtom.Type.Info,
) )
} }
} }

View file

@ -14,6 +14,8 @@ import io.element.android.compound.tokens.generated.CompoundIcons
import io.element.android.libraries.designsystem.components.Badge import io.element.android.libraries.designsystem.components.Badge
import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.preview.PreviewsDayNight
import io.element.android.libraries.designsystem.theme.badgeInfoBackgroundColor
import io.element.android.libraries.designsystem.theme.badgeInfoContentColor
import io.element.android.libraries.designsystem.theme.badgeNegativeBackgroundColor import io.element.android.libraries.designsystem.theme.badgeNegativeBackgroundColor
import io.element.android.libraries.designsystem.theme.badgeNegativeContentColor import io.element.android.libraries.designsystem.theme.badgeNegativeContentColor
import io.element.android.libraries.designsystem.theme.badgeNeutralBackgroundColor import io.element.android.libraries.designsystem.theme.badgeNeutralBackgroundColor
@ -31,7 +33,8 @@ object MatrixBadgeAtom {
enum class Type { enum class Type {
Positive, Positive,
Neutral, Neutral,
Negative Negative,
Info,
} }
@Composable @Composable
@ -42,16 +45,19 @@ object MatrixBadgeAtom {
Type.Positive -> ElementTheme.colors.badgePositiveBackgroundColor Type.Positive -> ElementTheme.colors.badgePositiveBackgroundColor
Type.Neutral -> ElementTheme.colors.badgeNeutralBackgroundColor Type.Neutral -> ElementTheme.colors.badgeNeutralBackgroundColor
Type.Negative -> ElementTheme.colors.badgeNegativeBackgroundColor Type.Negative -> ElementTheme.colors.badgeNegativeBackgroundColor
Type.Info -> ElementTheme.colors.badgeInfoBackgroundColor
} }
val textColor = when (data.type) { val textColor = when (data.type) {
Type.Positive -> ElementTheme.colors.badgePositiveContentColor Type.Positive -> ElementTheme.colors.badgePositiveContentColor
Type.Neutral -> ElementTheme.colors.badgeNeutralContentColor Type.Neutral -> ElementTheme.colors.badgeNeutralContentColor
Type.Negative -> ElementTheme.colors.badgeNegativeContentColor Type.Negative -> ElementTheme.colors.badgeNegativeContentColor
Type.Info -> ElementTheme.colors.badgeInfoContentColor
} }
val iconColor = when (data.type) { val iconColor = when (data.type) {
Type.Positive -> ElementTheme.colors.iconSuccessPrimary Type.Positive -> ElementTheme.colors.iconSuccessPrimary
Type.Neutral -> ElementTheme.colors.iconSecondary Type.Neutral -> ElementTheme.colors.iconSecondary
Type.Negative -> ElementTheme.colors.iconCriticalPrimary Type.Negative -> ElementTheme.colors.iconCriticalPrimary
Type.Info -> ElementTheme.colors.iconInfoPrimary
} }
Badge( Badge(
text = data.text, text = data.text,
@ -98,3 +104,15 @@ internal fun MatrixBadgeAtomNegativePreview() = ElementPreview {
) )
) )
} }
@PreviewsDayNight
@Composable
internal fun MatrixBadgeAtomInfoPreview() = ElementPreview {
MatrixBadgeAtom.View(
MatrixBadgeAtom.MatrixBadgeData(
text = "Not encrypted",
icon = CompoundIcons.LockOff(),
type = MatrixBadgeAtom.Type.Info,
)
)
}

View file

@ -165,6 +165,14 @@ val SemanticColors.badgeNegativeBackgroundColor
val SemanticColors.badgeNegativeContentColor val SemanticColors.badgeNegativeContentColor
get() = if (isLight) LightColorTokens.colorRed1100 else DarkColorTokens.colorRed1100 get() = if (isLight) LightColorTokens.colorRed1100 else DarkColorTokens.colorRed1100
@OptIn(CoreColorToken::class)
val SemanticColors.badgeInfoBackgroundColor
get() = if (isLight) LightColorTokens.colorAlphaBlue300 else DarkColorTokens.colorAlphaBlue300
@OptIn(CoreColorToken::class)
val SemanticColors.badgeInfoContentColor
get() = if (isLight) LightColorTokens.colorBlue1100 else DarkColorTokens.colorBlue1100
@OptIn(CoreColorToken::class) @OptIn(CoreColorToken::class)
val SemanticColors.pinnedMessageBannerIndicator val SemanticColors.pinnedMessageBannerIndicator
get() = if (isLight) LightColorTokens.colorAlphaGray600 else DarkColorTokens.colorAlphaGray600 get() = if (isLight) LightColorTokens.colorAlphaGray600 else DarkColorTokens.colorAlphaGray600

View file

@ -7,13 +7,13 @@
package io.element.android.libraries.textcomposer package io.element.android.libraries.textcomposer
import android.content.res.Configuration
import android.net.Uri import android.net.Uri
import androidx.compose.foundation.background import androidx.compose.foundation.background
import androidx.compose.foundation.border import androidx.compose.foundation.border
import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.BoxScope
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.IntrinsicSize import androidx.compose.foundation.layout.IntrinsicSize
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
@ -37,14 +37,18 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.clip
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.tooling.preview.PreviewParameter
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.components.media.createFakeWaveform import io.element.android.libraries.designsystem.components.media.createFakeWaveform
import io.element.android.libraries.designsystem.preview.DAY_MODE_NAME
import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.preview.NIGHT_MODE_NAME
import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.preview.PreviewsDayNight
import io.element.android.libraries.designsystem.theme.components.CircularProgressIndicator import io.element.android.libraries.designsystem.theme.components.CircularProgressIndicator
import io.element.android.libraries.designsystem.theme.components.HorizontalDivider
import io.element.android.libraries.designsystem.theme.components.Icon import io.element.android.libraries.designsystem.theme.components.Icon
import io.element.android.libraries.designsystem.theme.components.IconColorButton import io.element.android.libraries.designsystem.theme.components.IconColorButton
import io.element.android.libraries.designsystem.theme.components.Text import io.element.android.libraries.designsystem.theme.components.Text
@ -281,6 +285,7 @@ fun TextComposer(
if (showTextFormatting && textFormattingOptions != null) { if (showTextFormatting && textFormattingOptions != null) {
TextFormattingLayout( TextFormattingLayout(
modifier = layoutModifier, modifier = layoutModifier,
isRoomEncrypted = state.isRoomEncrypted,
textInput = textInput, textInput = textInput,
dismissTextFormattingButton = { dismissTextFormattingButton = {
IconColorButton( IconColorButton(
@ -295,6 +300,7 @@ fun TextComposer(
StandardLayout( StandardLayout(
voiceMessageState = voiceMessageState, voiceMessageState = voiceMessageState,
enableVoiceMessages = enableVoiceMessages, enableVoiceMessages = enableVoiceMessages,
isRoomEncrypted = state.isRoomEncrypted,
modifier = layoutModifier, modifier = layoutModifier,
composerOptionsButton = composerOptionsButton, composerOptionsButton = composerOptionsButton,
textInput = textInput, textInput = textInput,
@ -330,6 +336,7 @@ fun TextComposer(
private fun StandardLayout( private fun StandardLayout(
voiceMessageState: VoiceMessageState, voiceMessageState: VoiceMessageState,
enableVoiceMessages: Boolean, enableVoiceMessages: Boolean,
isRoomEncrypted: Boolean?,
textInput: @Composable () -> Unit, textInput: @Composable () -> Unit,
composerOptionsButton: @Composable () -> Unit, composerOptionsButton: @Composable () -> Unit,
voiceRecording: @Composable () -> Unit, voiceRecording: @Composable () -> Unit,
@ -337,58 +344,85 @@ private fun StandardLayout(
endButton: @Composable () -> Unit, endButton: @Composable () -> Unit,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
) { ) {
Row( Column(modifier = modifier) {
modifier = modifier, if (isRoomEncrypted == false) {
verticalAlignment = Alignment.Bottom, Spacer(Modifier.height(16.dp))
) { NotEncryptedBadge()
if (enableVoiceMessages && voiceMessageState !is VoiceMessageState.Idle) { Spacer(Modifier.height(4.dp))
if (voiceMessageState is VoiceMessageState.Preview || voiceMessageState is VoiceMessageState.Recording) { }
Row(verticalAlignment = Alignment.Bottom) {
if (enableVoiceMessages && voiceMessageState !is VoiceMessageState.Idle) {
if (voiceMessageState is VoiceMessageState.Preview || voiceMessageState is VoiceMessageState.Recording) {
Box(
modifier = Modifier
.padding(bottom = 5.dp, top = 5.dp, end = 3.dp, start = 3.dp)
.size(48.dp),
contentAlignment = Alignment.Center,
) {
voiceDeleteButton()
}
} else {
Spacer(modifier = Modifier.width(16.dp))
}
Box( Box(
modifier = Modifier modifier = Modifier
.padding(bottom = 5.dp, top = 5.dp, end = 3.dp, start = 3.dp) .padding(bottom = 8.dp, top = 8.dp)
.size(48.dp), .weight(1f)
contentAlignment = Alignment.Center,
) { ) {
voiceDeleteButton() voiceRecording()
} }
} else { } else {
Spacer(modifier = Modifier.width(16.dp)) Box(
Modifier
.padding(bottom = 5.dp, top = 5.dp, start = 3.dp)
) {
composerOptionsButton()
}
Box(
modifier = Modifier
.padding(bottom = 8.dp, top = 8.dp)
.weight(1f)
) {
textInput()
}
} }
Box(
modifier = Modifier
.padding(bottom = 8.dp, top = 8.dp)
.weight(1f)
) {
voiceRecording()
}
} else {
Box( Box(
Modifier Modifier
.padding(bottom = 5.dp, top = 5.dp, start = 3.dp) .padding(bottom = 5.dp, top = 5.dp, end = 6.dp, start = 6.dp)
.size(48.dp),
contentAlignment = Alignment.Center,
) { ) {
composerOptionsButton() endButton()
} }
Box(
modifier = Modifier
.padding(bottom = 8.dp, top = 8.dp)
.weight(1f)
) {
textInput()
}
}
Box(
Modifier
.padding(bottom = 5.dp, top = 5.dp, end = 6.dp, start = 6.dp)
.size(48.dp),
contentAlignment = Alignment.Center,
) {
endButton()
} }
} }
} }
@Composable
private fun NotEncryptedBadge() {
Row(
modifier = Modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.Center,
verticalAlignment = Alignment.CenterVertically,
) {
Icon(
modifier = Modifier.size(16.dp),
imageVector = CompoundIcons.LockOff(),
contentDescription = null,
tint = ElementTheme.colors.iconInfoPrimary,
)
Spacer(Modifier.width(4.dp))
Text(
text = stringResource(CommonStrings.common_not_encrypted),
style = ElementTheme.typography.fontBodySmRegular,
color = ElementTheme.colors.textSecondary,
)
}
}
@Composable @Composable
private fun TextFormattingLayout( private fun TextFormattingLayout(
isRoomEncrypted: Boolean?,
textInput: @Composable () -> Unit, textInput: @Composable () -> Unit,
dismissTextFormattingButton: @Composable () -> Unit, dismissTextFormattingButton: @Composable () -> Unit,
textFormatting: @Composable () -> Unit, textFormatting: @Composable () -> Unit,
@ -399,6 +433,10 @@ private fun TextFormattingLayout(
modifier = modifier.padding(vertical = 4.dp), modifier = modifier.padding(vertical = 4.dp),
verticalArrangement = Arrangement.spacedBy(4.dp), verticalArrangement = Arrangement.spacedBy(4.dp),
) { ) {
if (isRoomEncrypted == false) {
NotEncryptedBadge()
Spacer(Modifier.height(8.dp))
}
Box( Box(
modifier = Modifier modifier = Modifier
.weight(1f) .weight(1f)
@ -438,7 +476,7 @@ private fun TextInputBox(
placeholder: String, placeholder: String,
showPlaceholder: Boolean, showPlaceholder: Boolean,
subcomposing: Boolean, subcomposing: Boolean,
textInput: @Composable BoxScope.() -> Unit, textInput: @Composable () -> Unit,
) { ) {
val bgColor = ElementTheme.colors.bgSubtleSecondary val bgColor = ElementTheme.colors.bgSubtleSecondary
val borderColor = ElementTheme.colors.borderDisabled val borderColor = ElementTheme.colors.borderDisabled
@ -539,24 +577,26 @@ private fun TextInput(
} }
} }
private fun aTextEditorStateMarkdownList() = persistentListOf( private fun aTextEditorStateMarkdownList(isRoomEncrypted: Boolean? = null) = persistentListOf(
aTextEditorStateMarkdown(initialText = "", initialFocus = true), aTextEditorStateMarkdown(initialText = "", initialFocus = true, isRoomEncrypted = isRoomEncrypted),
aTextEditorStateMarkdown(initialText = "A message", initialFocus = true), aTextEditorStateMarkdown(initialText = "A message", initialFocus = true, isRoomEncrypted = isRoomEncrypted),
aTextEditorStateMarkdown( aTextEditorStateMarkdown(
initialText = "A message\nWith several lines\nTo preview larger textfields and long lines with overflow", initialText = "A message\nWith several lines\nTo preview larger textfields and long lines with overflow",
initialFocus = true, initialFocus = true,
isRoomEncrypted = isRoomEncrypted,
), ),
aTextEditorStateMarkdown(initialText = "A message without focus", initialFocus = false), aTextEditorStateMarkdown(initialText = "A message without focus", initialFocus = false, isRoomEncrypted = isRoomEncrypted),
) )
private fun aTextEditorStateRichList() = persistentListOf( private fun aTextEditorStateRichList(isRoomEncrypted: Boolean? = null) = persistentListOf(
aTextEditorStateRich(initialFocus = true), aTextEditorStateRich(initialFocus = true, isRoomEncrypted = isRoomEncrypted),
aTextEditorStateRich(initialText = "A message", initialFocus = true), aTextEditorStateRich(initialText = "A message", initialFocus = true, isRoomEncrypted = isRoomEncrypted),
aTextEditorStateRich( aTextEditorStateRich(
initialText = "A message\nWith several lines\nTo preview larger textfields and long lines with overflow", initialText = "A message\nWith several lines\nTo preview larger textfields and long lines with overflow",
initialFocus = true initialFocus = true,
isRoomEncrypted = isRoomEncrypted,
), ),
aTextEditorStateRich(initialText = "A message without focus", initialFocus = false), aTextEditorStateRich(initialText = "A message without focus", initialFocus = false, isRoomEncrypted = isRoomEncrypted),
) )
@PreviewsDayNight @PreviewsDayNight
@ -574,6 +614,21 @@ internal fun TextComposerSimplePreview() = ElementPreview {
} }
} }
@PreviewsDayNight
@Composable
internal fun TextComposerSimpleNotEncryptedPreview() = ElementPreview {
PreviewColumn(
items = aTextEditorStateMarkdownList(isRoomEncrypted = false),
) { _, textEditorState ->
ATextComposer(
state = textEditorState,
voiceMessageState = VoiceMessageState.Idle,
composerMode = MessageComposerMode.Normal,
enableVoiceMessages = true,
)
}
}
@PreviewsDayNight @PreviewsDayNight
@Composable @Composable
internal fun TextComposerFormattingPreview() = ElementPreview { internal fun TextComposerFormattingPreview() = ElementPreview {
@ -590,6 +645,22 @@ internal fun TextComposerFormattingPreview() = ElementPreview {
} }
} }
@PreviewsDayNight
@Composable
internal fun TextComposerFormattingNotEncryptedPreview() = ElementPreview {
PreviewColumn(
items = aTextEditorStateRichList(isRoomEncrypted = false)
) { _, textEditorState ->
ATextComposer(
state = textEditorState,
voiceMessageState = VoiceMessageState.Idle,
showTextFormatting = true,
composerMode = MessageComposerMode.Normal,
enableVoiceMessages = true,
)
}
}
@PreviewsDayNight @PreviewsDayNight
@Composable @Composable
internal fun TextComposerEditPreview() = ElementPreview { internal fun TextComposerEditPreview() = ElementPreview {
@ -605,6 +676,21 @@ internal fun TextComposerEditPreview() = ElementPreview {
} }
} }
@PreviewsDayNight
@Composable
internal fun TextComposerEditNotEncryptedPreview() = ElementPreview {
PreviewColumn(
items = aTextEditorStateRichList(isRoomEncrypted = false)
) { _, textEditorState ->
ATextComposer(
state = textEditorState,
voiceMessageState = VoiceMessageState.Idle,
composerMode = aMessageComposerModeEdit(),
enableVoiceMessages = true,
)
}
}
@PreviewsDayNight @PreviewsDayNight
@Composable @Composable
internal fun TextComposerEditCaptionPreview() = ElementPreview { internal fun TextComposerEditCaptionPreview() = ElementPreview {
@ -674,6 +760,31 @@ internal fun TextComposerReplyPreview(@PreviewParameter(InReplyToDetailsProvider
} }
} }
@Preview(
name = DAY_MODE_NAME,
heightDp = 800,
)
@Preview(
name = NIGHT_MODE_NAME,
uiMode = Configuration.UI_MODE_NIGHT_YES,
heightDp = 800,
)
@Composable
internal fun TextComposerReplyNotEncryptedPreview(@PreviewParameter(InReplyToDetailsProvider::class) inReplyToDetails: InReplyToDetails) = ElementPreview {
PreviewColumn(
items = aTextEditorStateRichList(isRoomEncrypted = false)
) { _, textEditorState ->
ATextComposer(
state = textEditorState,
voiceMessageState = VoiceMessageState.Idle,
composerMode = aMessageComposerModeReply(
replyToDetails = inReplyToDetails,
),
enableVoiceMessages = true,
)
}
}
@PreviewsDayNight @PreviewsDayNight
@Composable @Composable
internal fun TextComposerCaptionPreview() = ElementPreview { internal fun TextComposerCaptionPreview() = ElementPreview {
@ -734,6 +845,47 @@ internal fun TextComposerVoicePreview() = ElementPreview {
} }
} }
@PreviewsDayNight
@Composable
internal fun TextComposerVoiceNotEncryptedPreview() = ElementPreview {
PreviewColumn(
items = persistentListOf(
VoiceMessageState.Recording(61.seconds, createFakeWaveform()),
VoiceMessageState.Preview(
isSending = false,
isPlaying = false,
showCursor = false,
waveform = createFakeWaveform(),
time = 0.seconds,
playbackProgress = 0.0f
),
VoiceMessageState.Preview(
isSending = false,
isPlaying = true,
showCursor = true,
waveform = createFakeWaveform(),
time = 3.seconds,
playbackProgress = 0.2f
),
VoiceMessageState.Preview(
isSending = true,
isPlaying = false,
showCursor = false,
waveform = createFakeWaveform(),
time = 61.seconds,
playbackProgress = 0.0f
),
)
) { _, voiceMessageState ->
ATextComposer(
state = aTextEditorStateRich(initialFocus = true, isRoomEncrypted = false),
voiceMessageState = voiceMessageState,
composerMode = MessageComposerMode.Normal,
enableVoiceMessages = true,
)
}
}
@Composable @Composable
private fun <T> PreviewColumn( private fun <T> PreviewColumn(
items: ImmutableList<T>, items: ImmutableList<T>,
@ -741,6 +893,7 @@ private fun <T> PreviewColumn(
) { ) {
Column { Column {
items.forEachIndexed { index, item -> items.forEachIndexed { index, item ->
HorizontalDivider()
Box( Box(
modifier = Modifier.height(IntrinsicSize.Min) modifier = Modifier.height(IntrinsicSize.Min)
) { ) {

View file

@ -12,12 +12,14 @@ import io.element.android.wysiwyg.compose.RichTextEditorState
fun aTextEditorStateMarkdown( fun aTextEditorStateMarkdown(
initialText: String? = "", initialText: String? = "",
initialFocus: Boolean = false, initialFocus: Boolean = false,
isRoomEncrypted: Boolean? = null,
): TextEditorState { ): TextEditorState {
return TextEditorState.Markdown( return TextEditorState.Markdown(
aMarkdownTextEditorState( aMarkdownTextEditorState(
initialText = initialText, initialText = initialText,
initialFocus = initialFocus, initialFocus = initialFocus,
) ),
isRoomEncrypted = isRoomEncrypted,
) )
} }
@ -36,6 +38,7 @@ fun aTextEditorStateRich(
initialHtml: String = initialText, initialHtml: String = initialText,
initialMarkdown: String = initialText, initialMarkdown: String = initialText,
initialFocus: Boolean = false, initialFocus: Boolean = false,
isRoomEncrypted: Boolean? = null,
): TextEditorState { ): TextEditorState {
return TextEditorState.Rich( return TextEditorState.Rich(
aRichTextEditorState( aRichTextEditorState(
@ -43,7 +46,8 @@ fun aTextEditorStateRich(
initialHtml = initialHtml, initialHtml = initialHtml,
initialMarkdown = initialMarkdown, initialMarkdown = initialMarkdown,
initialFocus = initialFocus, initialFocus = initialFocus,
) ),
isRoomEncrypted = isRoomEncrypted,
) )
} }

View file

@ -13,12 +13,16 @@ import io.element.android.wysiwyg.compose.RichTextEditorState
@Immutable @Immutable
sealed interface TextEditorState { sealed interface TextEditorState {
val isRoomEncrypted: Boolean?
data class Markdown( data class Markdown(
val state: MarkdownTextEditorState, val state: MarkdownTextEditorState,
override val isRoomEncrypted: Boolean?,
) : TextEditorState ) : TextEditorState
data class Rich( data class Rich(
val richTextEditorState: RichTextEditorState val richTextEditorState: RichTextEditorState,
override val isRoomEncrypted: Boolean?,
) : TextEditorState ) : TextEditorState
fun messageHtml(): String? = when (this) { fun messageHtml(): String? = when (this) {

View file

@ -75,6 +75,7 @@ class KonsistPreviewTest {
"MatrixBadgeAtomPositivePreview", "MatrixBadgeAtomPositivePreview",
"MatrixBadgeAtomNeutralPreview", "MatrixBadgeAtomNeutralPreview",
"MatrixBadgeAtomNegativePreview", "MatrixBadgeAtomNegativePreview",
"MatrixBadgeAtomInfoPreview",
"MentionSpanPreview", "MentionSpanPreview",
"MessageComposerViewVoicePreview", "MessageComposerViewVoicePreview",
"MessagesReactionButtonAddPreview", "MessagesReactionButtonAddPreview",
@ -106,14 +107,19 @@ class KonsistPreviewTest {
"TextComposerAddCaptionPreview", "TextComposerAddCaptionPreview",
"TextComposerCaptionPreview", "TextComposerCaptionPreview",
"TextComposerEditPreview", "TextComposerEditPreview",
"TextComposerEditNotEncryptedPreview",
"TextComposerEditCaptionPreview", "TextComposerEditCaptionPreview",
"TextComposerFormattingPreview", "TextComposerFormattingPreview",
"TextComposerFormattingNotEncryptedPreview",
"TextComposerLinkDialogCreateLinkPreview", "TextComposerLinkDialogCreateLinkPreview",
"TextComposerLinkDialogCreateLinkWithoutTextPreview", "TextComposerLinkDialogCreateLinkWithoutTextPreview",
"TextComposerLinkDialogEditLinkPreview", "TextComposerLinkDialogEditLinkPreview",
"TextComposerReplyPreview", "TextComposerReplyPreview",
"TextComposerReplyNotEncryptedPreview",
"TextComposerSimplePreview", "TextComposerSimplePreview",
"TextComposerSimpleNotEncryptedPreview",
"TextComposerVoicePreview", "TextComposerVoicePreview",
"TextComposerVoiceNotEncryptedPreview",
"TimelineImageWithCaptionRowPreview", "TimelineImageWithCaptionRowPreview",
"TimelineItemEventRowForDirectRoomPreview", "TimelineItemEventRowForDirectRoomPreview",
"TimelineItemEventRowShieldPreview", "TimelineItemEventRowShieldPreview",

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:56c1b08295aa57b8f6a23929ff65481e8e3b4419a72a322c2c5778fdb501720d oid sha256:cb68bc3937183f353a87f193a34847676977cb2a366cc03fcede0e059e6f8f4f
size 42565 size 42658

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:a53c076b1564cee6c9ee4af2260e821a835f9bbb4a45d72144102e88ccfb54e1 oid sha256:3a863908ebec818d64c4b8511667b192e09094c09cbfa6dd372538c831520bb2
size 41198 size 41295

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:499ab99b53faaa24a372ffd3c353e8ec60f2017db94f138857854440e1b7f9f7 oid sha256:05b48264399d0ae93be25361ff04cb01b9d9dc7168da72d266bbc58a781428cf
size 43343 size 43445

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:d8bd2c340084ffb59089fe44a4ce5c31c28eb83d830082e9f478f930e1810e4a oid sha256:21df4f150516a7113b890f3da79c96b141245384dd6b74af7376ebb5bb9054cb
size 41464 size 41555

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:6b21719f9d7a7078f468310765b7de115487f2860cc7f9e0df55bb52d64d8df0 oid sha256:2b4cb0e83e6e48d650350be4338a99eb9f82fede2829a8dc5d71d8f8cc2ecd66
size 42273 size 42366

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:789cc6a332afbc1086ddc6fb90c91056ee9a1b5bbb28edbdc89b639017d9b65f oid sha256:5b0075df788b47714d60f58aa5de5db2cf5beda4777bf54cd48769b4df6f5ae2
size 42855 size 42944

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:5e3400d75df1c13bde15394e1ab69df7657257bce86b7ac16953142ea7c61389 oid sha256:f28b78dccc4eace6d8aeb897f1eef1d00fe9e73dddf4ae4c62305f7063add2d5
size 41775 size 41868

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:cd1c6c17bb7aca2688b4c1c3f72b4d133774ca52a6dde1eef14dac9536445ebd oid sha256:a51d96a3e531140c918de3bef60b437dfd9e8f7a4cdd162b87077d96babafda9
size 32317 size 32438

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:fb20ef0455ab32e5375f24fa3588d1a837a4ed09315629e4c8b1a056a6b1ce19 oid sha256:c89d28aeacb8cf19e76ebdc784176152991ad2a2067df4adbc4e40afa315e821
size 34473 size 34581

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:66121516d3abb9b80d636e00b7de6c139f56a04a593031a6d341af977f587e78 oid sha256:91265422162edaf2b2e6c8474db8a94aec7db30427d67a7adcf7e9a30966d7f1
size 41690 size 41805

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:2005f9cf7e3d22f03e400e1b652d1eb2b3b3e834311b0f94380599a52f932f0d oid sha256:d5029ca41d5043331cb59741433c5f9232105ee5d1f65d8f6aa2570e842ece45
size 40545 size 40644

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:c41fdaa2341788494026277683590e0fe58fcc6b4c93919c77dcf29fd1e95c15 oid sha256:9e9ebe7fe8e19809489798a996f888642159200486b129cd34aa333685e0ef56
size 41752 size 41854

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:acccf3a9cb267c8effd573dc78f381f666d91b4f30438031d32a04fff98292dd oid sha256:0b1be379fac2defa3ba11db1c9ab9d0847c8245b3820648315d41e3013c0dd9d
size 42538 size 42642

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:976d4e662ce84eace4a56c95560e333365bed13d745d8641a3f5e6e6d33fb557 oid sha256:1127cde21edf3ebb251dda7ddf54a4c83ecdd0e4f7fa17c84743cbc6b35d4000
size 41478 size 41570

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:ed8020dadea9b8d25d774b1069e69b62d904a772f9b7ff5150776809f3febc30 oid sha256:2013a7c30aac9d4921bf2187b3a9d1d1329842fbee6a020d98a4cd82a9e0c5a8
size 41517 size 41619

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:564679f18d5a1c00a3e3e2882952ad590cfef5516494da36a212b04db224da46 oid sha256:b7b8b61cdbe5ec0657f4f1852d8e371a5ab4db49e30574ef701165cd52a654fa
size 43489 size 43511

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:979e78d2f35d41a7f938990e19a4bdc30cbb89dfd8158d27e8494216a19d6cf5 oid sha256:d282617bd3bb1db22842c23036e1637ae18bf66d135caca644f045dbfd2f9c8f
size 42034 size 42048

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:cbc011665f08cb1e87bbebcee1541a0850efbce86769a40325e1804f7b82f6e9 oid sha256:5db679b0fdb9fe6b7ca92ba6feec63c56075f2526d61648e323a3b96671cf34a
size 43865 size 43895

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:fb9b0223c7790fe0b5bb8a210236d18ac9c54daf7c8c3f606b96aa68c9d50b89 oid sha256:3e12057777bc343396543ea3fca1352ddd33e65ec7baaa1c672a040b86b27a20
size 42369 size 42391

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:912fde637f2b3d4fc4c7e84f290d075f491ba30170794462272ee763c1174b98 oid sha256:304074b1f15761b9a0fc2529d61ca56505e5c59d9a74ea3cea6db6dd5416783f
size 43183 size 43205

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:764e5560d1ebb7f415bc5ff830a19d3879a15741ccc9c7e6d35e0f47a594907b oid sha256:2dad2ff77ed440ab76deb90b2aa1287767f7078b4f0fd9b721d78661b891786e
size 43791 size 43813

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:398dd93176f5bb6058ccd8a3d4257bec7d14ebd2043d11c6b9f0de0108bf9b68 oid sha256:d19188df2e2b6a66be9b76edcada4dce831d8b0fb5b3e76ac2185723ccc6ec34
size 42708 size 42730

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:286ab5e4f50b6af38f001c93d78dc9c377e1b986cc6ca03d183b6c3ecea6a7ad oid sha256:c301ada1436b647871471716eb3bde5afe63b3c8375fecf065821b24b8d2bfdb
size 33092 size 33118

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:d6c037c7b1963a7f298f59edc96e502950276467d061e79be59aeebb1e7ff933 oid sha256:568a9220be25d55e801611ff7e2be2b9cb5fb4da8018d280d4c9173526e2a6bf
size 35302 size 35331

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:5d70764f1238eb95598271d784c354a4e6f84e590412402d0f3323d7f4f497ac oid sha256:122c7b535de6136219b6864bc72db43d093c10ac2991b7427a5fa1fd8a27c7ae
size 42490 size 42543

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:7408a11744f6e8a0ce9c62cca6d4d0e9b1413981bf6c56c164c879201b0d63e8 oid sha256:01e1ffd408352b307274768528095cacb54863b2ec54f6ca912b51c030acc90a
size 41456 size 41481

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:d59deaee5d608c279670104c0f3bfcb5bbda90ac9779111441053ea1b9d40d4c oid sha256:89b759add6d46fed97f7acae8f8366bb247632090b9520e50b6dde9f8fd64921
size 42658 size 42681

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:9ee8120c50d4782bad2a81ba84ae6a3e81d3b107fe31c29fb085d7a62539f802 oid sha256:61057d174a52244f032b823dc38dd2752e0ca07ae45acc185a49bc3f1808509f
size 43558 size 43588

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:2a7c9cbeb91af7f4aef327777d7e384a03f71cf433716e9209c182dfc2d12588 oid sha256:5476f3210bbd833b5f0b836e5942cb78fec6055c1cc43b35625397cc34973306
size 42458 size 42481

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:5afb1e4196d40ec39bd4f391c6c6b3a947ff0dff6ebe2e41e9896dc020cff98e oid sha256:aaa0c1addbc1df1fcbd03f961a4da66a2f1663f4aa2ff35ad65165eb3befee9a
size 42432 size 42462

View file

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:b75d304c696b92209bfe9c3564165833dd74b13ad78a33ab5d875aee94b1ed0f
size 7044

View file

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:85aabf48fd622093cf07a3810b8267ddc373a6f002a225d1f7a0e785566ece51
size 7054

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:e64de19f68dd0135905925645c646890d177a2648b68ba4c3edf1769725cfabe oid sha256:7a23ecbbee117033cefa5ddfbdf68862bc6f44bf03b9cbb2d468ffe4236f9109
size 52614 size 52673

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:32fbd5db3fe38e87e698a03347b1ee6036520ef892603d158f506c45f43e0fd2 oid sha256:3c019dc162f360869595392df03359b6333f96e98150ad3f3f65d464ba5317f7
size 51053 size 50971

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:7decfd16d70668e4f2c7951726b0b0df3d0ce740e8aae9b4ab03f3002daf10bf oid sha256:93cbe1f644c5f13d7e77f917859333b761640355e6bd8087fc4a9308fb4afc01
size 53441 size 53776

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:44f01f033eb5f18a350a5bd8ec094c7a4fc33fc4773ad74e186ce7dbc0036a38 oid sha256:58b867446d31a57350e72768449d8072d70f94203b2ec110950b302c8f1792ba
size 51765 size 51764

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:07d327321baf7b5bfc5b9e635a42438b67cd7750de746665c2a49dbf90a86385 oid sha256:2262ca89505ab3d8c896ef818830c2220aef2d0903e51ca3bab36ff63b1a6cfd
size 47512 size 47488

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:b8173c9c25b203c9ef009c2433cd8e4dc9b61ed914e885b6770254b1649d6e02 oid sha256:cf2354049558d02a1072285d58598353a65974f91702fb7f4b516d7977b03c5b
size 45976 size 46035

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:ce2d7c9518c89e18cbdeefbd19a1a4821006aedc5e94a72951e76b98ea593e4f oid sha256:8d5feff7d5b06463196a09bf065a62c9e578c15fe9bafdc6e4508fcf93bfcdba
size 52144 size 52415

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:fb92895bc75caf350a6027a34e770b67456c7fb2865fefbcf1a089b38440a4c9 oid sha256:440568a0cc345291ff16d49890bd9665af96651702f417ec016f89f6c0475dc4
size 50858 size 50833

View file

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:9e1589df371db7e489c4d8696898c44a919df001f4a30d83d2f32b92dbece2de
size 63546

View file

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:3bf77d27c4fb0f491a40c3ca532e424bbb791660d168f951d8210cc6cb2898ba
size 61205

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:e64de19f68dd0135905925645c646890d177a2648b68ba4c3edf1769725cfabe oid sha256:7a23ecbbee117033cefa5ddfbdf68862bc6f44bf03b9cbb2d468ffe4236f9109
size 52614 size 52673

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:32fbd5db3fe38e87e698a03347b1ee6036520ef892603d158f506c45f43e0fd2 oid sha256:3c019dc162f360869595392df03359b6333f96e98150ad3f3f65d464ba5317f7
size 51053 size 50971

View file

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:c86b3656e5913338c2513af8a56dc725a63d4fda9c5478f429ec684203c68115
size 64550

View file

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:1b491d682990192c54ebdae58045caab1ff653d3d6c89ca5f15e93bbb45c6fc0
size 62052

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:59ff13af2bdf76abcbc6502f9a6159871cc60ddd3d693ff50bb1ed3f3298dc1a oid sha256:d2bc5c13d2a1e100bdcd0142b7f03b458ba80d0d6ded82de1ebb1b6aa055a344
size 53921 size 53893

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:2f4896534efc9e1d1dd91e307609aaffafdc643a81ffca25ed9589ea424b2e60 oid sha256:fb2210aa87440b2e87217ff53448091078bdff658a6b36fad12cb1a57caf59e2
size 51303 size 51187

View file

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:d12f482740fbab1a9fb12bd5cdc37dc2bd03fac6d1304208b353d86bc4f558c6
size 73436

View file

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:380a1544c59d1f8cf5f73f84341686b042bab24d7d092f43f30fd36cbb85b438
size 59956

View file

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:7127c9b52895079a8837bacc7371b31b1b1fd99415157f3246ee56a4272bf39e
size 72830

View file

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:7856d79bdf5166b6b1676d6cd418a33e0b21713b8d40d02b0187363951d373c3
size 80957

View file

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:b7407ef412758b7e19e0acb3fd539d15578b4bf94c776e7e6eec7d15e1ad0a40
size 62484

View file

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:adf521b7a9e451146e13fcfd41ad3d072cfa4cdb01023cf252e39c147d9507b9
size 61354

View file

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:dfacf0126a768870f293f6f327c4d5a1379bd51e1d62da6b8953e6f76952c11d
size 67852

View file

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:9ba9b65e68427ae8f00f3075eeb671d2980c29ce904e10398bc26e3455bc641f
size 60114

View file

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:b0538f1d4753e95082434db510f8d9b90c8c05be9975729000a6ec122b1b83d1
size 60841

View file

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:30532cf8f90261dff21a23f425a2c15334713d4659be97052fe6c796651ba8e2
size 61988

View file

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:add696fa3700b07bda65546a714887a96406cdc0c883b39e8b9b3eb419d60ef5
size 68667

View file

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:d60de55c65d7225f077c084c0d345f17a4a1b9d8d8598824e7721b3ae3c53bb4
size 60385

View file

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:0b18891980733fe58d000fcfc7b34f5fa0c355a7b7dc016157f02f633a0d2593
size 71248

View file

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:771606c34e4910bb123651706304db185fd2affe48c50e780147b9ecc86e6676
size 58149

View file

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:faa783569b0b56bc6e0853860d6a3aca19bc42d6d8cab8733f365a0c4d7ec076
size 70683

View file

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:e689ed91b269984c11e5d3ff9dd8fafb3e9786585eaedb2b9bd3c0c367a8255e
size 78512

View file

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:061c17ac2134b7ae49b80eb408c49a26b8c8f9bc3d40a0094fa466f6484c4525
size 60567

View file

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:901c974b774202476d3091ed624df42549f9add3bf7a8b07bcc33fc657412b5b
size 59591

View file

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:b5fdb0fdf6af3368f21dedbdb9e2f1492e20340de1427cd537a2c38aa21a73e4
size 65871

View file

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:d3a6b63e7c35d6f64cb5cc59af99c558b0ac5ed5ce9f1de1fb78c819f156c880
size 58366

View file

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:90a6561fa8d3576d93daf1ececda3bd89fd54ede171186059ec4eabd33d09a04
size 59020

View file

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:cd32e719165a0351ad00ff7a39adb121b7ecbaa58232450d9cf41033cc93b389
size 60109

View file

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:52d06e1cc43e7e4fab868faceaec8ceab4513e99422954b859c6f38a93475487
size 66489

View file

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:97ba97045331e55b16153ac3d8d37b3ddee0f8395d0b12d270d687e5ccdb662b
size 58641

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:c45c431a00a4222d48d7ed9bea28d4b87c744c543ac34345418897f338d45bc0 oid sha256:a3dc5b4b88b11b4398777f9c19f55c760a6da33755206dc3559e8cfd5cf6bcfc
size 76396 size 76395

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:0b622bd71902638a554124a38477e7ef7fecb5a8a9a4c74fe22c291ea1b38a12 oid sha256:513851c2cfe1dd1579962b1913ad389e1cffb0570ff3572f981a780acc3da532
size 59392 size 59926

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:f7804f57fc5951d12fcf260dc9469f4ecf30ea7846feb75386fc0d45a577ab61 oid sha256:598fd33fab87e4f7095803f52af75843445863b2092130b0d423abbc8bb77c22
size 74433 size 74571

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:74d0d5797e35f8bb8d07c58826dd5c6dc485d179ffef0d32d356a0dbd0e0af2f oid sha256:314a1640f2835e5fb6adc8f2ae199f4f10ef028b6dede17681760860455b3590
size 85811 size 85742

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:7a5f9dd27972e5b5598dabb207f62bd36a6fa8c618cf9f764565b2ed8f694280 oid sha256:a1273ac2ab60a7427f676bef8eb232b53be46d47e46963c58b1a134bb482cfb6
size 62643 size 63085

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:447046861cf9c48ee6381a6d17d72d5d675b433a39df2d04a98f0d320ab3d972 oid sha256:a78d1da2ef8b469b90c06bf715b7c04e4477bc809a9fb2c74f916a8184a8d867
size 61729 size 62131

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:4a5a5d575648186710be4b466bbae6b8b7d7064be27042bdb3a575b90189d906 oid sha256:bae403a239eb103b8c24708ef8fdef3ba92f2c38a80fc16bb1611fb23fc8b2c9
size 69437 size 70019

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:c8788be00225f0547c54b9fc87a92497a86c706ae0638f3988e58518f8404ded oid sha256:c9d24dc3f0540f23d6b5511844b5b06511a757941dbf36277faff0fc5b376efd
size 59817 size 60366

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:c990db5dda7d348b61e5a917575aaacc4b1ca2110fe6bcbff51e0eb3a718a342 oid sha256:6e1a3088c752694f7260f2fd45f1b14d2449c7121609109ce93a1232ba9581a8
size 60629 size 61145

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:2cf3f968dec3e9f4bab00e3ccd91ca432dc042dd49151e27e8d5ba07d399ed3c oid sha256:39047878c1505a00ca8549ddea2f4373682bf6321eca82d92822d73d689e12c1
size 62862 size 63211

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:4b95759b9fe7bf8d8807e35d5fe576d750620d7eafcf3d17a3e3f85532048e98 oid sha256:00f12f3c347087b24cdc23fc4c82b93d2a2550c4af1026dcddbe7b22a3dcd334
size 70037 size 70522

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:3400d8a1c228da983fe9af087c38141d5c8f195541051bd250a51ac138700e7a oid sha256:6e9ed3949968e5c8653fddd929e5ebd4bf07dcd9391fab0fcb30d70146635fe1
size 60083 size 60638

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:ada8a9f61a93ce6ad58098b7e0743b23ba0ee50a6168eeeb34d55584a9796982 oid sha256:c956c860f9148891b04eba8b30e8aef29b5e430caddc5340cd51af779596e598
size 73791 size 73718

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:95648a88ce6afce734f8230a8fc1b68947a2a0889e259621f68ea376e11eb943 oid sha256:7b367679460940c258542d54316006f9391ca23a30145baca4c2191cbca80363
size 57265 size 57953

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:40245180648f6a71a7410bd7ce29cf5bef3de17afec4a9c4f2673ca9d16fa42f oid sha256:7503402391f7adaa717eeff9d83f359f37cafed3e8502271aa37350a4039de3c
size 71970 size 72010

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:bac3e0bdcc1bf5b3fca6af2bbf9aa983bb0fbc412e179bdb18badf6d5d95d4c4 oid sha256:0417f5f570680d727df49e22408f296b8cbbf4be9086f6cb9b0f0e89208ef0f3
size 83026 size 83091

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:2a89f4b6cf7529bc75a6ca5e478e0c5e5b0d1d788d4e1ab5a72039d108239a4a oid sha256:dbe2e2977ae2fd86d154c34cf59ef82b796c4ff75d69455dcae8fdb4041b2f25
size 60538 size 61122

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:6c7426edf9d3405664abc4882afc62aa77ca73004c3d167d52761b1d45ccc914 oid sha256:c221234495c789453447b12ebfca4b03e3b4cb9c381bb21a6454f54bfe8a81f5
size 59675 size 60255

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:d2178a1374d8ca42634347b9ae3ad7ec991e05af98b4503b29f3b2709c6c1bb0 oid sha256:bd04747ca75e56c63324893810f4194c84c796e9aeda0db193cb9339b331f890
size 67265 size 68015

Some files were not shown because too many files have changed in this diff Show more