1212
1313package com.orange.ouds.app.ui.tokens
1414
15+ import androidx.compose.foundation.Canvas
1516import androidx.compose.foundation.Image
1617import androidx.compose.foundation.background
1718import androidx.compose.foundation.border
1819import androidx.compose.foundation.isSystemInDarkTheme
1920import androidx.compose.foundation.layout.Box
2021import androidx.compose.foundation.layout.BoxScope
2122import androidx.compose.foundation.layout.fillMaxHeight
23+ import androidx.compose.foundation.layout.fillMaxSize
2224import androidx.compose.foundation.layout.fillMaxWidth
2325import androidx.compose.foundation.layout.height
2426import androidx.compose.foundation.layout.padding
@@ -30,24 +32,31 @@ import androidx.compose.runtime.Composable
3032import androidx.compose.ui.Alignment
3133import androidx.compose.ui.Modifier
3234import androidx.compose.ui.draw.clip
35+ import androidx.compose.ui.geometry.Offset
3336import androidx.compose.ui.graphics.Color
3437import androidx.compose.ui.graphics.RectangleShape
3538import androidx.compose.ui.graphics.Shape
39+ import androidx.compose.ui.graphics.StrokeCap
40+ import androidx.compose.ui.graphics.isUnspecified
3641import androidx.compose.ui.res.painterResource
42+ import androidx.compose.ui.tooling.preview.PreviewLightDark
43+ import androidx.compose.ui.tooling.preview.PreviewParameter
3744import androidx.compose.ui.unit.Dp
3845import androidx.compose.ui.unit.dp
3946import com.orange.ouds.app.R
47+ import com.orange.ouds.app.ui.utilities.composable.AppPreview
4048import com.orange.ouds.core.theme.OudsBorderStyle
4149import com.orange.ouds.core.theme.OudsTheme
4250import com.orange.ouds.core.theme.dashedBorder
4351import com.orange.ouds.core.theme.dottedBorder
4452import com.orange.ouds.core.theme.takeUnlessHairline
4553import com.orange.ouds.foundation.extensions.orElse
54+ import com.orange.ouds.foundation.utilities.BasicPreviewParameterProvider
4655
4756private val defaultIllustrationSize = 64 .dp
4857
4958@Composable
50- fun IllustrationBox (
59+ private fun IllustrationBox (
5160 modifier : Modifier = Modifier ,
5261 backgroundColor : Color = OudsTheme .colorScheme.surface.secondary,
5362 contentAlignment : Alignment = Alignment .TopStart ,
@@ -63,7 +72,7 @@ fun IllustrationBox(
6372}
6473
6574@Composable
66- fun BorderIllustrationBox (
75+ fun BorderIllustration (
6776 width : Dp = 1.dp,
6877 shape : Shape = RectangleShape ,
6978 style : OudsBorderStyle = OudsBorderStyle .Solid ,
@@ -86,14 +95,38 @@ fun BorderIllustrationBox(
8695}
8796
8897@Composable
89- fun ElevationIllustrationSurface (elevation : Dp ) {
98+ fun ColorIllustration (color : Color ) {
99+ IllustrationBox (
100+ modifier = Modifier .border(width = 1 .dp, color = OudsTheme .colorScheme.border.emphasized),
101+ backgroundColor = if (color.isUnspecified) Color .White else color
102+ ) {
103+ if (color.isUnspecified) {
104+ Canvas (
105+ modifier = Modifier
106+ .fillMaxSize()
107+ .clip(shape = RectangleShape )
108+ ) {
109+ drawLine(
110+ color = Color .Red ,
111+ start = Offset (x = size.width, y = 0f ),
112+ end = Offset (x = 0f , y = size.height),
113+ strokeWidth = 2 .dp.toPx(),
114+ cap = StrokeCap .Square
115+ )
116+ }
117+ }
118+ }
119+ }
120+
121+ @Composable
122+ fun ElevationIllustration (elevation : Dp ) {
90123 Surface (shadowElevation = elevation) {
91124 IllustrationBox (backgroundColor = OudsTheme .colorScheme.background.secondary)
92125 }
93126}
94127
95128@Composable
96- fun OpacityIllustrationBox (opacity : Float ) {
129+ fun OpacityIllustration (opacity : Float ) {
97130 val squareColor = if (isSystemInDarkTheme()) Color .White else Color .Black
98131 Box {
99132 Image (painter = painterResource(id = R .drawable.il_opacity_union), contentDescription = null )
@@ -108,7 +141,7 @@ fun OpacityIllustrationBox(opacity: Float) {
108141}
109142
110143@Composable
111- fun SizeIconIllustrationBox (size : Dp ) {
144+ fun SizeIconIllustration (size : Dp ) {
112145 IllustrationBox (modifier = Modifier .size(80 .dp), contentAlignment = Alignment .Center ) {
113146 Icon (
114147 modifier = Modifier .size(size),
@@ -120,7 +153,7 @@ fun SizeIconIllustrationBox(size: Dp) {
120153}
121154
122155@Composable
123- fun SpacePaddingInsetIllustrationBox (size : Dp ) {
156+ fun SpacePaddingInsetIllustration (size : Dp ) {
124157 IllustrationBox {
125158 Box (
126159 modifier = Modifier
@@ -138,7 +171,7 @@ fun SpacePaddingInsetIllustrationBox(size: Dp) {
138171}
139172
140173@Composable
141- fun SpaceIllustrationBox (
174+ fun SpaceIllustration (
142175 size : Dp ,
143176 orientation : SpaceOrientation = SpaceOrientation .Horizontal ,
144177 contentAlignment : Alignment = Alignment .TopStart
@@ -162,3 +195,49 @@ fun SpaceIllustrationBox(
162195enum class SpaceOrientation {
163196 Horizontal , Vertical
164197}
198+
199+ @PreviewLightDark
200+ @Composable
201+ fun PreviewBorderIllustration () = AppPreview {
202+ BorderIllustration ()
203+ }
204+
205+ @PreviewLightDark
206+ @Composable
207+ fun PreviewColorIllustration (@PreviewParameter(ColorIllustrationPreviewParameterProvider ::class ) color : Color ) = AppPreview {
208+ ColorIllustration (color)
209+ }
210+
211+ private class ColorIllustrationPreviewParameterProvider : BasicPreviewParameterProvider <Color >(Color .Magenta , Color .Unspecified )
212+
213+ @PreviewLightDark
214+ @Composable
215+ fun PreviewElevationIllustration () = AppPreview {
216+ Box (modifier = Modifier .padding(10 .dp)) {
217+ ElevationIllustration (8 .dp)
218+ }
219+ }
220+
221+ @PreviewLightDark
222+ @Composable
223+ fun PreviewOpacityIllustration () = AppPreview {
224+ OpacityIllustration (0.5f )
225+ }
226+
227+ @PreviewLightDark
228+ @Composable
229+ fun PreviewSizeIconIllustration () = AppPreview {
230+ SizeIconIllustration (size = 32 .dp)
231+ }
232+
233+ @PreviewLightDark
234+ @Composable
235+ fun PreviewSpacePaddingInsetIllustration () = AppPreview {
236+ SpacePaddingInsetIllustration (4 .dp)
237+ }
238+
239+ @PreviewLightDark
240+ @Composable
241+ fun PreviewSpaceIllustration () = AppPreview {
242+ SpaceIllustration (8 .dp)
243+ }
0 commit comments