@compsych-ui-components/react-native 7.0.5 → 7.0.7
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/package.json +3 -7
- package/src/components/ActionSheet/index.d.ts +10 -1
- package/src/components/ActionSheet/index.js +59 -28
- package/src/components/ActionSheet/index.js.map +1 -1
- package/src/components/BodyText/index.d.ts +1 -0
- package/src/components/BodyText/index.js.map +1 -1
- package/src/components/Button/index.d.ts +1 -1
- package/src/components/Button/index.js +57 -37
- package/src/components/Button/index.js.map +1 -1
- package/src/components/ChatBubble/index.js +16 -14
- package/src/components/ChatBubble/index.js.map +1 -1
- package/src/components/ChatInput/index.d.ts +3 -1
- package/src/components/ChatInput/index.js +105 -98
- package/src/components/ChatInput/index.js.map +1 -1
- package/src/components/Checkbox/index.js.map +1 -1
- package/src/components/DateTimePicker/index.d.ts +16 -0
- package/src/components/DateTimePicker/index.js +587 -0
- package/src/components/DateTimePicker/index.js.map +1 -0
- package/src/components/Input/index.js +2 -3
- package/src/components/Input/index.js.map +1 -1
- package/src/components/Pagination/index.js.map +1 -1
- package/src/components/RadioButton/index.js.map +1 -1
- package/src/components/ScreenContainer/index.d.ts +2 -0
- package/src/components/ScreenContainer/index.js +2 -2
- package/src/components/ScreenContainer/index.js.map +1 -1
- package/src/components/SegmentedControl/index.d.ts +3 -3
- package/src/components/SegmentedControl/index.js +27 -40
- package/src/components/SegmentedControl/index.js.map +1 -1
- package/src/components/SelectionCard/index.js +12 -9
- package/src/components/SelectionCard/index.js.map +1 -1
- package/src/components/ServiceCard/index.js +141 -47
- package/src/components/ServiceCard/index.js.map +1 -1
- package/src/components/StatusChip/index.d.ts +15 -0
- package/src/components/StatusChip/index.js +80 -0
- package/src/components/StatusChip/index.js.map +1 -0
- package/src/icons/index.d.ts +8 -21
- package/src/icons/index.js +12 -92
- package/src/icons/index.js.map +1 -1
- package/src/icons/types.d.ts +3 -1
- package/src/icons/types.js +4 -4
- package/src/icons/types.js.map +1 -1
- package/src/index.d.ts +6 -5
- package/src/index.js +16 -60
- package/src/index.js.map +1 -1
- package/src/components/PromotionCard/index.d.ts +0 -23
- package/src/components/PromotionCard/index.js +0 -514
- package/src/components/PromotionCard/index.js.map +0 -1
- package/src/icons/AtomIcon.d.ts +0 -2
- package/src/icons/AtomIcon.js +0 -85
- package/src/icons/AtomIcon.js.map +0 -1
- package/src/icons/BinocularsIcon.d.ts +0 -2
- package/src/icons/BinocularsIcon.js +0 -103
- package/src/icons/BinocularsIcon.js.map +0 -1
- package/src/icons/FileChartColumnIncreasingIcon.d.ts +0 -2
- package/src/icons/FileChartColumnIncreasingIcon.js +0 -97
- package/src/icons/FileChartColumnIncreasingIcon.js.map +0 -1
- package/src/icons/FlagIcon.d.ts +0 -2
- package/src/icons/FlagIcon.js +0 -71
- package/src/icons/FlagIcon.js.map +0 -1
- package/src/icons/GlobeIcon.d.ts +0 -2
- package/src/icons/GlobeIcon.js +0 -71
- package/src/icons/GlobeIcon.js.map +0 -1
- package/src/icons/GraduationCapIcon.d.ts +0 -2
- package/src/icons/GraduationCapIcon.js +0 -85
- package/src/icons/GraduationCapIcon.js.map +0 -1
- package/src/icons/HandHeartIcon.d.ts +0 -2
- package/src/icons/HandHeartIcon.js +0 -91
- package/src/icons/HandHeartIcon.js.map +0 -1
- package/src/icons/HandshakeIcon.d.ts +0 -2
- package/src/icons/HandshakeIcon.js +0 -97
- package/src/icons/HandshakeIcon.js.map +0 -1
- package/src/icons/HazeIcon.d.ts +0 -2
- package/src/icons/HazeIcon.js +0 -115
- package/src/icons/HazeIcon.js.map +0 -1
- package/src/icons/HeartHandshakeIcon.d.ts +0 -2
- package/src/icons/HeartHandshakeIcon.js +0 -71
- package/src/icons/HeartHandshakeIcon.js.map +0 -1
- package/src/icons/HourglassIcon.d.ts +0 -2
- package/src/icons/HourglassIcon.js +0 -91
- package/src/icons/HourglassIcon.js.map +0 -1
- package/src/icons/IdCardIcon.d.ts +0 -2
- package/src/icons/IdCardIcon.js +0 -97
- package/src/icons/IdCardIcon.js.map +0 -1
- package/src/icons/MessageCirclePlusIcon.d.ts +0 -2
- package/src/icons/MessageCirclePlusIcon.js +0 -85
- package/src/icons/MessageCirclePlusIcon.js.map +0 -1
- package/src/icons/MountainSnowIcon.d.ts +0 -2
- package/src/icons/MountainSnowIcon.js +0 -79
- package/src/icons/MountainSnowIcon.js.map +0 -1
- package/src/icons/SnowflakeIcon.d.ts +0 -2
- package/src/icons/SnowflakeIcon.js +0 -139
- package/src/icons/SnowflakeIcon.js.map +0 -1
- package/src/icons/StethoscopeIcon.d.ts +0 -2
- package/src/icons/StethoscopeIcon.js +0 -97
- package/src/icons/StethoscopeIcon.js.map +0 -1
- package/src/icons/UserRoundIcon.d.ts +0 -2
- package/src/icons/UserRoundIcon.js +0 -79
- package/src/icons/UserRoundIcon.js.map +0 -1
- package/src/icons/WheatIcon.d.ts +0 -2
- package/src/icons/WheatIcon.js +0 -115
- package/src/icons/WheatIcon.js.map +0 -1
|
@@ -11,11 +11,15 @@ Object.defineProperty(exports, "ServiceCard", {
|
|
|
11
11
|
const _jsxruntime = require("react/jsx-runtime");
|
|
12
12
|
const _react = /*#__PURE__*/ _interop_require_wildcard(require("react"));
|
|
13
13
|
const _reactnative = require("react-native");
|
|
14
|
-
const
|
|
15
|
-
const _expolineargradient = require("expo-linear-gradient");
|
|
14
|
+
const _reactnativelineargradient = /*#__PURE__*/ _interop_require_default(require("react-native-linear-gradient"));
|
|
16
15
|
const _icons = require("../../icons");
|
|
17
16
|
const _theme = require("../../theme");
|
|
18
17
|
const _BodyText = require("../BodyText");
|
|
18
|
+
function _interop_require_default(obj) {
|
|
19
|
+
return obj && obj.__esModule ? obj : {
|
|
20
|
+
default: obj
|
|
21
|
+
};
|
|
22
|
+
}
|
|
19
23
|
function _getRequireWildcardCache(nodeInterop) {
|
|
20
24
|
if (typeof WeakMap !== "function") return null;
|
|
21
25
|
var cacheBabelInterop = new WeakMap();
|
|
@@ -80,7 +84,8 @@ function ServiceCard({ variant = 'outlined', size = 'lg', title, description, ic
|
|
|
80
84
|
chevronColor: cr.outline.sysOutlineFixed,
|
|
81
85
|
innerBg: undefined,
|
|
82
86
|
iconBadgeBg: undefined,
|
|
83
|
-
iconBadgeColor: undefined
|
|
87
|
+
iconBadgeColor: undefined,
|
|
88
|
+
buttonIconBg: cr.surface.surfaceContainer.sysSurfaceContainer
|
|
84
89
|
},
|
|
85
90
|
tonal: {
|
|
86
91
|
bg: cr.addOn.primaryFixed.sysPrimaryFixedDim,
|
|
@@ -92,7 +97,8 @@ function ServiceCard({ variant = 'outlined', size = 'lg', title, description, ic
|
|
|
92
97
|
chevronColor: cr.addOn.primaryFixed.sysOnPrimaryFixed,
|
|
93
98
|
innerBg: undefined,
|
|
94
99
|
iconBadgeBg: undefined,
|
|
95
|
-
iconBadgeColor: undefined
|
|
100
|
+
iconBadgeColor: undefined,
|
|
101
|
+
buttonIconBg: cr.surface.surfaceContainer.sysSurfaceContainerLowest
|
|
96
102
|
},
|
|
97
103
|
filled: {
|
|
98
104
|
bg: cr.accent.primary.sysPrimaryContainer,
|
|
@@ -104,7 +110,8 @@ function ServiceCard({ variant = 'outlined', size = 'lg', title, description, ic
|
|
|
104
110
|
chevronColor: cr.accent.primary.sysOnPrimary,
|
|
105
111
|
innerBg: undefined,
|
|
106
112
|
iconBadgeBg: undefined,
|
|
107
|
-
iconBadgeColor: undefined
|
|
113
|
+
iconBadgeColor: undefined,
|
|
114
|
+
buttonIconBg: cr.surface.surfaceContainer.sysSurfaceContainerLowest
|
|
108
115
|
},
|
|
109
116
|
doubled: {
|
|
110
117
|
bg: cr.surface.surfaceContainer.sysSurfaceContainerLowest,
|
|
@@ -116,7 +123,8 @@ function ServiceCard({ variant = 'outlined', size = 'lg', title, description, ic
|
|
|
116
123
|
chevronColor: cr.outline.sysOutlineFixed,
|
|
117
124
|
innerBg: cr.transparent.primary.sysPrimary08,
|
|
118
125
|
iconBadgeBg: cr.accent.primary.sysPrimary,
|
|
119
|
-
iconBadgeColor: cr.accent.primary.sysOnPrimary
|
|
126
|
+
iconBadgeColor: cr.accent.primary.sysOnPrimary,
|
|
127
|
+
buttonIconBg: cr.surface.surfaceContainer.sysSurfaceContainerLowest
|
|
120
128
|
},
|
|
121
129
|
image: {
|
|
122
130
|
bg: 'transparent',
|
|
@@ -128,7 +136,8 @@ function ServiceCard({ variant = 'outlined', size = 'lg', title, description, ic
|
|
|
128
136
|
chevronColor: cr.surface.inverse.sysInverseOnSurface,
|
|
129
137
|
innerBg: undefined,
|
|
130
138
|
iconBadgeBg: undefined,
|
|
131
|
-
iconBadgeColor: undefined
|
|
139
|
+
iconBadgeColor: undefined,
|
|
140
|
+
buttonIconBg: cr.surface.surfaceContainer.sysSurfaceContainerLowest
|
|
132
141
|
}
|
|
133
142
|
}), [
|
|
134
143
|
cr,
|
|
@@ -174,11 +183,14 @@ function ServiceCard({ variant = 'outlined', size = 'lg', title, description, ic
|
|
|
174
183
|
const v = variantTokens[variant];
|
|
175
184
|
const s = sizeTokens[size];
|
|
176
185
|
const isRow = s.layout === 'row';
|
|
177
|
-
const
|
|
186
|
+
const LucideIcon = icon ? (0, _icons.resolveIcon)(icon) : null;
|
|
187
|
+
const ChevronRight = (0, _icons.resolveIcon)('ChevronRight');
|
|
178
188
|
const iconColor = v.iconBadgeColor ?? v.titleColor;
|
|
179
|
-
const
|
|
180
|
-
|
|
181
|
-
|
|
189
|
+
const { size: iconPx, strokeWidth: iconSW } = _icons.SIZE_MAP[s.iconSizeName];
|
|
190
|
+
const renderedIcon = LucideIcon ? /*#__PURE__*/ (0, _jsxruntime.jsx)(LucideIcon, {
|
|
191
|
+
size: iconPx,
|
|
192
|
+
color: iconColor,
|
|
193
|
+
strokeWidth: iconSW
|
|
182
194
|
}) : null;
|
|
183
195
|
const outerStyle = [
|
|
184
196
|
{
|
|
@@ -186,18 +198,23 @@ function ServiceCard({ variant = 'outlined', size = 'lg', title, description, ic
|
|
|
186
198
|
borderColor: v.borderColor,
|
|
187
199
|
borderWidth: v.borderWidth,
|
|
188
200
|
borderRadius: variant === 'doubled' ? dim.borderRadius.sysRadiusXl : s.borderRadius,
|
|
189
|
-
paddingHorizontal: variant === 'doubled' ? dim.spacing.padding.sysPadding8 : s.paddingH,
|
|
190
|
-
paddingVertical: variant === 'doubled' ? dim.spacing.padding.sysPadding8 : s.paddingV,
|
|
191
201
|
opacity: disabled ? 0.48 : 1
|
|
192
202
|
},
|
|
193
203
|
v.elevated && ELEVATION,
|
|
204
|
+
variant !== 'doubled' && {
|
|
205
|
+
paddingHorizontal: s.paddingH,
|
|
206
|
+
paddingVertical: s.paddingV
|
|
207
|
+
},
|
|
194
208
|
fullWidth && {
|
|
195
209
|
alignSelf: 'stretch'
|
|
196
210
|
},
|
|
197
211
|
isRow ? styles.rowRoot : styles.colRoot,
|
|
198
|
-
!isRow && {
|
|
212
|
+
!isRow && variant !== 'image' && {
|
|
199
213
|
gap: s.gap
|
|
200
214
|
},
|
|
215
|
+
variant === 'image' && {
|
|
216
|
+
justifyContent: 'space-between'
|
|
217
|
+
},
|
|
201
218
|
style
|
|
202
219
|
];
|
|
203
220
|
// ── Text block ──────────────────────────────────────────────────────────────
|
|
@@ -222,10 +239,13 @@ function ServiceCard({ variant = 'outlined', size = 'lg', title, description, ic
|
|
|
222
239
|
const doubledInnerStyle = [
|
|
223
240
|
styles.colRoot,
|
|
224
241
|
{
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
242
|
+
alignSelf: 'stretch',
|
|
243
|
+
borderRadius: dim.borderRadius.sysRadiusXl,
|
|
244
|
+
borderColor: cr.accent.primary.sysOnPrimary,
|
|
245
|
+
borderWidth: dim.spacing.padding.sysPadding8,
|
|
246
|
+
paddingHorizontal: dim.spacing.padding.sysPadding8,
|
|
247
|
+
paddingVertical: dim.spacing.padding.sysPadding16,
|
|
248
|
+
gap: dim.spacing.padding.sysPadding12
|
|
229
249
|
}
|
|
230
250
|
];
|
|
231
251
|
const doubledInnerContent = /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {
|
|
@@ -244,26 +264,35 @@ function ServiceCard({ variant = 'outlined', size = 'lg', title, description, ic
|
|
|
244
264
|
children
|
|
245
265
|
]
|
|
246
266
|
});
|
|
247
|
-
inner =
|
|
248
|
-
colors: gradient,
|
|
249
|
-
start: gradientStart ?? {
|
|
250
|
-
x: 0,
|
|
251
|
-
y: 0
|
|
252
|
-
},
|
|
253
|
-
end: gradientEnd ?? {
|
|
254
|
-
x: 0,
|
|
255
|
-
y: 1
|
|
256
|
-
},
|
|
257
|
-
style: doubledInnerStyle,
|
|
258
|
-
children: doubledInnerContent
|
|
259
|
-
}) : /*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnative.View, {
|
|
267
|
+
inner = /*#__PURE__*/ (0, _jsxruntime.jsxs)(_reactnative.View, {
|
|
260
268
|
style: [
|
|
261
269
|
doubledInnerStyle,
|
|
262
|
-
{
|
|
270
|
+
!gradient && {
|
|
263
271
|
backgroundColor: v.innerBg
|
|
264
272
|
}
|
|
265
273
|
],
|
|
266
|
-
children:
|
|
274
|
+
children: [
|
|
275
|
+
gradient && /*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnativelineargradient.default, {
|
|
276
|
+
colors: [
|
|
277
|
+
...gradient
|
|
278
|
+
],
|
|
279
|
+
start: gradientStart ?? {
|
|
280
|
+
x: 0,
|
|
281
|
+
y: 0
|
|
282
|
+
},
|
|
283
|
+
end: gradientEnd ?? {
|
|
284
|
+
x: 0,
|
|
285
|
+
y: 1
|
|
286
|
+
},
|
|
287
|
+
style: [
|
|
288
|
+
_reactnative.StyleSheet.absoluteFill,
|
|
289
|
+
{
|
|
290
|
+
borderRadius: dim.borderRadius.sysRadiusLg
|
|
291
|
+
}
|
|
292
|
+
]
|
|
293
|
+
}),
|
|
294
|
+
doubledInnerContent
|
|
295
|
+
]
|
|
267
296
|
});
|
|
268
297
|
} else if (variant === 'image') {
|
|
269
298
|
inner = /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {
|
|
@@ -287,7 +316,17 @@ function ServiceCard({ variant = 'outlined', size = 'lg', title, description, ic
|
|
|
287
316
|
resizeMode: "cover",
|
|
288
317
|
accessible: false
|
|
289
318
|
}),
|
|
290
|
-
/*#__PURE__*/ (0, _jsxruntime.jsx)(
|
|
319
|
+
/*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnativelineargradient.default, {
|
|
320
|
+
colors: [
|
|
321
|
+
'rgba(0,0,0,0.4)',
|
|
322
|
+
'rgba(0,0,0,0.05)',
|
|
323
|
+
'rgba(0,0,0,0.5)'
|
|
324
|
+
],
|
|
325
|
+
locations: [
|
|
326
|
+
0.012,
|
|
327
|
+
0.268,
|
|
328
|
+
1
|
|
329
|
+
],
|
|
291
330
|
style: [
|
|
292
331
|
{
|
|
293
332
|
position: 'absolute',
|
|
@@ -297,22 +336,39 @@ function ServiceCard({ variant = 'outlined', size = 'lg', title, description, ic
|
|
|
297
336
|
bottom: 0
|
|
298
337
|
},
|
|
299
338
|
{
|
|
300
|
-
borderRadius: s.borderRadius
|
|
301
|
-
backgroundColor: 'rgba(0,0,0,0.30)'
|
|
339
|
+
borderRadius: s.borderRadius
|
|
302
340
|
}
|
|
303
341
|
],
|
|
304
342
|
pointerEvents: "none"
|
|
305
343
|
})
|
|
306
344
|
]
|
|
307
345
|
}),
|
|
308
|
-
|
|
346
|
+
/*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnative.View, {
|
|
309
347
|
style: {
|
|
310
348
|
width: s.iconSize,
|
|
311
349
|
height: s.iconSize
|
|
312
350
|
},
|
|
313
351
|
children: renderedIcon
|
|
314
352
|
}),
|
|
315
|
-
|
|
353
|
+
/*#__PURE__*/ (0, _jsxruntime.jsxs)(_reactnative.View, {
|
|
354
|
+
style: styles.imageBottom,
|
|
355
|
+
children: [
|
|
356
|
+
/*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnative.View, {
|
|
357
|
+
style: {
|
|
358
|
+
flex: 1
|
|
359
|
+
},
|
|
360
|
+
children: textBlock
|
|
361
|
+
}),
|
|
362
|
+
onPress && ChevronRight && /*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnative.View, {
|
|
363
|
+
style: styles.imageArrowButton,
|
|
364
|
+
children: /*#__PURE__*/ (0, _jsxruntime.jsx)(ChevronRight, {
|
|
365
|
+
size: 16,
|
|
366
|
+
color: cr.surface.surface.sysOnSurface,
|
|
367
|
+
strokeWidth: 1.5
|
|
368
|
+
})
|
|
369
|
+
})
|
|
370
|
+
]
|
|
371
|
+
}),
|
|
316
372
|
children
|
|
317
373
|
]
|
|
318
374
|
});
|
|
@@ -328,11 +384,10 @@ function ServiceCard({ variant = 'outlined', size = 'lg', title, description, ic
|
|
|
328
384
|
children: renderedIcon
|
|
329
385
|
}),
|
|
330
386
|
textBlock,
|
|
331
|
-
s.showChevron && /*#__PURE__*/ (0, _jsxruntime.jsx)(
|
|
332
|
-
name: "chevron-forward",
|
|
387
|
+
s.showChevron && ChevronRight && /*#__PURE__*/ (0, _jsxruntime.jsx)(ChevronRight, {
|
|
333
388
|
size: 20,
|
|
334
389
|
color: v.chevronColor,
|
|
335
|
-
|
|
390
|
+
strokeWidth: 1.5
|
|
336
391
|
}),
|
|
337
392
|
children
|
|
338
393
|
]
|
|
@@ -351,13 +406,27 @@ function ServiceCard({ variant = 'outlined', size = 'lg', title, description, ic
|
|
|
351
406
|
textBlock,
|
|
352
407
|
children,
|
|
353
408
|
buttonIcon && /*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnative.View, {
|
|
354
|
-
style:
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
409
|
+
style: [
|
|
410
|
+
styles.buttonIconWrapper,
|
|
411
|
+
{
|
|
412
|
+
bottom: s.paddingV,
|
|
413
|
+
..._reactnative.I18nManager.isRTL ? {
|
|
414
|
+
left: s.paddingH
|
|
415
|
+
} : {
|
|
416
|
+
right: s.paddingH
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
],
|
|
359
420
|
pointerEvents: "none",
|
|
360
|
-
children:
|
|
421
|
+
children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnative.View, {
|
|
422
|
+
style: [
|
|
423
|
+
styles.buttonIconCircle,
|
|
424
|
+
{
|
|
425
|
+
backgroundColor: v.buttonIconBg
|
|
426
|
+
}
|
|
427
|
+
],
|
|
428
|
+
children: buttonIcon
|
|
429
|
+
})
|
|
361
430
|
})
|
|
362
431
|
]
|
|
363
432
|
});
|
|
@@ -400,6 +469,31 @@ const styles = _reactnative.StyleSheet.create({
|
|
|
400
469
|
alignItems: 'center',
|
|
401
470
|
gap: 12
|
|
402
471
|
},
|
|
472
|
+
imageBottom: {
|
|
473
|
+
flexDirection: 'row',
|
|
474
|
+
alignItems: 'flex-end',
|
|
475
|
+
width: '100%',
|
|
476
|
+
gap: 16
|
|
477
|
+
},
|
|
478
|
+
buttonIconWrapper: {
|
|
479
|
+
position: 'absolute'
|
|
480
|
+
},
|
|
481
|
+
buttonIconCircle: {
|
|
482
|
+
width: 36,
|
|
483
|
+
height: 36,
|
|
484
|
+
borderRadius: 18,
|
|
485
|
+
alignItems: 'center',
|
|
486
|
+
justifyContent: 'center'
|
|
487
|
+
},
|
|
488
|
+
imageArrowButton: {
|
|
489
|
+
width: 32,
|
|
490
|
+
height: 32,
|
|
491
|
+
borderRadius: 999,
|
|
492
|
+
backgroundColor: '#ffffff',
|
|
493
|
+
alignItems: 'center',
|
|
494
|
+
justifyContent: 'center',
|
|
495
|
+
flexShrink: 0
|
|
496
|
+
},
|
|
403
497
|
rowTextBlock: {
|
|
404
498
|
flex: 1,
|
|
405
499
|
minWidth: 0
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../packages/react-native/src/components/ServiceCard/index.tsx"],"sourcesContent":["import React, { useMemo } from 'react';\r\n\r\nimport {\r\n Image,\r\n type ImageSourcePropType,\r\n Pressable,\r\n StyleProp,\r\n StyleSheet,\r\n View,\r\n ViewStyle,\r\n} from 'react-native';\r\n\r\nimport { Ionicons } from '@expo/vector-icons';\r\nimport { LinearGradient } from 'expo-linear-gradient';\r\n\r\nimport { ICON_MAP, type IconName } from '../../icons';\r\nimport { useTheme } from '../../theme';\r\nimport { BodyText } from '../BodyText';\r\n\r\nexport type ServiceCardVariant =\r\n | 'outlined'\r\n | 'tonal'\r\n | 'filled'\r\n | 'doubled'\r\n | 'image';\r\nexport type ServiceCardSize = 'sm' | 'md' | 'lg';\r\n\r\nexport interface ServiceCardProps {\r\n variant?: ServiceCardVariant;\r\n size?: ServiceCardSize;\r\n title?: React.ReactNode;\r\n description?: React.ReactNode;\r\n icon?: IconName;\r\n image?: ImageSourcePropType;\r\n buttonIcon?: React.ReactNode;\r\n interactive?: boolean;\r\n disabled?: boolean;\r\n onPress?: () => void;\r\n children?: React.ReactNode;\r\n accessibilityLabel?: string;\r\n fullWidth?: boolean;\r\n style?: StyleProp<ViewStyle>;\r\n /** Gradient colors for the \"doubled\" variant inner card (e.g. ['#a855f7', '#6366f1']). Falls back to the solid token color when omitted. */\r\n gradient?: readonly [string, string, ...string[]];\r\n /** Start point of the gradient in 0–1 coordinate space. Defaults to { x: 0, y: 0 } (top). */\r\n gradientStart?: { x: number; y: number };\r\n /** End point of the gradient in 0–1 coordinate space. Defaults to { x: 0, y: 1 } (bottom). */\r\n gradientEnd?: { x: number; y: number };\r\n}\r\n\r\nconst ELEVATION = {\r\n shadowColor: '#000',\r\n shadowOffset: { width: 0, height: 2 },\r\n shadowOpacity: 0.08,\r\n shadowRadius: 8,\r\n elevation: 2,\r\n};\r\n\r\n// ── Component ─────────────────────────────────────────────────────────────────\r\n\r\nexport function ServiceCard({\r\n variant = 'outlined',\r\n size = 'lg',\r\n title,\r\n description,\r\n icon,\r\n image,\r\n buttonIcon,\r\n interactive = false,\r\n disabled = false,\r\n onPress,\r\n children,\r\n accessibilityLabel,\r\n fullWidth = false,\r\n style,\r\n gradient,\r\n gradientStart,\r\n gradientEnd,\r\n}: ServiceCardProps) {\r\n const { colorRoles: cr, dimensions: dim } = useTheme();\r\n\r\n const variantTokens = useMemo(\r\n () => ({\r\n outlined: {\r\n bg: cr.surface.surfaceContainer.sysSurfaceContainerLowest,\r\n borderColor: cr.outline.sysOutline,\r\n borderWidth: dim.borderWidth.sysStrokeThin,\r\n elevated: true,\r\n titleColor: cr.surface.surface.sysOnSurface,\r\n descColor: cr.surface.surface.sysOnSurfaceVariant,\r\n chevronColor: cr.outline.sysOutlineFixed,\r\n innerBg: undefined,\r\n iconBadgeBg: undefined,\r\n iconBadgeColor: undefined,\r\n },\r\n tonal: {\r\n bg: cr.addOn.primaryFixed.sysPrimaryFixedDim,\r\n borderColor: 'transparent',\r\n borderWidth: 0,\r\n elevated: false,\r\n titleColor: cr.addOn.primaryFixed.sysOnPrimaryFixed,\r\n descColor: cr.addOn.primaryFixed.sysOnPrimaryFixed,\r\n chevronColor: cr.addOn.primaryFixed.sysOnPrimaryFixed,\r\n innerBg: undefined,\r\n iconBadgeBg: undefined,\r\n iconBadgeColor: undefined,\r\n },\r\n filled: {\r\n bg: cr.accent.primary.sysPrimaryContainer,\r\n borderColor: 'transparent',\r\n borderWidth: 0,\r\n elevated: false,\r\n titleColor: cr.accent.primary.sysOnPrimary,\r\n descColor: cr.transparent.neutral.sysWhite80,\r\n chevronColor: cr.accent.primary.sysOnPrimary,\r\n innerBg: undefined,\r\n iconBadgeBg: undefined,\r\n iconBadgeColor: undefined,\r\n },\r\n doubled: {\r\n bg: cr.surface.surfaceContainer.sysSurfaceContainerLowest,\r\n borderColor: cr.outline.sysOutline,\r\n borderWidth: dim.borderWidth.sysStrokeThin,\r\n elevated: false,\r\n titleColor: cr.surface.surface.sysOnSurface,\r\n descColor: cr.surface.surface.sysOnSurfaceVariant,\r\n chevronColor: cr.outline.sysOutlineFixed,\r\n innerBg: cr.transparent.primary.sysPrimary08,\r\n iconBadgeBg: cr.accent.primary.sysPrimary,\r\n iconBadgeColor: cr.accent.primary.sysOnPrimary,\r\n },\r\n image: {\r\n bg: 'transparent',\r\n borderColor: 'transparent',\r\n borderWidth: 0,\r\n elevated: false,\r\n titleColor: cr.surface.inverse.sysInverseOnSurface,\r\n descColor: cr.transparent.neutral.sysWhite80,\r\n chevronColor: cr.surface.inverse.sysInverseOnSurface,\r\n innerBg: undefined,\r\n iconBadgeBg: undefined,\r\n iconBadgeColor: undefined,\r\n },\r\n }),\r\n [cr, dim],\r\n );\r\n\r\n const sizeTokens = useMemo(\r\n () => ({\r\n sm: {\r\n layout: 'row' as const,\r\n paddingH: dim.spacing.padding.sysPadding16,\r\n paddingV: dim.spacing.padding.sysPadding12,\r\n gap: dim.spacing.padding.sysPadding12,\r\n borderRadius: dim.borderRadius.sysRadiusMd,\r\n iconSize: 24,\r\n iconSizeName: 'small' as const,\r\n titleVariant: 'medium' as const,\r\n showChevron: true,\r\n },\r\n md: {\r\n layout: 'column' as const,\r\n paddingH: dim.spacing.padding.sysPadding16,\r\n paddingV: dim.spacing.padding.sysPadding16,\r\n gap: dim.spacing.padding.sysPadding24,\r\n borderRadius: dim.borderRadius.sysRadiusLg,\r\n iconSize: 32,\r\n iconSizeName: 'medium' as const,\r\n titleVariant: 'medium' as const,\r\n showChevron: false,\r\n },\r\n lg: {\r\n layout: 'column' as const,\r\n paddingH: dim.spacing.padding.sysPadding16,\r\n paddingV: dim.spacing.padding.sysPadding16,\r\n gap: dim.spacing.padding.sysPadding32,\r\n borderRadius: dim.borderRadius.sysRadiusLg,\r\n iconSize: 32,\r\n iconSizeName: 'large' as const,\r\n titleVariant: 'large' as const,\r\n showChevron: false,\r\n },\r\n }),\r\n [dim],\r\n );\r\n\r\n const v = variantTokens[variant];\r\n const s = sizeTokens[size];\r\n const isRow = s.layout === 'row';\r\n\r\n const IconComponent = icon ? ICON_MAP[icon] : null;\r\n const iconColor = v.iconBadgeColor ?? v.titleColor;\r\n const renderedIcon = IconComponent ? (\r\n <IconComponent size={s.iconSizeName} color={iconColor} />\r\n ) : null;\r\n\r\n const outerStyle = [\r\n {\r\n backgroundColor: v.bg,\r\n borderColor: v.borderColor,\r\n borderWidth: v.borderWidth,\r\n borderRadius:\r\n variant === 'doubled' ? dim.borderRadius.sysRadiusXl : s.borderRadius,\r\n paddingHorizontal:\r\n variant === 'doubled' ? dim.spacing.padding.sysPadding8 : s.paddingH,\r\n paddingVertical:\r\n variant === 'doubled' ? dim.spacing.padding.sysPadding8 : s.paddingV,\r\n opacity: disabled ? 0.48 : 1,\r\n },\r\n v.elevated && ELEVATION,\r\n fullWidth && { alignSelf: 'stretch' as const },\r\n isRow ? styles.rowRoot : styles.colRoot,\r\n !isRow && { gap: s.gap },\r\n style,\r\n ];\r\n\r\n // ── Text block ──────────────────────────────────────────────────────────────\r\n const textBlock =\r\n title || description ? (\r\n <View style={isRow ? styles.rowTextBlock : undefined}>\r\n {title && (\r\n <BodyText variant={s.titleVariant} color={v.titleColor}>\r\n {title}\r\n </BodyText>\r\n )}\r\n {!isRow && description && (\r\n <BodyText variant=\"small\" color={v.descColor}>\r\n {description}\r\n </BodyText>\r\n )}\r\n </View>\r\n ) : null;\r\n\r\n // ── Inner content by variant ────────────────────────────────────────────────\r\n let inner: React.ReactNode;\r\n\r\n if (variant === 'doubled') {\r\n const doubledInnerStyle: StyleProp<ViewStyle> = [\r\n styles.colRoot,\r\n {\r\n borderRadius: s.borderRadius,\r\n paddingHorizontal: s.paddingH,\r\n paddingVertical: s.paddingV,\r\n gap: dim.spacing.padding.sysPadding24,\r\n },\r\n ];\r\n\r\n const doubledInnerContent = (\r\n <>\r\n {renderedIcon && (\r\n <View\r\n style={[\r\n styles.doubledIconBadge,\r\n {\r\n backgroundColor: v.iconBadgeBg,\r\n borderRadius: dim.borderRadius.sysRadiusFull,\r\n },\r\n ]}\r\n >\r\n {renderedIcon}\r\n </View>\r\n )}\r\n {textBlock}\r\n {children}\r\n </>\r\n );\r\n\r\n inner = gradient ? (\r\n <LinearGradient\r\n colors={gradient}\r\n start={gradientStart ?? { x: 0, y: 0 }}\r\n end={gradientEnd ?? { x: 0, y: 1 }}\r\n style={doubledInnerStyle}\r\n >\r\n {doubledInnerContent}\r\n </LinearGradient>\r\n ) : (\r\n <View style={[doubledInnerStyle, { backgroundColor: v.innerBg }]}>\r\n {doubledInnerContent}\r\n </View>\r\n );\r\n } else if (variant === 'image') {\r\n inner = (\r\n <>\r\n {image && (\r\n <>\r\n <Image\r\n source={image}\r\n style={[\r\n { position: 'absolute', top: 0, left: 0, right: 0, bottom: 0 },\r\n { borderRadius: s.borderRadius },\r\n ]}\r\n resizeMode=\"cover\"\r\n accessible={false}\r\n />\r\n <View\r\n style={[\r\n { position: 'absolute', top: 0, left: 0, right: 0, bottom: 0 },\r\n {\r\n borderRadius: s.borderRadius,\r\n backgroundColor: 'rgba(0,0,0,0.30)',\r\n },\r\n ]}\r\n pointerEvents=\"none\"\r\n />\r\n </>\r\n )}\r\n {renderedIcon && (\r\n <View style={{ width: s.iconSize, height: s.iconSize }}>\r\n {renderedIcon}\r\n </View>\r\n )}\r\n {textBlock}\r\n {children}\r\n </>\r\n );\r\n } else if (isRow) {\r\n // sm — horizontal row\r\n inner = (\r\n <>\r\n {renderedIcon && (\r\n <View style={{ width: s.iconSize, height: s.iconSize }}>\r\n {renderedIcon}\r\n </View>\r\n )}\r\n {textBlock}\r\n {s.showChevron && (\r\n <Ionicons\r\n name=\"chevron-forward\"\r\n size={20}\r\n color={v.chevronColor}\r\n accessible={false}\r\n />\r\n )}\r\n {children}\r\n </>\r\n );\r\n } else {\r\n // md / lg — vertical column\r\n inner = (\r\n <>\r\n {renderedIcon && (\r\n <View style={{ width: s.iconSize, height: s.iconSize }}>\r\n {renderedIcon}\r\n </View>\r\n )}\r\n {textBlock}\r\n {children}\r\n {buttonIcon && (\r\n <View\r\n style={{\r\n position: 'absolute',\r\n bottom: s.paddingV,\r\n right: s.paddingH,\r\n }}\r\n pointerEvents=\"none\"\r\n >\r\n {buttonIcon}\r\n </View>\r\n )}\r\n </>\r\n );\r\n }\r\n\r\n // ── Wrapper ─────────────────────────────────────────────────────────────────\r\n if (interactive || onPress) {\r\n return (\r\n <Pressable\r\n onPress={disabled ? undefined : onPress}\r\n accessibilityRole=\"button\"\r\n accessibilityLabel={\r\n accessibilityLabel ?? (typeof title === 'string' ? title : undefined)\r\n }\r\n accessibilityState={{ disabled }}\r\n style={({ pressed }) => [\r\n styles.overflow,\r\n ...outerStyle,\r\n pressed && !disabled && styles.pressed,\r\n ]}\r\n >\r\n {inner}\r\n </Pressable>\r\n );\r\n }\r\n\r\n return <View style={[styles.overflow, ...outerStyle]}>{inner}</View>;\r\n}\r\n\r\nconst styles = StyleSheet.create({\r\n overflow: {\r\n overflow: 'hidden',\r\n },\r\n colRoot: {\r\n flexDirection: 'column',\r\n alignItems: 'flex-start',\r\n },\r\n rowRoot: {\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n gap: 12,\r\n },\r\n rowTextBlock: {\r\n flex: 1,\r\n minWidth: 0,\r\n },\r\n doubledIconBadge: {\r\n width: 48,\r\n height: 48,\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n pressed: {\r\n opacity: 0.84,\r\n },\r\n});\r\n"],"names":["ServiceCard","ELEVATION","shadowColor","shadowOffset","width","height","shadowOpacity","shadowRadius","elevation","variant","size","title","description","icon","image","buttonIcon","interactive","disabled","onPress","children","accessibilityLabel","fullWidth","style","gradient","gradientStart","gradientEnd","colorRoles","cr","dimensions","dim","useTheme","variantTokens","useMemo","outlined","bg","surface","surfaceContainer","sysSurfaceContainerLowest","borderColor","outline","sysOutline","borderWidth","sysStrokeThin","elevated","titleColor","sysOnSurface","descColor","sysOnSurfaceVariant","chevronColor","sysOutlineFixed","innerBg","undefined","iconBadgeBg","iconBadgeColor","tonal","addOn","primaryFixed","sysPrimaryFixedDim","sysOnPrimaryFixed","filled","accent","primary","sysPrimaryContainer","sysOnPrimary","transparent","neutral","sysWhite80","doubled","sysPrimary08","sysPrimary","inverse","sysInverseOnSurface","sizeTokens","sm","layout","paddingH","spacing","padding","sysPadding16","paddingV","sysPadding12","gap","borderRadius","sysRadiusMd","iconSize","iconSizeName","titleVariant","showChevron","md","sysPadding24","sysRadiusLg","lg","sysPadding32","v","s","isRow","IconComponent","ICON_MAP","iconColor","renderedIcon","color","outerStyle","backgroundColor","sysRadiusXl","paddingHorizontal","sysPadding8","paddingVertical","opacity","alignSelf","styles","rowRoot","colRoot","textBlock","View","rowTextBlock","BodyText","inner","doubledInnerStyle","doubledInnerContent","doubledIconBadge","sysRadiusFull","LinearGradient","colors","start","x","y","end","Image","source","position","top","left","right","bottom","resizeMode","accessible","pointerEvents","Ionicons","name","Pressable","accessibilityRole","accessibilityState","pressed","overflow","StyleSheet","create","flexDirection","alignItems","flex","minWidth","justifyContent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../../packages/react-native/src/components/ServiceCard/index.tsx"],"sourcesContent":["import React, { useMemo } from 'react';\r\n\r\nimport {\r\n I18nManager,\r\n Image,\r\n type ImageSourcePropType,\r\n Pressable,\r\n StyleProp,\r\n StyleSheet,\r\n View,\r\n ViewStyle,\r\n} from 'react-native';\r\n\r\nimport LinearGradient from 'react-native-linear-gradient';\r\n\r\nimport { type IconName, SIZE_MAP, resolveIcon } from '../../icons';\r\nimport { useTheme } from '../../theme';\r\nimport { BodyText } from '../BodyText';\r\n\r\nexport type ServiceCardVariant =\r\n | 'outlined'\r\n | 'tonal'\r\n | 'filled'\r\n | 'doubled'\r\n | 'image';\r\nexport type ServiceCardSize = 'sm' | 'md' | 'lg';\r\n\r\nexport interface ServiceCardProps {\r\n variant?: ServiceCardVariant;\r\n size?: ServiceCardSize;\r\n title?: React.ReactNode;\r\n description?: React.ReactNode;\r\n icon?: IconName;\r\n image?: ImageSourcePropType;\r\n buttonIcon?: React.ReactNode;\r\n interactive?: boolean;\r\n disabled?: boolean;\r\n onPress?: () => void;\r\n children?: React.ReactNode;\r\n accessibilityLabel?: string;\r\n fullWidth?: boolean;\r\n style?: StyleProp<ViewStyle>;\r\n /** Gradient colors for the \"doubled\" variant inner card (e.g. ['#a855f7', '#6366f1']). Falls back to the solid token color when omitted. */\r\n gradient?: readonly [string, string, ...string[]];\r\n /** Start point of the gradient in 0–1 coordinate space. Defaults to { x: 0, y: 0 } (top). */\r\n gradientStart?: { x: number; y: number };\r\n /** End point of the gradient in 0–1 coordinate space. Defaults to { x: 0, y: 1 } (bottom). */\r\n gradientEnd?: { x: number; y: number };\r\n}\r\n\r\nconst ELEVATION = {\r\n shadowColor: '#000',\r\n shadowOffset: { width: 0, height: 2 },\r\n shadowOpacity: 0.08,\r\n shadowRadius: 8,\r\n elevation: 2,\r\n};\r\n\r\n// ── Component ─────────────────────────────────────────────────────────────────\r\n\r\nexport function ServiceCard({\r\n variant = 'outlined',\r\n size = 'lg',\r\n title,\r\n description,\r\n icon,\r\n image,\r\n buttonIcon,\r\n interactive = false,\r\n disabled = false,\r\n onPress,\r\n children,\r\n accessibilityLabel,\r\n fullWidth = false,\r\n style,\r\n gradient,\r\n gradientStart,\r\n gradientEnd,\r\n}: ServiceCardProps) {\r\n const { colorRoles: cr, dimensions: dim } = useTheme();\r\n\r\n const variantTokens = useMemo(\r\n () => ({\r\n outlined: {\r\n bg: cr.surface.surfaceContainer.sysSurfaceContainerLowest,\r\n borderColor: cr.outline.sysOutline,\r\n borderWidth: dim.borderWidth.sysStrokeThin,\r\n elevated: true,\r\n titleColor: cr.surface.surface.sysOnSurface,\r\n descColor: cr.surface.surface.sysOnSurfaceVariant,\r\n chevronColor: cr.outline.sysOutlineFixed,\r\n innerBg: undefined,\r\n iconBadgeBg: undefined,\r\n iconBadgeColor: undefined,\r\n buttonIconBg: cr.surface.surfaceContainer.sysSurfaceContainer,\r\n },\r\n tonal: {\r\n bg: cr.addOn.primaryFixed.sysPrimaryFixedDim,\r\n borderColor: 'transparent',\r\n borderWidth: 0,\r\n elevated: false,\r\n titleColor: cr.addOn.primaryFixed.sysOnPrimaryFixed,\r\n descColor: cr.addOn.primaryFixed.sysOnPrimaryFixed,\r\n chevronColor: cr.addOn.primaryFixed.sysOnPrimaryFixed,\r\n innerBg: undefined,\r\n iconBadgeBg: undefined,\r\n iconBadgeColor: undefined,\r\n buttonIconBg: cr.surface.surfaceContainer.sysSurfaceContainerLowest,\r\n },\r\n filled: {\r\n bg: cr.accent.primary.sysPrimaryContainer,\r\n borderColor: 'transparent',\r\n borderWidth: 0,\r\n elevated: false,\r\n titleColor: cr.accent.primary.sysOnPrimary,\r\n descColor: cr.transparent.neutral.sysWhite80,\r\n chevronColor: cr.accent.primary.sysOnPrimary,\r\n innerBg: undefined,\r\n iconBadgeBg: undefined,\r\n iconBadgeColor: undefined,\r\n buttonIconBg: cr.surface.surfaceContainer.sysSurfaceContainerLowest,\r\n },\r\n doubled: {\r\n bg: cr.surface.surfaceContainer.sysSurfaceContainerLowest,\r\n borderColor: cr.outline.sysOutline,\r\n borderWidth: dim.borderWidth.sysStrokeThin,\r\n elevated: false,\r\n titleColor: cr.surface.surface.sysOnSurface,\r\n descColor: cr.surface.surface.sysOnSurfaceVariant,\r\n chevronColor: cr.outline.sysOutlineFixed,\r\n innerBg: cr.transparent.primary.sysPrimary08,\r\n iconBadgeBg: cr.accent.primary.sysPrimary,\r\n iconBadgeColor: cr.accent.primary.sysOnPrimary,\r\n buttonIconBg: cr.surface.surfaceContainer.sysSurfaceContainerLowest,\r\n },\r\n image: {\r\n bg: 'transparent',\r\n borderColor: 'transparent',\r\n borderWidth: 0,\r\n elevated: false,\r\n titleColor: cr.surface.inverse.sysInverseOnSurface,\r\n descColor: cr.transparent.neutral.sysWhite80,\r\n chevronColor: cr.surface.inverse.sysInverseOnSurface,\r\n innerBg: undefined,\r\n iconBadgeBg: undefined,\r\n iconBadgeColor: undefined,\r\n buttonIconBg: cr.surface.surfaceContainer.sysSurfaceContainerLowest,\r\n },\r\n }),\r\n [cr, dim],\r\n );\r\n\r\n const sizeTokens = useMemo(\r\n () => ({\r\n sm: {\r\n layout: 'row' as const,\r\n paddingH: dim.spacing.padding.sysPadding16,\r\n paddingV: dim.spacing.padding.sysPadding12,\r\n gap: dim.spacing.padding.sysPadding12,\r\n borderRadius: dim.borderRadius.sysRadiusMd,\r\n iconSize: 24,\r\n iconSizeName: 'small' as const,\r\n titleVariant: 'medium' as const,\r\n showChevron: true,\r\n },\r\n md: {\r\n layout: 'column' as const,\r\n paddingH: dim.spacing.padding.sysPadding16,\r\n paddingV: dim.spacing.padding.sysPadding16,\r\n gap: dim.spacing.padding.sysPadding24,\r\n borderRadius: dim.borderRadius.sysRadiusLg,\r\n iconSize: 32,\r\n iconSizeName: 'medium' as const,\r\n titleVariant: 'medium' as const,\r\n showChevron: false,\r\n },\r\n lg: {\r\n layout: 'column' as const,\r\n paddingH: dim.spacing.padding.sysPadding16,\r\n paddingV: dim.spacing.padding.sysPadding16,\r\n gap: dim.spacing.padding.sysPadding32,\r\n borderRadius: dim.borderRadius.sysRadiusLg,\r\n iconSize: 32,\r\n iconSizeName: 'large' as const,\r\n titleVariant: 'large' as const,\r\n showChevron: false,\r\n },\r\n }),\r\n [dim],\r\n );\r\n\r\n const v = variantTokens[variant];\r\n const s = sizeTokens[size];\r\n const isRow = s.layout === 'row';\r\n\r\n const LucideIcon = icon ? resolveIcon(icon) : null;\r\n const ChevronRight = resolveIcon('ChevronRight');\r\n const iconColor = v.iconBadgeColor ?? v.titleColor;\r\n const { size: iconPx, strokeWidth: iconSW } = SIZE_MAP[s.iconSizeName];\r\n const renderedIcon = LucideIcon ? (\r\n <LucideIcon size={iconPx} color={iconColor} strokeWidth={iconSW} />\r\n ) : null;\r\n\r\n const outerStyle = [\r\n {\r\n backgroundColor: v.bg,\r\n borderColor: v.borderColor,\r\n borderWidth: v.borderWidth,\r\n borderRadius:\r\n variant === 'doubled' ? dim.borderRadius.sysRadiusXl : s.borderRadius,\r\n\r\n opacity: disabled ? 0.48 : 1,\r\n },\r\n v.elevated && ELEVATION,\r\n variant !== 'doubled' && {\r\n paddingHorizontal: s.paddingH,\r\n paddingVertical: s.paddingV,\r\n },\r\n fullWidth && { alignSelf: 'stretch' as const },\r\n isRow ? styles.rowRoot : styles.colRoot,\r\n !isRow && variant !== 'image' && { gap: s.gap },\r\n variant === 'image' && { justifyContent: 'space-between' as const },\r\n style,\r\n ];\r\n\r\n // ── Text block ──────────────────────────────────────────────────────────────\r\n const textBlock =\r\n title || description ? (\r\n <View style={isRow ? styles.rowTextBlock : undefined}>\r\n {title && (\r\n <BodyText variant={s.titleVariant} color={v.titleColor}>\r\n {title}\r\n </BodyText>\r\n )}\r\n {!isRow && description && (\r\n <BodyText variant=\"small\" color={v.descColor}>\r\n {description}\r\n </BodyText>\r\n )}\r\n </View>\r\n ) : null;\r\n\r\n // ── Inner content by variant ────────────────────────────────────────────────\r\n let inner: React.ReactNode;\r\n\r\n if (variant === 'doubled') {\r\n const doubledInnerStyle: StyleProp<ViewStyle> = [\r\n styles.colRoot,\r\n {\r\n alignSelf: 'stretch',\r\n borderRadius: dim.borderRadius.sysRadiusXl,\r\n borderColor: cr.accent.primary.sysOnPrimary,\r\n borderWidth: dim.spacing.padding.sysPadding8,\r\n paddingHorizontal: dim.spacing.padding.sysPadding8,\r\n paddingVertical: dim.spacing.padding.sysPadding16,\r\n gap: dim.spacing.padding.sysPadding12,\r\n },\r\n ];\r\n\r\n const doubledInnerContent = (\r\n <>\r\n {renderedIcon && (\r\n <View\r\n style={[\r\n styles.doubledIconBadge,\r\n {\r\n backgroundColor: v.iconBadgeBg,\r\n borderRadius: dim.borderRadius.sysRadiusFull,\r\n },\r\n ]}\r\n >\r\n {renderedIcon}\r\n </View>\r\n )}\r\n {textBlock}\r\n {children}\r\n </>\r\n );\r\n\r\n inner = (\r\n <View\r\n style={[doubledInnerStyle, !gradient && { backgroundColor: v.innerBg }]}\r\n >\r\n {gradient && (\r\n <LinearGradient\r\n colors={[...gradient]}\r\n start={gradientStart ?? { x: 0, y: 0 }}\r\n end={gradientEnd ?? { x: 0, y: 1 }}\r\n style={[\r\n StyleSheet.absoluteFill,\r\n { borderRadius: dim.borderRadius.sysRadiusLg },\r\n ]}\r\n />\r\n )}\r\n {doubledInnerContent}\r\n </View>\r\n );\r\n } else if (variant === 'image') {\r\n inner = (\r\n <>\r\n {image && (\r\n <>\r\n <Image\r\n source={image}\r\n style={[\r\n { position: 'absolute', top: 0, left: 0, right: 0, bottom: 0 },\r\n { borderRadius: s.borderRadius },\r\n ]}\r\n resizeMode=\"cover\"\r\n accessible={false}\r\n />\r\n <LinearGradient\r\n colors={[\r\n 'rgba(0,0,0,0.4)',\r\n 'rgba(0,0,0,0.05)',\r\n 'rgba(0,0,0,0.5)',\r\n ]}\r\n locations={[0.012, 0.268, 1]}\r\n style={[\r\n { position: 'absolute', top: 0, left: 0, right: 0, bottom: 0 },\r\n { borderRadius: s.borderRadius },\r\n ]}\r\n pointerEvents=\"none\"\r\n />\r\n </>\r\n )}\r\n <View style={{ width: s.iconSize, height: s.iconSize }}>\r\n {renderedIcon}\r\n </View>\r\n <View style={styles.imageBottom}>\r\n <View style={{ flex: 1 }}>{textBlock}</View>\r\n {onPress && ChevronRight && (\r\n <View style={styles.imageArrowButton}>\r\n <ChevronRight\r\n size={16}\r\n color={cr.surface.surface.sysOnSurface}\r\n strokeWidth={1.5}\r\n />\r\n </View>\r\n )}\r\n </View>\r\n {children}\r\n </>\r\n );\r\n } else if (isRow) {\r\n // sm — horizontal row\r\n inner = (\r\n <>\r\n {renderedIcon && (\r\n <View style={{ width: s.iconSize, height: s.iconSize }}>\r\n {renderedIcon}\r\n </View>\r\n )}\r\n {textBlock}\r\n {s.showChevron && ChevronRight && (\r\n <ChevronRight size={20} color={v.chevronColor} strokeWidth={1.5} />\r\n )}\r\n {children}\r\n </>\r\n );\r\n } else {\r\n // md / lg — vertical column\r\n inner = (\r\n <>\r\n {renderedIcon && (\r\n <View style={{ width: s.iconSize, height: s.iconSize }}>\r\n {renderedIcon}\r\n </View>\r\n )}\r\n {textBlock}\r\n {children}\r\n {buttonIcon && (\r\n <View\r\n style={[\r\n styles.buttonIconWrapper,\r\n {\r\n bottom: s.paddingV,\r\n ...(I18nManager.isRTL\r\n ? { left: s.paddingH }\r\n : { right: s.paddingH }),\r\n },\r\n ]}\r\n pointerEvents=\"none\"\r\n >\r\n <View\r\n style={[\r\n styles.buttonIconCircle,\r\n { backgroundColor: v.buttonIconBg },\r\n ]}\r\n >\r\n {buttonIcon}\r\n </View>\r\n </View>\r\n )}\r\n </>\r\n );\r\n }\r\n\r\n // ── Wrapper ─────────────────────────────────────────────────────────────────\r\n if (interactive || onPress) {\r\n return (\r\n <Pressable\r\n onPress={disabled ? undefined : onPress}\r\n accessibilityRole=\"button\"\r\n accessibilityLabel={\r\n accessibilityLabel ?? (typeof title === 'string' ? title : undefined)\r\n }\r\n accessibilityState={{ disabled }}\r\n style={({ pressed }) => [\r\n styles.overflow,\r\n ...outerStyle,\r\n pressed && !disabled && styles.pressed,\r\n ]}\r\n >\r\n {inner}\r\n </Pressable>\r\n );\r\n }\r\n\r\n return <View style={[styles.overflow, ...outerStyle]}>{inner}</View>;\r\n}\r\n\r\nconst styles = StyleSheet.create({\r\n overflow: {\r\n overflow: 'hidden',\r\n },\r\n colRoot: {\r\n flexDirection: 'column',\r\n alignItems: 'flex-start',\r\n },\r\n rowRoot: {\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n gap: 12,\r\n },\r\n imageBottom: {\r\n flexDirection: 'row',\r\n alignItems: 'flex-end',\r\n width: '100%',\r\n gap: 16,\r\n },\r\n buttonIconWrapper: {\r\n position: 'absolute',\r\n },\r\n buttonIconCircle: {\r\n width: 36,\r\n height: 36,\r\n borderRadius: 18,\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n imageArrowButton: {\r\n width: 32,\r\n height: 32,\r\n borderRadius: 999,\r\n backgroundColor: '#ffffff',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n flexShrink: 0,\r\n },\r\n rowTextBlock: {\r\n flex: 1,\r\n minWidth: 0,\r\n },\r\n doubledIconBadge: {\r\n width: 48,\r\n height: 48,\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n pressed: {\r\n opacity: 0.84,\r\n },\r\n});\r\n"],"names":["ServiceCard","ELEVATION","shadowColor","shadowOffset","width","height","shadowOpacity","shadowRadius","elevation","variant","size","title","description","icon","image","buttonIcon","interactive","disabled","onPress","children","accessibilityLabel","fullWidth","style","gradient","gradientStart","gradientEnd","colorRoles","cr","dimensions","dim","useTheme","variantTokens","useMemo","outlined","bg","surface","surfaceContainer","sysSurfaceContainerLowest","borderColor","outline","sysOutline","borderWidth","sysStrokeThin","elevated","titleColor","sysOnSurface","descColor","sysOnSurfaceVariant","chevronColor","sysOutlineFixed","innerBg","undefined","iconBadgeBg","iconBadgeColor","buttonIconBg","sysSurfaceContainer","tonal","addOn","primaryFixed","sysPrimaryFixedDim","sysOnPrimaryFixed","filled","accent","primary","sysPrimaryContainer","sysOnPrimary","transparent","neutral","sysWhite80","doubled","sysPrimary08","sysPrimary","inverse","sysInverseOnSurface","sizeTokens","sm","layout","paddingH","spacing","padding","sysPadding16","paddingV","sysPadding12","gap","borderRadius","sysRadiusMd","iconSize","iconSizeName","titleVariant","showChevron","md","sysPadding24","sysRadiusLg","lg","sysPadding32","v","s","isRow","LucideIcon","resolveIcon","ChevronRight","iconColor","iconPx","strokeWidth","iconSW","SIZE_MAP","renderedIcon","color","outerStyle","backgroundColor","sysRadiusXl","opacity","paddingHorizontal","paddingVertical","alignSelf","styles","rowRoot","colRoot","justifyContent","textBlock","View","rowTextBlock","BodyText","inner","doubledInnerStyle","sysPadding8","doubledInnerContent","doubledIconBadge","sysRadiusFull","LinearGradient","colors","start","x","y","end","StyleSheet","absoluteFill","Image","source","position","top","left","right","bottom","resizeMode","accessible","locations","pointerEvents","imageBottom","flex","imageArrowButton","buttonIconWrapper","I18nManager","isRTL","buttonIconCircle","Pressable","accessibilityRole","accessibilityState","pressed","overflow","create","flexDirection","alignItems","flexShrink","minWidth"],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { StyleProp, ViewStyle } from 'react-native';
|
|
3
|
+
import { type IconName } from '../../icons';
|
|
4
|
+
export type StatusChipVariant = 'warning' | 'error';
|
|
5
|
+
export type StatusChipAlign = 'left' | 'center' | 'right';
|
|
6
|
+
export interface StatusChipProps {
|
|
7
|
+
label: string;
|
|
8
|
+
variant?: StatusChipVariant;
|
|
9
|
+
/** Icon name — defaults to ClockFadingIcon (warning) or ClockAlertIcon (error) */
|
|
10
|
+
icon?: IconName;
|
|
11
|
+
align?: StatusChipAlign;
|
|
12
|
+
fullWidth?: boolean;
|
|
13
|
+
style?: StyleProp<ViewStyle>;
|
|
14
|
+
}
|
|
15
|
+
export declare function StatusChip({ label, variant, icon, align, fullWidth, style, }: StatusChipProps): React.JSX.Element;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "StatusChip", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return StatusChip;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _jsxruntime = require("react/jsx-runtime");
|
|
12
|
+
const _react = /*#__PURE__*/ _interop_require_default(require("react"));
|
|
13
|
+
const _reactnative = require("react-native");
|
|
14
|
+
const _icons = require("../../icons");
|
|
15
|
+
const _theme = require("../../theme");
|
|
16
|
+
const _BodyText = require("../BodyText");
|
|
17
|
+
function _interop_require_default(obj) {
|
|
18
|
+
return obj && obj.__esModule ? obj : {
|
|
19
|
+
default: obj
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
const DEFAULT_ICONS = {
|
|
23
|
+
warning: 'ClockFadingIcon',
|
|
24
|
+
error: 'ClockAlertIcon'
|
|
25
|
+
};
|
|
26
|
+
const JUSTIFY = {
|
|
27
|
+
left: 'flex-start',
|
|
28
|
+
center: 'center',
|
|
29
|
+
right: 'flex-end'
|
|
30
|
+
};
|
|
31
|
+
function StatusChip({ label, variant = 'warning', icon, align = 'center', fullWidth = false, style }) {
|
|
32
|
+
const { colorRoles: cr } = (0, _theme.useTheme)();
|
|
33
|
+
const colors = variant === 'warning' ? {
|
|
34
|
+
bg: cr.custom.warning.sysWarningContainer,
|
|
35
|
+
text: cr.custom.warning.sysOnWarningContainer
|
|
36
|
+
} : {
|
|
37
|
+
bg: cr.error.sysErrorContainer,
|
|
38
|
+
text: cr.error.sysOnErrorContainer
|
|
39
|
+
};
|
|
40
|
+
const iconName = icon ?? DEFAULT_ICONS[variant];
|
|
41
|
+
const IconComponent = (0, _icons.resolveIcon)(iconName);
|
|
42
|
+
const { size: iconPx, strokeWidth: iconSW } = _icons.SIZE_MAP['small'];
|
|
43
|
+
return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_reactnative.View, {
|
|
44
|
+
style: [
|
|
45
|
+
styles.chip,
|
|
46
|
+
{
|
|
47
|
+
backgroundColor: colors.bg,
|
|
48
|
+
justifyContent: JUSTIFY[align],
|
|
49
|
+
alignSelf: fullWidth ? 'stretch' : 'flex-start'
|
|
50
|
+
},
|
|
51
|
+
style
|
|
52
|
+
],
|
|
53
|
+
children: [
|
|
54
|
+
IconComponent && /*#__PURE__*/ (0, _jsxruntime.jsx)(IconComponent, {
|
|
55
|
+
size: iconPx,
|
|
56
|
+
strokeWidth: iconSW,
|
|
57
|
+
color: colors.text
|
|
58
|
+
}),
|
|
59
|
+
/*#__PURE__*/ (0, _jsxruntime.jsx)(_BodyText.BodyText, {
|
|
60
|
+
variant: "labelMedium",
|
|
61
|
+
color: colors.text,
|
|
62
|
+
numberOfLines: 1,
|
|
63
|
+
children: label
|
|
64
|
+
})
|
|
65
|
+
]
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
const styles = _reactnative.StyleSheet.create({
|
|
69
|
+
chip: {
|
|
70
|
+
flexDirection: 'row',
|
|
71
|
+
alignItems: 'center',
|
|
72
|
+
borderRadius: 9999,
|
|
73
|
+
paddingHorizontal: 16,
|
|
74
|
+
paddingVertical: 4,
|
|
75
|
+
gap: 8,
|
|
76
|
+
height: 32
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../packages/react-native/src/components/StatusChip/index.tsx"],"sourcesContent":["import React from 'react';\r\n\r\nimport { StyleProp, StyleSheet, View, ViewStyle } from 'react-native';\r\n\r\nimport { type IconName, SIZE_MAP, resolveIcon } from '../../icons';\r\nimport { useTheme } from '../../theme';\r\nimport { BodyText } from '../BodyText';\r\n\r\nexport type StatusChipVariant = 'warning' | 'error';\r\nexport type StatusChipAlign = 'left' | 'center' | 'right';\r\n\r\nexport interface StatusChipProps {\r\n label: string;\r\n variant?: StatusChipVariant;\r\n /** Icon name — defaults to ClockFadingIcon (warning) or ClockAlertIcon (error) */\r\n icon?: IconName;\r\n align?: StatusChipAlign;\r\n fullWidth?: boolean;\r\n style?: StyleProp<ViewStyle>;\r\n}\r\n\r\nconst DEFAULT_ICONS: Record<StatusChipVariant, IconName> = {\r\n warning: 'ClockFadingIcon',\r\n error: 'ClockAlertIcon',\r\n};\r\n\r\nconst JUSTIFY: Record<StatusChipAlign, 'flex-start' | 'center' | 'flex-end'> = {\r\n left: 'flex-start',\r\n center: 'center',\r\n right: 'flex-end',\r\n};\r\n\r\nexport function StatusChip({\r\n label,\r\n variant = 'warning',\r\n icon,\r\n align = 'center',\r\n fullWidth = false,\r\n style,\r\n}: StatusChipProps) {\r\n const { colorRoles: cr } = useTheme();\r\n\r\n const colors =\r\n variant === 'warning'\r\n ? {\r\n bg: cr.custom.warning.sysWarningContainer,\r\n text: cr.custom.warning.sysOnWarningContainer,\r\n }\r\n : {\r\n bg: cr.error.sysErrorContainer,\r\n text: cr.error.sysOnErrorContainer,\r\n };\r\n\r\n const iconName = icon ?? DEFAULT_ICONS[variant];\r\n const IconComponent = resolveIcon(iconName);\r\n const { size: iconPx, strokeWidth: iconSW } = SIZE_MAP['small'];\r\n\r\n return (\r\n <View\r\n style={[\r\n styles.chip,\r\n {\r\n backgroundColor: colors.bg,\r\n justifyContent: JUSTIFY[align],\r\n alignSelf: fullWidth ? ('stretch' as const) : ('flex-start' as const),\r\n },\r\n style,\r\n ]}\r\n >\r\n {IconComponent && (\r\n <IconComponent size={iconPx} strokeWidth={iconSW} color={colors.text} />\r\n )}\r\n <BodyText variant=\"labelMedium\" color={colors.text} numberOfLines={1}>\r\n {label}\r\n </BodyText>\r\n </View>\r\n );\r\n}\r\n\r\nconst styles = StyleSheet.create({\r\n chip: {\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n borderRadius: 9999,\r\n paddingHorizontal: 16,\r\n paddingVertical: 4,\r\n gap: 8,\r\n height: 32,\r\n },\r\n});\r\n"],"names":["StatusChip","DEFAULT_ICONS","warning","error","JUSTIFY","left","center","right","label","variant","icon","align","fullWidth","style","colorRoles","cr","useTheme","colors","bg","custom","sysWarningContainer","text","sysOnWarningContainer","sysErrorContainer","sysOnErrorContainer","iconName","IconComponent","resolveIcon","size","iconPx","strokeWidth","iconSW","SIZE_MAP","View","styles","chip","backgroundColor","justifyContent","alignSelf","color","BodyText","numberOfLines","StyleSheet","create","flexDirection","alignItems","borderRadius","paddingHorizontal","paddingVertical","gap","height"],"mappings":";;;;+BAgCgBA;;;eAAAA;;;;8DAhCE;6BAEqC;uBAEF;uBAC5B;0BACA;;;;;;AAezB,MAAMC,gBAAqD;IACzDC,SAAS;IACTC,OAAO;AACT;AAEA,MAAMC,UAAyE;IAC7EC,MAAM;IACNC,QAAQ;IACRC,OAAO;AACT;AAEO,SAASP,WAAW,EACzBQ,KAAK,EACLC,UAAU,SAAS,EACnBC,IAAI,EACJC,QAAQ,QAAQ,EAChBC,YAAY,KAAK,EACjBC,KAAK,EACW;IAChB,MAAM,EAAEC,YAAYC,EAAE,EAAE,GAAGC,IAAAA,eAAQ;IAEnC,MAAMC,SACJR,YAAY,YACR;QACES,IAAIH,GAAGI,MAAM,CAACjB,OAAO,CAACkB,mBAAmB;QACzCC,MAAMN,GAAGI,MAAM,CAACjB,OAAO,CAACoB,qBAAqB;IAC/C,IACA;QACEJ,IAAIH,GAAGZ,KAAK,CAACoB,iBAAiB;QAC9BF,MAAMN,GAAGZ,KAAK,CAACqB,mBAAmB;IACpC;IAEN,MAAMC,WAAWf,QAAQT,aAAa,CAACQ,QAAQ;IAC/C,MAAMiB,gBAAgBC,IAAAA,kBAAW,EAACF;IAClC,MAAM,EAAEG,MAAMC,MAAM,EAAEC,aAAaC,MAAM,EAAE,GAAGC,eAAQ,CAAC,QAAQ;IAE/D,qBACE,sBAACC,iBAAI;QACHpB,OAAO;YACLqB,OAAOC,IAAI;YACX;gBACEC,iBAAiBnB,OAAOC,EAAE;gBAC1BmB,gBAAgBjC,OAAO,CAACO,MAAM;gBAC9B2B,WAAW1B,YAAa,YAAuB;YACjD;YACAC;SACD;;YAEAa,+BACC,qBAACA;gBAAcE,MAAMC;gBAAQC,aAAaC;gBAAQQ,OAAOtB,OAAOI,IAAI;;0BAEtE,qBAACmB,kBAAQ;gBAAC/B,SAAQ;gBAAc8B,OAAOtB,OAAOI,IAAI;gBAAEoB,eAAe;0BAChEjC;;;;AAIT;AAEA,MAAM0B,SAASQ,uBAAU,CAACC,MAAM,CAAC;IAC/BR,MAAM;QACJS,eAAe;QACfC,YAAY;QACZC,cAAc;QACdC,mBAAmB;QACnBC,iBAAiB;QACjBC,KAAK;QACLC,QAAQ;IACV;AACF"}
|
package/src/icons/index.d.ts
CHANGED
|
@@ -1,22 +1,9 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { LucideIcon } from 'lucide-react-native';
|
|
2
2
|
export type { IconProps, IconSize, IconName } from './types';
|
|
3
|
-
export {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
export
|
|
10
|
-
export { GraduationCapIcon } from './GraduationCapIcon';
|
|
11
|
-
export { HandHeartIcon } from './HandHeartIcon';
|
|
12
|
-
export { IdCardIcon } from './IdCardIcon';
|
|
13
|
-
export { MessageCirclePlusIcon } from './MessageCirclePlusIcon';
|
|
14
|
-
export { StethoscopeIcon } from './StethoscopeIcon';
|
|
15
|
-
export { BinocularsIcon } from './BinocularsIcon';
|
|
16
|
-
export { FlagIcon } from './FlagIcon';
|
|
17
|
-
export { MountainSnowIcon } from './MountainSnowIcon';
|
|
18
|
-
export { SnowflakeIcon } from './SnowflakeIcon';
|
|
19
|
-
export { FileChartColumnIncreasingIcon } from './FileChartColumnIncreasingIcon';
|
|
20
|
-
export { WheatIcon } from './WheatIcon';
|
|
21
|
-
type IconComponent = (props: IconProps) => React.JSX.Element;
|
|
22
|
-
export declare const ICON_MAP: Record<IconName, IconComponent>;
|
|
3
|
+
export { DEFAULT_ICON_COLOR, SIZE_MAP } from './types';
|
|
4
|
+
/**
|
|
5
|
+
* Resolves an icon name to a Lucide React Native component.
|
|
6
|
+
* Accepts both "StethoscopeIcon" (trailing Icon suffix) and "Stethoscope".
|
|
7
|
+
* Returns undefined if the icon name is not found in lucide-react-native.
|
|
8
|
+
*/
|
|
9
|
+
export declare function resolveIcon(name: string): LucideIcon | undefined;
|