Update dependency androidx.compose:compose-bom to v2024.09.00 (#3399)

* Update dependency androidx.compose:compose-bom to v2024.09.00

* Adapt code for changes.

* Workaround crash when closing the RTE

* Fix broken bottom sheet colors and shape

* Fix tons of warnings and deprecations

* Fix lint issues

* Fix more M3 update changes

* Update screenshots

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Jorge Martín <jorgem@element.io>
Co-authored-by: ElementBot <benoitm+elementbot@element.io>
Co-authored-by: ganfra <francoisg@matrix.org>
Co-authored-by: ElementBot <android@element.io>
This commit is contained in:
renovate[bot] 2024-09-26 09:30:20 +02:00 committed by GitHub
parent 0c10784e26
commit 9756afc5d1
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
536 changed files with 1187 additions and 1148 deletions

View file

@ -15,7 +15,6 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.imePadding
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.systemBarsPadding
import androidx.compose.foundation.text.ClickableText
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
@ -36,6 +35,7 @@ import io.element.android.libraries.designsystem.atomic.organisms.InfoListOrgani
import io.element.android.libraries.designsystem.atomic.pages.HeaderFooterPage
import io.element.android.libraries.designsystem.background.OnboardingBackground
import io.element.android.libraries.designsystem.components.BigIcon
import io.element.android.libraries.designsystem.components.ClickableLinkText
import io.element.android.libraries.designsystem.components.PageTitle
import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
@ -104,14 +104,9 @@ private fun AnalyticsOptInHeader(
bold = true,
tagAndLink = LINK_TAG to AnalyticsConfig.POLICY_LINK,
)
ClickableText(
text = text,
onClick = {
text
.getStringAnnotations(LINK_TAG, it, it)
.firstOrNull()
?.let { _ -> onClickTerms() }
},
ClickableLinkText(
annotatedString = text,
onClick = { onClickTerms() },
modifier = Modifier
.padding(8.dp),
style = ElementTheme.typography.fontBodyMdRegular

View file

@ -18,10 +18,10 @@ import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalLifecycleOwner
import androidx.compose.ui.res.stringResource
import androidx.core.content.getSystemService
import androidx.fragment.app.FragmentActivity
import androidx.lifecycle.compose.LocalLifecycleOwner
import com.squareup.anvil.annotations.ContributesBinding
import io.element.android.features.lockscreen.impl.LockScreenConfig
import io.element.android.features.lockscreen.impl.R

View file

@ -25,11 +25,11 @@ import androidx.compose.foundation.layout.width
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material.ripple.rememberRipple
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.ListItemDefaults
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.rememberModalBottomSheetState
import androidx.compose.material3.ripple
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
@ -356,7 +356,7 @@ private fun EmojiReactionsRow(
.clickable(
enabled = true,
onClick = onCustomReactionClick,
indication = rememberRipple(bounded = false, radius = emojiRippleRadius),
indication = ripple(bounded = false, radius = emojiRippleRadius),
interactionSource = remember { MutableInteractionSource() }
)
)
@ -433,7 +433,7 @@ private fun EmojiButton(
.clickable(
enabled = true,
onClick = { onClick(emoji) },
indication = rememberRipple(bounded = false, radius = emojiRippleRadius),
indication = ripple(bounded = false, radius = emojiRippleRadius),
interactionSource = remember { MutableInteractionSource() }
)
)

View file

@ -145,6 +145,7 @@ fun TimelineView(
key = { timelineItem -> timelineItem.identifier() },
) { timelineItem ->
TimelineItemRow(
modifier = Modifier.animateItem(),
timelineItem = timelineItem,
timelineRoomInfo = state.timelineRoomInfo,
renderReadReceipts = state.renderReadReceipts,

View file

@ -16,7 +16,7 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.widthIn
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.ripple.rememberRipple
import androidx.compose.material3.ripple
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
@ -135,7 +135,7 @@ fun MessageEventBubble(
.combinedClickable(
onClick = onClick,
onLongClick = onLongClick,
indication = rememberRipple(),
indication = ripple(),
interactionSource = interactionSource
),
color = backgroundBubbleColor,

View file

@ -15,7 +15,7 @@ import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.widthIn
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.ripple.rememberRipple
import androidx.compose.material3.ripple
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
@ -48,7 +48,7 @@ fun MessageStateEventContainer(
.combinedClickable(
onClick = onClick,
onLongClick = onLongClick,
indication = rememberRipple(),
indication = ripple(),
interactionSource = interactionSource
),
color = backgroundColor,

View file

@ -15,8 +15,8 @@ import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.sizeIn
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material.ripple.rememberRipple
import androidx.compose.material3.LocalTextStyle
import androidx.compose.material3.ripple
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
@ -61,7 +61,7 @@ fun EmojiItem(
.clickable(
enabled = true,
onClick = { onSelectEmoji(item) },
indication = rememberRipple(bounded = false, radius = emojiSize.toDp() / 2 + 10.dp),
indication = ripple(bounded = false, radius = emojiSize.toDp() / 2 + 10.dp),
interactionSource = remember { MutableInteractionSource() }
)
.clearAndSetSemantics {

View file

@ -114,7 +114,7 @@ private fun ElementCallCategory(
validation = callUrlState.validator,
onValidationErrorMessage = stringResource(R.string.screen_advanced_settings_element_call_base_url_validation_error),
displayValue = { value -> !isUsingDefaultUrl(value) },
keyboardOptions = KeyboardOptions.Default.copy(autoCorrect = false, keyboardType = KeyboardType.Uri),
keyboardOptions = KeyboardOptions.Default.copy(autoCorrectEnabled = false, keyboardType = KeyboardType.Uri),
onChange = { state.eventSink(DeveloperSettingsEvents.SetCustomElementCallBaseUrl(it)) }
)
}

View file

@ -12,7 +12,6 @@ import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.consumeWindowInsets
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.text.ClickableText
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
@ -24,6 +23,7 @@ import androidx.compose.ui.unit.dp
import io.element.android.compound.theme.ElementTheme
import io.element.android.features.roomdetails.impl.R
import io.element.android.libraries.core.bool.orTrue
import io.element.android.libraries.designsystem.components.ClickableLinkText
import io.element.android.libraries.designsystem.components.async.AsyncActionView
import io.element.android.libraries.designsystem.components.button.BackButton
import io.element.android.libraries.designsystem.components.preferences.PreferenceCategory
@ -102,8 +102,8 @@ private fun RoomSpecificNotificationSettingsView(
underline = false,
bold = true,
)
ClickableText(
text = text,
ClickableLinkText(
annotatedString = text,
onClick = {
onShowGlobalNotifications()
},

View file

@ -23,8 +23,8 @@ import androidx.compose.foundation.layout.heightIn
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.material.ripple.rememberRipple
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.ripple
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
@ -137,7 +137,7 @@ private fun RoomSummaryScaffoldRow(
val clickModifier = Modifier.combinedClickable(
onClick = { onClick(room) },
onLongClick = { onLongClick(room) },
indication = rememberRipple(),
indication = ripple(),
interactionSource = remember { MutableInteractionSource() }
)

View file

@ -116,7 +116,7 @@ fun RoomListFiltersView(
val zIndex = (if (previousFilters.value.contains(filterWithSelection.filter)) state.filterSelectionStates.size else 0) - i.toFloat()
RoomListFilterView(
modifier = Modifier
.animateItemPlacement()
.animateItem()
.zIndex(zIndex),
roomListFilter = filterWithSelection.filter,
selected = filterWithSelection.isSelected,

View file

@ -24,7 +24,7 @@ media3 = "1.4.1"
camera = "1.3.4"
# Compose
compose_bom = "2024.08.00"
compose_bom = "2024.09.00"
composecompiler = "1.5.15"
# Coroutines

View file

@ -86,13 +86,13 @@ fun ElementLogoAtom(
.size(size.logoSize)
// Do the same double shadow than on Figma...
.shadow(
elevation = 25.dp,
elevation = 35.dp,
clip = false,
shape = CircleShape,
ambientColor = logoShadowColor,
)
.shadow(
elevation = 25.dp,
elevation = 35.dp,
clip = false,
shape = CircleShape,
ambientColor = Color(0x80000000),

View file

@ -23,7 +23,7 @@ import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.input.pointer.pointerInput
import androidx.compose.ui.platform.LocalUriHandler
import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.text.ExperimentalTextApi
import androidx.compose.ui.text.LinkAnnotation
import androidx.compose.ui.text.ParagraphStyle
import androidx.compose.ui.text.SpanStyle
import androidx.compose.ui.text.TextLayoutResult
@ -37,6 +37,7 @@ import io.element.android.libraries.designsystem.preview.PreviewGroup
import io.element.android.libraries.designsystem.theme.components.Text
import kotlinx.collections.immutable.ImmutableMap
import kotlinx.collections.immutable.persistentMapOf
import timber.log.Timber
const val LINK_TAG = "URL"
@ -65,7 +66,6 @@ fun ClickableLinkText(
)
}
@OptIn(ExperimentalTextApi::class)
@Composable
fun ClickableLinkText(
annotatedString: AnnotatedString,
@ -106,14 +106,18 @@ fun ClickableLinkText(
) { offset ->
layoutResult.value?.let { layoutResult ->
val position = layoutResult.getOffsetForPosition(offset)
val linkUrlAnnotations = annotatedString.getUrlAnnotations(position, position)
.map { AnnotatedString.Range(it.item.url, it.start, it.end, linkAnnotationTag) }
val linkUrlAnnotations = annotatedString.getLinkAnnotations(position, position)
.map { AnnotatedString.Range(it.item, it.start, it.end, linkAnnotationTag) }
val linkStringAnnotations = linkUrlAnnotations +
annotatedString.getStringAnnotations(linkAnnotationTag, position, position)
if (linkStringAnnotations.isEmpty()) {
onClick()
} else {
uriHandler.openUri(linkStringAnnotations.first().item)
when (val annotation = linkStringAnnotations.first().item) {
is LinkAnnotation.Url -> uriHandler.openUri(annotation.url)
is String -> uriHandler.openUri(annotation)
else -> Timber.e("Unknown link annotation: $annotation")
}
}
}
}
@ -129,7 +133,6 @@ fun ClickableLinkText(
)
}
@OptIn(ExperimentalTextApi::class)
fun AnnotatedString.linkify(linkStyle: SpanStyle): AnnotatedString {
val original = this
val spannable = SpannableString(this.text)
@ -141,7 +144,7 @@ fun AnnotatedString.linkify(linkStyle: SpanStyle): AnnotatedString {
for (span in spans) {
val start = spannable.getSpanStart(span)
val end = spannable.getSpanEnd(span)
if (original.getUrlAnnotations(start, end).isEmpty() && original.getStringAnnotations("URL", start, end).isEmpty()) {
if (original.getLinkAnnotations(start, end).isEmpty() && original.getStringAnnotations("URL", start, end).isEmpty()) {
// Prevent linkifying domains in user or room handles (@user:domain.com, #room:domain.com)
if (start > 0 && !spannable[start - 1].isWhitespace()) continue
addStyle(

View file

@ -14,9 +14,9 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.ripple.rememberRipple
import androidx.compose.material3.LocalContentColor
import androidx.compose.material3.minimumInteractiveComponentSize
import androidx.compose.material3.ripple
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.remember
@ -92,7 +92,7 @@ fun GradientFloatingActionButton(
enabled = true,
onClick = onClick,
interactionSource = remember { MutableInteractionSource() },
indication = rememberRipple(color = Color.White)
indication = ripple(color = Color.White)
),
contentAlignment = Alignment.Center
) {

View file

@ -16,9 +16,9 @@ import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.widthIn
import androidx.compose.material.ripple.rememberRipple
import androidx.compose.material3.LocalContentColor
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.ripple
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
@ -45,7 +45,7 @@ fun MainActionButton(
enabled: Boolean = true,
contentDescription: String = title,
) {
val ripple = rememberRipple(bounded = false)
val ripple = ripple(bounded = false)
val interactionSource = remember { MutableInteractionSource() }
Column(
modifier

View file

@ -16,11 +16,11 @@ import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.ripple.rememberRipple
import androidx.compose.material3.LocalContentColor
import androidx.compose.material3.LocalTextStyle
import androidx.compose.material3.Text
import androidx.compose.material3.minimumInteractiveComponentSize
import androidx.compose.material3.ripple
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.remember
@ -111,7 +111,7 @@ fun SuperButton(
enabled = enabled,
onClick = onClick,
interactionSource = remember { MutableInteractionSource() },
indication = rememberRipple()
indication = ripple()
)
.padding(contentPadding),
contentAlignment = Alignment.Center

View file

@ -13,8 +13,8 @@ import androidx.compose.foundation.layout.isImeVisible
import androidx.compose.runtime.Composable
import androidx.compose.runtime.State
import androidx.compose.runtime.rememberUpdatedState
import androidx.compose.ui.platform.LocalLifecycleOwner
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.compose.LocalLifecycleOwner
/**
* Inspired from https://stackoverflow.com/questions/68847559/how-can-i-detect-keyboard-opening-and-closing-in-jetpack-compose

View file

@ -7,9 +7,9 @@
package io.element.android.libraries.designsystem.components.tooltip
import androidx.compose.material3.CaretScope
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.TooltipDefaults
import androidx.compose.material3.TooltipScope
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
@ -19,7 +19,7 @@ import androidx.compose.material3.PlainTooltip as M3PlainTooltip
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun CaretScope.PlainTooltip(
fun TooltipScope.PlainTooltip(
modifier: Modifier = Modifier,
contentColor: Color = ElementTheme.colors.textOnSolidPrimary,
containerColor: Color = ElementTheme.colors.bgActionPrimaryRest,

View file

@ -7,8 +7,8 @@
package io.element.android.libraries.designsystem.components.tooltip
import androidx.compose.material3.CaretScope
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.TooltipScope
import androidx.compose.material3.TooltipState
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
@ -19,7 +19,7 @@ import androidx.compose.material3.TooltipBox as M3TooltipBox
@Composable
fun TooltipBox(
positionProvider: PopupPositionProvider,
tooltip: @Composable CaretScope.() -> Unit,
tooltip: @Composable TooltipScope.() -> Unit,
state: TooltipState,
modifier: Modifier = Modifier,
focusable: Boolean = true,

View file

@ -8,8 +8,6 @@
package io.element.android.libraries.designsystem.modifiers
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.debugInspectorInfo
import androidx.compose.ui.platform.inspectable
/**
* Applies the [ifTrue] modifier when the [condition] is true, [ifFalse] otherwise.
@ -18,15 +16,8 @@ fun Modifier.applyIf(
condition: Boolean,
ifTrue: Modifier.() -> Modifier,
ifFalse: (Modifier.() -> Modifier)? = null
): Modifier = this then inspectable(
inspectorInfo = debugInspectorInfo {
name = "applyIf"
value = condition
}
) {
this then when {
condition -> ifTrue(Modifier)
ifFalse != null -> ifFalse(Modifier)
else -> Modifier
}
): Modifier = this then when {
condition -> ifTrue(Modifier)
ifFalse != null -> ifFalse(Modifier)
else -> Modifier
}

View file

@ -48,8 +48,7 @@ fun Modifier.blurredShapeShadow(
offsetX: Dp = 0.dp,
offsetY: Dp = 0.dp,
blurRadius: Dp = 0.dp,
) = then(
drawBehind {
) = drawBehind {
drawIntoCanvas { canvas ->
val path = Path().apply {
addRoundRect(RoundRect(Rect(Offset.Zero, size), CornerRadius(cornerRadius.toPx())))
@ -78,8 +77,7 @@ fun Modifier.blurredShapeShadow(
)
}
}
}
)
}
fun Modifier.blurCompat(
radius: Dp,

View file

@ -12,10 +12,8 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.focus.FocusManager
import androidx.compose.ui.input.pointer.pointerInput
fun Modifier.clearFocusOnTap(focusManager: FocusManager): Modifier = then(
pointerInput(Unit) {
detectTapGestures(onTap = {
focusManager.clearFocus()
})
}
)
fun Modifier.clearFocusOnTap(focusManager: FocusManager): Modifier = pointerInput(Unit) {
detectTapGestures(onTap = {
focusManager.clearFocus()
})
}

View file

@ -45,8 +45,8 @@ fun BottomSheetDragHandle(
.fillMaxWidth()
.requiredHeight(72.dp)
.offset(y = 18.dp)
.clip(MaterialTheme.shapes.extraLarge)
.background(MaterialTheme.colorScheme.background)
.clip(MaterialTheme.shapes.large)
.background(MaterialTheme.colorScheme.surface)
.border(0.5.dp, ElementTheme.colors.borderDisabled, MaterialTheme.shapes.extraLarge)
)

View file

@ -32,7 +32,7 @@ fun BottomSheetScaffold(
scaffoldState: BottomSheetScaffoldState = rememberBottomSheetScaffoldState(),
sheetPeekHeight: Dp = BottomSheetDefaults.SheetPeekHeight,
sheetShape: Shape = BottomSheetDefaults.ExpandedShape,
sheetContainerColor: Color = BottomSheetDefaults.ContainerColor,
sheetContainerColor: Color = MaterialTheme.colorScheme.surface,
sheetContentColor: Color = contentColorFor(sheetContainerColor),
sheetTonalElevation: Dp = BottomSheetDefaults.Elevation,
sheetShadowElevation: Dp = BottomSheetDefaults.Elevation,

View file

@ -9,8 +9,10 @@ package io.element.android.libraries.designsystem.theme.components
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.ProgressIndicatorDefaults
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalInspectionMode
@ -25,12 +27,14 @@ fun CircularProgressIndicator(
progress: () -> Float,
modifier: Modifier = Modifier,
color: Color = ProgressIndicatorDefaults.circularColor,
trackColor: Color = ProgressIndicatorDefaults.circularDeterminateTrackColor,
strokeWidth: Dp = ProgressIndicatorDefaults.CircularStrokeWidth
) {
androidx.compose.material3.CircularProgressIndicator(
modifier = modifier,
progress = progress,
color = color,
trackColor = trackColor,
strokeWidth = strokeWidth,
)
}
@ -39,6 +43,7 @@ fun CircularProgressIndicator(
fun CircularProgressIndicator(
modifier: Modifier = Modifier,
color: Color = ProgressIndicatorDefaults.circularColor,
trackColor: Color = ProgressIndicatorDefaults.circularIndeterminateTrackColor,
strokeWidth: Dp = ProgressIndicatorDefaults.CircularStrokeWidth,
) {
if (LocalInspectionMode.current) {
@ -47,12 +52,14 @@ fun CircularProgressIndicator(
modifier = modifier,
progress = { 0.75F },
color = color,
trackColor = trackColor,
strokeWidth = strokeWidth,
)
} else {
androidx.compose.material3.CircularProgressIndicator(
modifier = modifier,
color = color,
trackColor = trackColor,
strokeWidth = strokeWidth,
)
}
@ -61,12 +68,18 @@ fun CircularProgressIndicator(
@Preview(group = PreviewGroup.Progress)
@Composable
internal fun CircularProgressIndicatorPreview() = ElementThemedPreview(vertical = false) {
Column(verticalArrangement = Arrangement.spacedBy(4.dp)) {
Column(
modifier = Modifier.padding(6.dp),
verticalArrangement = Arrangement.spacedBy(4.dp),
horizontalAlignment = Alignment.CenterHorizontally
) {
// Indeterminate progress
Text("Indeterminate")
CircularProgressIndicator()
// Fixed progress
Text("Fixed progress")
CircularProgressIndicator(
progress = { 0.90F }
progress = { 0.50F }
)
}
}

View file

@ -15,6 +15,7 @@ import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.BottomSheetDefaults
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.SheetState
import androidx.compose.material3.contentColorFor
import androidx.compose.material3.rememberModalBottomSheetState
@ -42,12 +43,12 @@ fun ModalBottomSheet(
modifier: Modifier = Modifier,
sheetState: SheetState = rememberModalBottomSheetState(),
shape: Shape = BottomSheetDefaults.ExpandedShape,
containerColor: Color = BottomSheetDefaults.ContainerColor,
containerColor: Color = MaterialTheme.colorScheme.surface,
contentColor: Color = contentColorFor(containerColor),
tonalElevation: Dp = if (ElementTheme.isLightTheme) 0.dp else BottomSheetDefaults.Elevation,
scrimColor: Color = BottomSheetDefaults.ScrimColor,
dragHandle: @Composable (() -> Unit)? = { BottomSheetDefaults.DragHandle() },
windowInsets: WindowInsets = BottomSheetDefaults.windowInsets,
contentWindowInsets: @Composable () -> WindowInsets = { BottomSheetDefaults.windowInsets },
content: @Composable ColumnScope.() -> Unit,
) {
val safeSheetState = if (LocalInspectionMode.current) sheetStateForPreview() else sheetState
@ -61,7 +62,7 @@ fun ModalBottomSheet(
tonalElevation = tonalElevation,
scrimColor = scrimColor,
dragHandle = dragHandle,
windowInsets = windowInsets,
contentWindowInsets = contentWindowInsets,
content = content,
)
}

View file

@ -16,9 +16,10 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.SearchBar
import androidx.compose.material3.SearchBarColors
import androidx.compose.material3.SearchBarDefaults
import androidx.compose.material3.TextFieldColors
import androidx.compose.material3.TextFieldDefaults
import androidx.compose.runtime.Composable
import androidx.compose.runtime.Immutable
@ -56,8 +57,10 @@ fun <T> SearchBar(
tonalElevation: Dp = SearchBarDefaults.TonalElevation,
windowInsets: WindowInsets = SearchBarDefaults.windowInsets,
interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
inactiveColors: SearchBarColors = ElementSearchBarDefaults.inactiveColors(),
activeColors: SearchBarColors = ElementSearchBarDefaults.activeColors(),
inactiveBarColors: SearchBarColors = ElementSearchBarDefaults.inactiveColors(),
activeBarColors: SearchBarColors = ElementSearchBarDefaults.activeColors(),
inactiveTextInputColors: TextFieldColors = ElementSearchBarDefaults.inactiveInputFieldColors(),
activeTextInputColors: TextFieldColors = ElementSearchBarDefaults.activeInputFieldColors(),
contentPrefix: @Composable ColumnScope.() -> Unit = {},
contentSuffix: @Composable ColumnScope.() -> Unit = {},
resultHandler: @Composable ColumnScope.(T) -> Unit = {},
@ -69,51 +72,58 @@ fun <T> SearchBar(
focusManager.clearFocus()
}
androidx.compose.material3.SearchBar(
query = query,
onQueryChange = onQueryChange,
onSearch = { focusManager.clearFocus() },
active = active,
onActiveChange = onActiveChange,
modifier = modifier.padding(horizontal = if (!active) 16.dp else 0.dp),
enabled = enabled,
placeholder = {
Text(text = placeHolderTitle)
},
leadingIcon = if (showBackButton && active) {
{ BackButton(onClick = { onActiveChange(false) }) }
} else {
null
},
trailingIcon = when {
active && query.isNotEmpty() -> {
{
IconButton(onClick = { onQueryChange("") }) {
Icon(
imageVector = CompoundIcons.Close(),
contentDescription = stringResource(CommonStrings.action_clear),
)
SearchBar(
inputField = {
SearchBarDefaults.InputField(
query = query,
onQueryChange = onQueryChange,
onSearch = { focusManager.clearFocus() },
expanded = active,
onExpandedChange = onActiveChange,
enabled = enabled,
placeholder = {
Text(text = placeHolderTitle)
},
leadingIcon = if (showBackButton && active) {
{ BackButton(onClick = { onActiveChange(false) }) }
} else {
null
},
trailingIcon = when {
active && query.isNotEmpty() -> {
{
IconButton(onClick = { onQueryChange("") }) {
Icon(
imageVector = CompoundIcons.Close(),
contentDescription = stringResource(CommonStrings.action_clear),
)
}
}
}
}
}
!active -> {
{
Icon(
imageVector = CompoundIcons.Search(),
contentDescription = stringResource(CommonStrings.action_search),
tint = MaterialTheme.colorScheme.tertiary,
)
}
}
!active -> {
{
Icon(
imageVector = CompoundIcons.Search(),
contentDescription = stringResource(CommonStrings.action_search),
tint = ElementTheme.materialColors.tertiary,
)
}
}
else -> null
else -> null
},
interactionSource = interactionSource,
colors = if (active) activeTextInputColors else inactiveTextInputColors,
)
},
expanded = active,
onExpandedChange = onActiveChange,
modifier = modifier.padding(horizontal = if (!active) 16.dp else 0.dp),
shape = shape,
colors = if (active) activeColors else inactiveColors,
colors = if (active) activeBarColors else inactiveBarColors,
tonalElevation = tonalElevation,
windowInsets = windowInsets,
interactionSource = interactionSource,
content = {
contentPrefix()
when (resultState) {
@ -128,7 +138,7 @@ fun <T> SearchBar(
Text(
text = stringResource(CommonStrings.common_no_results),
textAlign = TextAlign.Center,
color = MaterialTheme.colorScheme.tertiary,
color = ElementTheme.materialColors.tertiary,
modifier = Modifier.fillMaxWidth()
)
}
@ -147,28 +157,34 @@ object ElementSearchBarDefaults {
@Composable
fun inactiveColors() = SearchBarDefaults.colors(
containerColor = ElementTheme.materialColors.surfaceVariant,
inputFieldColors = TextFieldDefaults.colors(
unfocusedPlaceholderColor = ElementTheme.colors.textDisabled,
focusedPlaceholderColor = ElementTheme.colors.textDisabled,
unfocusedLeadingIconColor = MaterialTheme.colorScheme.primary,
focusedLeadingIconColor = MaterialTheme.colorScheme.primary,
unfocusedTrailingIconColor = MaterialTheme.colorScheme.primary,
focusedTrailingIconColor = MaterialTheme.colorScheme.primary,
)
dividerColor = ElementTheme.materialColors.outline,
)
@Composable
fun inactiveInputFieldColors() = TextFieldDefaults.colors(
unfocusedPlaceholderColor = ElementTheme.colors.textDisabled,
focusedPlaceholderColor = ElementTheme.colors.textDisabled,
unfocusedLeadingIconColor = ElementTheme.materialColors.primary,
focusedLeadingIconColor = ElementTheme.materialColors.primary,
unfocusedTrailingIconColor = ElementTheme.materialColors.primary,
focusedTrailingIconColor = ElementTheme.materialColors.primary,
)
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun activeColors() = SearchBarDefaults.colors(
containerColor = Color.Transparent,
inputFieldColors = TextFieldDefaults.colors(
unfocusedPlaceholderColor = ElementTheme.colors.textDisabled,
focusedPlaceholderColor = ElementTheme.colors.textDisabled,
unfocusedLeadingIconColor = MaterialTheme.colorScheme.primary,
focusedLeadingIconColor = MaterialTheme.colorScheme.primary,
unfocusedTrailingIconColor = MaterialTheme.colorScheme.primary,
focusedTrailingIconColor = MaterialTheme.colorScheme.primary,
)
dividerColor = ElementTheme.materialColors.outline,
)
@Composable
fun activeInputFieldColors() = TextFieldDefaults.colors(
unfocusedPlaceholderColor = ElementTheme.colors.textDisabled,
focusedPlaceholderColor = ElementTheme.colors.textDisabled,
unfocusedLeadingIconColor = ElementTheme.materialColors.primary,
focusedLeadingIconColor = ElementTheme.materialColors.primary,
unfocusedTrailingIconColor = ElementTheme.materialColors.primary,
focusedTrailingIconColor = ElementTheme.materialColors.primary,
)
}

View file

@ -36,6 +36,7 @@ import androidx.compose.ui.text.input.TextFieldValue
import androidx.compose.ui.text.input.VisualTransformation
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import io.element.android.compound.theme.ElementTheme
import io.element.android.libraries.architecture.coverage.ExcludeFromCoverage
import io.element.android.libraries.designsystem.preview.ElementPreviewDark
import io.element.android.libraries.designsystem.preview.ElementPreviewLight
@ -64,7 +65,12 @@ fun TextField(
maxLines: Int = if (singleLine) 1 else Int.MAX_VALUE,
interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
shape: Shape = TextFieldDefaults.shape,
colors: TextFieldColors = TextFieldDefaults.colors()
colors: TextFieldColors = TextFieldDefaults.colors(
unfocusedContainerColor = ElementTheme.colors.bgSubtleSecondary,
focusedContainerColor = ElementTheme.colors.bgSubtleSecondary,
disabledContainerColor = ElementTheme.colors.bgSubtleSecondary,
errorContainerColor = ElementTheme.colors.bgSubtleSecondary,
)
) {
androidx.compose.material3.TextField(
value = value,

View file

@ -70,7 +70,7 @@ fun CustomBottomSheetScaffold(
sheetPeekHeight: Dp = BottomSheetDefaults.SheetPeekHeight,
sheetMaxWidth: Dp = BottomSheetDefaults.SheetMaxWidth,
sheetShape: Shape = BottomSheetDefaults.ExpandedShape,
sheetContainerColor: Color = BottomSheetDefaults.ContainerColor,
sheetContainerColor: Color = Color.White,
sheetContentColor: Color = contentColorFor(sheetContainerColor),
sheetTonalElevation: Dp = BottomSheetDefaults.Elevation,
sheetShadowElevation: Dp = BottomSheetDefaults.Elevation,
@ -367,6 +367,12 @@ private class MapDraggableAnchors<T>(private val anchors: Map<T, Float>) : Dragg
return anchors == other.anchors
}
override fun forEach(block: (anchor: T, position: Float) -> Unit) {
for (anchor in anchors) {
block(anchor.key, anchor.value)
}
}
override fun hashCode() = 31 * anchors.hashCode()
override fun toString() = "MapDraggableAnchors($anchors)"
@ -381,7 +387,7 @@ internal fun ConsumeSwipeWithinBottomSheetBoundsNestedScrollConnection(
): NestedScrollConnection = object : NestedScrollConnection {
override fun onPreScroll(available: Offset, source: NestedScrollSource): Offset {
val delta = available.toFloat()
return if (delta < 0 && source == NestedScrollSource.Drag) {
return if (delta < 0 && source == NestedScrollSource.UserInput) {
sheetState.anchoredDraggableState.dispatchRawDelta(delta).toOffset()
} else {
Offset.Zero
@ -393,7 +399,7 @@ internal fun ConsumeSwipeWithinBottomSheetBoundsNestedScrollConnection(
available: Offset,
source: NestedScrollSource
): Offset {
return if (source == NestedScrollSource.Drag) {
return if (source == NestedScrollSource.UserInput) {
sheetState.anchoredDraggableState.dispatchRawDelta(available.toFloat()).toOffset()
} else {
Offset.Zero

View file

@ -7,7 +7,9 @@
package io.element.android.libraries.designsystem.theme.components.bottomsheet
import androidx.compose.animation.core.DecayAnimationSpec
import androidx.compose.animation.core.SpringSpec
import androidx.compose.animation.core.exponentialDecay
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.gestures.animateTo
import androidx.compose.foundation.gestures.snapTo
@ -201,14 +203,12 @@ constructor(
* gesture interaction or another programmatic interaction like a [animateTo] or [snapTo] call.
*
* @param targetValue The target value of the animation
* @param velocity The velocity of the animation
*/
@OptIn(ExperimentalFoundationApi::class)
internal suspend fun animateTo(
targetValue: SheetValue,
velocity: Float = anchoredDraggableState.lastVelocity
) {
anchoredDraggableState.animateTo(targetValue, velocity)
anchoredDraggableState.animateTo(targetValue)
}
/**
@ -235,7 +235,8 @@ constructor(
@OptIn(ExperimentalFoundationApi::class)
internal var anchoredDraggableState = androidx.compose.foundation.gestures.AnchoredDraggableState(
initialValue = initialValue,
animationSpec = AnchoredDraggableDefaults.AnimationSpec,
snapAnimationSpec = AnchoredDraggableDefaults.SnapAnimationSpec,
decayAnimationSpec = AnchoredDraggableDefaults.DecayAnimationSpec,
confirmValueChange = confirmValueChange,
positionalThreshold = { with(requireDensity()) { 56.dp.toPx() } },
velocityThreshold = { with(requireDensity()) { 125.dp.toPx() } }
@ -298,5 +299,10 @@ internal object AnchoredDraggableDefaults {
@get:ExperimentalMaterial3Api
@Suppress("OPT_IN_MARKER_ON_WRONG_TARGET")
@ExperimentalMaterial3Api
val AnimationSpec = SpringSpec<Float>()
val SnapAnimationSpec = SpringSpec<Float>()
@get:ExperimentalMaterial3Api
@Suppress("OPT_IN_MARKER_ON_WRONG_TARGET")
@ExperimentalMaterial3Api
val DecayAnimationSpec = exponentialDecay<Float>()
}

View file

@ -10,10 +10,10 @@ package io.element.android.libraries.designsystem.utils
import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.rememberUpdatedState
import androidx.compose.ui.platform.LocalLifecycleOwner
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleEventObserver
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.compose.LocalLifecycleOwner
@Composable
fun OnLifecycleEvent(onEvent: (owner: LifecycleOwner, event: Lifecycle.Event) -> Unit) {

View file

@ -32,10 +32,10 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalInspectionMode
import androidx.compose.ui.platform.LocalLifecycleOwner
import androidx.compose.ui.viewinterop.AndroidView
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleEventObserver
import androidx.lifecycle.compose.LocalLifecycleOwner
import kotlinx.collections.immutable.ImmutableMap
import kotlinx.collections.immutable.persistentMapOf
import kotlinx.coroutines.awaitCancellation

View file

@ -17,8 +17,8 @@ import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material.ripple.rememberRipple
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.ripple
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
@ -56,7 +56,7 @@ fun EditableAvatarView(
.clickable(
interactionSource = remember { MutableInteractionSource() },
onClick = onAvatarClick,
indication = rememberRipple(bounded = false),
indication = ripple(bounded = false),
)
.testTag(TestTags.editAvatar)
) {

View file

@ -15,8 +15,8 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material.ripple.rememberRipple
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.ripple
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
@ -73,7 +73,7 @@ fun SelectedRoom(
.size(20.dp)
.align(Alignment.TopEnd)
.clickable(
indication = rememberRipple(),
indication = ripple(),
interactionSource = remember { MutableInteractionSource() },
onClick = { onRemoveRoom(roomSummary) }
),

View file

@ -15,7 +15,7 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material.ripple.rememberRipple
import androidx.compose.material3.ripple
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
@ -72,7 +72,7 @@ fun SelectedUser(
.size(20.dp)
.align(Alignment.TopEnd)
.clickable(
indication = rememberRipple(),
indication = ripple(),
interactionSource = remember { MutableInteractionSource() },
onClick = { onUserRemove(matrixUser) }
),

View file

@ -30,9 +30,9 @@ import androidx.compose.ui.draw.clipToBounds
import androidx.compose.ui.graphics.asImageBitmap
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalInspectionMode
import androidx.compose.ui.platform.LocalLifecycleOwner
import androidx.compose.ui.viewinterop.AndroidView
import androidx.core.content.ContextCompat
import androidx.lifecycle.compose.LocalLifecycleOwner
import io.element.android.compound.theme.ElementTheme
import io.element.android.libraries.designsystem.theme.components.Text
import kotlinx.coroutines.delay

View file

@ -16,8 +16,8 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.ripple.rememberRipple
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.ripple
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
@ -94,7 +94,7 @@ private fun EditingModeView(
enabled = true,
onClick = onResetComposerMode,
interactionSource = remember { MutableInteractionSource() },
indication = rememberRipple(bounded = false)
indication = ripple(bounded = false)
),
)
}
@ -124,7 +124,7 @@ private fun ReplyToModeView(
enabled = true,
onClick = onResetComposerMode,
interactionSource = remember { MutableInteractionSource() },
indication = rememberRipple(bounded = false)
indication = ripple(bounded = false)
),
)
}

View file

@ -14,7 +14,7 @@ import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.ripple.rememberRipple
import androidx.compose.material3.ripple
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
@ -53,7 +53,7 @@ internal fun FormattingOption(
.clickable(
onClick = onClick,
interactionSource = remember { MutableInteractionSource() },
indication = rememberRipple(
indication = ripple(
bounded = false,
radius = 20.dp,
),

View file

@ -8,6 +8,7 @@
package io.element.android.libraries.textcomposer.components.markdown
import android.content.Context
import android.view.View
import androidx.appcompat.widget.AppCompatEditText
internal class MarkdownEditText(
@ -36,4 +37,8 @@ internal class MarkdownEditText(
onSelectionChangeListener?.invoke(selStart, selEnd)
}
}
override fun focusSearch(direction: Int): View? {
return null
}
}

View file

@ -15,10 +15,10 @@ import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.platform.LocalLifecycleOwner
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.LifecycleRegistry
import androidx.lifecycle.compose.LocalLifecycleOwner
@Stable
@Composable

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:25428c6db7cc00dc9ac1133d56e4f30f6970a1a0f0e14a551a44eff1f6afde5f
size 8336
oid sha256:d8321503209048b152d1ed52cf2339c8c96276b4f40d71660a92b9a8b919efcf
size 8386

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:69649cb5813f8fccdb60c72d2c5df002419a6bc45cab754f2a300fe907b7cf93
size 6969
oid sha256:3fcde8c552b5080a87e1339d6f23fd9f0b291161525563197bffbdca2e6802e0
size 6994

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:beefa333127ea567719bcdc1d8ebe03e67c933e866a1696e520d04ff10ad416d
size 8355
oid sha256:e88a14813e0923365b98dc046479b4625b732bef2befe4bd1ddddacc8598aaf7
size 8389

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:f57ef9707cdd88e1f77d27a185800ef14f11e7749368ff0cbad61d21e082fda6
size 7083
oid sha256:092a39015ccb36d09f65ed18760eb1e36dcab1e0809d404bfd9f4aed9961eca4
size 7110

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:aa07d35d6967771dde192bfc08eec5e208f0edbf05955bba9f82e23efcabf3ca
size 8281
oid sha256:30efa4ef62ce38f3599c1a6f2a99c9a36e5704a70c99d83670b5f2169a8648f3
size 8378

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:3e32f2e9ac5e091361650ed29b9a47dbf35196f872f7ef8ed89240fbc836beb4
size 7906
oid sha256:a1a5ca1ae30e3b1c4c2b242b3527a3c09b09acb415ad11333ad4b1f07182cbed
size 8005

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:c976f3c1d4809c28cb865b0dfe7ce1eed5fe2c9959a80da8efab5d3594e38e41
size 14427
oid sha256:925dc31415feddb28616043aaeadc5e18ad5b329ad7414ca5da69c772dd34e5b
size 14528

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:d6acbdb4ea1e66fa4638fc9b454566968081c511e0dcfde3f1e57fd9725a1edb
size 13263
oid sha256:546837f4f7021f4e05d3d10e953ef09a9fb7f7dc136a8d48dae24690a6877e4a
size 13366

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:a5442a44fa31fbd78eb58be78ea485c919380d83a6fde0cad9e6a97b0a59a491
size 19876
oid sha256:7297bdfeec3c126f0ab3f78a58ff6f3ed513199457ca627c189169c88f288fb5
size 19976

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:91bfca2a62a5745472ad34070e24111bc81632c5053d4aae284f9db3acf0cef4
size 18578
oid sha256:70d89e441fa190cee145e56d9d62f2cda663d9054d038d9402464ced33f46917
size 18675

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:418e64406425c9519e55ea94b1a5a5af8178bfe8ff97e154a21419d052f9966c
size 68219
oid sha256:3540f43d9c2b446ddf110e88661334f9b25dc15b200ab3841fd7588aed662a73
size 68250

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:25f23f41ab4f151a9240be2e7771c0f2ea0f6c8fb7eacf75549ff26e25b5c202
size 59537
oid sha256:a07ef1ecaa31561bdeb34160f89fa9d81ff8736e1680f6594aafbc263f1f2178
size 59543

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:23312c1f451cf556fff753206848e9d6c3359df4c703ff0f2d58190b43dc7859
size 266126
oid sha256:3e2e62c68474d9f814e35c03ba1458a4e4d62f7bc4239f9f719d305e986cd66b
size 260887

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:f7ae6f66e7fbf8cb8338f3368f3e70cec59d417e278424981a159b8f062143da
size 345550
oid sha256:3f7f9ec486a3bdb3a6c27ebfe391577cbf59051870a0161db9bd6f3a62abf042
size 341417

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:33d39c0a6e9c514a44182b5da0f8e5725b6649ab4b0533eaf895797dc970999a
size 10179
oid sha256:1ee71bc4af44aed32f1603111ff2680c440319c1dd691c6c1774f04c859c2e3a
size 10274

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:c30a73e033ca799a38942d23893eb7a3e3e4f09aa473d07cc03fa2f1a7ac22e3
size 9034
oid sha256:5183f090192627b3b11f80c344381ba65c2977cc781cd59674003168bcea7e74
size 9131

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:563d5fb3d177add8f3234d1cd07b8320e3cf36599234181d765e6263f2a8b401
size 11353
oid sha256:c4c96790d61f5ae03c3b32d5ea85d2b1efddc84f248f2373290f28c15ced4dc0
size 11443

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:9c3e295887c5cb8cf98f24a7de9418f1a28349df90117587404f830e9e44f261
size 10998
oid sha256:da6d82da577060eafd43bd4c13867cac99143fb8bc877f7149db4c3f4aa6e81a
size 11088

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:9c55c8c263d07bb171879860f3c4e276a810393bc55281cb52e8b98c0850380a
size 252852
oid sha256:aad48b326c07ed1eda341817b9a30cc74ef6cc83dd80406dd26aed858112eda8
size 252914

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:fb0c9428c27cb820994130093f0a21bb910da67c2461fecaf3fbcd38c0e58d7d
size 105481
oid sha256:e63a6eaedca373d7154c66d7f9fc5f52e4999dbfaafe00bb06cf94a86e2fb762
size 105538

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:9c55c8c263d07bb171879860f3c4e276a810393bc55281cb52e8b98c0850380a
size 252852
oid sha256:aad48b326c07ed1eda341817b9a30cc74ef6cc83dd80406dd26aed858112eda8
size 252914

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:fb0c9428c27cb820994130093f0a21bb910da67c2461fecaf3fbcd38c0e58d7d
size 105481
oid sha256:e63a6eaedca373d7154c66d7f9fc5f52e4999dbfaafe00bb06cf94a86e2fb762
size 105538

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:db6ddcf3641db14b5b272320bef39f90677e9303cb86debc052781a36044f6ce
size 20166
oid sha256:ebb977417d40a4846b9f6e22f05c95853fecc52cadda31c3a46dadaf970acf9d
size 20088

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:d82d9fce7b91fa9b0ac6a845fc23cda41db2d3b452040700db786784c5cbe83a
size 35352
oid sha256:d443be13466d7114b4bb373669a09031e805ed5b8c6a86c61ee4f171cd7b9d9c
size 35291

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:80acc542f7e99ceb08933fe5f8046f7e643391a8130a21b4322ef2756a088a80
size 33631
oid sha256:0f2ab79facdd2d9d04823bce914119eef9309e7d3c7792b0b47299e598a5729f
size 33569

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:db6ddcf3641db14b5b272320bef39f90677e9303cb86debc052781a36044f6ce
size 20166
oid sha256:ebb977417d40a4846b9f6e22f05c95853fecc52cadda31c3a46dadaf970acf9d
size 20088

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:f2d1a51e21540cb7ea217ff23e72036225b112dc7714d92f516d7aa35469d5a3
size 20248
oid sha256:fad76d0fe41bb115470e9c1e52600e2a8353e4bbe793bec08379d146c8413f07
size 20168

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:425e7e477c1c58265b40f5d64e52352e82b0e6ee9a9c0e0942b8fddd0ebf8304
size 19520
oid sha256:a859ab843e16b205378cc720053ea5430bf180474261b7b8b1b3b8661e3f6ff2
size 19494

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:99ed428ef3e9d2975a806fbd8af4c6257b6766b67bf436cb50f912c0cc57e67a
size 33213
oid sha256:f0b4861dc1df6fbb2b89886c36e9cc92a5d2d147d0ef07ab5b3d6eb9a47b37a4
size 33149

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:ff775fab9516b0d3fb1a2df9ede2ec9eecbadc959bb53d6b082d9be5b373a7b4
size 31819
oid sha256:58c7bfac89b9d0989443c0298638cb3dcf690b9f07ba133d5b45f5f2541f2454
size 31755

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:425e7e477c1c58265b40f5d64e52352e82b0e6ee9a9c0e0942b8fddd0ebf8304
size 19520
oid sha256:a859ab843e16b205378cc720053ea5430bf180474261b7b8b1b3b8661e3f6ff2
size 19494

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:7b34e829e4c3b755bd17d50419ec9f21c6d28c42f807cddcad7716a9871bf285
size 19754
oid sha256:dc06fd37d4bcb88021bfe1db06131b77a0ed1569395851167ebc765d26245f41
size 19702

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:2f5f9afdf10404a81be8c8c52b6010edd97d99693491d11f0fe0bcc4fe16c7ae
size 12045
oid sha256:fbffe7e34ac02d5329ac0d83bcb55108e374050deef36e43cc8d93ade25ed5be
size 11980

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:1e9190242b873ef054be387b41603a738a68c836732d7d72902b744c230793d6
size 30033
oid sha256:4e51c776dd39f7671b8df3be8b364986a521cbf004a4f89e20dde5d45e24a618
size 29980

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:b9350a2fbbd4c8f530b4bb5778cb1d4461a2437222339d1aba0cab555634c9c2
size 28368
oid sha256:bcb36100bd15cbd4df401cb17abf7a9ef19cc0e142b0d55de2e68bfd344cf6f3
size 28316

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:2f5f9afdf10404a81be8c8c52b6010edd97d99693491d11f0fe0bcc4fe16c7ae
size 12045
oid sha256:fbffe7e34ac02d5329ac0d83bcb55108e374050deef36e43cc8d93ade25ed5be
size 11980

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:68b91dd3884b78567f2d07a0c95eed16dfba6ed995fb1b32af0d2249f16a1eb7
size 12243
oid sha256:8a99b54873f8d8441f2884f7de01dede84452d5bd55e7ce2b3d3846e87f4cb81
size 12169

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:3e22f506097d964b21a66508219644f8f4b989ec7bf8ae22aa4f5c44ec337818
size 15815
oid sha256:e3f9d62e5987a04e440c22833d5a3d74bf0e4366ebe46c41c04ce81d0f29d8a8
size 15755

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:2867b178672ad79489cbc97977aeffc5ff1575bbf41f42d5b9183abd871df737
size 24412
oid sha256:428e58eca464163f8ffe2a238816c15321d35ee7bb81cbdf0610e5e828abf289
size 24348

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:937198fe6c7e90e5b55c449eca3d020358c02bc658ae9541702ea4b41e589448
size 26772
oid sha256:8d44c6221d1222119ee2ebdd103f1936cc82c539f508cc6ed818a74e56da2f10
size 26709

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:e7468007bd3ae791b1d440040ee4479cc9af4377275c115f8f8d78b74eaf62d4
size 11524
oid sha256:db633069997ba5f56ff75a483cdd778f3c6c39c1df994ee407567c6a0adfc097
size 11480

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:3d8aab7ba291a4af5c1aabe620f56ba0c1d39e15c2b181bf35f287faae921327
size 28114
oid sha256:3964999f7960ea2275435606661d8d3b84f3a1894f77f7457b327989e6c4ff0a
size 28087

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:e46b01fd5b5378aa9b01992fb966c0e10bf7089a8fc2555b996aba3144783d3e
size 26728
oid sha256:b149dfe07fc7fdb260f7e3cca19bc80d3c53c666ef849d43ba274f472fd768c2
size 26701

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:e7468007bd3ae791b1d440040ee4479cc9af4377275c115f8f8d78b74eaf62d4
size 11524
oid sha256:db633069997ba5f56ff75a483cdd778f3c6c39c1df994ee407567c6a0adfc097
size 11480

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:1c3e3e4eba5dc82e22908640e400c57c0a2d01b8adb007ee2aaee4fec175ee1f
size 11706
oid sha256:807eb444f3594f8590287d176c1f05cb7a296e9475ae273df77b4f91bd123959
size 11668

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:ae22df52afd433d81c2e146cef6b455630de4e1d76eb2b30628ec9b8f87a2522
size 15011
oid sha256:531dc0c74b9ab506c173ed2ad309910feb1201b77271063aee8682c0a3d6be5f
size 14964

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:6663d8bafc3176cfe83d486821ec91ab3204043ee468e689e159ff0af9e9fa5d
size 23411
oid sha256:d2b9390804bdc98113ee8de5e7863e3238e1bfaf1fca0cb3a9a22bd8419ae839
size 23367

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:e763e8bc81c459b36caeb1b8a74ba262109e3c0ee1bbcf8436d944a1737c8601
size 25920
oid sha256:4e9ea055dfcdc87173c592d595a0694ac8217c0279db26c14a53d4272052163d
size 25885

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:56b12e5828048f6a2a31b634166b2532e79ce07a127576c1315179ebdf6f41a3
size 22390
oid sha256:c31d0c13cef9e3f9df414353f34b4d327df888703bfa0b5d571ce5e75126d108
size 22487

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:aec15e950694f615b669d0293239b95ba5bf196ab8b4e21850b90100e20104c4
size 20962
oid sha256:1296a63b38a5af029f218dad65c13123a3e0cbe45d1fb812f3a3004d611c279d
size 21062

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:7fc0cfe3ba0162172f4ea54d465058c466f56506bd062915493d8dd1bf5f31c1
size 30175
oid sha256:dcae7f1c17aadee8dac1f4ade0eef9d18392e35ea3182e48473413b0035fdbcb
size 30276

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:73ec67d63e906aa0963de41487b77558d700b1c9dab96536be4720a9c311dda8
size 27525
oid sha256:f9ef27a7f39821bde064f87ad6cc46da671b7570e53aa1fbabbd5efa220a45d6
size 27620

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:81ffabdfbd54f0e2ab398cc8030160b9725a8b26c216a9cd11f7b45158ada49c
size 17696
oid sha256:bc7f78c0ce55c6e1b0759576f80511d7718291e5903cd0a7cbb19c46bfbec686
size 17684

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:15365c9b1adbc40c50db03a3845c941de1ea9fd8425c48e217449de1e016a8bd
size 7620
oid sha256:1bfc723cc3cadef302fae4db56142e7a4ecdec4c43593e0d1122a8b3bb8d4770
size 7616

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:aaf41349a72f2c99dcc44021f5e27caa30f4cc577b6f21c30221843a361e8bfc
size 8456
oid sha256:5395f34b153a3c453c95970f326e701e7e5619b53b9bf38dd6a9cff107e28407
size 8460

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:14a7181c7aacb760dc0cb07c8896f6822701d000615ad5f86e70b28ad6207129
size 6756
oid sha256:5fb195657c1ac0379839bba6acc0935f6b1b946714ba252d5797fd4bc0c514db
size 6753

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:cfafaac57839be7ec6238647711c6f750a8ad11dda8ab8a85e6132dcfef8014b
size 17401
oid sha256:18e3bb4c57bddd1422c68ddf3a02be0d948e21c55857efb33f71fd4f0039d37c
size 17408

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:09fbcc14bc3b1d54bc5c202f369b6e234b2ac8deabeb6db96b31564b6d53a2e4
size 7525
oid sha256:6c100f4c1d3d7c33085b76306823c4050121534ff096a9d73124683ff8db6090
size 7541

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:a501e70ad9f6d15e0d99c542ec606f1a2cf444d6934f41425e9bcb5dd2244b69
size 8365
oid sha256:daed25bb59f0cca8d4bdb5139a177904a407b7d42f9e2d7053fd6f7362c141bf
size 8372

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