@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.
Files changed (172) hide show
  1. package/package.json +22 -14
  2. package/src/components/ActionSheet/index.d.ts +16 -0
  3. package/src/components/ActionSheet/index.js +256 -0
  4. package/src/components/ActionSheet/index.js.map +1 -0
  5. package/src/components/Alert/index.d.ts +24 -0
  6. package/src/components/Alert/index.js +304 -0
  7. package/src/components/Alert/index.js.map +1 -0
  8. package/src/components/Avatar/index.d.ts +22 -0
  9. package/src/components/Avatar/index.js +253 -0
  10. package/src/components/Avatar/index.js.map +1 -0
  11. package/src/components/Badge/index.d.ts +12 -0
  12. package/src/components/Badge/index.js +206 -0
  13. package/src/components/Badge/index.js.map +1 -0
  14. package/src/components/BodyText/index.d.ts +9 -0
  15. package/src/components/BodyText/index.js +58 -0
  16. package/src/components/BodyText/index.js.map +1 -0
  17. package/src/components/Breadcrumb/index.d.ts +24 -0
  18. package/src/components/Breadcrumb/index.js +194 -0
  19. package/src/components/Breadcrumb/index.js.map +1 -0
  20. package/src/components/Button/index.d.ts +16 -0
  21. package/src/components/Button/index.js +260 -0
  22. package/src/components/Button/index.js.map +1 -0
  23. package/src/components/Checkbox/index.d.ts +16 -0
  24. package/src/components/Checkbox/index.js +196 -0
  25. package/src/components/Checkbox/index.js.map +1 -0
  26. package/src/components/Chip/index.d.ts +18 -0
  27. package/src/components/Chip/index.js +280 -0
  28. package/src/components/Chip/index.js.map +1 -0
  29. package/src/components/Divider/index.d.ts +11 -0
  30. package/src/components/Divider/index.js +59 -0
  31. package/src/components/Divider/index.js.map +1 -0
  32. package/src/components/EmptyState/index.d.ts +25 -0
  33. package/src/components/EmptyState/index.js +376 -0
  34. package/src/components/EmptyState/index.js.map +1 -0
  35. package/src/components/HeaderText/index.d.ts +9 -0
  36. package/src/components/HeaderText/index.js +62 -0
  37. package/src/components/HeaderText/index.js.map +1 -0
  38. package/src/components/Input/index.d.ts +13 -0
  39. package/src/components/Input/index.js +231 -0
  40. package/src/components/Input/index.js.map +1 -0
  41. package/src/components/List/index.d.ts +19 -0
  42. package/src/components/List/index.js +170 -0
  43. package/src/components/List/index.js.map +1 -0
  44. package/src/components/Pagination/index.d.ts +15 -0
  45. package/src/components/Pagination/index.js +322 -0
  46. package/src/components/Pagination/index.js.map +1 -0
  47. package/src/components/PlanCard/index.d.ts +27 -0
  48. package/src/components/PlanCard/index.js +364 -0
  49. package/src/components/PlanCard/index.js.map +1 -0
  50. package/src/components/ProgressTracker/index.d.ts +26 -0
  51. package/src/components/ProgressTracker/index.js +180 -0
  52. package/src/components/ProgressTracker/index.js.map +1 -0
  53. package/src/components/PromotionCard/index.d.ts +23 -0
  54. package/src/components/PromotionCard/index.js +496 -0
  55. package/src/components/PromotionCard/index.js.map +1 -0
  56. package/src/components/RadioButton/index.d.ts +15 -0
  57. package/src/components/RadioButton/index.js +188 -0
  58. package/src/components/RadioButton/index.js.map +1 -0
  59. package/src/components/ScreenContainer/index.d.ts +15 -0
  60. package/src/components/ScreenContainer/index.js +43 -0
  61. package/src/components/ScreenContainer/index.js.map +1 -0
  62. package/src/components/SegmentedControl/index.d.ts +16 -0
  63. package/src/components/SegmentedControl/index.js +115 -0
  64. package/src/components/SegmentedControl/index.js.map +1 -0
  65. package/src/components/SelectionCard/index.d.ts +16 -0
  66. package/src/components/SelectionCard/index.js +222 -0
  67. package/src/components/SelectionCard/index.js.map +1 -0
  68. package/src/components/ServiceCard/index.d.ts +22 -0
  69. package/src/components/ServiceCard/index.js +385 -0
  70. package/src/components/ServiceCard/index.js.map +1 -0
  71. package/src/components/Slider/index.d.ts +24 -0
  72. package/src/components/Slider/index.js +320 -0
  73. package/src/components/Slider/index.js.map +1 -0
  74. package/src/components/Snackbar/index.d.ts +13 -0
  75. package/src/components/Snackbar/index.js +229 -0
  76. package/src/components/Snackbar/index.js.map +1 -0
  77. package/src/components/Switch/index.d.ts +14 -0
  78. package/src/components/Switch/index.js +221 -0
  79. package/src/components/Switch/index.js.map +1 -0
  80. package/src/components/Tooltip/index.d.ts +21 -0
  81. package/src/components/Tooltip/index.js +206 -0
  82. package/src/components/Tooltip/index.js.map +1 -0
  83. package/src/icons/AtomIcon.d.ts +2 -0
  84. package/src/icons/AtomIcon.js +85 -0
  85. package/src/icons/AtomIcon.js.map +1 -0
  86. package/src/icons/BinocularsIcon.d.ts +2 -0
  87. package/src/icons/BinocularsIcon.js +103 -0
  88. package/src/icons/BinocularsIcon.js.map +1 -0
  89. package/src/icons/FileChartColumnIncreasingIcon.d.ts +2 -0
  90. package/src/icons/FileChartColumnIncreasingIcon.js +97 -0
  91. package/src/icons/FileChartColumnIncreasingIcon.js.map +1 -0
  92. package/src/icons/FlagIcon.d.ts +2 -0
  93. package/src/icons/FlagIcon.js +71 -0
  94. package/src/icons/FlagIcon.js.map +1 -0
  95. package/src/icons/GlobeIcon.d.ts +2 -0
  96. package/src/icons/GlobeIcon.js +71 -0
  97. package/src/icons/GlobeIcon.js.map +1 -0
  98. package/src/icons/GraduationCapIcon.d.ts +2 -0
  99. package/src/icons/GraduationCapIcon.js +85 -0
  100. package/src/icons/GraduationCapIcon.js.map +1 -0
  101. package/src/icons/HandHeartIcon.d.ts +2 -0
  102. package/src/icons/HandHeartIcon.js +91 -0
  103. package/src/icons/HandHeartIcon.js.map +1 -0
  104. package/src/icons/HandshakeIcon.d.ts +2 -0
  105. package/src/icons/HandshakeIcon.js +97 -0
  106. package/src/icons/HandshakeIcon.js.map +1 -0
  107. package/src/icons/HazeIcon.d.ts +2 -0
  108. package/src/icons/HazeIcon.js +115 -0
  109. package/src/icons/HazeIcon.js.map +1 -0
  110. package/src/icons/HeartHandshakeIcon.d.ts +2 -0
  111. package/src/icons/HeartHandshakeIcon.js +71 -0
  112. package/src/icons/HeartHandshakeIcon.js.map +1 -0
  113. package/src/icons/HourglassIcon.d.ts +2 -0
  114. package/src/icons/HourglassIcon.js +91 -0
  115. package/src/icons/HourglassIcon.js.map +1 -0
  116. package/src/icons/IdCardIcon.d.ts +2 -0
  117. package/src/icons/IdCardIcon.js +97 -0
  118. package/src/icons/IdCardIcon.js.map +1 -0
  119. package/src/icons/MessageCirclePlusIcon.d.ts +2 -0
  120. package/src/icons/MessageCirclePlusIcon.js +85 -0
  121. package/src/icons/MessageCirclePlusIcon.js.map +1 -0
  122. package/src/icons/MountainSnowIcon.d.ts +2 -0
  123. package/src/icons/MountainSnowIcon.js +79 -0
  124. package/src/icons/MountainSnowIcon.js.map +1 -0
  125. package/src/icons/SnowflakeIcon.d.ts +2 -0
  126. package/src/icons/SnowflakeIcon.js +139 -0
  127. package/src/icons/SnowflakeIcon.js.map +1 -0
  128. package/src/icons/StethoscopeIcon.d.ts +2 -0
  129. package/src/icons/StethoscopeIcon.js +97 -0
  130. package/src/icons/StethoscopeIcon.js.map +1 -0
  131. package/src/icons/UserRoundIcon.d.ts +2 -0
  132. package/src/icons/UserRoundIcon.js +79 -0
  133. package/src/icons/UserRoundIcon.js.map +1 -0
  134. package/src/icons/WheatIcon.d.ts +2 -0
  135. package/src/icons/WheatIcon.js +115 -0
  136. package/src/icons/WheatIcon.js.map +1 -0
  137. package/src/icons/index.d.ts +22 -0
  138. package/src/icons/index.js +109 -0
  139. package/src/icons/index.js.map +1 -0
  140. package/src/icons/types.d.ts +16 -0
  141. package/src/icons/types.js +52 -0
  142. package/src/icons/types.js.map +1 -0
  143. package/src/index.d.ts +60 -2
  144. package/src/index.js +197 -5
  145. package/src/index.js.map +1 -1
  146. package/src/theme/ThemeContext.d.ts +258 -0
  147. package/src/theme/ThemeContext.js +15 -0
  148. package/src/theme/ThemeContext.js.map +1 -0
  149. package/src/theme/ThemeProvider.d.ts +27 -0
  150. package/src/theme/ThemeProvider.js +66 -0
  151. package/src/theme/ThemeProvider.js.map +1 -0
  152. package/src/theme/defaultTheme.d.ts +13 -0
  153. package/src/theme/defaultTheme.js +14 -0
  154. package/src/theme/defaultTheme.js.map +1 -0
  155. package/src/theme/index.d.ts +5 -0
  156. package/src/theme/index.js +26 -0
  157. package/src/theme/index.js.map +1 -0
  158. package/src/theme/mergeTheme.d.ts +7 -0
  159. package/src/theme/mergeTheme.js +40 -0
  160. package/src/theme/mergeTheme.js.map +1 -0
  161. package/src/theme/types.d.ts +25 -0
  162. package/src/theme/types.js +6 -0
  163. package/src/theme/types.js.map +1 -0
  164. package/src/theme/useTheme.d.ts +10 -0
  165. package/src/theme/useTheme.js +17 -0
  166. package/src/theme/useTheme.js.map +1 -0
  167. package/src/tokens.d.ts +253 -0
  168. package/src/tokens.js +265 -0
  169. package/src/tokens.js.map +1 -0
  170. package/src/lib/button.d.ts +0 -7
  171. package/src/lib/button.js +0 -58
  172. 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 {};