[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 c68c329538
commit e351e87dbc
52 changed files with 282 additions and 157 deletions

View file

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

View file

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

View file

@ -17,15 +17,25 @@
package io.element.android.libraries.designsystem.theme.components package io.element.android.libraries.designsystem.theme.components
import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.material3.CheckboxColors import androidx.compose.material3.CheckboxColors
import androidx.compose.material3.CheckboxDefaults import androidx.compose.material3.CheckboxDefaults
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.state.ToggleableState
import androidx.compose.ui.tooling.preview.Preview 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.ElementThemedPreview
import io.element.android.libraries.designsystem.preview.PreviewGroup 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 @Composable
fun Checkbox( fun Checkbox(
@ -33,12 +43,22 @@ fun Checkbox(
onCheckedChange: ((Boolean) -> Unit)?, onCheckedChange: ((Boolean) -> Unit)?,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
enabled: Boolean = true, enabled: Boolean = true,
colors: CheckboxColors = CheckboxDefaults.colors(), hasError: Boolean = false,
indeterminate: Boolean = false,
colors: CheckboxColors = if (hasError) compoundErrorCheckBoxColors() else compoundCheckBoxColors(),
interactionSource: MutableInteractionSource = remember { MutableInteractionSource() } interactionSource: MutableInteractionSource = remember { MutableInteractionSource() }
) { ) {
androidx.compose.material3.Checkbox( var indeterminateState by remember { mutableStateOf(indeterminate) }
checked = checked, androidx.compose.material3.TriStateCheckbox(
onCheckedChange = onCheckedChange, state = if (!checked && indeterminateState) ToggleableState.Indeterminate else ToggleableState(checked),
onClick = if (onCheckedChange != null) {
{
indeterminateState = false
onCheckedChange(!checked)
}
} else {
null
},
modifier = modifier, modifier = modifier,
enabled = enabled, enabled = enabled,
colors = colors, 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) @Preview(group = PreviewGroup.Toggles)
@Composable @Composable
internal fun CheckboxesPreview() = ElementThemedPreview(vertical = false) { ContentToPreview() } internal fun CheckboxesPreview() = ElementThemedPreview(vertical = false) { ContentToPreview() }
@ -53,9 +97,33 @@ internal fun CheckboxesPreview() = ElementThemedPreview(vertical = false) { Cont
@Composable @Composable
private fun ContentToPreview() { private fun ContentToPreview() {
Column { Column {
Checkbox(onCheckedChange = {}, enabled = true, checked = true) // Unchecked
Checkbox(onCheckedChange = {}, enabled = true, checked = false) Row(horizontalArrangement = Arrangement.spacedBy(6.dp)) {
Checkbox(onCheckedChange = {}, enabled = false, checked = true) Checkbox(onCheckedChange = {}, enabled = true, checked = false)
Checkbox(onCheckedChange = {}, enabled = false, 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 package io.element.android.libraries.designsystem.theme.components
import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.material3.RadioButtonColors import androidx.compose.material3.RadioButtonColors
import androidx.compose.material3.RadioButtonDefaults import androidx.compose.material3.RadioButtonDefaults
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview 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.ElementThemedPreview
import io.element.android.libraries.designsystem.preview.PreviewGroup 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 @Composable
fun RadioButton( fun RadioButton(
@ -33,7 +39,7 @@ fun RadioButton(
onClick: (() -> Unit)?, onClick: (() -> Unit)?,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
enabled: Boolean = true, enabled: Boolean = true,
colors: RadioButtonColors = RadioButtonDefaults.colors(), colors: RadioButtonColors = compoundRadioButtonColors(),
interactionSource: MutableInteractionSource = remember { MutableInteractionSource() } interactionSource: MutableInteractionSource = remember { MutableInteractionSource() }
) { ) {
androidx.compose.material3.RadioButton( 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) @Preview(group = PreviewGroup.Toggles)
@Composable @Composable
internal fun RadioButtonPreview() = ElementThemedPreview(vertical = false) { ContentToPreview() } internal fun RadioButtonPreview() = ElementThemedPreview(vertical = false) { ContentToPreview() }
@ -53,9 +68,13 @@ internal fun RadioButtonPreview() = ElementThemedPreview(vertical = false) { Con
@Composable @Composable
private fun ContentToPreview() { private fun ContentToPreview() {
Column { Column {
RadioButton(selected = false, onClick = {}) Row(horizontalArrangement = Arrangement.spacedBy(6.dp)) {
RadioButton(selected = true, onClick = {}) RadioButton(selected = false, onClick = {})
RadioButton(selected = false, enabled = false, onClick = {}) RadioButton(selected = false, enabled = false, onClick = {})
RadioButton(selected = true, 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 version https://git-lfs.github.com/spec/v1
oid sha256:d47034cafef80cdac5d702e52092f07ebc0bb96dbdd7f9f0c1ea2e302cbe9917 oid sha256:7b42afece0186cbbcb9ca5b716c3c535147d27bf1c57cabf033339fe9100edeb
size 33858 size 33889

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:aca6a614db1bcaec2a0b8ad4c3a64c761fda757e32865f535e75f470fda97774 oid sha256:0a5e412535f5c0fc384983f0b58319151c2e60a7b30f4f1e89a4411717ed93eb
size 40683 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 version https://git-lfs.github.com/spec/v1
oid sha256:eb51ba92db07682afe5727078f8e8b0a44cad16566b97430ca92132689bf25e7 oid sha256:30dc47ea866c8d8c1faab02ce12e9d00441a70b778bb267a3c52a5eb8635e6ad
size 10188 size 16686

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:ae7c673ab96eaa30a72ffa4b960b93f7c5971be1155aba7d03ac4c43652098ca oid sha256:88c7be1a8cff74b057ee0f7ba09922c814c8c0b6a3dbaa69ea58ec287c425fca
size 16361 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 version https://git-lfs.github.com/spec/v1
oid sha256:254850b3a638c4d54d9f6642c15caf3e4037c47ce50ae48102e2346df6e8947f oid sha256:b49f3a925c6652957bbb90c71d2dc47618d47cf76ceec50d71d9ee8758a41ea8
size 29282 size 29262

View file

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

View file

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

View file

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

View file

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