@compsych-ui-components/react-native 4.0.4 → 4.0.13
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,322 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "Pagination", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return Pagination;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _jsxruntime = require("react/jsx-runtime");
|
|
12
|
+
const _react = /*#__PURE__*/ _interop_require_wildcard(require("react"));
|
|
13
|
+
const _reactnative = require("react-native");
|
|
14
|
+
const _vectoricons = require("@expo/vector-icons");
|
|
15
|
+
const _theme = require("../../theme");
|
|
16
|
+
function _getRequireWildcardCache(nodeInterop) {
|
|
17
|
+
if (typeof WeakMap !== "function") return null;
|
|
18
|
+
var cacheBabelInterop = new WeakMap();
|
|
19
|
+
var cacheNodeInterop = new WeakMap();
|
|
20
|
+
return (_getRequireWildcardCache = function(nodeInterop) {
|
|
21
|
+
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
|
22
|
+
})(nodeInterop);
|
|
23
|
+
}
|
|
24
|
+
function _interop_require_wildcard(obj, nodeInterop) {
|
|
25
|
+
if (!nodeInterop && obj && obj.__esModule) {
|
|
26
|
+
return obj;
|
|
27
|
+
}
|
|
28
|
+
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
|
|
29
|
+
return {
|
|
30
|
+
default: obj
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
var cache = _getRequireWildcardCache(nodeInterop);
|
|
34
|
+
if (cache && cache.has(obj)) {
|
|
35
|
+
return cache.get(obj);
|
|
36
|
+
}
|
|
37
|
+
var newObj = {
|
|
38
|
+
__proto__: null
|
|
39
|
+
};
|
|
40
|
+
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
41
|
+
for(var key in obj){
|
|
42
|
+
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
43
|
+
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
|
44
|
+
if (desc && (desc.get || desc.set)) {
|
|
45
|
+
Object.defineProperty(newObj, key, desc);
|
|
46
|
+
} else {
|
|
47
|
+
newObj[key] = obj[key];
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
newObj.default = obj;
|
|
52
|
+
if (cache) {
|
|
53
|
+
cache.set(obj, newObj);
|
|
54
|
+
}
|
|
55
|
+
return newObj;
|
|
56
|
+
}
|
|
57
|
+
// ── Pagination range logic ────────────────────────────────────────────────────
|
|
58
|
+
function buildPageRange(total, current, siblings) {
|
|
59
|
+
// Always show: 1, last, current, siblings
|
|
60
|
+
const range = [];
|
|
61
|
+
if (total <= 1) return [
|
|
62
|
+
1
|
|
63
|
+
];
|
|
64
|
+
const left = Math.max(2, current - siblings);
|
|
65
|
+
const right = Math.min(total - 1, current + siblings);
|
|
66
|
+
// First page
|
|
67
|
+
range.push(1);
|
|
68
|
+
// Left ellipsis
|
|
69
|
+
if (left > 2) range.push('...');
|
|
70
|
+
// Middle range
|
|
71
|
+
for(let i = left; i <= right; i++)range.push(i);
|
|
72
|
+
// Right ellipsis
|
|
73
|
+
if (right < total - 1) range.push('...');
|
|
74
|
+
// Last page
|
|
75
|
+
if (total > 1) range.push(total);
|
|
76
|
+
return range;
|
|
77
|
+
}
|
|
78
|
+
// ── Active ring wrapper ───────────────────────────────────────────────────────
|
|
79
|
+
// Mirrors the 4px padding + sysPrimary08 background pattern from Input.
|
|
80
|
+
const RING_SIZE = 4;
|
|
81
|
+
function PageItem({ s, page, isActive, onPress, cr }) {
|
|
82
|
+
const borderWidth = isActive ? 1.5 : 0;
|
|
83
|
+
const borderColor = isActive ? cr.accent.primary.sysPrimary : 'transparent';
|
|
84
|
+
const textColor = isActive ? cr.custom.info.sysOnInfoContainer : cr.surface.surface.sysOnSurface;
|
|
85
|
+
const fontWeight = isActive ? s.activeWeight : s.inactiveWeight;
|
|
86
|
+
return /*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnative.Pressable, {
|
|
87
|
+
onPress: onPress,
|
|
88
|
+
accessibilityRole: "button",
|
|
89
|
+
accessibilityLabel: `Page ${page}`,
|
|
90
|
+
accessibilityState: {
|
|
91
|
+
selected: isActive
|
|
92
|
+
},
|
|
93
|
+
children: ({ pressed })=>// Ring wrapper — always RING_SIZE padding for layout stability;
|
|
94
|
+
// background only when active (or focused — handled via pressed state here)
|
|
95
|
+
/*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnative.View, {
|
|
96
|
+
style: {
|
|
97
|
+
padding: RING_SIZE,
|
|
98
|
+
borderRadius: s.itemSize / 2 + RING_SIZE,
|
|
99
|
+
backgroundColor: isActive ? cr.transparent.primary.sysPrimary08 : 'transparent'
|
|
100
|
+
},
|
|
101
|
+
children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnative.View, {
|
|
102
|
+
style: {
|
|
103
|
+
width: s.itemSize,
|
|
104
|
+
height: s.itemSize,
|
|
105
|
+
borderRadius: s.itemSize / 2,
|
|
106
|
+
borderWidth,
|
|
107
|
+
borderColor,
|
|
108
|
+
alignItems: 'center',
|
|
109
|
+
justifyContent: 'center',
|
|
110
|
+
backgroundColor: pressed && !isActive ? cr.transparent.neutral.sysBlack10 : 'transparent'
|
|
111
|
+
},
|
|
112
|
+
children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnative.Text, {
|
|
113
|
+
style: {
|
|
114
|
+
fontSize: s.fontSize,
|
|
115
|
+
lineHeight: s.lineHeight,
|
|
116
|
+
fontWeight,
|
|
117
|
+
color: textColor,
|
|
118
|
+
includeFontPadding: false
|
|
119
|
+
},
|
|
120
|
+
children: page
|
|
121
|
+
})
|
|
122
|
+
})
|
|
123
|
+
})
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
function EllipsisItem({ s, cr }) {
|
|
127
|
+
return /*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnative.View, {
|
|
128
|
+
accessible: true,
|
|
129
|
+
accessibilityLabel: "More pages",
|
|
130
|
+
style: {
|
|
131
|
+
width: s.itemSize + RING_SIZE * 2,
|
|
132
|
+
height: s.itemSize + RING_SIZE * 2,
|
|
133
|
+
alignItems: 'center',
|
|
134
|
+
justifyContent: 'center'
|
|
135
|
+
},
|
|
136
|
+
children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnative.Text, {
|
|
137
|
+
style: {
|
|
138
|
+
fontSize: s.fontSize,
|
|
139
|
+
lineHeight: s.lineHeight,
|
|
140
|
+
fontWeight: s.inactiveWeight,
|
|
141
|
+
color: cr.surface.surface.sysOnSurfaceVariant,
|
|
142
|
+
includeFontPadding: false
|
|
143
|
+
},
|
|
144
|
+
children: "…"
|
|
145
|
+
})
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
function NavButton({ s, direction, disabled, onPress, cr }) {
|
|
149
|
+
const iconName = direction === 'prev' ? 'chevron-back' : 'chevron-forward';
|
|
150
|
+
return /*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnative.Pressable, {
|
|
151
|
+
onPress: disabled ? undefined : onPress,
|
|
152
|
+
accessibilityRole: "button",
|
|
153
|
+
accessibilityLabel: direction === 'prev' ? 'Previous page' : 'Next page',
|
|
154
|
+
accessibilityState: {
|
|
155
|
+
disabled
|
|
156
|
+
},
|
|
157
|
+
style: {
|
|
158
|
+
opacity: disabled ? 0.38 : 1
|
|
159
|
+
},
|
|
160
|
+
children: ({ pressed })=>/*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnative.View, {
|
|
161
|
+
style: {
|
|
162
|
+
width: s.itemSize,
|
|
163
|
+
height: s.itemSize,
|
|
164
|
+
borderRadius: s.itemSize / 2,
|
|
165
|
+
alignItems: 'center',
|
|
166
|
+
justifyContent: 'center',
|
|
167
|
+
backgroundColor: pressed && !disabled ? cr.transparent.neutral.sysBlack10 : 'transparent'
|
|
168
|
+
},
|
|
169
|
+
children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_vectoricons.Ionicons, {
|
|
170
|
+
name: iconName,
|
|
171
|
+
size: s.iconSize,
|
|
172
|
+
color: cr.surface.surface.sysOnSurface
|
|
173
|
+
})
|
|
174
|
+
})
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
function Pagination({ size = 'lg', totalPages, currentPage, onPageChange, siblingCount = 1, compact = false, style }) {
|
|
178
|
+
const { colorRoles: cr, dimensions: dim, typeScale: ts } = (0, _theme.useTheme)();
|
|
179
|
+
const sizeTokens = (0, _react.useMemo)(()=>({
|
|
180
|
+
sm: {
|
|
181
|
+
itemSize: 32,
|
|
182
|
+
iconSize: 20,
|
|
183
|
+
fontSize: ts.labelMedium.sysFontSize,
|
|
184
|
+
lineHeight: ts.labelMedium.sysLineHeight,
|
|
185
|
+
activeWeight: '500',
|
|
186
|
+
inactiveWeight: '400',
|
|
187
|
+
gap: dim.spacing.padding.sysPadding8,
|
|
188
|
+
// Pill container: sm has NO outer pill
|
|
189
|
+
hasPill: false,
|
|
190
|
+
pillPaddingH: 0,
|
|
191
|
+
pillPaddingV: 0,
|
|
192
|
+
pillGap: dim.spacing.padding.sysPadding8
|
|
193
|
+
},
|
|
194
|
+
lg: {
|
|
195
|
+
itemSize: 40,
|
|
196
|
+
iconSize: 24,
|
|
197
|
+
fontSize: ts.labelLarge.sysFontSize,
|
|
198
|
+
lineHeight: ts.labelLarge.sysLineHeight,
|
|
199
|
+
activeWeight: '500',
|
|
200
|
+
inactiveWeight: '400',
|
|
201
|
+
gap: dim.spacing.padding.sysPadding16,
|
|
202
|
+
// Pill container: lg wraps in pill border
|
|
203
|
+
hasPill: true,
|
|
204
|
+
pillPaddingH: dim.spacing.padding.sysPadding12,
|
|
205
|
+
pillPaddingV: dim.spacing.padding.sysPadding8,
|
|
206
|
+
pillGap: dim.spacing.padding.sysPadding16
|
|
207
|
+
}
|
|
208
|
+
}), [
|
|
209
|
+
ts,
|
|
210
|
+
dim
|
|
211
|
+
]);
|
|
212
|
+
const s = sizeTokens[size];
|
|
213
|
+
const pages = buildPageRange(totalPages, currentPage, siblingCount);
|
|
214
|
+
const prevDisabled = currentPage <= 1;
|
|
215
|
+
const nextDisabled = currentPage >= totalPages;
|
|
216
|
+
// ── Compact (prev + next only) ────────────────────────────────────────────
|
|
217
|
+
const content = compact ? /*#__PURE__*/ (0, _jsxruntime.jsxs)(_reactnative.View, {
|
|
218
|
+
style: [
|
|
219
|
+
styles.inner,
|
|
220
|
+
{
|
|
221
|
+
gap: dim.spacing.padding.sysPadding4
|
|
222
|
+
}
|
|
223
|
+
],
|
|
224
|
+
children: [
|
|
225
|
+
/*#__PURE__*/ (0, _jsxruntime.jsx)(NavButton, {
|
|
226
|
+
s: s,
|
|
227
|
+
direction: "prev",
|
|
228
|
+
disabled: prevDisabled,
|
|
229
|
+
onPress: ()=>onPageChange(currentPage - 1),
|
|
230
|
+
cr: cr
|
|
231
|
+
}),
|
|
232
|
+
/*#__PURE__*/ (0, _jsxruntime.jsx)(NavButton, {
|
|
233
|
+
s: s,
|
|
234
|
+
direction: "next",
|
|
235
|
+
disabled: nextDisabled,
|
|
236
|
+
onPress: ()=>onPageChange(currentPage + 1),
|
|
237
|
+
cr: cr
|
|
238
|
+
})
|
|
239
|
+
]
|
|
240
|
+
}) : // ── Full paginator ────────────────────────────────────────────────────
|
|
241
|
+
/*#__PURE__*/ (0, _jsxruntime.jsxs)(_reactnative.View, {
|
|
242
|
+
style: [
|
|
243
|
+
styles.inner,
|
|
244
|
+
{
|
|
245
|
+
gap: s.gap
|
|
246
|
+
}
|
|
247
|
+
],
|
|
248
|
+
children: [
|
|
249
|
+
/*#__PURE__*/ (0, _jsxruntime.jsx)(NavButton, {
|
|
250
|
+
s: s,
|
|
251
|
+
direction: "prev",
|
|
252
|
+
disabled: prevDisabled,
|
|
253
|
+
onPress: ()=>onPageChange(currentPage - 1),
|
|
254
|
+
cr: cr
|
|
255
|
+
}),
|
|
256
|
+
/*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnative.View, {
|
|
257
|
+
style: [
|
|
258
|
+
styles.pages,
|
|
259
|
+
{
|
|
260
|
+
gap: s.hasPill ? 0 : s.gap
|
|
261
|
+
}
|
|
262
|
+
],
|
|
263
|
+
children: pages.map((p, i)=>p === '...' ? /*#__PURE__*/ (0, _jsxruntime.jsx)(EllipsisItem, {
|
|
264
|
+
s: s,
|
|
265
|
+
cr: cr
|
|
266
|
+
}, `ellipsis-${i}`) : /*#__PURE__*/ (0, _jsxruntime.jsx)(PageItem, {
|
|
267
|
+
s: s,
|
|
268
|
+
page: p,
|
|
269
|
+
isActive: p === currentPage,
|
|
270
|
+
onPress: ()=>onPageChange(p),
|
|
271
|
+
cr: cr
|
|
272
|
+
}, p))
|
|
273
|
+
}),
|
|
274
|
+
/*#__PURE__*/ (0, _jsxruntime.jsx)(NavButton, {
|
|
275
|
+
s: s,
|
|
276
|
+
direction: "next",
|
|
277
|
+
disabled: nextDisabled,
|
|
278
|
+
onPress: ()=>onPageChange(currentPage + 1),
|
|
279
|
+
cr: cr
|
|
280
|
+
})
|
|
281
|
+
]
|
|
282
|
+
});
|
|
283
|
+
// ── Pill wrapper (lg only) ────────────────────────────────────────────────
|
|
284
|
+
if (s.hasPill) {
|
|
285
|
+
return /*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnative.View, {
|
|
286
|
+
style: [
|
|
287
|
+
styles.pill,
|
|
288
|
+
{
|
|
289
|
+
paddingHorizontal: s.pillPaddingH,
|
|
290
|
+
paddingVertical: s.pillPaddingV,
|
|
291
|
+
backgroundColor: cr.surface.surfaceContainer.sysSurfaceContainerLowest,
|
|
292
|
+
borderColor: cr.outline.sysOutline,
|
|
293
|
+
borderWidth: dim.borderWidth.sysStrokeThin
|
|
294
|
+
},
|
|
295
|
+
style
|
|
296
|
+
],
|
|
297
|
+
children: content
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
// sm — wrap content in a View so style can be applied
|
|
301
|
+
return /*#__PURE__*/ (0, _jsxruntime.jsx)(_reactnative.View, {
|
|
302
|
+
style: style,
|
|
303
|
+
children: content
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
const styles = _reactnative.StyleSheet.create({
|
|
307
|
+
pill: {
|
|
308
|
+
alignSelf: 'flex-start',
|
|
309
|
+
borderRadius: 9999,
|
|
310
|
+
overflow: 'hidden'
|
|
311
|
+
},
|
|
312
|
+
inner: {
|
|
313
|
+
flexDirection: 'row',
|
|
314
|
+
alignItems: 'center'
|
|
315
|
+
},
|
|
316
|
+
pages: {
|
|
317
|
+
flexDirection: 'row',
|
|
318
|
+
alignItems: 'center'
|
|
319
|
+
}
|
|
320
|
+
});
|
|
321
|
+
|
|
322
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../packages/react-native/src/components/Pagination/index.tsx"],"sourcesContent":["import React, { useMemo } from 'react';\r\n\r\nimport {\r\n Pressable,\r\n StyleProp,\r\n StyleSheet,\r\n Text,\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\n\r\nexport type PaginationSize = 'sm' | 'lg';\r\n\r\n// Shared token shape so sub-components accept either size\r\ntype SizeTokens = {\r\n itemSize: number;\r\n iconSize: number;\r\n fontSize: number;\r\n lineHeight: number;\r\n activeWeight: '500';\r\n inactiveWeight: '400';\r\n gap: number;\r\n hasPill: boolean;\r\n pillPaddingH: number;\r\n pillPaddingV: number;\r\n pillGap: number;\r\n};\r\n\r\nexport interface PaginationProps {\r\n size?: PaginationSize;\r\n totalPages: number;\r\n currentPage: number;\r\n onPageChange: (page: number) => void;\r\n /** How many page numbers to show on each side of the current page */\r\n siblingCount?: number;\r\n /** On mobile/compact layouts — renders only prev + next arrows (no page numbers) */\r\n compact?: boolean;\r\n style?: StyleProp<ViewStyle>;\r\n}\r\n\r\n// ── Pagination range logic ────────────────────────────────────────────────────\r\n\r\nfunction buildPageRange(\r\n total: number,\r\n current: number,\r\n siblings: number,\r\n): (number | '...')[] {\r\n // Always show: 1, last, current, siblings\r\n const range: (number | '...')[] = [];\r\n\r\n if (total <= 1) return [1];\r\n\r\n const left = Math.max(2, current - siblings);\r\n const right = Math.min(total - 1, current + siblings);\r\n\r\n // First page\r\n range.push(1);\r\n\r\n // Left ellipsis\r\n if (left > 2) range.push('...');\r\n\r\n // Middle range\r\n for (let i = left; i <= right; i++) range.push(i);\r\n\r\n // Right ellipsis\r\n if (right < total - 1) range.push('...');\r\n\r\n // Last page\r\n if (total > 1) range.push(total);\r\n\r\n return range;\r\n}\r\n\r\n// ── Active ring wrapper ───────────────────────────────────────────────────────\r\n// Mirrors the 4px padding + sysPrimary08 background pattern from Input.\r\n\r\nconst RING_SIZE = 4;\r\n\r\n// ── Page item ────────────────────────────────────────────────────────────────\r\n\r\ninterface PageItemProps {\r\n s: SizeTokens;\r\n page: number;\r\n isActive: boolean;\r\n onPress: () => void;\r\n cr: ReturnType<typeof useTheme>['colorRoles'];\r\n}\r\n\r\nfunction PageItem({ s, page, isActive, onPress, cr }: PageItemProps) {\r\n const borderWidth = isActive ? 1.5 : 0;\r\n const borderColor = isActive ? cr.accent.primary.sysPrimary : 'transparent';\r\n const textColor = isActive\r\n ? cr.custom.info.sysOnInfoContainer\r\n : cr.surface.surface.sysOnSurface;\r\n const fontWeight = isActive ? s.activeWeight : s.inactiveWeight;\r\n\r\n return (\r\n <Pressable\r\n onPress={onPress}\r\n accessibilityRole=\"button\"\r\n accessibilityLabel={`Page ${page}`}\r\n accessibilityState={{ selected: isActive }}\r\n >\r\n {({ pressed }: { pressed: boolean }) => (\r\n // Ring wrapper — always RING_SIZE padding for layout stability;\r\n // background only when active (or focused — handled via pressed state here)\r\n <View\r\n style={{\r\n padding: RING_SIZE,\r\n borderRadius: s.itemSize / 2 + RING_SIZE,\r\n backgroundColor: isActive\r\n ? cr.transparent.primary.sysPrimary08\r\n : 'transparent',\r\n }}\r\n >\r\n <View\r\n style={{\r\n width: s.itemSize,\r\n height: s.itemSize,\r\n borderRadius: s.itemSize / 2,\r\n borderWidth,\r\n borderColor,\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n backgroundColor:\r\n pressed && !isActive\r\n ? cr.transparent.neutral.sysBlack10\r\n : 'transparent',\r\n }}\r\n >\r\n <Text\r\n style={{\r\n fontSize: s.fontSize,\r\n lineHeight: s.lineHeight,\r\n fontWeight,\r\n color: textColor,\r\n includeFontPadding: false,\r\n }}\r\n >\r\n {page}\r\n </Text>\r\n </View>\r\n </View>\r\n )}\r\n </Pressable>\r\n );\r\n}\r\n\r\n// ── Ellipsis item ─────────────────────────────────────────────────────────────\r\n\r\ninterface EllipsisItemProps {\r\n s: SizeTokens;\r\n cr: ReturnType<typeof useTheme>['colorRoles'];\r\n}\r\n\r\nfunction EllipsisItem({ s, cr }: EllipsisItemProps) {\r\n return (\r\n <View\r\n accessible\r\n accessibilityLabel=\"More pages\"\r\n style={{\r\n width: s.itemSize + RING_SIZE * 2,\r\n height: s.itemSize + RING_SIZE * 2,\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n }}\r\n >\r\n <Text\r\n style={{\r\n fontSize: s.fontSize,\r\n lineHeight: s.lineHeight,\r\n fontWeight: s.inactiveWeight,\r\n color: cr.surface.surface.sysOnSurfaceVariant,\r\n includeFontPadding: false,\r\n }}\r\n >\r\n …\r\n </Text>\r\n </View>\r\n );\r\n}\r\n\r\n// ── Prev / Next button ────────────────────────────────────────────────────────\r\n\r\ninterface NavButtonProps {\r\n s: SizeTokens;\r\n direction: 'prev' | 'next';\r\n disabled: boolean;\r\n onPress: () => void;\r\n cr: ReturnType<typeof useTheme>['colorRoles'];\r\n}\r\n\r\nfunction NavButton({ s, direction, disabled, onPress, cr }: NavButtonProps) {\r\n const iconName = direction === 'prev' ? 'chevron-back' : 'chevron-forward';\r\n\r\n return (\r\n <Pressable\r\n onPress={disabled ? undefined : onPress}\r\n accessibilityRole=\"button\"\r\n accessibilityLabel={direction === 'prev' ? 'Previous page' : 'Next page'}\r\n accessibilityState={{ disabled }}\r\n style={{ opacity: disabled ? 0.38 : 1 }}\r\n >\r\n {({ pressed }: { pressed: boolean }) => (\r\n <View\r\n style={{\r\n width: s.itemSize,\r\n height: s.itemSize,\r\n borderRadius: s.itemSize / 2,\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n backgroundColor:\r\n pressed && !disabled\r\n ? cr.transparent.neutral.sysBlack10\r\n : 'transparent',\r\n }}\r\n >\r\n <Ionicons\r\n name={iconName}\r\n size={s.iconSize}\r\n color={cr.surface.surface.sysOnSurface}\r\n />\r\n </View>\r\n )}\r\n </Pressable>\r\n );\r\n}\r\n\r\n// ── Main component ────────────────────────────────────────────────────────────\r\n\r\nexport function Pagination({\r\n size = 'lg',\r\n totalPages,\r\n currentPage,\r\n onPageChange,\r\n siblingCount = 1,\r\n compact = false,\r\n style,\r\n}: PaginationProps) {\r\n const { colorRoles: cr, dimensions: dim, typeScale: ts } = useTheme();\r\n\r\n const sizeTokens = useMemo(\r\n () => ({\r\n sm: {\r\n itemSize: 32,\r\n iconSize: 20,\r\n fontSize: ts.labelMedium.sysFontSize,\r\n lineHeight: ts.labelMedium.sysLineHeight,\r\n activeWeight: '500' as const,\r\n inactiveWeight: '400' as const,\r\n gap: dim.spacing.padding.sysPadding8,\r\n // Pill container: sm has NO outer pill\r\n hasPill: false,\r\n pillPaddingH: 0,\r\n pillPaddingV: 0,\r\n pillGap: dim.spacing.padding.sysPadding8,\r\n },\r\n lg: {\r\n itemSize: 40,\r\n iconSize: 24,\r\n fontSize: ts.labelLarge.sysFontSize,\r\n lineHeight: ts.labelLarge.sysLineHeight,\r\n activeWeight: '500' as const,\r\n inactiveWeight: '400' as const,\r\n gap: dim.spacing.padding.sysPadding16,\r\n // Pill container: lg wraps in pill border\r\n hasPill: true,\r\n pillPaddingH: dim.spacing.padding.sysPadding12,\r\n pillPaddingV: dim.spacing.padding.sysPadding8,\r\n pillGap: dim.spacing.padding.sysPadding16,\r\n },\r\n }),\r\n [ts, dim],\r\n );\r\n\r\n const s = sizeTokens[size];\r\n const pages = buildPageRange(totalPages, currentPage, siblingCount);\r\n\r\n const prevDisabled = currentPage <= 1;\r\n const nextDisabled = currentPage >= totalPages;\r\n\r\n // ── Compact (prev + next only) ────────────────────────────────────────────\r\n const content = compact ? (\r\n <View style={[styles.inner, { gap: dim.spacing.padding.sysPadding4 }]}>\r\n <NavButton\r\n s={s}\r\n direction=\"prev\"\r\n disabled={prevDisabled}\r\n onPress={() => onPageChange(currentPage - 1)}\r\n cr={cr}\r\n />\r\n <NavButton\r\n s={s}\r\n direction=\"next\"\r\n disabled={nextDisabled}\r\n onPress={() => onPageChange(currentPage + 1)}\r\n cr={cr}\r\n />\r\n </View>\r\n ) : (\r\n // ── Full paginator ────────────────────────────────────────────────────\r\n <View style={[styles.inner, { gap: s.gap }]}>\r\n <NavButton\r\n s={s}\r\n direction=\"prev\"\r\n disabled={prevDisabled}\r\n onPress={() => onPageChange(currentPage - 1)}\r\n cr={cr}\r\n />\r\n\r\n <View style={[styles.pages, { gap: s.hasPill ? 0 : s.gap }]}>\r\n {pages.map((p, i) =>\r\n p === '...' ? (\r\n <EllipsisItem key={`ellipsis-${i}`} s={s} cr={cr} />\r\n ) : (\r\n <PageItem\r\n key={p}\r\n s={s}\r\n page={p}\r\n isActive={p === currentPage}\r\n onPress={() => onPageChange(p)}\r\n cr={cr}\r\n />\r\n ),\r\n )}\r\n </View>\r\n\r\n <NavButton\r\n s={s}\r\n direction=\"next\"\r\n disabled={nextDisabled}\r\n onPress={() => onPageChange(currentPage + 1)}\r\n cr={cr}\r\n />\r\n </View>\r\n );\r\n\r\n // ── Pill wrapper (lg only) ────────────────────────────────────────────────\r\n if (s.hasPill) {\r\n return (\r\n <View\r\n style={[\r\n styles.pill,\r\n {\r\n paddingHorizontal: s.pillPaddingH,\r\n paddingVertical: s.pillPaddingV,\r\n backgroundColor:\r\n cr.surface.surfaceContainer.sysSurfaceContainerLowest,\r\n borderColor: cr.outline.sysOutline,\r\n borderWidth: dim.borderWidth.sysStrokeThin,\r\n },\r\n style,\r\n ]}\r\n >\r\n {content}\r\n </View>\r\n );\r\n }\r\n\r\n // sm — wrap content in a View so style can be applied\r\n return <View style={style}>{content}</View>;\r\n}\r\n\r\nconst styles = StyleSheet.create({\r\n pill: {\r\n alignSelf: 'flex-start',\r\n borderRadius: 9999,\r\n overflow: 'hidden',\r\n },\r\n inner: {\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n },\r\n pages: {\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n },\r\n});\r\n"],"names":["Pagination","buildPageRange","total","current","siblings","range","left","Math","max","right","min","push","i","RING_SIZE","PageItem","s","page","isActive","onPress","cr","borderWidth","borderColor","accent","primary","sysPrimary","textColor","custom","info","sysOnInfoContainer","surface","sysOnSurface","fontWeight","activeWeight","inactiveWeight","Pressable","accessibilityRole","accessibilityLabel","accessibilityState","selected","pressed","View","style","padding","borderRadius","itemSize","backgroundColor","transparent","sysPrimary08","width","height","alignItems","justifyContent","neutral","sysBlack10","Text","fontSize","lineHeight","color","includeFontPadding","EllipsisItem","accessible","sysOnSurfaceVariant","NavButton","direction","disabled","iconName","undefined","opacity","Ionicons","name","size","iconSize","totalPages","currentPage","onPageChange","siblingCount","compact","colorRoles","dimensions","dim","typeScale","ts","useTheme","sizeTokens","useMemo","sm","labelMedium","sysFontSize","sysLineHeight","gap","spacing","sysPadding8","hasPill","pillPaddingH","pillPaddingV","pillGap","lg","labelLarge","sysPadding16","sysPadding12","pages","prevDisabled","nextDisabled","content","styles","inner","sysPadding4","map","p","pill","paddingHorizontal","paddingVertical","surfaceContainer","sysSurfaceContainerLowest","outline","sysOutline","sysStrokeThin","StyleSheet","create","alignSelf","overflow","flexDirection"],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { StyleProp, ViewStyle } from 'react-native';
|
|
3
|
+
export interface PlanCardItemData {
|
|
4
|
+
id: string;
|
|
5
|
+
title: string;
|
|
6
|
+
subtitle?: string;
|
|
7
|
+
checked?: boolean;
|
|
8
|
+
onToggle?: () => void;
|
|
9
|
+
onAudio?: () => void;
|
|
10
|
+
onOpen?: () => void;
|
|
11
|
+
}
|
|
12
|
+
interface DropdownItemProps extends PlanCardItemData {
|
|
13
|
+
showDivider?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export declare function PlanCardDropdownItem({ title, subtitle, checked, onToggle, onAudio, onOpen, showDivider, }: DropdownItemProps): React.JSX.Element;
|
|
16
|
+
export interface PlanCardProps {
|
|
17
|
+
title: string;
|
|
18
|
+
icon?: React.ReactNode;
|
|
19
|
+
tag?: string;
|
|
20
|
+
items?: PlanCardItemData[];
|
|
21
|
+
expanded?: boolean;
|
|
22
|
+
onToggle?: () => void;
|
|
23
|
+
children?: React.ReactNode;
|
|
24
|
+
style?: StyleProp<ViewStyle>;
|
|
25
|
+
}
|
|
26
|
+
export declare function PlanCard({ title, icon, tag, items, expanded, onToggle, children, style, }: PlanCardProps): React.JSX.Element;
|
|
27
|
+
export {};
|