Merge pull request #1934 from vector-im/feature/bma/timelineFixes
Timeline fixes
This commit is contained in:
commit
9862f7a770
33 changed files with 86 additions and 93 deletions
|
|
@ -163,8 +163,6 @@ fun TimelineItemEventRow(
|
||||||
state = state.draggableState,
|
state = state.draggableState,
|
||||||
),
|
),
|
||||||
event = event,
|
event = event,
|
||||||
showReadReceipts = showReadReceipts,
|
|
||||||
isLastOutgoingMessage = isLastOutgoingMessage,
|
|
||||||
isHighlighted = isHighlighted,
|
isHighlighted = isHighlighted,
|
||||||
interactionSource = interactionSource,
|
interactionSource = interactionSource,
|
||||||
onClick = onClick,
|
onClick = onClick,
|
||||||
|
|
@ -175,7 +173,6 @@ fun TimelineItemEventRow(
|
||||||
onReactionClicked = { emoji -> onReactionClick(emoji, event) },
|
onReactionClicked = { emoji -> onReactionClick(emoji, event) },
|
||||||
onReactionLongClicked = { emoji -> onReactionLongClick(emoji, event) },
|
onReactionLongClicked = { emoji -> onReactionLongClick(emoji, event) },
|
||||||
onMoreReactionsClicked = { onMoreReactionsClick(event) },
|
onMoreReactionsClicked = { onMoreReactionsClick(event) },
|
||||||
onReadReceiptsClicked = { onReadReceiptClick(event) },
|
|
||||||
eventSink = eventSink,
|
eventSink = eventSink,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
@ -183,8 +180,6 @@ fun TimelineItemEventRow(
|
||||||
} else {
|
} else {
|
||||||
TimelineItemEventRowContent(
|
TimelineItemEventRowContent(
|
||||||
event = event,
|
event = event,
|
||||||
showReadReceipts = showReadReceipts,
|
|
||||||
isLastOutgoingMessage = isLastOutgoingMessage,
|
|
||||||
isHighlighted = isHighlighted,
|
isHighlighted = isHighlighted,
|
||||||
interactionSource = interactionSource,
|
interactionSource = interactionSource,
|
||||||
onClick = onClick,
|
onClick = onClick,
|
||||||
|
|
@ -195,10 +190,20 @@ fun TimelineItemEventRow(
|
||||||
onReactionClicked = { emoji -> onReactionClick(emoji, event) },
|
onReactionClicked = { emoji -> onReactionClick(emoji, event) },
|
||||||
onReactionLongClicked = { emoji -> onReactionLongClick(emoji, event) },
|
onReactionLongClicked = { emoji -> onReactionLongClick(emoji, event) },
|
||||||
onMoreReactionsClicked = { onMoreReactionsClick(event) },
|
onMoreReactionsClicked = { onMoreReactionsClick(event) },
|
||||||
onReadReceiptsClicked = { onReadReceiptClick(event) },
|
|
||||||
eventSink = eventSink,
|
eventSink = eventSink,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
// Read receipts / Send state
|
||||||
|
TimelineItemReadReceiptView(
|
||||||
|
state = ReadReceiptViewState(
|
||||||
|
sendState = event.localSendState,
|
||||||
|
isLastOutgoingMessage = isLastOutgoingMessage,
|
||||||
|
receipts = event.readReceiptState.receipts,
|
||||||
|
),
|
||||||
|
showReadReceipts = showReadReceipts,
|
||||||
|
onReadReceiptsClicked = { onReadReceiptClick(event) },
|
||||||
|
modifier = Modifier.padding(top = 4.dp),
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -228,8 +233,6 @@ private fun SwipeSensitivity(
|
||||||
@Composable
|
@Composable
|
||||||
private fun TimelineItemEventRowContent(
|
private fun TimelineItemEventRowContent(
|
||||||
event: TimelineItem.Event,
|
event: TimelineItem.Event,
|
||||||
showReadReceipts: Boolean,
|
|
||||||
isLastOutgoingMessage: Boolean,
|
|
||||||
isHighlighted: Boolean,
|
isHighlighted: Boolean,
|
||||||
interactionSource: MutableInteractionSource,
|
interactionSource: MutableInteractionSource,
|
||||||
onClick: () -> Unit,
|
onClick: () -> Unit,
|
||||||
|
|
@ -238,7 +241,6 @@ private fun TimelineItemEventRowContent(
|
||||||
inReplyToClicked: () -> Unit,
|
inReplyToClicked: () -> Unit,
|
||||||
onUserDataClicked: () -> Unit,
|
onUserDataClicked: () -> Unit,
|
||||||
onReactionClicked: (emoji: String) -> Unit,
|
onReactionClicked: (emoji: String) -> Unit,
|
||||||
onReadReceiptsClicked: () -> Unit,
|
|
||||||
onReactionLongClicked: (emoji: String) -> Unit,
|
onReactionLongClicked: (emoji: String) -> Unit,
|
||||||
onMoreReactionsClicked: (event: TimelineItem.Event) -> Unit,
|
onMoreReactionsClicked: (event: TimelineItem.Event) -> Unit,
|
||||||
eventSink: (TimelineEvents) -> Unit,
|
eventSink: (TimelineEvents) -> Unit,
|
||||||
|
|
@ -259,7 +261,6 @@ private fun TimelineItemEventRowContent(
|
||||||
sender,
|
sender,
|
||||||
message,
|
message,
|
||||||
reactions,
|
reactions,
|
||||||
readReceipts,
|
|
||||||
) = createRefs()
|
) = createRefs()
|
||||||
|
|
||||||
// Sender
|
// Sender
|
||||||
|
|
@ -326,25 +327,6 @@ private fun TimelineItemEventRowContent(
|
||||||
.padding(start = if (event.isMine) 16.dp else 36.dp, end = 16.dp)
|
.padding(start = if (event.isMine) 16.dp else 36.dp, end = 16.dp)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Read receipts / Send state
|
|
||||||
TimelineItemReadReceiptView(
|
|
||||||
state = ReadReceiptViewState(
|
|
||||||
sendState = event.localSendState,
|
|
||||||
isLastOutgoingMessage = isLastOutgoingMessage,
|
|
||||||
receipts = event.readReceiptState.receipts,
|
|
||||||
),
|
|
||||||
showReadReceipts = showReadReceipts,
|
|
||||||
onReadReceiptsClicked = onReadReceiptsClicked,
|
|
||||||
modifier = Modifier
|
|
||||||
.constrainAs(readReceipts) {
|
|
||||||
if (event.reactionsState.reactions.isNotEmpty()) {
|
|
||||||
top.linkTo(reactions.bottom, margin = 4.dp)
|
|
||||||
} else {
|
|
||||||
top.linkTo(message.bottom, margin = 4.dp)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -148,7 +148,8 @@ private fun TimelineItemGroupedEventsRowContent(
|
||||||
receipts = timelineItem.aggregatedReadReceipts,
|
receipts = timelineItem.aggregatedReadReceipts,
|
||||||
),
|
),
|
||||||
showReadReceipts = true,
|
showReadReceipts = true,
|
||||||
onReadReceiptsClicked = { /* No op for group event */ })
|
onReadReceiptsClicked = onExpandGroupClick
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,8 @@
|
||||||
|
|
||||||
package io.element.android.features.messages.impl.timeline.components.group
|
package io.element.android.features.messages.impl.timeline.components.group
|
||||||
|
|
||||||
|
import androidx.compose.animation.core.animateFloatAsState
|
||||||
|
import androidx.compose.animation.core.tween
|
||||||
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
|
||||||
|
|
@ -26,6 +28,7 @@ import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||||
import androidx.compose.material3.MaterialTheme
|
import androidx.compose.material3.MaterialTheme
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.draw.clip
|
import androidx.compose.ui.draw.clip
|
||||||
|
|
@ -76,9 +79,17 @@ fun GroupHeaderView(
|
||||||
color = MaterialTheme.colorScheme.secondary,
|
color = MaterialTheme.colorScheme.secondary,
|
||||||
style = ElementTheme.typography.fontBodyMdRegular,
|
style = ElementTheme.typography.fontBodyMdRegular,
|
||||||
)
|
)
|
||||||
|
val rotation: Float by animateFloatAsState(
|
||||||
|
targetValue = if (isExpanded) 90f else 0f,
|
||||||
|
animationSpec = tween(
|
||||||
|
delayMillis = 0,
|
||||||
|
durationMillis = 300,
|
||||||
|
),
|
||||||
|
label = "chevron"
|
||||||
|
)
|
||||||
Icon(
|
Icon(
|
||||||
modifier = Modifier.rotate(if (isExpanded) 180f else 0f),
|
modifier = Modifier.rotate(rotation),
|
||||||
imageVector = CompoundIcons.ChevronDown,
|
imageVector = CompoundIcons.ChevronRight,
|
||||||
contentDescription = null,
|
contentDescription = null,
|
||||||
tint = MaterialTheme.colorScheme.secondary
|
tint = MaterialTheme.colorScheme.secondary
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,6 @@ import com.squareup.anvil.annotations.ContributesBinding
|
||||||
import io.element.android.libraries.di.SessionScope
|
import io.element.android.libraries.di.SessionScope
|
||||||
import io.element.android.libraries.eventformatter.api.RoomLastMessageFormatter
|
import io.element.android.libraries.eventformatter.api.RoomLastMessageFormatter
|
||||||
import io.element.android.libraries.eventformatter.impl.mode.RenderingMode
|
import io.element.android.libraries.eventformatter.impl.mode.RenderingMode
|
||||||
import io.element.android.libraries.matrix.api.MatrixClient
|
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.event.AudioMessageType
|
import io.element.android.libraries.matrix.api.timeline.item.event.AudioMessageType
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.event.EmoteMessageType
|
import io.element.android.libraries.matrix.api.timeline.item.event.EmoteMessageType
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.event.EventTimelineItem
|
import io.element.android.libraries.matrix.api.timeline.item.event.EventTimelineItem
|
||||||
|
|
@ -58,14 +57,13 @@ import javax.inject.Inject
|
||||||
@ContributesBinding(SessionScope::class)
|
@ContributesBinding(SessionScope::class)
|
||||||
class DefaultRoomLastMessageFormatter @Inject constructor(
|
class DefaultRoomLastMessageFormatter @Inject constructor(
|
||||||
private val sp: StringProvider,
|
private val sp: StringProvider,
|
||||||
private val matrixClient: MatrixClient,
|
|
||||||
private val roomMembershipContentFormatter: RoomMembershipContentFormatter,
|
private val roomMembershipContentFormatter: RoomMembershipContentFormatter,
|
||||||
private val profileChangeContentFormatter: ProfileChangeContentFormatter,
|
private val profileChangeContentFormatter: ProfileChangeContentFormatter,
|
||||||
private val stateContentFormatter: StateContentFormatter,
|
private val stateContentFormatter: StateContentFormatter,
|
||||||
) : RoomLastMessageFormatter {
|
) : RoomLastMessageFormatter {
|
||||||
|
|
||||||
override fun format(event: EventTimelineItem, isDmRoom: Boolean): CharSequence? {
|
override fun format(event: EventTimelineItem, isDmRoom: Boolean): CharSequence? {
|
||||||
val isOutgoing = matrixClient.isMe(event.sender)
|
val isOutgoing = event.isOwn
|
||||||
val senderDisplayName = (event.senderProfile as? ProfileTimelineDetails.Ready)?.displayName ?: event.sender.value
|
val senderDisplayName = (event.senderProfile as? ProfileTimelineDetails.Ready)?.displayName ?: event.sender.value
|
||||||
return when (val content = event.content) {
|
return when (val content = event.content) {
|
||||||
is MessageContent -> processMessageContents(content, senderDisplayName, isDmRoom)
|
is MessageContent -> processMessageContents(content, senderDisplayName, isDmRoom)
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,6 @@ import io.element.android.libraries.core.meta.BuildMeta
|
||||||
import io.element.android.libraries.di.SessionScope
|
import io.element.android.libraries.di.SessionScope
|
||||||
import io.element.android.libraries.eventformatter.api.TimelineEventFormatter
|
import io.element.android.libraries.eventformatter.api.TimelineEventFormatter
|
||||||
import io.element.android.libraries.eventformatter.impl.mode.RenderingMode
|
import io.element.android.libraries.eventformatter.impl.mode.RenderingMode
|
||||||
import io.element.android.libraries.matrix.api.MatrixClient
|
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.event.EventTimelineItem
|
import io.element.android.libraries.matrix.api.timeline.item.event.EventTimelineItem
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.event.FailedToParseMessageLikeContent
|
import io.element.android.libraries.matrix.api.timeline.item.event.FailedToParseMessageLikeContent
|
||||||
import io.element.android.libraries.matrix.api.timeline.item.event.FailedToParseStateContent
|
import io.element.android.libraries.matrix.api.timeline.item.event.FailedToParseStateContent
|
||||||
|
|
@ -42,7 +41,6 @@ import javax.inject.Inject
|
||||||
@ContributesBinding(SessionScope::class)
|
@ContributesBinding(SessionScope::class)
|
||||||
class DefaultTimelineEventFormatter @Inject constructor(
|
class DefaultTimelineEventFormatter @Inject constructor(
|
||||||
private val sp: StringProvider,
|
private val sp: StringProvider,
|
||||||
private val matrixClient: MatrixClient,
|
|
||||||
private val buildMeta: BuildMeta,
|
private val buildMeta: BuildMeta,
|
||||||
private val roomMembershipContentFormatter: RoomMembershipContentFormatter,
|
private val roomMembershipContentFormatter: RoomMembershipContentFormatter,
|
||||||
private val profileChangeContentFormatter: ProfileChangeContentFormatter,
|
private val profileChangeContentFormatter: ProfileChangeContentFormatter,
|
||||||
|
|
@ -50,7 +48,7 @@ class DefaultTimelineEventFormatter @Inject constructor(
|
||||||
) : TimelineEventFormatter {
|
) : TimelineEventFormatter {
|
||||||
|
|
||||||
override fun format(event: EventTimelineItem): CharSequence? {
|
override fun format(event: EventTimelineItem): CharSequence? {
|
||||||
val isOutgoing = matrixClient.isMe(event.sender)
|
val isOutgoing = event.isOwn
|
||||||
val senderDisplayName = (event.senderProfile as? ProfileTimelineDetails.Ready)?.displayName ?: event.sender.value
|
val senderDisplayName = (event.senderProfile as? ProfileTimelineDetails.Ready)?.displayName ?: event.sender.value
|
||||||
return when (val content = event.content) {
|
return when (val content = event.content) {
|
||||||
is RoomMembershipContent -> {
|
is RoomMembershipContent -> {
|
||||||
|
|
|
||||||
|
|
@ -75,7 +75,6 @@ class DefaultRoomLastMessageFormatterTest {
|
||||||
val stringProvider = AndroidStringProvider(context.resources)
|
val stringProvider = AndroidStringProvider(context.resources)
|
||||||
formatter = DefaultRoomLastMessageFormatter(
|
formatter = DefaultRoomLastMessageFormatter(
|
||||||
sp = AndroidStringProvider(context.resources),
|
sp = AndroidStringProvider(context.resources),
|
||||||
matrixClient = fakeMatrixClient,
|
|
||||||
roomMembershipContentFormatter = RoomMembershipContentFormatter(fakeMatrixClient, stringProvider),
|
roomMembershipContentFormatter = RoomMembershipContentFormatter(fakeMatrixClient, stringProvider),
|
||||||
profileChangeContentFormatter = ProfileChangeContentFormatter(stringProvider),
|
profileChangeContentFormatter = ProfileChangeContentFormatter(stringProvider),
|
||||||
stateContentFormatter = StateContentFormatter(stringProvider)
|
stateContentFormatter = StateContentFormatter(stringProvider)
|
||||||
|
|
@ -798,6 +797,11 @@ class DefaultRoomLastMessageFormatterTest {
|
||||||
private fun createRoomEvent(sentByYou: Boolean, senderDisplayName: String?, content: EventContent): EventTimelineItem {
|
private fun createRoomEvent(sentByYou: Boolean, senderDisplayName: String?, content: EventContent): EventTimelineItem {
|
||||||
val sender = if (sentByYou) A_USER_ID else UserId("@someone_else:domain")
|
val sender = if (sentByYou) A_USER_ID else UserId("@someone_else:domain")
|
||||||
val profile = ProfileTimelineDetails.Ready(senderDisplayName, false, null)
|
val profile = ProfileTimelineDetails.Ready(senderDisplayName, false, null)
|
||||||
return anEventTimelineItem(content = content, senderProfile = profile, sender = sender)
|
return anEventTimelineItem(
|
||||||
|
content = content,
|
||||||
|
senderProfile = profile,
|
||||||
|
sender = sender,
|
||||||
|
isOwn = sentByYou,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -79,7 +79,6 @@ class RoomListScreen(
|
||||||
lastMessageTimestampFormatter = DefaultLastMessageTimestampFormatter(dateTimeProvider, dateFormatters),
|
lastMessageTimestampFormatter = DefaultLastMessageTimestampFormatter(dateTimeProvider, dateFormatters),
|
||||||
roomLastMessageFormatter = DefaultRoomLastMessageFormatter(
|
roomLastMessageFormatter = DefaultRoomLastMessageFormatter(
|
||||||
sp = stringProvider,
|
sp = stringProvider,
|
||||||
matrixClient = matrixClient,
|
|
||||||
roomMembershipContentFormatter = RoomMembershipContentFormatter(matrixClient, stringProvider),
|
roomMembershipContentFormatter = RoomMembershipContentFormatter(matrixClient, stringProvider),
|
||||||
profileChangeContentFormatter = ProfileChangeContentFormatter(stringProvider),
|
profileChangeContentFormatter = ProfileChangeContentFormatter(stringProvider),
|
||||||
stateContentFormatter = StateContentFormatter(stringProvider),
|
stateContentFormatter = StateContentFormatter(stringProvider),
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:92f929493ff8f4ea9f4a7a7b8a27901896cd00dc2509095885b41513cfe339c1
|
oid sha256:910e28b2dc89b08b99b2d692d10bea6b79c85749f804842d63177d5380283006
|
||||||
size 25381
|
size 25411
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:f5f0e119f72f1786bdd72440a3758ddc91360899170e9c38e5b9d3edaf157f17
|
oid sha256:e9af3bd8ae926ca6bf67103aad707c28e72138c564126eeb832bf589fbd2f81e
|
||||||
size 25022
|
size 25033
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:2b90128e9c4bd1ff8c0c41ef114738c503270c9761882f8bed234f788b811d30
|
oid sha256:61760159b2e8967b5349392935e88fd62353d1f8b8842b4e02090a20b34d7956
|
||||||
size 8884
|
size 8896
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:154d0c63842b54d5335a16ee45997f169d569e305a682b4b07719b35f793cb56
|
oid sha256:65d4b7b84353c27830048ff783e1f1cf99e81b23bac46152ec17c16dcb63546c
|
||||||
size 8988
|
size 8994
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:ea21e9a1c33ef17c9d3b6c43168c1da3e2f7da71f67d1d7db6422d7f6387409f
|
oid sha256:16fb79b80d6dc1cd032bdc4383be80d6ed0f4eddf4bf42e95e28cc5c92635154
|
||||||
size 14551
|
size 14560
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:5bc67cb31ab08fb10247c4a261e91a83f1b6af8722f2c2820efa0fd9ea85aced
|
oid sha256:f067cd464e7c14b0034fcfdbe4df3dba2bc95c05b8ac48f6788395f4631dd075
|
||||||
size 14612
|
size 14601
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:63c52c283b0590a42d81a785af8a673b145dcd71727a8bdf11cc12fd435f6c66
|
oid sha256:edf895e9fcf992db6a82c58678b441e82480d7aa3bdcd389ecc487c23105b59c
|
||||||
size 52492
|
size 52505
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:984002d033b8b81ca485a0edc4b4d03760eed41fcdcd3a87f55938ec87cc88db
|
oid sha256:a8d8205687fd1c5a7579b3c426ea9547dae4250ba4261cec36f1ef2ea588c982
|
||||||
size 74726
|
size 74730
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:f1ca4acb3d53773cb45e40586588bb91b7faa013292fde952b0781401df18054
|
oid sha256:5d0f7cf75caeb2fe64452753afd9e310e645aa15be23b6726f282adb55ad54a2
|
||||||
size 53979
|
size 53987
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:b4ed2085ac63c2d94b7bcd0e92464f5b2209f9f7500346421c7f594ebf2baa8b
|
oid sha256:28266d8283d1e453832c3c88f223edc4be28d84406981f5fe87f254aecc736ca
|
||||||
size 66904
|
size 66910
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:7ab70caa3587294275ee7e2dd5b34e0b5d85645d017718d1dfe9f077a8dc76b2
|
oid sha256:8029f81df796cdc60a9919a1764ee1621b154683cc1fe0c3fff3b9c91806fa7a
|
||||||
size 50458
|
size 50469
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:2c4fb9d68245959dd4ad4df3a65a2ed88937120f5edbfc0244298142b38bd9af
|
oid sha256:8ef232876e00b2c9b1448973a0fa5856f4574ce340d4035c9a3f60e41fa99fcb
|
||||||
size 67754
|
size 67758
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:bd8df43def756f27d22bc6e81038f8246b624d280f8d0c75b24ca4fb86658f10
|
oid sha256:083c7dcc7d366172d3d6431f17697a2aa8382a7919d1cf54250ab91d5dd63874
|
||||||
size 57555
|
size 57571
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:2e1b50da12b09ce80fcc63a695489dbf4f7dc20a5f329b2f7ecdb6daee822f9d
|
oid sha256:130f469d7ef167154e708a28fe1b76165cb998334d08479af46046c40c8721af
|
||||||
size 72585
|
size 72592
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:0fdf9321cca8bc80076e8c071c44911d23a1913117828e63721eec3b5b120702
|
oid sha256:dce3e468b31c14d39bcdfe449b837702730efa1ae42b30820c76cbdbd63b7de1
|
||||||
size 74702
|
size 74704
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:e80cb8546650e737a355203ac441d88e9e118771d0a9752f6468af6aa48bb0bc
|
oid sha256:e39e18ebdcd6ed0fb1ca53cf46b990920d26426489c5a4ae904977299beae6e4
|
||||||
size 57863
|
size 57867
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:508f29c5d9784610f79c681d49d81f5a337b34ec464d9d4d2f3c37ad8cbbd3f9
|
oid sha256:a45cd74d0d4c030672f6ba1ad587fac5ec8dfd9aaa3906aa17748268ea74a232
|
||||||
size 50875
|
size 50883
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:fd561f53b5fd958eaa5fba0034dad7706493444d61fe01791e200338bb4580b3
|
oid sha256:62a81a4f33a8a76a2a9864fc522b6fe15765237a96663c8ecc8aca230642a771
|
||||||
size 71539
|
size 71545
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:2e343f38f71c4629f80b4fd9811a53cac07dc6c76a38b18339640321adc8a253
|
oid sha256:37e3405d346d421faec0aa0065d220bf757dd3851bb948a716a802ca3c7664a6
|
||||||
size 52185
|
size 52189
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:b9a64e74dc5f1ced6e73a33f7b8fbfaaa4ecba3db8007c02bad8bd494bf1eb31
|
oid sha256:e472556771fa5cc4253706bce70775664ba85b73566f34542aa580121583f153
|
||||||
size 64178
|
size 64185
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:8fdf0a733ce2417006388fd3143d937f8e3de5b3ebb44c916d5be532dc977506
|
oid sha256:2aa310bd7a292b7958b4e87bceaaac1616e3b418134ad6337d84dd221663a3c9
|
||||||
size 49021
|
size 49023
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:3b2f56ea59bebce67ce5fd490ab92f195f561dcab57b3b25859aa40773b8092c
|
oid sha256:0f483afa9110508d712f9ba0d6640b23e64d4ce7441506662c278e39b2213dc6
|
||||||
size 64920
|
size 64926
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:d84115b839a3d0ea1ba357837bcd1e63457efedfe3eb6976d8f84b148293ce90
|
oid sha256:6babf64bf9fa9e948f35b711bad8e96a7354593e92c8dc35cc0d38e8effa3ea7
|
||||||
size 55456
|
size 55462
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:41450dafa7adb97bf4f4490f7054161352161263ef99ec6a93134ad3965c14ee
|
oid sha256:8c42c1e00764debb166afe9db8c5818ae53f46ab544ba1d36af5d1aefeca2ebf
|
||||||
size 70013
|
size 70002
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:5a03f9dc697e81f7b1dc8918de55ad4992a92d25576cd90fab22224e7ad5a0d8
|
oid sha256:26992624618cdf42097166cb319c477cc03b0220b7f8e1cfce43458cd0e9d6a8
|
||||||
size 71946
|
size 71941
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:87e4676fad9b6ef136f18cea95110c934ed508e5d57b26d54a2015b3f209d4b7
|
oid sha256:a6c73969522738d052b253abad1f8090702923f9cbcbee5935791e61bbcf40fe
|
||||||
size 56235
|
size 56240
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue