diff --git a/composeApp/src/commonMain/kotlin/ch/parano/myicek/ui/components/FilterChips.kt b/composeApp/src/commonMain/kotlin/ch/parano/myicek/ui/components/FilterChips.kt
new file mode 100644
index 0000000..64a0971
--- /dev/null
+++ b/composeApp/src/commonMain/kotlin/ch/parano/myicek/ui/components/FilterChips.kt
@@ -0,0 +1,121 @@
+// SPDX-License-Identifier: GPL-3.0-or-later
+// MyIce Kotlin Multiplatform — schedule/convocation viewer
+// Copyright (C) 2026 parano.ch
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see .
+
+package ch.parano.myicek.ui.components
+
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.ArrowDropDown
+import androidx.compose.material3.AssistChip
+import androidx.compose.material3.AssistChipDefaults
+import androidx.compose.material3.DropdownMenu
+import androidx.compose.material3.DropdownMenuItem
+import androidx.compose.material3.ExperimentalMaterial3Api
+import androidx.compose.material3.Icon
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.material3.SegmentedButton
+import androidx.compose.material3.SegmentedButtonDefaults
+import androidx.compose.material3.SingleChoiceSegmentedButtonRow
+import androidx.compose.material3.Text
+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 ch.parano.myicek.filter.TypeFilter
+
+@OptIn(ExperimentalMaterial3Api::class)
+@Composable
+fun TypeFilterSegmented(
+ selected: TypeFilter,
+ onSelect: (TypeFilter) -> Unit,
+ modifier: Modifier = Modifier,
+) {
+ SingleChoiceSegmentedButtonRow(modifier = modifier.fillMaxWidth()) {
+ val options = listOf(
+ TypeFilter.ALL to "Tous",
+ TypeFilter.GAMES to "Matchs",
+ TypeFilter.PRACTICES to "Entraînements",
+ )
+ options.forEachIndexed { index, (filter, label) ->
+ SegmentedButton(
+ selected = selected == filter,
+ onClick = { onSelect(filter) },
+ shape = SegmentedButtonDefaults.itemShape(index, options.size),
+ ) {
+ Text(label)
+ }
+ }
+ }
+}
+
+@OptIn(ExperimentalMaterial3Api::class)
+@Composable
+fun FilterAssistChip(
+ label: String,
+ selectedValue: String?,
+ options: List,
+ onSelect: (String?) -> Unit,
+ modifier: Modifier = Modifier,
+) {
+ var expanded by remember { mutableStateOf(false) }
+ val displayValue = selectedValue ?: "Tous"
+
+ Box(modifier = modifier) {
+ AssistChip(
+ onClick = { expanded = true },
+ label = { Text("$label: $displayValue") },
+ trailingIcon = {
+ Icon(
+ imageVector = Icons.Filled.ArrowDropDown,
+ contentDescription = null,
+ )
+ },
+ colors = if (selectedValue != null) {
+ AssistChipDefaults.assistChipColors(
+ containerColor = MaterialTheme.colorScheme.primaryContainer,
+ labelColor = MaterialTheme.colorScheme.onPrimaryContainer,
+ )
+ } else {
+ AssistChipDefaults.assistChipColors()
+ },
+ )
+ DropdownMenu(
+ expanded = expanded,
+ onDismissRequest = { expanded = false },
+ ) {
+ DropdownMenuItem(
+ text = { Text("Tous") },
+ onClick = {
+ onSelect(null)
+ expanded = false
+ },
+ )
+ options.forEach { option ->
+ DropdownMenuItem(
+ text = { Text(option) },
+ onClick = {
+ onSelect(option)
+ expanded = false
+ },
+ )
+ }
+ }
+ }
+}
diff --git a/composeApp/src/commonMain/kotlin/ch/parano/myicek/ui/components/FilterDropdown.kt b/composeApp/src/commonMain/kotlin/ch/parano/myicek/ui/components/FilterDropdown.kt
deleted file mode 100644
index 7117c05..0000000
--- a/composeApp/src/commonMain/kotlin/ch/parano/myicek/ui/components/FilterDropdown.kt
+++ /dev/null
@@ -1,73 +0,0 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-// MyIce Kotlin Multiplatform — schedule/convocation viewer
-// Copyright (C) 2026 parano.ch
-//
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program. If not, see .
-
-package ch.parano.myicek.ui.components
-
-import androidx.compose.foundation.layout.fillMaxWidth
-import androidx.compose.material3.DropdownMenuItem
-import androidx.compose.material3.ExperimentalMaterial3Api
-import androidx.compose.material3.ExposedDropdownMenuBox
-import androidx.compose.material3.ExposedDropdownMenuDefaults
-import androidx.compose.material3.OutlinedTextField
-import androidx.compose.material3.Text
-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
-
-@OptIn(ExperimentalMaterial3Api::class)
-@Composable
-fun FilterDropdown(
- label: String,
- selectedValue: String?,
- options: List,
- onSelect: (String?) -> Unit,
- modifier: Modifier = Modifier,
-) {
- var expanded by remember { mutableStateOf(false) }
-
- ExposedDropdownMenuBox(
- expanded = expanded,
- onExpandedChange = { expanded = it },
- modifier = modifier,
- ) {
- OutlinedTextField(
- value = selectedValue ?: "",
- onValueChange = {},
- readOnly = true,
- label = { Text(label) },
- trailingIcon = { ExposedDropdownMenuDefaults.TrailingIcon(expanded) },
- modifier = Modifier.menuAnchor().fillMaxWidth(),
- )
- ExposedDropdownMenu(
- expanded = expanded,
- onDismissRequest = { expanded = false },
- ) {
- options.forEach { option ->
- DropdownMenuItem(
- text = { Text(option) },
- onClick = {
- onSelect(option)
- expanded = false
- },
- )
- }
- }
- }
-}