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:
parent
0c10784e26
commit
9756afc5d1
536 changed files with 1187 additions and 1148 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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() }
|
||||
)
|
||||
)
|
||||
|
|
|
|||
|
|
@ -145,6 +145,7 @@ fun TimelineView(
|
|||
key = { timelineItem -> timelineItem.identifier() },
|
||||
) { timelineItem ->
|
||||
TimelineItemRow(
|
||||
modifier = Modifier.animateItem(),
|
||||
timelineItem = timelineItem,
|
||||
timelineRoomInfo = state.timelineRoomInfo,
|
||||
renderReadReceipts = state.renderReadReceipts,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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)) }
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
},
|
||||
|
|
|
|||
|
|
@ -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() }
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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),
|
||||
|
|
|
|||
|
|
@ -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(
|
||||
|
|
|
|||
|
|
@ -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
|
||||
) {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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 }
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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>()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
) {
|
||||
|
|
|
|||
|
|
@ -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) }
|
||||
),
|
||||
|
|
|
|||
|
|
@ -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) }
|
||||
),
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
),
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
),
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:25428c6db7cc00dc9ac1133d56e4f30f6970a1a0f0e14a551a44eff1f6afde5f
|
||||
size 8336
|
||||
oid sha256:d8321503209048b152d1ed52cf2339c8c96276b4f40d71660a92b9a8b919efcf
|
||||
size 8386
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:69649cb5813f8fccdb60c72d2c5df002419a6bc45cab754f2a300fe907b7cf93
|
||||
size 6969
|
||||
oid sha256:3fcde8c552b5080a87e1339d6f23fd9f0b291161525563197bffbdca2e6802e0
|
||||
size 6994
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:beefa333127ea567719bcdc1d8ebe03e67c933e866a1696e520d04ff10ad416d
|
||||
size 8355
|
||||
oid sha256:e88a14813e0923365b98dc046479b4625b732bef2befe4bd1ddddacc8598aaf7
|
||||
size 8389
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:f57ef9707cdd88e1f77d27a185800ef14f11e7749368ff0cbad61d21e082fda6
|
||||
size 7083
|
||||
oid sha256:092a39015ccb36d09f65ed18760eb1e36dcab1e0809d404bfd9f4aed9961eca4
|
||||
size 7110
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:aa07d35d6967771dde192bfc08eec5e208f0edbf05955bba9f82e23efcabf3ca
|
||||
size 8281
|
||||
oid sha256:30efa4ef62ce38f3599c1a6f2a99c9a36e5704a70c99d83670b5f2169a8648f3
|
||||
size 8378
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:3e32f2e9ac5e091361650ed29b9a47dbf35196f872f7ef8ed89240fbc836beb4
|
||||
size 7906
|
||||
oid sha256:a1a5ca1ae30e3b1c4c2b242b3527a3c09b09acb415ad11333ad4b1f07182cbed
|
||||
size 8005
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:c976f3c1d4809c28cb865b0dfe7ce1eed5fe2c9959a80da8efab5d3594e38e41
|
||||
size 14427
|
||||
oid sha256:925dc31415feddb28616043aaeadc5e18ad5b329ad7414ca5da69c772dd34e5b
|
||||
size 14528
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:d6acbdb4ea1e66fa4638fc9b454566968081c511e0dcfde3f1e57fd9725a1edb
|
||||
size 13263
|
||||
oid sha256:546837f4f7021f4e05d3d10e953ef09a9fb7f7dc136a8d48dae24690a6877e4a
|
||||
size 13366
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:a5442a44fa31fbd78eb58be78ea485c919380d83a6fde0cad9e6a97b0a59a491
|
||||
size 19876
|
||||
oid sha256:7297bdfeec3c126f0ab3f78a58ff6f3ed513199457ca627c189169c88f288fb5
|
||||
size 19976
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:91bfca2a62a5745472ad34070e24111bc81632c5053d4aae284f9db3acf0cef4
|
||||
size 18578
|
||||
oid sha256:70d89e441fa190cee145e56d9d62f2cda663d9054d038d9402464ced33f46917
|
||||
size 18675
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:418e64406425c9519e55ea94b1a5a5af8178bfe8ff97e154a21419d052f9966c
|
||||
size 68219
|
||||
oid sha256:3540f43d9c2b446ddf110e88661334f9b25dc15b200ab3841fd7588aed662a73
|
||||
size 68250
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:25f23f41ab4f151a9240be2e7771c0f2ea0f6c8fb7eacf75549ff26e25b5c202
|
||||
size 59537
|
||||
oid sha256:a07ef1ecaa31561bdeb34160f89fa9d81ff8736e1680f6594aafbc263f1f2178
|
||||
size 59543
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:23312c1f451cf556fff753206848e9d6c3359df4c703ff0f2d58190b43dc7859
|
||||
size 266126
|
||||
oid sha256:3e2e62c68474d9f814e35c03ba1458a4e4d62f7bc4239f9f719d305e986cd66b
|
||||
size 260887
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:f7ae6f66e7fbf8cb8338f3368f3e70cec59d417e278424981a159b8f062143da
|
||||
size 345550
|
||||
oid sha256:3f7f9ec486a3bdb3a6c27ebfe391577cbf59051870a0161db9bd6f3a62abf042
|
||||
size 341417
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:33d39c0a6e9c514a44182b5da0f8e5725b6649ab4b0533eaf895797dc970999a
|
||||
size 10179
|
||||
oid sha256:1ee71bc4af44aed32f1603111ff2680c440319c1dd691c6c1774f04c859c2e3a
|
||||
size 10274
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:c30a73e033ca799a38942d23893eb7a3e3e4f09aa473d07cc03fa2f1a7ac22e3
|
||||
size 9034
|
||||
oid sha256:5183f090192627b3b11f80c344381ba65c2977cc781cd59674003168bcea7e74
|
||||
size 9131
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:563d5fb3d177add8f3234d1cd07b8320e3cf36599234181d765e6263f2a8b401
|
||||
size 11353
|
||||
oid sha256:c4c96790d61f5ae03c3b32d5ea85d2b1efddc84f248f2373290f28c15ced4dc0
|
||||
size 11443
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:9c3e295887c5cb8cf98f24a7de9418f1a28349df90117587404f830e9e44f261
|
||||
size 10998
|
||||
oid sha256:da6d82da577060eafd43bd4c13867cac99143fb8bc877f7149db4c3f4aa6e81a
|
||||
size 11088
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:9c55c8c263d07bb171879860f3c4e276a810393bc55281cb52e8b98c0850380a
|
||||
size 252852
|
||||
oid sha256:aad48b326c07ed1eda341817b9a30cc74ef6cc83dd80406dd26aed858112eda8
|
||||
size 252914
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:fb0c9428c27cb820994130093f0a21bb910da67c2461fecaf3fbcd38c0e58d7d
|
||||
size 105481
|
||||
oid sha256:e63a6eaedca373d7154c66d7f9fc5f52e4999dbfaafe00bb06cf94a86e2fb762
|
||||
size 105538
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:9c55c8c263d07bb171879860f3c4e276a810393bc55281cb52e8b98c0850380a
|
||||
size 252852
|
||||
oid sha256:aad48b326c07ed1eda341817b9a30cc74ef6cc83dd80406dd26aed858112eda8
|
||||
size 252914
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:fb0c9428c27cb820994130093f0a21bb910da67c2461fecaf3fbcd38c0e58d7d
|
||||
size 105481
|
||||
oid sha256:e63a6eaedca373d7154c66d7f9fc5f52e4999dbfaafe00bb06cf94a86e2fb762
|
||||
size 105538
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:db6ddcf3641db14b5b272320bef39f90677e9303cb86debc052781a36044f6ce
|
||||
size 20166
|
||||
oid sha256:ebb977417d40a4846b9f6e22f05c95853fecc52cadda31c3a46dadaf970acf9d
|
||||
size 20088
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:d82d9fce7b91fa9b0ac6a845fc23cda41db2d3b452040700db786784c5cbe83a
|
||||
size 35352
|
||||
oid sha256:d443be13466d7114b4bb373669a09031e805ed5b8c6a86c61ee4f171cd7b9d9c
|
||||
size 35291
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:80acc542f7e99ceb08933fe5f8046f7e643391a8130a21b4322ef2756a088a80
|
||||
size 33631
|
||||
oid sha256:0f2ab79facdd2d9d04823bce914119eef9309e7d3c7792b0b47299e598a5729f
|
||||
size 33569
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:db6ddcf3641db14b5b272320bef39f90677e9303cb86debc052781a36044f6ce
|
||||
size 20166
|
||||
oid sha256:ebb977417d40a4846b9f6e22f05c95853fecc52cadda31c3a46dadaf970acf9d
|
||||
size 20088
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:f2d1a51e21540cb7ea217ff23e72036225b112dc7714d92f516d7aa35469d5a3
|
||||
size 20248
|
||||
oid sha256:fad76d0fe41bb115470e9c1e52600e2a8353e4bbe793bec08379d146c8413f07
|
||||
size 20168
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:425e7e477c1c58265b40f5d64e52352e82b0e6ee9a9c0e0942b8fddd0ebf8304
|
||||
size 19520
|
||||
oid sha256:a859ab843e16b205378cc720053ea5430bf180474261b7b8b1b3b8661e3f6ff2
|
||||
size 19494
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:99ed428ef3e9d2975a806fbd8af4c6257b6766b67bf436cb50f912c0cc57e67a
|
||||
size 33213
|
||||
oid sha256:f0b4861dc1df6fbb2b89886c36e9cc92a5d2d147d0ef07ab5b3d6eb9a47b37a4
|
||||
size 33149
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:ff775fab9516b0d3fb1a2df9ede2ec9eecbadc959bb53d6b082d9be5b373a7b4
|
||||
size 31819
|
||||
oid sha256:58c7bfac89b9d0989443c0298638cb3dcf690b9f07ba133d5b45f5f2541f2454
|
||||
size 31755
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:425e7e477c1c58265b40f5d64e52352e82b0e6ee9a9c0e0942b8fddd0ebf8304
|
||||
size 19520
|
||||
oid sha256:a859ab843e16b205378cc720053ea5430bf180474261b7b8b1b3b8661e3f6ff2
|
||||
size 19494
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:7b34e829e4c3b755bd17d50419ec9f21c6d28c42f807cddcad7716a9871bf285
|
||||
size 19754
|
||||
oid sha256:dc06fd37d4bcb88021bfe1db06131b77a0ed1569395851167ebc765d26245f41
|
||||
size 19702
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:2f5f9afdf10404a81be8c8c52b6010edd97d99693491d11f0fe0bcc4fe16c7ae
|
||||
size 12045
|
||||
oid sha256:fbffe7e34ac02d5329ac0d83bcb55108e374050deef36e43cc8d93ade25ed5be
|
||||
size 11980
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:1e9190242b873ef054be387b41603a738a68c836732d7d72902b744c230793d6
|
||||
size 30033
|
||||
oid sha256:4e51c776dd39f7671b8df3be8b364986a521cbf004a4f89e20dde5d45e24a618
|
||||
size 29980
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:b9350a2fbbd4c8f530b4bb5778cb1d4461a2437222339d1aba0cab555634c9c2
|
||||
size 28368
|
||||
oid sha256:bcb36100bd15cbd4df401cb17abf7a9ef19cc0e142b0d55de2e68bfd344cf6f3
|
||||
size 28316
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:2f5f9afdf10404a81be8c8c52b6010edd97d99693491d11f0fe0bcc4fe16c7ae
|
||||
size 12045
|
||||
oid sha256:fbffe7e34ac02d5329ac0d83bcb55108e374050deef36e43cc8d93ade25ed5be
|
||||
size 11980
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:68b91dd3884b78567f2d07a0c95eed16dfba6ed995fb1b32af0d2249f16a1eb7
|
||||
size 12243
|
||||
oid sha256:8a99b54873f8d8441f2884f7de01dede84452d5bd55e7ce2b3d3846e87f4cb81
|
||||
size 12169
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:3e22f506097d964b21a66508219644f8f4b989ec7bf8ae22aa4f5c44ec337818
|
||||
size 15815
|
||||
oid sha256:e3f9d62e5987a04e440c22833d5a3d74bf0e4366ebe46c41c04ce81d0f29d8a8
|
||||
size 15755
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:2867b178672ad79489cbc97977aeffc5ff1575bbf41f42d5b9183abd871df737
|
||||
size 24412
|
||||
oid sha256:428e58eca464163f8ffe2a238816c15321d35ee7bb81cbdf0610e5e828abf289
|
||||
size 24348
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:937198fe6c7e90e5b55c449eca3d020358c02bc658ae9541702ea4b41e589448
|
||||
size 26772
|
||||
oid sha256:8d44c6221d1222119ee2ebdd103f1936cc82c539f508cc6ed818a74e56da2f10
|
||||
size 26709
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:e7468007bd3ae791b1d440040ee4479cc9af4377275c115f8f8d78b74eaf62d4
|
||||
size 11524
|
||||
oid sha256:db633069997ba5f56ff75a483cdd778f3c6c39c1df994ee407567c6a0adfc097
|
||||
size 11480
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:3d8aab7ba291a4af5c1aabe620f56ba0c1d39e15c2b181bf35f287faae921327
|
||||
size 28114
|
||||
oid sha256:3964999f7960ea2275435606661d8d3b84f3a1894f77f7457b327989e6c4ff0a
|
||||
size 28087
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:e46b01fd5b5378aa9b01992fb966c0e10bf7089a8fc2555b996aba3144783d3e
|
||||
size 26728
|
||||
oid sha256:b149dfe07fc7fdb260f7e3cca19bc80d3c53c666ef849d43ba274f472fd768c2
|
||||
size 26701
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:e7468007bd3ae791b1d440040ee4479cc9af4377275c115f8f8d78b74eaf62d4
|
||||
size 11524
|
||||
oid sha256:db633069997ba5f56ff75a483cdd778f3c6c39c1df994ee407567c6a0adfc097
|
||||
size 11480
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:1c3e3e4eba5dc82e22908640e400c57c0a2d01b8adb007ee2aaee4fec175ee1f
|
||||
size 11706
|
||||
oid sha256:807eb444f3594f8590287d176c1f05cb7a296e9475ae273df77b4f91bd123959
|
||||
size 11668
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:ae22df52afd433d81c2e146cef6b455630de4e1d76eb2b30628ec9b8f87a2522
|
||||
size 15011
|
||||
oid sha256:531dc0c74b9ab506c173ed2ad309910feb1201b77271063aee8682c0a3d6be5f
|
||||
size 14964
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:6663d8bafc3176cfe83d486821ec91ab3204043ee468e689e159ff0af9e9fa5d
|
||||
size 23411
|
||||
oid sha256:d2b9390804bdc98113ee8de5e7863e3238e1bfaf1fca0cb3a9a22bd8419ae839
|
||||
size 23367
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:e763e8bc81c459b36caeb1b8a74ba262109e3c0ee1bbcf8436d944a1737c8601
|
||||
size 25920
|
||||
oid sha256:4e9ea055dfcdc87173c592d595a0694ac8217c0279db26c14a53d4272052163d
|
||||
size 25885
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:56b12e5828048f6a2a31b634166b2532e79ce07a127576c1315179ebdf6f41a3
|
||||
size 22390
|
||||
oid sha256:c31d0c13cef9e3f9df414353f34b4d327df888703bfa0b5d571ce5e75126d108
|
||||
size 22487
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:aec15e950694f615b669d0293239b95ba5bf196ab8b4e21850b90100e20104c4
|
||||
size 20962
|
||||
oid sha256:1296a63b38a5af029f218dad65c13123a3e0cbe45d1fb812f3a3004d611c279d
|
||||
size 21062
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:7fc0cfe3ba0162172f4ea54d465058c466f56506bd062915493d8dd1bf5f31c1
|
||||
size 30175
|
||||
oid sha256:dcae7f1c17aadee8dac1f4ade0eef9d18392e35ea3182e48473413b0035fdbcb
|
||||
size 30276
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:73ec67d63e906aa0963de41487b77558d700b1c9dab96536be4720a9c311dda8
|
||||
size 27525
|
||||
oid sha256:f9ef27a7f39821bde064f87ad6cc46da671b7570e53aa1fbabbd5efa220a45d6
|
||||
size 27620
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:81ffabdfbd54f0e2ab398cc8030160b9725a8b26c216a9cd11f7b45158ada49c
|
||||
size 17696
|
||||
oid sha256:bc7f78c0ce55c6e1b0759576f80511d7718291e5903cd0a7cbb19c46bfbec686
|
||||
size 17684
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:15365c9b1adbc40c50db03a3845c941de1ea9fd8425c48e217449de1e016a8bd
|
||||
size 7620
|
||||
oid sha256:1bfc723cc3cadef302fae4db56142e7a4ecdec4c43593e0d1122a8b3bb8d4770
|
||||
size 7616
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:aaf41349a72f2c99dcc44021f5e27caa30f4cc577b6f21c30221843a361e8bfc
|
||||
size 8456
|
||||
oid sha256:5395f34b153a3c453c95970f326e701e7e5619b53b9bf38dd6a9cff107e28407
|
||||
size 8460
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:14a7181c7aacb760dc0cb07c8896f6822701d000615ad5f86e70b28ad6207129
|
||||
size 6756
|
||||
oid sha256:5fb195657c1ac0379839bba6acc0935f6b1b946714ba252d5797fd4bc0c514db
|
||||
size 6753
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:cfafaac57839be7ec6238647711c6f750a8ad11dda8ab8a85e6132dcfef8014b
|
||||
size 17401
|
||||
oid sha256:18e3bb4c57bddd1422c68ddf3a02be0d948e21c55857efb33f71fd4f0039d37c
|
||||
size 17408
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:09fbcc14bc3b1d54bc5c202f369b6e234b2ac8deabeb6db96b31564b6d53a2e4
|
||||
size 7525
|
||||
oid sha256:6c100f4c1d3d7c33085b76306823c4050121534ff096a9d73124683ff8db6090
|
||||
size 7541
|
||||
|
|
|
|||
|
|
@ -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
Loading…
Add table
Add a link
Reference in a new issue