related-ui-components 1.8.6 → 1.8.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commonjs/app.js +33 -18
- package/lib/commonjs/app.js.map +1 -1
- package/lib/commonjs/components/Popup/Popup.js +22 -24
- package/lib/commonjs/components/Popup/Popup.js.map +1 -1
- package/lib/commonjs/components/Skeleton/Shimmer.js +75 -0
- package/lib/commonjs/components/Skeleton/Shimmer.js.map +1 -0
- package/lib/commonjs/components/Skeleton/SkeletonElement.js +36 -0
- package/lib/commonjs/components/Skeleton/SkeletonElement.js.map +1 -0
- package/lib/commonjs/components/Skeleton/index.js +48 -0
- package/lib/commonjs/components/Skeleton/index.js.map +1 -0
- package/lib/commonjs/components/Wheel/Wheel.js +141 -66
- package/lib/commonjs/components/Wheel/Wheel.js.map +1 -1
- package/lib/commonjs/components/index.js +11 -0
- package/lib/commonjs/components/index.js.map +1 -1
- package/lib/commonjs/theme/Colors.js +6 -2
- package/lib/commonjs/theme/Colors.js.map +1 -1
- package/lib/module/app.js +32 -16
- package/lib/module/app.js.map +1 -1
- package/lib/module/components/Popup/Popup.js +22 -24
- package/lib/module/components/Popup/Popup.js.map +1 -1
- package/lib/module/components/Skeleton/Shimmer.js +69 -0
- package/lib/module/components/Skeleton/Shimmer.js.map +1 -0
- package/lib/module/components/Skeleton/SkeletonElement.js +31 -0
- package/lib/module/components/Skeleton/SkeletonElement.js.map +1 -0
- package/lib/module/components/Skeleton/index.js +7 -0
- package/lib/module/components/Skeleton/index.js.map +1 -0
- package/lib/module/components/Wheel/Wheel.js +141 -66
- package/lib/module/components/Wheel/Wheel.js.map +1 -1
- package/lib/module/components/index.js +1 -0
- package/lib/module/components/index.js.map +1 -1
- package/lib/module/theme/Colors.js +6 -2
- package/lib/module/theme/Colors.js.map +1 -1
- package/lib/typescript/commonjs/app.d.ts.map +1 -1
- package/lib/typescript/commonjs/components/Skeleton/Shimmer.d.ts +13 -0
- package/lib/typescript/commonjs/components/Skeleton/Shimmer.d.ts.map +1 -0
- package/lib/typescript/commonjs/components/Skeleton/SkeletonElement.d.ts +12 -0
- package/lib/typescript/commonjs/components/Skeleton/SkeletonElement.d.ts.map +1 -0
- package/lib/typescript/commonjs/components/Skeleton/index.d.ts +5 -0
- package/lib/typescript/commonjs/components/Skeleton/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/components/Wheel/Wheel.d.ts +3 -1
- package/lib/typescript/commonjs/components/Wheel/Wheel.d.ts.map +1 -1
- package/lib/typescript/commonjs/components/index.d.ts +1 -0
- package/lib/typescript/commonjs/components/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/theme/Colors.d.ts +2 -0
- package/lib/typescript/commonjs/theme/Colors.d.ts.map +1 -1
- package/lib/typescript/module/app.d.ts.map +1 -1
- package/lib/typescript/module/components/Skeleton/Shimmer.d.ts +13 -0
- package/lib/typescript/module/components/Skeleton/Shimmer.d.ts.map +1 -0
- package/lib/typescript/module/components/Skeleton/SkeletonElement.d.ts +12 -0
- package/lib/typescript/module/components/Skeleton/SkeletonElement.d.ts.map +1 -0
- package/lib/typescript/module/components/Skeleton/index.d.ts +5 -0
- package/lib/typescript/module/components/Skeleton/index.d.ts.map +1 -0
- package/lib/typescript/module/components/Wheel/Wheel.d.ts +3 -1
- package/lib/typescript/module/components/Wheel/Wheel.d.ts.map +1 -1
- package/lib/typescript/module/components/index.d.ts +1 -0
- package/lib/typescript/module/components/index.d.ts.map +1 -1
- package/lib/typescript/module/theme/Colors.d.ts +2 -0
- package/lib/typescript/module/theme/Colors.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/app.tsx +30 -18
- package/src/components/Popup/Popup.tsx +2 -2
- package/src/components/Skeleton/Shimmer.tsx +89 -0
- package/src/components/Skeleton/SkeletonElement.tsx +34 -0
- package/src/components/Skeleton/index.ts +5 -0
- package/src/components/Wheel/Wheel.tsx +169 -82
- package/src/components/index.ts +2 -1
- package/src/theme/Colors.ts +8 -0
|
@@ -19,20 +19,53 @@ export interface SpinWheelItem {
|
|
|
19
19
|
textColor?: string;
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
+
//default random colors
|
|
22
23
|
const colors = [
|
|
23
|
-
"#FF0000",
|
|
24
|
-
"#
|
|
25
|
-
"#
|
|
26
|
-
"#
|
|
24
|
+
"#FF0000", // Red
|
|
25
|
+
"#FFA500", // Orange
|
|
26
|
+
"#FFFF00", // Yellow
|
|
27
|
+
"#008000", // Green
|
|
28
|
+
"#0000FF", // Blue
|
|
29
|
+
"#800080", // Purple
|
|
30
|
+
"#FFC0CB", // Pink
|
|
31
|
+
"#00FFFF", // Cyan
|
|
32
|
+
"#FF00FF", // Magenta
|
|
33
|
+
"#00FF00", // Lime
|
|
34
|
+
"#4B0082", // Indigo
|
|
35
|
+
"#EE82EE", // Violet
|
|
36
|
+
"#40E0D0", // Turquoise
|
|
37
|
+
"#FFD700", // Gold
|
|
38
|
+
"#C0C0C0", // Silver
|
|
39
|
+
"#FFDAB9", // Peach
|
|
40
|
+
"#E6E6FA", // Lavender
|
|
41
|
+
"#008080", // Teal
|
|
42
|
+
"#FF7F50", // Coral
|
|
43
|
+
"#DC143C", // Crimson
|
|
44
|
+
"#87CEEB", // Sky Blue
|
|
45
|
+
"#7FFF00", // Chartreuse
|
|
46
|
+
"#CCCCFF", // Periwinkle
|
|
47
|
+
"#FF6347", // Tomato
|
|
48
|
+
"#FA8072", // Salmon
|
|
27
49
|
];
|
|
28
50
|
|
|
29
51
|
interface SpinWheelProps {
|
|
52
|
+
// Data
|
|
30
53
|
items: SpinWheelItem[];
|
|
54
|
+
predeterminedWinner?: SpinWheelItem | string | number; // New prop
|
|
55
|
+
|
|
56
|
+
// Dimensions
|
|
31
57
|
size?: number;
|
|
58
|
+
|
|
59
|
+
// Behavior
|
|
32
60
|
spinDuration?: number;
|
|
61
|
+
friction?: number; // Note: friction prop is declared but not used in original logic
|
|
33
62
|
enabled?: boolean;
|
|
63
|
+
|
|
64
|
+
// Events
|
|
34
65
|
onSpinStart?: () => void;
|
|
35
66
|
onSpinEnd?: (item: SpinWheelItem) => void;
|
|
67
|
+
|
|
68
|
+
// Styling
|
|
36
69
|
containerStyle?: ViewStyle;
|
|
37
70
|
centerStyle?: ViewStyle;
|
|
38
71
|
spinButtonText?: string;
|
|
@@ -40,14 +73,19 @@ interface SpinWheelProps {
|
|
|
40
73
|
knobStyle?: ViewStyle;
|
|
41
74
|
actionButtonStyle?: ViewStyle;
|
|
42
75
|
actionButtonTextStyle?: TextStyle;
|
|
76
|
+
|
|
77
|
+
// Custom colors
|
|
78
|
+
wheelBorderColor?: string;
|
|
43
79
|
wheelTextColor?: string;
|
|
44
80
|
knobColor?: string;
|
|
45
|
-
|
|
46
|
-
|
|
81
|
+
|
|
82
|
+
// Custom components
|
|
83
|
+
centerComponent?: React.ReactNode; // Note: centerComponent prop is declared but not used
|
|
47
84
|
}
|
|
48
85
|
|
|
49
86
|
const SpinWheel: React.FC<SpinWheelProps> = ({
|
|
50
87
|
items,
|
|
88
|
+
predeterminedWinner, // Destructure new prop
|
|
51
89
|
size = 300,
|
|
52
90
|
spinDuration = 5000,
|
|
53
91
|
enabled = true,
|
|
@@ -61,52 +99,72 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
|
|
|
61
99
|
knobColor = "#D81E5B",
|
|
62
100
|
actionButtonStyle,
|
|
63
101
|
actionButtonTextStyle,
|
|
102
|
+
wheelBorderColor,
|
|
64
103
|
wheelTextColor = "#FFFFFF",
|
|
65
|
-
winner,
|
|
66
104
|
}) => {
|
|
67
105
|
const wheelItems = items.length > 0 ? items : [];
|
|
106
|
+
|
|
68
107
|
const [spinning, setSpinning] = useState(false);
|
|
69
|
-
const [
|
|
108
|
+
const [_, setWinner] = useState<SpinWheelItem | null>(null);
|
|
70
109
|
const rotateValue = useRef(new Animated.Value(0)).current;
|
|
110
|
+
|
|
111
|
+
// Track rotation manually for calculations
|
|
71
112
|
const rotationRef = useRef(0);
|
|
72
113
|
|
|
114
|
+
// Update tracked rotation when animation completes
|
|
73
115
|
useEffect(() => {
|
|
74
116
|
const listener = rotateValue.addListener(({ value }) => {
|
|
75
117
|
rotationRef.current = value;
|
|
76
118
|
});
|
|
119
|
+
|
|
77
120
|
return () => {
|
|
78
121
|
rotateValue.removeListener(listener);
|
|
79
122
|
};
|
|
80
123
|
}, [rotateValue]);
|
|
81
124
|
|
|
82
|
-
|
|
125
|
+
// Calculate angle for each segment
|
|
126
|
+
const anglePerItem =
|
|
127
|
+
wheelItems.length > 0 ? 360 / wheelItems.length : 0;
|
|
83
128
|
|
|
84
|
-
//
|
|
129
|
+
// Create wheel segments
|
|
85
130
|
const generateWheelPaths = () => {
|
|
131
|
+
if (wheelItems.length === 0) return [];
|
|
86
132
|
return wheelItems.map((item, index) => {
|
|
87
133
|
const startAngle = index * anglePerItem;
|
|
88
134
|
const endAngle = (index + 1) * anglePerItem;
|
|
135
|
+
|
|
89
136
|
const startRad = (startAngle * Math.PI) / 180;
|
|
90
137
|
const endRad = (endAngle * Math.PI) / 180;
|
|
138
|
+
|
|
91
139
|
const x1 = size / 2 + (size / 2) * Math.cos(startRad);
|
|
92
140
|
const y1 = size / 2 + (size / 2) * Math.sin(startRad);
|
|
93
141
|
const x2 = size / 2 + (size / 2) * Math.cos(endRad);
|
|
94
142
|
const y2 = size / 2 + (size / 2) * Math.sin(endRad);
|
|
143
|
+
|
|
95
144
|
const largeArcFlag = endAngle - startAngle <= 180 ? "0" : "1";
|
|
145
|
+
|
|
96
146
|
const pathData = [
|
|
97
147
|
`M ${size / 2} ${size / 2}`,
|
|
98
148
|
`L ${x1} ${y1}`,
|
|
99
149
|
`A ${size / 2} ${size / 2} 0 ${largeArcFlag} 1 ${x2} ${y2}`,
|
|
100
150
|
"Z",
|
|
101
151
|
].join(" ");
|
|
152
|
+
|
|
102
153
|
const midRad = ((startAngle + endAngle) / 2) * (Math.PI / 180);
|
|
103
154
|
const textX = size / 2 + size * 0.32 * Math.cos(midRad);
|
|
104
155
|
const textY = size / 2 + size * 0.32 * Math.sin(midRad);
|
|
156
|
+
|
|
157
|
+
// decorationX and decorationY are calculated but not used in the provided JSX
|
|
158
|
+
// const decorationX = size / 2 + size * 0.43 * Math.cos(midRad);
|
|
159
|
+
// const decorationY = size / 2 + size * 0.43 * Math.sin(midRad);
|
|
160
|
+
|
|
105
161
|
return {
|
|
106
162
|
path: pathData,
|
|
107
163
|
item,
|
|
108
164
|
textX,
|
|
109
165
|
textY,
|
|
166
|
+
// decorationX,
|
|
167
|
+
// decorationY,
|
|
110
168
|
angle: (startAngle + endAngle) / 2,
|
|
111
169
|
};
|
|
112
170
|
});
|
|
@@ -114,56 +172,82 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
|
|
|
114
172
|
|
|
115
173
|
const wheelPaths = generateWheelPaths();
|
|
116
174
|
|
|
117
|
-
//
|
|
118
|
-
const
|
|
119
|
-
|
|
175
|
+
// Handle spin button press
|
|
176
|
+
const handleSpin = () => {
|
|
177
|
+
if (spinning || !enabled || wheelItems.length === 0) return;
|
|
120
178
|
|
|
121
|
-
// Helper: spin to a given index
|
|
122
|
-
const spinToIndex = (targetIndex: number, callbackItem: SpinWheelItem) => {
|
|
123
179
|
setSpinning(true);
|
|
124
180
|
onSpinStart?.();
|
|
125
181
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
182
|
+
let targetRotation = 0;
|
|
183
|
+
let winnerTargetIndex = -1;
|
|
184
|
+
|
|
185
|
+
if (predeterminedWinner) {
|
|
186
|
+
const winnerId =
|
|
187
|
+
typeof predeterminedWinner === "object"
|
|
188
|
+
? predeterminedWinner.id
|
|
189
|
+
: predeterminedWinner;
|
|
190
|
+
winnerTargetIndex = wheelItems.findIndex((item) => item.id === winnerId);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
if (winnerTargetIndex !== -1) {
|
|
194
|
+
const targetSegmentCenterAngle =
|
|
195
|
+
(winnerTargetIndex + 0.5) * anglePerItem;
|
|
196
|
+
|
|
197
|
+
const targetNormalizedAngle =
|
|
198
|
+
(270 - targetSegmentCenterAngle + 360) % 360;
|
|
199
|
+
|
|
200
|
+
const currentAbsoluteAngle = rotationRef.current * 360;
|
|
201
|
+
const currentNormalizedAngle = (currentAbsoluteAngle % 360 + 360) % 360;
|
|
202
|
+
|
|
203
|
+
// Additional angle needed to reach the targetNormalizedAngle from currentNormalizedAngle
|
|
204
|
+
const angleOffset =
|
|
205
|
+
(targetNormalizedAngle - currentNormalizedAngle + 360) % 360;
|
|
206
|
+
|
|
207
|
+
// Number of full spins (e.g., 3 to 5)
|
|
208
|
+
const numberOfFullSpins = 3 + Math.floor(Math.random() * 3); // 3, 4, or 5 spins
|
|
209
|
+
targetRotation = numberOfFullSpins * 360 + angleOffset;
|
|
210
|
+
|
|
211
|
+
// Ensure minimum rotation if already aligned (e.g. if angleOffset is 0)
|
|
212
|
+
if (targetRotation < 360) {
|
|
213
|
+
targetRotation += 360 * (3 + Math.floor(Math.random() * 3));
|
|
214
|
+
}
|
|
130
215
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
216
|
+
} else {
|
|
217
|
+
const randomSpins = 3 + Math.random() * 2;
|
|
218
|
+
const randomAngle = Math.random() * 360;
|
|
219
|
+
targetRotation = 360 * randomSpins + randomAngle;
|
|
220
|
+
}
|
|
135
221
|
|
|
136
222
|
Animated.timing(rotateValue, {
|
|
137
|
-
toValue: targetRotation / 360,
|
|
223
|
+
toValue: rotationRef.current + targetRotation / 360,
|
|
138
224
|
duration: spinDuration,
|
|
139
225
|
easing: Easing.out(Easing.cubic),
|
|
140
226
|
useNativeDriver: true,
|
|
141
|
-
}).start(() =>
|
|
142
|
-
setSpinning(false);
|
|
143
|
-
setInternalWinner(callbackItem);
|
|
144
|
-
onSpinEnd?.(callbackItem);
|
|
145
|
-
});
|
|
227
|
+
}).start(() => handleSpinEnd());
|
|
146
228
|
};
|
|
147
229
|
|
|
148
|
-
//
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
230
|
+
// Handle spin completion
|
|
231
|
+
const handleSpinEnd = () => {
|
|
232
|
+
setSpinning(false);
|
|
233
|
+
|
|
234
|
+
const normalizedAngle = (rotationRef.current * 360) % 360;
|
|
235
|
+
const winningIndex = Math.floor(
|
|
236
|
+
((normalizedAngle - 270) % 360) / anglePerItem
|
|
237
|
+
);
|
|
238
|
+
const adjustedIndex =
|
|
239
|
+
(wheelItems.length - 1 - winningIndex) % wheelItems.length;
|
|
240
|
+
|
|
241
|
+
const finalWinnerIndex =
|
|
242
|
+
adjustedIndex >= 0 ? adjustedIndex : wheelItems.length + adjustedIndex;
|
|
243
|
+
|
|
244
|
+
if (finalWinnerIndex >= 0 && finalWinnerIndex < wheelItems.length) {
|
|
245
|
+
const winningItem = wheelItems[finalWinnerIndex];
|
|
246
|
+
setWinner(winningItem);
|
|
247
|
+
onSpinEnd?.(winningItem);
|
|
248
|
+
} else if (wheelItems.length > 0) {
|
|
249
|
+
onSpinEnd?.(wheelItems[0]);
|
|
250
|
+
}
|
|
167
251
|
};
|
|
168
252
|
|
|
169
253
|
// Animation interpolation for rotation
|
|
@@ -190,32 +274,38 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
|
|
|
190
274
|
<Svg width={size} height={size} viewBox={`0 0 ${size} ${size}`}>
|
|
191
275
|
<G>
|
|
192
276
|
{wheelPaths.map(
|
|
193
|
-
({ path, item, textX, textY, angle }, index) =>
|
|
194
|
-
|
|
195
|
-
<
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
277
|
+
({ path, item, textX, textY, angle }, index) => {
|
|
278
|
+
return (
|
|
279
|
+
<React.Fragment key={item.id}>
|
|
280
|
+
<Path
|
|
281
|
+
d={path}
|
|
282
|
+
fill={
|
|
283
|
+
item.color == "" || item.color == null
|
|
284
|
+
? colors[
|
|
285
|
+
Math.floor(Math.random() * colors.length)
|
|
286
|
+
]
|
|
287
|
+
: item.color
|
|
288
|
+
}
|
|
289
|
+
stroke="#000000"
|
|
290
|
+
strokeWidth={1}
|
|
291
|
+
/>
|
|
292
|
+
<SvgText
|
|
293
|
+
x={textX}
|
|
294
|
+
y={textY}
|
|
295
|
+
fill={item.textColor || wheelTextColor}
|
|
296
|
+
fontSize={wheelTextStyle?.fontSize || 14}
|
|
297
|
+
fontWeight={
|
|
298
|
+
(wheelTextStyle?.fontWeight as any) || "bold"
|
|
299
|
+
}
|
|
300
|
+
textAnchor="middle"
|
|
301
|
+
alignmentBaseline="central"
|
|
302
|
+
transform={`rotate(${angle + 180}, ${textX}, ${textY} )`}
|
|
303
|
+
>
|
|
304
|
+
{item.label}
|
|
305
|
+
</SvgText>
|
|
306
|
+
</React.Fragment>
|
|
307
|
+
);
|
|
308
|
+
}
|
|
219
309
|
)}
|
|
220
310
|
</G>
|
|
221
311
|
</Svg>
|
|
@@ -232,13 +322,11 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
|
|
|
232
322
|
{ translateX: -size / 10 },
|
|
233
323
|
{ translateY: -size / 10 },
|
|
234
324
|
],
|
|
235
|
-
borderRadius: size / 5,
|
|
325
|
+
borderRadius: size / 5, // Should be (size / 5) / 2 for a circle
|
|
236
326
|
},
|
|
237
327
|
centerStyle,
|
|
238
328
|
]}
|
|
239
|
-
|
|
240
|
-
{/** Optional: custom center component */}
|
|
241
|
-
</View>
|
|
329
|
+
/>
|
|
242
330
|
|
|
243
331
|
{/* The pointer is a triangle on top */}
|
|
244
332
|
<View style={styles.pointerPosition}>
|
|
@@ -264,7 +352,7 @@ const SpinWheel: React.FC<SpinWheelProps> = ({
|
|
|
264
352
|
>
|
|
265
353
|
<TouchableOpacity
|
|
266
354
|
onPress={handleSpin}
|
|
267
|
-
disabled={spinning || !enabled ||
|
|
355
|
+
disabled={spinning || !enabled || wheelItems.length === 0}
|
|
268
356
|
style={[styles.actionButton, actionButtonStyle]}
|
|
269
357
|
>
|
|
270
358
|
<Text style={[styles.actionButtonText, actionButtonTextStyle]}>
|
|
@@ -282,7 +370,7 @@ const styles = StyleSheet.create({
|
|
|
282
370
|
alignItems: "center",
|
|
283
371
|
justifyContent: "center",
|
|
284
372
|
marginTop: 20,
|
|
285
|
-
marginBottom: 70,
|
|
373
|
+
marginBottom: 70, // Space for the button
|
|
286
374
|
},
|
|
287
375
|
wheelContainer: {
|
|
288
376
|
overflow: "hidden",
|
|
@@ -310,10 +398,9 @@ const styles = StyleSheet.create({
|
|
|
310
398
|
borderStyle: "solid",
|
|
311
399
|
borderLeftWidth: 10,
|
|
312
400
|
borderRightWidth: 10,
|
|
313
|
-
borderBottomWidth: 15,
|
|
401
|
+
borderBottomWidth: 15,
|
|
314
402
|
borderLeftColor: "transparent",
|
|
315
403
|
borderRightColor: "transparent",
|
|
316
|
-
borderBottomColor: "#D81E5B",
|
|
317
404
|
},
|
|
318
405
|
actionButton: {
|
|
319
406
|
paddingHorizontal: 30,
|
package/src/components/index.ts
CHANGED
package/src/theme/Colors.ts
CHANGED
|
@@ -49,6 +49,8 @@ export interface ThemeType {
|
|
|
49
49
|
secondary?: string[];
|
|
50
50
|
[key: string]: string[] | undefined;
|
|
51
51
|
};
|
|
52
|
+
skeletonBackgroundColor? : string;
|
|
53
|
+
skeletonItemColor?: string;
|
|
52
54
|
}
|
|
53
55
|
|
|
54
56
|
// Updated Light Theme - True black and white oriented, less muted
|
|
@@ -96,6 +98,9 @@ export const lightTheme: ThemeType = {
|
|
|
96
98
|
xl: 32,
|
|
97
99
|
xxl: 64,
|
|
98
100
|
},
|
|
101
|
+
|
|
102
|
+
skeletonBackgroundColor: "#e0e0e0",
|
|
103
|
+
skeletonItemColor: "#2c2c2c"
|
|
99
104
|
};
|
|
100
105
|
|
|
101
106
|
// Updated Dark Theme - True black and white oriented, less muted
|
|
@@ -143,4 +148,7 @@ export const darkTheme: ThemeType = {
|
|
|
143
148
|
xl: 32,
|
|
144
149
|
xxl: 64,
|
|
145
150
|
},
|
|
151
|
+
|
|
152
|
+
skeletonBackgroundColor: "#f5f5f5",
|
|
153
|
+
skeletonItemColor: "#444444"
|
|
146
154
|
};
|