@compsych-ui-components/react-native 4.0.4 → 4.0.14
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 +22 -14
- package/src/components/ActionSheet/index.d.ts +16 -0
- package/src/components/ActionSheet/index.js +256 -0
- package/src/components/ActionSheet/index.js.map +1 -0
- package/src/components/Alert/index.d.ts +24 -0
- package/src/components/Alert/index.js +304 -0
- package/src/components/Alert/index.js.map +1 -0
- package/src/components/Avatar/index.d.ts +22 -0
- package/src/components/Avatar/index.js +253 -0
- package/src/components/Avatar/index.js.map +1 -0
- package/src/components/Badge/index.d.ts +12 -0
- package/src/components/Badge/index.js +206 -0
- package/src/components/Badge/index.js.map +1 -0
- package/src/components/BodyText/index.d.ts +9 -0
- package/src/components/BodyText/index.js +58 -0
- package/src/components/BodyText/index.js.map +1 -0
- package/src/components/Breadcrumb/index.d.ts +24 -0
- package/src/components/Breadcrumb/index.js +194 -0
- package/src/components/Breadcrumb/index.js.map +1 -0
- package/src/components/Button/index.d.ts +16 -0
- package/src/components/Button/index.js +260 -0
- package/src/components/Button/index.js.map +1 -0
- package/src/components/Checkbox/index.d.ts +16 -0
- package/src/components/Checkbox/index.js +196 -0
- package/src/components/Checkbox/index.js.map +1 -0
- package/src/components/Chip/index.d.ts +18 -0
- package/src/components/Chip/index.js +280 -0
- package/src/components/Chip/index.js.map +1 -0
- package/src/components/Divider/index.d.ts +11 -0
- package/src/components/Divider/index.js +59 -0
- package/src/components/Divider/index.js.map +1 -0
- package/src/components/EmptyState/index.d.ts +25 -0
- package/src/components/EmptyState/index.js +376 -0
- package/src/components/EmptyState/index.js.map +1 -0
- package/src/components/HeaderText/index.d.ts +9 -0
- package/src/components/HeaderText/index.js +62 -0
- package/src/components/HeaderText/index.js.map +1 -0
- package/src/components/Input/index.d.ts +13 -0
- package/src/components/Input/index.js +231 -0
- package/src/components/Input/index.js.map +1 -0
- package/src/components/List/index.d.ts +19 -0
- package/src/components/List/index.js +170 -0
- package/src/components/List/index.js.map +1 -0
- package/src/components/Pagination/index.d.ts +15 -0
- package/src/components/Pagination/index.js +322 -0
- package/src/components/Pagination/index.js.map +1 -0
- package/src/components/PlanCard/index.d.ts +27 -0
- package/src/components/PlanCard/index.js +364 -0
- package/src/components/PlanCard/index.js.map +1 -0
- package/src/components/ProgressTracker/index.d.ts +26 -0
- package/src/components/ProgressTracker/index.js +180 -0
- package/src/components/ProgressTracker/index.js.map +1 -0
- package/src/components/PromotionCard/index.d.ts +23 -0
- package/src/components/PromotionCard/index.js +496 -0
- package/src/components/PromotionCard/index.js.map +1 -0
- package/src/components/RadioButton/index.d.ts +15 -0
- package/src/components/RadioButton/index.js +188 -0
- package/src/components/RadioButton/index.js.map +1 -0
- package/src/components/ScreenContainer/index.d.ts +15 -0
- package/src/components/ScreenContainer/index.js +43 -0
- package/src/components/ScreenContainer/index.js.map +1 -0
- package/src/components/SegmentedControl/index.d.ts +16 -0
- package/src/components/SegmentedControl/index.js +115 -0
- package/src/components/SegmentedControl/index.js.map +1 -0
- package/src/components/SelectionCard/index.d.ts +16 -0
- package/src/components/SelectionCard/index.js +222 -0
- package/src/components/SelectionCard/index.js.map +1 -0
- package/src/components/ServiceCard/index.d.ts +22 -0
- package/src/components/ServiceCard/index.js +385 -0
- package/src/components/ServiceCard/index.js.map +1 -0
- package/src/components/Slider/index.d.ts +24 -0
- package/src/components/Slider/index.js +320 -0
- package/src/components/Slider/index.js.map +1 -0
- package/src/components/Snackbar/index.d.ts +13 -0
- package/src/components/Snackbar/index.js +229 -0
- package/src/components/Snackbar/index.js.map +1 -0
- package/src/components/Switch/index.d.ts +14 -0
- package/src/components/Switch/index.js +221 -0
- package/src/components/Switch/index.js.map +1 -0
- package/src/components/Tooltip/index.d.ts +21 -0
- package/src/components/Tooltip/index.js +206 -0
- package/src/components/Tooltip/index.js.map +1 -0
- package/src/icons/AtomIcon.d.ts +2 -0
- package/src/icons/AtomIcon.js +85 -0
- package/src/icons/AtomIcon.js.map +1 -0
- package/src/icons/BinocularsIcon.d.ts +2 -0
- package/src/icons/BinocularsIcon.js +103 -0
- package/src/icons/BinocularsIcon.js.map +1 -0
- package/src/icons/FileChartColumnIncreasingIcon.d.ts +2 -0
- package/src/icons/FileChartColumnIncreasingIcon.js +97 -0
- package/src/icons/FileChartColumnIncreasingIcon.js.map +1 -0
- package/src/icons/FlagIcon.d.ts +2 -0
- package/src/icons/FlagIcon.js +71 -0
- package/src/icons/FlagIcon.js.map +1 -0
- package/src/icons/GlobeIcon.d.ts +2 -0
- package/src/icons/GlobeIcon.js +71 -0
- package/src/icons/GlobeIcon.js.map +1 -0
- package/src/icons/GraduationCapIcon.d.ts +2 -0
- package/src/icons/GraduationCapIcon.js +85 -0
- package/src/icons/GraduationCapIcon.js.map +1 -0
- package/src/icons/HandHeartIcon.d.ts +2 -0
- package/src/icons/HandHeartIcon.js +91 -0
- package/src/icons/HandHeartIcon.js.map +1 -0
- package/src/icons/HandshakeIcon.d.ts +2 -0
- package/src/icons/HandshakeIcon.js +97 -0
- package/src/icons/HandshakeIcon.js.map +1 -0
- package/src/icons/HazeIcon.d.ts +2 -0
- package/src/icons/HazeIcon.js +115 -0
- package/src/icons/HazeIcon.js.map +1 -0
- package/src/icons/HeartHandshakeIcon.d.ts +2 -0
- package/src/icons/HeartHandshakeIcon.js +71 -0
- package/src/icons/HeartHandshakeIcon.js.map +1 -0
- package/src/icons/HourglassIcon.d.ts +2 -0
- package/src/icons/HourglassIcon.js +91 -0
- package/src/icons/HourglassIcon.js.map +1 -0
- package/src/icons/IdCardIcon.d.ts +2 -0
- package/src/icons/IdCardIcon.js +97 -0
- package/src/icons/IdCardIcon.js.map +1 -0
- package/src/icons/MessageCirclePlusIcon.d.ts +2 -0
- package/src/icons/MessageCirclePlusIcon.js +85 -0
- package/src/icons/MessageCirclePlusIcon.js.map +1 -0
- package/src/icons/MountainSnowIcon.d.ts +2 -0
- package/src/icons/MountainSnowIcon.js +79 -0
- package/src/icons/MountainSnowIcon.js.map +1 -0
- package/src/icons/SnowflakeIcon.d.ts +2 -0
- package/src/icons/SnowflakeIcon.js +139 -0
- package/src/icons/SnowflakeIcon.js.map +1 -0
- package/src/icons/StethoscopeIcon.d.ts +2 -0
- package/src/icons/StethoscopeIcon.js +97 -0
- package/src/icons/StethoscopeIcon.js.map +1 -0
- package/src/icons/UserRoundIcon.d.ts +2 -0
- package/src/icons/UserRoundIcon.js +79 -0
- package/src/icons/UserRoundIcon.js.map +1 -0
- package/src/icons/WheatIcon.d.ts +2 -0
- package/src/icons/WheatIcon.js +115 -0
- package/src/icons/WheatIcon.js.map +1 -0
- package/src/icons/index.d.ts +22 -0
- package/src/icons/index.js +109 -0
- package/src/icons/index.js.map +1 -0
- package/src/icons/types.d.ts +16 -0
- package/src/icons/types.js +52 -0
- package/src/icons/types.js.map +1 -0
- package/src/index.d.ts +60 -2
- package/src/index.js +197 -5
- package/src/index.js.map +1 -1
- package/src/theme/ThemeContext.d.ts +258 -0
- package/src/theme/ThemeContext.js +15 -0
- package/src/theme/ThemeContext.js.map +1 -0
- package/src/theme/ThemeProvider.d.ts +27 -0
- package/src/theme/ThemeProvider.js +66 -0
- package/src/theme/ThemeProvider.js.map +1 -0
- package/src/theme/defaultTheme.d.ts +13 -0
- package/src/theme/defaultTheme.js +14 -0
- package/src/theme/defaultTheme.js.map +1 -0
- package/src/theme/index.d.ts +5 -0
- package/src/theme/index.js +26 -0
- package/src/theme/index.js.map +1 -0
- package/src/theme/mergeTheme.d.ts +7 -0
- package/src/theme/mergeTheme.js +40 -0
- package/src/theme/mergeTheme.js.map +1 -0
- package/src/theme/types.d.ts +25 -0
- package/src/theme/types.js +6 -0
- package/src/theme/types.js.map +1 -0
- package/src/theme/useTheme.d.ts +10 -0
- package/src/theme/useTheme.js +17 -0
- package/src/theme/useTheme.js.map +1 -0
- package/src/tokens.d.ts +253 -0
- package/src/tokens.js +265 -0
- package/src/tokens.js.map +1 -0
- package/src/lib/button.d.ts +0 -7
- package/src/lib/button.js +0 -58
- package/src/lib/button.js.map +0 -1
|
@@ -0,0 +1,364 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
function _export(target, all) {
|
|
6
|
+
for(var name in all)Object.defineProperty(target, name, {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
_export(exports, {
|
|
12
|
+
get PlanCard () {
|
|
13
|
+
return PlanCard;
|
|
14
|
+
},
|
|
15
|
+
get PlanCardDropdownItem () {
|
|
16
|
+
return PlanCardDropdownItem;
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
const _jsxruntime = require("react/jsx-runtime");
|
|
20
|
+
const _react = /*#__PURE__*/ _interop_require_default(require("react"));
|
|
21
|
+
const _reactnative = require("react-native");
|
|
22
|
+
const _vectoricons = require("@expo/vector-icons");
|
|
23
|
+
const _theme = require("../../theme");
|
|
24
|
+
const _BodyText = require("../BodyText");
|
|
25
|
+
function _interop_require_default(obj) {
|
|
26
|
+
return obj && obj.__esModule ? obj : {
|
|
27
|
+
default: obj
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
if (_reactnative.Platform.OS === 'android') {
|
|
31
|
+
_reactnative.UIManager.setLayoutAnimationEnabledExperimental?.(true);
|
|
32
|
+
}
|
|
33
|
+
function PlanCardDropdownItem({ title, subtitle, checked = false, onToggle, onAudio, onOpen, showDivider = true }) {
|
|
34
|
+
const { colorRoles: cr, dimensions: dim } = (0, _theme.useTheme)();
|
|
35
|
+
return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_reactnative.View, {
|
|
36
|
+
children: [
|
|
37
|
+
/*#__PURE__*/ (0, _jsxruntime.jsxs)(_reactnative.View, {
|
|
38
|
+
style: [
|
|
39
|
+
itemStyles.row,
|
|
40
|
+
{
|
|
41
|
+
paddingVertical: dim.spacing.padding.sysPadding16,
|
|
42
|
+
gap: dim.spacing.padding.sysPadding12
|
|
43
|
+
}
|
|
44
|
+
],
|
|
45
|
+
children: [
|
|
46
|
+
/*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnative.Pressable, {
|
|
47
|
+
onPress: onToggle,
|
|
48
|
+
accessibilityRole: "checkbox",
|
|
49
|
+
accessibilityState: {
|
|
50
|
+
checked
|
|
51
|
+
},
|
|
52
|
+
style: itemStyles.checkWrap,
|
|
53
|
+
children: checked ? /*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnative.View, {
|
|
54
|
+
style: [
|
|
55
|
+
itemStyles.checkedCircle,
|
|
56
|
+
{
|
|
57
|
+
borderRadius: dim.borderRadius.sysRadiusFull,
|
|
58
|
+
backgroundColor: cr.custom.success.sysSuccess
|
|
59
|
+
}
|
|
60
|
+
],
|
|
61
|
+
children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_vectoricons.Ionicons, {
|
|
62
|
+
name: "checkmark",
|
|
63
|
+
size: 12,
|
|
64
|
+
color: "#fff"
|
|
65
|
+
})
|
|
66
|
+
}) : /*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnative.View, {
|
|
67
|
+
style: [
|
|
68
|
+
itemStyles.uncheckedCircle,
|
|
69
|
+
{
|
|
70
|
+
borderRadius: dim.borderRadius.sysRadiusFull,
|
|
71
|
+
borderColor: cr.outline.sysOutlineFixed
|
|
72
|
+
}
|
|
73
|
+
]
|
|
74
|
+
})
|
|
75
|
+
}),
|
|
76
|
+
/*#__PURE__*/ (0, _jsxruntime.jsxs)(_reactnative.View, {
|
|
77
|
+
style: itemStyles.textCol,
|
|
78
|
+
children: [
|
|
79
|
+
/*#__PURE__*/ (0, _jsxruntime.jsx)(_BodyText.BodyText, {
|
|
80
|
+
variant: "small",
|
|
81
|
+
color: cr.surface.surface.sysOnSurface,
|
|
82
|
+
children: title
|
|
83
|
+
}),
|
|
84
|
+
subtitle && /*#__PURE__*/ (0, _jsxruntime.jsx)(_BodyText.BodyText, {
|
|
85
|
+
variant: "small",
|
|
86
|
+
color: cr.surface.surface.sysOnSurfaceVariant,
|
|
87
|
+
children: subtitle
|
|
88
|
+
})
|
|
89
|
+
]
|
|
90
|
+
}),
|
|
91
|
+
/*#__PURE__*/ (0, _jsxruntime.jsxs)(_reactnative.View, {
|
|
92
|
+
style: [
|
|
93
|
+
itemStyles.actions,
|
|
94
|
+
{
|
|
95
|
+
gap: dim.spacing.padding.sysPadding8
|
|
96
|
+
}
|
|
97
|
+
],
|
|
98
|
+
children: [
|
|
99
|
+
onAudio && /*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnative.Pressable, {
|
|
100
|
+
onPress: onAudio,
|
|
101
|
+
accessibilityRole: "button",
|
|
102
|
+
accessibilityLabel: "Listen",
|
|
103
|
+
style: ({ pressed })=>[
|
|
104
|
+
itemStyles.actionBtn,
|
|
105
|
+
{
|
|
106
|
+
borderRadius: dim.borderRadius.sysRadiusFull,
|
|
107
|
+
borderWidth: dim.borderWidth.sysStrokeThin,
|
|
108
|
+
borderColor: cr.outline.sysOutline
|
|
109
|
+
},
|
|
110
|
+
pressed && itemStyles.pressed
|
|
111
|
+
],
|
|
112
|
+
children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_vectoricons.Ionicons, {
|
|
113
|
+
name: "headset-outline",
|
|
114
|
+
size: 16,
|
|
115
|
+
color: cr.surface.surface.sysOnSurface
|
|
116
|
+
})
|
|
117
|
+
}),
|
|
118
|
+
onOpen && /*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnative.Pressable, {
|
|
119
|
+
onPress: onOpen,
|
|
120
|
+
accessibilityRole: "button",
|
|
121
|
+
accessibilityLabel: "Open",
|
|
122
|
+
style: ({ pressed })=>[
|
|
123
|
+
itemStyles.actionBtn,
|
|
124
|
+
{
|
|
125
|
+
borderRadius: dim.borderRadius.sysRadiusFull,
|
|
126
|
+
borderWidth: dim.borderWidth.sysStrokeThin,
|
|
127
|
+
borderColor: cr.outline.sysOutline
|
|
128
|
+
},
|
|
129
|
+
pressed && itemStyles.pressed
|
|
130
|
+
],
|
|
131
|
+
children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_vectoricons.Ionicons, {
|
|
132
|
+
name: "arrow-up-circle-outline",
|
|
133
|
+
size: 16,
|
|
134
|
+
color: cr.surface.surface.sysOnSurface
|
|
135
|
+
})
|
|
136
|
+
})
|
|
137
|
+
]
|
|
138
|
+
})
|
|
139
|
+
]
|
|
140
|
+
}),
|
|
141
|
+
showDivider && /*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnative.View, {
|
|
142
|
+
style: [
|
|
143
|
+
itemStyles.divider,
|
|
144
|
+
{
|
|
145
|
+
backgroundColor: cr.outline.sysOutline
|
|
146
|
+
}
|
|
147
|
+
]
|
|
148
|
+
})
|
|
149
|
+
]
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
const itemStyles = _reactnative.StyleSheet.create({
|
|
153
|
+
row: {
|
|
154
|
+
flexDirection: 'row',
|
|
155
|
+
alignItems: 'center'
|
|
156
|
+
},
|
|
157
|
+
checkWrap: {
|
|
158
|
+
width: 20,
|
|
159
|
+
height: 20,
|
|
160
|
+
alignItems: 'center',
|
|
161
|
+
justifyContent: 'center'
|
|
162
|
+
},
|
|
163
|
+
checkedCircle: {
|
|
164
|
+
width: 20,
|
|
165
|
+
height: 20,
|
|
166
|
+
alignItems: 'center',
|
|
167
|
+
justifyContent: 'center'
|
|
168
|
+
},
|
|
169
|
+
uncheckedCircle: {
|
|
170
|
+
width: 20,
|
|
171
|
+
height: 20,
|
|
172
|
+
borderWidth: 1.5
|
|
173
|
+
},
|
|
174
|
+
textCol: {
|
|
175
|
+
flex: 1,
|
|
176
|
+
gap: 2
|
|
177
|
+
},
|
|
178
|
+
actions: {
|
|
179
|
+
flexDirection: 'row'
|
|
180
|
+
},
|
|
181
|
+
actionBtn: {
|
|
182
|
+
width: 32,
|
|
183
|
+
height: 32,
|
|
184
|
+
alignItems: 'center',
|
|
185
|
+
justifyContent: 'center'
|
|
186
|
+
},
|
|
187
|
+
pressed: {
|
|
188
|
+
opacity: 0.7
|
|
189
|
+
},
|
|
190
|
+
divider: {
|
|
191
|
+
height: _reactnative.StyleSheet.hairlineWidth
|
|
192
|
+
}
|
|
193
|
+
});
|
|
194
|
+
function PlanCard({ title, icon, tag, items, expanded = false, onToggle, children, style }) {
|
|
195
|
+
const { colorRoles: cr, dimensions: dim } = (0, _theme.useTheme)();
|
|
196
|
+
function handleToggle() {
|
|
197
|
+
if (_reactnative.Platform.OS !== 'web') {
|
|
198
|
+
_reactnative.LayoutAnimation.configureNext(_reactnative.LayoutAnimation.Presets.easeInEaseOut);
|
|
199
|
+
}
|
|
200
|
+
onToggle?.();
|
|
201
|
+
}
|
|
202
|
+
const hasContent = expanded && (children || items && items.length > 0);
|
|
203
|
+
return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_reactnative.View, {
|
|
204
|
+
style: [
|
|
205
|
+
cardStyles.card,
|
|
206
|
+
{
|
|
207
|
+
backgroundColor: cr.surface.surfaceContainer.sysSurfaceContainerLowest,
|
|
208
|
+
borderRadius: dim.borderRadius.sysRadiusMd,
|
|
209
|
+
borderWidth: dim.borderWidth.sysStrokeThin,
|
|
210
|
+
borderColor: cr.outline.sysOutline,
|
|
211
|
+
padding: dim.spacing.padding.sysPadding16
|
|
212
|
+
},
|
|
213
|
+
style
|
|
214
|
+
],
|
|
215
|
+
children: [
|
|
216
|
+
/*#__PURE__*/ (0, _jsxruntime.jsxs)(_reactnative.View, {
|
|
217
|
+
style: [
|
|
218
|
+
cardStyles.header,
|
|
219
|
+
{
|
|
220
|
+
gap: dim.spacing.padding.sysPadding12
|
|
221
|
+
}
|
|
222
|
+
],
|
|
223
|
+
children: [
|
|
224
|
+
/*#__PURE__*/ (0, _jsxruntime.jsxs)(_reactnative.View, {
|
|
225
|
+
style: [
|
|
226
|
+
cardStyles.left,
|
|
227
|
+
{
|
|
228
|
+
gap: dim.spacing.padding.sysPadding8
|
|
229
|
+
}
|
|
230
|
+
],
|
|
231
|
+
children: [
|
|
232
|
+
/*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnative.View, {
|
|
233
|
+
style: [
|
|
234
|
+
cardStyles.iconCircle,
|
|
235
|
+
{
|
|
236
|
+
borderRadius: dim.borderRadius.sysRadiusFull,
|
|
237
|
+
backgroundColor: cr.accent.primary.sysPrimary
|
|
238
|
+
}
|
|
239
|
+
],
|
|
240
|
+
children: icon ?? /*#__PURE__*/ (0, _jsxruntime.jsx)(_vectoricons.Ionicons, {
|
|
241
|
+
name: "document-text-outline",
|
|
242
|
+
size: 16,
|
|
243
|
+
color: cr.accent.primary.sysOnPrimary
|
|
244
|
+
})
|
|
245
|
+
}),
|
|
246
|
+
/*#__PURE__*/ (0, _jsxruntime.jsx)(_BodyText.BodyText, {
|
|
247
|
+
variant: "medium",
|
|
248
|
+
color: cr.surface.surface.sysOnSurface,
|
|
249
|
+
children: title
|
|
250
|
+
})
|
|
251
|
+
]
|
|
252
|
+
}),
|
|
253
|
+
/*#__PURE__*/ (0, _jsxruntime.jsxs)(_reactnative.View, {
|
|
254
|
+
style: [
|
|
255
|
+
cardStyles.right,
|
|
256
|
+
{
|
|
257
|
+
gap: dim.spacing.padding.sysPadding8
|
|
258
|
+
}
|
|
259
|
+
],
|
|
260
|
+
children: [
|
|
261
|
+
tag && /*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnative.View, {
|
|
262
|
+
style: [
|
|
263
|
+
cardStyles.chip,
|
|
264
|
+
{
|
|
265
|
+
backgroundColor: cr.custom.info.sysInfoContainer,
|
|
266
|
+
borderRadius: dim.borderRadius.sysRadiusFull,
|
|
267
|
+
paddingHorizontal: dim.spacing.padding.sysPadding8,
|
|
268
|
+
paddingVertical: dim.spacing.padding.sysPadding4
|
|
269
|
+
}
|
|
270
|
+
],
|
|
271
|
+
children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_BodyText.BodyText, {
|
|
272
|
+
variant: "small",
|
|
273
|
+
color: cr.custom.info.sysOnInfoContainer,
|
|
274
|
+
children: tag
|
|
275
|
+
})
|
|
276
|
+
}),
|
|
277
|
+
/*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnative.Pressable, {
|
|
278
|
+
onPress: handleToggle,
|
|
279
|
+
accessibilityRole: "button",
|
|
280
|
+
accessibilityLabel: expanded ? 'Collapse' : 'Expand',
|
|
281
|
+
style: ({ pressed })=>[
|
|
282
|
+
cardStyles.toggleBtn,
|
|
283
|
+
{
|
|
284
|
+
borderRadius: dim.borderRadius.sysRadiusFull,
|
|
285
|
+
backgroundColor: cr.surface.surfaceContainer.sysSurfaceContainer
|
|
286
|
+
},
|
|
287
|
+
pressed && cardStyles.pressed
|
|
288
|
+
],
|
|
289
|
+
children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_vectoricons.Ionicons, {
|
|
290
|
+
name: expanded ? 'remove' : 'add',
|
|
291
|
+
size: 16,
|
|
292
|
+
color: cr.surface.surface.sysOnSurfaceVariant
|
|
293
|
+
})
|
|
294
|
+
})
|
|
295
|
+
]
|
|
296
|
+
})
|
|
297
|
+
]
|
|
298
|
+
}),
|
|
299
|
+
hasContent && /*#__PURE__*/ (0, _jsxruntime.jsxs)(_reactnative.View, {
|
|
300
|
+
style: [
|
|
301
|
+
cardStyles.content,
|
|
302
|
+
{
|
|
303
|
+
marginTop: dim.spacing.padding.sysPadding8
|
|
304
|
+
}
|
|
305
|
+
],
|
|
306
|
+
children: [
|
|
307
|
+
/*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnative.View, {
|
|
308
|
+
style: [
|
|
309
|
+
cardStyles.contentDivider,
|
|
310
|
+
{
|
|
311
|
+
backgroundColor: cr.outline.sysOutline,
|
|
312
|
+
marginBottom: dim.spacing.padding.sysPadding4
|
|
313
|
+
}
|
|
314
|
+
]
|
|
315
|
+
}),
|
|
316
|
+
children ? children : items.map((item, index)=>/*#__PURE__*/ (0, _jsxruntime.jsx)(PlanCardDropdownItem, {
|
|
317
|
+
...item,
|
|
318
|
+
showDivider: index < items.length - 1
|
|
319
|
+
}, item.id))
|
|
320
|
+
]
|
|
321
|
+
})
|
|
322
|
+
]
|
|
323
|
+
});
|
|
324
|
+
}
|
|
325
|
+
const cardStyles = _reactnative.StyleSheet.create({
|
|
326
|
+
card: {
|
|
327
|
+
overflow: 'hidden'
|
|
328
|
+
},
|
|
329
|
+
header: {
|
|
330
|
+
flexDirection: 'row',
|
|
331
|
+
alignItems: 'center',
|
|
332
|
+
justifyContent: 'space-between'
|
|
333
|
+
},
|
|
334
|
+
left: {
|
|
335
|
+
flex: 1
|
|
336
|
+
},
|
|
337
|
+
iconCircle: {
|
|
338
|
+
width: 28,
|
|
339
|
+
height: 28,
|
|
340
|
+
alignItems: 'center',
|
|
341
|
+
justifyContent: 'center'
|
|
342
|
+
},
|
|
343
|
+
right: {
|
|
344
|
+
flexDirection: 'row',
|
|
345
|
+
alignItems: 'center',
|
|
346
|
+
alignSelf: 'flex-start'
|
|
347
|
+
},
|
|
348
|
+
chip: {},
|
|
349
|
+
toggleBtn: {
|
|
350
|
+
width: 20,
|
|
351
|
+
height: 20,
|
|
352
|
+
alignItems: 'center',
|
|
353
|
+
justifyContent: 'center'
|
|
354
|
+
},
|
|
355
|
+
pressed: {
|
|
356
|
+
opacity: 0.7
|
|
357
|
+
},
|
|
358
|
+
content: {},
|
|
359
|
+
contentDivider: {
|
|
360
|
+
height: _reactnative.StyleSheet.hairlineWidth
|
|
361
|
+
}
|
|
362
|
+
});
|
|
363
|
+
|
|
364
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../packages/react-native/src/components/PlanCard/index.tsx"],"sourcesContent":["import React from 'react';\r\n\r\nimport {\r\n LayoutAnimation,\r\n Platform,\r\n Pressable,\r\n StyleProp,\r\n StyleSheet,\r\n UIManager,\r\n View,\r\n ViewStyle,\r\n} from 'react-native';\r\n\r\nimport { Ionicons } from '@expo/vector-icons';\r\n\r\nimport { useTheme } from '../../theme';\r\nimport { BodyText } from '../BodyText';\r\n\r\nif (Platform.OS === 'android') {\r\n UIManager.setLayoutAnimationEnabledExperimental?.(true);\r\n}\r\n\r\n// ─── Dropdown Item ───────────────────────────────────────────────────────────\r\n\r\nexport interface PlanCardItemData {\r\n id: string;\r\n title: string;\r\n subtitle?: string;\r\n checked?: boolean;\r\n onToggle?: () => void;\r\n onAudio?: () => void;\r\n onOpen?: () => void;\r\n}\r\n\r\ninterface DropdownItemProps extends PlanCardItemData {\r\n showDivider?: boolean;\r\n}\r\n\r\nexport function PlanCardDropdownItem({\r\n title,\r\n subtitle,\r\n checked = false,\r\n onToggle,\r\n onAudio,\r\n onOpen,\r\n showDivider = true,\r\n}: DropdownItemProps) {\r\n const { colorRoles: cr, dimensions: dim } = useTheme();\r\n\r\n return (\r\n <View>\r\n <View\r\n style={[\r\n itemStyles.row,\r\n {\r\n paddingVertical: dim.spacing.padding.sysPadding16,\r\n gap: dim.spacing.padding.sysPadding12,\r\n },\r\n ]}\r\n >\r\n {/* Check indicator */}\r\n <Pressable\r\n onPress={onToggle}\r\n accessibilityRole=\"checkbox\"\r\n accessibilityState={{ checked }}\r\n style={itemStyles.checkWrap}\r\n >\r\n {checked ? (\r\n <View\r\n style={[\r\n itemStyles.checkedCircle,\r\n {\r\n borderRadius: dim.borderRadius.sysRadiusFull,\r\n backgroundColor: cr.custom.success.sysSuccess,\r\n },\r\n ]}\r\n >\r\n <Ionicons name=\"checkmark\" size={12} color=\"#fff\" />\r\n </View>\r\n ) : (\r\n <View\r\n style={[\r\n itemStyles.uncheckedCircle,\r\n {\r\n borderRadius: dim.borderRadius.sysRadiusFull,\r\n borderColor: cr.outline.sysOutlineFixed,\r\n },\r\n ]}\r\n />\r\n )}\r\n </Pressable>\r\n\r\n {/* Text */}\r\n <View style={itemStyles.textCol}>\r\n <BodyText variant=\"small\" color={cr.surface.surface.sysOnSurface}>\r\n {title}\r\n </BodyText>\r\n {subtitle && (\r\n <BodyText\r\n variant=\"small\"\r\n color={cr.surface.surface.sysOnSurfaceVariant}\r\n >\r\n {subtitle}\r\n </BodyText>\r\n )}\r\n </View>\r\n\r\n {/* Action buttons */}\r\n <View\r\n style={[itemStyles.actions, { gap: dim.spacing.padding.sysPadding8 }]}\r\n >\r\n {onAudio && (\r\n <Pressable\r\n onPress={onAudio}\r\n accessibilityRole=\"button\"\r\n accessibilityLabel=\"Listen\"\r\n style={({ pressed }) => [\r\n itemStyles.actionBtn,\r\n {\r\n borderRadius: dim.borderRadius.sysRadiusFull,\r\n borderWidth: dim.borderWidth.sysStrokeThin,\r\n borderColor: cr.outline.sysOutline,\r\n },\r\n pressed && itemStyles.pressed,\r\n ]}\r\n >\r\n <Ionicons\r\n name=\"headset-outline\"\r\n size={16}\r\n color={cr.surface.surface.sysOnSurface}\r\n />\r\n </Pressable>\r\n )}\r\n {onOpen && (\r\n <Pressable\r\n onPress={onOpen}\r\n accessibilityRole=\"button\"\r\n accessibilityLabel=\"Open\"\r\n style={({ pressed }) => [\r\n itemStyles.actionBtn,\r\n {\r\n borderRadius: dim.borderRadius.sysRadiusFull,\r\n borderWidth: dim.borderWidth.sysStrokeThin,\r\n borderColor: cr.outline.sysOutline,\r\n },\r\n pressed && itemStyles.pressed,\r\n ]}\r\n >\r\n <Ionicons\r\n name=\"arrow-up-circle-outline\"\r\n size={16}\r\n color={cr.surface.surface.sysOnSurface}\r\n />\r\n </Pressable>\r\n )}\r\n </View>\r\n </View>\r\n\r\n {showDivider && (\r\n <View\r\n style={[\r\n itemStyles.divider,\r\n { backgroundColor: cr.outline.sysOutline },\r\n ]}\r\n />\r\n )}\r\n </View>\r\n );\r\n}\r\n\r\nconst itemStyles = StyleSheet.create({\r\n row: {\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n },\r\n checkWrap: {\r\n width: 20,\r\n height: 20,\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n checkedCircle: {\r\n width: 20,\r\n height: 20,\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n uncheckedCircle: {\r\n width: 20,\r\n height: 20,\r\n borderWidth: 1.5,\r\n },\r\n textCol: {\r\n flex: 1,\r\n gap: 2,\r\n },\r\n actions: {\r\n flexDirection: 'row',\r\n },\r\n actionBtn: {\r\n width: 32,\r\n height: 32,\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n pressed: {\r\n opacity: 0.7,\r\n },\r\n divider: {\r\n height: StyleSheet.hairlineWidth,\r\n },\r\n});\r\n\r\n// ─── Plan Card ────────────────────────────────────────────────────────────────\r\n\r\nexport interface PlanCardProps {\r\n title: string;\r\n icon?: React.ReactNode;\r\n tag?: string;\r\n items?: PlanCardItemData[];\r\n expanded?: boolean;\r\n onToggle?: () => void;\r\n children?: React.ReactNode;\r\n style?: StyleProp<ViewStyle>;\r\n}\r\n\r\nexport function PlanCard({\r\n title,\r\n icon,\r\n tag,\r\n items,\r\n expanded = false,\r\n onToggle,\r\n children,\r\n style,\r\n}: PlanCardProps) {\r\n const { colorRoles: cr, dimensions: dim } = useTheme();\r\n\r\n function handleToggle() {\r\n if (Platform.OS !== 'web') {\r\n LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut);\r\n }\r\n onToggle?.();\r\n }\r\n\r\n const hasContent = expanded && (children || (items && items.length > 0));\r\n\r\n return (\r\n <View\r\n style={[\r\n cardStyles.card,\r\n {\r\n backgroundColor:\r\n cr.surface.surfaceContainer.sysSurfaceContainerLowest,\r\n borderRadius: dim.borderRadius.sysRadiusMd,\r\n borderWidth: dim.borderWidth.sysStrokeThin,\r\n borderColor: cr.outline.sysOutline,\r\n padding: dim.spacing.padding.sysPadding16,\r\n },\r\n style,\r\n ]}\r\n >\r\n {/* Header */}\r\n <View\r\n style={[cardStyles.header, { gap: dim.spacing.padding.sysPadding12 }]}\r\n >\r\n {/* Left: icon + title stacked */}\r\n <View\r\n style={[cardStyles.left, { gap: dim.spacing.padding.sysPadding8 }]}\r\n >\r\n <View\r\n style={[\r\n cardStyles.iconCircle,\r\n {\r\n borderRadius: dim.borderRadius.sysRadiusFull,\r\n backgroundColor: cr.accent.primary.sysPrimary,\r\n },\r\n ]}\r\n >\r\n {icon ?? (\r\n <Ionicons\r\n name=\"document-text-outline\"\r\n size={16}\r\n color={cr.accent.primary.sysOnPrimary}\r\n />\r\n )}\r\n </View>\r\n <BodyText variant=\"medium\" color={cr.surface.surface.sysOnSurface}>\r\n {title}\r\n </BodyText>\r\n </View>\r\n\r\n {/* Right: tag chip + toggle */}\r\n <View\r\n style={[cardStyles.right, { gap: dim.spacing.padding.sysPadding8 }]}\r\n >\r\n {tag && (\r\n <View\r\n style={[\r\n cardStyles.chip,\r\n {\r\n backgroundColor: cr.custom.info.sysInfoContainer,\r\n borderRadius: dim.borderRadius.sysRadiusFull,\r\n paddingHorizontal: dim.spacing.padding.sysPadding8,\r\n paddingVertical: dim.spacing.padding.sysPadding4,\r\n },\r\n ]}\r\n >\r\n <BodyText\r\n variant=\"small\"\r\n color={cr.custom.info.sysOnInfoContainer}\r\n >\r\n {tag}\r\n </BodyText>\r\n </View>\r\n )}\r\n <Pressable\r\n onPress={handleToggle}\r\n accessibilityRole=\"button\"\r\n accessibilityLabel={expanded ? 'Collapse' : 'Expand'}\r\n style={({ pressed }) => [\r\n cardStyles.toggleBtn,\r\n {\r\n borderRadius: dim.borderRadius.sysRadiusFull,\r\n backgroundColor:\r\n cr.surface.surfaceContainer.sysSurfaceContainer,\r\n },\r\n pressed && cardStyles.pressed,\r\n ]}\r\n >\r\n <Ionicons\r\n name={expanded ? 'remove' : 'add'}\r\n size={16}\r\n color={cr.surface.surface.sysOnSurfaceVariant}\r\n />\r\n </Pressable>\r\n </View>\r\n </View>\r\n\r\n {/* Expanded content */}\r\n {hasContent && (\r\n <View\r\n style={[\r\n cardStyles.content,\r\n { marginTop: dim.spacing.padding.sysPadding8 },\r\n ]}\r\n >\r\n <View\r\n style={[\r\n cardStyles.contentDivider,\r\n {\r\n backgroundColor: cr.outline.sysOutline,\r\n marginBottom: dim.spacing.padding.sysPadding4,\r\n },\r\n ]}\r\n />\r\n {children\r\n ? children\r\n : items!.map((item, index) => (\r\n <PlanCardDropdownItem\r\n key={item.id}\r\n {...item}\r\n showDivider={index < items!.length - 1}\r\n />\r\n ))}\r\n </View>\r\n )}\r\n </View>\r\n );\r\n}\r\n\r\nconst cardStyles = StyleSheet.create({\r\n card: {\r\n overflow: 'hidden',\r\n },\r\n header: {\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n },\r\n left: {\r\n flex: 1,\r\n },\r\n iconCircle: {\r\n width: 28,\r\n height: 28,\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n right: {\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n alignSelf: 'flex-start',\r\n },\r\n chip: {},\r\n toggleBtn: {\r\n width: 20,\r\n height: 20,\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n pressed: {\r\n opacity: 0.7,\r\n },\r\n content: {},\r\n contentDivider: {\r\n height: StyleSheet.hairlineWidth,\r\n },\r\n});\r\n"],"names":["PlanCard","PlanCardDropdownItem","Platform","OS","UIManager","setLayoutAnimationEnabledExperimental","title","subtitle","checked","onToggle","onAudio","onOpen","showDivider","colorRoles","cr","dimensions","dim","useTheme","View","style","itemStyles","row","paddingVertical","spacing","padding","sysPadding16","gap","sysPadding12","Pressable","onPress","accessibilityRole","accessibilityState","checkWrap","checkedCircle","borderRadius","sysRadiusFull","backgroundColor","custom","success","sysSuccess","Ionicons","name","size","color","uncheckedCircle","borderColor","outline","sysOutlineFixed","textCol","BodyText","variant","surface","sysOnSurface","sysOnSurfaceVariant","actions","sysPadding8","accessibilityLabel","pressed","actionBtn","borderWidth","sysStrokeThin","sysOutline","divider","StyleSheet","create","flexDirection","alignItems","width","height","justifyContent","flex","opacity","hairlineWidth","icon","tag","items","expanded","children","handleToggle","LayoutAnimation","configureNext","Presets","easeInEaseOut","hasContent","length","cardStyles","card","surfaceContainer","sysSurfaceContainerLowest","sysRadiusMd","header","left","iconCircle","accent","primary","sysPrimary","sysOnPrimary","right","chip","info","sysInfoContainer","paddingHorizontal","sysPadding4","sysOnInfoContainer","toggleBtn","sysSurfaceContainer","content","marginTop","contentDivider","marginBottom","map","item","index","id","overflow","alignSelf"],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { StyleProp, ViewStyle } from 'react-native';
|
|
3
|
+
export interface ProgressBarProps {
|
|
4
|
+
/** 0–100 */
|
|
5
|
+
progress: number;
|
|
6
|
+
}
|
|
7
|
+
export declare function ProgressBar({ progress }: ProgressBarProps): React.JSX.Element;
|
|
8
|
+
export type StepState = 'completed' | 'active' | 'pending';
|
|
9
|
+
export interface TrackerStep {
|
|
10
|
+
label?: string;
|
|
11
|
+
/**
|
|
12
|
+
* `completed` → full green bar
|
|
13
|
+
* `active` → full green bar (current step — same fill as completed)
|
|
14
|
+
* `pending` → gray track only
|
|
15
|
+
*/
|
|
16
|
+
state: StepState;
|
|
17
|
+
}
|
|
18
|
+
export type ProgressTrackerSize = 'sm' | 'lg';
|
|
19
|
+
export interface ProgressTrackerProps {
|
|
20
|
+
steps: TrackerStep[];
|
|
21
|
+
size?: ProgressTrackerSize;
|
|
22
|
+
/** Render step labels above each bar. Default false. */
|
|
23
|
+
showLabels?: boolean;
|
|
24
|
+
style?: StyleProp<ViewStyle>;
|
|
25
|
+
}
|
|
26
|
+
export declare function ProgressTracker({ steps, size, showLabels, style, }: ProgressTrackerProps): React.JSX.Element;
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
function _export(target, all) {
|
|
6
|
+
for(var name in all)Object.defineProperty(target, name, {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
_export(exports, {
|
|
12
|
+
get ProgressBar () {
|
|
13
|
+
return ProgressBar;
|
|
14
|
+
},
|
|
15
|
+
get ProgressTracker () {
|
|
16
|
+
return ProgressTracker;
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
const _jsxruntime = require("react/jsx-runtime");
|
|
20
|
+
const _react = /*#__PURE__*/ _interop_require_wildcard(require("react"));
|
|
21
|
+
const _reactnative = require("react-native");
|
|
22
|
+
const _theme = require("../../theme");
|
|
23
|
+
function _getRequireWildcardCache(nodeInterop) {
|
|
24
|
+
if (typeof WeakMap !== "function") return null;
|
|
25
|
+
var cacheBabelInterop = new WeakMap();
|
|
26
|
+
var cacheNodeInterop = new WeakMap();
|
|
27
|
+
return (_getRequireWildcardCache = function(nodeInterop) {
|
|
28
|
+
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
|
29
|
+
})(nodeInterop);
|
|
30
|
+
}
|
|
31
|
+
function _interop_require_wildcard(obj, nodeInterop) {
|
|
32
|
+
if (!nodeInterop && obj && obj.__esModule) {
|
|
33
|
+
return obj;
|
|
34
|
+
}
|
|
35
|
+
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
|
|
36
|
+
return {
|
|
37
|
+
default: obj
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
var cache = _getRequireWildcardCache(nodeInterop);
|
|
41
|
+
if (cache && cache.has(obj)) {
|
|
42
|
+
return cache.get(obj);
|
|
43
|
+
}
|
|
44
|
+
var newObj = {
|
|
45
|
+
__proto__: null
|
|
46
|
+
};
|
|
47
|
+
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
48
|
+
for(var key in obj){
|
|
49
|
+
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
50
|
+
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
|
51
|
+
if (desc && (desc.get || desc.set)) {
|
|
52
|
+
Object.defineProperty(newObj, key, desc);
|
|
53
|
+
} else {
|
|
54
|
+
newObj[key] = obj[key];
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
newObj.default = obj;
|
|
59
|
+
if (cache) {
|
|
60
|
+
cache.set(obj, newObj);
|
|
61
|
+
}
|
|
62
|
+
return newObj;
|
|
63
|
+
}
|
|
64
|
+
function ProgressBar({ progress }) {
|
|
65
|
+
const { colorRoles: cr } = (0, _theme.useTheme)();
|
|
66
|
+
const clamped = Math.min(100, Math.max(0, progress));
|
|
67
|
+
return /*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnative.View, {
|
|
68
|
+
accessible: true,
|
|
69
|
+
accessibilityRole: "progressbar",
|
|
70
|
+
accessibilityValue: {
|
|
71
|
+
min: 0,
|
|
72
|
+
max: 100,
|
|
73
|
+
now: clamped
|
|
74
|
+
},
|
|
75
|
+
style: [
|
|
76
|
+
styles.track,
|
|
77
|
+
{
|
|
78
|
+
backgroundColor: cr.surface.surfaceContainer.sysSurfaceContainerHighest
|
|
79
|
+
}
|
|
80
|
+
],
|
|
81
|
+
children: clamped > 0 && /*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnative.View, {
|
|
82
|
+
style: [
|
|
83
|
+
styles.fill,
|
|
84
|
+
{
|
|
85
|
+
width: `${clamped}%`,
|
|
86
|
+
backgroundColor: cr.custom.success.sysSuccess
|
|
87
|
+
}
|
|
88
|
+
]
|
|
89
|
+
})
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
function stepProgress(state) {
|
|
93
|
+
return state === 'pending' ? 0 : 100;
|
|
94
|
+
}
|
|
95
|
+
function ProgressTracker({ steps, size = 'lg', showLabels = false, style }) {
|
|
96
|
+
const { colorRoles: cr, dimensions: dim, typeScale: ts } = (0, _theme.useTheme)();
|
|
97
|
+
const sizeTokens = (0, _react.useMemo)(()=>({
|
|
98
|
+
sm: {
|
|
99
|
+
fontSize: ts.labelSmall.sysFontSize,
|
|
100
|
+
lineHeight: ts.labelSmall.sysLineHeight,
|
|
101
|
+
letterSpacing: ts.labelSmall.sysTracking,
|
|
102
|
+
labelBarGap: dim.spacing.padding.sysPadding8,
|
|
103
|
+
stepGap: dim.spacing.padding.sysPadding4
|
|
104
|
+
},
|
|
105
|
+
lg: {
|
|
106
|
+
fontSize: ts.labelMedium.sysFontSize,
|
|
107
|
+
lineHeight: ts.labelMedium.sysLineHeight,
|
|
108
|
+
letterSpacing: ts.labelMedium.sysTracking,
|
|
109
|
+
labelBarGap: dim.spacing.padding.sysPadding16,
|
|
110
|
+
stepGap: dim.spacing.padding.sysPadding8
|
|
111
|
+
}
|
|
112
|
+
}), [
|
|
113
|
+
ts,
|
|
114
|
+
dim
|
|
115
|
+
]);
|
|
116
|
+
const s = sizeTokens[size];
|
|
117
|
+
return /*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnative.View, {
|
|
118
|
+
style: [
|
|
119
|
+
styles.row,
|
|
120
|
+
{
|
|
121
|
+
gap: s.stepGap
|
|
122
|
+
},
|
|
123
|
+
style
|
|
124
|
+
],
|
|
125
|
+
children: steps.map((step, i)=>{
|
|
126
|
+
const isActive = step.state !== 'pending';
|
|
127
|
+
const labelColor = isActive ? cr.surface.surface.sysOnSurface : cr.surface.surface.sysOnSurfaceVariant;
|
|
128
|
+
return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_reactnative.View, {
|
|
129
|
+
style: styles.step,
|
|
130
|
+
children: [
|
|
131
|
+
showLabels && /*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnative.Text, {
|
|
132
|
+
style: {
|
|
133
|
+
color: labelColor,
|
|
134
|
+
fontSize: s.fontSize,
|
|
135
|
+
lineHeight: s.lineHeight,
|
|
136
|
+
letterSpacing: s.letterSpacing,
|
|
137
|
+
includeFontPadding: false,
|
|
138
|
+
marginBottom: s.labelBarGap
|
|
139
|
+
},
|
|
140
|
+
numberOfLines: 1,
|
|
141
|
+
children: step.label
|
|
142
|
+
}),
|
|
143
|
+
/*#__PURE__*/ (0, _jsxruntime.jsx)(ProgressBar, {
|
|
144
|
+
progress: stepProgress(step.state)
|
|
145
|
+
})
|
|
146
|
+
]
|
|
147
|
+
}, i);
|
|
148
|
+
})
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
152
|
+
// Shared styles
|
|
153
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
154
|
+
const styles = _reactnative.StyleSheet.create({
|
|
155
|
+
// ProgressBar
|
|
156
|
+
track: {
|
|
157
|
+
height: 4,
|
|
158
|
+
width: '100%',
|
|
159
|
+
borderRadius: 9999,
|
|
160
|
+
overflow: 'hidden'
|
|
161
|
+
},
|
|
162
|
+
fill: {
|
|
163
|
+
position: 'absolute',
|
|
164
|
+
top: 0,
|
|
165
|
+
bottom: 0,
|
|
166
|
+
left: 0,
|
|
167
|
+
borderRadius: 9999
|
|
168
|
+
},
|
|
169
|
+
// ProgressTracker
|
|
170
|
+
row: {
|
|
171
|
+
flexDirection: 'row',
|
|
172
|
+
alignItems: 'flex-start'
|
|
173
|
+
},
|
|
174
|
+
step: {
|
|
175
|
+
flex: 1,
|
|
176
|
+
minWidth: 0
|
|
177
|
+
}
|
|
178
|
+
});
|
|
179
|
+
|
|
180
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../packages/react-native/src/components/ProgressTracker/index.tsx"],"sourcesContent":["import React, { useMemo } from 'react';\r\n\r\nimport { StyleProp, StyleSheet, Text, View, ViewStyle } from 'react-native';\r\n\r\nimport { useTheme } from '../../theme';\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// ProgressBar — standalone horizontal fill bar (0–100)\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport interface ProgressBarProps {\r\n /** 0–100 */\r\n progress: number;\r\n}\r\n\r\nexport function ProgressBar({ progress }: ProgressBarProps) {\r\n const { colorRoles: cr } = useTheme();\r\n const clamped = Math.min(100, Math.max(0, progress));\r\n\r\n return (\r\n <View\r\n accessible\r\n accessibilityRole=\"progressbar\"\r\n accessibilityValue={{ min: 0, max: 100, now: clamped }}\r\n style={[\r\n styles.track,\r\n {\r\n backgroundColor:\r\n cr.surface.surfaceContainer.sysSurfaceContainerHighest,\r\n },\r\n ]}\r\n >\r\n {clamped > 0 && (\r\n <View\r\n style={[\r\n styles.fill,\r\n {\r\n width: `${clamped}%`,\r\n backgroundColor: cr.custom.success.sysSuccess,\r\n },\r\n ]}\r\n />\r\n )}\r\n </View>\r\n );\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// ProgressTracker — multi-step bar tracker\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nexport type StepState = 'completed' | 'active' | 'pending';\r\n\r\nexport interface TrackerStep {\r\n label?: string;\r\n /**\r\n * `completed` → full green bar\r\n * `active` → full green bar (current step — same fill as completed)\r\n * `pending` → gray track only\r\n */\r\n state: StepState;\r\n}\r\n\r\nexport type ProgressTrackerSize = 'sm' | 'lg';\r\n\r\nexport interface ProgressTrackerProps {\r\n steps: TrackerStep[];\r\n size?: ProgressTrackerSize;\r\n /** Render step labels above each bar. Default false. */\r\n showLabels?: boolean;\r\n style?: StyleProp<ViewStyle>;\r\n}\r\n\r\nfunction stepProgress(state: StepState): number {\r\n return state === 'pending' ? 0 : 100;\r\n}\r\n\r\nexport function ProgressTracker({\r\n steps,\r\n size = 'lg',\r\n showLabels = false,\r\n style,\r\n}: ProgressTrackerProps) {\r\n const { colorRoles: cr, dimensions: dim, typeScale: ts } = useTheme();\r\n\r\n const sizeTokens = useMemo(\r\n () => ({\r\n sm: {\r\n fontSize: ts.labelSmall.sysFontSize,\r\n lineHeight: ts.labelSmall.sysLineHeight,\r\n letterSpacing: ts.labelSmall.sysTracking,\r\n labelBarGap: dim.spacing.padding.sysPadding8,\r\n stepGap: dim.spacing.padding.sysPadding4,\r\n },\r\n lg: {\r\n fontSize: ts.labelMedium.sysFontSize,\r\n lineHeight: ts.labelMedium.sysLineHeight,\r\n letterSpacing: ts.labelMedium.sysTracking,\r\n labelBarGap: dim.spacing.padding.sysPadding16,\r\n stepGap: dim.spacing.padding.sysPadding8,\r\n },\r\n }),\r\n [ts, dim],\r\n );\r\n\r\n const s = sizeTokens[size];\r\n\r\n return (\r\n <View style={[styles.row, { gap: s.stepGap }, style]}>\r\n {steps.map((step, i) => {\r\n const isActive = step.state !== 'pending';\r\n const labelColor = isActive\r\n ? cr.surface.surface.sysOnSurface\r\n : cr.surface.surface.sysOnSurfaceVariant;\r\n\r\n return (\r\n <View key={i} style={styles.step}>\r\n {showLabels && (\r\n <Text\r\n style={{\r\n color: labelColor,\r\n fontSize: s.fontSize,\r\n lineHeight: s.lineHeight,\r\n letterSpacing: s.letterSpacing,\r\n includeFontPadding: false,\r\n marginBottom: s.labelBarGap,\r\n }}\r\n numberOfLines={1}\r\n >\r\n {step.label}\r\n </Text>\r\n )}\r\n <ProgressBar progress={stepProgress(step.state)} />\r\n </View>\r\n );\r\n })}\r\n </View>\r\n );\r\n}\r\n\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n// Shared styles\r\n// ─────────────────────────────────────────────────────────────────────────────\r\n\r\nconst styles = StyleSheet.create({\r\n // ProgressBar\r\n track: {\r\n height: 4,\r\n width: '100%',\r\n borderRadius: 9999,\r\n overflow: 'hidden',\r\n },\r\n fill: {\r\n position: 'absolute',\r\n top: 0,\r\n bottom: 0,\r\n left: 0,\r\n borderRadius: 9999,\r\n },\r\n // ProgressTracker\r\n row: {\r\n flexDirection: 'row',\r\n alignItems: 'flex-start',\r\n },\r\n step: {\r\n flex: 1,\r\n minWidth: 0,\r\n },\r\n});\r\n"],"names":["ProgressBar","ProgressTracker","progress","colorRoles","cr","useTheme","clamped","Math","min","max","View","accessible","accessibilityRole","accessibilityValue","now","style","styles","track","backgroundColor","surface","surfaceContainer","sysSurfaceContainerHighest","fill","width","custom","success","sysSuccess","stepProgress","state","steps","size","showLabels","dimensions","dim","typeScale","ts","sizeTokens","useMemo","sm","fontSize","labelSmall","sysFontSize","lineHeight","sysLineHeight","letterSpacing","sysTracking","labelBarGap","spacing","padding","sysPadding8","stepGap","sysPadding4","lg","labelMedium","sysPadding16","s","row","gap","map","step","i","isActive","labelColor","sysOnSurface","sysOnSurfaceVariant","Text","color","includeFontPadding","marginBottom","numberOfLines","label","StyleSheet","create","height","borderRadius","overflow","position","top","bottom","left","flexDirection","alignItems","flex","minWidth"],"mappings":";;;;;;;;;;;QAegBA;eAAAA;;QA8DAC;eAAAA;;;;+DA7Ee;6BAE8B;uBAEpC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAWlB,SAASD,YAAY,EAAEE,QAAQ,EAAoB;IACxD,MAAM,EAAEC,YAAYC,EAAE,EAAE,GAAGC,IAAAA,eAAQ;IACnC,MAAMC,UAAUC,KAAKC,GAAG,CAAC,KAAKD,KAAKE,GAAG,CAAC,GAAGP;IAE1C,qBACE,qBAACQ,iBAAI;QACHC,UAAU;QACVC,mBAAkB;QAClBC,oBAAoB;YAAEL,KAAK;YAAGC,KAAK;YAAKK,KAAKR;QAAQ;QACrDS,OAAO;YACLC,OAAOC,KAAK;YACZ;gBACEC,iBACEd,GAAGe,OAAO,CAACC,gBAAgB,CAACC,0BAA0B;YAC1D;SACD;kBAEAf,UAAU,mBACT,qBAACI,iBAAI;YACHK,OAAO;gBACLC,OAAOM,IAAI;gBACX;oBACEC,OAAO,GAAGjB,QAAQ,CAAC,CAAC;oBACpBY,iBAAiBd,GAAGoB,MAAM,CAACC,OAAO,CAACC,UAAU;gBAC/C;aACD;;;AAKX;AA4BA,SAASC,aAAaC,KAAgB;IACpC,OAAOA,UAAU,YAAY,IAAI;AACnC;AAEO,SAAS3B,gBAAgB,EAC9B4B,KAAK,EACLC,OAAO,IAAI,EACXC,aAAa,KAAK,EAClBhB,KAAK,EACgB;IACrB,MAAM,EAAEZ,YAAYC,EAAE,EAAE4B,YAAYC,GAAG,EAAEC,WAAWC,EAAE,EAAE,GAAG9B,IAAAA,eAAQ;IAEnE,MAAM+B,aAAaC,IAAAA,cAAO,EACxB,IAAO,CAAA;YACLC,IAAI;gBACFC,UAAUJ,GAAGK,UAAU,CAACC,WAAW;gBACnCC,YAAYP,GAAGK,UAAU,CAACG,aAAa;gBACvCC,eAAeT,GAAGK,UAAU,CAACK,WAAW;gBACxCC,aAAab,IAAIc,OAAO,CAACC,OAAO,CAACC,WAAW;gBAC5CC,SAASjB,IAAIc,OAAO,CAACC,OAAO,CAACG,WAAW;YAC1C;YACAC,IAAI;gBACFb,UAAUJ,GAAGkB,WAAW,CAACZ,WAAW;gBACpCC,YAAYP,GAAGkB,WAAW,CAACV,aAAa;gBACxCC,eAAeT,GAAGkB,WAAW,CAACR,WAAW;gBACzCC,aAAab,IAAIc,OAAO,CAACC,OAAO,CAACM,YAAY;gBAC7CJ,SAASjB,IAAIc,OAAO,CAACC,OAAO,CAACC,WAAW;YAC1C;QACF,CAAA,GACA;QAACd;QAAIF;KAAI;IAGX,MAAMsB,IAAInB,UAAU,CAACN,KAAK;IAE1B,qBACE,qBAACpB,iBAAI;QAACK,OAAO;YAACC,OAAOwC,GAAG;YAAE;gBAAEC,KAAKF,EAAEL,OAAO;YAAC;YAAGnC;SAAM;kBACjDc,MAAM6B,GAAG,CAAC,CAACC,MAAMC;YAChB,MAAMC,WAAWF,KAAK/B,KAAK,KAAK;YAChC,MAAMkC,aAAaD,WACfzD,GAAGe,OAAO,CAACA,OAAO,CAAC4C,YAAY,GAC/B3D,GAAGe,OAAO,CAACA,OAAO,CAAC6C,mBAAmB;YAE1C,qBACE,sBAACtD,iBAAI;gBAASK,OAAOC,OAAO2C,IAAI;;oBAC7B5B,4BACC,qBAACkC,iBAAI;wBACHlD,OAAO;4BACLmD,OAAOJ;4BACPvB,UAAUgB,EAAEhB,QAAQ;4BACpBG,YAAYa,EAAEb,UAAU;4BACxBE,eAAeW,EAAEX,aAAa;4BAC9BuB,oBAAoB;4BACpBC,cAAcb,EAAET,WAAW;wBAC7B;wBACAuB,eAAe;kCAEdV,KAAKW,KAAK;;kCAGf,qBAACtE;wBAAYE,UAAUyB,aAAagC,KAAK/B,KAAK;;;eAhBrCgC;QAmBf;;AAGN;AAEA,gFAAgF;AAChF,gBAAgB;AAChB,gFAAgF;AAEhF,MAAM5C,SAASuD,uBAAU,CAACC,MAAM,CAAC;IAC/B,cAAc;IACdvD,OAAO;QACLwD,QAAQ;QACRlD,OAAO;QACPmD,cAAc;QACdC,UAAU;IACZ;IACArD,MAAM;QACJsD,UAAU;QACVC,KAAK;QACLC,QAAQ;QACRC,MAAM;QACNL,cAAc;IAChB;IACA,kBAAkB;IAClBlB,KAAK;QACHwB,eAAe;QACfC,YAAY;IACd;IACAtB,MAAM;QACJuB,MAAM;QACNC,UAAU;IACZ;AACF"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { type ImageSourcePropType, StyleProp, ViewStyle } from 'react-native';
|
|
3
|
+
export type PromotionCardVariant = 'filled' | 'tonal';
|
|
4
|
+
export type PromotionCardUsage = 'neutral' | 'informative' | 'positive' | 'danger' | 'warning' | 'image';
|
|
5
|
+
export type PromotionCardSize = 'md' | 'lg';
|
|
6
|
+
export interface PromotionCardProps {
|
|
7
|
+
size?: PromotionCardSize;
|
|
8
|
+
variant?: PromotionCardVariant;
|
|
9
|
+
usage?: PromotionCardUsage;
|
|
10
|
+
title?: string;
|
|
11
|
+
description?: string;
|
|
12
|
+
chipLabel?: string;
|
|
13
|
+
chipIcon?: React.ReactNode;
|
|
14
|
+
image?: ImageSourcePropType;
|
|
15
|
+
progress?: number;
|
|
16
|
+
showProgressBar?: boolean;
|
|
17
|
+
showRingTimer?: boolean;
|
|
18
|
+
onPress?: () => void;
|
|
19
|
+
disabled?: boolean;
|
|
20
|
+
accessibilityLabel?: string;
|
|
21
|
+
style?: StyleProp<ViewStyle>;
|
|
22
|
+
}
|
|
23
|
+
export declare function PromotionCard({ size, variant, usage, title, description, chipLabel, chipIcon, image, progress, showProgressBar, showRingTimer, onPress, disabled, accessibilityLabel, style, }: PromotionCardProps): React.JSX.Element;
|