1+ package com.kavi.droid.color.picker.ui.pickers
2+
3+ import androidx.compose.foundation.background
4+ import androidx.compose.foundation.border
5+ import androidx.compose.foundation.layout.Arrangement
6+ import androidx.compose.foundation.layout.Column
7+ import androidx.compose.foundation.layout.Row
8+ import androidx.compose.foundation.layout.fillMaxWidth
9+ import androidx.compose.foundation.layout.padding
10+ import androidx.compose.foundation.shape.RoundedCornerShape
11+ import androidx.compose.material3.MaterialTheme
12+ import androidx.compose.material3.Text
13+ import androidx.compose.runtime.Composable
14+ import androidx.compose.runtime.LaunchedEffect
15+ import androidx.compose.runtime.getValue
16+ import androidx.compose.runtime.mutableStateOf
17+ import androidx.compose.runtime.remember
18+ import androidx.compose.runtime.setValue
19+ import androidx.compose.ui.Alignment
20+ import androidx.compose.ui.Modifier
21+ import androidx.compose.ui.draw.shadow
22+ import androidx.compose.ui.graphics.Color
23+ import androidx.compose.ui.text.input.TextFieldValue
24+ import androidx.compose.ui.text.style.TextAlign
25+ import androidx.compose.ui.unit.dp
26+ import androidx.compose.ui.unit.sp
27+ import com.kavi.droid.color.palette.color.MatPackage
28+ import com.kavi.droid.color.palette.util.ColorUtil
29+ import com.kavi.droid.color.picker.ui.common.ColorColum
30+ import com.kavi.droid.color.picker.ui.common.SelectedColorDetail
31+
32+ @Composable
33+ fun GridColorPicker (modifier : Modifier = Modifier , onColorSelected : (selectedColor: Color ) -> Unit ) {
34+
35+ var selectedColor by remember { mutableStateOf(Color .White ) }
36+ val colorHex = remember { mutableStateOf(TextFieldValue (" #ffffff" )) }
37+
38+ val onSelectColor: (color: Color ) -> Unit = {
39+ selectedColor = it
40+ colorHex.value = TextFieldValue (ColorUtil .getHex(it))
41+ }
42+
43+ // Launch an effect to invoke the provided callback with the selected color
44+ LaunchedEffect (selectedColor) {
45+ onColorSelected.invoke(selectedColor)
46+ }
47+
48+ Column (modifier = modifier, verticalArrangement = Arrangement .spacedBy(8 .dp)) {
49+ Column (
50+ modifier = Modifier
51+ .border(1 .dp, Color .White , shape = RoundedCornerShape (8 .dp))
52+ .shadow(
53+ elevation = 10 .dp,
54+ shape = RoundedCornerShape (8 .dp)
55+ )
56+ .background(Color .White )
57+ .padding(start = 12 .dp, end = 12 .dp, top = 12 .dp, bottom = 8 .dp)
58+ ) {
59+ Text (
60+ text = " By selecting color from the grid below, you can pick your color." ,
61+ textAlign = TextAlign .Start ,
62+ modifier = Modifier
63+ .fillMaxWidth().padding(start = 12 .dp, end = 12 .dp, top = 12 .dp),
64+ color = Color .Gray ,
65+ style = MaterialTheme .typography.bodySmall,
66+ fontSize = 12 .sp
67+ )
68+
69+ Row (
70+ modifier = Modifier
71+ .fillMaxWidth()
72+ .padding(top = 16 .dp, start = 4 .dp, end = 4 .dp, bottom = 12 .dp),
73+ verticalAlignment = Alignment .CenterVertically ,
74+ horizontalArrangement = Arrangement .Center
75+ ) {
76+ ColorColum (
77+ givenColor = MatPackage .MatRed ,
78+ selectedColor = selectedColor,
79+ onSelect = onSelectColor
80+ )
81+ ColorColum (
82+ givenColor = MatPackage .MatRose ,
83+ selectedColor = selectedColor,
84+ onSelect = onSelectColor
85+ )
86+ ColorColum (
87+ givenColor = MatPackage .MatLPurple ,
88+ selectedColor = selectedColor,
89+ onSelect = onSelectColor
90+ )
91+ ColorColum (
92+ givenColor = MatPackage .MatDPurple ,
93+ selectedColor = selectedColor,
94+ onSelect = onSelectColor
95+ )
96+ ColorColum (
97+ givenColor = MatPackage .MatDBlue ,
98+ selectedColor = selectedColor,
99+ onSelect = onSelectColor
100+ )
101+ ColorColum (
102+ givenColor = MatPackage .MatLBlue ,
103+ selectedColor = selectedColor,
104+ onSelect = onSelectColor
105+ )
106+ ColorColum (
107+ givenColor = MatPackage .MatLLBlue ,
108+ selectedColor = selectedColor,
109+ onSelect = onSelectColor
110+ )
111+ ColorColum (
112+ givenColor = MatPackage .MatLCyan ,
113+ selectedColor = selectedColor,
114+ onSelect = onSelectColor
115+ )
116+ ColorColum (
117+ givenColor = MatPackage .MatDCyan ,
118+ selectedColor = selectedColor,
119+ onSelect = onSelectColor
120+ )
121+ ColorColum (
122+ givenColor = MatPackage .MatDGreen ,
123+ selectedColor = selectedColor,
124+ onSelect = onSelectColor
125+ )
126+ ColorColum (
127+ givenColor = MatPackage .MatLGreen ,
128+ selectedColor = selectedColor,
129+ onSelect = onSelectColor
130+ )
131+ ColorColum (
132+ givenColor = MatPackage .MatLLGreen ,
133+ selectedColor = selectedColor,
134+ onSelect = onSelectColor
135+ )
136+ ColorColum (
137+ givenColor = MatPackage .MatYellow ,
138+ selectedColor = selectedColor,
139+ onSelect = onSelectColor
140+ )
141+ ColorColum (
142+ givenColor = MatPackage .MatGold ,
143+ selectedColor = selectedColor,
144+ onSelect = onSelectColor
145+ )
146+ ColorColum (
147+ givenColor = MatPackage .MatOrange ,
148+ selectedColor = selectedColor,
149+ onSelect = onSelectColor
150+ )
151+ }
152+ }
153+
154+ Column (
155+ modifier = Modifier
156+ .border(1 .dp, Color .White , shape = RoundedCornerShape (8 .dp))
157+ .shadow(
158+ elevation = 10 .dp,
159+ shape = RoundedCornerShape (8 .dp)
160+ )
161+ .background(Color .White )
162+ .padding(start = 12 .dp, end = 12 .dp)
163+ ) {
164+ SelectedColorDetail (color = selectedColor, colorHex = colorHex)
165+ }
166+ }
167+
168+ }
0 commit comments