[Compound] Implement platform components (Switch, RadioButton, Checkbox) (#982)

* Create our custom Switch component

* Update RadioButton colors

* Update Checkbox colors

* Fix padding in `ReplyToContent`

* Add `indeterminate` and `hasError` parameters to `CheckBox`.

Improve previews.

* Improve Switch previews.

* Improve RadioButton previews.

---------

Co-authored-by: ElementBot <benoitm+elementbot@element.io>
This commit is contained in:
Jorge Martin Espinosa 2023-07-27 14:55:58 +02:00 committed by GitHub
parent ede935cdd9
commit 914235228d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
52 changed files with 282 additions and 157 deletions

View file

@ -479,7 +479,7 @@ private fun ReplyToContent(
val paddings = if (attachmentThumbnailInfo != null) {
PaddingValues(start = 4.dp, end = 12.dp, top = 4.dp, bottom = 4.dp)
} else {
PaddingValues(start = 12.dp, end = 12.dp, top = 8.dp, bottom = 4.dp)
PaddingValues(horizontal = 12.dp, vertical = 4.dp)
}
Row(
modifier

View file

@ -27,7 +27,6 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.width
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Announcement
import androidx.compose.material3.Switch
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
@ -37,6 +36,7 @@ import androidx.compose.ui.unit.dp
import io.element.android.libraries.designsystem.components.preferences.components.PreferenceIcon
import io.element.android.libraries.designsystem.preview.ElementThemedPreview
import io.element.android.libraries.designsystem.preview.PreviewGroup
import io.element.android.libraries.designsystem.theme.components.Switch
import io.element.android.libraries.designsystem.theme.components.Text
import io.element.android.libraries.designsystem.toEnabledColor
import io.element.android.libraries.designsystem.toSecondaryEnabledColor

View file

@ -17,15 +17,25 @@
package io.element.android.libraries.designsystem.theme.components
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.material3.CheckboxColors
import androidx.compose.material3.CheckboxDefaults
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.state.ToggleableState
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import io.element.android.libraries.designsystem.preview.ElementThemedPreview
import io.element.android.libraries.designsystem.preview.PreviewGroup
import io.element.android.libraries.theme.ElementTheme
// Designs in https://www.figma.com/file/G1xy0HDZKJf5TCRFmKb5d5/Compound-Android-Components?type=design&mode=design&t=qb99xBP5mwwCtGkN-1
@Composable
fun Checkbox(
@ -33,12 +43,22 @@ fun Checkbox(
onCheckedChange: ((Boolean) -> Unit)?,
modifier: Modifier = Modifier,
enabled: Boolean = true,
colors: CheckboxColors = CheckboxDefaults.colors(),
hasError: Boolean = false,
indeterminate: Boolean = false,
colors: CheckboxColors = if (hasError) compoundErrorCheckBoxColors() else compoundCheckBoxColors(),
interactionSource: MutableInteractionSource = remember { MutableInteractionSource() }
) {
androidx.compose.material3.Checkbox(
checked = checked,
onCheckedChange = onCheckedChange,
var indeterminateState by remember { mutableStateOf(indeterminate) }
androidx.compose.material3.TriStateCheckbox(
state = if (!checked && indeterminateState) ToggleableState.Indeterminate else ToggleableState(checked),
onClick = if (onCheckedChange != null) {
{
indeterminateState = false
onCheckedChange(!checked)
}
} else {
null
},
modifier = modifier,
enabled = enabled,
colors = colors,
@ -46,6 +66,30 @@ fun Checkbox(
)
}
@Composable
private fun compoundCheckBoxColors(): CheckboxColors {
return CheckboxDefaults.colors(
checkedColor = ElementTheme.materialColors.primary,
uncheckedColor = ElementTheme.colors.borderInteractivePrimary,
checkmarkColor = ElementTheme.materialColors.onPrimary,
disabledUncheckedColor = ElementTheme.colors.borderDisabled,
disabledCheckedColor = ElementTheme.colors.iconDisabled,
disabledIndeterminateColor = ElementTheme.colors.iconDisabled,
)
}
@Composable
private fun compoundErrorCheckBoxColors(): CheckboxColors {
return CheckboxDefaults.colors(
checkedColor = ElementTheme.materialColors.error,
uncheckedColor = ElementTheme.materialColors.error,
checkmarkColor = ElementTheme.materialColors.onPrimary,
disabledUncheckedColor = ElementTheme.colors.borderDisabled,
disabledCheckedColor = ElementTheme.colors.iconDisabled,
disabledIndeterminateColor = ElementTheme.colors.iconDisabled,
)
}
@Preview(group = PreviewGroup.Toggles)
@Composable
internal fun CheckboxesPreview() = ElementThemedPreview(vertical = false) { ContentToPreview() }
@ -53,9 +97,33 @@ internal fun CheckboxesPreview() = ElementThemedPreview(vertical = false) { Cont
@Composable
private fun ContentToPreview() {
Column {
Checkbox(onCheckedChange = {}, enabled = true, checked = true)
Checkbox(onCheckedChange = {}, enabled = true, checked = false)
Checkbox(onCheckedChange = {}, enabled = false, checked = true)
Checkbox(onCheckedChange = {}, enabled = false, checked = false)
// Unchecked
Row(horizontalArrangement = Arrangement.spacedBy(6.dp)) {
Checkbox(onCheckedChange = {}, enabled = true, checked = false)
Checkbox(onCheckedChange = {}, enabled = false, checked = false)
}
// Checked
Row(horizontalArrangement = Arrangement.spacedBy(6.dp)) {
Checkbox(onCheckedChange = {}, enabled = true, checked = true)
Checkbox(onCheckedChange = {}, enabled = false, checked = true)
}
// Indeterminate
Row(horizontalArrangement = Arrangement.spacedBy(6.dp)) {
Checkbox(onCheckedChange = {}, enabled = true, checked = false, indeterminate = true)
Checkbox(onCheckedChange = {}, enabled = false, checked = false, indeterminate = true)
}
// Error
Row(horizontalArrangement = Arrangement.spacedBy(6.dp)) {
Checkbox(hasError = true, onCheckedChange = {}, checked = false)
Checkbox(hasError = true, onCheckedChange = {}, enabled = false, checked = false)
}
Row(horizontalArrangement = Arrangement.spacedBy(6.dp)) {
Checkbox(hasError = true, onCheckedChange = {}, enabled = true, checked = true)
Checkbox(hasError = true, onCheckedChange = {}, enabled = false, checked = true)
}
Row(horizontalArrangement = Arrangement.spacedBy(6.dp)) {
Checkbox(onCheckedChange = {}, enabled = true, checked = false, indeterminate = true, hasError = true)
Checkbox(onCheckedChange = {}, enabled = false, checked = false, indeterminate = true, hasError = true)
}
}
}

View file

@ -17,15 +17,21 @@
package io.element.android.libraries.designsystem.theme.components
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.material3.RadioButtonColors
import androidx.compose.material3.RadioButtonDefaults
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import io.element.android.libraries.designsystem.preview.ElementThemedPreview
import io.element.android.libraries.designsystem.preview.PreviewGroup
import io.element.android.libraries.theme.ElementTheme
// Designs in https://www.figma.com/file/G1xy0HDZKJf5TCRFmKb5d5/Compound-Android-Components?type=design&node-id=425%3A24202&mode=design&t=qb99xBP5mwwCtGkN-1
@Composable
fun RadioButton(
@ -33,7 +39,7 @@ fun RadioButton(
onClick: (() -> Unit)?,
modifier: Modifier = Modifier,
enabled: Boolean = true,
colors: RadioButtonColors = RadioButtonDefaults.colors(),
colors: RadioButtonColors = compoundRadioButtonColors(),
interactionSource: MutableInteractionSource = remember { MutableInteractionSource() }
) {
androidx.compose.material3.RadioButton(
@ -46,6 +52,15 @@ fun RadioButton(
)
}
@Composable
internal fun compoundRadioButtonColors(): RadioButtonColors {
return RadioButtonDefaults.colors(
unselectedColor = ElementTheme.colors.borderInteractivePrimary,
disabledUnselectedColor = ElementTheme.colors.borderDisabled,
disabledSelectedColor = ElementTheme.colors.iconDisabled,
)
}
@Preview(group = PreviewGroup.Toggles)
@Composable
internal fun RadioButtonPreview() = ElementThemedPreview(vertical = false) { ContentToPreview() }
@ -53,9 +68,13 @@ internal fun RadioButtonPreview() = ElementThemedPreview(vertical = false) { Con
@Composable
private fun ContentToPreview() {
Column {
RadioButton(selected = false, onClick = {})
RadioButton(selected = true, onClick = {})
RadioButton(selected = false, enabled = false, onClick = {})
RadioButton(selected = true, enabled = false, onClick = {})
Row(horizontalArrangement = Arrangement.spacedBy(6.dp)) {
RadioButton(selected = false, onClick = {})
RadioButton(selected = false, enabled = false, onClick = {})
}
Row(horizontalArrangement = Arrangement.spacedBy(6.dp)) {
RadioButton(selected = true, onClick = {})
RadioButton(selected = true, enabled = false, onClick = {})
}
}
}

View file

@ -0,0 +1,89 @@
/*
* Copyright (c) 2023 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.element.android.libraries.designsystem.theme.components
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.SwitchColors
import androidx.compose.material3.SwitchDefaults
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import io.element.android.libraries.designsystem.preview.ElementThemedPreview
import io.element.android.libraries.designsystem.preview.PreviewGroup
import io.element.android.libraries.theme.ElementTheme
import androidx.compose.material3.Switch as Material3Switch
// Designs in https://www.figma.com/file/G1xy0HDZKJf5TCRFmKb5d5/Compound-Android-Components?type=design&node-id=425%3A24203&mode=design&t=qb99xBP5mwwCtGkN-1
@Composable
fun Switch(
checked: Boolean,
onCheckedChange: ((Boolean) -> Unit)?,
modifier: Modifier = Modifier,
enabled: Boolean = true,
colors: SwitchColors = compoundSwitchColors(),
interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
thumbContent: (@Composable () -> Unit)? = null,
) {
Material3Switch(
checked = checked,
onCheckedChange = onCheckedChange,
modifier = modifier,
enabled = enabled,
colors = colors,
interactionSource = interactionSource,
thumbContent = thumbContent
)
}
@Composable
internal fun compoundSwitchColors() = SwitchDefaults.colors(
uncheckedThumbColor = ElementTheme.colors.bgActionPrimaryRest,
uncheckedTrackColor = Color.Transparent,
disabledUncheckedBorderColor = ElementTheme.colors.borderDisabled,
disabledUncheckedThumbColor = ElementTheme.colors.iconDisabled,
disabledCheckedTrackColor = ElementTheme.colors.iconDisabled,
disabledCheckedBorderColor = ElementTheme.colors.iconDisabled,
)
@Preview(group = PreviewGroup.Toggles)
@Composable
internal fun SwitchPreview() {
var checked by remember { mutableStateOf(false) }
ElementThemedPreview {
Column(modifier = Modifier.padding(10.dp), verticalArrangement = Arrangement.spacedBy(6.dp)) {
Row(horizontalArrangement = Arrangement.spacedBy(6.dp)) {
Switch(checked = checked, onCheckedChange = { checked = !checked })
Switch(enabled = false, checked = checked, onCheckedChange = { checked = !checked })
}
Row(horizontalArrangement = Arrangement.spacedBy(6.dp)) {
Switch(checked = !checked, onCheckedChange = { checked = !checked })
Switch(enabled = false, checked = !checked, onCheckedChange = { checked = !checked })
}
}
}
}

View file

@ -1,51 +0,0 @@
/*
* Copyright (c) 2023 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.element.android.libraries.designsystem.theme.components.previews
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Row
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Check
import androidx.compose.material3.Switch
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import io.element.android.libraries.designsystem.preview.ElementThemedPreview
import io.element.android.libraries.designsystem.preview.PreviewGroup
import io.element.android.libraries.designsystem.theme.components.Icon
@Preview(group = PreviewGroup.Toggles)
@Composable
internal fun SwitchPreview() {
ElementThemedPreview {
Row(horizontalArrangement = Arrangement.spacedBy(8.dp)) {
var checked by remember { mutableStateOf(false) }
Switch(checked = checked, onCheckedChange = { checked = !checked })
Switch(checked = checked, onCheckedChange = { checked = !checked }, thumbContent = {
Icon(imageVector = Icons.Outlined.Check, contentDescription = null)
})
Switch(checked = checked, enabled = false, onCheckedChange = { checked = !checked })
Switch(checked = checked, enabled = false, onCheckedChange = { checked = !checked }, thumbContent = {
Icon(imageVector = Icons.Outlined.Check, contentDescription = null)
})
}
}
}

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:d47034cafef80cdac5d702e52092f07ebc0bb96dbdd7f9f0c1ea2e302cbe9917
size 33858
oid sha256:7b42afece0186cbbcb9ca5b716c3c535147d27bf1c57cabf033339fe9100edeb
size 33889

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:84ea420320bd406588cb4d9aa3fea79d63ec37fc31a00d4fa77a06a7c8499145
size 35452
oid sha256:248817743f94c09d5bb02580687f5d9150dcf22b1670289955197491f375ad65
size 35640

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:d01eaadfd0b9508c44145ba2e6cd85a6a24fdb43f665188404f9da1cf3e03321
size 86292
oid sha256:a4f987d8b03013d3aacbcc2b5a7374148c29d2c24dc41211781db15a06f3d52a
size 86365

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:45f4c5a3edbf61d815a7b1221a73123b09c8767d15ae2d9ae04f11ae3defe697
size 67911
oid sha256:90a7a6bc46fea5d6a02c9e3b6a29018e51fe270fc5034fdd7f9045f6fbbbc1d9
size 67916

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:6811324cfc868722c57a02f2544ffcbbb2f2247fc9284e4e6fe869e33447c7b1
size 69939
oid sha256:037e24e82436183ed2ff4138a997c232e331076dd5374958e11efcfa8063b4d2
size 69962

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:0169cdedfc56ba1b55f133ed41146a0ec3597123a88ed086f7584f06d235da26
size 57732
oid sha256:3cb08dc14db764d1bc432dc58374cad50da83c5e30e7e48077b6f400aa7a3c9b
size 57811

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:a0cdeea89592fbad03e1ad29aa1616bd779403f022097ca11510ff9cda3457aa
size 83656
oid sha256:d0a9c923401980b00b756159f9c77f153892b79cc2b806150734b6bd8f67fe4d
size 83675

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:f61e37505ee1276d894641647ec34323f415f4a3cdc699de01579a92255c2a4e
size 60941
oid sha256:4e543f94df5f2de717e7e870fe043ecf72b29aeaca23d33b9b16af76e2cc1636
size 61222

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:630fa772c15d8f16461655b2c2763d8ca85dc29812fea7d01366d68e3a446eaf
size 86660
oid sha256:1b94a9fdcf1f2c62fa2a0f574210b85de96ba068ba17ba562af79f21d7a38f8f
size 86854

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:911217e791dc46e76b4866efc7eed59dc721795b0434f0a985078a9847347980
size 26652
oid sha256:71cee553053649ba9c83f5219d367d860897bc1ca3a5a0c35a234563d6bb5c16
size 26604

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:c1ccba126f5fef03ee24c6089088b2014911452a7c54eeab3caa49389b9859d3
size 26253
oid sha256:599e2496f9364d55dcc0cdb48b4b4919c052b0a66634d69bbb40834b03559b97
size 26204

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:093b9faa97e65ad0108882964e8e8af7a980a2fdbde32d8ff83d8420cf8b6f95
size 26425
oid sha256:4561451a8bbd583ffd2bb38be5c41fe9ae787b54500cc4c14af8d85989558fec
size 26387

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:093b9faa97e65ad0108882964e8e8af7a980a2fdbde32d8ff83d8420cf8b6f95
size 26425
oid sha256:4561451a8bbd583ffd2bb38be5c41fe9ae787b54500cc4c14af8d85989558fec
size 26387

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:093b9faa97e65ad0108882964e8e8af7a980a2fdbde32d8ff83d8420cf8b6f95
size 26425
oid sha256:4561451a8bbd583ffd2bb38be5c41fe9ae787b54500cc4c14af8d85989558fec
size 26387

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:162b68e63538b71e1b3a265281bebd7f56df3cd624caeafa94ab80d46326e2d4
size 28162
oid sha256:d3383f2ec12b187ad1d6402fb852c98d8041376c6ecee372e91529554bd30994
size 28286

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:775effbea7088ea32b6eef036968d0be99bc267d4fdea2269d3ab1101f0ee240
size 27542
oid sha256:6665acc104fcc5477be20460ea5b3ba7cd75491bcd3c7df6fa244747ab55706c
size 27690

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:95313cb1717aabbb275b4ed039741da2ddf95af02d177f426b354701cc9badd9
size 27947
oid sha256:00e3ad9d2805d4d8e856e30226e0da4297ef5ae25c1e3b5760bf23e0611a7b97
size 27977

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:95313cb1717aabbb275b4ed039741da2ddf95af02d177f426b354701cc9badd9
size 27947
oid sha256:00e3ad9d2805d4d8e856e30226e0da4297ef5ae25c1e3b5760bf23e0611a7b97
size 27977

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:95313cb1717aabbb275b4ed039741da2ddf95af02d177f426b354701cc9badd9
size 27947
oid sha256:00e3ad9d2805d4d8e856e30226e0da4297ef5ae25c1e3b5760bf23e0611a7b97
size 27977

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:c00bf46d1ef6337bad18f6454cf4601141ed2190c6a697ddc46d5a156d4997ca
size 127950
oid sha256:26878fecd5785eed15a1fa46fabb0b2942139bf86dbce15ae544bfa5edf791e5
size 127652

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:88cd76c95c31061bf4e9e7528ed5d66a8b49813d868f21b2d2615e77318a9706
size 133068
oid sha256:cbdc89d08cd8e689bb603437dbbbeccab2870740752af313cd8b60ae48aee839
size 132950

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:ba708a48280a4f42196d61b0cfbb7f0bf6e4a818b8e76ba981e5cbacff37c9dd
size 25493
oid sha256:e8c4254a13c72f1e6e710caafb173623697b3aba5472ddbf14a9a8a8a16722d1
size 25454

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:8b75a4207e4dc3fc0e3a124574e0352eeb7e731558d90b4d19060d3a046b76e7
size 26656
oid sha256:bfa0258b099d0fb6451eddcf38dc2184bad611355f56054ede8c874ea28b9fe8
size 26579

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:6c0a16524e1017274eeb0f07a50a47c6351af9a901355b54cccbc9ec799e79f4
size 45174
oid sha256:4a9a3902dd33ab3e528fa9c534302228113cc468914025766a21397ad3eda9e2
size 45064

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:6c0a16524e1017274eeb0f07a50a47c6351af9a901355b54cccbc9ec799e79f4
size 45174
oid sha256:4a9a3902dd33ab3e528fa9c534302228113cc468914025766a21397ad3eda9e2
size 45064

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:abb7854a1e47764a907434cdf32e138b95c947bab682da485eea86f9726cf3b9
size 49946
oid sha256:cd1cc710443af62efddf0ea165a6289912f471f669803255368d3266b872f5f6
size 49829

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:abb7854a1e47764a907434cdf32e138b95c947bab682da485eea86f9726cf3b9
size 49946
oid sha256:cd1cc710443af62efddf0ea165a6289912f471f669803255368d3266b872f5f6
size 49829

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:07e1283e5ac86cf9c77b0695a6622682e7257abce1e7787440f50c8f42ca0291
size 64632
oid sha256:5ef9e33bf65764ef25b4184c9f49be8befe4f6fad77d5f6fafc5ffcb7c09fb51
size 64682

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:dac098de353f8dce2d8eea77bccdcebf997c642f05afaa15c02a9bcf230fa37a
size 200158
oid sha256:a7f9a86df68cb0595c23c86e7b91f73af55531dd0495f0409471fb94165bdeb6
size 200178

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:c4b2f7af207e8d2f951474575de12969e0fdf0831ce68fdfde5b67b364c67156
size 55013
oid sha256:4ce0000ec9242c0b65fb06d1fea4622143bda5bebb691f8114890edf47f341ec
size 55166

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:91fcd5dc74788d4f597dfc265a1d6a7511e5f4db47323d930f7c54c7df7d62bd
size 67464
oid sha256:cbe0ca40022613ac7df059bad8a8cb3f60b1242a0d28b3cd2b5a59a7a26d828d
size 67488

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:3583a0758b9c02c7e165dc593f7a090a54d70bcfa0f39853ba3bddb42850d404
size 204354
oid sha256:d10808329ac9280334c5bad3230eace88eb768a9e13b7d736c4e99cc74124c84
size 204325

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:3dac3ed1e6c46265e8b0f7bb479042271668178ff2ad34baae3cb2d777c7902a
size 59091
oid sha256:bd04de63275687ad4a905a3438f47898f864ff75591f6fc191d074550787661d
size 59880

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:cc5794eba22329603285fa264519fd9c4c7dae4ddb867ebe54f5c87f4af646fb
size 45438
oid sha256:da3f4846d648ab399604db869980c41243ba6e7f91f16365cdae00305ce5723e
size 45416

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:f67bdbeedafdaf59f1bb643d86dbfdf10442900d7d426e2e31cf62ed5fe43d9d
size 38555
oid sha256:0fc4fe77d849f04f55c5142f95493a1a05cf2ba44293b5fe81414336d1687dad
size 38540

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:af4c302e55c391b0aa69a418f80f8df514157a9c30d3f33b28cf6c322c458182
size 46942
oid sha256:d1b2742a29099293462ef6a020f4440143db9512b70b5638d09af685c012bb11
size 46910

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:aca6a614db1bcaec2a0b8ad4c3a64c761fda757e32865f535e75f470fda97774
size 40683
oid sha256:0a5e412535f5c0fc384983f0b58319151c2e60a7b30f4f1e89a4411717ed93eb
size 40701

View file

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

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:eb51ba92db07682afe5727078f8e8b0a44cad16566b97430ca92132689bf25e7
size 10188
oid sha256:30dc47ea866c8d8c1faab02ce12e9d00441a70b778bb267a3c52a5eb8635e6ad
size 16686

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:ae7c673ab96eaa30a72ffa4b960b93f7c5971be1155aba7d03ac4c43652098ca
size 16361
oid sha256:88c7be1a8cff74b057ee0f7ba09922c814c8c0b6a3dbaa69ea58ec287c425fca
size 14357

View file

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

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:254850b3a638c4d54d9f6642c15caf3e4037c47ce50ae48102e2346df6e8947f
size 29282
oid sha256:b49f3a925c6652957bbb90c71d2dc47618d47cf76ceec50d71d9ee8758a41ea8
size 29262

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:b8f5077f75ee156faae31e73d464840fda51f82b0666f0a8e661295eb193b133
size 27442
oid sha256:3a12ecd968f65e56fb995dcc05f7c9e3160a37dc1d9a95c8b6c52ba488fb1b22
size 27454

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:4f59b518dafea7d576a888661d740afeb1a6e72d432527a5f27d4a0a695eab35
size 29718
oid sha256:f428d22f64900a84904f02d7f49c0c7e9b295facaba3b86cec7175d98385dca9
size 29663

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:7988848232d0f44f6fd04b1a8a8ce17681659be7e63a9f68f4f3743d51f3a679
size 29382
oid sha256:26a2304fe3e5ad79241843a8dfdb9cb81d47a8cd4b4c9ce7cc0552d8be91d03d
size 29404

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:3f6792f7963608fd167889be3e657ac6ca6eafa6949bfbf03fa21f9a07b34573
size 115873
oid sha256:d192c21d0da760d33517a226e93d8e994d6a83bbcebc422deae1dcca7e512f71
size 115822