diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml
index 2382c8492..2e231faed 100644
--- a/.idea/kotlinc.xml
+++ b/.idea/kotlinc.xml
@@ -7,6 +7,7 @@
-
+
+
\ No newline at end of file
diff --git a/buildSrc/src/main/kotlin/paparazzi.gradle.kts b/buildSrc/src/main/kotlin/paparazzi.gradle.kts
new file mode 100644
index 000000000..4f983b46c
--- /dev/null
+++ b/buildSrc/src/main/kotlin/paparazzi.gradle.kts
@@ -0,0 +1,61 @@
+/*
+ * Software Name: OUDS Android
+ * SPDX-FileCopyrightText: Copyright (c) Orange SA
+ * SPDX-License-Identifier: MIT
+ *
+ * This software is distributed under the MIT license,
+ * the text of which is available at https://opensource.org/license/MIT/
+ * or see the "LICENSE" file for more details.
+ *
+ * Software description: Android library of reusable graphical components
+ */
+
+import org.gradle.api.DefaultTask
+
+private val failuresDir = project.layout.buildDirectory.dir("paparazzi/failures").get().asFile
+
+tasks.register("updatePaparazziFailures") {
+ group = "verification"
+ // Clean failures directory first to avoid copying old failures
+ dependsOn(tasks["cleanPaparazziFailures"])
+ // Using finalizedBy in conjunction with mustRunAfter allows to run verifyPaparazzi and copyPaparazziFailures
+ // in that order even if verifyPaparazzi fails
+ tasks["cleanPaparazziFailures"].finalizedBy("verifyPaparazzi", "copyPaparazziFailures")
+ tasks["copyPaparazziFailures"].mustRunAfter(tasks["verifyPaparazzi"])
+}
+
+tasks.register("cleanPaparazziFailures") {
+ doLast {
+ if (failuresDir.exists()) {
+ failuresDir.deleteRecursively()
+ logger.lifecycle("Cleaned failures in ${project.name}.")
+ }
+ }
+}
+
+tasks.register("copyPaparazziFailures") {
+ doLast {
+ val snapshotsDir = File("${project.projectDir}/src/test/snapshots/images")
+
+ // Get all PNG files except delta comparison images
+ val failureFiles = failuresDir.walkTopDown()
+ .filter { it.isFile && it.extension == "png" && !it.name.startsWith("delta-") }
+ .toList()
+
+ // Ensure snapshots directory exists
+ snapshotsDir.mkdirs()
+
+ // Copy failure files to snapshots directory
+ failureFiles.forEach { failureFile ->
+ val snapshotFile = snapshotsDir.resolve(failureFile.name)
+ failureFile.copyTo(snapshotFile, overwrite = true)
+ }
+
+ if (failureFiles.isEmpty()) {
+ logger.lifecycle("No snapshots updated in ${project.name}.")
+ } else {
+ val snapshotPlural = if (failureFiles.count() > 1) "s" else ""
+ logger.lifecycle("Updated ${failureFiles.count()} snapshot$snapshotPlural in ${project.name}.")
+ }
+ }
+}
diff --git a/core/src/main/java/com/orange/ouds/core/component/OudsAlertMessage.kt b/core/src/main/java/com/orange/ouds/core/component/OudsAlertMessage.kt
index bcdf80c6e..fcc884b7a 100644
--- a/core/src/main/java/com/orange/ouds/core/component/OudsAlertMessage.kt
+++ b/core/src/main/java/com/orange/ouds/core/component/OudsAlertMessage.kt
@@ -58,6 +58,7 @@ import com.orange.ouds.core.theme.value
import com.orange.ouds.core.utilities.OudsPreview
import com.orange.ouds.core.utilities.OudsPreviewDevice
import com.orange.ouds.core.utilities.OudsPreviewableComponent
+import com.orange.ouds.core.utilities.PreviewFlowRow
import com.orange.ouds.core.utilities.getPreviewTheme
import com.orange.ouds.foundation.utilities.BasicPreviewParameterProvider
import com.orange.ouds.theme.OudsThemeContract
@@ -416,25 +417,26 @@ internal fun PreviewOudsAlertMessage(
) = OudsPreview(theme = theme, darkThemeEnabled = darkThemeEnabled) {
with(parameter) {
val icon = if (hasIcon) OudsAlertIcon(Icons.Outlined.FavoriteBorder) else null
- Column {
- listOf(
+ PreviewFlowRow(
+ items = listOf(
OudsAlertMessageStatus.Neutral(icon),
OudsAlertMessageStatus.Accent(icon),
OudsAlertMessageStatus.Negative,
OudsAlertMessageStatus.Positive,
OudsAlertMessageStatus.Info,
OudsAlertMessageStatus.Warning
- ).forEach { status ->
- OudsAlertMessage(
- modifier = Modifier.padding(all = 10.dp),
- label = "Label",
- status = status,
- description = description,
- onClose = onClose,
- actionLink = actionLink,
- bulletList = bulletList
- )
- }
+ ),
+ itemName = { it::class.simpleName.orEmpty() },
+ maxItemsInEachRow = 1
+ ) { status ->
+ OudsAlertMessage(
+ label = "Label",
+ status = status,
+ description = description,
+ onClose = onClose,
+ actionLink = actionLink,
+ bulletList = bulletList
+ )
}
}
}
diff --git a/core/src/main/java/com/orange/ouds/core/component/OudsButton.kt b/core/src/main/java/com/orange/ouds/core/component/OudsButton.kt
index a2e678c69..228a936eb 100644
--- a/core/src/main/java/com/orange/ouds/core/component/OudsButton.kt
+++ b/core/src/main/java/com/orange/ouds/core/component/OudsButton.kt
@@ -783,7 +783,7 @@ internal fun PreviewOudsButton(
val label = if (hasLabel) appearance.name else null
val icon = if (hasIcon) OudsButtonIcon(Icons.Filled.FavoriteBorder, "") else null
val content: @Composable () -> Unit = {
- PreviewEnumEntries(columnCount = 2) {
+ PreviewEnumEntries(maxEnumEntriesInEachRow = 2) {
OudsButton(
nullableIcon = icon,
nullableLabel = label,
@@ -811,7 +811,7 @@ private fun PreviewOudsButtonWithRoundedCorners() = PreviewOudsButtonWithRounded
internal fun PreviewOudsButtonWithRoundedCorners(theme: OudsThemeContract) =
OudsPreview(theme = theme.mapSettings { it.copy(roundedCornerButtons = true) }) {
val appearance = OudsButtonAppearance.Default
- PreviewEnumEntries(columnCount = 2) {
+ PreviewEnumEntries(maxEnumEntriesInEachRow = 2) {
OudsButton(
nullableIcon = OudsButtonIcon(Icons.Filled.FavoriteBorder, ""),
nullableLabel = appearance.name,
@@ -829,7 +829,7 @@ private fun PreviewOudsButtonWithIconBadge(@PreviewParameter(OudsButtonWithIconB
@Composable
internal fun PreviewOudsButtonWithIconBadge(theme: OudsThemeContract, count: Int) = OudsPreview(theme = theme) {
- PreviewEnumEntries(columnCount = 2) {
+ PreviewEnumEntries(maxEnumEntriesInEachRow = 2) {
OudsButton(
nullableIcon = OudsButtonIcon(Icons.Filled.FavoriteBorder, ""),
nullableLabel = null,
diff --git a/core/src/main/java/com/orange/ouds/core/component/OudsCheckboxItem.kt b/core/src/main/java/com/orange/ouds/core/component/OudsCheckboxItem.kt
index 2eaf2993c..a6e19ceb9 100644
--- a/core/src/main/java/com/orange/ouds/core/component/OudsCheckboxItem.kt
+++ b/core/src/main/java/com/orange/ouds/core/component/OudsCheckboxItem.kt
@@ -252,7 +252,7 @@ internal fun PreviewOudsCheckboxItem(
parameter: OudsCheckboxItemPreviewParameter
) = OudsPreview(theme = theme, darkThemeEnabled = darkThemeEnabled) {
with(parameter) {
- PreviewEnumEntries(columnCount = 1, edgeToEdge = true) {
+ PreviewEnumEntries(maxEnumEntriesInEachRow = 1, edgeToEdge = true) {
OudsTriStateCheckboxItem(
state = value,
label = "Label",
@@ -286,7 +286,7 @@ internal fun PreviewOudsCheckboxItemHighContrastModeEnabled(
parameter: OudsCheckboxItemHighContrastModePreviewParameter
) = OudsPreview(theme = theme, darkThemeEnabled = darkThemeEnabled, highContrastModeEnabled = true) {
with(parameter) {
- PreviewEnumEntries(columnCount = 1, edgeToEdge = true) {
+ PreviewEnumEntries(maxEnumEntriesInEachRow = 1, edgeToEdge = true) {
OudsTriStateCheckboxItem(
state = value,
label = "Label",
@@ -320,7 +320,7 @@ private fun PreviewOudsCheckboxItemWithEdgeToEdgeDisabled() = PreviewOudsCheckbo
@Composable
internal fun PreviewOudsCheckboxItemWithEdgeToEdgeDisabled(theme: OudsThemeContract) = OudsPreview(theme = theme) {
- PreviewEnumEntries(columnCount = 1) {
+ PreviewEnumEntries(maxEnumEntriesInEachRow = 1) {
OudsCheckboxItem(
checked = true,
label = "Label",
diff --git a/core/src/main/java/com/orange/ouds/core/component/OudsFilterChip.kt b/core/src/main/java/com/orange/ouds/core/component/OudsFilterChip.kt
index 76a0efe3f..1f9d1a4d8 100644
--- a/core/src/main/java/com/orange/ouds/core/component/OudsFilterChip.kt
+++ b/core/src/main/java/com/orange/ouds/core/component/OudsFilterChip.kt
@@ -207,7 +207,7 @@ internal fun PreviewOudsFilterChip(theme: OudsThemeContract, darkThemeEnabled: B
with(parameter) {
val label = if (hasLabel) "Label" else null
val icon = if (hasIcon) OudsChipIcon(Icons.Filled.FavoriteBorder, "") else null
- PreviewEnumEntries(columnCount = 3) {
+ PreviewEnumEntries(maxEnumEntriesInEachRow = 3) {
OudsFilterChip(selected = selected, nullableIcon = icon, nullableLabel = label, onClick = {})
}
}
diff --git a/core/src/main/java/com/orange/ouds/core/component/OudsInlineAlert.kt b/core/src/main/java/com/orange/ouds/core/component/OudsInlineAlert.kt
index b1aa1529d..7db414951 100644
--- a/core/src/main/java/com/orange/ouds/core/component/OudsInlineAlert.kt
+++ b/core/src/main/java/com/orange/ouds/core/component/OudsInlineAlert.kt
@@ -14,9 +14,7 @@ package com.orange.ouds.core.component
import androidx.compose.foundation.isSystemInDarkTheme
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.foundation.layout.size
import androidx.compose.foundation.layout.widthIn
import androidx.compose.material.icons.Icons
@@ -29,10 +27,10 @@ import androidx.compose.ui.res.painterResource
import androidx.compose.ui.semantics.semantics
import androidx.compose.ui.tooling.preview.PreviewLightDark
import androidx.compose.ui.tooling.preview.PreviewParameter
-import androidx.compose.ui.unit.dp
import com.orange.ouds.core.theme.OudsTheme
import com.orange.ouds.core.theme.value
import com.orange.ouds.core.utilities.OudsPreview
+import com.orange.ouds.core.utilities.PreviewFlowRow
import com.orange.ouds.core.utilities.getPreviewTheme
import com.orange.ouds.foundation.utilities.BasicPreviewParameterProvider
import com.orange.ouds.theme.OudsThemeContract
@@ -194,21 +192,22 @@ internal fun PreviewOudsInlineAlert(
label: String
) = OudsPreview(theme = theme, darkThemeEnabled = darkThemeEnabled) {
val icon = OudsAlertIcon(Icons.Outlined.FavoriteBorder)
- Column {
- listOf(
+ PreviewFlowRow(
+ items = listOf(
OudsInlineAlertStatus.Neutral(icon),
OudsInlineAlertStatus.Accent(icon),
OudsInlineAlertStatus.Negative,
OudsInlineAlertStatus.Positive,
OudsInlineAlertStatus.Info,
OudsInlineAlertStatus.Warning
- ).forEach { status ->
- OudsInlineAlert(
- modifier = Modifier.padding(all = 10.dp),
- label = label,
- status = status
- )
- }
+ ),
+ itemName = { it::class.simpleName.orEmpty() },
+ maxItemsInEachRow = 1
+ ) { status ->
+ OudsInlineAlert(
+ label = label,
+ status = status
+ )
}
}
diff --git a/core/src/main/java/com/orange/ouds/core/component/OudsInputTag.kt b/core/src/main/java/com/orange/ouds/core/component/OudsInputTag.kt
index 6cff3e598..4050fde23 100644
--- a/core/src/main/java/com/orange/ouds/core/component/OudsInputTag.kt
+++ b/core/src/main/java/com/orange/ouds/core/component/OudsInputTag.kt
@@ -241,7 +241,7 @@ private fun PreviewOudsInputTag() {
@Composable
internal fun PreviewOudsInputTag(theme: OudsThemeContract, darkThemeEnabled: Boolean) =
OudsPreview(theme = theme, darkThemeEnabled = darkThemeEnabled) {
- PreviewEnumEntries(columnCount = 3) {
+ PreviewEnumEntries(maxEnumEntriesInEachRow = 3) {
OudsInputTag(label = "Label", onClick = {})
}
}
diff --git a/core/src/main/java/com/orange/ouds/core/component/OudsLink.kt b/core/src/main/java/com/orange/ouds/core/component/OudsLink.kt
index 522443d61..1a8328657 100644
--- a/core/src/main/java/com/orange/ouds/core/component/OudsLink.kt
+++ b/core/src/main/java/com/orange/ouds/core/component/OudsLink.kt
@@ -454,7 +454,7 @@ internal fun PreviewOudsLink(
with(parameter) {
val icon = if (hasIcon) OudsLinkIcon(Icons.Filled.FavoriteBorder) else null
val linkPreview: @Composable () -> Unit = {
- PreviewEnumEntries(columnCount = 3) {
+ PreviewEnumEntries(maxEnumEntriesInEachRow = 3) {
OudsLink(
icon = icon,
label = "Label",
diff --git a/core/src/main/java/com/orange/ouds/core/component/OudsPasswordInput.kt b/core/src/main/java/com/orange/ouds/core/component/OudsPasswordInput.kt
index 31bc3330c..221dea111 100644
--- a/core/src/main/java/com/orange/ouds/core/component/OudsPasswordInput.kt
+++ b/core/src/main/java/com/orange/ouds/core/component/OudsPasswordInput.kt
@@ -244,7 +244,7 @@ internal fun PreviewOudsPasswordInput(
parameter: OudsPasswordInputPreviewParameter
) = OudsPreview(theme = theme, darkThemeEnabled = darkThemeEnabled) {
with(parameter) {
- PreviewEnumEntries(columnCount = 1) {
+ PreviewEnumEntries(maxEnumEntriesInEachRow = 1) {
OudsPasswordInput(
state = rememberOudsPasswordInputState(initialText),
label = label,
diff --git a/core/src/main/java/com/orange/ouds/core/component/OudsRadioButtonItem.kt b/core/src/main/java/com/orange/ouds/core/component/OudsRadioButtonItem.kt
index 15dc7c702..8ee3d3ecf 100644
--- a/core/src/main/java/com/orange/ouds/core/component/OudsRadioButtonItem.kt
+++ b/core/src/main/java/com/orange/ouds/core/component/OudsRadioButtonItem.kt
@@ -213,7 +213,7 @@ internal fun PreviewOudsRadioButtonItem(
parameter: OudsRadioButtonItemPreviewParameter
) = OudsPreview(theme = theme, darkThemeEnabled = darkThemeEnabled) {
with(parameter) {
- PreviewEnumEntries(columnCount = 1, edgeToEdge = true) {
+ PreviewEnumEntries(maxEnumEntriesInEachRow = 1, edgeToEdge = true) {
OudsRadioButtonItem(
selected = value,
label = "Label",
@@ -248,7 +248,7 @@ internal fun PreviewOudsRadioButtonItemHighContrastModeEnabled(
parameter: OudsRadioButtonItemHighContrastModePreviewParameter
) = OudsPreview(theme = theme, darkThemeEnabled = darkThemeEnabled, highContrastModeEnabled = true) {
with(parameter) {
- PreviewEnumEntries(columnCount = 1, edgeToEdge = true) {
+ PreviewEnumEntries(maxEnumEntriesInEachRow = 1, edgeToEdge = true) {
OudsRadioButtonItem(
selected = value,
label = "Label",
@@ -284,7 +284,7 @@ private fun PreviewOudsRadioButtonItemWithEdgeToEdgeDisabled() = PreviewOudsRadi
@Composable
internal fun PreviewOudsRadioButtonItemWithEdgeToEdgeDisabled(theme: OudsThemeContract) = OudsPreview(theme = theme) {
- PreviewEnumEntries(columnCount = 1) {
+ PreviewEnumEntries(maxEnumEntriesInEachRow = 1) {
OudsRadioButtonItem(
selected = true,
label = "Label",
diff --git a/core/src/main/java/com/orange/ouds/core/component/OudsSuggestionChip.kt b/core/src/main/java/com/orange/ouds/core/component/OudsSuggestionChip.kt
index c5b53bed8..74398f4f0 100644
--- a/core/src/main/java/com/orange/ouds/core/component/OudsSuggestionChip.kt
+++ b/core/src/main/java/com/orange/ouds/core/component/OudsSuggestionChip.kt
@@ -200,7 +200,7 @@ internal fun PreviewOudsSuggestionChip(
with(parameter) {
val label = if (hasLabel) "Label" else null
val icon = if (hasIcon) OudsChipIcon(Icons.Filled.FavoriteBorder, "") else null
- PreviewEnumEntries(columnCount = 3) {
+ PreviewEnumEntries(maxEnumEntriesInEachRow = 3) {
OudsSuggestionChip(nullableIcon = icon, nullableLabel = label, onClick = {})
}
}
diff --git a/core/src/main/java/com/orange/ouds/core/component/OudsSwitch.kt b/core/src/main/java/com/orange/ouds/core/component/OudsSwitch.kt
index 0206175cb..31a9b713f 100644
--- a/core/src/main/java/com/orange/ouds/core/component/OudsSwitch.kt
+++ b/core/src/main/java/com/orange/ouds/core/component/OudsSwitch.kt
@@ -242,7 +242,7 @@ internal fun PreviewOudsSwitch(
darkThemeEnabled: Boolean,
checked: Boolean
) = OudsPreview(theme = theme, darkThemeEnabled = darkThemeEnabled) {
- PreviewEnumEntries(columnCount = 3) {
+ PreviewEnumEntries(maxEnumEntriesInEachRow = 3) {
OudsSwitch(
checked = checked,
onCheckedChange = {}
diff --git a/core/src/main/java/com/orange/ouds/core/component/OudsSwitchItem.kt b/core/src/main/java/com/orange/ouds/core/component/OudsSwitchItem.kt
index 806ed6259..2783918b0 100644
--- a/core/src/main/java/com/orange/ouds/core/component/OudsSwitchItem.kt
+++ b/core/src/main/java/com/orange/ouds/core/component/OudsSwitchItem.kt
@@ -162,7 +162,7 @@ internal fun PreviewOudsSwitchItem(
parameter: OudsSwitchItemPreviewParameter
) = OudsPreview(theme = theme, darkThemeEnabled = darkThemeEnabled) {
with(parameter) {
- PreviewEnumEntries(columnCount = 1, edgeToEdge = true) {
+ PreviewEnumEntries(maxEnumEntriesInEachRow = 1, edgeToEdge = true) {
OudsSwitchItem(
checked = value,
label = "Label",
@@ -201,7 +201,7 @@ private fun PreviewOudsSwitchItemWithEdgeToEdgeDisabled() = PreviewOudsSwitchIte
@Composable
internal fun PreviewOudsSwitchItemWithEdgeToEdgeDisabled(theme: OudsThemeContract) = OudsPreview(theme = theme) {
- PreviewEnumEntries(columnCount = 1) {
+ PreviewEnumEntries(maxEnumEntriesInEachRow = 1) {
OudsSwitchItem(
checked = true,
label = "Label",
diff --git a/core/src/main/java/com/orange/ouds/core/component/OudsTextArea.kt b/core/src/main/java/com/orange/ouds/core/component/OudsTextArea.kt
index 10a6faa81..8875ae9f0 100644
--- a/core/src/main/java/com/orange/ouds/core/component/OudsTextArea.kt
+++ b/core/src/main/java/com/orange/ouds/core/component/OudsTextArea.kt
@@ -631,7 +631,7 @@ internal fun PreviewOudsTextArea(
parameter: OudsTextAreaPreviewParameter
) = OudsPreview(theme = theme, darkThemeEnabled = darkThemeEnabled) {
with(parameter) {
- PreviewEnumEntries(columnCount = 1) { _ ->
+ PreviewEnumEntries(maxEnumEntriesInEachRow = 1) { _ ->
OudsTextArea(
textFieldState = rememberTextFieldState(value),
label = label,
@@ -653,7 +653,7 @@ private fun PreviewOudsTextAreaWithRoundedCorners() = PreviewOudsTextAreaWithRou
@Composable
internal fun PreviewOudsTextAreaWithRoundedCorners(theme: OudsThemeContract) =
OudsPreview(theme = theme.mapSettings { it.copy(roundedCornerTextInputs = true) }) {
- PreviewEnumEntries(columnCount = 1) { _ ->
+ PreviewEnumEntries(maxEnumEntriesInEachRow = 1) { _ ->
OudsTextArea(
textFieldState = rememberTextFieldState(""),
label = "Label",
diff --git a/core/src/main/java/com/orange/ouds/core/component/OudsTextInput.kt b/core/src/main/java/com/orange/ouds/core/component/OudsTextInput.kt
index e76739d7b..289a3835d 100644
--- a/core/src/main/java/com/orange/ouds/core/component/OudsTextInput.kt
+++ b/core/src/main/java/com/orange/ouds/core/component/OudsTextInput.kt
@@ -1043,7 +1043,7 @@ internal fun PreviewOudsTextInput(
parameter: OudsTextInputPreviewParameter
) = OudsPreview(theme = theme, darkThemeEnabled = darkThemeEnabled) {
with(parameter) {
- PreviewEnumEntries(columnCount = 1) { _ ->
+ PreviewEnumEntries(maxEnumEntriesInEachRow = 1) { _ ->
OudsTextInput(
textFieldState = rememberTextFieldState(value),
label = label,
@@ -1069,7 +1069,7 @@ private fun PreviewOudsTextInputWithRoundedCorners() = PreviewOudsTextInputWithR
@Composable
internal fun PreviewOudsTextInputWithRoundedCorners(theme: OudsThemeContract) =
OudsPreview(theme = theme.mapSettings { it.copy(roundedCornerTextInputs = true) }) {
- PreviewEnumEntries(columnCount = 1) { _ ->
+ PreviewEnumEntries(maxEnumEntriesInEachRow = 1) { _ ->
OudsTextInput(
textFieldState = rememberTextFieldState(""),
label = "Label",
diff --git a/core/src/main/java/com/orange/ouds/core/component/samples/OudsAlertMessageSamples.kt b/core/src/main/java/com/orange/ouds/core/component/samples/OudsAlertMessageSamples.kt
index 51ea6dd97..e5c1b9bf3 100644
--- a/core/src/main/java/com/orange/ouds/core/component/samples/OudsAlertMessageSamples.kt
+++ b/core/src/main/java/com/orange/ouds/core/component/samples/OudsAlertMessageSamples.kt
@@ -16,8 +16,8 @@ import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.FavoriteBorder
import androidx.compose.runtime.Composable
import androidx.compose.ui.tooling.preview.PreviewLightDark
-import com.orange.ouds.core.component.OudsAlertMessage
import com.orange.ouds.core.component.OudsAlertIcon
+import com.orange.ouds.core.component.OudsAlertMessage
import com.orange.ouds.core.component.OudsAlertMessageActionLink
import com.orange.ouds.core.component.OudsAlertMessageActionLinkPosition
import com.orange.ouds.core.component.OudsAlertMessageStatus
diff --git a/core/src/main/java/com/orange/ouds/core/utilities/OudsPreview.kt b/core/src/main/java/com/orange/ouds/core/utilities/OudsPreview.kt
index 607c40633..880c621cc 100644
--- a/core/src/main/java/com/orange/ouds/core/utilities/OudsPreview.kt
+++ b/core/src/main/java/com/orange/ouds/core/utilities/OudsPreview.kt
@@ -44,6 +44,7 @@ import androidx.compose.ui.unit.sp
import com.orange.ouds.core.extensions.isNightModeEnabled
import com.orange.ouds.core.theme.LocalHighContrastModeEnabled
import com.orange.ouds.core.theme.OudsTheme
+import com.orange.ouds.foundation.extensions.orElse
import com.orange.ouds.theme.OudsThemeContract
import com.orange.ouds.theme.OudsThemeSettings
import com.orange.ouds.theme.orange.OrangeTheme
@@ -52,7 +53,7 @@ import kotlin.enums.enumEntries
import kotlin.math.ceil
import kotlin.math.min
-internal val LocalPreviewEnumEntry = staticCompositionLocalOf { null }
+internal val LocalPreviewRowFlowItem = staticCompositionLocalOf { null }
internal val LocalPreviewGridRow = staticCompositionLocalOf { null }
internal val LocalPreviewGridColumn = staticCompositionLocalOf { null }
@@ -115,7 +116,14 @@ internal fun OudsThemeContract.mapSettings(transform: (OudsThemeSettings) -> (Ou
internal fun getPreviewTheme(): OudsThemeContract = OrangeTheme(getPreviewOrangeFontFamily())
@Composable
-internal inline fun getPreviewEnumEntry(): T? = LocalPreviewEnumEntry.current as? T
+internal inline fun getPreviewEnumEntry(): T? {
+ return getPreviewFlowRowItem()
+ .orElse { getPreviewGridRow() }
+ .orElse { getPreviewGridColumn() }
+}
+
+@Composable
+internal inline fun getPreviewFlowRowItem(): T? = LocalPreviewRowFlowItem.current as? T
@Composable
internal inline fun getPreviewGridRow(): T? = LocalPreviewGridRow.current as? T
@@ -123,6 +131,39 @@ internal inline fun getPreviewGridRow(): T? = LocalPreviewGridRow.cu
@Composable
internal inline fun getPreviewGridColumn(): T? = LocalPreviewGridColumn.current as? T
+@Composable
+internal fun PreviewFlowRow(
+ items: List,
+ itemName: (T) -> String,
+ maxItemsInEachRow: Int = items.count(),
+ edgeToEdge: Boolean = false,
+ filter: (T) -> Boolean = { true },
+ content: @Composable (T) -> Unit
+) {
+ val filteredItems = items.filter(filter)
+ val chunkedItems = filteredItems.chunked(maxItemsInEachRow)
+ Box(modifier = Modifier.padding(vertical = PreviewPaddingDefault, horizontal = if (edgeToEdge) 0.dp else PreviewPaddingDefault)) {
+ Row(horizontalArrangement = Arrangement.spacedBy(16.dp)) {
+ repeat(min(maxItemsInEachRow, filteredItems.count())) { columnIndex ->
+ val columnItems = chunkedItems.mapNotNull { it.getOrNull(columnIndex) }
+ Column {
+ columnItems.forEachIndexed { rowIndex, item ->
+ DimensionTitle(
+ modifier = Modifier
+ .padding(top = if (rowIndex == 0) 0.dp else PreviewPaddingDefault, bottom = 8.dp)
+ .padding(horizontal = if (edgeToEdge) PreviewPaddingDefault else 0.dp),
+ title = itemName(item)
+ )
+ CompositionLocalProvider(LocalPreviewRowFlowItem provides item) {
+ content(item)
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
@Composable
internal fun PreviewGrid(
columns: List,
@@ -167,33 +208,19 @@ internal fun PreviewGrid(
@Composable
internal inline fun PreviewEnumEntries(
- columnCount: Int = enumEntries().count(),
+ maxEnumEntriesInEachRow: Int = enumEntries().count(),
edgeToEdge: Boolean = false,
- filter: (T) -> Boolean = { true },
- crossinline content: @Composable (T) -> Unit
+ noinline filter: (T) -> Boolean = { true },
+ noinline content: @Composable (T) -> Unit
) where T : Enum {
- val filteredEnumEntries = enumEntries().filter(filter)
- val chunkedEnumEntries = filteredEnumEntries.chunked(columnCount)
- Box(modifier = Modifier.padding(vertical = PreviewPaddingDefault, horizontal = if (edgeToEdge) 0.dp else PreviewPaddingDefault)) {
- Row(horizontalArrangement = Arrangement.spacedBy(16.dp)) {
- repeat(min(columnCount, filteredEnumEntries.count())) { columnIndex ->
- val columnEnumEntries = chunkedEnumEntries.mapNotNull { it.getOrNull(columnIndex) }
- Column {
- columnEnumEntries.forEachIndexed { rowIndex, enumEntry ->
- DimensionTitle(
- modifier = Modifier
- .padding(top = if (rowIndex == 0) 0.dp else PreviewPaddingDefault, bottom = 8.dp)
- .padding(horizontal = if (edgeToEdge) PreviewPaddingDefault else 0.dp),
- title = enumEntry.name
- )
- CompositionLocalProvider(LocalPreviewEnumEntry provides enumEntry) {
- content(enumEntry)
- }
- }
- }
- }
- }
- }
+ PreviewFlowRow(
+ items = enumEntries(),
+ itemName = { it.name },
+ maxItemsInEachRow = maxEnumEntriesInEachRow,
+ edgeToEdge = edgeToEdge,
+ filter = filter,
+ content = content
+ )
}
@Composable
@@ -208,7 +235,7 @@ internal inline fun PreviewEnumEntries(noinline content:
}
@Composable
-private fun DimensionTitle(title: String, modifier: Modifier = Modifier) where T : Enum {
+private fun DimensionTitle(title: String, modifier: Modifier = Modifier) {
Text(
modifier = modifier,
text = title,
diff --git a/core/src/main/java/com/orange/ouds/core/utilities/OudsPreviewableComponent.kt b/core/src/main/java/com/orange/ouds/core/utilities/OudsPreviewableComponent.kt
index 90dec3bc1..978243f4a 100644
--- a/core/src/main/java/com/orange/ouds/core/utilities/OudsPreviewableComponent.kt
+++ b/core/src/main/java/com/orange/ouds/core/utilities/OudsPreviewableComponent.kt
@@ -152,7 +152,7 @@ interface OudsPreviewableComponent {
object AlertMessage : OudsPreviewableComponent {
- const val PreviewHeightDp = 1470
+ const val PreviewHeightDp = 1530
override val parameters: List = OudsAlertMessagePreviewParameterProvider().values.toList()
diff --git a/theme-orange-compact/build.gradle.kts b/theme-orange-compact/build.gradle.kts
index 9ec7df2ad..461e08409 100644
--- a/theme-orange-compact/build.gradle.kts
+++ b/theme-orange-compact/build.gradle.kts
@@ -13,6 +13,7 @@
plugins {
id("dokka")
id("library")
+ id("paparazzi")
alias(libs.plugins.compose.compiler)
alias(libs.plugins.paparazzi)
id(libs.plugins.kotlin.parcelize.get().pluginId) // https://github.com/gradle/gradle/issues/20084#issuecomment-1060822638
diff --git a/theme-orange-compact/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeDarkThemeSnapshot[0].png b/theme-orange-compact/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeDarkThemeSnapshot[0].png
index 5e7453998..72961ab57 100644
Binary files a/theme-orange-compact/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeDarkThemeSnapshot[0].png and b/theme-orange-compact/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeDarkThemeSnapshot[0].png differ
diff --git a/theme-orange-compact/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeDarkThemeSnapshot[1].png b/theme-orange-compact/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeDarkThemeSnapshot[1].png
index 164c722b7..d502be85e 100644
Binary files a/theme-orange-compact/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeDarkThemeSnapshot[1].png and b/theme-orange-compact/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeDarkThemeSnapshot[1].png differ
diff --git a/theme-orange-compact/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeDarkThemeSnapshot[2].png b/theme-orange-compact/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeDarkThemeSnapshot[2].png
index f6fbb7458..b5ab89103 100644
Binary files a/theme-orange-compact/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeDarkThemeSnapshot[2].png and b/theme-orange-compact/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeDarkThemeSnapshot[2].png differ
diff --git a/theme-orange-compact/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeLightThemeSnapshot[0].png b/theme-orange-compact/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeLightThemeSnapshot[0].png
index 7408c1851..55e36b98f 100644
Binary files a/theme-orange-compact/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeLightThemeSnapshot[0].png and b/theme-orange-compact/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeLightThemeSnapshot[0].png differ
diff --git a/theme-orange-compact/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeLightThemeSnapshot[1].png b/theme-orange-compact/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeLightThemeSnapshot[1].png
index aeeb65244..5e9c057ba 100644
Binary files a/theme-orange-compact/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeLightThemeSnapshot[1].png and b/theme-orange-compact/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeLightThemeSnapshot[1].png differ
diff --git a/theme-orange-compact/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeLightThemeSnapshot[2].png b/theme-orange-compact/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeLightThemeSnapshot[2].png
index c23b2e38e..45ae60a86 100644
Binary files a/theme-orange-compact/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeLightThemeSnapshot[2].png and b/theme-orange-compact/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeLightThemeSnapshot[2].png differ
diff --git a/theme-orange-compact/src/test/snapshots/images/com.orange.ouds.core.test_OudsInlineAlertTest_takeDarkThemeSnapshot[0].png b/theme-orange-compact/src/test/snapshots/images/com.orange.ouds.core.test_OudsInlineAlertTest_takeDarkThemeSnapshot[0].png
index 29bb8dfd7..b8ac46b97 100644
Binary files a/theme-orange-compact/src/test/snapshots/images/com.orange.ouds.core.test_OudsInlineAlertTest_takeDarkThemeSnapshot[0].png and b/theme-orange-compact/src/test/snapshots/images/com.orange.ouds.core.test_OudsInlineAlertTest_takeDarkThemeSnapshot[0].png differ
diff --git a/theme-orange-compact/src/test/snapshots/images/com.orange.ouds.core.test_OudsInlineAlertTest_takeDarkThemeSnapshot[1].png b/theme-orange-compact/src/test/snapshots/images/com.orange.ouds.core.test_OudsInlineAlertTest_takeDarkThemeSnapshot[1].png
index 339d26a17..6f6c7cf24 100644
Binary files a/theme-orange-compact/src/test/snapshots/images/com.orange.ouds.core.test_OudsInlineAlertTest_takeDarkThemeSnapshot[1].png and b/theme-orange-compact/src/test/snapshots/images/com.orange.ouds.core.test_OudsInlineAlertTest_takeDarkThemeSnapshot[1].png differ
diff --git a/theme-orange-compact/src/test/snapshots/images/com.orange.ouds.core.test_OudsInlineAlertTest_takeLightThemeSnapshot[0].png b/theme-orange-compact/src/test/snapshots/images/com.orange.ouds.core.test_OudsInlineAlertTest_takeLightThemeSnapshot[0].png
index 7b78c7881..6d37d2879 100644
Binary files a/theme-orange-compact/src/test/snapshots/images/com.orange.ouds.core.test_OudsInlineAlertTest_takeLightThemeSnapshot[0].png and b/theme-orange-compact/src/test/snapshots/images/com.orange.ouds.core.test_OudsInlineAlertTest_takeLightThemeSnapshot[0].png differ
diff --git a/theme-orange-compact/src/test/snapshots/images/com.orange.ouds.core.test_OudsInlineAlertTest_takeLightThemeSnapshot[1].png b/theme-orange-compact/src/test/snapshots/images/com.orange.ouds.core.test_OudsInlineAlertTest_takeLightThemeSnapshot[1].png
index 39cd87859..5dccca74c 100644
Binary files a/theme-orange-compact/src/test/snapshots/images/com.orange.ouds.core.test_OudsInlineAlertTest_takeLightThemeSnapshot[1].png and b/theme-orange-compact/src/test/snapshots/images/com.orange.ouds.core.test_OudsInlineAlertTest_takeLightThemeSnapshot[1].png differ
diff --git a/theme-orange/build.gradle.kts b/theme-orange/build.gradle.kts
index 4dac7600a..5c2274dbc 100644
--- a/theme-orange/build.gradle.kts
+++ b/theme-orange/build.gradle.kts
@@ -13,6 +13,7 @@
plugins {
id("dokka")
id("library")
+ id("paparazzi")
alias(libs.plugins.compose.compiler)
alias(libs.plugins.paparazzi)
id(libs.plugins.kotlin.parcelize.get().pluginId) // https://github.com/gradle/gradle/issues/20084#issuecomment-1060822638
diff --git a/theme-orange/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeDarkThemeSnapshot[0].png b/theme-orange/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeDarkThemeSnapshot[0].png
index 012e61975..0f5b9f90f 100644
Binary files a/theme-orange/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeDarkThemeSnapshot[0].png and b/theme-orange/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeDarkThemeSnapshot[0].png differ
diff --git a/theme-orange/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeDarkThemeSnapshot[1].png b/theme-orange/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeDarkThemeSnapshot[1].png
index 774de4c6e..36bf38d99 100644
Binary files a/theme-orange/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeDarkThemeSnapshot[1].png and b/theme-orange/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeDarkThemeSnapshot[1].png differ
diff --git a/theme-orange/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeDarkThemeSnapshot[2].png b/theme-orange/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeDarkThemeSnapshot[2].png
index d0d4e762c..14630f6e9 100644
Binary files a/theme-orange/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeDarkThemeSnapshot[2].png and b/theme-orange/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeDarkThemeSnapshot[2].png differ
diff --git a/theme-orange/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeLightThemeSnapshot[0].png b/theme-orange/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeLightThemeSnapshot[0].png
index 1dac509f6..926d15c19 100644
Binary files a/theme-orange/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeLightThemeSnapshot[0].png and b/theme-orange/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeLightThemeSnapshot[0].png differ
diff --git a/theme-orange/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeLightThemeSnapshot[1].png b/theme-orange/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeLightThemeSnapshot[1].png
index 17727d400..31cae7099 100644
Binary files a/theme-orange/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeLightThemeSnapshot[1].png and b/theme-orange/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeLightThemeSnapshot[1].png differ
diff --git a/theme-orange/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeLightThemeSnapshot[2].png b/theme-orange/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeLightThemeSnapshot[2].png
index 63862cbc4..7aaa2acda 100644
Binary files a/theme-orange/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeLightThemeSnapshot[2].png and b/theme-orange/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeLightThemeSnapshot[2].png differ
diff --git a/theme-orange/src/test/snapshots/images/com.orange.ouds.core.test_OudsInlineAlertTest_takeDarkThemeSnapshot[0].png b/theme-orange/src/test/snapshots/images/com.orange.ouds.core.test_OudsInlineAlertTest_takeDarkThemeSnapshot[0].png
index 5213a4916..adf7d100b 100644
Binary files a/theme-orange/src/test/snapshots/images/com.orange.ouds.core.test_OudsInlineAlertTest_takeDarkThemeSnapshot[0].png and b/theme-orange/src/test/snapshots/images/com.orange.ouds.core.test_OudsInlineAlertTest_takeDarkThemeSnapshot[0].png differ
diff --git a/theme-orange/src/test/snapshots/images/com.orange.ouds.core.test_OudsInlineAlertTest_takeDarkThemeSnapshot[1].png b/theme-orange/src/test/snapshots/images/com.orange.ouds.core.test_OudsInlineAlertTest_takeDarkThemeSnapshot[1].png
index 3134593f4..d8c0cbe15 100644
Binary files a/theme-orange/src/test/snapshots/images/com.orange.ouds.core.test_OudsInlineAlertTest_takeDarkThemeSnapshot[1].png and b/theme-orange/src/test/snapshots/images/com.orange.ouds.core.test_OudsInlineAlertTest_takeDarkThemeSnapshot[1].png differ
diff --git a/theme-orange/src/test/snapshots/images/com.orange.ouds.core.test_OudsInlineAlertTest_takeLightThemeSnapshot[0].png b/theme-orange/src/test/snapshots/images/com.orange.ouds.core.test_OudsInlineAlertTest_takeLightThemeSnapshot[0].png
index 406d4a1f7..1c2dba820 100644
Binary files a/theme-orange/src/test/snapshots/images/com.orange.ouds.core.test_OudsInlineAlertTest_takeLightThemeSnapshot[0].png and b/theme-orange/src/test/snapshots/images/com.orange.ouds.core.test_OudsInlineAlertTest_takeLightThemeSnapshot[0].png differ
diff --git a/theme-orange/src/test/snapshots/images/com.orange.ouds.core.test_OudsInlineAlertTest_takeLightThemeSnapshot[1].png b/theme-orange/src/test/snapshots/images/com.orange.ouds.core.test_OudsInlineAlertTest_takeLightThemeSnapshot[1].png
index 94fc4d20c..28394e3d5 100644
Binary files a/theme-orange/src/test/snapshots/images/com.orange.ouds.core.test_OudsInlineAlertTest_takeLightThemeSnapshot[1].png and b/theme-orange/src/test/snapshots/images/com.orange.ouds.core.test_OudsInlineAlertTest_takeLightThemeSnapshot[1].png differ
diff --git a/theme-sosh/build.gradle.kts b/theme-sosh/build.gradle.kts
index 8e555b44c..607b337d7 100644
--- a/theme-sosh/build.gradle.kts
+++ b/theme-sosh/build.gradle.kts
@@ -13,6 +13,7 @@
plugins {
id("dokka")
id("library")
+ id("paparazzi")
alias(libs.plugins.compose.compiler)
id(libs.plugins.kotlin.parcelize.get().pluginId) // https://github.com/gradle/gradle/issues/20084#issuecomment-1060822638
alias(libs.plugins.paparazzi)
diff --git a/theme-sosh/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeDarkThemeSnapshot[0].png b/theme-sosh/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeDarkThemeSnapshot[0].png
index df19a663d..2f2be8f30 100644
Binary files a/theme-sosh/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeDarkThemeSnapshot[0].png and b/theme-sosh/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeDarkThemeSnapshot[0].png differ
diff --git a/theme-sosh/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeDarkThemeSnapshot[1].png b/theme-sosh/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeDarkThemeSnapshot[1].png
index 7b2475d7c..5e0c0a8c6 100644
Binary files a/theme-sosh/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeDarkThemeSnapshot[1].png and b/theme-sosh/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeDarkThemeSnapshot[1].png differ
diff --git a/theme-sosh/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeDarkThemeSnapshot[2].png b/theme-sosh/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeDarkThemeSnapshot[2].png
index 4034ffe16..79191b4bf 100644
Binary files a/theme-sosh/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeDarkThemeSnapshot[2].png and b/theme-sosh/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeDarkThemeSnapshot[2].png differ
diff --git a/theme-sosh/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeLightThemeSnapshot[0].png b/theme-sosh/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeLightThemeSnapshot[0].png
index 9f5c5eed6..376b9ae2b 100644
Binary files a/theme-sosh/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeLightThemeSnapshot[0].png and b/theme-sosh/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeLightThemeSnapshot[0].png differ
diff --git a/theme-sosh/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeLightThemeSnapshot[1].png b/theme-sosh/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeLightThemeSnapshot[1].png
index e581fea20..bead91f7c 100644
Binary files a/theme-sosh/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeLightThemeSnapshot[1].png and b/theme-sosh/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeLightThemeSnapshot[1].png differ
diff --git a/theme-sosh/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeLightThemeSnapshot[2].png b/theme-sosh/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeLightThemeSnapshot[2].png
index 4c5e28675..bda9a14cc 100644
Binary files a/theme-sosh/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeLightThemeSnapshot[2].png and b/theme-sosh/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeLightThemeSnapshot[2].png differ
diff --git a/theme-sosh/src/test/snapshots/images/com.orange.ouds.core.test_OudsInlineAlertTest_takeDarkThemeSnapshot[0].png b/theme-sosh/src/test/snapshots/images/com.orange.ouds.core.test_OudsInlineAlertTest_takeDarkThemeSnapshot[0].png
index 5ab26e5c7..cc4858109 100644
Binary files a/theme-sosh/src/test/snapshots/images/com.orange.ouds.core.test_OudsInlineAlertTest_takeDarkThemeSnapshot[0].png and b/theme-sosh/src/test/snapshots/images/com.orange.ouds.core.test_OudsInlineAlertTest_takeDarkThemeSnapshot[0].png differ
diff --git a/theme-sosh/src/test/snapshots/images/com.orange.ouds.core.test_OudsInlineAlertTest_takeDarkThemeSnapshot[1].png b/theme-sosh/src/test/snapshots/images/com.orange.ouds.core.test_OudsInlineAlertTest_takeDarkThemeSnapshot[1].png
index eae7e6e3b..9230ed02d 100644
Binary files a/theme-sosh/src/test/snapshots/images/com.orange.ouds.core.test_OudsInlineAlertTest_takeDarkThemeSnapshot[1].png and b/theme-sosh/src/test/snapshots/images/com.orange.ouds.core.test_OudsInlineAlertTest_takeDarkThemeSnapshot[1].png differ
diff --git a/theme-sosh/src/test/snapshots/images/com.orange.ouds.core.test_OudsInlineAlertTest_takeLightThemeSnapshot[0].png b/theme-sosh/src/test/snapshots/images/com.orange.ouds.core.test_OudsInlineAlertTest_takeLightThemeSnapshot[0].png
index 0785f2ea1..81abfbb2c 100644
Binary files a/theme-sosh/src/test/snapshots/images/com.orange.ouds.core.test_OudsInlineAlertTest_takeLightThemeSnapshot[0].png and b/theme-sosh/src/test/snapshots/images/com.orange.ouds.core.test_OudsInlineAlertTest_takeLightThemeSnapshot[0].png differ
diff --git a/theme-sosh/src/test/snapshots/images/com.orange.ouds.core.test_OudsInlineAlertTest_takeLightThemeSnapshot[1].png b/theme-sosh/src/test/snapshots/images/com.orange.ouds.core.test_OudsInlineAlertTest_takeLightThemeSnapshot[1].png
index 5da7a7dea..b42f96920 100644
Binary files a/theme-sosh/src/test/snapshots/images/com.orange.ouds.core.test_OudsInlineAlertTest_takeLightThemeSnapshot[1].png and b/theme-sosh/src/test/snapshots/images/com.orange.ouds.core.test_OudsInlineAlertTest_takeLightThemeSnapshot[1].png differ
diff --git a/theme-wireframe/build.gradle.kts b/theme-wireframe/build.gradle.kts
index 66a80b83c..9a51c304a 100644
--- a/theme-wireframe/build.gradle.kts
+++ b/theme-wireframe/build.gradle.kts
@@ -13,6 +13,7 @@
plugins {
id("dokka")
id("library")
+ id("paparazzi")
alias(libs.plugins.compose.compiler)
id(libs.plugins.kotlin.parcelize.get().pluginId) // https://github.com/gradle/gradle/issues/20084#issuecomment-1060822638
alias(libs.plugins.paparazzi)
diff --git a/theme-wireframe/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeDarkThemeSnapshot[0].png b/theme-wireframe/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeDarkThemeSnapshot[0].png
index b4d1eea26..06e001a6f 100644
Binary files a/theme-wireframe/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeDarkThemeSnapshot[0].png and b/theme-wireframe/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeDarkThemeSnapshot[0].png differ
diff --git a/theme-wireframe/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeDarkThemeSnapshot[1].png b/theme-wireframe/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeDarkThemeSnapshot[1].png
index f1a2b2e75..c88502ba1 100644
Binary files a/theme-wireframe/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeDarkThemeSnapshot[1].png and b/theme-wireframe/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeDarkThemeSnapshot[1].png differ
diff --git a/theme-wireframe/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeDarkThemeSnapshot[2].png b/theme-wireframe/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeDarkThemeSnapshot[2].png
index 9b5c0236e..d5b940ae0 100644
Binary files a/theme-wireframe/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeDarkThemeSnapshot[2].png and b/theme-wireframe/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeDarkThemeSnapshot[2].png differ
diff --git a/theme-wireframe/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeLightThemeSnapshot[0].png b/theme-wireframe/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeLightThemeSnapshot[0].png
index 5a314af9e..3eae01e62 100644
Binary files a/theme-wireframe/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeLightThemeSnapshot[0].png and b/theme-wireframe/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeLightThemeSnapshot[0].png differ
diff --git a/theme-wireframe/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeLightThemeSnapshot[1].png b/theme-wireframe/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeLightThemeSnapshot[1].png
index 9e1e78f30..55d499fc6 100644
Binary files a/theme-wireframe/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeLightThemeSnapshot[1].png and b/theme-wireframe/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeLightThemeSnapshot[1].png differ
diff --git a/theme-wireframe/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeLightThemeSnapshot[2].png b/theme-wireframe/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeLightThemeSnapshot[2].png
index bc43b4072..730f0374e 100644
Binary files a/theme-wireframe/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeLightThemeSnapshot[2].png and b/theme-wireframe/src/test/snapshots/images/com.orange.ouds.core.test_OudsAlertMessageTest_takeLightThemeSnapshot[2].png differ
diff --git a/theme-wireframe/src/test/snapshots/images/com.orange.ouds.core.test_OudsInlineAlertTest_takeDarkThemeSnapshot[0].png b/theme-wireframe/src/test/snapshots/images/com.orange.ouds.core.test_OudsInlineAlertTest_takeDarkThemeSnapshot[0].png
index 63e261624..a02600070 100644
Binary files a/theme-wireframe/src/test/snapshots/images/com.orange.ouds.core.test_OudsInlineAlertTest_takeDarkThemeSnapshot[0].png and b/theme-wireframe/src/test/snapshots/images/com.orange.ouds.core.test_OudsInlineAlertTest_takeDarkThemeSnapshot[0].png differ
diff --git a/theme-wireframe/src/test/snapshots/images/com.orange.ouds.core.test_OudsInlineAlertTest_takeDarkThemeSnapshot[1].png b/theme-wireframe/src/test/snapshots/images/com.orange.ouds.core.test_OudsInlineAlertTest_takeDarkThemeSnapshot[1].png
index eb4d6b658..9ba8705bf 100644
Binary files a/theme-wireframe/src/test/snapshots/images/com.orange.ouds.core.test_OudsInlineAlertTest_takeDarkThemeSnapshot[1].png and b/theme-wireframe/src/test/snapshots/images/com.orange.ouds.core.test_OudsInlineAlertTest_takeDarkThemeSnapshot[1].png differ
diff --git a/theme-wireframe/src/test/snapshots/images/com.orange.ouds.core.test_OudsInlineAlertTest_takeLightThemeSnapshot[0].png b/theme-wireframe/src/test/snapshots/images/com.orange.ouds.core.test_OudsInlineAlertTest_takeLightThemeSnapshot[0].png
index 886be5150..a1c0f529f 100644
Binary files a/theme-wireframe/src/test/snapshots/images/com.orange.ouds.core.test_OudsInlineAlertTest_takeLightThemeSnapshot[0].png and b/theme-wireframe/src/test/snapshots/images/com.orange.ouds.core.test_OudsInlineAlertTest_takeLightThemeSnapshot[0].png differ
diff --git a/theme-wireframe/src/test/snapshots/images/com.orange.ouds.core.test_OudsInlineAlertTest_takeLightThemeSnapshot[1].png b/theme-wireframe/src/test/snapshots/images/com.orange.ouds.core.test_OudsInlineAlertTest_takeLightThemeSnapshot[1].png
index df8dcf6be..c43fa82dc 100644
Binary files a/theme-wireframe/src/test/snapshots/images/com.orange.ouds.core.test_OudsInlineAlertTest_takeLightThemeSnapshot[1].png and b/theme-wireframe/src/test/snapshots/images/com.orange.ouds.core.test_OudsInlineAlertTest_takeLightThemeSnapshot[1].png differ